home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol12n08.zip / MATCH.ZIP / MATCH.PAS < prev    next >
Pascal/Delphi Source File  |  1992-11-27  |  1KB  |  72 lines

  1. {$S-,B-,D-,L-}
  2. Library Match;
  3. {$IFNDEF Windows} ERROR: Must compile for _Windows_ target
  4. {$ENDIF}
  5. USES Strings;
  6.  
  7. FUNCTION Matches(S0, S1 : pChar) : Boolean; export;
  8. CONST
  9.   asterisk = '*';
  10.   QMark    = '?';
  11.   Null     = #0;
  12. VAR
  13.   Matching : boolean;
  14.   Done     : boolean;
  15.   Len      : LongInt;
  16.  
  17. BEGIN
  18.   Matching := true;
  19.   Done := (S0^=null) AND (S1^=null);
  20.  
  21.   WHILE NOT Done AND Matching DO
  22.     BEGIN
  23.       CASE S0^ OF
  24.         QMark : BEGIN
  25.           Matching := S1^<>null;
  26.           IF Matching THEN
  27.             BEGIN
  28.               Inc(S0);
  29.               Inc(S1)
  30.             END;
  31.         END;
  32.  
  33.         asterisk: BEGIN
  34.           REPEAT Inc(S0)
  35.           UNTIL S0^<>asterisk;
  36.  
  37.           Len := StrLen(S1);
  38.           Inc(S1,Len);
  39.           Matching := Matches(S0,S1);
  40.           WHILE (Len>=0) AND NOT Matching DO
  41.             BEGIN
  42.               Dec(S1);
  43.               Dec(Len);
  44.               Matching := Matches(S0,S1)
  45.             END;
  46.           IF Matching THEN
  47.             BEGIN
  48.               S0 := StrEnd(S0);
  49.               S1 := StrEnd(S1)
  50.             END;
  51.          END;
  52.  
  53.         ELSE BEGIN
  54.           Matching := S0^=S1^;
  55.           IF Matching THEN
  56.             BEGIN
  57.               Inc(S0);
  58.               Inc(S1)
  59.             END;
  60.         END;
  61.      END;
  62.  
  63.      Done := (S0^=null) and (S1^=null)
  64.    END;
  65.  
  66.   Matches := Matching
  67. END;
  68.  
  69. exports Matches index 1;
  70.  
  71. BEGIN
  72. END.