annotate delvs-master/bf.h @ 3302:f6382d5da935

<boily> pastequotes
author HackBot
date Tue, 16 Jul 2013 19:55:04 +0000
parents 276f475af97b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3122
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
1 #include <stdio.h>
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
2 #define c g->code
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
3 #define p g->pointer
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
4 #define f g->file
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
5
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
6 struct Data {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
7 const char *code;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
8 char vars[30000];
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
9 char *pointer;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
10 };
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
11
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
12 void dummyLexer(struct Data *g) { while(*c) if(*c++ == ']') return; }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
13
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
14 void lexer(struct Data *g) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
15 const char *cc = c;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
16 while(*c) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
17 switch (*c++) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
18 case '>':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
19 ++p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
20 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
21
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
22 case '<':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
23 --p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
24 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
25
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
26 case '+':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
27 ++*p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
28 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
29
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
30 case '-':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
31 --*p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
32 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
33
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
34 case '.':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
35 putchar(*p);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
36 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
37
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
38 case ',':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
39 *p = getchar();
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
40 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
41
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
42 case '[':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
43 cc = c;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
44 if(!*p) dummyLexer(g);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
45 while(*p) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
46 c = cc; // restore char position to start of loop
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
47 lexer(g);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
48 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
49 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
50
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
51 case ']':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
52 return;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
53
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
54 default:
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
55 // everything else is comments
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
56 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
57 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
58 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
59 return;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
60 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
61 /*
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
62 * Usage:
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
63 * struct Data g;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
64 * g.code = file;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
65 * g.pointer = &g.data[15000];
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
66 * lexer(&g);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
67 */