114 lines
2.6 KiB
Plaintext
114 lines
2.6 KiB
Plaintext
|
MODULE Dialogs;
|
||
|
|
||
|
IMPORT KOSAPI, sys := SYSTEM, OpenDlg, ColorDlg;
|
||
|
|
||
|
VAR header: ARRAY 1024 OF CHAR; back_color: INTEGER;
|
||
|
|
||
|
PROCEDURE WindowRedrawStatus(p: INTEGER);
|
||
|
VAR aux: INTEGER;
|
||
|
BEGIN
|
||
|
aux := KOSAPI.sysfunc2(12, p)
|
||
|
END WindowRedrawStatus;
|
||
|
|
||
|
PROCEDURE DefineAndDrawWindow(x, y, w, h, color, style, hcolor, hstyle, htext: INTEGER);
|
||
|
VAR aux: INTEGER;
|
||
|
BEGIN
|
||
|
aux := KOSAPI.sysfunc6(0, x * 65536 + w, y * 65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), htext)
|
||
|
END DefineAndDrawWindow;
|
||
|
|
||
|
PROCEDURE WaitForEvent(): INTEGER;
|
||
|
RETURN KOSAPI.sysfunc1(10)
|
||
|
END WaitForEvent;
|
||
|
|
||
|
PROCEDURE ExitApp;
|
||
|
VAR aux: INTEGER;
|
||
|
BEGIN
|
||
|
aux := KOSAPI.sysfunc1(-1)
|
||
|
END ExitApp;
|
||
|
|
||
|
PROCEDURE pause(t: INTEGER);
|
||
|
VAR aux: INTEGER;
|
||
|
BEGIN
|
||
|
aux := KOSAPI.sysfunc2(5, t)
|
||
|
END pause;
|
||
|
|
||
|
PROCEDURE Buttons;
|
||
|
|
||
|
PROCEDURE Button(id, X, Y, W, H: INTEGER; Caption: ARRAY OF CHAR);
|
||
|
VAR n, aux: INTEGER;
|
||
|
BEGIN
|
||
|
n := LENGTH(Caption);
|
||
|
aux := KOSAPI.sysfunc5(8, X * 65536 + W, Y * 65536 + H, id, 00C0C0C0H);
|
||
|
X := X + (W - 8 * n) DIV 2;
|
||
|
Y := Y + (H - 14) DIV 2;
|
||
|
aux := KOSAPI.sysfunc6(4, X * 65536 + Y, LSL(48, 24), sys.ADR(Caption[0]), n, 0)
|
||
|
END Button;
|
||
|
|
||
|
BEGIN
|
||
|
Button(17, 5, 5, 70, 25, "open");
|
||
|
Button(18, 85, 5, 70, 25, "color");
|
||
|
END Buttons;
|
||
|
|
||
|
PROCEDURE draw_window;
|
||
|
BEGIN
|
||
|
WindowRedrawStatus(1);
|
||
|
DefineAndDrawWindow(200, 200, 500, 100, back_color, 51, 0, 0, sys.ADR(header[0]));
|
||
|
Buttons;
|
||
|
WindowRedrawStatus(2);
|
||
|
END draw_window;
|
||
|
|
||
|
PROCEDURE OpenFile(Open: OpenDlg.Dialog);
|
||
|
BEGIN
|
||
|
IF Open # NIL THEN
|
||
|
OpenDlg.Show(Open, 500, 450);
|
||
|
WHILE Open.status = 2 DO
|
||
|
pause(30)
|
||
|
END;
|
||
|
IF Open.status = 1 THEN
|
||
|
COPY(Open.FilePath, header)
|
||
|
END
|
||
|
END
|
||
|
END OpenFile;
|
||
|
|
||
|
PROCEDURE SelColor(Color: ColorDlg.Dialog);
|
||
|
BEGIN
|
||
|
IF Color # NIL THEN
|
||
|
ColorDlg.Show(Color);
|
||
|
WHILE Color.status = 2 DO
|
||
|
pause(30)
|
||
|
END;
|
||
|
IF Color.status = 1 THEN
|
||
|
back_color := Color.color
|
||
|
END
|
||
|
END
|
||
|
END SelColor;
|
||
|
|
||
|
PROCEDURE main;
|
||
|
VAR Open: OpenDlg.Dialog; Color: ColorDlg.Dialog; res, al: INTEGER;
|
||
|
BEGIN
|
||
|
back_color := 00FFFFFFH;
|
||
|
header := "Dialogs";
|
||
|
draw_window;
|
||
|
Open := OpenDlg.Create(draw_window, 0, "/rd/1", "ASM|TXT|INI");
|
||
|
Color := ColorDlg.Create(draw_window);
|
||
|
WHILE TRUE DO
|
||
|
CASE WaitForEvent() OF
|
||
|
|1: draw_window
|
||
|
|3: res := KOSAPI.sysfunc1(17);
|
||
|
al := LSR(LSL(res, 24), 24);
|
||
|
res := LSR(res, 8);
|
||
|
IF al = 0 THEN
|
||
|
CASE res OF
|
||
|
| 1: ExitApp
|
||
|
|17: OpenFile(Open)
|
||
|
|18: SelColor(Color)
|
||
|
END
|
||
|
END
|
||
|
ELSE
|
||
|
END
|
||
|
END
|
||
|
END main;
|
||
|
|
||
|
BEGIN
|
||
|
main
|
||
|
END Dialogs.
|