UTILS.ob07 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. MODULE UTILS;
  2. IMPORT HOST;
  3. CONST
  4. slash* = HOST.slash;
  5. eol* = HOST.eol;
  6. bit_depth* = HOST.bit_depth;
  7. maxint* = HOST.maxint;
  8. minint* = HOST.minint;
  9. min32* = -2147483647-1;
  10. max32* = 2147483647;
  11. vMajor* = 1;
  12. vMinor* = 66;
  13. Date* = "10-feb-2023";
  14. FILE_EXT* = ".ob07";
  15. RTL_NAME* = "RTL";
  16. MAX_GLOBAL_SIZE* = 1600000000;
  17. VAR
  18. time*: INTEGER;
  19. maxreal*, inf*: REAL;
  20. target*: RECORD
  21. bit_depth*,
  22. maxInt*,
  23. minInt*,
  24. maxSet*,
  25. maxHex*: INTEGER;
  26. maxReal*: REAL
  27. END;
  28. bit_diff*: INTEGER;
  29. PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER;
  30. RETURN HOST.FileRead(F, Buffer, bytes)
  31. END FileRead;
  32. PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
  33. RETURN HOST.FileWrite(F, Buffer, bytes)
  34. END FileWrite;
  35. PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
  36. RETURN HOST.FileCreate(FName)
  37. END FileCreate;
  38. PROCEDURE FileClose* (F: INTEGER);
  39. BEGIN
  40. HOST.FileClose(F)
  41. END FileClose;
  42. PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
  43. RETURN HOST.FileOpen(FName)
  44. END FileOpen;
  45. PROCEDURE chmod* (FName: ARRAY OF CHAR);
  46. BEGIN
  47. HOST.chmod(FName)
  48. END chmod;
  49. PROCEDURE GetArg* (i: INTEGER; VAR str: ARRAY OF CHAR);
  50. BEGIN
  51. HOST.GetArg(i, str)
  52. END GetArg;
  53. PROCEDURE Exit* (code: INTEGER);
  54. BEGIN
  55. HOST.ExitProcess(code)
  56. END Exit;
  57. PROCEDURE GetTickCount* (): INTEGER;
  58. RETURN HOST.GetTickCount()
  59. END GetTickCount;
  60. PROCEDURE OutChar* (c: CHAR);
  61. BEGIN
  62. HOST.OutChar(c)
  63. END OutChar;
  64. PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
  65. RETURN HOST.splitf(x, a, b)
  66. END splitf;
  67. PROCEDURE d2s* (x: REAL): INTEGER;
  68. RETURN HOST.d2s(x)
  69. END d2s;
  70. PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
  71. RETURN HOST.isRelative(path)
  72. END isRelative;
  73. PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR);
  74. BEGIN
  75. HOST.GetCurrentDirectory(path)
  76. END GetCurrentDirectory;
  77. PROCEDURE UnixTime* (): INTEGER;
  78. RETURN HOST.UnixTime()
  79. END UnixTime;
  80. PROCEDURE SetBitDepth* (BitDepth: INTEGER; Double: BOOLEAN);
  81. BEGIN
  82. ASSERT((BitDepth = 16) OR (BitDepth = 32) OR (BitDepth = 64));
  83. bit_diff := bit_depth - BitDepth;
  84. ASSERT(bit_diff >= 0);
  85. target.bit_depth := BitDepth;
  86. target.maxSet := BitDepth - 1;
  87. target.maxHex := BitDepth DIV 4;
  88. target.minInt := ASR(minint, bit_diff);
  89. target.maxInt := ASR(maxint, bit_diff);
  90. IF Double THEN
  91. target.maxReal := maxreal
  92. ELSE
  93. target.maxReal := 1.9;
  94. PACK(target.maxReal, 127)
  95. END
  96. END SetBitDepth;
  97. PROCEDURE Byte* (n: INTEGER; idx: INTEGER): BYTE;
  98. RETURN ASR(n, 8 * idx) MOD 256
  99. END Byte;
  100. PROCEDURE Align* (VAR bytes: INTEGER; align: INTEGER): BOOLEAN;
  101. BEGIN
  102. INC(bytes, (-bytes) MOD align)
  103. RETURN bytes >= 0
  104. END Align;
  105. PROCEDURE Long* (value: INTEGER): INTEGER;
  106. RETURN ASR(LSL(value, bit_diff), bit_diff)
  107. END Long;
  108. PROCEDURE Short* (value: INTEGER): INTEGER;
  109. RETURN LSR(LSL(value, bit_diff), bit_diff)
  110. END Short;
  111. PROCEDURE Log2* (x: INTEGER): INTEGER;
  112. VAR
  113. n: INTEGER;
  114. BEGIN
  115. n := 0;
  116. WHILE ~ODD(x) DO
  117. x := x DIV 2;
  118. INC(n)
  119. END;
  120. IF x # 1 THEN
  121. n := -1
  122. END
  123. RETURN n
  124. END Log2;
  125. PROCEDURE hexdgt* (n: BYTE): BYTE;
  126. BEGIN
  127. IF n < 10 THEN
  128. INC(n, ORD("0"))
  129. ELSE
  130. INC(n, ORD("A") - 10)
  131. END
  132. RETURN n
  133. END hexdgt;
  134. BEGIN
  135. time := HOST.GetTickCount();
  136. inf := HOST.inf;
  137. maxreal := HOST.maxreal
  138. END UTILS.