dynamicstrings.mod 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. IMPLEMENTATION MODULE DynamicStrings;
  2. (* String is completed as ADDRESS (a heap C string). All operations
  3. bind to the shim's m2ds_* helpers. *)
  4. FROM SYSTEM IMPORT ADDRESS;
  5. TYPE
  6. String = ADDRESS;
  7. PROCEDURE m2dsinit (a : ARRAY OF CHAR) : ADDRESS;
  8. EXTERNAL;
  9. PROCEDURE m2dskill (s : ADDRESS);
  10. EXTERNAL;
  11. PROCEDURE m2dslength (s : ADDRESS) : CARDINAL;
  12. EXTERNAL;
  13. PROCEDURE m2dsdupstr (s : ADDRESS) : ADDRESS;
  14. EXTERNAL;
  15. PROCEDURE m2dsconcat (a : ADDRESS; b : ADDRESS) : ADDRESS;
  16. EXTERNAL;
  17. PROCEDURE m2dsconcatchar (a : ADDRESS; ch : CHAR) : ADDRESS;
  18. EXTERNAL;
  19. PROCEDURE m2dsassign (a : ADDRESS; b : ADDRESS) : ADDRESS;
  20. EXTERNAL;
  21. PROCEDURE m2dseq (a : ADDRESS; b : ADDRESS) : BOOLEAN;
  22. EXTERNAL;
  23. PROCEDURE m2dseqarr (s : ADDRESS; a : ARRAY OF CHAR) : BOOLEAN;
  24. EXTERNAL;
  25. PROCEDURE m2dschar (s : ADDRESS; i : INTEGER) : CHAR;
  26. EXTERNAL;
  27. PROCEDURE m2dscopyout (VAR dst : ARRAY OF CHAR; s : ADDRESS);
  28. EXTERNAL;
  29. PROCEDURE m2dsslice (s : ADDRESS; low, high : INTEGER) : ADDRESS;
  30. EXTERNAL;
  31. PROCEDURE m2dsindex (s : ADDRESS; ch : CHAR; o : CARDINAL) : INTEGER;
  32. EXTERNAL;
  33. PROCEDURE m2dsrindex (s : ADDRESS; ch : CHAR; o : CARDINAL) : INTEGER;
  34. EXTERNAL;
  35. PROCEDURE m2dsmult (s : ADDRESS; n : CARDINAL) : ADDRESS;
  36. EXTERNAL;
  37. PROCEDURE m2dsreplacechar (s : ADDRESS; from, to : CHAR) : ADDRESS;
  38. EXTERNAL;
  39. PROCEDURE m2dsupper (s : ADDRESS) : ADDRESS;
  40. EXTERNAL;
  41. PROCEDURE m2dslower (s : ADDRESS) : ADDRESS;
  42. EXTERNAL;
  43. PROCEDURE m2dstrimprefix (s : ADDRESS) : ADDRESS;
  44. EXTERNAL;
  45. PROCEDURE m2dstrimpostfix (s : ADDRESS) : ADDRESS;
  46. EXTERNAL;
  47. PROCEDURE InitString (a : ARRAY OF CHAR) : String;
  48. BEGIN
  49. RETURN m2dsinit(a)
  50. END InitString;
  51. PROCEDURE KillString (s : String) : String;
  52. BEGIN
  53. m2dskill(s);
  54. RETURN NIL
  55. END KillString;
  56. PROCEDURE Fin (s : String);
  57. BEGIN
  58. m2dskill(s)
  59. END Fin;
  60. PROCEDURE InitStringChar (ch : CHAR) : String;
  61. VAR buf : ARRAY [0 .. 1] OF CHAR;
  62. BEGIN
  63. buf[0] := ch; buf[1] := CHR(0);
  64. RETURN m2dsinit(buf)
  65. END InitStringChar;
  66. PROCEDURE Length (s : String) : CARDINAL;
  67. BEGIN
  68. RETURN m2dslength(s)
  69. END Length;
  70. PROCEDURE ConCat (a, b : String) : String;
  71. BEGIN
  72. RETURN m2dsconcat(a, b)
  73. END ConCat;
  74. PROCEDURE ConCatChar (a : String; ch : CHAR) : String;
  75. BEGIN
  76. RETURN m2dsconcatchar(a, ch)
  77. END ConCatChar;
  78. PROCEDURE Assign (a, b : String) : String;
  79. BEGIN
  80. RETURN m2dsassign(a, b)
  81. END Assign;
  82. PROCEDURE Dup (s : String) : String;
  83. BEGIN
  84. RETURN m2dsdupstr(s)
  85. END Dup;
  86. PROCEDURE Add (a, b : String) : String;
  87. BEGIN
  88. RETURN m2dsconcat(m2dsdupstr(a), b)
  89. END Add;
  90. PROCEDURE Equal (a, b : String) : BOOLEAN;
  91. BEGIN
  92. RETURN m2dseq(a, b)
  93. END Equal;
  94. PROCEDURE EqualArray (s : String; a : ARRAY OF CHAR) : BOOLEAN;
  95. BEGIN
  96. RETURN m2dseqarr(s, a)
  97. END EqualArray;
  98. PROCEDURE CopyOut (VAR a : ARRAY OF CHAR; s : String);
  99. BEGIN
  100. m2dscopyout(a, s)
  101. END CopyOut;
  102. PROCEDURE char (s : String; i : INTEGER) : CHAR;
  103. BEGIN
  104. RETURN m2dschar(s, i)
  105. END char;
  106. PROCEDURE string (s : String) : ADDRESS;
  107. BEGIN
  108. RETURN s
  109. END string;
  110. PROCEDURE Mult (s : String; n : CARDINAL) : String;
  111. BEGIN
  112. RETURN m2dsmult(s, n)
  113. END Mult;
  114. PROCEDURE Slice (s : String; low, high : INTEGER) : String;
  115. BEGIN
  116. RETURN m2dsslice(s, low, high)
  117. END Slice;
  118. PROCEDURE Index (s : String; ch : CHAR; o : CARDINAL) : INTEGER;
  119. BEGIN
  120. RETURN m2dsindex(s, ch, o)
  121. END Index;
  122. PROCEDURE RIndex (s : String; ch : CHAR; o : CARDINAL) : INTEGER;
  123. BEGIN
  124. RETURN m2dsrindex(s, ch, o)
  125. END RIndex;
  126. PROCEDURE ReplaceChar (s : String; from, to : CHAR) : String;
  127. BEGIN
  128. RETURN m2dsreplacechar(s, from, to)
  129. END ReplaceChar;
  130. PROCEDURE ToUpper (s : String) : String;
  131. BEGIN
  132. RETURN m2dsupper(s)
  133. END ToUpper;
  134. PROCEDURE ToLower (s : String) : String;
  135. BEGIN
  136. RETURN m2dslower(s)
  137. END ToLower;
  138. PROCEDURE RemoveWhitePrefix (s : String) : String;
  139. BEGIN
  140. RETURN m2dstrimprefix(s)
  141. END RemoveWhitePrefix;
  142. PROCEDURE RemoveWhitePostfix (s : String) : String;
  143. BEGIN
  144. RETURN m2dstrimpostfix(s)
  145. END RemoveWhitePostfix;
  146. END DynamicStrings.