Subversion Repositories Kolibri OS

Rev

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;