RTS.cp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. TYPE NativeType* = POINTER TO ABSTRACT RECORD END;
  21. NativeObject* = POINTER TO ABSTRACT RECORD END;
  22. NativeString* = POINTER TO RECORD END;
  23. NativeException*= POINTER TO EXTENSIBLE RECORD END;
  24. VAR eol- : POINTER TO ARRAY OF CHAR; (* OS-specific end of line string *)
  25. (* ========================================================== *)
  26. (* ============= Support for native exceptions ============== *)
  27. (* ========================================================== *)
  28. PROCEDURE getStr*(x : NativeException) : CharOpen;
  29. PROCEDURE Throw*(IN s : ARRAY OF CHAR);
  30. (** Abort execution with an error *)
  31. (* ========================================================== *)
  32. (* ============= Conversions FROM array of char ============= *)
  33. (* ========================================================== *)
  34. PROCEDURE StrToBool*(IN s : ARRAY OF CHAR; OUT b : BOOLEAN; OUT ok : BOOLEAN);
  35. (** Parse array into a BOOLEAN TRUE/FALSE *)
  36. PROCEDURE StrToByte*(IN s : ARRAY OF CHAR; OUT b : BYTE; OUT ok : BOOLEAN);
  37. (** Parse array into a BYTE integer *)
  38. PROCEDURE StrToUByte*(IN s : ARRAY OF CHAR; OUT b : BYTE; OUT ok : BOOLEAN);
  39. (** Parse array into a BYTE integer *)
  40. PROCEDURE StrToShort*(IN s : ARRAY OF CHAR; OUT si : SHORTINT; OUT ok : BOOLEAN);
  41. (** Parse an array into a CP LONGINT *)
  42. PROCEDURE StrToUShort*(IN s:ARRAY OF CHAR; OUT si:SHORTINT; OUT ok:BOOLEAN);
  43. (** Parse an array into a CP LONGINT *)
  44. PROCEDURE StrToInt*(IN s:ARRAY OF CHAR; OUT i:INTEGER; OUT ok:BOOLEAN);
  45. (** Parse an array into a CP INTEGER *)
  46. PROCEDURE StrToUInt*(IN s:ARRAY OF CHAR; OUT i:INTEGER; OUT ok:BOOLEAN);
  47. (** Parse an array into a CP INTEGER *)
  48. PROCEDURE StrToLong*(IN s:ARRAY OF CHAR; OUT i:LONGINT; OUT ok:BOOLEAN);
  49. (** Parse an array into a CP LONGINT *)
  50. PROCEDURE StrToULong*(IN s:ARRAY OF CHAR; OUT i:LONGINT; OUT ok:BOOLEAN);
  51. (** Parse an array into a CP LONGINT *)
  52. PROCEDURE HexStrToUByte*(IN s:ARRAY OF CHAR; OUT b:BYTE; OUT ok:BOOLEAN);
  53. (** Parse hexadecimal array into a BYTE integer *)
  54. (* ------------------- Low-level String Conversions -------------------- *)
  55. (* Three versions for different cultures. *Invar uses invariant culture *)
  56. (* *Local uses current locale *)
  57. (* StrToReal & RealToStr do not behave the same on JVM and CLR. *)
  58. (* They is provided for compatability with versions < 1.3.1 *)
  59. (* ------------------- Low-level String Conversions -------------------- *)
  60. PROCEDURE StrToReal*(IN s : ARRAY OF CHAR;
  61. OUT r : REAL;
  62. OUT ok : BOOLEAN);
  63. (** Parse array into an ieee double REAL *)
  64. PROCEDURE StrToRealInvar*(IN s : ARRAY OF CHAR;
  65. OUT r : REAL;
  66. OUT ok : BOOLEAN);
  67. (** Parse array using invariant culture, into an ieee double REAL *)
  68. PROCEDURE StrToRealLocal*(IN s : ARRAY OF CHAR;
  69. OUT r : REAL;
  70. OUT ok : BOOLEAN);
  71. (** Parse array using current locale, into an ieee double REAL *)
  72. PROCEDURE StrToSReal*(IN s : ARRAY OF CHAR;
  73. OUT r : SHORTREAL;
  74. OUT ok : BOOLEAN);
  75. PROCEDURE StrToSRealInvar*(IN s : ARRAY OF CHAR;
  76. OUT r : SHORTREAL;
  77. OUT ok : BOOLEAN);
  78. PROCEDURE StrToSRealLocal*(IN s : ARRAY OF CHAR;
  79. OUT r : SHORTREAL;
  80. OUT ok : BOOLEAN);
  81. (** Parse array into a short REAL *)
  82. (* ========================================================== *)
  83. (* ============== Conversions TO array of char ============== *)
  84. (* ========================================================== *)
  85. PROCEDURE RealToStr*(r : REAL; OUT s : ARRAY OF CHAR);
  86. (** Decode a CP REAL into an array *)
  87. PROCEDURE RealToStrInvar*(r : REAL; OUT s : ARRAY OF CHAR);
  88. (** Decode a CP REAL into an array in invariant culture *)
  89. PROCEDURE RealToStrLocal*(r : REAL; OUT s : ARRAY OF CHAR);
  90. (** Decode a CP REAL into an array in the current locale *)
  91. PROCEDURE SRealToStr*(r : SHORTREAL; OUT s : ARRAY OF CHAR);
  92. PROCEDURE SRealToStrInvar*(r : SHORTREAL; OUT s : ARRAY OF CHAR);
  93. PROCEDURE SRealToStrLocal*(r : SHORTREAL; OUT s : ARRAY OF CHAR);
  94. (** Decode a CP SHORTREAL into an array *)
  95. (* ========================================================== *)
  96. PROCEDURE IntToStr*(i : INTEGER; OUT s : ARRAY OF CHAR);
  97. (** Decode a CP INTEGER into an array *)
  98. PROCEDURE ObjToStr*(obj : ANYPTR; OUT s : ARRAY OF CHAR);
  99. (** Decode a CP INTEGER into an array *)
  100. PROCEDURE LongToStr*(i : LONGINT; OUT s : ARRAY OF CHAR);
  101. (** Decode a CP INTEGER into an array *)
  102. (* ========================================================== *)
  103. (* ========== Casts with no representation change =========== *)
  104. (* ========================================================== *)
  105. PROCEDURE realToLongBits*(r : REAL) : LONGINT;
  106. (** Convert an ieee double into a longint with same bit pattern *)
  107. PROCEDURE longBitsToReal*(l : LONGINT) : REAL;
  108. (** Convert an ieee double into a longint with same bit pattern *)
  109. PROCEDURE shortRealToIntBits*(r : SHORTREAL) : INTEGER;
  110. (** Convert an ieee float into an int with same bit pattern *)
  111. PROCEDURE intBitsToShortReal*(i : INTEGER) : SHORTREAL;
  112. (** Convert an int into an ieee float with same bit pattern *)
  113. PROCEDURE hiByte*(i : SHORTINT) : BYTE;
  114. (** Get hi-significant word of short *)
  115. PROCEDURE loByte*(i : SHORTINT) : BYTE;
  116. (** Get lo-significant word of short *)
  117. PROCEDURE hiShort*(i : INTEGER) : SHORTINT;
  118. (** Get hi-significant word of integer *)
  119. PROCEDURE loShort*(i : INTEGER) : SHORTINT;
  120. (** Get lo-significant word of integer *)
  121. PROCEDURE hiInt*(l : LONGINT) : INTEGER;
  122. (** Get hi-significant word of long integer *)
  123. PROCEDURE loInt*(l : LONGINT) : INTEGER;
  124. (** Get lo-significant word of long integer *)
  125. (* ========================================================== *)
  126. (* ============= Various utility procedures ================= *)
  127. (* ========================================================== *)
  128. PROCEDURE GetMillis*() : LONGINT;
  129. (** Get time in milliseconds *)
  130. PROCEDURE GetDateString*(OUT str : ARRAY OF CHAR);
  131. (** Get a date string in some native format *)
  132. PROCEDURE ClassMarker*(o : ANYPTR);
  133. (** Write class name to standard output *)
  134. (* ============================================================ *)
  135. END RTS.