Rev 6613 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6613 | Rev 7107 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | Copyright 2016 Anton Krotov |
2 | Copyright 2016, 2017 Anton Krotov |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | This program is free software: you can redistribute it and/or modify |
4 | This program is free software: you can redistribute it and/or modify |
5 | it under the terms of the GNU Lesser General Public License as published by |
5 | it under the terms of the GNU Lesser General Public License as published by |
6 | the Free Software Foundation, either version 3 of the License, or |
6 | the Free Software Foundation, either version 3 of the License, or |
Line 26... | Line 26... | ||
26 | PROC = PROCEDURE; |
26 | PROC = PROCEDURE; |
Line 27... | Line 27... | ||
27 | 27 | ||
Line 28... | Line 28... | ||
28 | VAR |
28 | VAR |
- | 29 | ||
Line 29... | Line 30... | ||
29 | 30 | SelfName, rtab: INTEGER; CloseProc: PROC; |
|
30 | SelfName, rtab: INTEGER; CloseProc: PROC; |
31 | init: BOOLEAN; |
31 | 32 | ||
32 | PROCEDURE [stdcall] _halt*(n: INTEGER); |
33 | PROCEDURE [stdcall] _halt*(n: INTEGER); |
Line 114... | Line 115... | ||
114 | END; |
115 | END; |
115 | Arr[m + n] := t |
116 | Arr[m + n] := t |
116 | END |
117 | END |
117 | END _arrayrot; |
118 | END _arrayrot; |
Line 118... | Line -... | ||
118 | - | ||
119 | PROCEDURE Min(a, b: INTEGER): INTEGER; |
- | |
120 | BEGIN |
- | |
121 | IF a > b THEN |
- | |
122 | a := b |
- | |
123 | END |
- | |
124 | RETURN a |
- | |
125 | END Min; |
- | |
126 | 119 | ||
127 | PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER; |
120 | PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER; |
128 | BEGIN |
121 | BEGIN |
129 | sys.CODE("8B4508"); // mov eax, [ebp + 08h] |
122 | sys.CODE("8B4508"); // mov eax, [ebp + 08h] |
130 | sys.CODE("8B4D0C"); // mov ecx, [ebp + 0Ch] |
123 | sys.CODE("8B4D0C"); // mov ecx, [ebp + 0Ch] |
Line 142... | Line 135... | ||
142 | RETURN 0 |
135 | RETURN 0 |
143 | END _length; |
136 | END _length; |
Line 144... | Line 137... | ||
144 | 137 | ||
145 | PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER); |
138 | PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER); |
146 | BEGIN |
139 | BEGIN |
147 | _savearr(Min(alen, blen), a, b); |
140 | _savearr(MIN(alen, blen), a, b); |
148 | IF blen > alen THEN |
141 | IF blen > alen THEN |
149 | sys.PUT(b + alen, 0X) |
142 | sys.PUT(b + alen, 0X) |
150 | END |
143 | END |
Line 151... | Line 144... | ||
151 | END _strcopy; |
144 | END _strcopy; |
152 | 145 | ||
153 | PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN; |
146 | PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN; |
154 | VAR i: INTEGER; Res: BOOLEAN; |
147 | VAR i: INTEGER; Res: BOOLEAN; |
155 | BEGIN |
148 | BEGIN |
156 | i := API.strncmp(sys.ADR(a), sys.ADR(b), Min(LEN(a), LEN(b))); |
149 | i := API.strncmp(sys.ADR(a), sys.ADR(b), MIN(LEN(a), LEN(b))); |
157 | IF i = 0 THEN |
150 | IF i = 0 THEN |
158 | i := _length(a) - _length(b) |
151 | i := _length(a) - _length(b) |
159 | END; |
152 | END; |
Line 250... | Line 243... | ||
250 | StrAppend(0AX); |
243 | StrAppend(0AX); |
251 | StrAppend("code "); |
244 | StrAppend("code "); |
252 | Int(code, int); |
245 | Int(code, int); |
253 | StrAppend(int) |
246 | StrAppend(int) |
254 | END; |
247 | END; |
255 | API.DebugMsg(sys.ADR(msg), SelfName) |
248 | API.DebugMsg(sys.ADR(msg), SelfName); |
- | 249 | API.ExitThread(0) |
|
256 | END _assrt; |
250 | END _assrt; |
Line 257... | Line 251... | ||
257 | 251 | ||
258 | PROCEDURE [stdcall] _close*; |
252 | PROCEDURE [stdcall] _close*; |
259 | BEGIN |
253 | BEGIN |
Line 262... | Line 256... | ||
262 | END |
256 | END |
263 | END _close; |
257 | END _close; |
Line 264... | Line 258... | ||
264 | 258 | ||
265 | PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER); |
259 | PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER); |
- | 260 | BEGIN |
|
266 | BEGIN |
261 | IF ~init THEN |
- | 262 | API.zeromem(gsize, gadr); |
|
267 | API.zeromem(gsize, gadr); |
263 | init := TRUE; |
268 | API.init(esp); |
264 | API.init(esp); |
269 | SelfName := self; |
265 | SelfName := self; |
270 | rtab := rec; |
266 | rtab := rec; |
- | 267 | CloseProc := NIL |
|
271 | CloseProc := NIL |
268 | END |
Line 272... | Line 269... | ||
272 | END _init; |
269 | END _init; |
273 | 270 | ||
274 | PROCEDURE SetClose*(proc: PROC); |
271 | PROCEDURE SetClose*(proc: PROC); |