Subversion Repositories Kolibri OS

Rev

Rev 9730 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8728 leency 1
(*
9906 akron1 2
    Copyright 2021-2023 Anton Krotov
8728 leency 3
 
4
    This file is part of CEdit.
5
 
6
    CEdit is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    CEdit is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with CEdit. If not, see .
18
*)
19
 
20
MODULE KolibriOS;
21
 
22
IMPORT
9906 akron1 23
	KOSAPI, SYSTEM, U := Utils;
8728 leency 24
 
25
CONST
9906 akron1 26
	fontWidth* = 8;
27
	fontHeight* = 16;
8728 leency 28
 
8762 leency 29
VAR
8728 leency 30
 
9628 akron1 31
	colors*: RECORD
32
		rsrvd,
33
		taskbar,
34
		dark*,
35
		light*,
36
		window_title*,
37
		work*,
38
		button*,
39
		button_text*,
40
		work_text*,
41
		line*: INTEGER
42
	END;
8762 leency 43
 
44
 
8728 leency 45
PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR);
46
BEGIN
9906 akron1 47
	KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0]))
8728 leency 48
END CreateWindow;
49
 
50
 
51
PROCEDURE BeginDraw*;
52
BEGIN
9906 akron1 53
	KOSAPI.sysfunc2(12, 1)
8728 leency 54
END BeginDraw;
55
 
56
 
57
PROCEDURE EndDraw*;
58
BEGIN
9906 akron1 59
	KOSAPI.sysfunc2(12, 2)
8728 leency 60
END EndDraw;
61
 
62
 
9448 akron1 63
PROCEDURE EventTimeout* (t: INTEGER): INTEGER;
9906 akron1 64
	RETURN KOSAPI.sysfunc2(23, t)
9448 akron1 65
END EventTimeout;
8728 leency 66
 
67
 
68
PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER);
69
VAR
9906 akron1 70
	buffer: ARRAY 1024 OF BYTE;
8728 leency 71
BEGIN
9906 akron1 72
	KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1);
73
	SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a);
74
	SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b);
8728 leency 75
END ThreadInfo;
76
 
77
 
78
PROCEDURE WinSize* (VAR width, height: INTEGER);
79
BEGIN
9906 akron1 80
	ThreadInfo(42, 46, width, height)
8728 leency 81
END WinSize;
82
 
83
 
84
PROCEDURE WinPos* (VAR x, y: INTEGER);
85
BEGIN
9906 akron1 86
	ThreadInfo(34, 38, x, y)
8728 leency 87
END WinPos;
88
 
89
 
90
PROCEDURE ClientSize* (VAR width, height: INTEGER);
91
BEGIN
9906 akron1 92
	ThreadInfo(62, 66, width, height)
8728 leency 93
END ClientSize;
94
 
95
 
96
PROCEDURE ClientPos* (VAR x, y: INTEGER);
97
BEGIN
9906 akron1 98
	ThreadInfo(54, 58, x, y)
8728 leency 99
END ClientPos;
100
 
101
 
8772 leency 102
PROCEDURE ScreenSize* (VAR width, height: INTEGER);
103
VAR
9906 akron1 104
	eax, ebx: INTEGER;
105
	right, left, top, bottom: INTEGER;
8772 leency 106
BEGIN
9906 akron1 107
	eax := KOSAPI.sysfunc22(48, 5, ebx);
108
	left := LSR(eax, 16);
109
	right := eax MOD 65536;
110
	top := LSR(ebx, 16);
111
	bottom := ebx MOD 65536;
112
	width := right - left + 1;
113
	height := bottom - top + 1
8772 leency 114
END ScreenSize;
115
 
116
 
8728 leency 117
PROCEDURE ThreadID* (): INTEGER;
118
VAR
9906 akron1 119
	id: INTEGER;
8728 leency 120
BEGIN
9906 akron1 121
	ThreadInfo(30, 30, id, id)
122
	RETURN id
8728 leency 123
END ThreadID;
124
 
