Subversion Repositories Kolibri OS

Rev

Rev 7567 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7564 pavelyakov 1
 
7565 pavelyakov 2
:dword std_exit()
7567 pavelyakov 3
{
4
	con_exit stdcall (1);
5
	ExitProcess();
6
}
7
8
 
7564 pavelyakov 9
{
10
	dword name = 0;
11
	dword value = 0;
12
	WHILE(count > 0)
7565 pavelyakov 13
	{
7564 pavelyakov 14
		name = DSDWORD[args];
15
		IF (DSDWORD[name+4] == TSym) name = DSDWORD[name];
7744 pavelyakov 16
		ELSE
17
		{
18
			con_printf stdcall ("Error variable!");
19
			ExitProcess();
20
		}
21
		args += 4;
7564 pavelyakov 22
		value = DSDWORD[args];
23
		args += 4;
24
		variables.set(name, value);
25
		count -= 2;
7565 pavelyakov 26
	}
7564 pavelyakov 27
}
28
29
 
30
{
31
	dword name = 0;
7744 pavelyakov 32
	IF(!count) RETURN 0;
7565 pavelyakov 33
	name = DSDWORD[args];
7744 pavelyakov 34
	IF (DSDWORD[name+4] != TSym)
35
	{
36
		con_printf stdcall ("Error variable!");
37
		ExitProcess();
38
	}
39
	RETURN variables.get(DSDWORD[name]);
40
}
7564 pavelyakov 41
42
 
7563 pavelyakov 43
{
44
	dword tmp = 0;
45
	IF(!count) RETURN "";
7565 pavelyakov 46
	tmp = malloc(15);
7563 pavelyakov 47
	itoa_(tmp,DSDWORD[args]);
48
	RETURN tmp;
49
}
50
51
 
7565 pavelyakov 52
:dword std_add(dword count, args)
7563 pavelyakov 53
{
54
	dword ret = 0;
55
	WHILE(count)
56
	{
7562 pavelyakov 57
		ret += DSDWORD[args];
7563 pavelyakov 58
		args+=4;
59
		count--;
60
	}
7562 pavelyakov 61
	RETURN ret;
7563 pavelyakov 62
}
63
64
 
65
{
66
	dword ret = 0;
67
	IF(count)
68
	{
69
		ret = DSDWORD[args];
70
		count--;
71
		args+=4;
72
	}
7562 pavelyakov 73
	WHILE(count)
7563 pavelyakov 74
	{
7562 pavelyakov 75
		ret -= DSDWORD[args];
7563 pavelyakov 76
		args += 4;
7565 pavelyakov 77
		count--;
78
	}
79
	RETURN ret;
80
}
81
82
 
83
:dword std_print(dword count, args)
84
{
85
	dword ret = 0;
86
	dword arg = 0;
7744 pavelyakov 87
	dword val = 0;
88
	consoleInit();
7566 pavelyakov 89
	IF (!count) con_printf stdcall ("nil");
7744 pavelyakov 90
	WHILE(count)
7565 pavelyakov 91
	{
92
		arg = DSDWORD[args];
7744 pavelyakov 93
		REPEAT1:
94
		IF (DSDWORD[arg+4] == TInt) val = itoa(DSDWORD[arg]);
95
		ELSE IF (DSDWORD[arg+4] == TStr) val = DSDWORD[arg];
96
		ELSE IF (DSDWORD[arg+4] == TSym)
97
		{
98
			arg = std_get(1, args);
99
			goto REPEAT1;
100
		}
101
		IF(!arg) con_printf stdcall ("nil");
102
		ELSE con_printf stdcall (val);
103
		args+=4;
7563 pavelyakov 104
		count--;
105
	}
7562 pavelyakov 106
	RETURN ret;
7563 pavelyakov 107
}
108
109
 
