annotate delvs-master/delvs.h @ 3396:144c73519cc0

<kmc> addquote <zzo38> I think I do not understand you either.
author HackBot
date Fri, 09 Aug 2013 06:17:56 +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 #include <unistd.h>
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
3 #define c g->code
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
4 #define p g->pointer
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
5 #define f g->file
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
6 #define b g->bit
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
7
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
8 struct Data {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
9 const char *code;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
10 char vars[30000];
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
11 char *pointer;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
12 char bit;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
13 FILE *file;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
14 };
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
15
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
16 void lexer(struct Data *g) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
17 const char *cc = c;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
18 while(*c)
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
19 switch (*c++) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
20 case '>':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
21 ++p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
22 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
23
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
24 case '<':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
25 --p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
26 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
27
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
28 case '+':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
29 ++*p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
30 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
31
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
32 case '-':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
33 --*p;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
34 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
35
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
36 case '.':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
37 putchar(*p);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
38 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
39
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
40 case ',':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
41 *p = getchar();
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
42 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
43
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
44 case '[':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
45 cc = c;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
46 if(!*p) while(*c++ != ']');
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
47 while(*p) {
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
48 c = cc; // restore char position to start of loop
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
49 lexer(g);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
50 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
51 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
52
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
53 case ']':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
54 return;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
55
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
56 case ':':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
57 printf("%hhd", *p);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
58 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
59
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
60 case ';':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
61 scanf("%hhd", p);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
62 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
63
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
64 case '#':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
65 // open in read mode unless the cell is 1
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
66 if(f) fclose(f);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
67 f = fopen(p + 1, *p == 1 ? "w" : "r");
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
68 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
69
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
70 case '`':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
71 *p = fgetc(f);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
72 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
73
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
74 case '!':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
75 fputc(*p, f);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
76 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
77
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
78 case '\'':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
79 *p ^= (1 << b);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
80 b <= 0 ? b = 7 : b--;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
81 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
82
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
83 case '"':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
84 b <= 0 ? b = 7 : b--;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
85 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
86
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
87 case '\\':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
88 while(*c++ != '\n');
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
89 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
90
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
91 case '@':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
92 printf("%hhd : %hhd : %hhd : %hhd : %hhd", *(p - 2), *(p - 1), *p, *(p + 1), *(p + 2));
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
93 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
94
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
95 case '$':
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
96 sleep(*p);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
97 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
98
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
99 default:
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
100 // everything else is comments
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
101 break;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
102 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
103 }
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
104 /*
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
105 * Usage:
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
106 * struct Data g;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
107 * g.code = "code here";
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
108 * g.bit = 7;
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
109 * g.pointer = &g.data[15000];
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
110 * lexer(&g);
276f475af97b <L8D> tar xf master.tar.gz
HackBot
parents:
diff changeset
111 */