home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE match( patterns : string255; {these patterns }
- delim : char; {separated by this delimiter}
- source : string255; {against this source string}
- var status : boolean ); {returning this flag }
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- LAST EDITED: 03/03/84 rep
-
- RETURNS:
- 'status' true if any of the patterns appear in the source string.
-
-
- DECLARE:
- TYPE string0 = string 0;
- string255 = string 255;
-
- CALL AS:
- match ( 'YES!yes!NO!no', '!', ans,flag );
- match ( $s, '!', ans,flag );
-
- Required:
- function vlength(); from ASL.REL
- procedure setlength(); Pascal/Z supplied extension.
- function index(); Pascal/Z supplied extension.
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- TYPE
- nodeptr = ^node;
- node = record
- data : STRING 18; { MATCH MAXIMUM OF 18 CHARACTERS PER ARGUMENT }
- next : nodeptr
- end;
- VAR
- i : integer;
- a,
- root: nodeptr;
- {$C-,F-,R-,S-,M-}
- {
- NAME MATCH
- ENTRY MATCH
- }
- { setlength - forces the length of string 's' to length 'n' }
- PROCEDURE setlength ( VAR s: string0; n: integer ); external;
-
- { vlength - returns length of ANY length string. super fast! }
- FUNCTION vlength ( VAR s: string0 ): integer; external;
-
- { index - returns the position of pattern in source else 0 }
- FUNCTION index ( source,pattern: string255 ): integer; external;
- {
- MATCH:
- }
- BEGIN
- root := NIL;
- append(patterns,delim);
- i := 0;
- WHILE i<vlength(patterns) DO
- BEGIN
- new(a); {allocate a new variable}
- a^.next := root; {ground it to the tree}
- root := a; {and run up the tree}
- setlength(a^.data,0); { data := ''; }
- i := i+1;
- WHILE NOT((i>vlength(patterns)) OR (patterns[i]=delim)) DO
- BEGIN
- append(a^.data,patterns[i]);
- i := i+1
- END
- END;
-
- a := root;
- status := false;
- WHILE (a<>NIL) AND (status=false) DO
- BEGIN
- status := (index(source,a^.data)<>0);
- a := a^.next
- END
- END{match};