Subversion Repositories Kolibri OS

Rev

Rev 7597 | 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 FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER;
  72. VAR
  73.     res: INTEGER;
  74.  
  75. BEGIN
  76.     res := API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F);
  77.     IF res <= 0 THEN
  78.         res := -1
  79.     END
  80.  
  81.     RETURN res
  82. END FileRead;
  83.  
  84.  
  85. PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
  86. VAR
  87.     res: INTEGER;
  88.  
  89. BEGIN
  90.     res := API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F);
  91.     IF res <= 0 THEN
  92.         res := -1
  93.     END
  94.  
  95.     RETURN res
  96. END FileWrite;
  97.  
  98.  
  99. PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
  100.     RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb"))
  101. END FileCreate;
  102.  
  103.  
  104. PROCEDURE FileClose* (File: INTEGER);
  105. BEGIN
  106.     File := API.fclose(File)
  107. END FileClose;
  108.  
  109.  
  110. PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
  111.     RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb"))
  112. END FileOpen;
  113.  
  114.  
  115. PROCEDURE OutChar* (c: CHAR);
  116. BEGIN
  117.     API.putc(c)
  118. END OutChar;
  119.  
  120.  
  121. PROCEDURE GetTickCount* (): INTEGER;
  122. VAR
  123.     tp:  API.TP;
  124.     res: INTEGER;
  125.  
  126. BEGIN
  127.     IF API.clock_gettime(0, tp) = 0 THEN
  128.         res := tp[0] * 100 + tp[1] DIV 10000000
  129.     ELSE
  130.         res := 0
  131.     END
  132.  
  133.     RETURN res
  134. END GetTickCount;
  135.  
  136.  
  137. PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
  138.     RETURN path[0] # slash
  139. END isRelative;
  140.  
  141.  
  142. PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER);
  143. END now;
  144.  
  145.  
  146. PROCEDURE UnixTime* (): INTEGER;
  147.     RETURN API.time(0)
  148. END UnixTime;
  149.  
  150.  
  151. PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
  152. VAR
  153.     res: INTEGER;
  154.  
  155. BEGIN
  156.     a := 0;
  157.     b := 0;
  158.     SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4);
  159.     SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4);
  160.     SYSTEM.GET(SYSTEM.ADR(x), res)
  161.     RETURN res
  162. END splitf;
  163.  
  164.  
  165. BEGIN
  166.     eol := 0AX;
  167.     SYSTEM.GET(API.MainParam, argc)
  168. END HOST.
  169.