125
 
126
PROCEDURE RolledUp* (): BOOLEAN;
127
VAR
9906 akron1 128
	buffer: ARRAY 1024 OF BYTE;
8728 leency 129
BEGIN
9906 akron1 130
	KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1)
131
	RETURN ODD(LSR(buffer[70], 2))
8728 leency 132
END RolledUp;
133
 
134
 
135
PROCEDURE SetWinSize* (width, height: INTEGER);
136
BEGIN
9906 akron1 137
	KOSAPI.sysfunc5(67, -1, -1, width, height)
8728 leency 138
END SetWinSize;
139
 
140
 
141
PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR);
142
BEGIN
9906 akron1 143
	KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0)
8728 leency 144
END DrawText;
145
 
146
 
147
PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR);
148
BEGIN
9906 akron1 149
	KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0)
8728 leency 150
END DrawText69;
151
 
152
 
153
PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR);
154
BEGIN
9906 akron1 155
	KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, colors.work)
8728 leency 156
END DrawText866;
157
 
158
 
9050 leency 159
PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR);
160
BEGIN
9906 akron1 161
	KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor)
9050 leency 162
END DrawText866bk;
163
 
164
 
8728 leency 165
PROCEDURE MousePos* (VAR x, y: INTEGER);
166
VAR
9906 akron1 167
	res: INTEGER;
8728 leency 168
BEGIN
9906 akron1 169
	res := KOSAPI.sysfunc2(37, 0);
170
	y := res MOD 65536;
171
	x := res DIV 65536
8728 leency 172
END MousePos;
173
 
174
 
175
PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR);
176
VAR
9906 akron1 177
	x, y: INTEGER;
8728 leency 178
BEGIN
9906 akron1 179
	KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color);
180
	x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2;
181
	y := Top + (Height - fontHeight) DIV 2 + 1;
182
	DrawText(x, y, colors.button_text, Caption)
8728 leency 183
END CreateButton;
184
 
185
 
186
PROCEDURE DeleteButton* (id: INTEGER);
187
BEGIN
9906 akron1 188
	KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0)
8728 leency 189
END DeleteButton;
190
 
191
 
192
PROCEDURE GetTickCount* (): INTEGER;
9906 akron1 193
	RETURN KOSAPI.sysfunc2(26, 9)
8728 leency 194
END GetTickCount;
195
 
196
 
197
PROCEDURE Pause* (time: INTEGER);
198
BEGIN
9906 akron1 199
	KOSAPI.sysfunc2(5, time)
8728 leency 200
END Pause;
201
 
202
 
9060 leency 203
PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER;
8728 leency 204
VAR
9906 akron1 205
	res: INTEGER;
8728 leency 206
BEGIN
9906 akron1 207
	middle := FALSE;
208
	res := KOSAPI.sysfunc1(17);
209
	IF res MOD 256 = 0 THEN
210
		res := LSR(res, 8)
211
	ELSIF res MOD 256 = 4 THEN
212
		res := LSR(res, 8);
213
		middle := TRUE
214
	ELSE
215
		res := 0
216
	END
217
	RETURN res
8728 leency 218
END ButtonCode;
219
 
220
 
221
PROCEDURE Exit*;
222
BEGIN
9906 akron1 223
	KOSAPI.sysfunc1(-1)
8728 leency 224
END Exit;
225
 
226
 
227
PROCEDURE ExitID* (tid: INTEGER);
228
BEGIN
9906 akron1 229
	KOSAPI.sysfunc3(18, 18, tid)
8728 leency 230
END ExitID;
231
 
232
 
233
PROCEDURE CreateThread* (proc: INTEGER; stack: ARRAY OF INTEGER): INTEGER;
9210 akron1 234
VAR
235
	tid: INTEGER;
236
BEGIN
9906 akron1 237
	tid := KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2]));
238
	IF tid = -1 THEN
239
		tid := 0
240
	END
241
	RETURN tid
8728 leency 242
END CreateThread;
243
 
