``````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.
``````