(************************************************************************)
(*                                                                      *)
(*       Requires MRI Modula2                                           *)
(*                                                                      *)
(*       Strlib:                                                        *)
(*               Library module to handle strings.  Included is         *)
(*               terminal I/O, string length, assignment, conc-         *)
(*               atention, insertion, deletion, alteration and          *)
(*               the ability to select portions of a string.            *)
(*                                                                      *)
(*       Verson :                                                       *)
(*               1.0 ; November 16, 83 ;   Namir C. Shammas             *)
(*               1.1 ; November 21, 84 ;   Walter Maner                 *)
(*                                                                      *)
(************************************************************************)


DEFINITION MODULE Strlib;

EXPORT QUALIFIED Len,StringIs,ShowString,StringAdd,StringDelete,StringPos,
                 StringLeft,StringRight,StringMid,StringRemove,StringInsert,
                 StringReplace,StringChange,StringAlter,InputString,eos;

CONST
(*  End Of String  *)
   eos = 0C;

PROCEDURE Len(Str : ARRAY OF CHAR):CARDINAL;
(*    Obtain the number of characters in a string.  *)

PROCEDURE StringIs (VAR Str1 : ARRAY OF CHAR; Str2 : ARRAY OF CHAR);
(*    Assign an array of characters appended by an eos.  *)

PROCEDURE ShowString(Str : ARRAY OF CHAR );
(*    Display the string    *)

PROCEDURE StringAdd (VAR Str1 : ARRAY OF CHAR; Str2 : ARRAY OF CHAR );
(*    Concatenate string Str2 to Str1  *)

PROCEDURE StringDelete(VAR Str : ARRAY OF CHAR ; First,Last : CARDINAL);
(*    Delete a portion of a string STARTING at 'Fisrt' and ENDING at
     'Last' (included)  *)

PROCEDURE StringPos(Str1,Str2 : ARRAY OF CHAR ; Start : CARDINAL):CARDINAL;
(*    Function that returns the position of 'sub-string' Str2 in string
     Str1. The search begins at position 'Start'.   *)

PROCEDURE StringLeft(VAR Str1 : ARRAY OF CHAR ;
                        Str2 : ARRAY OF CHAR; Count : CARDINAL);
(*    Pick the 'Count' leftmost characters of string Str2 and store it in
     string Str1.    *)

PROCEDURE StringRight(VAR Str1 : ARRAY OF CHAR ;
                         Str2 : ARRAY OF CHAR;  Count : CARDINAL);
(*    Pick the 'Count' rightmost characters of string Str2 and store it in
     string Str1.    *)

PROCEDURE StringMid(VAR Str1 : ARRAY OF CHAR ;
                       Str2 : ARRAY OF CHAR;  Start, Count : CARDINAL);
(*    Pick 'Count' characters starting at position 'Start' in string
     Str2 and store it in string Str1.   *)

PROCEDURE StringRemove(VAR Str1 : ARRAY OF CHAR; Str2 : ARRAY OF CHAR);
(*    Remove ALL occurences of sub-string Str2 in string Str1 and update
     the latter string .   *)

PROCEDURE StringInsert(VAR Str1 : ARRAY OF CHAR; Str2 : ARRAY OF CHAR;
                         Start : CARDINAL);
(*    Insert sub-string Str2 in string Str1 at position 'Start'.  The
     characters at position 'Start' and above are moved.   *)

PROCEDURE StringReplace(VAR Str1 : ARRAY OF CHAR; Str2,Str3 : ARRAY OF CHAR);
(*    Replace ALL occurences of sub-string Str2 with sub-string Str3 in the
     string Str1.   *)

PROCEDURE StringChange(VAR Str1 : ARRAY OF CHAR; Str2,Str3 : ARRAY OF CHAR;
                          Start,Repeat:CARDINAL);
(*    Replace 'Repeat' times the occurence of sub-string Str2 by Str3 in
     string Str1.  The action taken starts at position 'Start'.   *)

PROCEDURE StringAlter(VAR Str1 : ARRAY OF CHAR; Str2 : ARRAY OF CHAR;
                               Start : CARDINAL);
(*    This procedure overwrites the portions of string Str1 starting at
     position 'Start' and for the length of sub-string Str2.  *)

PROCEDURE InputString (VAR Str : ARRAY OF CHAR);
(*    Read string from ketboard.  *)

END Strlib.