-- file LongStrings.Mesa
-- last edited by Sandman on August 13, 1980  7:28 AM

Strings: DEFINITIONS =
  BEGIN
  
  String: TYPE = LONG POINTER TO StringBody;

  SubStringDescriptor: TYPE = RECORD [
    base: String,
    offset: CARDINAL, length: CARDINAL];
  
  SubString: TYPE = POINTER TO SubStringDescriptor;
  
  AppendChar: PROCEDURE [s: String, c: CHARACTER];
  AppendString: PROCEDURE [to, from: String];
  AppendSubString: PROCEDURE [to: String, from: SubString];

  BoundsFault: PROCEDURE RETURNS [SIGNAL [s: String] RETURNS [ns: String]] = INLINE {
    RETURN[StringBoundsFault]};

  EqualSubStrings, EquivalentSubStrings: PROCEDURE [s1, s2: SubString]
    RETURNS [BOOLEAN];
  EqualSubString, EquivalentSubString: PROCEDURE [s1, s2: SubString]
    RETURNS [BOOLEAN];

  StringBoundsFault: SIGNAL [s: String] RETURNS [ns: String];

  END.