annotate share/delvs-master/delvs.h @ 12257:1924fe176291 draft

<fizzie> ` sed -e \'s|wisdom|bin|\' < ../bin/cwlprits > ../bin/cblprits; chmod a+x ../bin/cblprits
author HackEso <hackeso@esolangs.org>
date Sat, 07 Dec 2019 23:36:53 +0000
parents 38a5b4d8a98e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */