home *** CD-ROM | disk | FTP | other *** search
- '----------------------------------------------------------
- ' PROCFIND.BAS
- ' Utility zum Herausfiltern von Funktionen und
- ' Subroutinen aus Turbo BASIC-Programmen
- '
- ' (c) 1988 by W.Rinke und PASCAL International
- '----------------------------------------------------------
-
- DEF FNUpString$(source$) 'Verwandlung eines Strings in Großbuchstaben
-
- ' Die Funktion UpString verwandelt einen String in
- ' Großbuchstaben. BASIC stellt die Funktion "ucase$"
- ' zur Verfügung, die einzelne Buchstaben umwandelt.
-
- LOCAL i%
- LOCAL dest$
- FOR i% = 1 TO LEN(source$)
- dest$ = dest$ + UCASE$(MID$(source$,i%,1))
- NEXT
- FNUpString$ = dest$
-
- END DEF
- '----------------------------------------------------------
- DEF FNEinrueck%(source$) 'Zählt die führenden Leerzeichen (Einrückung)
-
- ' Die Funktion Einrueck bestimmt die Anzahl der Blanks
- ' bis zum ersten Wort in der Zeile (Einrückung)
-
- LOCAL ch$ = ""
- LOCAL i% = 0
-
- DO 'Schleife, bis das erste Zeichen gefunden ist
- i% = i% + 1
- ch$ = MID$(source$,i%,1)
- LOOP UNTIL ch$ <> " " OR i% > LEN(source$)
-
- FNEinrueck% = i%
-
- END DEF
- '----------------------------------------------------------
- DEF FNGetKeyWord$(source$) 'Liest das erste Wort der Basic-Zeile
-
- ' Die Funktion GetKeyWord sucht das erste Wort der
- ' Programmzeile
-
- SHARED indent%
- LOCAL wort$
- LOCAL i%
- i% = indent% ' indent ist das erste Zeichen des
- ' ersten Wortes. Das Wort wird zei-
- ' chenweise gelesen. Wird ein " "
- ' gefunden, ist das Wort zu Ende.
- DO
- wort$ = wort$ + MID$(source$,i%,1)
- INCR i%
- LOOP UNTIL MID$(source$,i%,1) = " " OR i% > LEN(source$)
- FNGetKeyWord$ = wort$
-
- END DEF
- '----------------------------------------------------------
- SUB Init 'Bereitet den Bildschirm vor (Führungstext)
-
- COLOR 14,1,1
- CLS
- LOCATE 1,1
- PRINT CHR$(201);STRING$(78,205);CHR$(187);
- PRINT CHR$(186);STRING$(31,32);"P R O C F I N D ";
- PRINT STRING$(31,32);CHR$(186);
- PRINT CHR$(199);STRING$(78,196);CHR$(182);
- PRINT CHR$(186);" Input-Datei: ";STRING$(63,32);CHR$(186);
- PRINT CHR$(199);STRING$(78,196);CHR$(182);
- PRINT CHR$(186);" AUSGABE: [1] Bildschirm [2] Drucker";
- PRINT " [3] Datei ";CHR$(186);
- PRINT CHR$(200);STRING$(78,205);CHR$(188)
-
- END SUB
- '----------------------------------------------------------
- ' Hauptprogramm
- '----------------------------------------------------------
- CALL Init
- LOCATE 4,17
- INPUT filename$
- filename$ = FNUpString$(filename$)
- LOCATE 6,53
- INPUT auswahl%
-
- SELECT CASE auswahl%
- CASE < 1
- auswahl% = 1
- CASE => 3
- auswahl% = 3
- LOCATE 6,53
- INPUT "zur Ausgabe: ";outfile$
- outfile$ = FNUpString$(outfile$)
- END SELECT
- PRINT: PRINT
-
- OPEN filename$ FOR INPUT AS #1
- ' Datei wird zum Lesen geöffnet
- IF auswahl% = 3 THEN
- OPEN outfile$ FOR OUTPUT AS #2
- END IF
-
- LineCount% = 1 ' Zeilenzähler
- ProcCount% = 0 ' zählt die Prozeduren
- FuncCount% = 0 ' zählt die Funktionen
-
- WHILE NOT EOF(1)
- LINE INPUT# 1,eingang$
- ' Datei wird Zeile für Zeile gelesen
- INCR LineCount% ' LineCount% = Linecount% + 1
-
- indent% = FNEinrueck%(eingang$)
- KeyWord$ = FNGetKeyWord$(eingang$)
- IF KeyWord$ = "sub" OR FNUpString$(KeyWord$) = "SUB" THEN
- SELECT CASE auswahl%
- CASE = 1
- PRINT USING "###";LineCount%;
- PRINT ": ";FNUpString$(eingang$)
- CASE = 2
- LPRINT USING "###";LineCount%;
- LPRINT ": ";FNUpString$(eingang$)
- CASE = 3
- PRINT #2, USING "###";LineCount%;
- PRINT #2,": ";FNUpString$(eingang$)
- END SELECT
- INCR ProcCount% ' ProcCount% = ProcCount% + 1
- END IF
- IF KeyWord$ = "def" OR FNUpString$(KeyWord$) = "DEF" THEN
- SELECT CASE auswahl%
- CASE = 1
- PRINT USING "###";LineCount%;
- PRINT ": ";eingang$
- CASE = 2
- LPRINT USING "###";LineCount%;
- LPRINT ": ";eingang$
- CASE = 3
- PRINT #2, USING "###";LineCount%;
- PRINT #2, ": ";eingang$
- END SELECT
- INCR FuncCount%
- END IF
- WEND
- CLOSE 1
- SELECT CASE auswahl%
- CASE = 1
- LOCATE 20,20
- PRINT filename$;" untersucht."
- LOCATE 21,20
- PRINT "gefunden: ";LineCount%;" Zeilen gesamt"
- LOCATE 22,20
- PRINT " ";ProcCount%;" Prozedur(en)"
- LOCATE 23,20
- PRINT " ";FuncCount%;" Funktion(en)"
- CASE = 2
- LPRINT
- LPRINT filename$;" untersucht."
- LPRINT "gefunden: ";LineCount%;" Zeilen gesamt"
- LPRINT " ";ProcCount%;" Prozedur(en)"
- LPRINT " ";FuncCount%;" Funktion(en)"
- CASE = 3
- PRINT #2,
- PRINT #2, filename$;" untersucht."
- PRINT #2, "gefunden: ";LineCount%;" Zeilen gesamt"
- PRINT #2, " ";ProcCount%;" Prozedur(en)"
- PRINT #2, " ";FuncCount%;" Funktion(en)"
- CLOSE #2
- END SELECT
- END
- '----------------------------------------------------------
- ' Ende von PROCFIND.BAS