Subversion Repositories Kolibri OS

Rev

Rev 9295 | Rev 9522 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8728 leency 1
(*
2
    Copyright 2021 Anton Krotov
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
23
    KOSAPI, SYSTEM;
24
 
25
CONST
26
    fontWidth* = 8;
27
    fontHeight* = 16;
28
 
8762 leency 29
VAR
8728 leency 30
 
8762 leency 31
    winColor*, textColor*, btnColor*, btnTextColor*,
32
    toolbarColor*, scrollColor*, scrollBkColor*,
9295 akron1 33
    borderColor*, shadowColor*, (*darkColor,*) lightColor*,
9448 akron1 34
    textToolbarColor*, disTextToolbarColor*: INTEGER;
8762 leency 35
 
36
 
8728 leency 37
PROCEDURE GetCommandLine* (): INTEGER;
38
    RETURN KOSAPI.GetCommandLine()
39
END GetCommandLine;
40
 
41
 
42
PROCEDURE GetName* (): INTEGER;
43
    RETURN KOSAPI.GetName()
44
END GetName;
45
 
46
 
47
PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR);
48
BEGIN
9210 akron1 49
    KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0]))
8728 leency 50
END CreateWindow;
51
 
52
 
53
PROCEDURE BeginDraw*;
54
BEGIN
55
    KOSAPI.sysfunc2(12, 1)
56
END BeginDraw;
57
 
58
 
59
PROCEDURE EndDraw*;
60
BEGIN
61
    KOSAPI.sysfunc2(12, 2)
62
END EndDraw;
63
 
64
 
9448 akron1 65
PROCEDURE EventTimeout* (t: INTEGER): INTEGER;
66
    RETURN KOSAPI.sysfunc2(23, t)
67
END EventTimeout;
8728 leency 68
 
69
 
70
PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER);
71
VAR
72
    buffer: ARRAY 1024 OF BYTE;
73
BEGIN
74
    KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1);
75
    SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a);
76
    SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b);
77
END ThreadInfo;
78
 
79
 
80
PROCEDURE WinSize* (VAR width, height: INTEGER);
81
BEGIN
82
    ThreadInfo(42, 46, width, height)
83
END WinSize;
84
 
85
 
86
PROCEDURE WinPos* (VAR x, y: INTEGER);
87
BEGIN
88
    ThreadInfo(34, 38, x, y)
89
END WinPos;
90
 
91
 
92
PROCEDURE ClientSize* (VAR width, height: INTEGER);
93
BEGIN
94
    ThreadInfo(62, 66, width, height)
95
END ClientSize;
96
 
97
 
98
PROCEDURE ClientPos* (VAR x, y: INTEGER);
99
BEGIN
100
    ThreadInfo(54, 58, x, y)
101
END ClientPos;
102
 
103
 
8772 leency 104
PROCEDURE ScreenSize* (VAR width, height: INTEGER);
105
VAR
106
    eax, ebx: INTEGER;
107
    right, left, top, bottom: INTEGER;
108
BEGIN
109
    eax := KOSAPI.sysfunc22(48, 5, ebx);
110
    left := LSR(eax, 16);
111
    right := eax MOD 65536;
112
    top := LSR(ebx, 16);
113
    bottom := ebx MOD 65536;
114
    width := right - left + 1;
115
    height := bottom - top + 1
116
END ScreenSize;
117
 
118
 
8728 leency 119
PROCEDURE ThreadID* (): INTEGER;
120
VAR
121
    id: INTEGER;
122
BEGIN
123
    ThreadInfo(30, 30, id, id)
124
    RETURN id
125
END ThreadID;
126
 
127
 
128
PROCEDURE RolledUp* (): BOOLEAN;
129
VAR
130
    buffer: ARRAY 1024 OF BYTE;
131
BEGIN
132
    KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1)
133
    RETURN ODD(LSR(buffer[70], 2))
134
END RolledUp;
135
 
136
 
137
PROCEDURE SetWinSize* (width, height: INTEGER);
138
BEGIN
139
    KOSAPI.sysfunc5(67, -1, -1, width, height)
140
END SetWinSize;
141
 
142
 
143
PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR);
144
BEGIN
9210 akron1 145
    KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0)
8728 leency 146
END DrawText;
147
 
148
 
149
PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR);
150
BEGIN
9210 akron1 151
    KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0)
8728 leency 152
END DrawText69;
153
 
154
 
155
PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR);
156
BEGIN
9210 akron1 157
    KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, winColor)