244
 
245
PROCEDURE Run* (program, param: ARRAY OF CHAR);
246
TYPE
247
 
9906 akron1 248
	info_struct = RECORD
249
		subfunc : INTEGER;
250
		flags   : INTEGER;
251
		param   : INTEGER;
252
		rsrvd1  : INTEGER;
253
		rsrvd2  : INTEGER;
254
		fname   : ARRAY 1024 OF CHAR
255
	END;
8728 leency 256
 
257
VAR
9906 akron1 258
	info: info_struct;
8728 leency 259
 
260
BEGIN
9906 akron1 261
	info.subfunc := 7;
262
	info.flags   := 0;
263
	info.param   := SYSTEM.ADR(param[0]);
264
	info.rsrvd1  := 0;
265
	info.rsrvd2  := 0;
266
	COPY(program, info.fname);
267
	KOSAPI.sysfunc2(70, SYSTEM.ADR(info))
8728 leency 268
END Run;
269
 
270
 
9630 akron1 271
PROCEDURE SetCurFolder* (folder: ARRAY OF CHAR);
272
BEGIN
273
	KOSAPI.sysfunc3(30, 1, SYSTEM.ADR(folder[0]));
274
END SetCurFolder;
275
 
276
 
8728 leency 277
PROCEDURE DrawRect* (x, y, width, height, color: INTEGER);
278
BEGIN
9906 akron1 279
	KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color)
8728 leency 280
END DrawRect;
281
 
282
 
283
PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER);
284
BEGIN
9906 akron1 285
	KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color)
8728 leency 286
END DrawLine;
287
 
288
 
289
PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER);
290
BEGIN
9906 akron1 291
	KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y)
8728 leency 292
END DrawImage;
293
 
294
 
295
PROCEDURE SetEventsMask* (mask: SET);
296
BEGIN
9906 akron1 297
	KOSAPI.sysfunc2(40, ORD(mask))
8728 leency 298
END SetEventsMask;
299
 
300
 
301
PROCEDURE SkinHeight* (): INTEGER;
9906 akron1 302
	RETURN KOSAPI.sysfunc2(48, 4)
8728 leency 303
END SkinHeight;
304
 
305
 
306
PROCEDURE GetKey* (): INTEGER;
9906 akron1 307
	RETURN KOSAPI.sysfunc1(2)
8728 leency 308
END GetKey;
309
 
310
 
311
PROCEDURE MouseState* (): SET;
9906 akron1 312
	RETURN BITS(KOSAPI.sysfunc2(37, 3))
8728 leency 313
END MouseState;
314
 
315
 
316
PROCEDURE Scroll* (): INTEGER;
9906 akron1 317
	RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16)
8728 leency 318
END Scroll;
319
 
320
 
321
PROCEDURE GetControlKeys* (): SET;
9906 akron1 322
	RETURN BITS(KOSAPI.sysfunc2(66, 3))
8728 leency 323
END GetControlKeys;
324
 
325
 
8762 leency 326
PROCEDURE GetSystemColors*;
327
BEGIN
9906 akron1 328
	KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(colors), 40)
8762 leency 329
END GetSystemColors;
330
 
331
 
9187 akron1 332
PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN);
333
VAR
9906 akron1 334
	kbState: SET;
9187 akron1 335
BEGIN
9906 akron1 336
	kbState := GetControlKeys();
337
	shift := {0, 1} * kbState # {};
338
	ctrl := {2, 3} * kbState # {};
9187 akron1 339
END getKBState;
340
 
341
 
9208 akron1 342
PROCEDURE mouse* (VAR msState: SET; VAR x, y: INTEGER);
343
VAR
9906 akron1 344
	mouseX, mouseY,
345
	cliX, cliY,
346
	winX, winY: INTEGER;
9208 akron1 347
BEGIN
348
	msState := MouseState();
9906 akron1 349
	MousePos(mouseX, mouseY);
350
	WinPos(winX, winY);
351
	ClientPos(cliX, cliY);
