X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=calc.c;h=6950ad57522676c10055730e805f0baf89681d2e;hb=f438579a2cbd62640bf5478026765baf04099cbb;hp=873e3103d87dc60de6fcd39074716da3069ef512;hpb=2a5ec9d1e2e19f934a02d0b697b01ae12ebc313f;p=calc.git diff --git a/calc.c b/calc.c index 873e310..6950ad5 100644 --- a/calc.c +++ b/calc.c @@ -176,8 +176,6 @@ int main (int argc, char *argv[]) } else if (strcmp (buffer, ".") == 0) { break; } - line[0] = buffer; - nb = 1; /* add line into history */ add_history (buffer); @@ -190,21 +188,27 @@ int main (int argc, char *argv[]) } } } else { + printf ("%s", iprompt); if (read (STDIN_FILENO, buffer, BUFFER_SIZE) == 0) { break; } - nb = 0; - char *pt = line[nb++] = buffer; - while (*pt != '\0') { - if (*pt == '\n') { - *pt = '\0'; - line[nb++] = pt + 1; - } - pt++; - } VERBOSE (INFO, fprintf (stdout, "line: '%s'\n", buffer)); } + /* pre-process buffer */ + nb = 0; + char *pt = line[nb++] = buffer; + while (*pt != '\0') { + switch (*pt) { + case '\n': + *pt = '\0'; + // fallthrough + case ';': + line[nb++] = pt + 1; + } + pt++; + } + /* look for end of line */ for (i = 0; i < nb; i++) { if (*line[i] == '\0') { @@ -212,12 +216,14 @@ int main (int argc, char *argv[]) } element_t *element = parser (line[i], NULL, -9); if (element == ERROR_OP) { - VERBOSE (WARNING, fprintf (stdout, "error while parsing: '%s'\n", line[i]); fflush (stdout)); + VERBOSE (WARNING, fprintf (stdout, "error while parsing: '%s'\n", line[i])); ret = 1; } else if (element != NULL) { VERBOSE (INFO, print_element (element, 0)); answer = evaluate_element (element, 0); - print (answer); + if (!element->hidden) { + print (answer); + } delelement (element); ret = 0; } @@ -285,7 +291,7 @@ int main (int argc, char *argv[]) // test: echo "-cos (0) + 1" | calc.exe | grep -q '=> -0' // test: echo "-cos(0)+1" | calc.exe | grep -q '=> -0' // test: echo "quit" | calc.exe | grep -q 'bye' -// test: echo "help" | calc.exe | grep -q 'miscellaneous' +// test: echo "help" | calc.exe | grep -q 'misc\.' // test: echo "1 + 2 *" | calc.exe | grep -q 'error' // test: echo "* 1 - 2" | calc.exe | grep -q 'error' // test: echo "2 + * 3" | calc.exe | grep -q 'error' @@ -360,14 +366,21 @@ int main (int argc, char *argv[]) // test: echo -e '1 }\n1 )\n1 , 2\n ' | calc.exe | grep -c error | xargs test 3 = // test: echo -e 'print (1)' | calc.exe -v 3 | grep -q Print // test: echo -e 'si\t\t (pi / 2)' | calc.exe | grep -q '=> 1' +// test: echo -e '1 + 1;\nans + 1' | calc.exe | grep -qv 2 +// test: echo -e 'mem (3)\nsto (4, pi)' | calc.exe | grep -q "invalid index" +// test: echo -e 'disp' | calc.exe | grep -q "storage: 0 0 0 0 0 0 0 0 0 0" +// test: echo -e 'sto (3, 10)\ndisp' | calc.exe | grep -q "storage: 0 0 10 0 0 0 0 0 0 0" +// test: echo -e 'rcl (3)\ndisp' | calc.exe | grep -q "storage: 0 0 0 0 0 0 0 0 0 0" +// test: echo -e 'inc (2)\ndisp' | calc.exe | grep -q "storage: 0 1 0 0 0 0 0 0 0 0" +// test: echo -e 'dec (2)\ndisp' | calc.exe | grep -q "storage: 0 -1 0 0 0 0 0 0 0 0" // Gauss sequence -// test: echo -e '{sto (1, 0), sto (10, 0), while (inc (10) < 100, {sto (1, rcl (1) + rcl (10)), print (rcl (1))})}' | calc.exe | grep -q '=> 5050' +// test: echo -e '{sto (1, 0), sto (10, 0), while (inc (10) < 100, {sto (1, rcl (1) + rcl (10)), print (rcl (1))})};' | calc.exe | grep -q '=> 5050' // Fibonacci sequence -// test: echo -e '{sto (1, 1), sto (2, 1), sto (10, 1), while (inc (10) < 12 - 1, {sto (3, rcl (1) + rcl (2)), sto (1, rcl (2)), print (sto (2, rcl (3)))})}' | calc.exe | grep -q '=> 144' +// test: echo -e '{sto (1, 1), sto (2, 1), sto (10, 1), while (inc (10) < 12 - 1, {sto (3, rcl (1) + rcl (2)), sto (1, rcl (2)), print (sto (2, rcl (3)))})};' | calc.exe | grep -q '=> 144' // Gold number -// test: echo -e '{sto (1, 1), sto (2, 1), sto (10, 1), while (inc (10) < 15 - 1, {sto (3, rcl (1) + rcl (2)), sto (1, rcl (2)), print (sto (2, rcl (3)) / rcl (1))})}' | calc.exe | grep -q '=> 1.61803' +// test: echo -e '{sto (1, 1), sto (2, 1), sto (10, 1), while (inc (10) < 15 - 1, {sto (3, rcl (1) + rcl (2)), sto (1, rcl (2)), print (sto (2, rcl (3)) / rcl (1))})};' | calc.exe | grep -q '=> 1.61803' /* vim: set ts=4 sw=4 et: */