Subversion Repositories Kolibri OS

Rev

Rev 6613 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     BSD 2-Clause License
  3.  
  4.     Copyright (c) 2019, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE HOST;
  9.  
  10. IMPORT SYSTEM, API, RTL;
  11.  
  12.  
  13. CONST
  14.  
  15.     slash* = "/";
  16.     OS* = "LINUX";
  17.  
  18.     bit_depth* = RTL.bit_depth;
  19.     maxint* = RTL.maxint;
  20.     minint* = RTL.minint;
  21.  
  22.  
  23. VAR
  24.  
  25.     argc: INTEGER;
  26.  
  27.     eol*: ARRAY 2 OF CHAR;
  28.  
  29.  
  30. PROCEDURE ExitProcess* (code: INTEGER);
  31. BEGIN
  32.     API.exit(code)
  33. END ExitProcess;
  34.  
  35.  
  36. PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
  37. VAR
  38.     i, len, ptr: INTEGER;
  39.     c: CHAR;
  40.  
  41. BEGIN
  42.     i := 0;
  43.     len := LEN(s) - 1;
  44.     IF (n < argc) & (len > 0) THEN
  45.         SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr);
  46.         REPEAT
  47.             SYSTEM.GET(ptr, c);
  48.             s[i] := c;
  49.             INC(i);
  50.             INC(ptr)
  51.         UNTIL (c = 0X) OR (i = len)
  52.     END;
  53.     s[i] := 0X
  54. END GetArg;
  55.  
  56.  
  57. PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR);
  58. VAR
  59.     n: INTEGER;
  60.  
  61. BEGIN
  62.     GetArg(0, path);
  63.     n := LENGTH(path) - 1;
  64.     WHILE path[n] # slash DO
  65.         DEC(n)
  66.     END;
  67.     path[n + 1] := 0X
  68. END GetCurrentDirectory;
  69.  
  70.  
  71. PROCEDURE ReadFile (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
  72.     RETURN API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F)
  73. END ReadFile;
  74.  
  75.  
  76. PROCEDURE WriteFile (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
  77.     RETURN API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F)
  78. END WriteFile;
  79.  
  80.  
  81. PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
  82. VAR
  83.     res: INTEGER;
  84.  
  85. BEGIN
  86.     res := ReadFile(F, Buffer, bytes);
  87.     IF res <= 0 THEN
  88.         res := -1
  89.     END
  90.  
  91.     RETURN res
  92. END FileRead;
  93.  
  94.  
  95. PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
  96. VAR
  97.     res: INTEGER;
  98.  
  99. BEGIN
  100.     res := WriteFile(F, Buffer, bytes);
  101.     IF res <= 0 THEN
  102.         res := -1
  103.     END
  104.  
  105.     RETURN res
  106. END FileWrite;
  107.  
  108.  
  109. PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
  110.     RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb"))
  111. END FileCreate;
  112.  
  113.  
  114. PROCEDURE FileClose* (File: INTEGER);
  115. BEGIN
  116.     File := API.fclose(File)
  117. END FileClose;
  118.  
  119.  
  120. PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
  121.     RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb"))
  122. END FileOpen;
  123.  
  124.  
  125. PROCEDURE OutChar* (c: CHAR);
  126. BEGIN
  127.     API.putc(c)
  128. END OutChar;
  129.  
  130.  
  131. PROCEDURE GetTickCount* (): INTEGER;
  132. VAR
  133.     tp:  API.TP;
  134.     res: INTEGER;
  135.  
  136. BEGIN
  137.     IF API.clock_gettime(0, tp) = 0 THEN
  138.         res := tp[0] * 100 + tp[1] DIV 10000000
  139.     ELSE
  140.         res := 0
  141.     END
  142.  
  143.     RETURN res
  144. END GetTickCount;
  145.  
  146.  
  147. PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
  148.     RETURN path[0] # slash
  149. END isRelative;
  150.  
  151.  
  152. PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER);
  153. END now;
  154.  
  155.  
  156. PROCEDURE UnixTime* (): INTEGER;
  157.     RETURN API.time(0)
  158. END UnixTime;
  159.  
  160.  
  161. PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
  162. VAR
  163.     res: INTEGER;
  164.  
  165. BEGIN
  166.     a := 0;
  167.     b := 0;
  168.     SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4);
  169.     SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4);
  170.     SYSTEM.GET(SYSTEM.ADR(x), res)
  171.     RETURN res
  172. END splitf;
  173.  
  174.  
  175. BEGIN
  176.     eol := 0AX;
  177.     SYSTEM.GET(API.MainParam, argc)
  178. END HOST.