8728 leency 158
END DrawText866;
159
 
160
 
9050 leency 161
PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR);
162
BEGIN
9210 akron1 163
    KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor)
9050 leency 164
END DrawText866bk;
165
 
166
 
8728 leency 167
PROCEDURE MousePos* (VAR x, y: INTEGER);
168
VAR
169
    res: INTEGER;
170
BEGIN
171
    res := KOSAPI.sysfunc2(37, 0);
172
    y := res MOD 65536;
173
    x := res DIV 65536
174
END MousePos;
175
 
176
 
177
PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR);
178
VAR
179
    x, y: INTEGER;
180
BEGIN
181
    KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color);
182
    x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2;
183
    y := Top + (Height - fontHeight) DIV 2 + 1;
8762 leency 184
    DrawText(x, y, btnTextColor, Caption)
8728 leency 185
END CreateButton;
186
 
187
 
188
PROCEDURE DeleteButton* (id: INTEGER);
189
BEGIN
190
    KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0)
191
END DeleteButton;
192
 
193
 
194
PROCEDURE GetTickCount* (): INTEGER;
195
    RETURN KOSAPI.sysfunc2(26, 9)
196
END GetTickCount;
197
 
198
 
199
PROCEDURE Pause* (time: INTEGER);
200
BEGIN
201
    KOSAPI.sysfunc2(5, time)
202
END Pause;
203
 
204
 
9060 leency 205
PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER;
8728 leency 206
VAR
207
    res: INTEGER;
208
BEGIN
9060 leency 209
    middle := FALSE;
8728 leency 210
    res := KOSAPI.sysfunc1(17);
211
    IF res MOD 256 = 0 THEN
212
        res := LSR(res, 8)
9060 leency 213
    ELSIF res MOD 256 = 4 THEN
214
        res := LSR(res, 8);
215
        middle := TRUE
8728 leency 216
    ELSE
217
        res := 0
218
    END
219
    RETURN res
220
END ButtonCode;
221
 
222
 
223
PROCEDURE Exit*;
224
BEGIN
225
    KOSAPI.sysfunc1(-1)
226
END Exit;
227
 
228
 
229
PROCEDURE ExitID* (tid: INTEGER);
230
BEGIN
231
    KOSAPI.sysfunc3(18, 18, tid)
232
END ExitID;
233
 
234
 
235
PROCEDURE CreateThread* (proc: INTEGER; stack: ARRAY OF INTEGER): INTEGER;
9210 akron1 236
VAR
237
	tid: INTEGER;
238
BEGIN
239
    tid := KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2]));
240
    IF tid = -1 THEN
241
    	tid := 0
242
    END
243
    RETURN tid
8728 leency 244
END CreateThread;
245
 
246
 
247
PROCEDURE Run* (program, param: ARRAY OF CHAR);
248
TYPE
249
 
250
    info_struct = RECORD
251
        subfunc : INTEGER;
252
        flags   : INTEGER;
253
        param   : INTEGER;
254
        rsrvd1  : INTEGER;
255
        rsrvd2  : INTEGER;
256
        fname   : ARRAY 1024 OF CHAR
257
    END;
258
 
259
VAR
260
    info: info_struct;
261
 
262
BEGIN
263
    info.subfunc := 7;
264
    info.flags   := 0;
265
    info.param   := SYSTEM.ADR(param[0]);
266
    info.rsrvd1  := 0;
267
    info.rsrvd2  := 0;
268
    COPY(program, info.fname);
269
    KOSAPI.sysfunc2(70, SYSTEM.ADR(info))
270
END Run;
271
 
272
 
273
PROCEDURE DrawRect* (x, y, width, height, color: INTEGER);
274
BEGIN
275
    KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color)
276
END DrawRect;
277
 
278
 
279
PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER);
280
BEGIN
281
    KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color)
282
END DrawLine;
283
 
284
 
285
PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER);
286
BEGIN
287
    KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y)
288
END DrawImage;
289
 
290
 
291
PROCEDURE SetEventsMask* (mask: SET);
292
BEGIN
293
    KOSAPI.sysfunc2(40, ORD(mask))
294
END SetEventsMask;
295
 
296
 
297
PROCEDURE SkinHeight* (): INTEGER;
298
    RETURN KOSAPI.sysfunc2(48, 4)
299
END SkinHeight;
300
 
301
 
302
PROCEDURE GetKey* (): INTEGER;
303
    RETURN KOSAPI.sysfunc1(2)
