Your message dated Sun, 1 Jul 2018 23:48:04 +0200
with message-id <20180701214804.GA17706@arya>
and subject line Re: Bug#695502: beef: Add support for EsoAPI
has caused the Debian Bug report #695502,
regarding beef: Add support for EsoAPI
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
695502: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=695502
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: beef
Version: 0.0.6-2
Severity: wishlist
Tags: patch

There is an extension to Brainfuck (as well as other esoterical
languages)
called EsoAPI (mentioned http://esolangs.org/wiki/EsoAPI, defined
http://kidsquid. 99k .org/programs/esoapi/esoapi.html, example
implemention http://esolangs.org/wiki/User:JayCampbell/weave.rb).

I've attached a patch to add support for this API to the beef source.
I haven't yet done it for the version in experimental (1.0.0) yet.

You can test via the attache esoapi-hello.bf. Before the patch it will
print "EsoAPI required\n", and after the patch will print "Hello
World!\n"

Cheers,

Hugh

-- System Information:
Debian Release: 6.0.6
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_NZ.UTF-8, LC_CTYPE=en_NZ.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages beef depends on:
ii libc6 2.11.3-4 Embedded GNU C Library: Shared lib

beef recommends no packages.

beef suggests no packages.

-- no debconf information

*** beef-esoapi.patch
commit 9c0ddfd01eeee319544e5861cf9678a554f56f4e
Author: Hugh Davenport <[email protected]>
Date:   Sun Dec 9 22:55:39 2012 +1300

    Add EsoAPI

diff --git a/src/beef.h b/src/beef.h
index b3937f1..5bb7309 100644
--- a/src/beef.h
+++ b/src/beef.h
@@ -26,6 +26,8 @@
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
+#include <unistd.h>
+#include <fcntl.h>

 /* Program name and version */
 #define PROGRAM_NAME "beef"
@@ -42,6 +44,8 @@
 #define ON '1'
 #define OFF '0'

+#define SECTOR_SIZE 512
+
 /* This struct defines an istruction */
 struct instruction {
   char type;
@@ -66,7 +70,7 @@ struct instruction *code;
 /* Various functions */
 struct tape_cell *new_cell ();
 struct instruction *load (FILE *fp, char debug);
-void eval (struct instruction *code, char on_eof);
+void eval (struct instruction *code, char on_eof, int esoapidsk, char lastprinted);
 void tape_dump ();
 void code_dump (struct instruction *code, long indent);

diff --git a/src/eval.c b/src/eval.c
index 38c9038..7aedafa 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -20,9 +20,12 @@

 #include "beef.h"

-void eval (struct instruction *current, char on_eof)
+void eval (struct instruction *current, char on_eof, int esoapidsk, char lastprinted)
 {
-  long i;
+  long i, j;
+  ssize_t size;
+  struct tape_cell *temp;
+  char buffer[SECTOR_SIZE];

   /* Continue as long as the istruction is not the last */
   while (current->type != ']') {
@@ -73,8 +76,53 @@ void eval (struct instruction *current, char on_eof)
       case '.':
         /* Repeat current->quantity times */
         for (i = 0; i < (current->quantity); i++) {
-          /* Print the char which is in the current cell */
-          fputc (tape->content, stdout);
+          if (esoapidsk != -1 && lastprinted == 0) {
+            switch (tape->content) {
+              case 1:
+                lseek (esoapidsk, SECTOR_SIZE, SEEK_CUR);
+                break;
+              case 2:
+                lseek (esoapidsk, -SECTOR_SIZE, SEEK_CUR);
+                break;
+              case 3:
+                size = read (esoapidsk, buffer, SECTOR_SIZE);
+                /* temp points to the current cell */
+                temp = tape;
+                for (j = 0; j < size; j++) {
+                  if (temp->next == NULL) {
+                    /* Create new cell if necessary */
+                    temp->next = new_cell ();
+                    (temp->next)->previous = temp;
+                  }
+                  /* Move forward one cell */
+                  temp = temp->next;
+                  temp->content = buffer[j];
+                }
+                break;
+              case 4:
+                /* temp points to the current cell */
+                temp = tape;
+ for (size = 0; temp->next != NULL && size < SECTOR_SIZE; size++) {
+                  temp = temp->next;
+                  buffer[size] = temp->content;
+                }
+                write (esoapidsk, buffer, size);
+                break;
+              case 5:
+                lseek (esoapidsk, 0, SEEK_SET);
+                break;
+              case 8:
+                tape->content = 0;
+                break;
+              default:
+                /* Print the char which is in the current cell */
+                fputc (tape->content, stdout);
+            }
+          } else {
+            /* Print the char which is in the current cell */
+            fputc (tape->content, stdout);
+          }
+          lastprinted = tape->content;
         }
         break;
       case ',':
@@ -107,7 +155,7 @@ void eval (struct instruction *current, char on_eof)
         /* Repeat as long as the current cell is not empty */
         while (tape->content != '\0') {
           /* Run the loop */
-          eval (current->loop, on_eof);
+          eval (current->loop, on_eof, esoapidsk, lastprinted);
         }
         break;

diff --git a/src/main.c b/src/main.c
index 89d0dcc..f406fa2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -30,6 +30,9 @@ int main (int argc, char **argv)
   char on_eof = STORE_ZERO;
   /* Debug on/off (default is off)  */
   char debug = OFF;
+  /* EsoAPI on/off (default is off)  */
+  char esoapi = OFF;
+  int esoapidsk = -1;
   int count;
   int num;

@@ -51,6 +54,7 @@ Options:\n\
-e Store an EOF in the current cell when read an EOF from input\n\
   -n          Do nothing when read an EOF from input\n\
-d Enable the debugging command `#' (which dumps the tape)\n\
+  -a          Enable EsoAPI support, reading from file esoapi.dsk\n\
   --version   Show version number and exit successfully\n\
   --help      Show this help and exit succesfully\n", PROGRAM_NAME);
       return 0;
@@ -71,6 +75,19 @@ Copyright (C) 2005-2007 KiyuKo\n", PROGRAM_NAME, VERSION);
         on_eof = DO_NOTHING;
       if (!strcmp (argv[num], "-d"))
         debug = ON;
+      if (!strcmp (argv[num], "-a"))
+        esoapi = ON;
+    }
+
+    /* Try to open esoapi.dsk */
+    if (esoapi == ON) {
+      esoapidsk = open ("esoapi.dsk", O_RDWR|O_CREAT, 0666);
+      if (esoapidsk == -1) {
+        /* Print an error message and disable EsoAPI */
+ fprintf (stderr, "%s: Could not open esoapi.dsk, turning off EsoAPI support\n",
+                         PROGRAM_NAME);
+        esoapi = OFF;
+      }
     }

     /* Try to open the input file */
@@ -93,7 +110,11 @@ Copyright (C) 2005-2007 KiyuKo\n", PROGRAM_NAME, VERSION);
       /* code_dump (code, 0); */

       /* Start executing the code */
-      eval (code, on_eof);
+      eval (code, on_eof, esoapidsk, -1);
+
+      if (esoapidsk != -1) {
+        close (esoapidsk);
+      }
     }
   }
   /* Exit with success */

*** esoapi-hello.bf
+>.++++++++.[
++++++[>++>+++++>++++++++>+++++++>+<<<<<-]>>-.>+++.----.<----.+++++++++++++++.-------.<++++.>>+++.>+++.<-.++++.>++++.<---.>----.-.>-.---.>>]
<[
EsoAPI comapatible
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.<<<<<
-]

--- End Message ---
--- Begin Message ---
As mentioned in the last, far from recent status update, the patch
is not even remotely applicable to the version currently in Debian;
with my upstream hat on, I'm not particularly interested in coding
or maintaining the support myself.

Moreover, according to the relevant entry on the esolang wiki[1],
it would seem that EsoAPI itself might have been superseded by a
newer specification called PESOIX; it should also be mentioned
that finding decent documentation on either without resorting to
the Wayback Machine is very challenging, leading me to believe
neither has ever achieved widespread support.

Given the above, it seems more reasonable to close the bug rather
than keeping it around in the off-chance that something will
eventually be done about it.


[1] https://esolangs.org/wiki/EsoAPI
-- 
Andrea Bolognani <[email protected]>
Resistance is futile, you will be garbage collected.

Attachment: signature.asc
Description: PGP signature


--- End Message ---

Reply via email to