home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1993-10-23 | 11.7 KB | 228 lines |
- DEFINITION MODULE pSTRING;
-
- (*****************************************************************************)
- (* Allgemeine Stringfunktionen *)
- (* Es muss gelten: HIGH(str) < MAX(INTEGER) ! *)
- (* --------------------------------------------------------------------------*)
- (* 06-Jan-93, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- CONST EOS = 0C;
-
- TYPE
- StrRange = [0..30000]; (* bel. Obergrenze *)
- ArrayRange = [0..5000]; (* bel. Obergrenze *)
-
- StrPtr = POINTER TO ARRAY StrRange OF CHAR; (* nicht ohne Index deref. *)
- StrArray = POINTER TO ARRAY ArrayRange OF StrPtr; (* dito *)
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE SLEN ((* EIN/ -- *) REF s : ARRAY OF CHAR ): CARDINAL;
-
- (*---------------------------------------------------------------------------
- | Liefert die Laenge von <s> als Funktionswert. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE ASSIGN ((* EIN/ -- *) REF src : ARRAY OF CHAR;
- (* -- /AUS *) VAR dst : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | Zuweisungsoperation: <dst> := <src>. Falls <dst> nicht gross genug ist, |
- | um <src> aufzunehmen, wird der String gekuerzt. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE CONCAT ((* EIN/ -- *) s1 : ARRAY OF CHAR;
- (* EIN/ -- *) s2 : ARRAY OF CHAR;
- (* -- /AUS *) VAR dst : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | Weist <dst> die Konkatenation von <s1> und <s2> zu: <dst> := <s1> ++ <s2>.|
- | Falls <dst> nicht gross genug ist, wird das Ergebnis der Konkatenation |
- | gekuerzt. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE APPEND ((* EIN/ -- *) app : ARRAY OF CHAR;
- (* EIN/AUS *) VAR dst : ARRAY OF CHAR );
-
- PROCEDURE APPENDN ((* EIN/ -- *) len : CARDINAL;
- (* EIN/ -- *) app : ARRAY OF CHAR;
- (* EIN/AUS *) VAR dst : ARRAY OF CHAR );
-
- PROCEDURE APPENDCHR ((* EIN/ -- *) c : CHAR;
- (* EIN/AUS *) VAR dst : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | "APPEND()" haengt <app> an den alten Inhalt von <dst> an. |
- | "APPENDN()" haengt maximal <len> Zeichen von <app> an den alten Inhalt von|
- | <dst> an. |
- | "APPENDCHR" haengt das Zeichen <c> an den alten Inhalt von <dst> an. |
- | Falls <dst> nicht gross genug ist, wird entsprechend gekuerzt. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE COPY ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) len : CARDINAL;
- (* EIN/ -- *) src : ARRAY OF CHAR;
- (* -- /AUS *) VAR dst : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | Kopiert vom Index <from> an maximal <len> Zeichen aus <src> nach <dst>. |
- | Falls <from> ausserhalb von <src> liegt, wird <dst> zum leeren String. |
- | Falls <dst> nicht gross genug ist, wird entsprechend gekuerzt. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE INSERT ((* EIN/ -- *) at : CARDINAL;
- (* EIN/ -- *) ins : ARRAY OF CHAR;
- (* EIN/AUS *) VAR s : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | Fuegt <ins> in den String <s> ab dem Index <at> ein. Falls <s> nicht gross|
- | genug ist, wird entsprechend gekuerzt. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE DELETE ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) len : CARDINAL;
- (* EIN/AUS *) VAR s : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | Entfernt aus dem String <s> ab dem Index <from> maximal <len> Zeichen. |
- | Falls <from> ausserhalb von <s> liegt, passiert nichts. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE LOWER ((* EIN/AUS *) VAR s : ARRAY OF CHAR );
-
- PROCEDURE UPPER ((* EIN/AUS *) VAR s : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | "LOWER()" wandelt alle Grossbuchstaben in <s> in Kleinbuchstaben um. |
- | "UPPER()" wandelt alle Kleinbuchstaben in <s> in Grossbuchstaben um. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE EQUAL ((* EIN/ -- *) REF s1 : ARRAY OF CHAR;
- (* EIN/ -- *) REF s2 : ARRAY OF CHAR ): BOOLEAN;
-
- PROCEDURE EQUALN ((* EIN/ -- *) len : CARDINAL;
- (* EIN/ -- *) REF s1 : ARRAY OF CHAR;
- (* EIN/ -- *) REF s2 : ARRAY OF CHAR ): BOOLEAN;
-
- (*---------------------------------------------------------------------------
- | "EQUAL()" testet, ob die Strings <s1> und <s2> gleich sind. |
- | "EQUALN()" testet, ob die maximal <len> ersten Zeichen von <s1> und <s2> |
- | gleich sind. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE COMPARE ((* EIN/ -- *) REF s1 : ARRAY OF CHAR;
- (* EIN/ -- *) REF s2 : ARRAY OF CHAR ): INTEGER;
-
- PROCEDURE COMPAREN ((* EIN/ -- *) len : CARDINAL;
- (* EIN/ -- *) REF s1 : ARRAY OF CHAR;
- (* EIN/ -- *) REF s2 : ARRAY OF CHAR ): INTEGER;
-
- (*---------------------------------------------------------------------------
- | "COMPARE()" vergleicht die Strings <s1> und <s2> bzgl. ihrer ASCII-Ordnung|
- | Wenn <s1> ``groesser'' ist, ist der Funktionswert positiv, wenn <s1> |
- | ``kleiner'' ist, ist der Funktionswert negativ, wenn beide gleich sind, |
- | ist der Funktionswert Null. |
- | "COMPAREN()" vergleicht maximal die ersten <len> Zeichen. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE LPOS ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) REF pat : ARRAY OF CHAR;
- (* EIN/ -- *) REF s : ARRAY OF CHAR ): INTEGER;
-
- PROCEDURE RPOS ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) REF pat : ARRAY OF CHAR;
- (* EIN/ -- *) REF s : ARRAY OF CHAR ): INTEGER;
-
- PROCEDURE LPOSCHR ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) c : CHAR;
- (* EIN/ -- *) REF s : ARRAY OF CHAR ): INTEGER;
-
- PROCEDURE RPOSCHR ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) c : CHAR;
- (* EIN/ -- *) REF s : ARRAY OF CHAR ): INTEGER;
-
- PROCEDURE LPOSCHRSET ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) REF set : ARRAY OF CHAR;
- (* EIN/ -- *) REF str : ARRAY OF CHAR ): INTEGER;
-
- PROCEDURE RPOSCHRSET ((* EIN/ -- *) from : CARDINAL;
- (* EIN/ -- *) REF set : ARRAY OF CHAR;
- (* EIN/ -- *) REF str : ARRAY OF CHAR ): INTEGER;
-
- (*---------------------------------------------------------------------------
- | "LPOS()" sucht das erste Auftreten des Strings <pat> ab dem Index <from> |
- | im String <s>. Falls die Suche erfolgreich war, wird als Funktionswert der|
- | Index des ersten Zeichens von <pat> in <s> zurueckgegeben. Falls <pat> |
- | nicht gefunden wurde, wird als Funktionswert -1 zurueckgegeben. |
- | "RPOS()" sucht das LETZTE Auftreten des Strings <pat> in <s>, wobei <from>|
- | die oberste Grenze fuer den ersten Buchstaben von <pat> darstellt. |
- | Liegt <from> ausserhalb von <s>, wird vom Ende von <s> aus gesucht. |
- | "LPOSCHR()" und "RPOSCHR()" suchen auf die gleiche Weise nach dem Auftre- |
- | ten des Buchstabens <c> in <s>. |
- | "LPOSCHRSET()" und "RPOSCHRSET()" suchen nach dem Auftreten eines Buch- |
- | stabens aus der Menge <set> in <s>. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE TOKEN ((* EIN/ -- *) str : ARRAY OF CHAR;
- (* EIN/ -- *) stop : ARRAY OF CHAR;
- (* EIN/AUS *) VAR idx : CARDINAL;
- (* EIN/AUS *) VAR l1 : CARDINAL;
- (* EIN/AUS *) VAR l2 : CARDINAL;
- (* -- /AUS *) VAR token : ARRAY OF CHAR ): BOOLEAN;
-
- (*---------------------------------------------------------------------------
- | <str> wird in Token zerlegt, die jeweils durch eins der Zeichen aus <stop>|
- | begrenzt sind. Stehen zwei Trennzeichen hintereinander -- hoechstens durch|
- | Leerzeichen voneinander getrennt -- wird als Token ein Leerstring gelie- |
- | fert. In <token> steht das jeweilige Token ohne fuehrende und abschliess- |
- | ende Leerzeichen. Ist <str> vollstaendig durchsucht, wird als Funktions- |
- | wert FALSE zurueckgeliefert, sodass "TOKEN()" z.B. in einer WHILE-Schleife|
- | verwendet werden kann. In <idx>, <l1> und <l2> bewahrt die Prozedur Infor-|
- | mationen auf, die sie fuer den naechsten Aufruf benoetigt; diese sind fuer|
- | den Benutzer ohne Belang und duerfen nicht veraendert werden. Vor dem |
- | ERSTEN Aufruf der Prozedur MUSS jedoch <idx> den Startindex erhalten, ab |
- | dem mit der Suche in <str> begonnen werden soll; <l1> MUSS auf Null ge- |
- | setzt werden. Diese beiden Zuweisungen muessen genau einmal vor dem ersten|
- | Aufruf der Prozedur gemacht werden! |
- ---------------------------------------------------------------------------*)
-
-
-
-
- PROCEDURE LenC ((* EIN/ -- *) strC : StrPtr ): CARDINAL;
-
- PROCEDURE AssignM2ToC ((* EIN/ -- *) strM2 : ARRAY OF CHAR;
- (* EIN/ -- *) sizeC : StrRange;
- (* EIN/ -- *) strC : StrPtr );
-
- PROCEDURE AssignCToM2 ((* EIN/ -- *) strC : StrPtr;
- (* -- /AUS *) VAR strM2 : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | Diese Prozeduren dienen der Bearbeitung von Strings nach 'C'-Konvention, |
- | d.h. sie sind IMMER mit einem Nullbyte abgeschlossen und werden durch |
- | einen Zeiger auf ihren ersten Buchstaben repraesentiert. |
- | "LenC()" liefert als Funktionswert die Laenge eines 'C'-Strings. |
- | "AssignM2ToC()" und "AssignCToM2()" wandeln die MODULA- und C-Stringre- |
- | praesentationen ineinander um. Falls <strM2> bei "AssignCToM2()" nicht |
- | gross genug ist, wird entsprechend gekuerzt. <strC> muss bei "AssignM2ToC"|
- | auf einen Speicherbereich ausreichender Laenge zeigen. Es werden maximal |
- | <size> - 1 Zeichen kopiert. <size> bezeichnet den Platz in <strC>^ fuer |
- | String und Nullbyte. |
- ---------------------------------------------------------------------------*)
-
- END pSTRING.
-
-