Rev 7567 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7567 | Rev 7744 | ||
---|---|---|---|
Line 17... | Line 17... | ||
17 | #define bufferSize 10000; |
17 | #define bufferSize 10000; |
18 | #define memoryBrainfuck 30000*4 |
18 | #define memoryBrainfuck 30000*4 |
19 | #define memoryByteBF 1 |
19 | #define memoryByteBF 1 |
20 | #define stackBrainFuck 4*1024 |
20 | #define stackBrainFuck 4*1024 |
Line -... | Line 21... | ||
- | 21 | ||
- | 22 | #define TStr 1 |
|
- | 23 | #define TInt 2 |
|
- | 24 | #define TSym 3 |
|
- | 25 | #define TBol 4 |
|
- | 26 | ||
- | 27 | #define TLen 4*5 |
|
21 | 28 | ||
22 | dword buffer = 0; |
29 | dword buffer = 0; |
23 | word bufferSymbol = 0; |
30 | word bufferSymbol = 0; |
Line 24... | Line 31... | ||
24 | dword memory = 0; |
31 | dword memory = 0; |
Line 42... | Line 49... | ||
42 | byte s = 0; |
49 | byte s = 0; |
43 | byte args = 0; |
50 | byte args = 0; |
44 | dword pos = 0; |
51 | dword pos = 0; |
45 | dword name = 0; |
52 | dword name = 0; |
46 | dword tmp = 0; |
53 | dword tmp = 0; |
- | 54 | dword tmp2 = 0; |
|
47 | dword dataArgs = 0; |
55 | dword dataArgs = 0; |
48 | dword posArgs = 0; |
56 | dword posArgs = 0; |
49 | dword ret = 0; |
57 | dword ret = 0; |
50 | dword p = 0; |
58 | dword p = 0; |
- | 59 | dword i = 0; |
|
- | 60 | dword ii = 0; |
|
51 | dataArgs = malloc(16*4); |
61 | dataArgs = malloc(16*4); |
52 | posArgs = dataArgs; |
62 | posArgs = dataArgs; |
Line 53... | Line 63... | ||
53 | 63 | ||
54 | loop() |
64 | loop() |
55 | { |
65 | { |
56 | s = DSBYTE[code]; |
- | |
57 | 66 | s = DSBYTE[code]; |
|
58 | while (s == ' ') || (s == 9) |
67 | while (s == ' ') || (s == 9) || (s == 10) || (s == 13) |
59 | { |
68 | { |
60 | code++; |
69 | code++; |
61 | s = DSBYTE[code]; |
70 | s = DSBYTE[code]; |
62 | } |
71 | } |
Line 107... | Line 116... | ||
107 | tmp += s-'0'; |
116 | tmp += s-'0'; |
108 | code++; |
117 | code++; |
109 | s = DSBYTE[code]; |
118 | s = DSBYTE[code]; |
110 | } |
119 | } |
111 | args++; |
120 | args++; |
- | 121 | EDX = malloc(TLen); |
|
- | 122 | DSDWORD[EDX] = tmp; |
|
- | 123 | DSDWORD[EDX+4] = TInt; |
|
112 | DSDWORD[posArgs] = tmp; |
124 | DSDWORD[posArgs] = EDX; |
113 | posArgs += 4; |
125 | posArgs += 4; |
114 | continue; |
126 | continue; |
115 | } |
127 | } |
116 | else if (s == '"') |
128 | else if (s == '"') |
117 | { |
129 | { |
- | 130 | i = 1; |
|
118 | tmp = malloc(100); |
131 | tmp = malloc(1< |
119 | p = tmp; |
132 | p = tmp; |
120 | code++; |
133 | code++; |
121 | s = DSBYTE[code]; |
134 | s = DSBYTE[code]; |
- | 135 | ii = 0; |
|
122 | while (s != '"') && (s) |
136 | while (s != '"') && (s) |
123 | { |
137 | { |
- | 138 | ii++; |
|
- | 139 | if (1< |
|
- | 140 | { |
|
- | 141 | i++; |
|
- | 142 | tmp2 = p-tmp; |
|
- | 143 | tmp = realloc(tmp, 1< |
|
- | 144 | p = tmp+tmp2; |
|
- | 145 | } |
|
124 | DSBYTE[p] = s; |
146 | DSBYTE[p] = s; |
125 | p++; |
147 | p++; |
Line 126... | Line 148... | ||
126 | 148 | ||
127 | code++; |
149 | code++; |
128 | s = DSBYTE[code]; |
150 | s = DSBYTE[code]; |
129 | } |
151 | } |
- | 152 | DSBYTE[p] = 0; |
|
- | 153 | EDX = malloc(TLen); |
|
- | 154 | DSDWORD[EDX] = tmp; |
|
- | 155 | DSDWORD[EDX+4] = TStr; |
|
- | 156 | DSDWORD[EDX+8] = p-tmp; |
|
- | 157 | DSDWORD[posArgs] = EDX; |
|
- | 158 | posArgs += 4; |
|
- | 159 | code++; |
|
- | 160 | args++; |
|
130 | DSBYTE[p] = 0; |
161 | continue; |
131 | } |
162 | } |
132 | else if(s >= 'A') && (s <= 'z') |
163 | else |
133 | { |
164 | { |
134 | tmp = malloc(100); |
165 | tmp = malloc(20); |
135 | p = tmp; |
166 | p = tmp; |
136 | while (s >= 'A') && (s <= 'z') |
167 | while (s) && (s != ')') && (s != '(') && (s != ' ') && (s != 10) && (s != 13) |
137 | { |
168 | { |
138 | DSBYTE[p] = s; |
169 | DSBYTE[p] = s; |
139 | p++; |
- | |
140 | 170 | p++; |
|
141 | code++; |
171 | code++; |
142 | s = DSBYTE[code]; |
172 | s = DSBYTE[code]; |
143 | } |
173 | } |
144 | DSBYTE[p] = 0; |
174 | DSBYTE[p] = 0; |
- | 175 | args++; |
|
- | 176 | EDX = malloc(TLen); |
|
- | 177 | DSDWORD[EDX] = tmp; |
|
145 | args++; |
178 | DSDWORD[EDX+4] = TSym; |
146 | DSDWORD[posArgs] = tmp; |
179 | DSDWORD[posArgs] = EDX; |
147 | posArgs += 4; |
180 | posArgs += 4; |
148 | continue; |
181 | continue; |
Line 149... | Line 182... | ||
149 | } |
182 | } |
Line 182... | Line 215... | ||
182 | } |
215 | } |
183 | } |
216 | } |
184 | else |
217 | else |
185 | { |
218 | { |
186 | consoleInit(); |
219 | consoleInit(); |
187 | con_printf stdcall ("Lisp interpreter v1.4\r\n"); |
220 | con_printf stdcall ("Lisp interpreter v1.5\r\n"); |
188 | while(maxLoop) |
221 | while(maxLoop) |
189 | { |
222 | { |
190 | con_printf stdcall ("\r\n$ "); |
223 | con_printf stdcall ("\r\n$ "); |
191 | con_gets stdcall(buffer, bufferSize); |
224 | con_gets stdcall(buffer, bufferSize); |
192 | code = EAX; |
225 | code = EAX; |