(* Version 1.10, Nov 1984 *)
DEFINITION MODULE Strings;
(*
   Variable-length character strings handler.


NOTE: For most of these string handling procedures,there
is the possibility of the user not providing a variable
large enough to contain the result of a string operation.
Should this possibility arise, truncation may result, as
there will be no other error notification. The
implementation of this module does not cause a range
error, instead, it truncates silently.

String variables have the following characteristics:
   - They are of type ARRAY OF CHAR.
   - The array lower bound must be zero.
   - The length of the string is the size of the string 
     variable, unless a null character (0C) occurs in
     the string to indicate end of string.
*)


EXPORT QUALIFIED
   Assign, Insert, Delete,
   Pos, Copy, Concat, Length, CompareStr;


PROCEDURE Assign (VAR source, dest: ARRAY OF CHAR);
(*
- Assign the contents of string variable source into string variable dest

in:     source

out:    dest
*)
 

PROCEDURE Insert (substr: ARRAY OF CHAR;
                  VAR str: ARRAY OF CHAR;
                  inx: CARDINAL);
(*
- Insert the string substr into str,starting at str[inx].

in:     substr
        str
        inx

out:    str

If inx is equal or greater than Length(str) then substr
is appended to end of dest.
*)


PROCEDURE Delete (VAR str: ARRAY OF CHAR;
                  inx: CARDINAL;
                  len: CARDINAL);
(*
- Delete len characters from str, starting at str[inx].

in:     str
        inx
        len

out:    str

If inx >= Length(str) then nothing happens. If there are
not len characters to delete, characters to the end of
string are deleted.
*)


PROCEDURE Pos (substr, str: ARRAY OF CHAR): CARDINAL;
(*
- Return the index into str of the first occurrence of the substr.

in:     substr
        str

Pos returns a value greater then HIGH(str) if no
occurrence of the substring is found
*)


PROCEDURE  Copy (str: ARRAY OF CHAR;
                 inx: CARDINAL;
                 len: CARDINAL;
                 VAR result: ARRAY OF CHAR);
(*
- Copy at most len characters from str into result.

in:     str     source string,
        inx     starting position in 'str',
        len     maximum number of characters to copy,

out:    result  copied string
*)


PROCEDURE Concat (s1, s2: ARRAY OF CHAR;
                  VAR result: ARRAY OF CHAR);
(*
- Concatenate two strings.

in:     s1      left string,
        s2      right string,

out:    result  receives left string followed by right
                string.
*)


PROCEDURE Length (VAR str: ARRAY OF CHAR): CARDINAL;
(*
- Return the number of characters in a string.

in:     str
*)


PROCEDURE CompareStr (s1, s2: ARRAY OF CHAR): INTEGER;
(*
- Compare two strings.

in:     s1
        s2

Returns an integer value indicating the comparison result:
    -1 if s1 is less than s2;
     0 if s1 equals s2; 
     1 if s1 is greater than s2
*)


END Strings.
