(************************************************************************)
(*                                                                      *)
(*       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.