From f36154c03aab2c81c6132a1a411fa0aa30ea4e2a Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Wed, 30 Oct 2019 14:04:55 +0200 Subject: Reformat with indent -ts 2 -nut *.c --- brainfuck.c | 1084 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 542 insertions(+), 542 deletions(-) diff --git a/brainfuck.c b/brainfuck.c index d62c2a9..69dae83 100644 --- a/brainfuck.c +++ b/brainfuck.c @@ -47,717 +47,717 @@ unsigned int sp = 0; char commands[] = "+-<>,.[]cioux"; void -read_code() +read_code () { - int allocated, n, c, comment; + int allocated, n, c, comment; - allocated = 1000; - n = 0; + allocated = 1000; + n = 0; - code = (char *)malloc(allocated * sizeof(char)); - comment = 0; - while (EOF != (c = getc(prog))) + code = (char *) malloc (allocated * sizeof (char)); + comment = 0; + while (EOF != (c = getc (prog))) { - if (c == ';') /* end of code */ - break; - else if (c == '#') - comment = 1; - else if (c == '\n' || c == '\r') - comment = 0; + if (c == ';') /* end of code */ + break; + else if (c == '#') + comment = 1; + else if (c == '\n' || c == '\r') + comment = 0; - if (comment || (NULL == strchr(commands, c))) - continue; + if (comment || (NULL == strchr (commands, c))) + continue; - if (n >= allocated) + if (n >= allocated) { - allocated <<= 1; - code = (char *)realloc(code, allocated * sizeof(char)); + allocated <<= 1; + code = (char *) realloc (code, allocated * sizeof (char)); } - code[n++] = (char)c; + code[n++] = (char) c; } - if (n >= allocated) + if (n >= allocated) { - allocated *= 2; - code = (char *)realloc(code, allocated * sizeof(char)); + allocated *= 2; + code = (char *) realloc (code, allocated * sizeof (char)); } - code[n++] = '\0'; + code[n++] = '\0'; } void -init_data() +init_data () { - data = (DATATYPE *) calloc(data_size, sizeof(DATATYPE)); + data = (DATATYPE *) calloc (data_size, sizeof (DATATYPE)); } void -init_stack() +init_stack () { - stack = (unsigned int *)malloc(stack_size); + stack = (unsigned int *) malloc (stack_size); } int -inc_dp() +inc_dp () { - if (dp < data_size) + if (dp < data_size) { - ++dp; - if (dp > max_dp) - max_dp = dp; - return 1; + ++dp; + if (dp > max_dp) + max_dp = dp; + return 1; } - else + else { - fprintf(stderr, "Data overflow\n"); - return 0; + fprintf (stderr, "Data overflow\n"); + return 0; } } void -dec_dp() +dec_dp () { - if (dp > 0) - --dp; - else - fprintf(stderr, "Data underflow\n"); + if (dp > 0) + --dp; + else + fprintf (stderr, "Data underflow\n"); } void -push_cp() +push_cp () { - if (sp < stack_size) - stack[sp++] = cp; - else - fprintf(stderr, "Stack overflow\n"); + if (sp < stack_size) + stack[sp++] = cp; + else + fprintf (stderr, "Stack overflow\n"); } void -pop_cp() +pop_cp () { - if (sp > 0) - cp = stack[--sp]; - else - fprintf(stderr, "Stack underflow\n"); + if (sp > 0) + cp = stack[--sp]; + else + fprintf (stderr, "Stack underflow\n"); } int -skip() +skip () { - int ob = 0; + int ob = 0; - while (code[cp] != '\0') + while (code[cp] != '\0') { - switch (code[cp]) + switch (code[cp]) { - case '[': - ++ob; - break; - case ']': - --ob; - if (0 == ob) - return 1; + case '[': + ++ob; + break; + case ']': + --ob; + if (0 == ob) + return 1; } - ++cp; + ++cp; } - return 0; + return 0; } void -input() +input () { - switch (fmt) + switch (fmt) { - case 'i': - scanf(format, (signed int *)&(data[dp])); - break; - case 'u': - scanf(format, (unsigned int *)&(data[dp])); - break; - case 'c': - scanf(format, (char *)&(data[dp])); - break; - case 'o': - scanf(format, (unsigned int *)&(data[dp])); - break; - case 'x': - scanf(format, (unsigned int *)&(data[dp])); - break; + case 'i': + scanf (format, (signed int *) &(data[dp])); + break; + case 'u': + scanf (format, (unsigned int *) &(data[dp])); + break; + case 'c': + scanf (format, (char *) &(data[dp])); + break; + case 'o': + scanf (format, (unsigned int *) &(data[dp])); + break; + case 'x': + scanf (format, (unsigned int *) &(data[dp])); + break; } } void -print_data() +print_data () { - unsigned int i; + unsigned int i; - for (i = 0; i < dp; i++) + for (i = 0; i < dp; i++) { - printf(" "); - printf(format, data[i]); + printf (" "); + printf (format, data[i]); } - printf(" ["); - printf(format, data[dp]); - printf("]"); + printf (" ["); + printf (format, data[dp]); + printf ("]"); - for (i = dp + 1; i <= max_dp; i++) + for (i = dp + 1; i <= max_dp; i++) { - printf(" "); - printf(format, data[i]); + printf (" "); + printf (format, data[i]); } - printf("\n"); + printf ("\n"); } void -switch_format() +switch_format () { - switch (fmt) + switch (fmt) { - case 'i': - sprintf(format, "%%%c", fmt); - break; - case 'u': - sprintf(format, "%%%c", fmt); - break; - case 'c': - sprintf(format, "%%%c", fmt); - break; - case 'o': - sprintf(format, "0%%%c", fmt); - break; - case 'x': - sprintf(format, "0x%%%c", fmt); - break; + case 'i': + sprintf (format, "%%%c", fmt); + break; + case 'u': + sprintf (format, "%%%c", fmt); + break; + case 'c': + sprintf (format, "%%%c", fmt); + break; + case 'o': + sprintf (format, "0%%%c", fmt); + break; + case 'x': + sprintf (format, "0x%%%c", fmt); + break; } } void -run_code() +run_code () { - char cmd; + char cmd; - unsigned int d; + unsigned int d; - while (0 != (cmd = code[cp])) + while (0 != (cmd = code[cp])) { - switch (cmd) + switch (cmd) { - case '[': - if (data[dp]) - { - push_cp(); - ++cp; - } - else - { - skip(); - ++cp; - } - break; - case ']': - pop_cp(); - break; - case 'Z': - data[dp] = 0; - ++cp; - break; - case 'I': /* I23 -> add 22 to the current cell */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - (data[dp]) += (DATATYPE) d; - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case 'D': /* D23 -> subtract 22 from the current cell */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - (data[dp]) -= (DATATYPE) d; - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case '+': - ++(data[dp]); - ++cp; - break; - case '-': - --(data[dp]); - ++cp; - break; - case 'R': /* R3 -> move right by 3 cells */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - dp += d; - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case 'L': /* L2 -> move left by 2 cells */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - dp -= d; - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case '>': - inc_dp(); - ++cp; - break; - case '<': - dec_dp(); - ++cp; - break; - case ',': - input(); + case '[': + if (data[dp]) + { + push_cp (); ++cp; - break; - case '.': - if (!trace) - { - printf(format, data[dp]); - if (fmt != 'c') - printf(" "); - } - ++cp; - break; - case 'i': - case 'u': - case 'c': - case 'o': - case 'x': - fmt = cmd; - switch_format(); - ++cp; - break; - default: + } + else + { + skip (); ++cp; + } + break; + case ']': + pop_cp (); + break; + case 'Z': + data[dp] = 0; + ++cp; + break; + case 'I': /* I23 -> add 22 to the current cell */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + (data[dp]) += (DATATYPE) d; + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case 'D': /* D23 -> subtract 22 from the current cell */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + (data[dp]) -= (DATATYPE) d; + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case '+': + ++(data[dp]); + ++cp; + break; + case '-': + --(data[dp]); + ++cp; + break; + case 'R': /* R3 -> move right by 3 cells */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + dp += d; + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case 'L': /* L2 -> move left by 2 cells */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + dp -= d; + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case '>': + inc_dp (); + ++cp; + break; + case '<': + dec_dp (); + ++cp; + break; + case ',': + input (); + ++cp; + break; + case '.': + if (!trace) + { + printf (format, data[dp]); + if (fmt != 'c') + printf (" "); + } + ++cp; + break; + case 'i': + case 'u': + case 'c': + case 'o': + case 'x': + fmt = cmd; + switch_format (); + ++cp; + break; + default: + ++cp; } - if (trace && cmd != ' ') + if (trace && cmd != ' ') { - fprintf(stderr, "%c:", cmd); - print_data(); + fprintf (stderr, "%c:", cmd); + print_data (); } } } void -optimize_code() +optimize_code () { - char *new_code, *substr; + char *new_code, *substr; - unsigned int i, j, k; + unsigned int i, j, k; - DATATYPE d; + DATATYPE d; - char tmp[64], cmd; + char tmp[64], cmd; - new_code = calloc(strlen(code) + 1, sizeof(char)); + new_code = calloc (strlen (code) + 1, sizeof (char)); - i = j = 0; - while (0 != (cmd = code[i])) + i = j = 0; + while (0 != (cmd = code[i])) { - switch (cmd) + switch (cmd) { - case '+': - case '-': /* compress ++--+---+... */ - d = 0; - while (0 != (cmd = code[i])) - { - if (cmd == '+') - ++d; - else if (cmd == '-') - --d; - else - break; - ++i; - } - if (d == 1) - new_code[j++] = '+'; - else if (d == -1) - new_code[j++] = '-'; - else if (d != 0) - { - if (d < 0) - sprintf(tmp, "D%u", -d); - else - sprintf(tmp, "I%u", d); - k = 0; - while (tmp[k]) - new_code[j++] = tmp[k++]; - } - break; - case '>': - case '<': /* compress >><<>>>>> */ - d = 0; - while (0 != (cmd = code[i])) - { - if (cmd == '>') - ++d; - else if (cmd == '<') - --d; - else - break; - ++i; - } - if (d == 1) - new_code[j++] = '>'; - else if (d == -1) - new_code[j++] = '<'; - else if (d != 0) - { - if (d < 0) - sprintf(tmp, "L%u", -d); /* move left by d */ - else - sprintf(tmp, "R%u", d); /* move right by d */ - k = 0; - while (tmp[k]) - new_code[j++] = tmp[k++]; - } - break; - default: - new_code[j++] = code[i++]; + case '+': + case '-': /* compress ++--+---+... */ + d = 0; + while (0 != (cmd = code[i])) + { + if (cmd == '+') + ++d; + else if (cmd == '-') + --d; + else + break; + ++i; + } + if (d == 1) + new_code[j++] = '+'; + else if (d == -1) + new_code[j++] = '-'; + else if (d != 0) + { + if (d < 0) + sprintf (tmp, "D%u", -d); + else + sprintf (tmp, "I%u", d); + k = 0; + while (tmp[k]) + new_code[j++] = tmp[k++]; + } + break; + case '>': + case '<': /* compress >><<>>>>> */ + d = 0; + while (0 != (cmd = code[i])) + { + if (cmd == '>') + ++d; + else if (cmd == '<') + --d; + else + break; + ++i; + } + if (d == 1) + new_code[j++] = '>'; + else if (d == -1) + new_code[j++] = '<'; + else if (d != 0) + { + if (d < 0) + sprintf (tmp, "L%u", -d); /* move left by d */ + else + sprintf (tmp, "R%u", d); /* move right by d */ + k = 0; + while (tmp[k]) + new_code[j++] = tmp[k++]; + } + break; + default: + new_code[j++] = code[i++]; } } - /* - * FIXME valid while we use finite integers - */ - substr = new_code; - while (NULL != (substr = strstr(substr, "[-]"))) + /* + * FIXME valid while we use finite integers + */ + substr = new_code; + while (NULL != (substr = strstr (substr, "[-]"))) { - strncpy(substr, "Z ", 3); /* [-] set current cell to 0 */ + strncpy (substr, "Z ", 3); /* [-] set current cell to 0 */ } - substr = new_code; - while (NULL != (substr = strstr(substr, "[+]"))) + substr = new_code; + while (NULL != (substr = strstr (substr, "[+]"))) { - strncpy(substr, "Z ", 3); /* [-] set current cell to 0 */ + strncpy (substr, "Z ", 3); /* [-] set current cell to 0 */ } - free(code); - code = new_code; + free (code); + code = new_code; } void -bf2c() +bf2c () { - char cmd; + char cmd; - unsigned int d; + unsigned int d; - printf("#include \n#include \n\n"); - printf("%s data[%u];\n", DATATYPE_STR, data_size); - printf("unsigned int dp = 0;\n\n"); - printf("int main()\n{\n"); + printf ("#include \n#include \n\n"); + printf ("%s data[%u];\n", DATATYPE_STR, data_size); + printf ("unsigned int dp = 0;\n\n"); + printf ("int main()\n{\n"); - while ('\0' != (cmd = code[cp])) + while ('\0' != (cmd = code[cp])) { - switch (cmd) + switch (cmd) { - case 'Z': - printf("data[dp] = 0;\n"); - ++cp; - break; - case '[': - printf("while (data[dp])\n{\n"); - ++cp; - break; - case ']': - printf("}\n"); - ++cp; - break; - case 'I': /* I23 -> add 22 to the current cell */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - printf("data[dp] += %u;\n", d); - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case 'D': /* D23 -> subtract 22 from the current cell */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - printf("data[dp] -= %u;\n", d); - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case '+': - printf("++(data[dp]);\n"); - ++cp; - break; - case '-': - printf("--(data[dp]);\n"); - ++cp; - break; - case 'R': /* R3 -> move right by 3 cells */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - printf("dp += %u;\n", d); - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case 'L': /* L2 -> move left by 2 cells */ - ++cp; - sscanf(&(code[cp]), "%u", &d); - printf("dp -= %u;\n", d); - while (code[cp] >= '0' && code[cp] <= '9') - ++cp; /* skip digits */ - break; - case '>': - printf("++dp;\n"); - ++cp; + case 'Z': + printf ("data[dp] = 0;\n"); + ++cp; + break; + case '[': + printf ("while (data[dp])\n{\n"); + ++cp; + break; + case ']': + printf ("}\n"); + ++cp; + break; + case 'I': /* I23 -> add 22 to the current cell */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + printf ("data[dp] += %u;\n", d); + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case 'D': /* D23 -> subtract 22 from the current cell */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + printf ("data[dp] -= %u;\n", d); + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case '+': + printf ("++(data[dp]);\n"); + ++cp; + break; + case '-': + printf ("--(data[dp]);\n"); + ++cp; + break; + case 'R': /* R3 -> move right by 3 cells */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + printf ("dp += %u;\n", d); + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case 'L': /* L2 -> move left by 2 cells */ + ++cp; + sscanf (&(code[cp]), "%u", &d); + printf ("dp -= %u;\n", d); + while (code[cp] >= '0' && code[cp] <= '9') + ++cp; /* skip digits */ + break; + case '>': + printf ("++dp;\n"); + ++cp; + break; + case '<': + printf ("--dp;\n"); + ++cp; + break; + case ',': + switch (fmt) + { + case 'i': + printf ("scanf(\"%s\", (signed int *)&(data[dp]));\n", format); break; - case '<': - printf("--dp;\n"); - ++cp; + case 'u': + printf ("scanf(\"%s\", (unsigned int *)&(data[dp]));\n", + format); break; - case ',': - switch (fmt) - { - case 'i': - printf("scanf(\"%s\", (signed int *)&(data[dp]));\n", - format); - break; - case 'u': - printf("scanf(\"%s\", (unsigned int *)&(data[dp]));\n", - format); - break; - case 'c': - printf("scanf(\"%s\", (char *)&(data[dp]));\n", format); - break; - case 'o': - printf("scanf(\"%s\", (unsigned int *)&(data[dp]));\n", - format); - break; - case 'x': - printf("scanf(\"%s\", (unsigned int *)&(data[dp]));\n", - format); - break; - } - ++cp; + case 'c': + printf ("scanf(\"%s\", (char *)&(data[dp]));\n", format); break; - case '.': - if (fmt == 'c') - printf("printf(\"%s\", data[dp]);\n", format); - else - printf("printf(\"%s \", data[dp]);\n", format); - ++cp; + case 'o': + printf ("scanf(\"%s\", (unsigned int *)&(data[dp]));\n", + format); break; - case 'i': - case 'u': - case 'c': - case 'o': - case 'x': - fmt = cmd; - switch_format(); - ++cp; + case 'x': + printf ("scanf(\"%s\", (unsigned int *)&(data[dp]));\n", + format); break; - default: - ++cp; + } + ++cp; + break; + case '.': + if (fmt == 'c') + printf ("printf(\"%s\", data[dp]);\n", format); + else + printf ("printf(\"%s \", data[dp]);\n", format); + ++cp; + break; + case 'i': + case 'u': + case 'c': + case 'o': + case 'x': + fmt = cmd; + switch_format (); + ++cp; + break; + default: + ++cp; } } - printf("exit(EXIT_SUCCESS);\n}\n"); + printf ("exit(EXIT_SUCCESS);\n}\n"); } void -bf2moo() +bf2moo () { - char cmd; + char cmd; - while ('\0' != (cmd = code[cp])) + while ('\0' != (cmd = code[cp])) { - switch (cmd) + switch (cmd) { - case '+': - printf("MoO"); - break; - case '-': - printf("MOo"); - break; - case '>': - printf("moO"); - break; - case '<': - printf("mOo"); - break; - case '[': - if (strncmp(code + cp, "[-]", 3) == 0) - { - printf("OOO"); - cp += 2; - } - else - { - printf("moo"); - } - break; - case ']': - printf("MOO"); - break; - case '.': - printf("OOM"); - break; - case ',': - printf("oom"); - break; - default: - fprintf(stderr, "unknown character %c at %u\n", cmd, cp); - break; + case '+': + printf ("MoO"); + break; + case '-': + printf ("MOo"); + break; + case '>': + printf ("moO"); + break; + case '<': + printf ("mOo"); + break; + case '[': + if (strncmp (code + cp, "[-]", 3) == 0) + { + printf ("OOO"); + cp += 2; + } + else + { + printf ("moo"); + } + break; + case ']': + printf ("MOO"); + break; + case '.': + printf ("OOM"); + break; + case ',': + printf ("oom"); + break; + default: + fprintf (stderr, "unknown character %c at %u\n", cmd, cp); + break; } - ++cp; + ++cp; } - printf("\n"); + printf ("\n"); } void -free_all() +free_all () { - if (code != NULL) - free(code); - if (data != NULL) - free(data); - if (stack != NULL) - free(stack); + if (code != NULL) + free (code); + if (data != NULL) + free (data); + if (stack != NULL) + free (stack); } void -usage(char *self) +usage (char *self) { - printf("%s: Brainfuck programming language interpreter\n", self); - printf("See for more details\n\n"); - - printf("Usage: %s [options] [file]\n\n", self); - - printf("Size of each data cell is %lu byte(s)\n", - (long unsigned int)sizeof(DATATYPE)); - printf("All data cells are zeros initially\n\n"); - printf("Options (defaults are in brackets):\n"); - printf(" -s num stack size (%u)\n", stack_size); - printf(" -d num data size (%u)\n", data_size); - printf(" -t trace execution for debugging\n"); - printf(" -O optimize code\n"); - printf(" -C translate into C (to stdout)\n"); - printf(" -p cow translate into Cow (to stdout)\n"); - printf("\n"); - printf("Formats for operators '.' and ',' (output and input):\n"); - printf - (" -c, -i, -u, -o, -x char, signed int, unsigned int, octal, hexadecimal\n"); - printf - (" octal number must be prepended by '0' (zero),\n"); - printf(" and hexadecimal - by '0x'\n"); - printf("Default i/o format -%c\n", fmt); - printf("\n"); - printf(" -h this help message\n"); - printf("\n"); - printf(" file file to execute,\n"); - printf(" if omitted read stdin\n"); - printf("\n"); - printf("Standard operators: <>+-[].,\n"); - printf("Extensions:\n"); - printf - (" ciuox - change i/o format (same as -c & others above)\n"); - printf(" ; - end of code (useful when reading stdin)\n"); - printf - (" # - comment to the end of line (useful when reading files)\n"); - printf("\n"); - printf("Examples:\n"); - printf(" echo '+++[.-]' | %s # count down from 3 to 1\n", self); - printf(" echo ',+++.;5' | %s # shows 8\n", self); - printf(" echo ',>,<[->+<]>.;4 5' | %s # shows 4+5=9\n", self); - printf(" echo 'c,u.;h' | %s # shows 104 (ASCII code for 'h')\n", self); - printf(" echo ', [-[->+<]>];4' | %s -t # move data pointer by 4 \n", self); - printf - (" echo ',>,< [> [->+<] < -[->+<]> ]; 3 7' | %s -t # move '7' by 3 \n\n", - self); - - exit(EXIT_SUCCESS); + printf ("%s: Brainfuck programming language interpreter\n", self); + printf + ("See for more details\n\n"); + + printf ("Usage: %s [options] [file]\n\n", self); + + printf ("Size of each data cell is %lu byte(s)\n", + (long unsigned int) sizeof (DATATYPE)); + printf ("All data cells are zeros initially\n\n"); + printf ("Options (defaults are in brackets):\n"); + printf (" -s num stack size (%u)\n", stack_size); + printf (" -d num data size (%u)\n", data_size); + printf (" -t trace execution for debugging\n"); + printf (" -O optimize code\n"); + printf (" -C translate into C (to stdout)\n"); + printf (" -p cow translate into Cow (to stdout)\n"); + printf ("\n"); + printf ("Formats for operators '.' and ',' (output and input):\n"); + printf + (" -c, -i, -u, -o, -x char, signed int, unsigned int, octal, hexadecimal\n"); + printf + (" octal number must be prepended by '0' (zero),\n"); + printf (" and hexadecimal - by '0x'\n"); + printf ("Default i/o format -%c\n", fmt); + printf ("\n"); + printf (" -h this help message\n"); + printf ("\n"); + printf (" file file to execute,\n"); + printf (" if omitted read stdin\n"); + printf ("\n"); + printf ("Standard operators: <>+-[].,\n"); + printf ("Extensions:\n"); + printf + (" ciuox - change i/o format (same as -c & others above)\n"); + printf (" ; - end of code (useful when reading stdin)\n"); + printf + (" # - comment to the end of line (useful when reading files)\n"); + printf ("\n"); + printf ("Examples:\n"); + printf (" echo '+++[.-]' | %s # count down from 3 to 1\n", self); + printf (" echo ',+++.;5' | %s # shows 8\n", self); + printf (" echo ',>,<[->+<]>.;4 5' | %s # shows 4+5=9\n", self); + printf (" echo 'c,u.;h' | %s # shows 104 (ASCII code for 'h')\n", self); + printf (" echo ', [-[->+<]>];4' | %s -t # move data pointer by 4 \n", self); + printf + (" echo ',>,< [> [->+<] < -[->+<]> ]; 3 7' | %s -t # move '7' by 3 \n\n", + self); + + exit (EXIT_SUCCESS); } int -main(int argc, char **argv) +main (int argc, char **argv) { - char *filename; + char *filename; - char *self = argv[0]; + char *self = argv[0]; - int opt; + int opt; - while (-1 != (opt = getopt(argc, argv, "p:OCts:d:h?iucox"))) + while (-1 != (opt = getopt (argc, argv, "p:OCts:d:h?iucox"))) { - switch (opt) + switch (opt) { - case 'p': - print_as = optarg; - break; - case 's': - sscanf(optarg, "%u", &stack_size); - break; - case 'd': - sscanf(optarg, "%u", &data_size); - break; - case 't': - trace = 1; - break; - case 'C': - compile = 1; - break; - case 'O': - optimize = 1; - break; - case 'i': - case 'u': - case 'c': - case 'o': - case 'x': - fmt = opt; - switch_format(); - break; - default: - usage(self); + case 'p': + print_as = optarg; + break; + case 's': + sscanf (optarg, "%u", &stack_size); + break; + case 'd': + sscanf (optarg, "%u", &data_size); + break; + case 't': + trace = 1; + break; + case 'C': + compile = 1; + break; + case 'O': + optimize = 1; + break; + case 'i': + case 'u': + case 'c': + case 'o': + case 'x': + fmt = opt; + switch_format (); + break; + default: + usage (self); } } - if (optind < argc) + if (optind < argc) { - filename = argv[optind]; - if (NULL == (prog = fopen(filename, "r"))) + filename = argv[optind]; + if (NULL == (prog = fopen (filename, "r"))) { - fprintf(stderr, "%s: open '%s': %s\n", self, filename, - strerror(errno)); - exit(EXIT_FAILURE); + fprintf (stderr, "%s: open '%s': %s\n", self, filename, + strerror (errno)); + exit (EXIT_FAILURE); } } - else + else { - prog = stdin; + prog = stdin; } - read_code(); + read_code (); - if (prog != stdin) - fclose(prog); + if (prog != stdin) + fclose (prog); - if (optimize) - optimize_code(); + if (optimize) + optimize_code (); - if (compile) + if (compile) { - bf2c(); + bf2c (); } - else if (print_as != NULL) + else if (print_as != NULL) { - if (strcmp(print_as, "cow") == 0) + if (strcmp (print_as, "cow") == 0) { - bf2moo(); + bf2moo (); } - else + else { - fprintf(stderr, "Unknown argument to -p: %s\n", print_as); + fprintf (stderr, "Unknown argument to -p: %s\n", print_as); } } - else + else { - init_data(); - init_stack(); - run_code(); + init_data (); + init_stack (); + run_code (); } - free_all(); - return EXIT_SUCCESS; + free_all (); + return EXIT_SUCCESS; } -- cgit v1.2.3