Subversion Repositories Kolibri OS

Rev

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

  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 <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.     winColor*, textColor*, btnColor*, btnTextColor*,
  32.     toolbarColor*, scrollColor*, scrollBkColor*,
  33.     borderColor*, shadowColor*, darkColor*, lightColor*,
  34.     caseColor*, disCaseColor*: INTEGER;
  35.  
  36.  
  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
  49.     KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0]))
  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.  
  65. PROCEDURE WaitForEvent* (): INTEGER;
  66.     RETURN KOSAPI.sysfunc1(10)
  67. END WaitForEvent;
  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.  
  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.  
  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
  145.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0)
  146. END DrawText;
  147.  
  148.  
  149. PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR);
  150. BEGIN
  151.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0)
  152. END DrawText69;
  153.  
  154.  
  155. PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR);
  156. BEGIN
  157.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, winColor)
  158. END DrawText866;
  159.  
  160.  
  161. PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR);
  162. BEGIN
  163.     KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor)
  164. END DrawText866bk;
  165.  
  166.  
  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;
  184.     DrawText(x, y, btnTextColor, Caption)
  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.  
  205. PROCEDURE ButtonCode* (VAR middle: BOOLEAN): INTEGER;
  206. VAR
  207.     res: INTEGER;
  208. BEGIN
  209.     middle := FALSE;
  210.     res := KOSAPI.sysfunc1(17);
  211.     IF res MOD 256 = 0 THEN
  212.         res := LSR(res, 8)
  213.     ELSIF res MOD 256 = 4 THEN
  214.         res := LSR(res, 8);
  215.         middle := TRUE
  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;
  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
  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 malloc* (size: INTEGER): INTEGER;
  323.     RETURN KOSAPI.malloc(size)
  324. END malloc;
  325.  
  326.  
  327. PROCEDURE SetIPC* (buffer: ARRAY OF INTEGER);
  328. BEGIN
  329.     KOSAPI.sysfunc4(60, 1, SYSTEM.ADR(buffer[0]), LEN(buffer)*SYSTEM.SIZE(INTEGER))
  330. END SetIPC;
  331.  
  332.  
  333. PROCEDURE SendIPC* (tid: INTEGER; msg: ARRAY OF INTEGER);
  334. BEGIN
  335.         KOSAPI.sysfunc5(60, 2, tid, SYSTEM.ADR(msg[0]), SYSTEM.SIZE(INTEGER)*LEN(msg))
  336. END SendIPC;
  337.  
  338.  
  339. PROCEDURE GetSystemColors*;
  340. VAR
  341.     buf: ARRAY 10 OF INTEGER;
  342. BEGIN
  343.     ASSERT(LEN(buf) >= 10);
  344.     KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(buf[0]), 40);
  345.  
  346.     darkColor := buf[2];
  347.     lightColor := buf[3];
  348.     winColor := buf[5];
  349.     textColor := buf[8];
  350.     btnColor := buf[6];
  351.     btnTextColor := buf[7];
  352.     scrollColor := btnColor;
  353.     scrollBkColor := winColor;
  354.     borderColor := buf[9];
  355.  
  356.     toolbarColor := 0DFDFDFH;
  357.     shadowColor := 0808080H;
  358.     caseColor := 00000FFH;
  359.     disCaseColor := 0808080H;
  360. END GetSystemColors;
  361.  
  362.  
  363. PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN);
  364. VAR
  365.     kbState: SET;
  366. BEGIN
  367.     kbState := GetControlKeys();
  368.     shift := {0, 1} * kbState # {};
  369.     ctrl := {2, 3} * kbState # {};
  370. END getKBState;
  371.  
  372.  
  373. PROCEDURE mouse* (VAR msState: SET; VAR x, y: INTEGER);
  374. VAR
  375.     mouseX, mouseY,
  376.     cliX, cliY,
  377.     winX, winY: INTEGER;
  378. BEGIN
  379.         msState := MouseState();
  380.     MousePos(mouseX, mouseY);
  381.     WinPos(winX, winY);
  382.     ClientPos(cliX, cliY);
  383.     x := mouseX - winX - cliX;
  384.     y := mouseY - winY - cliY
  385. END mouse;
  386.  
  387.  
  388. PROCEDURE SetCaption* (text: ARRAY OF CHAR);
  389. BEGIN
  390.         KOSAPI.sysfunc4(71, 2, SYSTEM.ADR(text[0]), 0)
  391. END SetCaption;
  392.  
  393.  
  394. END KolibriOS.