Subversion Repositories Kolibri OS

Rev

Rev 9630 | Rev 9708 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. (*
  2.     Copyright 2021, 2022 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 <http://www.gnu.org/licenses/>.
  18. *)
  19.  
  20. MODULE KolibriOS;
  21.  
  22. IMPORT
  23.     KOSAPI, SYSTEM;
  24.  
  25. CONST
  26.     fontWidth* = 8;
  27.     fontHeight* = 16;
  28.  
  29. VAR
  30.  
  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;
  43.  
  44.  
  45. PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR);
  46. BEGIN
  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;
  49.  
  50.  
  51. PROCEDURE BeginDraw*;
  52. BEGIN
  53.     KOSAPI.sysfunc2(12, 1)
  54. END BeginDraw;
  55.  
  56.  
  57. PROCEDURE EndDraw*;
  58. BEGIN
  59.     KOSAPI.sysfunc2(12, 2)
  60. END EndDraw;
  61.  
  62.  
  63. PROCEDURE EventTimeout* (t: INTEGER): INTEGER;
  64.     RETURN KOSAPI.sysfunc2(23, t)
  65. END EventTimeout;
  66.  
  67.  
  68. PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER);
  69. VAR
  70.     buffer: ARRAY 1024 OF BYTE;
  71. BEGIN
  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);
  75. END ThreadInfo;
  76.  
  77.  
  78. PROCEDURE WinSize* (VAR width, height: INTEGER);
  79. BEGIN
  80.     ThreadInfo(42, 46, width, height)
  81. END WinSize;
  82.  
  83.  
  84. PROCEDURE WinPos* (VAR x, y: INTEGER);
  85. BEGIN
  86.     ThreadInfo(34, 38, x, y)
  87. END WinPos;
  88.  
  89.  
  90. PROCEDURE ClientSize* (VAR width, height: INTEGER);
  91. BEGIN
  92.     ThreadInfo(62, 66, width, height)
  93. END ClientSize;
  94.  
  95.  
  96. PROCEDURE ClientPos* (VAR x, y: INTEGER);
  97. BEGIN
  98.     ThreadInfo(54, 58, x, y)
  99. END ClientPos;
  100.  
  101.  
  102. PROCEDURE ScreenSize* (VAR width, height: INTEGER);
  103. VAR
  104.     eax, ebx: INTEGER;
  105.     right, left, top, bottom: INTEGER;
  106. BEGIN
  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
  114. END ScreenSize;
  115.  
  116.  
  117. PROCEDURE ThreadID* (): INTEGER;
  118. VAR
  119.     id: INTEGER;
  120. BEGIN
  121.     ThreadInfo(30, 30, id, id)
  122.     RETURN id
  123. END ThreadID;
  124.  
  125.  
  126. PROCEDURE RolledUp* (): BOOLEAN;
  127. VAR
  128.     buffer: ARRAY 1024 OF BYTE;
  129. BEGIN
  130.     KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1)
  131.     RETURN ODD(LSR(buffer[70], 2))
  132. END RolledUp;
  133.  
  134.  
  135. PROCEDURE SetWinSize* (width, height: INTEGER);
  136. BEGIN
  137.     KOSAPI.sysfunc5(67, -1, -1, width, height)
  138. END SetWinSize;
  139.  
  140.  
  141. PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR);
  142. BEGIN
  143.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0)
  144. END DrawText;
  145.  
  146.  
  147. PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR);
  148. BEGIN
  149.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0)
  150. END DrawText69;
  151.  
  152.  
  153. PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR);
  154. BEGIN
  155.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, colors.work)
  156. END DrawText866;
  157.  
  158.  
  159. PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR);
  160. BEGIN
  161.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor)
  162. END DrawText866bk;
  163.  
  164.  
  165. PROCEDURE MousePos* (VAR x, y: INTEGER);
  166. VAR
  167.     res: INTEGER;
  168. BEGIN
  169.     res := KOSAPI.sysfunc2(37, 0);
  170.     y := res MOD 65536;
  171.     x := res DIV 65536
  172. END MousePos;
  173.  
  174.  
  175. PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR);
  176. VAR
  177.     x, y: INTEGER;
  178. BEGIN
  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)
  183. END CreateButton;
  184.  
  185.  
  186. PROCEDURE DeleteButton* (id: INTEGER);
  187. BEGIN
  188.     KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0)
  189. END DeleteButton;
  190.  
  191.  
  192. PROCEDURE GetTickCount* (): INTEGER;
  193.     RETURN KOSAPI.sysfunc2(26, 9)
  194. END GetTickCount;
  195.  
  196.  
  197. PROCEDURE Pause* (time: INTEGER);
  198. BEGIN
  199.     KOSAPI.sysfunc2(5, time)
  200. END Pause;
  201.  
  202.  
  203. PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER;
  204. VAR
  205.     res: INTEGER;
  206. BEGIN
  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
  218. END ButtonCode;
  219.  
  220.  
  221. PROCEDURE Exit*;
  222. BEGIN
  223.     KOSAPI.sysfunc1(-1)
  224. END Exit;
  225.  
  226.  
  227. PROCEDURE ExitID* (tid: INTEGER);
  228. BEGIN
  229.     KOSAPI.sysfunc3(18, 18, tid)
  230. END ExitID;
  231.  
  232.  
  233. PROCEDURE CreateThread* (proc: INTEGER; stack: ARRAY OF INTEGER): INTEGER;
  234. VAR
  235.         tid: INTEGER;
  236. BEGIN
  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
  242. END CreateThread;
  243.  
  244.  
  245. PROCEDURE Run* (program, param: ARRAY OF CHAR);
  246. TYPE
  247.  
  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;
  256.  
  257. VAR
  258.     info: info_struct;
  259.  
  260. BEGIN
  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))
  268. END Run;
  269.  
  270.  
  271. PROCEDURE SetCurFolder* (folder: ARRAY OF CHAR);
  272. BEGIN
  273.         KOSAPI.sysfunc3(30, 1, SYSTEM.ADR(folder[0]));
  274. END SetCurFolder;
  275.  
  276.  
  277. PROCEDURE DrawRect* (x, y, width, height, color: INTEGER);
  278. BEGIN
  279.     KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color)
  280. END DrawRect;
  281.  
  282.  
  283. PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER);
  284. BEGIN
  285.     KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color)
  286. END DrawLine;
  287.  
  288.  
  289. PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER);
  290. BEGIN
  291.     KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y)
  292. END DrawImage;
  293.  
  294.  
  295. PROCEDURE SetEventsMask* (mask: SET);
  296. BEGIN
  297.     KOSAPI.sysfunc2(40, ORD(mask))
  298. END SetEventsMask;
  299.  
  300.  
  301. PROCEDURE SkinHeight* (): INTEGER;
  302.     RETURN KOSAPI.sysfunc2(48, 4)
  303. END SkinHeight;
  304.  
  305.  
  306. PROCEDURE GetKey* (): INTEGER;
  307.     RETURN KOSAPI.sysfunc1(2)
  308. END GetKey;
  309.  
  310.  
  311. PROCEDURE MouseState* (): SET;
  312.     RETURN BITS(KOSAPI.sysfunc2(37, 3))
  313. END MouseState;
  314.  
  315.  
  316. PROCEDURE Scroll* (): INTEGER;
  317.     RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16)
  318. END Scroll;
  319.  
  320.  
  321. PROCEDURE GetControlKeys* (): SET;
  322.     RETURN BITS(KOSAPI.sysfunc2(66, 3))
  323. END GetControlKeys;
  324.  
  325.  
  326. PROCEDURE GetSystemColors*;
  327. BEGIN
  328.     KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(colors), 40)
  329. END GetSystemColors;
  330.  
  331.  
  332. PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN);
  333. VAR
  334.     kbState: SET;
  335. BEGIN
  336.     kbState := GetControlKeys();
  337.     shift := {0, 1} * kbState # {};
  338.     ctrl := {2, 3} * kbState # {};
  339. END getKBState;
  340.  
  341.  
  342. PROCEDURE mouse* (VAR msState: SET; VAR x, y: INTEGER);
  343. VAR
  344.     mouseX, mouseY,
  345.     cliX, cliY,
  346.     winX, winY: INTEGER;
  347. BEGIN
  348.         msState := MouseState();
  349.     MousePos(mouseX, mouseY);
  350.     WinPos(winX, winY);
  351.     ClientPos(cliX, cliY);
  352.     x := mouseX - winX - cliX;
  353.     y := mouseY - winY - cliY
  354. END mouse;
  355.  
  356.  
  357. PROCEDURE SetCaption* (text: ARRAY OF CHAR);
  358. BEGIN
  359.         KOSAPI.sysfunc4(71, 2, SYSTEM.ADR(text[0]), 0)
  360. END SetCaption;
  361.  
  362.  
  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.  
  390. PROCEDURE PutPixel* (x, y, color: INTEGER);
  391. BEGIN
  392.         KOSAPI.sysfunc5(1, x, y, color, 0)
  393. END PutPixel;
  394.  
  395.  
  396. BEGIN
  397.         GetSystemColors
  398. END KolibriOS.