[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    Program wild_card;

    Var
       check:Boolean;

    Function Wild(flname,card:String):Boolean;
    {Returns True if the wildcard description in 'card' matches 'flname'
    according to Dos wildcard principles.  The 'card' String MUST have a period!
    Example: Wild('test.tat','t*.t?t' returns True}

    Var
       name,temp:String[12];
       c:Char;
       p,i,n,l:Byte;
       period:Boolean;

    begin
        wild:=True;
        {test For special Case first}
        if flname='*.*' then Exit;
        wild:=False;
        p:=pos('.',card);
        i:=pos('.',flname);
        if p > 0 then period:=True else Exit; {not a valid wildcard if no period}
        N:=1;
        Repeat
           if card[n]='*' then n:=p-1 else
            if (upCase(flname[n]) <> upCase(card[n])) then
             if card[n]<>'?' then Exit;
                    inc(n);
        Until n>=p;
        n:=p+1; {one position past the period of the wild card}
        l:=length(flname);
        inc(i); {one position past the period of the Filename}
        Repeat
        if n > length(card) then Exit;
        c:=upCase(card[n]);
             if c='*' then i:=l+1 {in order to end the loop}
              else
                 if (upCase(flname[i]) = c) or (c = '?') then
                    begin
                    inc(n);
                    inc(i);
                    end
                 else Exit;
        Until i > l;

        wild:=True;

    end;

    begin
      check:=False;
      check:=wild('TEST.Tat','T*.T?T'); {True}
      Writeln(check);
      check:=wild('TEST.Taq','T*.T?T');  {False}
      Writeln(check);
      check:=wild('12345678.pkt','*.pkt'); {True}
      Writeln(check);
      check:=wild('test.tat','T*.t?');  {False}
      Writeln(check);
      check:=wild('12345678.pkt','1234?678.*'); {True}
      Writeln(check);

    end.

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]