home *** CD-ROM | disk | FTP | other *** search
- (* ====================================================== *)
- (* APISEARCH.PAS *)
- (* ------------------------------------------------------ *)
- (* WINDOWS - API-SEARCH 1.1 *)
- (* (C) 1992 eurologic, innovative Software GmbH *)
- (* freigegeben fⁿr DOS toolbox 2'92 *)
- (* Autor: Uwe Chalas *)
- (* Compiler: Turbo Pascal fⁿr Windows V. 1.0 *)
- (* ====================================================== *)
- {$A+,B-,D+,F-,G-,I+,L+,N-,R-,S+,V+,W+,X+}
- {$M 8192,8192}
-
- PROGRAM APISearch;
- USES
- WinDos, WObjects, WinTypes, WinProcs,
- StdWnds, StdDlgs,
- BWCC, Strings;
-
- {$R APISEARC.RES}
-
- CONST
- ID_Start = 200;
- ID_Ende = 201;
- ID_About = 202;
- ID_Search = 211;
- ID_Found = 212;
- ID_CheckAPI = 213;
- ID_CheckType = 214;
- ID_CheckWObj = 216;
- ID_Count = 215;
-
- TypeFilename = 'TYPES.DAT';
- APIFilename = 'API.DAT';
- WObjFileName = 'WObject.Dat';
- HelpFile = 'TPW.HLP';
-
- TYPE
- tApiApp = OBJECT(tApplication)
- PROCEDURE InitMainWindow; VIRTUAL;
- END;
-
- pApiSearchWindow = ^tApiSearchWindow;
- tApiSearchWindow = OBJECT(tDlgWindow)
- FoundBox : pListbox;
- Search : pEdit;
- ApiCheck : pCheckBox;
- TypesCheck : pCheckBox;
- WObjCheck : pCheckBox;
- CountStat : pStatic;
- Count : Word;
- BreakFlag : BOOLEAN;
- Breakok : BOOLEAN;
- CONSTRUCTOR Init(AParent: pWindowsObject; ATitle:pChar);
- PROCEDURE SetupWindow; VIRTUAL;
- FUNCTION GetClassName: pChar; VIRTUAL;
- PROCEDURE GetWindowClass(VAR AWndClass: tWndClass);
- VIRTUAL;
- PROCEDURE DefWndProc(VAR Msg: tMessage); VIRTUAL;
- PROCEDURE Start;
- PROCEDURE Quit(VAR Msg: tMessage);
- VIRTUAL ID_First + ID_Ende;
- PROCEDURE About(VAR Msg: tMessage);
- VIRTUAL ID_First + ID_About;
- PROCEDURE SearchFile(Filename: STRING);
- PROCEDURE ShowHelp;
- FUNCTION CanClose: BOOLEAN; VIRTUAL;
- PROCEDURE WMCommand(VAR Message: tMessage);
- VIRTUAL WM_First + wm_Command;
- END;
-
-
- FUNCTION RMatch(VAR S, P: STRING;
- i, j: BYTE): BOOLEAN; ASSEMBLER;
- (* ------------------------------------------------------ *)
- (* Vergleich einschl. Joker '*' und Platzhalter '?' *)
- (* ------------------------------------------------------ *)
- ASM
- PUSH DS
- MOV CH, 1
- LDS SI, S
- LES DI, P
- CMP BYTE Ptr ES:[DI], 0
- JE @out
- @Repeat:
- MOV DL, i
- MOV CL, j
- CMP DL, DS:[SI]
- JBE @weiter1
- CMP CL, ES:[DI]
- JA @out
- @weiter1:
- CMP CL, ES:[DI]
- JBE @weiter2
- XOR CH, CH
- JMP @out
- @weiter2:
- XOR BH, BH
- MOV BL, CL
- MOV AL, ES:[DI+BX]
- CMP AL, '*'
- JNE @StarOut
- MOV DH, DL
- CMP CL, ES:[DI]
- JE @out
- @repeat1:
- XOR AH, AH
- PUSH DX
- PUSH DS
- PUSH SI
- PUSH ES
- PUSH DI
- MOV AL, DH
- INC AL
- PUSH AX
- MOV AL, j
- INC AL
- PUSH AX
- CALL RMatch
- POP DX
- INC DH
- CMP AL, 0
- JNE @Endloop (* RMatch = TRUE? - Raus hier *)
- CMP DH, DS:[SI] (* k > Length(s)? - Raus hier *)
- JBE @Repeat1
- @EndLoop:
- JMP @out
- @StarOut:
- XOR BH, BH
- MOV BL, j
- MOV AH, ES:[DI + BX]
- CMP AH, '?'
- JE @weiter3
- MOV BL, i
- MOV AL, DS:[SI + BX]
- CMP AH, 'Z'
- JA @weiter5
- CMP AH, 'A'
- JB @UEnde
- OR AH, 32
- JMP @UEnde
- @weiter5:
- CMP AH, 'ⁿ'
- JB @UEnde
- CMP AH, '▄'
- JNE @Umlaut1
- MOV AH, 'ⁿ'
- JMP @UEnde
- @Umlaut1:
- CMP AH, '─'
- JNE @Umlaut2
- MOV AH, 'Σ'
- JMP @UEnde
- @Umlaut2:
- CMP AH, '╓'
- JNE @UEnde
- MOV AH, '÷'
- @UEnde:
- CMP AL, 'Z'
- JA @weiter51
- CMP AL, 'A'
- JB @UEnde1
- OR AL, 32
- JMP @UEnde1
- @weiter51:
- CMP AL, 'ⁿ'
- JB @UEnde1
- CMP AL, '▄'
- JNE @Umlaut11
- MOV AL, 'ⁿ'
- JMP @UEnde1
- @Umlaut11:
- CMP AL, '─'
- JNE @Umlaut21
- MOV AL, 'Σ'
- JMP @UEnde1
- @Umlaut21:
- CMP AL, '╓'
- JNE @UEnde1
- MOV AL, '÷'
- @UEnde1:
- CMP AH, AL
- JE @weiter3
- XOR CH, CH
- JMP @out
- @weiter3:
- INC i
- INC j
- JMP @Repeat
- @out:
- MOV AL, CH
- POP DS
- END;
-
- FUNCTION Trim(Str: STRING): STRING; ASSEMBLER;
- (*------------------------------------------------------- *)
- (* Entfernen der fⁿhrenden und nachgestellten Leerzeichen *)
- (*------------------------------------------------------- *)
- ASM
- PUSH DS
- CLD
- XOR CX, CX
- LES DI, @Result
- MOV ES:[DI], CX
- MOV BX, DI
- LDS SI, Str
- LODSB
- CMP AL, 0
- JZ @Exit
- MOV CL, AL
- @DoLoop:
- LODSB
- CMP AL, ' '
- JNE @DoMove
- LOOP @DoLoop
- @DoMove:
- CMP CL, 0
- JZ @Exit
- DEC SI
- MOV AL, CL
- MOV DL, CL
- STOSB
- REP MOVSB
- STD
- DEC DI
- MOV CL, DL
- MOV AL, ' '
- REPE SCASB
- INC CL
- MOV ES:[BX], CL
- CLD
- @Exit:
- POP DS
- END;
-
- FUNCTION UpStr(Str: STRING): STRING; ASSEMBLER;
- (* ------------------------------------------------------ *)
- (* Konvertiert den String in Gro▀buchstaben *)
- (* ------------------------------------------------------ *)
- ASM
- PUSH DS
- LDS SI,Str
- LES DI,@Result
- CLD
- LODSB
- STOSB
- MOV CL,AL
- XOR CH,CH
- JCXZ @UpDone
- @DoLoop:
- LODSB
- CMP AL,'a'
- JB @IsUp
- CMP AL,'{'
- JB @IsLo
- CMP AL,'Σ'
- JNZ @Up2
- MOV AL,'─'
- JMP @IsUp
- @Up2:
- CMP AL,'÷'
- JNZ @Up3
- MOV AL,'╓'
- JMP @IsUp
- @Up3:
- CMP AL,'ⁿ'
- JNZ @IsUp
- MOV AL,'▄'
- JMP @IsUp
- @IsLo:
- AND AL,223
- @IsUp:
- STOSB
- LOOP @DoLoop
- @UpDone:
- POP DS
- END;
-
-
- CONSTRUCTOR tApiSearchWindow.Init(AParent: pWindowsObject;
- ATitle: pChar);
- (* ------------------------------------------------------ *)
- (* Implementierung des Objects tApiSearchWindow *)
- (* ------------------------------------------------------ *)
- BEGIN
- tDlgWindow.Init(AParent, ATitle);
- New(FoundBox, InitResource(@self, ID_Found));
- New(Search, InitResource(@self, ID_Search, 50));
- New(APICheck, InitResource(@self, ID_CheckAPI));
- New(TypesCheck, InitResource(@self, ID_CheckType));
- New(WObjCheck, InitResource(@self, ID_CheckWObj));
- New(CountStat, InitResource(@self, ID_Count, 4));
- BreakFlag := FALSE;
- BreakOk := tRUE;
- END;
-
- PROCEDURE tApiSearchWindow.SetupWindow;
- BEGIN
- tDlgWindow.SetupWindow;
- APICheck^.Setcheck(1);
- END;
-
- FUNCTION tApiSearchWindow.GetClassName: pChar;
- BEGIN
- GetClassName := 'BorDlgWin';
- END;
-
- PROCEDURE tApiSearchWindow.GetWindowClass(
- VAR AWndClass: tWndClass);
- BEGIN
- tDlgWindow.GetWindowClass(AWndClass);
- AWndClass.HIcon := LoadIcon(HInstance, 'MyIcon');
- END;
-
- PROCEDURE tApiSearchWindow.DefWndProc(VAR Msg: tMessage);
- BEGIN
- WITH Msg DO
- Result := BWCCDefDlgProc(0, Message, wParam, lParam);
- END;
-
- PROCEDURE tApiSearchWindow.SearchFile(Filename: STRING);
- VAR
- F : Text;
- S : STRING;
- Se : STRING;
- msg : tMsg;
- BEGIN
- BreakOk := FALSE;
- Search^.GetText(@SE[1], 255);
- IF StrLen(@Se[1]) < 2 THEN Exit;
- Se[0] := Char(StrLen(@se[1]));
- Assign(F, FileName);
- Reset(f);
- IF IOResult <> 0 THEN BEGIN
- S := Filename + ' nicht gefunden!' + #0;
- BWCCMessageBox(HWindow, @s[1], 'Fehler', mb_IconStop);
- Exit;
- END;
- IF SE[1] <> '*' THEN SE := '*'+SE;
- IF SE[Length(Se)] <> '*' THEN SE := SE + '*';
- WHILE NOT EoF(f) AND NOT BreakFlag DO BEGIN
- ReadLn(F, S);
- S := #32 + S;
- IF RMatch(S, SE, 1, 1) THEN BEGIN
- IF PeekMessage(Msg, 0, 0, 0, pm_Remove) THEN
- DispatchMessage(Msg);
- S := S + #0;
- FoundBox^.AddString(@s[1]);
- Inc(Count);
- Str(Count, S);
- IF PeekMessage(Msg, 0, 0, 0, pm_Remove) THEN
- DispatchMessage(Msg);
- S := S + #0;
- CountStat^.SetText(@s[1]);
- S := '';
- END;
- END;
- Close(f);
- BreakOK := TRUE;
- END;
-
- PROCEDURE tApiSearchWindow.Start;
- VAR
- OldCursor : WORD;
- BEGIN
- OldCursor := SetClassWord(HWindow, gcw_hCursor,
- LoadCursor(0, idc_Wait));
- BreakFlag := FALSE;
- EnableWindow(GetDlgItem(HWindow,ID_Start), FALSE);
- FoundBox^.ClearList;
- Count := 0;
- CountStat^.SetText('0');
-
- IF APICheck^.Getcheck <> 0 THEN SearchFile(APIFilename);
- IF TypesCheck^.Getcheck <> 0 THEN
- SearchFile(TypeFilename);
- IF WObjCheck^.GetCheck <> 0 THEN SearchFile(WObjFileName);
-
- EnableWindow(GetDlgItem(HWindow, ID_Start), TRUE);
- BreakOk := TRUE;
- SetFocus(FoundBox^.HWindow);
- FoundBox^.SetSelIndex(0);
- SetClassWord(HWindow, gcw_hCursor, OldCursor);
- END;
-
- PROCEDURE tApiSearchWindow.Quit(VAR Msg: tMessage);
- BEGIN
- IF CanClose THEN PostQuitMessage(0);
- END;
-
- PROCEDURE TApiSearchWindow.About(VAR Msg: tMessage);
- BEGIN
- Application^.ExecDialog(New(PDialog,
- Init(@Self, 'About')));
- END;
-
- FUNCTION tApiSearchWindow.CanClose: BOOLEAN;
- BEGIN
- BreakFlag := TRUE;
- CanClose := BreakOK;
- END;
-
- PROCEDURE tApiSearchWindow.ShowHelp;
- VAR
- S : STRING;
- i : WORD;
- BEGIN
- FoundBox^.GetSelString(@S[1], 255);
- S[0] := Char(StrLen(@s[1]));
- S := Trim(s);
- IF (POS('FUNCTION', UpStr(S)) <> 0) THEN BEGIN
- Delete(S, 1, Pos(#32, s));
- IF Pos('(', s) <> 0 THEN
- S := Copy(S, 1, Pos('(', s) - 1)
- ELSE
- S := Copy(S, 1, Pos(':', s) - 1)
- END ELSE IF (POS('PROCEDURE',UpStr(S)) <> 0) THEN BEGIN
- Delete(S, 1, Pos(#32, s));
- IF Pos('(', s) <> 0 THEN
- S := Copy(S, 1, Pos('(', s) - 1)
- ELSE
- S := Copy(S, 1, Pos(';', s) - 1)
- END ELSE BEGIN
- IF Pos('_', S) > 0 THEN BEGIN
- i := Pos('_', S);
- WHILE (I > 0) AND (s[i] <> #32) DO Dec(i);
- S := Copy(S, I + 1, Pos('_', S) - i) + 'xxxx';
- END ELSE S := Trim(Copy(S, 1, Pos(#32, s)));
- END;
- S := S + #0;
- WinHelp(HWindow, HelpFile, Help_Key, LongInt(@s[1]));
- END;
-
- PROCEDURE tApiSearchWindow.wmCommand(VAR Message: tMessage);
- BEGIN
- IF Message.WParam = ID_Start THEN
- IF GetFocus <> FoundBox^.HWindow THEN Start
- ELSE ShowHelp;
- tDlgWindow.WMCommand(Message);
- IF Message.lParamHi = cbn_DblClk THEN ShowHelp;
- END;
-
- PROCEDURE tApiApp.InitMainWindow;
- (* ------------------------------------------------------ *)
- (* Applikation initialisieren *)
- (* ------------------------------------------------------ *)
- BEGIN
- MainWindow := New(PApiSearchWindow,
- Init(NIL, 'APISEARCH'));
- END;
-
- VAR
- ApiApp : tApiApp;
- LibHandle : tHandle;
-
- BEGIN
- LibHandle := LoadLibrary('WorkLib2.dll');
- ApiApp.Init('');
- ApiApp.Run;
- ApiApp.Done;
- FreeLibrary(LibHandle);
- END.
-
- (* ====================================================== *)
- (* Ende von APISEARCH.PAS *)
- (* ====================================================== *)
-