Subversion Repositories Kolibri OS

Rev

Rev 7562 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7562 Rev 7563
Line 4... Line 4...
4
 
4
 
Line 5... Line 5...
5
#define MEMSIZE 4096*10
5
#define MEMSIZE 4096*10
6
 
6
 
-
 
7
#include "../lib/io.h"
Line 7... Line 8...
7
#include "../lib/io.h"
8
#include "../lib/obj/console.h"
-
 
9
#include "../lib/array.h"
-
 
10
 
Line 8... Line 11...
8
#include "../lib/obj/console.h"
11
byte initConsole = 0;
Line 9... Line 12...
9
 
12
Dictionary functions = {0};
10
byte initConsole = 0;
13
Dictionary variables = {0};
Line 61... Line 64...
61
			code++;
64
			code++;
62
			break;
65
			break;
63
		}
66
		}
64
		if (!args) 
67
		if (!args) 
65
		{
68
		{
66
			if(s>='A') && (s<='z') // name function
69
			if(s!=' ') && (s!=')') // name function
67
			{
70
			{
68
				while (s>='A') && (s<='z')
71
				while (s!=' ') && (s!=')')
69
				{
72
				{
70
					DSBYTE[pos] = s;
73
					DSBYTE[pos] = s;
71
					code++;
74
					code++;
72
					s = DSBYTE[code];
75
					s = DSBYTE[code];
73
					pos++;
76
					pos++;
Line 99... Line 102...
99
			}
102
			}
100
		}
103
		}
101
		code++;
104
		code++;
102
		args++;
105
		args++;
103
	}
106
	}
104
	args -= 2;
107
	args--;
105
	ret = StdCall(args, name, dataArgs);
108
	ret = StdCall(args, name, dataArgs);
106
	free(name);
109
	free(name);
107
	free(dataArgs);
110
	free(dataArgs);
108
	return ret;
111
	return ret;
109
}
112
}
Line 110... Line -...
110
 
-
 
111
 
113
 
112
void main()
114
void main()
113
{
115
{
114
	dword brainFuckCode = 0;
116
	dword brainFuckCode = 0;
-
 
117
	word maxLoop = 1000;
Line 115... Line 118...
115
	word maxLoop = 1000;
118
	dword txt = "(print (str 1) (str 2))";
116
	
119
	
117
	buffer = malloc(bufferSize);
120
	buffer = malloc(bufferSize);
Line -... Line 121...
-
 
121
	memory = malloc(memoryBrainfuck);
-
 
122
	stack = malloc(stackBrainFuck);
118
	memory = malloc(memoryBrainfuck);
123
	
119
	stack = malloc(stackBrainFuck);
124
	Init();
120
	
125
	
121
	IF(DSBYTE[I_Param])
126
	IF(DSBYTE[I_Param])
122
	{
127
	{
123
		IF(io.read(I_Param))
128
		IF(io.read(I_Param))
124
		{
129
		{
-
 
130
			code = EAX;
125
			code = EAX;
131
			loop()
126
			loop()
132
			{
127
			{
133
				while(DSBYTE[code] == ' ') code++;
128
				if(DSBYTE[code]!='(') break;
134
				if(DSBYTE[code]!='(') break;
129
				else code++;
135
				else code++;
130
				evalLisp();
136
				evalLisp();
131
				if(DSBYTE[code]!=')') break;
137
				if(DSBYTE[code]!=')') break;
132
				code++;
138
				code++;
133
			}
139
			}
134
		}
140
		}
135
	}
141
	}
136
	ELSE 
142
	else 
137
	{
143
	{
138
		consoleInit();
144
		consoleInit();
139
		con_printf stdcall ("Lisp interpreter v1.0");
145
		con_printf stdcall ("Lisp interpreter v1.2");
140
		WHILE(maxLoop)
146
		WHILE(maxLoop)
141
		{
147
		{
-
 
148
			con_printf stdcall ("\r\n\r\nEnter code: ");
142
			con_printf stdcall ("\r\n\r\nEnter code: ");
149
			con_gets stdcall(buffer, bufferSize);
143
			con_gets stdcall(buffer, bufferSize);
150
			code = EAX;
-
 
151
			code = txt;
144
			code = EAX;
152
			con_printf stdcall ("Output: ");
145
			con_printf stdcall ("Output: ");
153
			nextLispLine:
146
			nextLispLine:
154
			while(DSBYTE[code] == ' ') code++;
147
			if(DSBYTE[code]!='(') continue;
155
			if(DSBYTE[code]!='(') continue;
148
			else code++;
156
			else code++;