Subversion Repositories Kolibri OS

Rev

Rev 9174 | Rev 9187 | 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.     RETURN KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2]))
  237. END CreateThread;
  238.  
  239.  
  240. PROCEDURE Run* (program, param: ARRAY OF CHAR);
  241. TYPE
  242.  
  243.     info_struct = RECORD
  244.         subfunc : INTEGER;
  245.         flags   : INTEGER;
  246.         param   : INTEGER;
  247.         rsrvd1  : INTEGER;
  248.         rsrvd2  : INTEGER;
  249.         fname   : ARRAY 1024 OF CHAR
  250.     END;
  251.  
  252. VAR
  253.     info: info_struct;
  254.  
  255. BEGIN
  256.     info.subfunc := 7;
  257.     info.flags   := 0;
  258.     info.param   := SYSTEM.ADR(param[0]);
  259.     info.rsrvd1  := 0;
  260.     info.rsrvd2  := 0;
  261.     COPY(program, info.fname);
  262.     KOSAPI.sysfunc2(70, SYSTEM.ADR(info))
  263. END Run;
  264.  
  265.  
  266. PROCEDURE DrawRect* (x, y, width, height, color: INTEGER);
  267. BEGIN
  268.     KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color)
  269. END DrawRect;
  270.  
  271.  
  272. PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER);
  273. BEGIN
  274.     KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color)
  275. END DrawLine;
  276.  
  277.  
  278. PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER);
  279. BEGIN
  280.     KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y)
  281. END DrawImage;
  282.  
  283.  
  284. PROCEDURE SetEventsMask* (mask: SET);
  285. BEGIN
  286.     KOSAPI.sysfunc2(40, ORD(mask))
  287. END SetEventsMask;
  288.  
  289.  
  290. PROCEDURE SkinHeight* (): INTEGER;
  291.     RETURN KOSAPI.sysfunc2(48, 4)
  292. END SkinHeight;
  293.  
  294.  
  295. PROCEDURE GetKey* (): INTEGER;
  296.     RETURN KOSAPI.sysfunc1(2)
  297. END GetKey;
  298.  
  299.  
  300. PROCEDURE MouseState* (): SET;
  301.     RETURN BITS(KOSAPI.sysfunc2(37, 3))
  302. END MouseState;
  303.  
  304.  
  305. PROCEDURE Scroll* (): INTEGER;
  306.     RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16)
  307. END Scroll;
  308.  
  309.  
  310. PROCEDURE GetControlKeys* (): SET;
  311.     RETURN BITS(KOSAPI.sysfunc2(66, 3))
  312. END GetControlKeys;
  313.  
  314.  
  315. PROCEDURE malloc* (size: INTEGER): INTEGER;
  316.     RETURN KOSAPI.malloc(size)
  317. END malloc;
  318.  
  319.  
  320. PROCEDURE SetIPC* (buffer: ARRAY OF INTEGER);
  321. BEGIN
  322.     KOSAPI.sysfunc4(60, 1, SYSTEM.ADR(buffer[0]), LEN(buffer)*SYSTEM.SIZE(INTEGER))
  323. END SetIPC;
  324.  
  325.  
  326. PROCEDURE SendIPC* (tid, msg: INTEGER);
  327. BEGIN
  328.         KOSAPI.sysfunc5(60, 2, tid, SYSTEM.ADR(msg), SYSTEM.SIZE(INTEGER))
  329. END SendIPC;
  330.  
  331.  
  332. PROCEDURE PutPixel* (x, y, color: INTEGER);
  333. BEGIN
  334.     KOSAPI.sysfunc4(1, x, y, color)
  335. END PutPixel;
  336.  
  337.  
  338. PROCEDURE GetSystemColors*;
  339. VAR
  340.     buf: ARRAY 10 OF INTEGER;
  341. BEGIN
  342.     ASSERT(LEN(buf) >= 10);
  343.     KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(buf[0]), 40);
  344.  
  345.     darkColor := buf[2];
  346.     lightColor := buf[3];
  347.     winColor := buf[5];
  348.     textColor := buf[8];
  349.     btnColor := buf[6];
  350.     btnTextColor := buf[7];
  351.     scrollColor := btnColor;
  352.     scrollBkColor := winColor;
  353.     borderColor := buf[9];
  354.  
  355.     toolbarColor := 0DFDFDFH;
  356.     shadowColor := 0808080H;
  357.     caseColor := 00000FFH;
  358.     disCaseColor := 0808080H;
  359. END GetSystemColors;
  360.  
  361.  
  362. END KolibriOS.