reorder functions
authorLaurent Mazet <laurent.mazet@thalesgroup.com>
Tue, 19 Dec 2023 15:56:18 +0000 (16:56 +0100)
committerLaurent Mazet <laurent.mazet@thalesgroup.com>
Tue, 19 Dec 2023 15:56:18 +0000 (16:56 +0100)
bf.c

diff --git a/bf.c b/bf.c
index a3f78b58bb6aa27322f92658e37e21220ca30f36..0e331d9c4d594c38371698cbf92100b5cf9b81c9 100644 (file)
--- a/bf.c
+++ b/bf.c
@@ -39,6 +39,86 @@ int usage (int ret)
     return ret;
 }
 
+/* main process */
+
+int process (char *buffer, int nb, FILE *out) {
+    int i;
+
+    for (i = 0; (i < nb) && (buffer[i] != 0); i++) {
+
+        VERBOSE (DEBUG, fprintf (stderr, "%s: read '%c' (%u)\n", progname, buffer[i], buffer[i]));
+        switch (buffer[i]) {
+            case '>': /* increase pointer */
+                p++;
+                break;
+            case '<': /* decrease pointer */
+                p--;
+                break;
+            case '+': /* increase pointer value */
+                if ((p >= 0) && (p < MEMSIZE)) {
+                    mem[p]++;
+                } else {
+                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
+                    return 1;
+                }
+                break;
+            case '-': /* decrease pointer value */
+                if ((p >= 0) && (p < MEMSIZE)) {
+                    mem[p]--;
+                } else {
+                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
+                    return 1;
+                }
+                break;
+            case '.': /* output pointer value */
+                if ((p >= 0) && (p < MEMSIZE)) {
+                    fprintf (out, "%c", mem[p]);
+                } else {
+                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
+                    return 1;
+                }
+                break;
+            case ',': /* read a byte and store it in memory */
+                if ((p >= 0) && (p < MEMSIZE)) {
+                    mem[p] = buffer[++i];
+                } else {
+                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
+                    return 1;
+                }
+                break;
+            case '[': /* jump to right bracket if pointer is set to 0 */
+                if (mem[p] == 0) {
+                    int bracket = 1;
+                    while ((++i < nb) && (bracket > 0)) {
+                        bracket += (buffer[i] == '[') ? +1 : (buffer[i] == ']') ? -1 :0;
+                    }
+                    if (bracket) {
+                        VERBOSE (ERROR, fprintf (stderr, "%s: brace not closed\n", progname));
+                        return 1;
+                    }
+                } else {
+                    return process (buffer + i + 1, nb - i - 1, out);
+                }
+                break;
+            case ']': /* jump to left bracket if pointer is different to 0 */
+                if (mem[p] != 0) {
+                    i = -1;
+                }
+                break;
+            case '\n':
+            case '\r':
+                break;
+            default:
+                VERBOSE (WARNING, fprintf (stderr, "%s: can't understand '%c'\n", progname, buffer[i]));
+        }
+        
+        //VERBOSE (DEBUG, int _i; fprintf (stderr, "%s: p: %d mem:", progname, p); for (_i = 0; _i < MEMSIZE; _i++) fprintf (stderr, " %d", mem[_i]); fprintf (stderr, "\n"));
+
+    }
+
+    return 0;
+}
+
 /* main function */
 
 int main (int argc, char *argv[]) 
@@ -146,85 +226,6 @@ int main (int argc, char *argv[])
     return rc;
 }
 
-/* main process */
-int process (char *buffer, int nb, FILE *out) {
-    int i;
-
-    for (i = 0; (i < nb) && (buffer[i] != 0); i++) {
-
-        VERBOSE (DEBUG, fprintf (stderr, "%s: read '%c' (%u)\n", progname, buffer[i], buffer[i]));
-        switch (buffer[i]) {
-            case '>': /* increase pointer */
-                p++;
-                break;
-            case '<': /* decrease pointer */
-                p--;
-                break;
-            case '+': /* increase pointer value */
-                if ((p >= 0) && (p < MEMSIZE)) {
-                    mem[p]++;
-                } else {
-                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
-                    return 1;
-                }
-                break;
-            case '-': /* decrease pointer value */
-                if ((p >= 0) && (p < MEMSIZE)) {
-                    mem[p]--;
-                } else {
-                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
-                    return 1;
-                }
-                break;
-            case '.': /* output pointer value */
-                if ((p >= 0) && (p < MEMSIZE)) {
-                    fprintf (out, "%c", mem[p]);
-                } else {
-                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
-                    return 1;
-                }
-                break;
-            case ',': /* read a byte and store it in memory */
-                if ((p >= 0) && (p < MEMSIZE)) {
-                    mem[p] = buffer[++i];
-                } else {
-                    VERBOSE (ERROR, fprintf (stderr, "%s: invalid address (%d)\n", progname, p));
-                    return 1;
-                }
-                break;
-            case '[': /* jump to right bracket if pointer is set to 0 */
-                if (mem[p] == 0) {
-                    int bracket = 1;
-                    while ((++i < nb) && (bracket > 0)) {
-                        bracket += (buffer[i] == '[') ? +1 : (buffer[i] == ']') ? -1 :0;
-                    }
-                    if (bracket) {
-                        VERBOSE (ERROR, fprintf (stderr, "%s: brace not closed\n", progname));
-                        return 1;
-                    }
-                } else {
-                    return process (buffer + i + 1, nb - i - 1, out);
-                }
-                break;
-            case ']': /* jump to left bracket if pointer is different to 0 */
-                if (mem[p] != 0) {
-                    i = -1;
-                }
-                break;
-            case '\n':
-            case '\r':
-                break;
-            default:
-                VERBOSE (WARNING, fprintf (stderr, "%s: can't understand '%c'\n", progname, buffer[i]));
-        }
-        
-        //VERBOSE (DEBUG, int _i; fprintf (stderr, "%s: p: %d mem:", progname, p); for (_i = 0; _i < MEMSIZE; _i++) fprintf (stderr, " %d", mem[_i]); fprintf (stderr, "\n"));
-
-    }
-
-    return 0;
-}
-
 // test: bf.exe -h
 // test: bf.exe -h | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
 // test: bf.exe -_ 2> /dev/null | awk 'END { if (NR == 0) { exit(0) } else exit (1) }'