Subversion Repositories Kolibri OS

Rev

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;