Subversion Repositories Kolibri OS

Rev

Rev 8762 | Rev 9050 | 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. (*
  27.     winColor* = 0EEEEEEH;
  28.     textColor* = 0000000H;
  29.     btnColor* = 0CCCCCCH;
  30.     btnTextColor* = 0000000H;
  31.     toolbarColor* = 0DFDFDFH;
  32.     scrollColor* = 0A0A0A0H;
  33.     scrollBkColor* = winColor;
  34.     borderColor* = 0808080H;
  35.     selMenuColor* = 0CCE8FFH;
  36.     shadowColor* = 0808080H;
  37.     caseColor* = 00000FFH;
  38.     disCaseColor* = 0808080H;
  39. *)
  40.     fontWidth* = 8;
  41.     fontHeight* = 16;
  42.  
  43. VAR
  44.  
  45.     winColor*, textColor*, btnColor*, btnTextColor*,
  46.     toolbarColor*, scrollColor*, scrollBkColor*,
  47.     borderColor*, selMenuColor*, shadowColor*,
  48.     caseColor*, disCaseColor*: INTEGER;
  49.  
  50.  
  51. PROCEDURE GetCommandLine* (): INTEGER;
  52.     RETURN KOSAPI.GetCommandLine()
  53. END GetCommandLine;
  54.  
  55.  
  56. PROCEDURE GetName* (): INTEGER;
  57.     RETURN KOSAPI.GetName()
  58. END GetName;
  59.  
  60.  
  61. PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR);
  62. BEGIN
  63.     KOSAPI.sysfunc6(0, x * 65536 + w, y * 65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0]))
  64. END CreateWindow;
  65.  
  66.  
  67. PROCEDURE BeginDraw*;
  68. BEGIN
  69.     KOSAPI.sysfunc2(12, 1)
  70. END BeginDraw;
  71.  
  72.  
  73. PROCEDURE EndDraw*;
  74. BEGIN
  75.     KOSAPI.sysfunc2(12, 2)
  76. END EndDraw;
  77.  
  78.  
  79. PROCEDURE WaitForEvent* (): INTEGER;
  80.     RETURN KOSAPI.sysfunc1(10)
  81. END WaitForEvent;
  82.  
  83.  
  84. PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER);
  85. VAR
  86.     buffer: ARRAY 1024 OF BYTE;
  87. BEGIN
  88.     KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1);
  89.     SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsa, a);
  90.     SYSTEM.GET32(SYSTEM.ADR(buffer[0]) + offsb, b);
  91. END ThreadInfo;
  92.  
  93.  
  94. PROCEDURE WinSize* (VAR width, height: INTEGER);
  95. BEGIN
  96.     ThreadInfo(42, 46, width, height)
  97. END WinSize;
  98.  
  99.  
  100. PROCEDURE WinPos* (VAR x, y: INTEGER);
  101. BEGIN
  102.     ThreadInfo(34, 38, x, y)
  103. END WinPos;
  104.  
  105.  
  106. PROCEDURE ClientSize* (VAR width, height: INTEGER);
  107. BEGIN
  108.     ThreadInfo(62, 66, width, height)
  109. END ClientSize;
  110.  
  111.  
  112. PROCEDURE ClientPos* (VAR x, y: INTEGER);
  113. BEGIN
  114.     ThreadInfo(54, 58, x, y)
  115. END ClientPos;
  116.  
  117.  
  118. PROCEDURE ScreenSize* (VAR width, height: INTEGER);
  119. VAR
  120.     eax, ebx: INTEGER;
  121.     right, left, top, bottom: INTEGER;
  122. BEGIN
  123.     eax := KOSAPI.sysfunc22(48, 5, ebx);
  124.     left := LSR(eax, 16);
  125.     right := eax MOD 65536;
  126.     top := LSR(ebx, 16);
  127.     bottom := ebx MOD 65536;
  128.     width := right - left + 1;
  129.     height := bottom - top + 1
  130. END ScreenSize;
  131.  
  132.  
  133. PROCEDURE ThreadID* (): INTEGER;
  134. VAR
  135.     id: INTEGER;
  136. BEGIN
  137.     ThreadInfo(30, 30, id, id)
  138.     RETURN id
  139. END ThreadID;
  140.  
  141.  
  142. PROCEDURE RolledUp* (): BOOLEAN;
  143. VAR
  144.     buffer: ARRAY 1024 OF BYTE;
  145. BEGIN
  146.     KOSAPI.sysfunc3(9, SYSTEM.ADR(buffer[0]), -1)
  147.     RETURN ODD(LSR(buffer[70], 2))
  148. END RolledUp;
  149.  
  150.  
  151. PROCEDURE SetWinSize* (width, height: INTEGER);
  152. BEGIN
  153.     KOSAPI.sysfunc5(67, -1, -1, width, height)
  154. END SetWinSize;
  155.  
  156.  
  157. PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR);
  158. BEGIN
  159.     KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0)
  160. END DrawText;
  161.  
  162.  
  163. PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR);
  164. BEGIN
  165.     KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0)
  166. END DrawText69;
  167.  
  168.  
  169. PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR);
  170. BEGIN
  171.     KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, winColor)
  172. END DrawText866;
  173.  
  174.  
  175. PROCEDURE MousePos* (VAR x, y: INTEGER);
  176. VAR
  177.     res: INTEGER;
  178. BEGIN
  179.     res := KOSAPI.sysfunc2(37, 0);
  180.     y := res MOD 65536;
  181.     x := res DIV 65536
  182. END MousePos;
  183.  
  184.  
  185. PROCEDURE CreateButton* (id, Left, Top, Width, Height, Color: INTEGER; Caption: ARRAY OF WCHAR);
  186. VAR
  187.     x, y: INTEGER;
  188. BEGIN
  189.     KOSAPI.sysfunc5(8, LSL(Left, 16) + Width, LSL(Top, 16) + Height, id, Color);
  190.     x := Left + (Width - fontWidth * LENGTH(Caption)) DIV 2;
  191.     y := Top + (Height - fontHeight) DIV 2 + 1;
  192.     DrawText(x, y, btnTextColor, Caption)
  193. END CreateButton;
  194.  
  195.  
  196. PROCEDURE DeleteButton* (id: INTEGER);
  197. BEGIN
  198.     KOSAPI.sysfunc5(8, 0, 0, id + 80000000H, 0)
  199. END DeleteButton;
  200.  
  201.  
  202. PROCEDURE GetTickCount* (): INTEGER;
  203.     RETURN KOSAPI.sysfunc2(26, 9)
  204. END GetTickCount;
  205.  
  206.  
  207. PROCEDURE Pause* (time: INTEGER);
  208. BEGIN
  209.     KOSAPI.sysfunc2(5, time)
  210. END Pause;
  211.  
  212.  
  213. PROCEDURE ButtonCode* (): INTEGER;
  214. VAR
  215.     res: INTEGER;
  216. BEGIN
  217.     res := KOSAPI.sysfunc1(17);
  218.     IF res MOD 256 = 0 THEN
  219.         res := LSR(res, 8)
  220.     ELSE
  221.         res := 0
  222.     END
  223.     RETURN res
  224. END ButtonCode;
  225.  
  226.  
  227. PROCEDURE Exit*;
  228. BEGIN
  229.     KOSAPI.sysfunc1(-1)
  230. END Exit;
  231.  
  232.  
  233. PROCEDURE ExitID* (tid: INTEGER);
  234. BEGIN
  235.     KOSAPI.sysfunc3(18, 18, tid)
  236. END ExitID;
  237.  
  238.  
  239. PROCEDURE CreateThread* (proc: INTEGER; stack: ARRAY OF INTEGER): INTEGER;
  240.     RETURN KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2]))
  241. END CreateThread;
  242.  
  243.  
  244. PROCEDURE Run* (program, param: ARRAY OF CHAR);
  245. TYPE
  246.  
  247.     info_struct = RECORD
  248.         subfunc : INTEGER;
  249.         flags   : INTEGER;
  250.         param   : INTEGER;
  251.         rsrvd1  : INTEGER;
  252.         rsrvd2  : INTEGER;
  253.         fname   : ARRAY 1024 OF CHAR
  254.     END;
  255.  
  256. VAR
  257.     info: info_struct;
  258.  
  259. BEGIN
  260.     info.subfunc := 7;
  261.     info.flags   := 0;
  262.     info.param   := SYSTEM.ADR(param[0]);
  263.     info.rsrvd1  := 0;
  264.     info.rsrvd2  := 0;
  265.     COPY(program, info.fname);
  266.     KOSAPI.sysfunc2(70, SYSTEM.ADR(info))
  267. END Run;
  268.  
  269.  
  270. PROCEDURE DrawRect* (x, y, width, height, color: INTEGER);
  271. BEGIN
  272.     KOSAPI.sysfunc4(13, x*65536 + width, y*65536 + height, color)
  273. END DrawRect;
  274.  
  275.  
  276. PROCEDURE DrawLine* (x1, y1, x2, y2: INTEGER; color: INTEGER);
  277. BEGIN
  278.     KOSAPI.sysfunc4(38, x1*65536 + x2, y1*65536 + y2, color)
  279. END DrawLine;
  280.  
  281.  
  282. PROCEDURE DrawImage* (data, sizeX, sizeY, x, y: INTEGER);
  283. BEGIN
  284.     KOSAPI.sysfunc4(7, data, sizeX*65536 + sizeY, x*65536 + y)
  285. END DrawImage;
  286.  
  287.  
  288. PROCEDURE SetEventsMask* (mask: SET);
  289. BEGIN
  290.     KOSAPI.sysfunc2(40, ORD(mask))
  291. END SetEventsMask;
  292.  
  293.  
  294. PROCEDURE SkinHeight* (): INTEGER;
  295.     RETURN KOSAPI.sysfunc2(48, 4)
  296. END SkinHeight;
  297.  
  298.  
  299. PROCEDURE GetKey* (): INTEGER;
  300.     RETURN KOSAPI.sysfunc1(2)
  301. END GetKey;
  302.  
  303.  
  304. PROCEDURE MouseState* (): SET;
  305.     RETURN BITS(KOSAPI.sysfunc2(37, 3))
  306. END MouseState;
  307.  
  308.  
  309. PROCEDURE Scroll* (): INTEGER;
  310.     RETURN ASR(LSL(KOSAPI.sysfunc2(37, 7), 16), 16)
  311. END Scroll;
  312.  
  313.  
  314. PROCEDURE GetControlKeys* (): SET;
  315.     RETURN BITS(KOSAPI.sysfunc2(66, 3))
  316. END GetControlKeys;
  317.  
  318.  
  319. PROCEDURE malloc* (size: INTEGER): INTEGER;
  320.     RETURN KOSAPI.malloc(size)
  321. END malloc;
  322.  
  323.  
  324. PROCEDURE SetIPC* (buffer: ARRAY OF INTEGER);
  325. BEGIN
  326.     KOSAPI.sysfunc4(60, 1, SYSTEM.ADR(buffer[0]), LEN(buffer)*SYSTEM.SIZE(INTEGER));
  327. END SetIPC;
  328.  
  329.  
  330. PROCEDURE SendIPC* (tid, msg: INTEGER);
  331. BEGIN
  332.     KOSAPI.sysfunc5(60, 2, tid, SYSTEM.ADR(msg), SYSTEM.SIZE(INTEGER))
  333. END SendIPC;
  334.  
  335.  
  336. PROCEDURE PutPixel* (x, y, color: INTEGER);
  337. BEGIN
  338.     KOSAPI.sysfunc4(1, x, y, color)
  339. END PutPixel;
  340.  
  341.  
  342. PROCEDURE GetSystemColors*;
  343. VAR
  344.     buf: ARRAY 10 OF INTEGER;
  345. BEGIN
  346. (*    winColor := 0EEEEEEH;
  347.     textColor := 0000000H;
  348.     btnColor := 0CCCCCCH;
  349.     btnTextColor := 0000000H;
  350.     scrollColor := 0A0A0A0H;
  351.     scrollBkColor := winColor;
  352.     borderColor := 0808080H;
  353.     *)
  354.     selMenuColor := 0CCE8FFH;
  355.     toolbarColor := 0DFDFDFH;
  356.     shadowColor := 0808080H;
  357.     caseColor := 00000FFH;
  358.     disCaseColor := 0808080H;
  359.  
  360.     ASSERT(LEN(buf) >= 10);
  361.     KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(buf[0]), 40);
  362.  
  363.     winColor := buf[5];
  364.     textColor := buf[8];
  365.     btnColor := buf[6];
  366.     btnTextColor := buf[7];
  367.     scrollColor := btnColor;
  368.     scrollBkColor := winColor;
  369.     borderColor := buf[9];
  370. END GetSystemColors;
  371.  
  372.  
  373. END KolibriOS.