7744 pavelyakov 110
{
7565 pavelyakov 111
	dword ret = 0;
7744 pavelyakov 112
	dword arg = 0;
113
	dword val = 0;
114
	ret = malloc(TLen);
115
	DSDWORD[ret] = 0;
116
	DSDWORD[ret+4] = TInt;
117
	WHILE(count)
7565 pavelyakov 118
	{
119
		arg = DSDWORD[args];
7744 pavelyakov 120
		REPEAT1:
121
		IF (DSDWORD[arg+4] == TStr) val = DSDWORD[arg];
122
		ELSE IF (DSDWORD[arg+4] == TSym)
123
		{
124
			arg = std_get(1, args);
125
			goto REPEAT1;
126
		}
127
		ELSE return ret;
128
		DSDWORD[ret] += DSDWORD[arg+8];
129
		args+=4;
7565 pavelyakov 130
		count--;
131
	}
132
	RETURN ret;
7744 pavelyakov 133
}
134
135
 
136
{
137
	dword ret = 0;
138
	dword arg = 0;
139
	dword val = 0;
140
	dword tmp = 0;
141
	dword x = 0;
142
	dword y = 0;
143
	byte start = 0;
144
	ret = malloc(TLen);
145
	DSDWORD[ret] = 0;
146
	DSDWORD[ret+4] = TInt;
147
	IF (!count) return ret;
148
	while(count)
149
	{
150
		arg = DSDWORD[args];
151
		REPEAT2:
152
		IF (DSDWORD[arg+4] == TSym)
153
		{
154
			arg = std_get(1, args);
155
			goto REPEAT2;
156
		}
157
		IF (!start)
158
		{
159
			start = 1;
160
			tmp = arg;
161
			args+=4;
162
			count--;
163
			continue;
164
		}
165
		IF (DSDWORD[tmp+4] != DSDWORD[arg+4]) return ret;
166
		IF (DSDWORD[tmp+4] == TInt)
167
		{
168
			IF (DSDWORD[tmp] != DSDWORD[arg]) return ret;
169
		}
170
		ELSE IF (DSDWORD[tmp+4] == TStr)
171
		{
172
			/*IF (!DSDWORD[tmp+8]) DSDWORD[tmp+8] = crc32(DSDWORD[tmp]);
173
			IF (!DSDWORD[arg+8]) DSDWORD[arg+8] = crc32(DSDWORD[arg]);
174
			IF (DSDWORD[tmp+8] != DSDWORD[arg+8]) return ret;*/
175
			IF (strcmp(DSDWORD[tmp], DSDWORD[arg])) return ret;
176
		}
177
		args+=4;
178
		count--;
179
	}
180
	DSDWORD[ret] = 1;
181
	return ret;
182
}
183
184
 
185
{
186
	dword buf = 0;
187
	consoleInit();
188
	buf = malloc(100);
189
	IF (count) std_print(count, args);
190
	con_gets stdcall(buf, 100);
7565 pavelyakov 191
	EDX = malloc(TLen);
7744 pavelyakov 192
	DSDWORD[EDX] = buf;
193
	DSDWORD[EDX+4] = TStr;
194
	RETURN EDX;
195
}
7565 pavelyakov 196
197
 
7563 pavelyakov 198
{
199
	functions.init(100);
200
201
 
202
	functions.set("print", #std_print);
7565 pavelyakov 203
	functions.set("input", #std_input);
204
7563 pavelyakov 205
 
206
	functions.set("str", #std_str);
207
	functions.set("len", #std_len);
7744 pavelyakov 208
7563 pavelyakov 209
 
210
	functions.set("exit", #std_exit);
7567 pavelyakov 211
7563 pavelyakov 212
 
213
	functions.set("+", #std_add);
214
	functions.set("-", #std_sub);
215
	functions.set("==", #std_cmp);
7744 pavelyakov 216
7563 pavelyakov 217
 
7564 pavelyakov 218
	functions.set("set", #std_set);
219
	functions.set("get", #std_get);
220
221
 
7563 pavelyakov 222
}
223
224
 
225
{
226
	functions.get(name);
227
	IF(EAX) RETURN EAX(count, args);
7564 pavelyakov 228
	RETURN 0;
7563 pavelyakov 229
}
7564 pavelyakov 230