``````{
Here's a little routine I wrote that checks to see if S1=S2, with wildcards (?
or *)...  IE, Wildcard('TURBO.PAS','T?R*.?AS') will return TRUE.

Let me know if you find it useful...

Released for SWAG...
}

Function Wildcard(S1,S2:String):Boolean;
Var STmp1 : String;
STmp2 : String;
SS1, SS2 : String;
I : Integer;
begin
STmp1:=Copy(S1,1,Pos('.',S1+'.'))+'????????';
If (Pos('.',S1)>1) then STmp2:=Copy(S1,Pos('.',S1)+1,3)+'???' else
STmp2:='???';  For I:=1 to 8 do If STmp1[I]='*' then For I:=I to 8 do
STmp1[I]:='?';  For I:=1 to 3 do If STmp2[I]='*' then For I:=I to 3 do
STmp2[I]:='?';  SS1:=STmp1+'.'+STmp2;
STmp1:=Copy(S2,1,Pos('.',S2+'.'))+'????????';
If (Pos('.',S2)>1) then STmp2:=Copy(S2,Pos('.',S2)+1,3)+'???' else
STmp2:='???';  For I:=1 to 8 do If STmp1[I]='*' then For I:=I to 8 do
STmp1[I]:='?';  For I:=1 to 3 do If STmp2[I]='*' then For I:=I to 3 do
STmp2[I]:='?';  SS2:=STmp1+'.'+STmp2; WildCard:=False;
For I:=1 to 12 do If (UpCase(SS1[I])<>UpCase(SS2[I])) and (SS2[I]<>'?') then
Exit;  WildCard:=True;
end;

--- GoldED 2.40
* Origin: Crazy Train BBS (604)383-2201  (1:340/88)
SEEN-BY: 340/1 49 60 67 88 211 396/1 3615/50 51
PATH: 340/88 1 3615/50

{SWAG=???.SWG,JORGEN OLSSON,Wild cards}
MSGID: 2:205/201@fidonet 94931c10
REPLY: 1:249/153.0 2ea83a7a
PID: GE 1.01+
Hello, John!

> I'm looking for some sort of function to return that:
> SOMEFILE.TXT = SOM*.TX?

> Function WildCompare(str1,st2: String): boolean;

Hope you'll find this one useful to you. Not very beautiful (this message
editor is obviously not made for writing pascal source :)), but it works.

---cut---

FUNCTION WildComp(wild,name:string):boolean;
BEGIN
WildComp:=FALSE;
if name = '' then exit;
CASE wild of
'*' : BEGIN
if name='.' then exit;
if length(wild)=1 then WildComp:=TRUE;
if (length(wild) > 1) and (wild='.') and (length(name) > 0)
then WildComp:=WildComp(copy(wild,3,length(wild)-2),
copy(name,pos('.',name)+1,length(name)-pos('.',name)));
END;

'?': BEGIN
if ord(wild)=1
then WildComp:=TRUE
else WildComp:=WildComp(copy(wild,2,length(wild)-1),
copy(name,2,length(name)-1));
END;

ELSE if name = wild
then if length(wild) > 1
then WildComp:=WildComp(copy(wild,2,length(wild)-1),
copy(name,2,length(name)-1))
else if (length(name)=1)
and (length(wild)=1)
then WildComp:=TRUE
else WildComp:=FALSE;
END;
END;

``````