summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2009-04-28 01:23:26 +0000
committerDimitri Sokolyuk <demon@dim13.org>2009-04-28 01:23:26 +0000
commit439068eea4ff405c9f914090da42d9220893af5d (patch)
treec4a646f996c8dbabcc22f1575aa0716be2302d5e
parent042006be35e7bd63f6a29c1e0729def19288e2db (diff)
store only program chars
-rw-r--r--bf.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/bf.c b/bf.c
index eccfb93..03dc3fe 100644
--- a/bf.c
+++ b/bf.c
@@ -59,22 +59,31 @@ main(int argc, char **argv)
progp = &prog;
p = NULL;
- while ((ch = fgetc(fd)) != EOF) {
- *progp = alloccell();
- (*progp)->value = ch;
- (*progp)->prev = p;
- p = *progp;
- progp = &(*progp)->next;
- }
+ while ((ch = fgetc(fd)) != EOF)
+ switch (ch) {
+ case '>':
+ case '<':
+ case '+':
+ case '-':
+ case ',':
+ case '.':
+ case '[':
+ case ']':
+ *progp = alloccell();
+ (*progp)->value = ch;
+ (*progp)->prev = p;
+ p = *progp;
+ progp = &(*progp)->next;
+ break;
+ default:
+ break;
+ }
fclose(fd);
data = alloccell();
- for (p = prog; p; p = p->next) {
-#if debug
- fprintf(stderr, "\t%c: %ud\n", p->value, data->value);
-#endif
+ for (p = prog; p; p = p->next)
switch (p->value) {
case '>':
if (!data->next) {
@@ -120,7 +129,7 @@ main(int argc, char **argv)
default:
break;
}
- }
+
quit:
return 0;
}