Mercurial > repo
annotate share/delvs-master/delvs.h @ 4799:c929c11c7ea2
<oerjan> sed -i \'s/\xc2\xb0/\xc2\xb0\xe2\x80\x8b/\' wisdom/\'misspellings of croissant\'
author | HackBot |
---|---|
date | Wed, 10 Sep 2014 12:05:08 +0000 |
parents | 38a5b4d8a98e |
children |
rev | line source |
---|---|
3840
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
1 #include <stdio.h> |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
2 #include <unistd.h> |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
3 #define c g->code |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
4 #define p g->pointer |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
5 #define f g->file |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
6 #define b g->bit |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
7 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
8 struct Data { |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
9 const char *code; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
10 char vars[30000]; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
11 char *pointer; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
12 char bit; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
13 FILE *file; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
14 }; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
15 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
16 void lexer(struct Data *g) { |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
17 const char *cc = c; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
18 while(*c) |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
19 switch (*c++) { |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
20 case '>': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
21 ++p; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
22 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
23 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
24 case '<': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
25 --p; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
26 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
27 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
28 case '+': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
29 ++*p; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
30 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
31 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
32 case '-': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
33 --*p; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
34 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
35 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
36 case '.': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
37 putchar(*p); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
38 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
39 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
40 case ',': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
41 *p = getchar(); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
42 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
43 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
44 case '[': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
45 cc = c; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
46 if(!*p) while(*c++ != ']'); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
47 while(*p) { |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
48 c = cc; // restore char position to start of loop |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
49 lexer(g); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
50 } |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
51 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
52 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
53 case ']': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
54 return; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
55 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
56 case ':': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
57 printf("%hhd", *p); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
58 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
59 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
60 case ';': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
61 scanf("%hhd", p); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
62 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
63 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
64 case '#': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
65 // open in read mode unless the cell is 1 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
66 if(f) fclose(f); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
67 f = fopen(p + 1, *p == 1 ? "w" : "r"); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
68 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
69 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
70 case '`': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
71 *p = fgetc(f); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
72 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
73 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
74 case '!': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
75 fputc(*p, f); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
76 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
77 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
78 case '\'': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
79 *p ^= (1 << b); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
80 b <= 0 ? b = 7 : b--; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
81 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
82 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
83 case '"': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
84 b <= 0 ? b = 7 : b--; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
85 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
86 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
87 case '\\': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
88 while(*c++ != '\n'); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
89 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
90 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
91 case '@': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
92 printf("%hhd : %hhd : %hhd : %hhd : %hhd", *(p - 2), *(p - 1), *p, *(p + 1), *(p + 2)); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
93 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
94 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
95 case '$': |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
96 sleep(*p); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
97 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
98 |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
99 default: |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
100 // everything else is comments |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
101 break; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
102 } |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
103 } |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
104 /* |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
105 * Usage: |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
106 * struct Data g; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
107 * g.code = "code here"; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
108 * g.bit = 7; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
109 * g.pointer = &g.data[15000]; |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
110 * lexer(&g); |
38a5b4d8a98e
<oerjan> rm -R share/delvs-master; mv delvs-master share
HackBot
parents:
diff
changeset
|
111 */ |