Subversion Repositories Kolibri OS

Rev

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

  1. (*
  2.     Copyright 2016 Anton Krotov
  3.  
  4.     This program is free software: you can redistribute it and/or modify
  5.     it under the terms of the GNU Lesser General Public License as published by
  6.     the Free Software Foundation, either version 3 of the License, or
  7.     (at your option) any later version.
  8.  
  9.     This program is distributed in the hope that it will be useful,
  10.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.     GNU Lesser General Public License for more details.
  13.  
  14.     You should have received a copy of the GNU Lesser General Public License
  15.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  16. *)
  17.  
  18. MODULE HOST;
  19.  
  20. IMPORT sys := SYSTEM, API;
  21.  
  22. CONST
  23.  
  24.   OS* = "LNX";
  25.   Slash* = "/";
  26.  
  27. VAR
  28.  
  29.   fsize  : INTEGER;
  30.  
  31.   sec*   : INTEGER;
  32.   dsec*  : INTEGER;
  33.  
  34. PROCEDURE GetCommandLine* (): INTEGER;
  35.   RETURN API.Param
  36. END GetCommandLine;
  37.  
  38. PROCEDURE CloseFile* (File: INTEGER);
  39. BEGIN
  40.   File := API.fclose(File)
  41. END CloseFile;
  42.  
  43. PROCEDURE FileRW* (hFile, Buffer, nNumberOfBytes: INTEGER; write: BOOLEAN): INTEGER;
  44. VAR res: INTEGER;
  45. BEGIN
  46.   IF write THEN
  47.     res := API.fwrite(Buffer, nNumberOfBytes, 1, hFile) * nNumberOfBytes
  48.   ELSE
  49.     res := API.fread(Buffer, nNumberOfBytes, 1, hFile) * nNumberOfBytes
  50.   END
  51.   RETURN res
  52. END FileRW;
  53.  
  54. PROCEDURE OutString* (str: ARRAY OF CHAR);
  55. VAR res: INTEGER;
  56. BEGIN
  57.   res := FileRW(API.stdout, sys.ADR(str), LENGTH(str), TRUE)
  58. END OutString;
  59.  
  60. PROCEDURE CreateFile* (FName: ARRAY OF CHAR): INTEGER;
  61.   RETURN API.fopen(sys.ADR(FName), sys.ADR("wb"))
  62. END CreateFile;
  63.  
  64. PROCEDURE OpenFile* (FName: ARRAY OF CHAR): INTEGER;
  65. VAR F, res: INTEGER;
  66. BEGIN
  67.   F := API.fopen(sys.ADR(FName), sys.ADR("rb"));
  68.   IF F # 0 THEN
  69.     res   := API.fseek(F, 0, 2);
  70.     fsize := API.ftell(F);
  71.     res   := API.fseek(F, 0, 0)
  72.   END
  73.   RETURN F
  74. END OpenFile;
  75.  
  76. PROCEDURE FileSize* (F: INTEGER): INTEGER;
  77.   RETURN fsize
  78. END FileSize;
  79.  
  80. PROCEDURE Align(n, m: INTEGER): INTEGER;
  81.   RETURN n + (m - n MOD m) MOD m
  82. END Align;
  83.  
  84. PROCEDURE malloc* (Bytes: INTEGER): INTEGER;
  85. VAR res: INTEGER;
  86. BEGIN
  87.   Bytes := Align(Bytes, 4);
  88.   res := API.malloc(Bytes);
  89.   IF res # 0 THEN
  90.     API.zeromem(ASR(Bytes, 2), res)
  91.   END
  92.   RETURN res
  93. END malloc;
  94.  
  95. PROCEDURE ExitProcess* (code: INTEGER);
  96. BEGIN
  97.   API.exit(code)
  98. END ExitProcess;
  99.  
  100. PROCEDURE Time* (VAR sec, dsec: INTEGER);
  101. VAR tp: API.TP;
  102. BEGIN
  103.   IF API.clock_gettime(0, tp) = 0 THEN
  104.     sec := tp[0];
  105.     dsec := tp[1] DIV 10000000
  106.   ELSE
  107.     sec := 0;
  108.     dsec := 0
  109.   END
  110. END Time;
  111.  
  112. PROCEDURE init*;
  113. BEGIN
  114.   Time(sec, dsec)
  115. END init;
  116.  
  117. PROCEDURE GetName*(): INTEGER;
  118.   RETURN 0
  119. END GetName;
  120.  
  121. END HOST.