352
	x := mouseX - winX - cliX;
353
	y := mouseY - winY - cliY
9208 akron1 354
END mouse;
355
 
356
 
9210 akron1 357
PROCEDURE SetCaption* (text: ARRAY OF CHAR);
358
BEGIN
359
	KOSAPI.sysfunc4(71, 2, SYSTEM.ADR(text[0]), 0)
360
END SetCaption;
361
 
362
 
9448 akron1 363
PROCEDURE CBCount* (): INTEGER;
364
	RETURN KOSAPI.sysfunc2(54, 0)
365
END CBCount;
366
 
367
 
368
PROCEDURE CBRead* (slot: INTEGER): INTEGER;
369
	RETURN KOSAPI.sysfunc3(54, 1, slot)
370
END CBRead;
371
 
372
 
373
PROCEDURE CBWrite* (size, ptr: INTEGER);
374
BEGIN
375
	KOSAPI.sysfunc4(54, 2, size, ptr)
376
END CBWrite;
377
 
378
 
379
PROCEDURE CBDelSlot*;
380
BEGIN
381
	KOSAPI.sysfunc2(54, 3)
382
END CBDelSlot;
383
 
384
 
385
PROCEDURE GetThreadSlot* (tid: INTEGER): INTEGER;
386
	RETURN KOSAPI.sysfunc3(18, 21, tid)
387
END GetThreadSlot;
388
 
389
 
9522 akron1 390
PROCEDURE PutPixel* (x, y, color: INTEGER);
391
BEGIN
392
	KOSAPI.sysfunc5(1, x, y, color, 0)
393
END PutPixel;
394
 
395
 
9730 akron1 396
PROCEDURE SetIPC* (buffer: ARRAY OF INTEGER);
397
BEGIN
398
	KOSAPI.sysfunc4(60, 1, SYSTEM.ADR(buffer[0]), LEN(buffer)*SYSTEM.SIZE(INTEGER))
399
END SetIPC;
400
 
401
 
402
PROCEDURE SendIPC* (pid, ptr, size: INTEGER);
403
BEGIN
404
	KOSAPI.sysfunc5(60, 2, pid, ptr, size)
405
END SendIPC;
406
 
407
 
9708 akron1 408
PROCEDURE docpack* (VAR param: ARRAY OF CHAR; VAR text_ptr, text_size: INTEGER);
409
VAR
410
	i, size, ptr, ptr2: INTEGER;
411
	s: ARRAY 32 OF WCHAR;
9628 akron1 412
BEGIN
9708 akron1 413
	ptr2 := 0;
414
	U.reverse8(param);
415
	param[LENGTH(param) - 1] := 0X;
416
	U.reverse8(param);
417
	i := 0;
418
	WHILE param[i] # 0X DO
419
		s[i] := WCHR(ORD(param[i]));
420
		INC(i)
421
	END;
422
	IF U.str2int(s, size) THEN
423
		INC(size, 20);
424
		ptr := KOSAPI.malloc(size);
425
		IF ptr # 0 THEN
426
			SYSTEM.PUT32(ptr, 0);
427
			SYSTEM.PUT32(ptr + 4, 8);
428
			KOSAPI.sysfunc4(60, 1, ptr, size);
429
			SetEventsMask({6});
430
			IF EventTimeout(200) = 7 THEN
431
				SYSTEM.PUT32(ptr, 1);
432
				SYSTEM.GET(ptr + 12, size);
433
				ptr2 := KOSAPI.malloc(size);
434
				IF ptr2 # 0 THEN
435
					SYSTEM.MOVE(ptr + 16, ptr2, size)
9906 akron1 436
				END
9708 akron1 437
			END;
438
			ptr := KOSAPI.free(ptr)
439
		END
440
	END;
441
	text_ptr := ptr2;
442
	text_size := size
443
END docpack;
444
 
445
 
446
BEGIN
9628 akron1 447
	GetSystemColors
8728 leency 448
END KolibriOS.