1,5 → 1,5 |
(* |
Copyright 2021, 2022 Anton Krotov |
Copyright 2021-2023 Anton Krotov |
|
This file is part of CEdit. |
|
20,11 → 20,11 |
MODULE KolibriOS; |
|
IMPORT |
KOSAPI, SYSTEM, U := Utils; |
KOSAPI, SYSTEM, U := Utils; |
|
CONST |
fontWidth* = 8; |
fontHeight* = 16; |
fontWidth* = 8; |
fontHeight* = 16; |
|
VAR |
|
44,189 → 44,189 |
|
PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); |
BEGIN |
KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0])) |
KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0])) |
END CreateWindow; |
|
|
PROCEDURE BeginDraw*; |
BEGIN |
KOSAPI.sysfunc2(12, 1) |
KOSAPI.sysfunc2(12, 1) |
END BeginDraw; |
|
|
PROCEDURE EndDraw*; |
BEGIN |
KOSAPI.sysfunc2(12, 2) |
KOSAPI.sysfunc2(12, 2) |
END EndDraw; |
|
|
PROCEDURE EventTimeout* (t: INTEGER): INTEGER; |
RETURN KOSAPI.sysfunc2(23, t) |
RETURN KOSAPI.sysfunc2(23, t) |
END EventTimeout; |
|
|
PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER); |
VAR |
buffer: ARRAY 1024 OF BYTE; |
buffer: ARRAY 1024 OF BYTE; |
BEGIN |
KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1); |
SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a); |
SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b); |
KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1); |
SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a); |
SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b); |
END ThreadInfo; |
|
|
PROCEDURE WinSize* (VAR width, height: INTEGER); |
BEGIN |
ThreadInfo(42, 46, width, height) |
ThreadInfo(42, 46, width, height) |
END WinSize; |
|
|
PROCEDURE WinPos* (VAR x, y: INTEGER); |
BEGIN |
ThreadInfo(34, 38, x, y) |
ThreadInfo(34, 38, x, y) |
END WinPos; |
|
|
PROCEDURE ClientSize* (VAR width, height: INTEGER); |
BEGIN |
ThreadInfo(62, 66, width, height) |
ThreadInfo(62, 66, width, height) |
END ClientSize; |
|
|
PROCEDURE ClientPos* (VAR x, y: INTEGER); |
BEGIN |
ThreadInfo(54, 58, x, y) |
ThreadInfo(54, 58, x, y) |
END ClientPos; |
|
|
PROCEDURE ScreenSize* (VAR width, height: INTEGER); |
VAR |
eax, ebx: INTEGER; |
right, left, top, bottom: INTEGER; |
eax, ebx: INTEGER; |
right, left, top, bottom: INTEGER; |
BEGIN |
eax := KOSAPI.sysfunc22(48, 5, ebx); |
left := LSR(eax, 16); |
right := eax MOD 65536; |
top := LSR(ebx, 16); |
bottom := ebx MOD 65536; |
width := right - left + 1; |
height := bottom - top + 1 |
eax := KOSAPI.sysfunc22(48, 5, ebx); |
left := LSR(eax, 16); |
right := eax MOD 65536; |
top := LSR(ebx, 16); |
bottom := ebx MOD 65536; |
width := right - left + 1; |
height := bottom - top + 1 |
END ScreenSize; |
|
|
PROCEDURE ThreadID* (): INTEGER; |
VAR |
id: INTEGER; |
id: INTEGER; |
BEGIN |
ThreadInfo(30, 30, id, id) |
RETURN id |
ThreadInfo(30, 30, id, id) |
RETURN id |
END ThreadID; |
|
|
PROCEDURE RolledUp* (): BOOLEAN; |
VAR |
buffer: ARRAY 1024 OF BYTE; |
buffer: ARRAY 1024 OF BYTE; |
BEGIN |
KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1) |
RETURN ODD(LSR(buffer[70], 2)) |
KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1) |
RETURN ODD(LSR(buffer[70], 2)) |
END RolledUp; |
|
|
PROCEDURE SetWinSize* (width, height: INTEGER); |
BEGIN |
KOSAPI.sysfunc5(67, -1, -1, width, height) |
KOSAPI.sysfunc5(67, -1, -1, width, height) |
END SetWinSize; |
|
|
PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR); |
BEGIN |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0) |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0) |
END DrawText; |
|
|
PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR); |
BEGIN |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0) |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0) |
END DrawText69; |
|
|
PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR); |
BEGIN |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, colors.work) |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, colors.work) |
END DrawText866; |
|
|
PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR); |
BEGIN |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor) |
KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor) |
END DrawText866bk; |
|
|
PROCEDURE MousePos* (VAR x, y: INTEGER); |
VAR |
res: INTEGER; |
res: INTEGER; |
BEGIN |
res := KOSAPI.sysfunc2(37, 0); |
y := res MOD 65536; |
x := res DIV 65536 |
res := KOSAPI.sysfunc2(37, 0); |
y := res MOD 65536; |
x := res DIV 65536 |
END MousePos; |
|
|
PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR); |
VAR |
x, y: INTEGER; |
x, y: INTEGER; |
BEGIN |
KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color); |
x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2; |
y := Top + (Height - fontHeight) DIV 2 + 1; |
DrawText(x, y, colors.button_text, Caption) |
KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color); |
x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2; |
y := Top + (Height - fontHeight) DIV 2 + 1; |
DrawText(x, y, colors.button_text, Caption) |
END CreateButton; |
|
|
PROCEDURE DeleteButton* (id: INTEGER); |
BEGIN |
KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0) |
KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0) |
END DeleteButton; |
|
|
PROCEDURE GetTickCount* (): INTEGER; |
RETURN KOSAPI.sysfunc2(26, 9) |
RETURN KOSAPI.sysfunc2(26, 9) |
END GetTickCount; |
|
|
PROCEDURE Pause* (time: INTEGER); |
BEGIN |
KOSAPI.sysfunc2(5, time) |
KOSAPI.sysfunc2(5, time) |
END Pause; |
|
|
PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER; |
VAR |
res: INTEGER; |
res: INTEGER; |
BEGIN |
middle := FALSE; |
res := KOSAPI.sysfunc1(17); |
IF res MOD 256 = 0 THEN |
res := LSR(res, 8) |
ELSIF res MOD 256 = 4 THEN |
res := LSR(res, 8); |
middle := TRUE |
ELSE |
res := 0 |
END |
RETURN res |
middle := FALSE; |
res := KOSAPI.sysfunc1(17); |
IF res MOD 256 = 0 THEN |
res := LSR(res, 8) |
ELSIF res MOD 256 = 4 THEN |
res := LSR(res, 8); |
middle := TRUE |
ELSE |
res := 0 |
END |
RETURN res |
END ButtonCode; |
|
|
PROCEDURE Exit*; |
BEGIN |
KOSAPI.sysfunc1(-1) |
KOSAPI.sysfunc1(-1) |
END Exit; |
|
|
PROCEDURE ExitID* (tid: INTEGER); |
BEGIN |
KOSAPI.sysfunc3(18, 18, tid) |
KOSAPI.sysfunc3(18, 18, tid) |
END ExitID; |
|
|
234,11 → 234,11 |
VAR |
tid: INTEGER; |
BEGIN |
tid := KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2])); |
IF tid = -1 THEN |
tid := 0 |
END |
RETURN tid |
tid := KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2])); |
IF tid = -1 THEN |
tid := 0 |
END |
RETURN tid |
END CreateThread; |
|
|
245,26 → 245,26 |
PROCEDURE Run* (program, param: ARRAY OF CHAR); |
TYPE |
|
info_struct = RECORD |
subfunc : INTEGER; |
flags : INTEGER; |
param : INTEGER; |
rsrvd1 : INTEGER; |
rsrvd2 : INTEGER; |
fname : ARRAY 1024 OF CHAR |
END; |
info_struct = RECORD |
subfunc : INTEGER; |
flags : INTEGER; |
param : INTEGER; |
rsrvd1 : INTEGER; |
rsrvd2 : INTEGER; |
fname : ARRAY 1024 OF CHAR |
END; |
|
VAR |
info: info_struct; |
info: info_struct; |
|
BEGIN |
info.subfunc := 7; |
info.flags := 0; |
info.param := SYSTEM.ADR(param[0]); |
info.rsrvd1 := 0; |
info.rsrvd2 := 0; |
COPY(program, info.fname); |
KOSAPI.sysfunc2(70, SYSTEM.ADR(info)) |
info.subfunc := 7; |
info.flags := 0; |
info.param := SYSTEM.ADR(param[0]); |
info.rsrvd1 := 0; |
info.rsrvd2 := 0; |
COPY(program, info.fname); |
KOSAPI.sysfunc2(70, SYSTEM.ADR(info)) |
END Run; |
|
|
276,81 → 276,81 |
|
PROCEDURE DrawRect* (x, y, width, height, color: INTEGER); |
BEGIN |
KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color) |
KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color) |
END DrawRect; |
|
|
PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER); |
BEGIN |
KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color) |
KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color) |
END DrawLine; |
|
|
PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER); |
BEGIN |
KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y) |
KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y) |
END DrawImage; |
|
|
PROCEDURE SetEventsMask* (mask: SET); |
BEGIN |
KOSAPI.sysfunc2(40, ORD(mask)) |
KOSAPI.sysfunc2(40, ORD(mask)) |
END SetEventsMask; |
|
|
PROCEDURE SkinHeight* (): INTEGER; |
RETURN KOSAPI.sysfunc2(48, 4) |
RETURN KOSAPI.sysfunc2(48, 4) |
END SkinHeight; |
|
|
PROCEDURE GetKey* (): INTEGER; |
RETURN KOSAPI.sysfunc1(2) |
RETURN KOSAPI.sysfunc1(2) |
END GetKey; |
|
|
PROCEDURE MouseState* (): SET; |
RETURN BITS(KOSAPI.sysfunc2(37, 3)) |
RETURN BITS(KOSAPI.sysfunc2(37, 3)) |
END MouseState; |
|
|
PROCEDURE Scroll* (): INTEGER; |
RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16) |
RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16) |
END Scroll; |
|
|
PROCEDURE GetControlKeys* (): SET; |
RETURN BITS(KOSAPI.sysfunc2(66, 3)) |
RETURN BITS(KOSAPI.sysfunc2(66, 3)) |
END GetControlKeys; |
|
|
PROCEDURE GetSystemColors*; |
BEGIN |
KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(colors), 40) |
KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(colors), 40) |
END GetSystemColors; |
|
|
PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN); |
VAR |
kbState: SET; |
kbState: SET; |
BEGIN |
kbState := GetControlKeys(); |
shift := {0, 1} * kbState # {}; |
ctrl := {2, 3} * kbState # {}; |
kbState := GetControlKeys(); |
shift := {0, 1} * kbState # {}; |
ctrl := {2, 3} * kbState # {}; |
END getKBState; |
|
|
PROCEDURE mouse* (VAR msState: SET; VAR x, y: INTEGER); |
VAR |
mouseX, mouseY, |
cliX, cliY, |
winX, winY: INTEGER; |
mouseX, mouseY, |
cliX, cliY, |
winX, winY: INTEGER; |
BEGIN |
msState := MouseState(); |
MousePos(mouseX, mouseY); |
WinPos(winX, winY); |
ClientPos(cliX, cliY); |
x := mouseX - winX - cliX; |
y := mouseY - winY - cliY |
MousePos(mouseX, mouseY); |
WinPos(winX, winY); |
ClientPos(cliX, cliY); |
x := mouseX - winX - cliX; |
y := mouseY - winY - cliY |
END mouse; |
|
|
433,7 → 433,7 |
ptr2 := KOSAPI.malloc(size); |
IF ptr2 # 0 THEN |
SYSTEM.MOVE(ptr + 16, ptr2, size) |
END |
END |
END; |
ptr := KOSAPI.free(ptr) |
END |