DEFINITION MODULE Text;


   (* This package defines the String80 abstract data type and lists  *)
   (* the operations possible on Text.String objects.  Note that the  *)
   (* Text.String data type is defined as ARRAY [0..n] OF CHAR, where *)
   (* n is the largest possible length of the string.  Since the      *)
   (* length of a string may vary dynamically, strings are terminated *)
   (* by the Null character.                                          *)
   (*                                                                 *)
   (* Note: Since all strings have the same representation regardless *)
   (* of length, the operations provided by this module may be used   *)
   (* on strings of any length.                                       *)


   TYPE String80 = ARRAY [0..80] OF CHAR;
   TYPE StringPtr = POINTER TO String80;

      (* These types define a varying length string with a maximum *)
      (* length of 80 characters.                                  *)


   PROCEDURE Length ( VAR Source : (* IN *) ARRAY OF CHAR ) : CARDINAL;

      (* Return the current length of the string. *)


   PROCEDURE Assign (
      VAR Source      : (* IN  *) ARRAY OF CHAR;
      VAR Destination : (* OUT *) ARRAY OF CHAR );

      (* Assign the source string to the destination.  If the *)
      (* length of source exceeds the length of Destination,  *)
      (* the source string is truncated.                      *)


   TYPE CompareResult = ( LessThan, Equal, GreaterThan );

   PROCEDURE Compare (
      VAR LeftString  : (* IN *) ARRAY OF CHAR;
      VAR RightString : (* IN *) ARRAY OF CHAR ) : CompareResult;

      (* Compare the contents of LeftString with that of RightString *)
      (* using the ASCII collating sequence.                         *)
 

   PROCEDURE SliceChar (
      VAR Source : (* IN  *) ARRAY OF CHAR;
      Position   : (* IN  *) CARDINAL;
      VAR Result : (* OUT *) CHAR ) : BOOLEAN;

      (* Slice the character indicated by Position out of the string *)
      (* contained in Source.  This routine returns FALSE if the     *)
      (* position exceeds the current length of the String, or TRUE  *)
      (* otherwise.                                                  *)


   PROCEDURE SliceString (
      VAR Source : (* IN  *) ARRAY OF CHAR;
      Start      : (* IN  *) CARDINAL;
      Stop       : (* IN  *) CARDINAL;
      VAR Result : (* OUT *) ARRAY OF CHAR ) : BOOLEAN;

      (* Slice the string indicated by the range Start..Stop from   *)
      (* the source string.  This routine returns FALSE if Start is *)
      (* greater than Stop, if Stop exceeds the current length of   *)
      (* the string, or if the slice length exceeds the length of   *)
      (* Result.  Otherwise, TRUE is returned.                      *)


   PROCEDURE ConcatChar (
      VAR Source : (* IN  *) ARRAY OF CHAR;
      Character  : (* IN  *) CHAR;
      VAR Result : (* OUT *) ARRAY OF CHAR ) : BOOLEAN;

      (* Concatenate Character onto the end of Source.  This routine *)
      (* returns FALSE if the resulting string exceeds the length of *)
      (* Result, or TRUE otherwise.                                  *)


   PROCEDURE ConcatString (
      VAR LeftString  : (* IN  *) ARRAY OF CHAR;
      VAR RightString : (* IN  *) ARRAY OF CHAR;
      VAR Result      : (* OUT *) ARRAY OF CHAR ) : BOOLEAN;

      (* Concatenate RightString onto the end of LeftString.  This *)
      (* routine returns FALSE is the resulting string exceeds the *)
      (* length of Result, or TRUE otherwise.                      *)


   PROCEDURE UpperCase ( VAR String : (* IN *) ARRAY OF CHAR );

      (* Convert a string into all uppercase *)


END Text.
         ((Rectangle.Origin.Y + Rectangle.Size.Height)