DEFINITION MODULE StrSBUI; (*========================================================== Version : 1.00 29 Apr 1989 C. Lins Compiler : TopSpeed Modula-2 Component: Monolithic Structure String (Opaque version) Sequential Bounded Unmanaged Iterator THE ABSTRACTION This module provides the String data type for statically allocated data items such as INTEGERs. Any basic data type whose SIZE(T) is ▓ 4 bytes is supported. An item comparison routine is necessary to support comparison of strings. REVISION HISTORY v1.00 29 Apr 1989 C. Lins: Initial implementation. Derived from StringCSBMI module. ==========================================================*) FROM ErrorHandling IMPORT (*--Type*) HandlerProc; FROM Items IMPORT (*--Type*) Item, CompareProc, AccessProc, ChangeProc, LoopAccessProc, LoopChangeProc; FROM Relations IMPORT (*--Type*) Relation; FROM StrEnum IMPORT (*--Type*) Exceptions; (*-----------------------*) TYPE String; TYPE StringSize = [ 1 .. 8100 ]; TYPE Position = StringSize; CONST NullString = String(NIL); (*-----------------------*) CONST ModuleID = 7; PROCEDURE StringError () : Exceptions (*-- out *); PROCEDURE GetHandler ( theError : Exceptions (*-- in *)) : HandlerProc (*-- out *); PROCEDURE SetHandler ( theError : Exceptions (*-- in *); theHandler : HandlerProc (*-- in *)); (*-----------------------*) PROCEDURE Create ( theSize : StringSize (*--in *); compareItem: CompareProc (*--in *)) : String (*--out *); PROCEDURE Destroy (VAR theString : String (*-- inout *)); PROCEDURE Clear (VAR theString : String (*-- inout *)); PROCEDURE Assign ( theString : String (*-- in *); VAR toString : String (*-- inout *)); PROCEDURE Prepend ( theString : String (*-- in *); VAR toString : String (*-- inout *)); PROCEDURE Append ( theString : String (*-- in *); VAR toString : String (*-- inout *)); PROCEDURE Insert ( theString : String (*-- in *); VAR toString : String (*-- inout *); theIndex : Position (*-- in *)); PROCEDURE Delete (VAR theString : String (*-- inout *); fromIndex : Position (*-- in *); toIndex : Position (*-- in *)); PROCEDURE Replace (VAR theString : String (*-- inout *); theIndex : Position (*-- in *); withString : String (*-- in *)); PROCEDURE SetItem (VAR theString : String (*-- inout *); theIndex : Position (*-- in *); theItem : Item (*-- in *)); PROCEDURE Construct (VAR theString : String (*--inout*); theSubstring: ARRAY OF Item (*--in *); compareItem : CompareProc (*--in *)); (*-----------------------*) PROCEDURE IsDefined ( theString : String (*-- in *)) : BOOLEAN (*-- out *); PROCEDURE IsEmpty ( theString : String (*-- in *)) : BOOLEAN (*-- out *); PROCEDURE SizeOf ( theString : String (*-- in *)) : CARDINAL (*-- out *); PROCEDURE LengthOf ( theString : String (*-- in *)) : CARDINAL (*-- out *); PROCEDURE Compare ( left : String (*-- in *); right : String (*-- in *)) : Relation (*-- out *); PROCEDURE IsEqual ( left : String (*-- in *); right : String (*-- in *)) : BOOLEAN (*-- out *); PROCEDURE ItemOf ( theString : String (*-- in *); theIndex : Position (*-- in *)) : Item (*-- out *); PROCEDURE SliceOf ( theString : String (*-- in *); fromIndex : Position (*-- in *); toIndex : Position (*-- in *); VAR theSlice : ARRAY OF Item (*-- out *)); PROCEDURE SubstringOf( theString : String (*-- in *); VAR toSubstring: ARRAY OF Item (*-- out *)); (*-----------------------*) PROCEDURE LoopOver ( theString : String (*-- in *); theProcess: LoopAccessProc (*-- in *)); PROCEDURE LoopChange ( theString : String (*-- in *); theProcess: LoopChangeProc (*-- in *)); PROCEDURE Traverse ( theString : String (*-- in *); theProcess: AccessProc (*-- in *)); PROCEDURE TravChange ( theString : String (*-- in *); theProcess: ChangeProc (*-- in *)); END StrSBUI.