home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 08_09 / procfind.bas < prev    next >
Encoding:
BASIC Source File  |  1988-05-11  |  5.0 KB  |  172 lines

  1. '----------------------------------------------------------
  2. '                   PROCFIND.BAS
  3. '     Utility zum Herausfiltern von Funktionen und
  4. '        Subroutinen aus Turbo BASIC-Programmen
  5. '
  6. '     (c) 1988 by W.Rinke und PASCAL International
  7. '----------------------------------------------------------
  8.  
  9. DEF FNUpString$(source$)     'Verwandlung eines Strings in Großbuchstaben
  10.  
  11. ' Die Funktion UpString verwandelt einen String in
  12. ' Großbuchstaben. BASIC stellt die Funktion "ucase$"
  13. ' zur Verfügung, die einzelne Buchstaben umwandelt.
  14.  
  15. LOCAL i%
  16. LOCAL dest$
  17. FOR i% = 1 TO LEN(source$)
  18.   dest$ = dest$ + UCASE$(MID$(source$,i%,1))
  19. NEXT
  20. FNUpString$ = dest$
  21.  
  22. END DEF
  23. '----------------------------------------------------------
  24. DEF FNEinrueck%(source$)     'Zählt die führenden Leerzeichen (Einrückung)
  25.  
  26. ' Die Funktion Einrueck bestimmt die Anzahl der Blanks
  27. ' bis zum ersten Wort in der Zeile (Einrückung)
  28.  
  29. LOCAL ch$ = ""
  30. LOCAL i% = 0
  31.  
  32. DO        'Schleife, bis das erste Zeichen gefunden ist
  33.   i% = i% + 1
  34.   ch$ = MID$(source$,i%,1)
  35. LOOP UNTIL ch$ <> " " OR i% > LEN(source$)
  36.  
  37. FNEinrueck% = i%
  38.  
  39. END DEF
  40. '----------------------------------------------------------
  41. DEF FNGetKeyWord$(source$)   'Liest das erste Wort der Basic-Zeile
  42.  
  43. ' Die Funktion GetKeyWord sucht das erste Wort der
  44. ' Programmzeile
  45.  
  46. SHARED indent%
  47. LOCAL wort$
  48. LOCAL i%
  49. i% = indent%       ' indent ist das erste Zeichen des
  50.                    ' ersten Wortes. Das Wort wird zei-
  51.                    ' chenweise gelesen. Wird ein " "
  52.                    ' gefunden, ist das Wort zu Ende.
  53. DO
  54.   wort$ = wort$ + MID$(source$,i%,1)
  55.   INCR i%
  56. LOOP UNTIL MID$(source$,i%,1) = " " OR i% > LEN(source$)
  57. FNGetKeyWord$ = wort$
  58.  
  59. END DEF
  60. '----------------------------------------------------------
  61. SUB Init                     'Bereitet den Bildschirm vor (Führungstext)
  62.  
  63. COLOR 14,1,1
  64. CLS
  65. LOCATE 1,1
  66. PRINT CHR$(201);STRING$(78,205);CHR$(187);
  67. PRINT CHR$(186);STRING$(31,32);"P R O C F I N D ";
  68. PRINT STRING$(31,32);CHR$(186);
  69. PRINT CHR$(199);STRING$(78,196);CHR$(182);
  70. PRINT CHR$(186);"  Input-Datei: ";STRING$(63,32);CHR$(186);
  71. PRINT CHR$(199);STRING$(78,196);CHR$(182);
  72. PRINT CHR$(186);"  AUSGABE: [1] Bildschirm   [2] Drucker";
  73. PRINT "  [3] Datei                            ";CHR$(186);
  74. PRINT CHR$(200);STRING$(78,205);CHR$(188)
  75.  
  76. END SUB
  77. '----------------------------------------------------------
  78. ' Hauptprogramm
  79. '----------------------------------------------------------
  80. CALL Init
  81. LOCATE 4,17
  82. INPUT filename$
  83. filename$ = FNUpString$(filename$)
  84. LOCATE 6,53
  85. INPUT auswahl%
  86.  
  87. SELECT CASE auswahl%
  88.   CASE < 1
  89.     auswahl% = 1
  90.   CASE => 3
  91.     auswahl% = 3
  92.     LOCATE 6,53
  93.     INPUT "zur Ausgabe: ";outfile$
  94.     outfile$ = FNUpString$(outfile$)
  95. END SELECT
  96. PRINT: PRINT
  97.  
  98. OPEN filename$ FOR INPUT AS #1
  99.                         ' Datei wird zum Lesen geöffnet
  100. IF auswahl% = 3 THEN
  101.   OPEN outfile$ FOR OUTPUT AS #2
  102. END IF
  103.  
  104. LineCount% = 1          ' Zeilenzähler
  105. ProcCount% = 0          ' zählt die Prozeduren
  106. FuncCount% = 0          ' zählt die Funktionen
  107.  
  108. WHILE NOT EOF(1)
  109.   LINE INPUT# 1,eingang$
  110.                     ' Datei wird Zeile für Zeile gelesen
  111.   INCR LineCount%          ' LineCount% = Linecount% + 1
  112.  
  113.   indent% = FNEinrueck%(eingang$)
  114.   KeyWord$ = FNGetKeyWord$(eingang$)
  115.   IF KeyWord$ = "sub" OR FNUpString$(KeyWord$) = "SUB" THEN
  116.     SELECT CASE auswahl%
  117.       CASE = 1
  118.         PRINT USING "###";LineCount%;
  119.         PRINT ": ";FNUpString$(eingang$)
  120.       CASE = 2
  121.         LPRINT USING "###";LineCount%;
  122.         LPRINT ": ";FNUpString$(eingang$)
  123.       CASE = 3
  124.         PRINT #2, USING "###";LineCount%;
  125.         PRINT #2,": ";FNUpString$(eingang$)
  126.     END SELECT
  127.     INCR ProcCount%        ' ProcCount% = ProcCount% + 1
  128.   END IF
  129.   IF KeyWord$ = "def" OR FNUpString$(KeyWord$) = "DEF" THEN
  130.     SELECT CASE auswahl%
  131.       CASE = 1
  132.         PRINT USING "###";LineCount%;
  133.         PRINT ": ";eingang$
  134.       CASE = 2
  135.         LPRINT USING "###";LineCount%;
  136.         LPRINT ": ";eingang$
  137.       CASE = 3
  138.         PRINT #2, USING "###";LineCount%;
  139.         PRINT #2, ": ";eingang$
  140.     END SELECT
  141.     INCR FuncCount%
  142.   END IF
  143. WEND
  144. CLOSE 1
  145. SELECT CASE auswahl%
  146.   CASE = 1
  147.     LOCATE 20,20
  148.     PRINT filename$;" untersucht."
  149.     LOCATE 21,20
  150.     PRINT "gefunden: ";LineCount%;" Zeilen gesamt"
  151.     LOCATE 22,20
  152.     PRINT "          ";ProcCount%;" Prozedur(en)"
  153.     LOCATE 23,20
  154.     PRINT "          ";FuncCount%;" Funktion(en)"
  155.   CASE = 2
  156.     LPRINT
  157.     LPRINT filename$;" untersucht."
  158.     LPRINT "gefunden: ";LineCount%;" Zeilen gesamt"
  159.     LPRINT "          ";ProcCount%;" Prozedur(en)"
  160.     LPRINT "          ";FuncCount%;" Funktion(en)"
  161.   CASE = 3
  162.     PRINT #2,
  163.     PRINT #2, filename$;" untersucht."
  164.     PRINT #2, "gefunden: ";LineCount%;" Zeilen gesamt"
  165.     PRINT #2, "          ";ProcCount%;" Prozedur(en)"
  166.     PRINT #2, "          ";FuncCount%;" Funktion(en)"
  167.     CLOSE #2
  168. END SELECT
  169. END
  170. '----------------------------------------------------------
  171. '                Ende von PROCFIND.BAS
  172.