RTS.cp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. (** This is the user accessible static methods of the CP runtime system.
  2. * These are the environment-independent ones. Others are in CP*.cp
  3. * Note: the bodies of these procedures are dummies, this module is
  4. * compiled with -special. The real code is in RTS.java or other.
  5. *
  6. * Version: 7 July 1999 (kjg).
  7. * 20 February 2000 (kjg) Default target ...
  8. * 4 July 2000 (kjg) Native types ...
  9. * 4 August 2001 (syc,kjg) more methods...
  10. * 2004 (kjg) vector support and globalization
  11. *)
  12. (* ============================================================ *)
  13. SYSTEM MODULE RTS;
  14. VAR defaultTarget- : ARRAY 4 OF CHAR;
  15. fltNegInfinity- : SHORTREAL;
  16. fltPosInfinity- : SHORTREAL;
  17. dblNegInfinity- : REAL;
  18. dblPosInfinity- : REAL;
  19. TYPE CharOpen* = POINTER TO ARRAY OF CHAR;
  20. CharVector* = VECTOR OF CHAR;
  21. TYPE NativeType* = POINTER TO ABSTRACT RECORD END;
  22. NativeObject* = POINTER TO EXTENSIBLE RECORD END;
  23. NativeString* = POINTER TO RECORD END;
  24. NativeException*= POINTER TO EXTENSIBLE RECORD END;
  25. VAR eol- : POINTER TO ARRAY OF CHAR; (* OS-specific end of line string *)
  26. (* ========================================================== *)
  27. (* ============= Support for native exceptions ============== *)
  28. (* ========================================================== *)
  29. PROCEDURE getStr*(x : NativeException) : CharOpen;
  30. PROCEDURE Throw*(IN s : ARRAY OF CHAR);
  31. (** Abort execution with an error *)
  32. (* ========================================================== *)
  33. (* ============= Conversions FROM array of char ============= *)
  34. (* ========================================================== *)
  35. PROCEDURE StrToBool*(IN s : ARRAY OF CHAR; OUT b : BOOLEAN; OUT ok : BOOLEAN);
  36. (** Parse array into a BOOLEAN TRUE/FALSE *)
  37. PROCEDURE StrToByte*(IN s : ARRAY OF CHAR; OUT b : BYTE; OUT ok : BOOLEAN);
  38. (** Parse array into a BYTE integer *)
  39. PROCEDURE StrToUByte*(IN s : ARRAY OF CHAR; OUT b : BYTE; OUT ok : BOOLEAN);
  40. (** Parse array into a BYTE integer *)
  41. PROCEDURE StrToShort*(IN s : ARRAY OF CHAR; OUT si : SHORTINT; OUT ok : BOOLEAN);
  42. (** Parse an array into a CP LONGINT *)
  43. PROCEDURE StrToUShort*(IN s:ARRAY OF CHAR; OUT si:SHORTINT; OUT ok:BOOLEAN);
  44. (** Parse an array into a CP LONGINT *)
  45. PROCEDURE StrToInt*(IN s:ARRAY OF CHAR; OUT i:INTEGER; OUT ok:BOOLEAN);
  46. (** Parse an array into a CP INTEGER *)
  47. PROCEDURE StrToUInt*(IN s:ARRAY OF CHAR; OUT i:INTEGER; OUT ok:BOOLEAN);
  48. (** Parse an array into a CP INTEGER *)
  49. PROCEDURE StrToLong*(IN s:ARRAY OF CHAR; OUT i:LONGINT; OUT ok:BOOLEAN);
  50. (** Parse an array into a CP LONGINT *)
  51. PROCEDURE StrToULong*(IN s:ARRAY OF CHAR; OUT i:LONGINT; OUT ok:BOOLEAN);
  52. (** Parse an array into a CP LONGINT *)
  53. PROCEDURE HexStrToUByte*(IN s:ARRAY OF CHAR; OUT b:BYTE; OUT ok:BOOLEAN);
  54. (** Parse hexadecimal array into a BYTE integer *)
  55. (* ------------------- Low-level String Conversions -------------------- *)
  56. (* Three versions for different cultures. *Invar uses invariant culture *)
  57. (* *Local uses current locale *)
  58. (* StrToReal & RealToStr do not behave the same on JVM and CLR. *)
  59. (* They is provided for compatability with versions < 1.3.1 *)
  60. (* ------------------- Low-level String Conversions -------------------- *)
  61. PROCEDURE StrToReal*(IN s : ARRAY OF CHAR;
  62. OUT r : REAL;
  63. OUT ok : BOOLEAN);
  64. (** Parse array into an ieee double REAL *)
  65. PROCEDURE StrToRealInvar*(IN s : ARRAY OF CHAR;
  66. OUT r : REAL;
  67. OUT ok : BOOLEAN);
  68. (** Parse array using invariant culture, into an ieee double REAL *)
  69. PROCEDURE StrToRealLocal*(IN s : ARRAY OF CHAR;
  70. OUT r : REAL;
  71. OUT ok : BOOLEAN);
  72. (** Parse array using current locale, into an ieee double REAL *)
  73. PROCEDURE StrToSReal*(IN s : ARRAY OF CHAR;
  74. OUT r : SHORTREAL;
  75. OUT ok : BOOLEAN);
  76. PROCEDURE StrToSRealInvar*(IN s : ARRAY OF CHAR;
  77. OUT r : SHORTREAL;
  78. OUT ok : BOOLEAN);
  79. PROCEDURE StrToSRealLocal*(IN s : ARRAY OF CHAR;
  80. OUT r : SHORTREAL;
  81. OUT ok : BOOLEAN);
  82. (** Parse array into a short REAL *)
  83. (* ========================================================== *)
  84. (* ============== Operations on Native Types ============== *)
  85. (* ========================================================== *)
  86. PROCEDURE TypeName*(typ : NativeType) : CharOpen;
  87. (* ========================================================== *)
  88. (* ============== Operations on Native Strings ============== *)
  89. (* ========================================================== *)
  90. PROCEDURE CharAtIndex*(str : NativeString; idx : INTEGER) : CHAR;
  91. (* Get the character at zero-based index idx *)
  92. PROCEDURE Length*(str : NativeString) : INTEGER;
  93. (* Get the length of the native string *)
  94. (* ========================================================== *)
  95. (* ============== Conversions TO array of char ============== *)
  96. (* ========================================================== *)
  97. PROCEDURE RealToStr*(r : REAL; OUT s : ARRAY OF CHAR);
  98. (** Decode a CP REAL into an array *)
  99. PROCEDURE RealToStrInvar*(r : REAL; OUT s : ARRAY OF CHAR);
  100. (** Decode a CP REAL into an array in invariant culture *)
  101. PROCEDURE RealToStrLocal*(r : REAL; OUT s : ARRAY OF CHAR);
  102. (** Decode a CP REAL into an array in the current locale *)
  103. PROCEDURE SRealToStr*(r : SHORTREAL; OUT s : ARRAY OF CHAR);
  104. PROCEDURE SRealToStrInvar*(r : SHORTREAL; OUT s : ARRAY OF CHAR);
  105. PROCEDURE SRealToStrLocal*(r : SHORTREAL; OUT s : ARRAY OF CHAR);
  106. (** Decode a CP SHORTREAL into an array *)
  107. (* ========================================================== *)
  108. PROCEDURE IntToStr*(i : INTEGER; OUT s : ARRAY OF CHAR);
  109. (** Decode a CP INTEGER into an array *)
  110. PROCEDURE ObjToStr*(obj : ANYPTR; OUT s : ARRAY OF CHAR);
  111. (** Decode a CP INTEGER into an array *)
  112. PROCEDURE LongToStr*(i : LONGINT; OUT s : ARRAY OF CHAR);
  113. (** Decode a CP INTEGER into an array *)
  114. (* ========================================================== *)
  115. (* ========== Casts with no representation change =========== *)
  116. (* ========================================================== *)
  117. PROCEDURE realToLongBits*(r : REAL) : LONGINT;
  118. (** Convert an ieee double into a longint with same bit pattern *)
  119. PROCEDURE longBitsToReal*(l : LONGINT) : REAL;
  120. (** Convert an ieee double into a longint with same bit pattern *)
  121. PROCEDURE shortRealToIntBits*(r : SHORTREAL) : INTEGER;
  122. (** Convert an ieee float into an int with same bit pattern *)
  123. PROCEDURE intBitsToShortReal*(i : INTEGER) : SHORTREAL;
  124. (** Convert an int into an ieee float with same bit pattern *)
  125. PROCEDURE hiByte*(i : SHORTINT) : BYTE;
  126. (** Get hi-significant word of short *)
  127. PROCEDURE loByte*(i : SHORTINT) : BYTE;
  128. (** Get lo-significant word of short *)
  129. PROCEDURE hiShort*(i : INTEGER) : SHORTINT;
  130. (** Get hi-significant word of integer *)
  131. PROCEDURE loShort*(i : INTEGER) : SHORTINT;
  132. (** Get lo-significant word of integer *)
  133. PROCEDURE hiInt*(l : LONGINT) : INTEGER;
  134. (** Get hi-significant word of long integer *)
  135. PROCEDURE loInt*(l : LONGINT) : INTEGER;
  136. (** Get lo-significant word of long integer *)
  137. (* ========================================================== *)
  138. (* ============= Various utility procedures ================= *)
  139. (* ========================================================== *)
  140. PROCEDURE GetMillis*() : LONGINT;
  141. (** Get time in milliseconds *)
  142. PROCEDURE GetDateString*(OUT str : ARRAY OF CHAR);
  143. (** Get a date string in some native format *)
  144. PROCEDURE ClassMarker*(o : ANYPTR);
  145. (** Write class name to standard output *)
  146. (* ============================================================ *)
  147. END RTS.