Subversion Repositories Kolibri OS

Rev

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);