Rev 9730 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9730 | Rev 9906 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | Copyright 2021, 2022 Anton Krotov |
2 | Copyright 2021-2023 Anton Krotov |
Line 3... | Line 3... | ||
3 | 3 | ||
Line 4... | Line 4... | ||
4 | This file is part of CEdit. |
4 | This file is part of CEdit. |
5 | 5 | ||
Line 18... | Line 18... | ||
18 | *) |
18 | *) |
Line 19... | Line 19... | ||
19 | 19 | ||
Line 20... | Line 20... | ||
20 | MODULE KolibriOS; |
20 | MODULE KolibriOS; |
21 | 21 | ||
Line 22... | Line 22... | ||
22 | IMPORT |
22 | IMPORT |
23 | KOSAPI, SYSTEM, U := Utils; |
23 | KOSAPI, SYSTEM, U := Utils; |
24 | 24 | ||
Line 25... | Line 25... | ||
25 | CONST |
25 | CONST |
Line 26... | Line 26... | ||
26 | fontWidth* = 8; |
26 | fontWidth* = 8; |
27 | fontHeight* = 16; |
27 | fontHeight* = 16; |
Line 42... | Line 42... | ||
42 | END; |
42 | END; |
Line 43... | Line 43... | ||
43 | 43 | ||
44 | 44 | ||
45 | PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); |
45 | PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); |
46 | BEGIN |
46 | BEGIN |
Line 47... | Line 47... | ||
47 | KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0])) |
47 | KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0])) |
48 | END CreateWindow; |
48 | END CreateWindow; |
49 | 49 | ||
50 | 50 | ||
Line 51... | Line 51... | ||
51 | PROCEDURE BeginDraw*; |
51 | PROCEDURE BeginDraw*; |
52 | BEGIN |
52 | BEGIN |
53 | KOSAPI.sysfunc2(12, 1) |
53 | KOSAPI.sysfunc2(12, 1) |
54 | END BeginDraw; |
54 | END BeginDraw; |
Line 55... | Line 55... | ||
55 | 55 | ||
56 | 56 | ||
57 | PROCEDURE EndDraw*; |
57 | PROCEDURE EndDraw*; |
Line 58... | Line 58... | ||
58 | BEGIN |
58 | BEGIN |
59 | KOSAPI.sysfunc2(12, 2) |
59 | KOSAPI.sysfunc2(12, 2) |
60 | END EndDraw; |
60 | END EndDraw; |
61 | 61 | ||
62 | 62 | ||
63 | PROCEDURE EventTimeout* (t: INTEGER): INTEGER; |
63 | PROCEDURE EventTimeout* (t: INTEGER): INTEGER; |
64 | RETURN KOSAPI.sysfunc2(23, t) |
64 | RETURN KOSAPI.sysfunc2(23, t) |
65 | END EventTimeout; |
65 | END EventTimeout; |
Line 66... | Line 66... | ||
66 | 66 | ||
67 | 67 | ||
68 | PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER); |
68 | PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER); |
69 | VAR |
69 | VAR |
Line 70... | Line 70... | ||
70 | buffer: ARRAY 1024 OF BYTE; |
70 | buffer: ARRAY 1024 OF BYTE; |
71 | BEGIN |
71 | BEGIN |
72 | KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1); |
72 | KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1); |
73 | SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a); |
73 | SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a); |
Line 74... | Line 74... | ||
74 | SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b); |
74 | SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b); |
75 | END ThreadInfo; |
75 | END ThreadInfo; |
76 | 76 | ||
77 | 77 | ||
Line 78... | Line 78... | ||
78 | PROCEDURE WinSize* (VAR width, height: INTEGER); |
78 | PROCEDURE WinSize* (VAR width, height: INTEGER); |
79 | BEGIN |
79 | BEGIN |
80 | ThreadInfo(42, 46, width, height) |
80 | ThreadInfo(42, 46, width, height) |
81 | END WinSize; |
81 | END WinSize; |
Line 82... | Line 82... | ||
82 | 82 | ||
83 | 83 | ||
84 | PROCEDURE WinPos* (VAR x, y: INTEGER); |
84 | PROCEDURE WinPos* (VAR x, y: INTEGER); |
85 | BEGIN |
85 | BEGIN |
86 | ThreadInfo(34, 38, x, y) |
86 | ThreadInfo(34, 38, x, y) |
87 | END WinPos; |
87 | END WinPos; |
88 | 88 | ||
89 | 89 | ||
90 | PROCEDURE ClientSize* (VAR width, height: INTEGER); |
90 | PROCEDURE ClientSize* (VAR width, height: INTEGER); |
91 | BEGIN |
91 | BEGIN |
92 | ThreadInfo(62, 66, width, height) |
92 | ThreadInfo(62, 66, width, height) |
93 | END ClientSize; |
93 | END ClientSize; |
94 | 94 | ||
Line 95... | Line 95... | ||
95 | 95 | ||
96 | PROCEDURE ClientPos* (VAR x, y: INTEGER); |
96 | PROCEDURE ClientPos* (VAR x, y: INTEGER); |
97 | BEGIN |
97 | BEGIN |
98 | ThreadInfo(54, 58, x, y) |
98 | ThreadInfo(54, 58, x, y) |
99 | END ClientPos; |
99 | END ClientPos; |
100 | 100 | ||
101 | 101 | ||
Line 102... | Line 102... | ||
102 | PROCEDURE ScreenSize* (VAR width, height: INTEGER); |
102 | PROCEDURE ScreenSize* (VAR width, height: INTEGER); |
103 | VAR |
103 | VAR |
104 | eax, ebx: INTEGER; |
104 | eax, ebx: INTEGER; |
105 | right, left, top, bottom: INTEGER; |
105 | right, left, top, bottom: INTEGER; |
106 | BEGIN |
106 | BEGIN |
107 | eax := KOSAPI.sysfunc22(48, 5, ebx); |
107 | eax := KOSAPI.sysfunc22(48, 5, ebx); |
108 | left := LSR(eax, 16); |
108 | left := LSR(eax, 16); |
Line 109... | Line 109... | ||
109 | right := eax MOD 65536; |
109 | right := eax MOD 65536; |
110 | top := LSR(ebx, 16); |
110 | top := LSR(ebx, 16); |
111 | bottom := ebx MOD 65536; |
111 | bottom := ebx MOD 65536; |
112 | width := right - left + 1; |
112 | width := right - left + 1; |
Line 113... | Line 113... | ||
113 | height := bottom - top + 1 |
113 | height := bottom - top + 1 |
114 | END ScreenSize; |
114 | END ScreenSize; |
115 | 115 | ||
116 | 116 | ||
Line 117... | Line 117... | ||
117 | PROCEDURE ThreadID* (): INTEGER; |
117 | PROCEDURE ThreadID* (): INTEGER; |
118 | VAR |
118 | VAR |
119 | id: INTEGER; |
119 | id: INTEGER; |
120 | BEGIN |
120 | BEGIN |
Line 121... | Line 121... | ||
121 | ThreadInfo(30, 30, id, id) |
121 | ThreadInfo(30, 30, id, id) |
122 | RETURN id |
122 | RETURN id |
123 | END ThreadID; |
123 | END ThreadID; |
124 | 124 | ||
Line 125... | Line 125... | ||
125 | 125 | ||
126 | PROCEDURE RolledUp* (): BOOLEAN; |
126 | PROCEDURE RolledUp* (): BOOLEAN; |
127 | VAR |
127 | VAR |
128 | buffer: ARRAY 1024 OF BYTE; |
128 | buffer: ARRAY 1024 OF BYTE; |
Line 129... | Line 129... | ||
129 | BEGIN |
129 | BEGIN |
130 | KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1) |
130 | KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1) |
131 | RETURN ODD(LSR(buffer[70], 2)) |
131 | RETURN ODD(LSR(buffer[70], 2)) |
132 | END RolledUp; |
132 | END RolledUp; |
133 | 133 | ||
134 | 134 | ||
135 | PROCEDURE SetWinSize* (width, height: INTEGER); |
135 | PROCEDURE SetWinSize* (width, height: INTEGER); |
136 | BEGIN |
136 | BEGIN |
Line 137... | Line 137... | ||
137 | KOSAPI.sysfunc5(67, -1, -1, width, height) |
137 | KOSAPI.sysfunc5(67, -1, -1, width, height) |
138 | END SetWinSize; |
138 | END SetWinSize; |
139 | 139 | ||
140 | 140 | ||
141 | PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR); |
141 | PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR); |
142 | BEGIN |
142 | BEGIN |
143 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0) |
143 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0) |
144 | END DrawText; |
144 | END DrawText; |
145 | 145 | ||
Line 146... | Line 146... | ||
146 | 146 | ||
147 | PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR); |
147 | PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR); |
148 | BEGIN |
148 | BEGIN |
149 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0) |
149 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0) |
Line 150... | Line 150... | ||
150 | END DrawText69; |
150 | END DrawText69; |
151 | 151 | ||
152 | 152 | ||
Line 153... | Line 153... | ||
153 | PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR); |
153 | PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR); |
154 | BEGIN |
154 | BEGIN |
155 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, colors.work) |
155 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, colors.work) |
156 | END DrawText866; |
156 | END DrawText866; |
Line 157... | Line 157... | ||
157 | 157 | ||
158 | 158 | ||
159 | PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR); |
159 | PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR); |
160 | BEGIN |
160 | BEGIN |
161 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor) |
161 | KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor) |
162 | END DrawText866bk; |
162 | END DrawText866bk; |
163 | 163 | ||
164 | 164 | ||
165 | PROCEDURE MousePos* (VAR x, y: INTEGER); |
165 | PROCEDURE MousePos* (VAR x, y: INTEGER); |
166 | VAR |
166 | VAR |
167 | res: INTEGER; |
167 | res: INTEGER; |
168 | BEGIN |
168 | BEGIN |
169 | res := KOSAPI.sysfunc2(37, 0); |
169 | res := KOSAPI.sysfunc2(37, 0); |
170 | y := res MOD 65536; |
170 | y := res MOD 65536; |
171 | x := res DIV 65536 |
171 | x := res DIV 65536 |
172 | END MousePos; |
172 | END MousePos; |
Line 173... | Line 173... | ||
173 | 173 | ||
174 | 174 | ||
175 | PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR); |
175 | PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR); |
176 | VAR |
176 | VAR |
Line 177... | Line 177... | ||
177 | x, y: INTEGER; |
177 | x, y: INTEGER; |
178 | BEGIN |
178 | BEGIN |
179 | KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color); |
179 | KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color); |
180 | x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2; |
180 | x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2; |
Line 181... | Line 181... | ||
181 | y := Top + (Height - fontHeight) DIV 2 + 1; |
181 | y := Top + (Height - fontHeight) DIV 2 + 1; |
182 | DrawText(x, y, colors.button_text, Caption) |
182 | DrawText(x, y, colors.button_text, Caption) |
183 | END CreateButton; |
183 | END CreateButton; |
184 | 184 | ||
185 | 185 | ||
186 | PROCEDURE DeleteButton* (id: INTEGER); |
186 | PROCEDURE DeleteButton* (id: INTEGER); |
187 | BEGIN |
187 | BEGIN |
188 | KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0) |
188 | KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0) |
189 | END DeleteButton; |
189 | END DeleteButton; |
190 | 190 | ||
Line 191... | Line 191... | ||
191 | 191 | ||
192 | PROCEDURE GetTickCount* (): INTEGER; |
192 | PROCEDURE GetTickCount* (): INTEGER; |
Line 193... | Line 193... | ||
193 | RETURN KOSAPI.sysfunc2(26, 9) |
193 | RETURN KOSAPI.sysfunc2(26, 9) |
194 | END GetTickCount; |
194 | END GetTickCount; |
195 | 195 | ||
196 | 196 | ||
197 | PROCEDURE Pause* (time: INTEGER); |
197 | PROCEDURE Pause* (time: INTEGER); |
198 | BEGIN |
198 | BEGIN |
199 | KOSAPI.sysfunc2(5, time) |
199 | KOSAPI.sysfunc2(5, time) |
200 | END Pause; |
200 | END Pause; |
201 | 201 | ||
202 | 202 | ||
203 | PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER; |
203 | PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER; |
204 | VAR |
204 | VAR |
205 | res: INTEGER; |
205 | res: INTEGER; |
206 | BEGIN |
206 | BEGIN |
207 | middle := FALSE; |
207 | middle := FALSE; |
208 | res := KOSAPI.sysfunc1(17); |
208 | res := KOSAPI.sysfunc1(17); |
209 | IF res MOD 256 = 0 THEN |
209 | IF res MOD 256 = 0 THEN |
210 | res := LSR(res, 8) |
210 | res := LSR(res, 8) |
211 | ELSIF res MOD 256 = 4 THEN |
211 | ELSIF res MOD 256 = 4 THEN |
212 | res := LSR(res, 8); |
212 | res := LSR(res, 8); |
213 | middle := TRUE |
213 | middle := TRUE |
Line 214... | Line 214... | ||
214 | ELSE |
214 | ELSE |
215 | res := 0 |
215 | res := 0 |
Line 274... | Line 274... | ||
274 | END SetCurFolder; |
274 | END SetCurFolder; |
Line 275... | Line 275... | ||
275 | 275 | ||
276 | 276 | ||
277 | PROCEDURE DrawRect* (x, y, width, height, color: INTEGER); |
277 | PROCEDURE DrawRect* (x, y, width, height, color: INTEGER); |
278 | BEGIN |
278 | BEGIN |
Line 279... | Line 279... | ||
279 | KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color) |
279 | KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color) |
280 | END DrawRect; |
280 | END DrawRect; |
281 | 281 | ||
282 | 282 | ||
Line 283... | Line 283... | ||
283 | PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER); |
283 | PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER); |
284 | BEGIN |
284 | BEGIN |
285 | KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color) |
285 | KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color) |
286 | END DrawLine; |
286 | END DrawLine; |
Line 287... | Line 287... | ||
287 | 287 | ||
288 | 288 | ||
289 | PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER); |
289 | PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER); |
290 | BEGIN |
290 | BEGIN |
Line 291... | Line 291... | ||
291 | KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y) |
291 | KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y) |
292 | END DrawImage; |
292 | END DrawImage; |
293 | 293 | ||
Line 294... | Line 294... | ||
294 | 294 | ||
295 | PROCEDURE SetEventsMask* (mask: SET); |
295 | PROCEDURE SetEventsMask* (mask: SET); |
296 | BEGIN |
296 | BEGIN |
Line 297... | Line 297... | ||
297 | KOSAPI.sysfunc2(40, ORD(mask)) |
297 | KOSAPI.sysfunc2(40, ORD(mask)) |
298 | END SetEventsMask; |
298 | END SetEventsMask; |
299 | 299 | ||
Line 300... | Line 300... | ||
300 | 300 | ||
301 | PROCEDURE SkinHeight* (): INTEGER; |
301 | PROCEDURE SkinHeight* (): INTEGER; |
302 | RETURN KOSAPI.sysfunc2(48, 4) |
302 | RETURN KOSAPI.sysfunc2(48, 4) |
Line 303... | Line 303... | ||
303 | END SkinHeight; |
303 | END SkinHeight; |
304 | 304 | ||
305 | 305 | ||
Line 306... | Line 306... | ||
306 | PROCEDURE GetKey* (): INTEGER; |
306 | PROCEDURE GetKey* (): INTEGER; |
307 | RETURN KOSAPI.sysfunc1(2) |
307 | RETURN KOSAPI.sysfunc1(2) |
308 | END GetKey; |
308 | END GetKey; |
309 | 309 | ||
Line 310... | Line 310... | ||
310 | 310 | ||
311 | PROCEDURE MouseState* (): SET; |
311 | PROCEDURE MouseState* (): SET; |
312 | RETURN BITS(KOSAPI.sysfunc2(37, 3)) |
312 | RETURN BITS(KOSAPI.sysfunc2(37, 3)) |
313 | END MouseState; |
313 | END MouseState; |
314 | 314 | ||
315 | 315 | ||
316 | PROCEDURE Scroll* (): INTEGER; |
316 | PROCEDURE Scroll* (): INTEGER; |
317 | RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16) |
317 | RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16) |
Line 318... | Line 318... | ||
318 | END Scroll; |
318 | END Scroll; |
319 | 319 | ||
320 | 320 | ||
321 | PROCEDURE GetControlKeys* (): SET; |
321 | PROCEDURE GetControlKeys* (): SET; |
322 | RETURN BITS(KOSAPI.sysfunc2(66, 3)) |
322 | RETURN BITS(KOSAPI.sysfunc2(66, 3)) |
323 | END GetControlKeys; |
323 | END GetControlKeys; |
324 | 324 | ||
325 | 325 | ||
326 | PROCEDURE GetSystemColors*; |
326 | PROCEDURE GetSystemColors*; |
327 | BEGIN |
327 | BEGIN |
328 | KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(colors), 40) |
328 | KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(colors), 40) |
329 | END GetSystemColors; |
329 | END GetSystemColors; |
330 | 330 | ||
Line 331... | Line 331... | ||
331 | 331 | ||
332 | PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN); |
332 | PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN); |
Line 431... | Line 431... | ||
431 | SYSTEM.PUT32(ptr, 1); |
431 | SYSTEM.PUT32(ptr, 1); |
432 | SYSTEM.GET(ptr + 12, size); |
432 | SYSTEM.GET(ptr + 12, size); |
433 | ptr2 := KOSAPI.malloc(size); |
433 | ptr2 := KOSAPI.malloc(size); |
434 | IF ptr2 # 0 THEN |
434 | IF ptr2 # 0 THEN |
435 | SYSTEM.MOVE(ptr + 16, ptr2, size) |
435 | SYSTEM.MOVE(ptr + 16, ptr2, size) |
436 | END |
436 | END |
437 | END; |
437 | END; |
438 | ptr := KOSAPI.free(ptr) |
438 | ptr := KOSAPI.free(ptr) |
439 | END |
439 | END |
440 | END; |
440 | END; |
441 | text_ptr := ptr2; |
441 | text_ptr := ptr2; |