| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- IMPLEMENTATION MODULE DynamicStrings;
- (* String is completed as ADDRESS (a heap C string). All operations
- bind to the shim's m2ds_* helpers. *)
- FROM SYSTEM IMPORT ADDRESS;
- TYPE
- String = ADDRESS;
- PROCEDURE m2dsinit (a : ARRAY OF CHAR) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dskill (s : ADDRESS);
- EXTERNAL;
- PROCEDURE m2dslength (s : ADDRESS) : CARDINAL;
- EXTERNAL;
- PROCEDURE m2dsdupstr (s : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dsconcat (a : ADDRESS; b : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dsconcatchar (a : ADDRESS; ch : CHAR) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dsassign (a : ADDRESS; b : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dseq (a : ADDRESS; b : ADDRESS) : BOOLEAN;
- EXTERNAL;
- PROCEDURE m2dseqarr (s : ADDRESS; a : ARRAY OF CHAR) : BOOLEAN;
- EXTERNAL;
- PROCEDURE m2dschar (s : ADDRESS; i : INTEGER) : CHAR;
- EXTERNAL;
- PROCEDURE m2dscopyout (VAR dst : ARRAY OF CHAR; s : ADDRESS);
- EXTERNAL;
- PROCEDURE m2dsslice (s : ADDRESS; low, high : INTEGER) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dsindex (s : ADDRESS; ch : CHAR; o : CARDINAL) : INTEGER;
- EXTERNAL;
- PROCEDURE m2dsrindex (s : ADDRESS; ch : CHAR; o : CARDINAL) : INTEGER;
- EXTERNAL;
- PROCEDURE m2dsmult (s : ADDRESS; n : CARDINAL) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dsreplacechar (s : ADDRESS; from, to : CHAR) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dsupper (s : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dslower (s : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dstrimprefix (s : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE m2dstrimpostfix (s : ADDRESS) : ADDRESS;
- EXTERNAL;
- PROCEDURE InitString (a : ARRAY OF CHAR) : String;
- BEGIN
- RETURN m2dsinit(a)
- END InitString;
- PROCEDURE KillString (s : String) : String;
- BEGIN
- m2dskill(s);
- RETURN NIL
- END KillString;
- PROCEDURE Fin (s : String);
- BEGIN
- m2dskill(s)
- END Fin;
- PROCEDURE InitStringChar (ch : CHAR) : String;
- VAR buf : ARRAY [0 .. 1] OF CHAR;
- BEGIN
- buf[0] := ch; buf[1] := CHR(0);
- RETURN m2dsinit(buf)
- END InitStringChar;
- PROCEDURE Length (s : String) : CARDINAL;
- BEGIN
- RETURN m2dslength(s)
- END Length;
- PROCEDURE ConCat (a, b : String) : String;
- BEGIN
- RETURN m2dsconcat(a, b)
- END ConCat;
- PROCEDURE ConCatChar (a : String; ch : CHAR) : String;
- BEGIN
- RETURN m2dsconcatchar(a, ch)
- END ConCatChar;
- PROCEDURE Assign (a, b : String) : String;
- BEGIN
- RETURN m2dsassign(a, b)
- END Assign;
- PROCEDURE Dup (s : String) : String;
- BEGIN
- RETURN m2dsdupstr(s)
- END Dup;
- PROCEDURE Add (a, b : String) : String;
- BEGIN
- RETURN m2dsconcat(m2dsdupstr(a), b)
- END Add;
- PROCEDURE Equal (a, b : String) : BOOLEAN;
- BEGIN
- RETURN m2dseq(a, b)
- END Equal;
- PROCEDURE EqualArray (s : String; a : ARRAY OF CHAR) : BOOLEAN;
- BEGIN
- RETURN m2dseqarr(s, a)
- END EqualArray;
- PROCEDURE CopyOut (VAR a : ARRAY OF CHAR; s : String);
- BEGIN
- m2dscopyout(a, s)
- END CopyOut;
- PROCEDURE char (s : String; i : INTEGER) : CHAR;
- BEGIN
- RETURN m2dschar(s, i)
- END char;
- PROCEDURE string (s : String) : ADDRESS;
- BEGIN
- RETURN s
- END string;
- PROCEDURE Mult (s : String; n : CARDINAL) : String;
- BEGIN
- RETURN m2dsmult(s, n)
- END Mult;
- PROCEDURE Slice (s : String; low, high : INTEGER) : String;
- BEGIN
- RETURN m2dsslice(s, low, high)
- END Slice;
- PROCEDURE Index (s : String; ch : CHAR; o : CARDINAL) : INTEGER;
- BEGIN
- RETURN m2dsindex(s, ch, o)
- END Index;
- PROCEDURE RIndex (s : String; ch : CHAR; o : CARDINAL) : INTEGER;
- BEGIN
- RETURN m2dsrindex(s, ch, o)
- END RIndex;
- PROCEDURE ReplaceChar (s : String; from, to : CHAR) : String;
- BEGIN
- RETURN m2dsreplacechar(s, from, to)
- END ReplaceChar;
- PROCEDURE ToUpper (s : String) : String;
- BEGIN
- RETURN m2dsupper(s)
- END ToUpper;
- PROCEDURE ToLower (s : String) : String;
- BEGIN
- RETURN m2dslower(s)
- END ToLower;
- PROCEDURE RemoveWhitePrefix (s : String) : String;
- BEGIN
- RETURN m2dstrimprefix(s)
- END RemoveWhitePrefix;
- PROCEDURE RemoveWhitePostfix (s : String) : String;
- BEGIN
- RETURN m2dstrimpostfix(s)
- END RemoveWhitePostfix;
- END DynamicStrings.
|