summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2013-12-01 04:28:01 +0000
committerDimitri Sokolyuk <demon@dim13.org>2013-12-01 04:28:01 +0000
commitbe479655e36da615a538aada85de198333dbb35e (patch)
tree0d8d4a4c2add76d979a3fc0d44b7badfd0fb4caf
parent40cae2aa9431bb985bdb876eec6414729e1d62c2 (diff)
encapsulate
-rw-r--r--bf.c67
1 files changed, 37 insertions, 30 deletions
diff --git a/bf.c b/bf.c
index 3413bb4..6bd9925 100644
--- a/bf.c
+++ b/bf.c
@@ -108,38 +108,11 @@ usage(void)
exit(1);
}
-int
-main(int argc, char **argv)
+void
+execute(Cell *data, char *prog)
{
- Cell *data;
- char *prog, *p;
- int dumpflag = 0;
+ char *p;
int loop;
- int c;
-
- while ((c = getopt(argc, argv, "dh")) != -1)
- switch (c) {
- case 'd':
- dumpflag = 1;
- break;
- case 'h':
- case '?':
- default:
- usage();
- /* NOTREACHED */
- }
-
- argc -= optind;
- argv += optind;
-
- if (!argc)
- return -1;
-
- prog = freadall(*argv);
- if (!prog)
- errx(1, "not found: %s", *argv);
-
- data = alloccell();
for (p = prog; *p; p++)
switch (*p) {
@@ -191,6 +164,40 @@ main(int argc, char **argv)
default:
break;
}
+}
+
+int
+main(int argc, char **argv)
+{
+ Cell *data;
+ char *prog;
+ int dumpflag = 0;
+ int c;
+
+ while ((c = getopt(argc, argv, "dh")) != -1)
+ switch (c) {
+ case 'd':
+ dumpflag = 1;
+ break;
+ case 'h':
+ case '?':
+ default:
+ usage();
+ /* NOTREACHED */
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (!argc)
+ return -1;
+
+ prog = freadall(*argv);
+ if (!prog)
+ errx(1, "not found: %s", *argv);
+
+ data = alloccell();
+ execute(data, prog);
if (dumpflag)
dumpcells(data);