304
END GetKey;
305
 
306
 
307
PROCEDURE MouseState* (): SET;
308
    RETURN BITS(KOSAPI.sysfunc2(37, 3))
309
END MouseState;
310
 
311
 
312
PROCEDURE Scroll* (): INTEGER;
313
    RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16)
314
END Scroll;
315
 
316
 
317
PROCEDURE GetControlKeys* (): SET;
318
    RETURN BITS(KOSAPI.sysfunc2(66, 3))
319
END GetControlKeys;
320
 
321
 
322
PROCEDURE SetIPC* (buffer: ARRAY OF INTEGER);
323
BEGIN
9174 akron1 324
    KOSAPI.sysfunc4(60, 1, SYSTEM.ADR(buffer[0]), LEN(buffer)*SYSTEM.SIZE(INTEGER))
8728 leency 325
END SetIPC;
326
 
327
 
9210 akron1 328
PROCEDURE SendIPC* (tid: INTEGER; msg: ARRAY OF INTEGER);
8728 leency 329
BEGIN
9210 akron1 330
	KOSAPI.sysfunc5(60, 2, tid, SYSTEM.ADR(msg[0]), SYSTEM.SIZE(INTEGER)*LEN(msg))
8728 leency 331
END SendIPC;
332
 
333
 
8762 leency 334
PROCEDURE GetSystemColors*;
335
VAR
336
    buf: ARRAY 10 OF INTEGER;
337
BEGIN
338
    ASSERT(LEN(buf) >= 10);
339
    KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(buf[0]), 40);
340
 
9295 akron1 341
    (*darkColor := buf[2];*)
9175 akron1 342
    lightColor := buf[3];
8762 leency 343
    winColor := buf[5];
344
    textColor := buf[8];
345
    btnColor := buf[6];
346
    btnTextColor := buf[7];
347
    scrollColor := btnColor;
348
    scrollBkColor := winColor;
349
    borderColor := buf[9];
9175 akron1 350
 
9295 akron1 351
    toolbarColor := lightColor;(*0DFDFDFH;*)
352
    shadowColor := borderColor;(*0808080H;*)
9448 akron1 353
    textToolbarColor := 00000FFH;
354
    disTextToolbarColor := borderColor;(*0808080H*)
8762 leency 355
END GetSystemColors;
356
 
357
 
9187 akron1 358
PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN);
359
VAR
360
    kbState: SET;
361
BEGIN
362
    kbState := GetControlKeys();
363
    shift := {0, 1} * kbState # {};
364
    ctrl := {2, 3} * kbState # {};
365
END getKBState;
366
 
367
 
9208 akron1 368
PROCEDURE mouse* (VAR msState: SET; VAR x, y: INTEGER);
369
VAR
370
    mouseX, mouseY,
371
    cliX, cliY,
372
    winX, winY: INTEGER;
373
BEGIN
374
	msState := MouseState();
375
    MousePos(mouseX, mouseY);
376
    WinPos(winX, winY);
377
    ClientPos(cliX, cliY);
378
    x := mouseX - winX - cliX;
379
    y := mouseY - winY - cliY
380
END mouse;
381
 
382
 
9210 akron1 383
PROCEDURE SetCaption* (text: ARRAY OF CHAR);
384
BEGIN
385
	KOSAPI.sysfunc4(71, 2, SYSTEM.ADR(text[0]), 0)
386
END SetCaption;
387
 
388
 
9448 akron1 389
PROCEDURE CBCount* (): INTEGER;
390
	RETURN KOSAPI.sysfunc2(54, 0)
391
END CBCount;
392
 
393
 
394
PROCEDURE CBRead* (slot: INTEGER): INTEGER;
395
	RETURN KOSAPI.sysfunc3(54, 1, slot)
396
END CBRead;
397
 
398
 
399
PROCEDURE CBWrite* (size, ptr: INTEGER);
400
BEGIN
401
	KOSAPI.sysfunc4(54, 2, size, ptr)
402
END CBWrite;
403
 
404
 
405
PROCEDURE CBDelSlot*;
406
BEGIN
407
	KOSAPI.sysfunc2(54, 3)
408
END CBDelSlot;
409
 
410
 
411
PROCEDURE GetThreadSlot* (tid: INTEGER): INTEGER;
412
	RETURN KOSAPI.sysfunc3(18, 21, tid)
413
END GetThreadSlot;
414
 
415
 
8728 leency 416
END KolibriOS.