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
 
-
 
30
  SelfName, rtab: INTEGER; CloseProc: PROC;
Line 29... Line 31...
29
 
31
  init: BOOLEAN;
30
  SelfName, rtab: INTEGER; CloseProc: PROC;
32
  main_thread_id: INTEGER;
31
 
33
 
32
PROCEDURE [stdcall] _halt*(n: INTEGER);
34
PROCEDURE [stdcall] _halt*(n: INTEGER);
Line 114... Line 116...
114
    END;
116
    END;
115
    Arr[m + n] := t
117
    Arr[m + n] := t
116
  END
118
  END
117
END _arrayrot;
119
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
 
120
 
127
PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER;
121
PROCEDURE [stdcall] _length*(s: ARRAY OF CHAR): INTEGER;
128
BEGIN
122
BEGIN
129
  sys.CODE("8B4508");     //  mov     eax, [ebp + 08h]
123
  sys.CODE("8B4508");     //  mov     eax, [ebp + 08h]
130
  sys.CODE("8B4D0C");     //  mov     ecx, [ebp + 0Ch]
124
  sys.CODE("8B4D0C");     //  mov     ecx, [ebp + 0Ch]
Line 142... Line 136...
142
  RETURN 0
136
  RETURN 0
143
END _length;
137
END _length;
Line 144... Line 138...
144
 
138
 
145
PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER);
139
PROCEDURE [stdcall] _strcopy*(b, blen, a, alen: INTEGER);
146
BEGIN
140
BEGIN
147
  _savearr(Min(alen, blen), a, b);
141
  _savearr(MIN(alen, blen), a, b);
148
  IF blen > alen THEN
142
  IF blen > alen THEN
149
    sys.PUT(b + alen, 0X)
143
    sys.PUT(b + alen, 0X)
150
  END
144
  END
Line 151... Line 145...
151
END _strcopy;
145
END _strcopy;
152
 
146
 
153
PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN;
147
PROCEDURE [stdcall] _strcmp*(op: INTEGER; b, a: ARRAY OF CHAR): BOOLEAN;
154
VAR i: INTEGER; Res: BOOLEAN;
148
VAR i: INTEGER; Res: BOOLEAN;
155
BEGIN
149
BEGIN
156
  i := API.strncmp(sys.ADR(a), sys.ADR(b), Min(LEN(a), LEN(b)));
150
  i := API.strncmp(sys.ADR(a), sys.ADR(b), MIN(LEN(a), LEN(b)));
157
  IF i = 0 THEN
151
  IF i = 0 THEN
158
    i := _length(a) - _length(b)
152
    i := _length(a) - _length(b)
159
  END;
153
  END;
Line 250... Line 244...
250
    StrAppend(0AX);
244
    StrAppend(0AX);
251
    StrAppend("code ");
245
    StrAppend("code ");
252
    Int(code, int);
246
    Int(code, int);
253
    StrAppend(int)
247
    StrAppend(int)
254
  END;
248
  END;
255
  API.DebugMsg(sys.ADR(msg), SelfName)
249
  IF API.GetCurrentThreadId() = main_thread_id THEN
-
 
250
    API.ExitProcess(0)
-
 
251
  ELSE
-
 
252
    API.ExitThread(0)
-
 
253
  END
256
END _assrt;
254
END _assrt;
Line 257... Line 255...
257
 
255
 
258
PROCEDURE [stdcall] _close*;
256
PROCEDURE [stdcall] _close*;
259
BEGIN
257
BEGIN
Line 262... Line 260...
262
  END
260
  END
263
END _close;
261
END _close;
Line 264... Line 262...
264
 
262
 
265
PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER);
263
PROCEDURE [stdcall] _init*(self, rec, gsize, gadr, esp: INTEGER);
-
 
264
BEGIN
266
BEGIN
265
  IF ~init THEN
-
 
266
    API.zeromem(gsize, gadr);
267
  API.zeromem(gsize, gadr);
267
    init := TRUE;
-
 
268
    API.init(esp);
268
  API.init(esp);
269
    main_thread_id := API.GetCurrentThreadId();
269
  SelfName := self;
270
    SelfName := self;
270
  rtab := rec;
271
    rtab := rec;
-
 
272
    CloseProc := NIL
271
  CloseProc := NIL;
273
  END
Line 272... Line 274...
272
END _init;
274
END _init;
273
 
275
 
274
PROCEDURE SetClose*(proc: PROC);
276
PROCEDURE SetClose*(proc: PROC);