Greet! I've looked to your's discussion from the FreeCOM parsing of wildcards and tender to your's to make newest function to generate "true names". It's function's written by me (in Pascal language, but I've bad knowing the C language and cannot be write this function's in the C language).
Here it's:
=========================================================
Program WildCardParse;
{(R) The file name wildcards parser/inquirer (implemented in one autonomous,
written on the pure Pascal language checking function). (C) FreeWolle. (W) Saturday, ninth july of two thousand fifth year.
*** Public domain. *** You can use this code as written by you, but this code
since this code is a public property and is not copyrighted by me for real
use for programming.}
Function InquiryWildCard(FileName,WildCard : String): Boolean;
Function UpperCaseLine(LowerCaseLine : String) : String;
Var
Index : Byte;
Begin
For Index:=1 To Length(LowerCaseLine) Do LowerCaseLine[Index]:=UpCase(LowerCaseLine[Index]);
UpperCaseLine:=LowerCaseLine;
end;
Function RepeatString(Symbol : Char; Count : ShortInt) : String;
Var
Index : Byte;
Result : String;
Begin
Result:='';
If Count<0 Then
Begin
RepeatString:='';
Exit;
end;
For Index:=1 To Count Do Result:=Result+Symbol;
RepeatString:=Result;
end;
Var
FileNameData : String;
FileExtensionData : String;
WildCardFileNameData : String;
WildCardFileExtensionData : String;
InquiryFileName : String;
InquiryFileExtension : String;
Index : Byte;
Begin
InquiryWildCard:=False;
FileName:=UpperCaseLine(FileName);
WildCard:=UpperCaseLine(WildCard);
If (FileName='') Or (Length(FileName)>12) Or (WildCard='') Or (Length(WildCard)>12) Or (Pos('\',FileName)>0) Or (Pos('/',FileName)>0) Or (Pos('\',WildCard)>0) Or (Pos('/',WildCard)>0) Then Exit;
If Pos('.',FileName)>0 Then
Begin
FileNameData:=Copy(FileName,1,Pos('.',FileName)-1);
FileExtensionData:=Copy(FileName,Pos('.',FileName)+1,3);
end Else
Begin
FileNameData:=FileName;
FileExtensionData:='';
end;
If Pos('.',WildCard)>0 Then
Begin
WildCardFileNameData:=Copy(WildCard,1,Pos('.',WildCard)-1);
WildCardFileExtensionData:=Copy(WildCard,Pos('.',WildCard)+1,3);
end Else
Begin
WildCardFileNameData:=WildCard;
WildCardFileExtensionData:='';
end;
If (Pos('.',FileNameData)>0) Or (Pos('.',FileExtensionData)>0) Or (Pos('.',WildCardFileNameData)>0) Or (Pos('.',WildCardFileExtensionData)>0) Or (FileNameData='') Or (WildCardFileNameData='') Then Exit;
While Pos('*',WildCardFileNameData)>0 Do WildCardFileNameData:=Copy(WildCardFileNameData,1,Pos('*',WildCardFileNameData)-1)+RepeatString('?',8-(Length(WildCardFileNameData)-1))+Copy(WildCardFileNameData,Pos('*',WildCardFileNameData)+1,8);
While Pos('*',WildCardFileExtensionData)>0 Do WildCardFileExtensionData:=Copy(WildCardFileExtensionData,1,Pos('*',WildCardFileExtensionData)-1)+RepeatString('?',3-(Length(WildCardFileExtensionData)-1))+Copy(WildCardFileExtensionData,Pos('*',
WildCardFileExtensionData)+1,3);
FileNameData:=FileNameData+RepeatString(#0,8-Length(FileNameData));
FileExtensionData:=FileExtensionData+RepeatString(#0,3-Length(FileExtensionData));
WildCardFileNameData:=WildCardFileNameData+RepeatString(#0,8-Length(WildCardFileNameData));
WildCardFileExtensionData:=WildCardFileExtensionData+RepeatString(#0,3-Length(WildCardFileExtensionData));
InquiryFileName:='';
InquiryFileExtension:='';
For Index:=1 To 8 Do If WildCardFileNameData[Index]='?' Then InquiryFileName:=InquiryFileName+FileNameData[Index] Else InquiryFileName:=InquiryFileName+WildCardFileNameData[Index];
For Index:=1 To 3 Do If WildCardFileExtensionData[Index]='?' Then InquiryFileExtension:=InquiryFileExtension+FileExtensionData[Index] Else InquiryFileExtension:=InquiryFileExtension+WildCardFileExtensionData[Index];
InquiryWildCard:=(InquiryFileName=FileNameData) And (InquiryFileExtension=FileExtensionData);
end;
{Written on 12.07.2005 by me.}
Function SubstitutionWildCard(FileName,WildCard : String): String;
Function UpperCaseLine(LowerCaseLine : String) : String;
Var
Index : Byte;
Begin
For Index:=1 To Length(LowerCaseLine) Do LowerCaseLine[Index]:=UpCase(LowerCaseLine[Index]);
UpperCaseLine:=LowerCaseLine;
end;
Function RepeatString(Symbol : Char; Count : ShortInt) : String;
Var
Index : Byte;
Result : String;
Begin
Result:='';
If Count<0 Then
Begin
RepeatString:='';
Exit;
end;
For Index:=1 To Count Do Result:=Result+Symbol;
RepeatString:=Result;
end;
Var
FileNameData : String;
FileExtensionData : String;
WildCardFileNameData : String;
WildCardFileExtensionData : String;
SubstitutionFileName : String;
SubstitutionFileExtension : String;
Index : Byte;
Begin
SubstitutionWildCard:='';
FileName:=UpperCaseLine(FileName);
WildCard:=UpperCaseLine(WildCard);
If (FileName='') Or (Length(FileName)>12) Or (WildCard='') Or (Length(WildCard)>12) Or (Pos('\',FileName)>0) Or (Pos('/',FileName)>0) Or (Pos('\',WildCard)>0) Or (Pos('/',WildCard)>0) Then Exit;
If Pos('.',FileName)>0 Then
Begin
FileNameData:=Copy(FileName,1,Pos('.',FileName)-1);
FileExtensionData:=Copy(FileName,Pos('.',FileName)+1,3);
end Else
Begin
FileNameData:=FileName;
FileExtensionData:='';
end;
If Pos('.',WildCard)>0 Then
Begin
WildCardFileNameData:=Copy(WildCard,1,Pos('.',WildCard)-1);
WildCardFileExtensionData:=Copy(WildCard,Pos('.',WildCard)+1,3);
end Else
Begin
WildCardFileNameData:=WildCard;
WildCardFileExtensionData:='';
end;
If (Pos('.',FileNameData)>0) Or (Pos('.',FileExtensionData)>0) Or (Pos('.',WildCardFileNameData)>0) Or (Pos('.',WildCardFileExtensionData)>0) Or (FileNameData='') Or (WildCardFileNameData='') Then Exit;
While Pos('*',WildCardFileNameData)>0 Do WildCardFileNameData:=Copy(WildCardFileNameData,1,Pos('*',WildCardFileNameData)-1)+RepeatString('?',8-(Length(WildCardFileNameData)-1))+Copy(WildCardFileNameData,Pos('*',WildCardFileNameData)+1,8);
While Pos('*',WildCardFileExtensionData)>0 Do WildCardFileExtensionData:=Copy(WildCardFileExtensionData,1,Pos('*',WildCardFileExtensionData)-1)+RepeatString('?',3-(Length(WildCardFileExtensionData)-1))+Copy(WildCardFileExtensionData,Pos('*',
WildCardFileExtensionData)+1,3);
FileNameData:=FileNameData+RepeatString(#0,8-Length(FileNameData));
FileExtensionData:=FileExtensionData+RepeatString(#0,3-
Length(FileExtensionData));
WildCardFileNameData:=WildCardFileNameData+RepeatString(#0,8-Length(WildCardFileNameData));
WildCardFileExtensionData:=WildCardFileExtensionData+RepeatString(#0,3-Length(WildCardFileExtensionData));
SubstitutionFileName:='';
SubstitutionFileExtension:='';
For Index:=1 To 8 Do If WildCardFileNameData[Index]='?' Then SubstitutionFileName:=SubstitutionFileName+FileNameData[Index] Else SubstitutionFileName:=SubstitutionFileName+WildCardFileNameData[Index];
For Index:=1 To 3 Do If WildCardFileExtensionData[Index]='?' Then SubstitutionFileExtension:=SubstitutionFileExtension+FileExtensionData[Index] Else SubstitutionFileExtension:=SubstitutionFileExtension+WildCardFileExtensionData[Index];
While SubstitutionFileName[Length(SubstitutionFileName)]=#0 Do Delete(SubstitutionFileName,Length(SubstitutionFileName),1);
While SubstitutionFileExtension[Length(SubstitutionFileExtension)]=#0 Do Delete(SubstitutionFileExtension,Length(SubstitutionFileExtension),1);
If SubstitutionFileExtension<>'' Then SubstitutionWildCard:=SubstitutionFileName+'.'+SubstitutionFileExtension Else SubstitutionWildCard:=SubstitutionFileName;
end;
Function ReplaceSubstitutionWildCard(FileName,InWildCard,OutWildCard : String): String;
Var
InWildCardSubstitutionName : String;
OutWildCardSubstitutionName : String;
Begin
InWildCardSubstitutionName:=SubstitutionWildCard(FileName,InWildCard);
ReplaceSubstitutionWildCard:=SubstitutionWildCard(InWildCardSubstitutionName,OutWildCard);
end;
Begin
WriteLn(InquiryWildCard('FileD707.Dat','F*7?7.?A*'));
WriteLn(InquiryWildCard('FileD707.Dat','F*7?7.D*?'));
WriteLn(InquiryWildCard('FileD707.Dat','F*7?7.??*'));
WriteLn(InquiryWildCard('FileD707.Dat','F*7?7.*'));
WriteLn(InquiryWildCard('FileD707.Dat','*.*'));
WriteLn(InquiryWildCard('FileD707.Dat','*???*.*'));
WriteLn(InquiryWildCard('FileD707.Dat','F*7?7.0*?'));
WriteLn(SubstitutionWildCard('FileD707.Dat','F*7?7.$*?'));
WriteLn(ReplaceSubstitutionWildCard('FileName.Ext','#*.*','*$???.&'));
end.
=========================================================
It's written in the QBasic:
=========================================================
REM $DYNAMIC
OPTION BASE 1
DECLARE FUNCTION InquiryWildCard% (FileName$,WildCard$)
DECLARE FUNCTION ReplaceSubstitutionWildCard$(FileName$,InWildCard$,OutWildCard$)
DECLARE FUNCTION SubstitutionWildCard$(FileName$,WildCard$)
CONST False%=0
CONST True%=NOT False%
FUNCTION InquiryWildCard%(FileName$,WildCard$)
DIM FileNameData$
DIM FileExtensionData$
DIM WildCardFileNameData$
DIM WildCardFileExtensionData$
DIM InquiryFileNameData$
DIM InquiryFileExtensionData$
DIM InLineIndex%
DIM DataLine$
InquiryWildCard%=False%
IF (UCASE$(FileName$)="")OR(LEN(UCASE$(FileName$))>12)OR(INSTR(UCASE$(FileName$),"/")>0)OR(INSTR(UCASE$(FileName$),"\")>0)OR(INSTR(UCASE$(FileName$),"*")>0)OR(INSTR(UCASE$(FileName$),"?")>0)OR(UCASE$(WildCard$)="")OR(LEN(UCASE$(WildCard$))>12)OR(INSTR(UCASE$(WildCard$),"/")>0)OR(INSTR(UCASE$(WildCard$),"\")>0) THEN EXIT FUNCTION
IF INSTR(UCASE$(FileName$),".") THEN
FileNameData$=MID$(UCASE$(FileName$),1,INSTR(UCASE$(FileName$),".")-1)
FileExtensionData$=MID$(UCASE$(FileName$),INSTR(UCASE$(FileName$),".")+1)
ELSE
FileNameData$=UCASE$(FileName$)
FileExtensionData$=""
END IF
IF INSTR(UCASE$(WildCard$),".") THEN
WildCardFileNameData$=MID$(UCASE$(WildCard$),1,INSTR(UCASE$(WildCard$),".")-1)
WildCardFileExtensionData$=MID$(UCASE$(WildCard$),INSTR(UCASE$(WildCard$),".")+1)
ELSE
WildCardFileNameData$=UCASE$(WildCard$)
WildCardFileExtensionData$=""
END IF
IF (FileNameData$="")OR(LEN(FileNameData$)>8)OR(INSTR(FileNameData$,".")>0)OR(LEN(FileExtensionData$)>3)OR(INSTR(FileExtensionData$,".")>0)OR(WildCardFileNameData$="")OR(LEN(WildCardFileNameData$)>8)OR(INSTR(WildCardFileNameData$,".")>0)OR(LEN(WildCardFileExtensionData$)>3)OR(INSTR(WildCardFileExtensionData$,".")>0) THEN EXIT FUNCTION
WHILE INSTR(WildCardFileNameData$,"*")
DataLine$=""
WHILE LEN(DataLine$)<(8-(LEN(WildCardFileNameData$)-1))
DataLine$=DataLine$+"?"
WEND
WildCardFileNameData$=MID$(WildCardFileNameData$,1,INSTR(WildCardFileNameData$,"*")-1)+DataLine$+MID$(WildCardFileNameData$,INSTR(WildCardFileNameData$,"*")+1)
WEND
WHILE INSTR(WildCardFileExtensionData$,"*")
DataLine$=""
WHILE LEN(DataLine$)<(3-(LEN(WildCardFileExtensionData$)-1))
DataLine$=DataLine$+"?"
WEND
WildCardFileExtensionData$=MID$(WildCardFileExtensionData$,1,INSTR(WildCardFileExtensionData$,"*")-1)+DataLine$+MID$(WildCardFileExtensionData$,INSTR(WildCardFileExtensionData$,"*")+1)
WEND
FileNameData$=FileNameData$+SPACE$(8-LEN(FileNameData$))
FileExtensionData$=FileExtensionData$+SPACE$(3-LEN(FileExtensionData$))
WildCardFileNameData$=WildCardFileNameData$+SPACE$(8-LEN(WildCardFileNameData$))
WildCardFileExtensionData$=WildCardFileExtensionData$+SPACE$(3-LEN(WildCardFileExtensionData$))
InquiryFileNameData$=""
InquiryFileExtensionData$=""
FOR InLineIndex%=1 TO 8
IF MID$(WildCardFileNameData$,InLineIndex%,1)="?" THEN InquiryFileNameData$=InquiryFileNameData$+MID$(FileNameData$,InLineIndex%,1) ELSE InquiryFileNameData$=InquiryFileNameData$+MID$(WildCardFileNameData$,InLineIndex%,1)
NEXT InLineIndex%
FOR InLineIndex%=1 TO 3
IF MID$(WildCardFileExtensionData$,InLineIndex%,1)="?" THEN InquiryFileExtensionData$=InquiryFileExtensionData$+MID$(FileExtensionData$,InLineIndex%,1) ELSE InquiryFileExtensionData$=InquiryFileExtensionData$+MID$(WildCardFileExtensionData$,InLineIndex%,1)
NEXT InLineIndex%
InquiryWildCard%=(FileNameData$=InquiryFileNameData$)AND(FileExtensionData$=InquiryFileExtensionData$)
END FUNCTION
FUNCTION ReplaceSubstitutionWildCard$(FileName$,InWildCard$,OutWildCard$)
ReplaceSubstitutionWildCard$=SubstitutionWildCard$(SubstitutionWildCard$(FileName$,InWildCard$),OutWildCard$)
END FUNCTION
FUNCTION SubstitutionWildCard$(FileName$,WildCard$)
DIM FileNameData$
DIM FileExtensionData$
DIM WildCardFileNameData$
DIM WildCardFileExtensionData$
DIM SubstitutionFileNameData$
DIM SubstitutionFileExtensionData$
DIM InLineIndex%
DIM DataLine$
SubstitutionWildCard$=""
IF (UCASE$(FileName$)="")OR(LEN(UCASE$(FileName$))>12)OR(INSTR(UCASE$(FileName$),"/")>0)OR(INSTR(UCASE$(FileName$),"\")>0)OR(INSTR(UCASE$(FileName$),"*")>0)OR(INSTR(UCASE$(FileName$),"?")>0)OR(UCASE$(WildCard$)="")OR(LEN(UCASE$(WildCard$))>12)OR(INSTR(UCASE$(WildCard$),"/")>0)OR(INSTR(UCASE$(WildCard$),"\")>0) THEN EXIT FUNCTION
IF INSTR(UCASE$(FileName$),".") THEN
FileNameData$=MID$(UCASE$(FileName$),1,INSTR(UCASE$(FileName$),".")-1)
FileExtensionData$=MID$(UCASE$(FileName$),INSTR(UCASE$(FileName$),".")+1)
ELSE
FileNameData$=UCASE$(FileName$)
FileExtensionData$=""
END IF
IF INSTR(UCASE$(WildCard$),".") THEN
WildCardFileNameData$=MID$(UCASE$(WildCard$),1,INSTR(UCASE$(WildCard$),".")-1)
WildCardFileExtensionData$=MID$(UCASE$(WildCard$),INSTR(UCASE$(WildCard$),".")+1)
ELSE
WildCardFileNameData$=UCASE$(WildCard$)
WildCardFileExtensionData$=""
END IF
IF (FileNameData$="")OR(LEN(FileNameData$)>8)OR(INSTR(FileNameData$,".")>0)OR(LEN(FileExtensionData$)>3)OR(INSTR(FileExtensionData$,".")>0)OR(WildCardFileNameData$="")OR(LEN(WildCardFileNameData$)>8)OR(INSTR(WildCardFileNameData$,".")>0)OR(LEN(WildCardFileExtensionData$)>3)OR(INSTR(WildCardFileExtensionData$,".")>0) THEN EXIT FUNCTION
WHILE INSTR(WildCardFileNameData$,"*")
DataLine$=""
WHILE LEN(DataLine$)<(8-(LEN(WildCardFileNameData$)-1))
DataLine$=DataLine$+"?"
WEND
WildCardFileNameData$=MID$(WildCardFileNameData$,1,INSTR(WildCardFileNameData$,"*")-1)+DataLine$+MID$(WildCardFileNameData$,INSTR(WildCardFileNameData$,"*")+1)
WEND
WHILE INSTR(WildCardFileExtensionData$,"*")
DataLine$=""
WHILE LEN(DataLine$)<(3-(LEN(WildCardFileExtensionData$)-1))
DataLine$=DataLine$+"?"
WEND
WildCardFileExtensionData$=MID$(WildCardFileExtensionData$,1,INSTR(WildCardFileExtensionData$,"*")-1)+DataLine$+MID$(WildCardFileExtensionData$,INSTR(WildCardFileExtensionData$,"*")+1)
WEND
FileNameData$=FileNameData$+SPACE$(8-LEN(FileNameData$))
FileExtensionData$=FileExtensionData$+SPACE$(3-LEN(FileExtensionData$))
WildCardFileNameData$=WildCardFileNameData$+SPACE$(8-LEN(WildCardFileNameData$))
WildCardFileExtensionData$=WildCardFileExtensionData$+SPACE$(3-LEN(WildCardFileExtensionData$))
SubstitutionFileNameData$=""
SubstitutionFileExtensionData$=""
FOR InLineIndex%=1 TO 8
IF MID$(WildCardFileNameData$,InLineIndex%,1)="?" THEN SubstitutionFileNameData$=SubstitutionFileNameData$+MID$(FileNameData$,InLineIndex%,1) ELSE SubstitutionFileNameData$=SubstitutionFileNameData$+MID$(WildCardFileNameData$,InLineIndex%,1)
NEXT InLineIndex%
FOR InLineIndex%=1 TO 3
IF MID$(WildCardFileExtensionData$,InLineIndex%,1)="?" THEN SubstitutionFileExtensionData$=SubstitutionFileExtensionData$+MID$(FileExtensionData$,InLineIndex%,1) ELSE SubstitutionFileExtensionData$=SubstitutionFileExtensionData$+MID$(WildCardFileExtensionData$,InLineIndex%,1)
NEXT InLineIndex%
IF RTRIM$(SubstitutionFileExtensionData$)<>"" THEN SubstitutionWildCard$=RTRIM$(SubstitutionFileNameData$)+"."+RTRIM$(SubstitutionFileExtensionData$) ELSE SubstitutionWildCard$=RTRIM$(SubstitutionFileNameData$)
END FUNCTION
=========================================================

_______________________________________________________________
ICQ - You get the message, anywhere!
Get it @ http://www.icq.com


 

Reply via email to