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 39... | Line 39... | ||
39 | con_exit : PROCEDURE [stdcall] (bCloseWindow: BOOLEAN); |
39 | con_exit : PROCEDURE [stdcall] (bCloseWindow: BOOLEAN); |
40 | con_write_asciiz : PROCEDURE [stdcall] (string: INTEGER); |
40 | con_write_asciiz : PROCEDURE [stdcall] (string: INTEGER); |
Line 41... | Line 41... | ||
41 | 41 | ||
Line 42... | Line -... | ||
42 | fsize, sec*, dsec*: INTEGER; |
- | |
43 | - | ||
44 | PROCEDURE [stdcall] sysfunc1(arg1: INTEGER): INTEGER; |
- | |
45 | BEGIN |
- | |
46 | sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *) |
- | |
47 | sys.CODE("CD40"); (* int 40h *) |
- | |
48 | sys.CODE("C9"); (* leave *) |
- | |
49 | sys.CODE("C20400"); (* ret 04h *) |
- | |
50 | RETURN 0 |
- | |
51 | END sysfunc1; |
- | |
52 | - | ||
53 | PROCEDURE [stdcall] sysfunc2(arg1, arg2: INTEGER): INTEGER; |
- | |
54 | BEGIN |
- | |
55 | sys.CODE("53"); (* push ebx *) |
- | |
56 | sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *) |
- | |
57 | sys.CODE("8B5D0C"); (* mov ebx, [ebp + 0Ch] *) |
- | |
58 | sys.CODE("CD40"); (* int 40h *) |
- | |
59 | sys.CODE("5B"); (* pop ebx *) |
- | |
60 | sys.CODE("C9"); (* leave *) |
- | |
61 | sys.CODE("C20800"); (* ret 08h *) |
- | |
62 | RETURN 0 |
- | |
63 | END sysfunc2; |
- | |
64 | - | ||
65 | PROCEDURE [stdcall] sysfunc3(arg1, arg2, arg3: INTEGER): INTEGER; |
- | |
66 | BEGIN |
- | |
67 | sys.CODE("53"); (* push ebx *) |
- | |
68 | sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *) |
- | |
69 | sys.CODE("8B5D0C"); (* mov ebx, [ebp + 0Ch] *) |
- | |
70 | sys.CODE("8B4D10"); (* mov ecx, [ebp + 10h] *) |
- | |
71 | sys.CODE("CD40"); (* int 40h *) |
- | |
72 | sys.CODE("5B"); (* pop ebx *) |
- | |
73 | sys.CODE("C9"); (* leave *) |
- | |
74 | sys.CODE("C20C00"); (* ret 0Ch *) |
- | |
75 | RETURN 0 |
- | |
76 | END sysfunc3; |
42 | fsize, sec*, dsec*: INTEGER; |
77 | 43 | ||
78 | PROCEDURE [stdcall] sysfunc22(arg1, arg2: INTEGER; VAR res2: INTEGER): INTEGER; |
44 | PROCEDURE [stdcall] sysfunc22(arg1, arg2: INTEGER; VAR res2: INTEGER): INTEGER; |
79 | BEGIN |
45 | BEGIN |
80 | sys.CODE("53"); (* push ebx *) |
46 | sys.CODE("53"); (* push ebx *) |
Line 120... | Line 86... | ||
120 | END GetProcAdr; |
86 | END GetProcAdr; |
Line 121... | Line 87... | ||
121 | 87 | ||
122 | PROCEDURE Time*(VAR sec, dsec: INTEGER); |
88 | PROCEDURE Time*(VAR sec, dsec: INTEGER); |
123 | VAR t: INTEGER; |
89 | VAR t: INTEGER; |
124 | BEGIN |
90 | BEGIN |
125 | t := sysfunc2(26, 9); |
91 | t := API.sysfunc2(26, 9); |
126 | sec := t DIV 100; |
92 | sec := t DIV 100; |
127 | dsec := t MOD 100 |
93 | dsec := t MOD 100 |
Line 128... | Line 94... | ||
128 | END Time; |
94 | END Time; |
Line 137... | Line 103... | ||
137 | sys.PUT(v, a) |
103 | sys.PUT(v, a) |
138 | END GetProc; |
104 | END GetProc; |
Line 139... | Line 105... | ||
139 | 105 | ||
140 | BEGIN |
106 | BEGIN |
141 | Time(sec, dsec); |
107 | Time(sec, dsec); |
142 | Lib := sysfunc3(68, 19, sys.ADR("/rd/1/lib/console.obj")); |
108 | Lib := API.sysfunc3(68, 19, sys.ADR("/rd/1/lib/console.obj")); |
143 | IF Lib # 0 THEN |
109 | IF Lib # 0 THEN |
144 | GetProc(sys.ADR(con_init), "con_init"); |
110 | GetProc(sys.ADR(con_init), "con_init"); |
145 | GetProc(sys.ADR(con_exit), "con_exit"); |
111 | GetProc(sys.ADR(con_exit), "con_exit"); |
146 | GetProc(sys.ADR(con_write_asciiz), "con_write_asciiz"); |
112 | GetProc(sys.ADR(con_write_asciiz), "con_write_asciiz"); |
Line 153... | Line 119... | ||
153 | PROCEDURE ExitProcess* (n: INTEGER); |
119 | PROCEDURE ExitProcess* (n: INTEGER); |
154 | BEGIN |
120 | BEGIN |
155 | IF con_exit # NIL THEN |
121 | IF con_exit # NIL THEN |
156 | con_exit(FALSE) |
122 | con_exit(FALSE) |
157 | END; |
123 | END; |
158 | n := sysfunc1(-1) |
124 | API.ExitProcess(0) |
159 | END ExitProcess; |
125 | END ExitProcess; |
Line 160... | Line 126... | ||
160 | 126 | ||
161 | PROCEDURE GetCommandLine*(): INTEGER; |
127 | PROCEDURE GetCommandLine*(): INTEGER; |
162 | VAR param: INTEGER; |
128 | VAR param: INTEGER; |
Line 171... | Line 137... | ||
171 | sys.GET(32, name) |
137 | sys.GET(32, name) |
172 | RETURN name |
138 | RETURN name |
173 | END GetName; |
139 | END GetName; |
Line 174... | Line 140... | ||
174 | 140 | ||
175 | PROCEDURE malloc*(size: INTEGER): INTEGER; |
141 | PROCEDURE malloc*(size: INTEGER): INTEGER; |
176 | RETURN sysfunc3(68, 12, size) |
142 | RETURN API.sysfunc3(68, 12, size) |
Line 177... | Line 143... | ||
177 | END malloc; |
143 | END malloc; |
178 | 144 | ||
179 | PROCEDURE CloseFile*(hObject: INTEGER); |
145 | PROCEDURE CloseFile*(hObject: INTEGER); |