home *** CD-ROM | disk | FTP | other *** search
- '* ------------------------------------------------------- *
- '* ARCHI.BAS *
- '* (c) 1989 G.Kraus & TOOLBOX *
- '* ------------------------------------------------------- *
- %FALSE = 0 : %TRUE = NOT %FALSE
- Kein$ = "" : Leer$ = " "
- SNr% = 0 : FuNr% = 0
- '* aktuelle Anzahl der Unterprogramme
- CalNr% = 0 : FunNr% = 0
- '* aktuelle Anzahl der Unterpgm-Aufrufe
- FuncName$ = Kein$
- '* ------------------------------------------------------- *
- %MaxIncFiles = 20
- DIM IncFiles$ (0 : %MaxIncFiles)
- '* IncFile$ (0) ist das Hauptprogramm
- %MaxRout = 100
- DIM UpNamen$ (1:2, %MaxRout) ' SUB- und DEF FN-Namen
- DIM UpStart% (1:2, %MaxRout) ' Zeilennummern, Beginn
- DIM UpEnde% (1:2, %MaxRout) ' Zeilennummern, Ende
- DIM UpFile% (1:2, %MaxRout) ' Nummer des INCLUDE-Files
- DIM RufName$ (1:2, %MaxRout) ' Unterpgm-Aufrufe
- DIM StartLoeschen% (0 : %MaxIncFiles, %MaxRout)
- DIM EndeLoeschen% (0 : %MaxIncFiles, %MaxRout)
- DIM FileLoeschen% (0 : %MaxIncFiles, %MaxRout)
- '* ------------------------------------------------------- *
- '* Befehlsgruppe 1 : Zeichen, die die Suche beenden *
- '* ------------------------------------------------------- *
- AnzahlNOBefehle% = 4
- DIM NOBefehl$ (AnzahlNOBefehle%), _
- NOBefehlsLaenge% (AnzahlNOBefehle%)
-
- NOBefehl$ (1) = CHR$ (39) ' Rem-Zeichen
- NOBefehl$ (2) = "REM"
- NOBefehl$ (3) = "EXIT"
- NoBefehl$ (4) = CHR$ (34) ' Anführungszeichen
-
- FOR i% = 1 TO AnzahlNOBefehle%
- NOBefehlsLaenge% (i%) = LEN (NOBefehl$ (i%))
- NEXT i%
- '* ------------------------------------------------------- *
- '* Befehlsgruppe 2 : Befehle, die eine Prozedur einleiten *
- '* Sonderfall : GOSUB (wird ausgefiltert) *
- '* ------------------------------------------------------- *
- AnzahlUPBefehle% = 3
-
- DIM UPBefehl$ (AnzahlUPBefehle%), _
- UPBefehlsLaenge% (AnzahlUPBefehle%)
-
- UPBefehl$ (1) = "GOSUB"
- UPBefehl$ (2) = "SUB"
- UPBefehl$ (3) = "DEF FN"
-
- FOR i% = 1 TO AnzahlUPBefehle%
- UPBefehlsLaenge% (i%) = LEN (UPBefehl$ (i%))
- NEXT i%
- '* ------------------------------------------------------- *
- '* Befehlsgruppe 3 : Befehle, die eine Prozedur aufrufen *
- '* ------------------------------------------------------- *
- AnzahlPRCBefehle% = 2
-
- DIM PRCBefehl$ (AnzahlPRCBefehle%), _
- PRCBefehlsLaenge% (AnzahlPRCBefehle%)
-
- PRCBefehl$ (1) = "CALL"
- PRCBefehl$ (2) = "FN"
-
- FOR i% = 1 TO AnzahlPRCBefehle%
- PRCBefehlsLaenge% (i%) = LEN (PRCBefehl$ (i%))
- NEXT i%
- '* ------------------------------------------------------- *
- '* Befehlsgruppe 4 : Befehle, die eine Prozedur beenden *
- '* ------------------------------------------------------- *
- AnzahlExBefehle% = 2
-
- DIM ExBefehl$ (AnzahlExBefehle%), _
- ExBefehlsLaenge% (AnzahlExBefehle%)
-
- ExBefehl$ (1) = "END SUB"
- ExBefehl$ (2) = "END DEF"
-
- FOR i% = 1 TO AnzahlExBefehle%
- ExBefehlsLaenge% (i%) = LEN (ExBefehl$ (i%))
- NEXT i%
- '* ------------------------------------------------------- *
- SUB TitelBild
-
- CLS
- COLOR 14, 2
- LOCATE 1, 1 : PRINT STRING$ (80, 32);
- LOCATE 1, 28 : PRINT " A R C H I V A R V.1.0"
- LOCATE 1, 63 : PRINT "(C) 1989 TOOLBOX"
- COLOR 15, 0
- LOCATE 3, 1 : PRINT "Input-Datei : ";
-
- END SUB
- '* ------------------------------------------------------- *
- DEF FNEinrueck% (source$) '* Anzahl blanks am Zeilenanfang
- SHARED Leer$
- LOCAL ch$ = "" : ni% = 0
-
- DO
- INCR ni%
- ch$ = MID$ (source$, ni%, 1)
- LOOP UNTIL ch$ <> Leer$ OR ni% > LEN (source$)
- FNEinrueck% = ni%
-
- END DEF
- '* ------------------------------------------------------- *
- DEF FNGetKeyWord$ (start%, source$)
- ' sucht das erste Wort der Programmzeile
- ' start% ist das erste Zeichen des Wortes
- SHARED Leer$
- LOCAL wort$
-
- DO
- wort$ = wort$ + MID$ (source$, start%, 1)
- INCR start%
- LOOP UNTIL MID$ (source$, start%, 1) = Leer$ _
- OR start% > LEN (source$)
- FNGetKeyWord$ = wort$
-
- END DEF
- '* ------------------------------------------------------- *
- SUB IncFile (Zeile$, start%, Modi%)
- ' liefert den Namen des INCLUDE-Files
- ' Modi% : falls true, wird die Extension geändert
- SHARED IncFiles$ ()
- STATIC IncNr%
- '* vorbelegt mit 0, wird mit jedem $INCLUDE erhöht
- LOCAL FileName$
-
- ' ohne $INCLUDE
- FileName$ = MID$ (Zeile$, start% + 8, LEN (Zeile$))
- ' führende Leerzeichen entfernen
- start% = FnEinrueck% (FileName$)
- FileName$ = FnGetKeyWord$ (start%, FileName$)
- ' Anführungszeichen entfernen
- FileName$ = MID$ (FileName$, 2, LEN (FileName$) - 2)
- ' falls keine Extension vorhanden ist
- IF INSTR (FileName$, ".") = %FALSE THEN
- FileName$ = FileName$ + ".BAS"
- END IF
- IF (incnr% + 1) <= %MaxIncFiles THEN
- INCR incnr%
- IncFiles$ (incnr%) = FileName$
- ELSE
- BEEP
- PRINT : PRINT "Mehr als 20 Include-Files ! "
- STOP
- END IF
- IF Modi% THEN CALL Extension (FileName$)
-
- END SUB
- '* ------------------------------------------------------- *
- SUB Extension (Zeile$)
- ' ändert die Extension der Include-File-Namen
- SHARED Ext$
-
- IF INSTR (Zeile$, ".") = %FALSE THEN Zeile$ = Zeile$ + "."
- Zeile$ = LEFT$ (Zeile$, INSTR (Zeile$, ".")) + Ext$
-
- END SUB
- '* ------------------------------------------------------- *
- DEF FNDoppelt% (RoutNam$, Rout%, Nr%)
- ' ermittelt, ob eine Routine bereits aufgerufen wurde
- ' wenn man ein zusätzliches ARRAY einführt, kann man leicht
- ' feststellen, wie oft eine Routine aufgerufen wurde
- SHARED RufName$ ()
- LOCAL i%
-
- FNDoppelt% = %FALSE
- FOR i% = 1 TO Nr%
- IF RoutNam$ = RufName$ (Rout%, i%) THEN
- FNDoppelt% = %TRUE
- EXIT DEF
- END IF
- NEXT i%
-
- END DEF
- '* ------------------------------------------------------- *
- SUB Vorh (RoutNr%, RufNr%, UpNr%, Loesch%)
-
- SHARED SNr%, FuNr%, UpNamen$ (), UpStart% (), UpEnde% (), _
- UpFile% (), CalNr%, FunNr%, RufName$ (), Kein$, _
- Leer$, Drucker$, FileNr%, StartLoeschen% (), _
- EndeLoeschen% (), FileLoeschen% ()
- LOCAL OK%, i%, j%
-
- Loesch% = 1
- IF Drucker$ = "J" THEN
- LPRINT
- IF RoutNr% = 1 THEN
- LPRINT "- Nicht benötigte Subroutinen"
- ELSE
- LPRINT "- Nicht benötigte Funktionen"
- END IF
- END IF
- OK% = %FALSE : i% = 1
- DO
- j% = 1 : OK% = %FALSE
- DO
- IF UpNamen$ (RoutNr%,i%) = RufName$ (RoutNr%,j%) THEN
- OK% = %TRUE
- ELSE
- INCR j%
- END IF
- LOOP UNTIL j% > RufNr% OR OK%
-
- ' falls die Routine nicht aufgerufen wurde, wird der Feld-
- ' inhalt mit dem Inhalt des letzten Feldes überschrieben
- IF NOT OK% THEN
- StartLoeschen% (RoutNr%, Loesch%) = _
- UpStart% (RoutNr%, i%)
- EndeLoeschen% (RoutNr%, Loesch%) = _
- UpEnde% (RoutNr%, i%)
- FileLoeschen% (RoutNr%, Loesch%) = _
- UpFile% (RoutNr%, i%)
- IF Drucker$ = "J" THEN
- LPRINT UpNamen$ (RoutNr%, i%),
- LPRINT TAB (35); USING "#####"; _
- StartLoeschen% (RoutNr%, Loesch%),
- LPRINT USING "#####"; _
- EndeLoeschen% (RoutNr%, Loesch%),
- LPRINT USING "#####"; UpFile% (RoutNr%, i%)
- END IF
- UpNamen$ (RoutNr%, i%) = UpNamen$ (RoutNr%, UpNr%)
- UpStart% (RoutNr%, i%) = UpStart% (RoutNr%, UpNr%)
- UpEnde% (RoutNr%, i%) = UpEnde% (RoutNr%, UpNr%)
- UpFile% (RoutNr%, i%) = UpFile% (RoutNr%, UpNr%)
- INCR Loesch%
- DECR UpNr%
- END IF
-
- ' Falls nicht ok, muß das Feld nochmal untersucht werden,
- ' da der Inhalt des vorher letzten Feldes gespeichert wurde
- IF OK% THEN INCR i%
- LOOP UNTIL i% > UpNr%
- DECR Loesch%
-
- END SUB
- '* ------------------------------------------------------- *
- SUB Sortieren (RufName$ (2), RoutNr%, Nr%)
- ' einfache Sortierroutine
- LOCAL i%, j%, Merk%
-
- FOR i% = 1 TO Nr% - 1
- Merk% = i%
- FOR j% = i% + 1 TO Nr%
- IF RufName$ (RoutNr%,j%) < RufName$ (RoutNr%, i%) THEN
- Merk% = j%
- END IF
- NEXT
- IF Merk% <> i% THEN
- SWAP RufName$ (RoutNr%, i%), RufName$ (RoutNr%, Merk%)
- END IF
- NEXT
-
- END SUB
- '* ------------------------------------------------------- *
- DEF FNExist% (FileName$)
- ' stellt fest, ob das File bereits vorhanden ist
-
- ON ERROR GOTO Fehler
- OPEN FileName$ FOR INPUT AS #1
- CLOSE #1 : FnExist% = %TRUE : GOTO Meldung
- Fehler :
- FnExist% = %FALSE : RESUME Weiter
- Meldung :
- PRINT
- PRINT "Das File ";FileName$, " ist bereits vorhanden !"
- PRINT "Bitte vor einem weiteren Programmaufruf umbenennen"
- Weiter :
- ON ERROR GOTO 0
-
- END DEF
- '* ------------------------------------------------------- *
- SUB ZeileBearbeiten (Text$, LineNr%)
- SHARED FileNr%
- LOCAL Antw%, PRC%
-
- IF NOT FNNoBefehl% (Text$) THEN
- ' die Zeile muß weiter untersucht werden
- Antw% = FNUPBefehl% (Text$, LineNr%)
- ' die Zeile muß weiter untersucht werden
- IF NOT Antw% THEN PRC% = FNPRCBefehl% (Text$)
- PRC% = FNExBefehl% (Text$, LineNr%)
- END IF
-
- END SUB
- '* ------------------------------------------------------- *
- DEF FNNoBefehl% (Text$)
- ' filtert Zeilen mit den Befehlsworten NoBefehl$ ()
- ' behandelter Sonderfall : nach dem Anführungszeichen (Text)
- ' folgt ein Funktions- oder Prozeduraufruf !
-
- SHARED AnzahlNoBefehle%, NoBefehl$ (), NoBefehlsLaenge% ()
- LOCAL Dummy%, Vorh%, AktPos%, t%, Laenge%
-
- Vorh% = %FALSE : AktPos% = 1 : t% = 1
- Laenge% = LEN (Text$)
- DO
- DO
- IF MID$ (Text$, AktPos%, NOBefehlsLaenge% (t%)) =_
- NoBefehl$ (t%) THEN
- Vorh% = %TRUE
- ' Sonderfall: vor einem der NoBefehle steht REM, ' oder EXIT
- IF t% < 4 THEN
- Text$ = LEFT$ (Text$, AktPos% - 1)
- FNNoBefehl% = %FALSE
- EXIT DEF
- END IF
- ' Sonderfall : Anführungszeichen in der Zeile
- IF NoBefehl$ (t%) = CHR$ (34) THEN ' t% = 4
- ' Anführungszeichen gefunden !
- Text$ = RIGHT$ (Text$, LEN (Text$) - AktPos%)
- ' die Zeile wird bis zum Anführungszeichen abgeschnitten
- Dummy% = INSTR (Text$, CHR$ (34))
- Text$ = RIGHT$ (Text$, LEN (Text$) - Dummy%)
- ' die Zeile wird bis zum Anführungszeichen abgeschnitten
- ' im folgenden wird der Text nach dem Anf.zeichen untersucht
- Vorh% = %FALSE
- ' oder FNNoBefehl% = %FALSE : EXIT DEF
- END IF ' IF NoBefehl$ (t%) = CHR$ (34)
- ELSE
- INCR t%
- END IF ' IF MID$ (Text$, AktPos%, ...
- LOOP UNTIL Vorh% OR t% > AnzahlNoBefehle%
- IF NOT Vorh% THEN
- INCR AktPos%
- t% = 1
- END IF
- LOOP UNTIL Vorh% OR AktPos% > Laenge%
- FNNoBefehl% = Vorh%
- ' true, wenn eines der gesuchten Zeichen/Befehle gefunden
-
- END DEF
- '* ------------------------------------------------------- *
- DEF FNUPBefehl% (Text$, LineNr%)
- ' filtert Zeilen mit den Befehlsworten UPBefehl$ ()
- ' also "SUB" und "DEF FN" . Sonderfall : GOSUB
- SHARED AnzahlUPBefehle%, UPBefehl$ (), UPBefehlsLaenge% (),_
- FileNr%, FuncName$, SNr%, FuNr%, UpNamen$ (), _
- UpStart% (), UpEnde% (), UpFile% (), Kein$, Leer$
- LOCAL Vorh%, AktPos%, t%, Laenge%, Nam$, ch$, Nr%, Func%
-
- Vorh% = %FALSE : AktPos% = 1 : t% = 1
- Func% = %FALSE
- Laenge% = LEN (Text$)
- DO
- DO
- IF MID$ (Text$, AktPos%, UPBefehlsLaenge% (t%)) =_
- UPBefehl$ (t%) THEN
- Vorh% = %TRUE
- IF t% = 1 THEN Vorh% = FALSE : Nam$ = Kein$
- ' Namen der Prozedur ermitteln
- AktPos% = AktPos% + UPBefehlsLaenge% (t%)
- ' 1. Zeichen nach dem Befehlswort
- Nam$ = Kein$
- DO
- IF MID$ (Text$, AktPos%, 1) <> Leer$ THEN
- Nam$ = Nam$ + MID$ (Text$, AktPos%, 1)
- END IF
- INCR AktPos%
- Ch$ = MID$ (Text$, AktPos%, 1)
- LOOP UNTIL Ch$ = Leer$ OR Ch$ = "(" _
- OR AktPos% > LEN (Text$)
- ' Sonderfall : 1-zeilige Funktion
- IF INSTR (Text$, "DEF FN") THEN
- Func% = %TRUE : FuncName$ = Nam$
- IF INSTR (Text$, "=") THEN
- UpEnde% (t%-1, FuNr%+1) = LineNr%
- END IF
- ' --> Ende-Zeile = Anfangszeile
- ELSE
- FuncName$ = Kein$
- END IF ' IF INSTR (Text$, "DEF FN")
- ' Sonderfall : END SUB, GOSUB oder Label
- IF Nam$ = ":" OR t% = 1 THEN Nam$ = Kein$
- IF Nam$ <> Kein$ THEN
- IF Func% THEN
- INCR FuNr% : Nr% = FuNr%
- ELSE
- INCR SNr% : Nr% = SNr%
- END IF
- UpNamen$ (t%-1, Nr%) = Nam$
- UpStart% (t%-1, Nr%) = LineNr%
- UPFile% (t%-1, Nr%) = FileNr%
- END IF ' IF Nam$ <> Kein$
- ELSE
- INCR t%
- END IF ' IF MID$ (Text$, AktPos%, ...
- LOOP UNTIL Vorh% OR t% > AnzahlUPBefehle%
- IF NOT Vorh% THEN
- INCR AktPos%
- t% = 1
- END IF
- LOOP UNTIL Vorh% OR AktPos% > Laenge%
- FNUPBefehl% = Vorh%
-
- END DEF
- '* ------------------------------------------------------- *
- DEF FNPRCBefehl% (Text$)
- ' filtert Zeilen mit den Befehlsworten PRCBefehl$ ()
- ' also "CALL" und "FN"
- ' es können mehrere Aufrufe in einer Zeile stehen, also muß
- ' die ganze Zeile überprüft werden
- SHARED AnzahlPRCBefehle%, PRCBefehl$ (), _
- PRCBefehlsLaenge% (); FuncName$, SNr%, FuNr%, _
- UpNamen$ (), CalNr%, FunNr%, RufName$(), Kein$, Leer$
- LOCAL Vorh%, AktPos%, t%, Laenge%, Nam$, ch$, Nr%, Func%
-
- Vorh% = %FALSE : AktPos% = 1 : t% = 1
- Func% = %FALSE
- Laenge% = LEN (Text$)
- DO
- DO
- IF MID$ (Text$, AktPos%, PRCBefehlsLaenge% (t%)) =_
- PRCBefehl$ (t%) THEN
- Vorh% = %TRUE
- ' Namen der Prozedur ermitteln
- AktPos% = AktPos% + PRCBefehlsLaenge% (t%)
- ' 1. Zeichen nach dem Befehlswort
- Nam$ = Kein$
- DO
- IF MID$ (Text$, AktPos%, 1) <> Leer$ THEN
- Nam$ = Nam$ + MID$ (Text$, AktPos%, 1)
- END IF
- INCR AktPos%
- Ch$ = MID$ (Text$, AktPos%, 1)
- LOOP UNTIL Ch$ = Leer$ OR Ch$ = "(" _
- OR AktPos% > LEN (Text$)
- ' Sonderfall : Wertzuweisung innerhalb der Funktion
- ' gilt natürlich nicht als Funktionsaufruf !
- IF PRCBefehl$ (t%) = "FN" THEN
- Func% = %TRUE
- IF Nam$ = FuncName$ THEN
- Func% = %FALSE : Nam$ = Kein$
- END IF
- END IF ' IF PRCBefehl$ (t%) = "FN"
- IF Nam$ <> Kein$ THEN
- IF Func% THEN
- Nr% = FunNr% : Rout% = 2
- ELSE
- Nr% = CalNr% : Rout% = 1
- END IF ' IF Func%
- ' wurde die Routine bereits einmal aufgerufen ?
- ' wenn ja, muß der Aufruf nicht nochmal gespeichert werden
- IF FNDoppelt% (Nam$, Rout%, Nr%) THEN
- Func% = %FALSE : Nam$ = Kein$
- END IF
- END IF ' IF Nam$ < > Kein$
- ' Speichern des Aufrufs
- IF Nam$ <> Kein$ THEN
- IF Func% THEN
- INCR FunNr% : Nr% = FunNr% : Rout% = 2
- ELSE
- INCR CalNr% : Nr% = CalNr% : Rout% = 1
- END IF ' IF Func%
- RufName$ (t%, Nr%) = Nam$
- END IF ' IF Nam$ <> Kein$
- ELSE
- INCR t%
- END IF ' IF MID$ (Text$, AktPos%, ...
- LOOP UNTIL Vorh% OR t% > AnzahlPRCBefehle%
- INCR AktPos%
- t% = 1
- Func% = %FALSE
- LOOP UNTIL AktPos% > Laenge%
- FNPRCBefehl% = Vorh%
-
- END DEF
- '* ------------------------------------------------------- *
- DEF FNExBefehl% (Text$, LineNr%)
- ' filtert Zeilen mit den Befehlsworten ExBefehl$ ()
- ' also "END SUB" und "END DEF"
- SHARED AnzahlExBefehle%, ExBefehl$ (), ExBefehlsLaenge% (),_
- SNr%, FuNr%, UpNamen$ (),UpStart% (), UpEnde% ()_
- Kein$, Leer$
- LOCAL Vorh%, AktPos%, t%, Laenge%, Nr%
-
- Vorh% = %FALSE : AktPos% = 1 : t% = 1
- Laenge% = LEN (Text$)
- DO
- DO
- IF MID$ (Text$, AktPos%, ExBefehlsLaenge% (t%)) =_
- ExBefehl$ (t%) THEN
- Vorh% = %TRUE
- IF t% = 1 THEN Nr% = SNr% ELSE Nr% = FuNr%
- ' die Zeilennummer wird gespeichert
- UpEnde% (t%, Nr%) = LineNr%
- ELSE
- INCR t%
- END IF ' IF MID$ (Text$, AktPos%, ...
- LOOP UNTIL Vorh% OR t% > AnzahlExBefehle%
- IF NOT Vorh% THEN
- INCR AktPos% : t% = 1
- END IF
- LOOP UNTIL Vorh% OR AktPos% > Laenge%
- FNExBefehl% = Vorh%
-
- END DEF
- '* ------------------------------------------------------- *
- SUB ZeileTesten (RoutNr%, ZeilenNr%, MaxNr%, Gefunden%)
- ' falls eine nicht erforderliche Routine gefunden wird,
- ' werden die Zeilen bis zum Ende der Routine nur eingelesen
- SHARED FileNr%, FileLoeschen% (),_
- StartLoeschen% (), EndeLoeschen% ()
- LOCAL i%, Zeile$
-
- FOR i% = 1 TO MaxNr%
- IF FileLoeschen% (RoutNr%, i%) = FileNr% _
- AND ZeilenNr% = StartLoeschen% (RoutNr%, i%) THEN
- IF ZeilenNr% = EndeLoeschen% (RoutNr%, i%) THEN
- ' Sonderfall : 1-zeilige Funktion
- Gefunden% = %TRUE
- ELSE
- DO
- LINE INPUT #1, Zeile$
- INCR ZeilenNr%
- LOOP UNTIL ZeilenNr% = EndeLoeschen% (RoutNr%, i%) _
- OR EOF (1)
- Gefunden% = %TRUE
- END IF ' ZeilenNr% = EndeLoeschen% (RoutNr%, i%)
- END IF ' IF FileLoeschen% (RoutNr%, i%) = ...
- IF Gefunden% THEN EXIT FOR
- NEXT i%
-
- END SUB
- '* ------------------------------------------------------- *
- '* Hauptteil *
- '* ------------------------------------------------------- *
- CALL TitelBild
- INPUT FileName$
- IF INSTR (FileName$, ".") = %FALSE THEN
- FileName$ = FileName$ + ".BAS"
- END IF
- PRINT : PRINT "neue Extension : ";
- INPUT Ext$ : Ext$ = UCASE$ (Ext$)
- IF Ext$ = Kein$ THEN Ext$ = "BIB"
- PRINT : PRINT "Druckerprotokoll J/N : ";
- INPUT Drucker$ : Drucker$ = UCASE$ (Drucker$)
- IF Drucker$ <> "J" THEN Drucker$ = "N"
-
- '* ------------------------------------------------------- *
- '* Die Original-Files werden bearbeitet *
- '* ------------------------------------------------------- *
- IncFiles$ (0) = Filename$ : FileNr% = 0 : LineNr% = 0
- COLOR 14, 5 : PRINT : PRINT " 1. Durchlauf : " : COLOR 15, 0
- DO
- PRINT "In Bearbeitung : "; IncFiles$ (FileNr%)
- OPEN IncFiles$ (FileNr%) FOR INPUT AS #1
- WHILE NOT EOF (1)
- LINE INPUT #1, Zeile$
- Zeile$ = UCASE$ (Zeile$) : INCR LineNr%
- Zeile$ = MID$ (Zeile$, _
- FNEinRueck% (Zeile$), LEN (Zeile$))
- ' führende Leerzeichen werden entfernt
- ' Include-Files werden gesammelt
- IF INSTR (Zeile$, "$INCLUDE") THEN
- KeyWord$ = FNGetKeyWord$ (FNEinRueck%(Zeile$), Zeile$)
- IF UCASE$ (MID$ (KeyWord$, 1, 8)) = "$INCLUDE" THEN
- CALL IncFile (Zeile$, FNEinRueck% (Zeile$), %False)
- END IF
- END IF
- CALL ZeileBearbeiten (Zeile$, LineNr%)
- WEND
- CLOSE #1
- INCR FileNr% : LineNr% = 0
- LOOP UNTIL (FileNr% > %MaxIncFiles) _
- OR (INCFiles$ (FileNr%) = "")
- '* ------------------------------------------------------- *
- '* Die ARRAYs werden sortiert und verglichen *
- '* ------------------------------------------------------- *
- COLOR 14, 5 : PRINT : PRINT " Sortieren " : COLOR 15, 0
- CALL Sortieren (RufName$ (), 1, CalNr%)
- CALL Sortieren (RufName$ (), 2, FunNr%)
- '* ------------------------------------------------------- *
- '* die nicht benötigten Routinen werden aussortiert *
- '* ------------------------------------------------------- *
- CALL Vorh (1, CalNr%, SNr%, SbDel%)
- CALL Vorh (2, FunNr%, FuNr%, FunDel%)
- '* ------------------------------------------------------- *
- '* Die neuen Files werden zusammengestellt *
- '* ------------------------------------------------ *
- COLOR 14, 5 : PRINT : PRINT " 2. Durchlauf : " : COLOR 15, 0
- FileNr% = 0 : LineNr% = 0
- DO
- PRINT "In Bearbeitung : "; IncFiles$ (FileNr%)
- OPEN IncFiles$ (FileNr%) FOR INPUT AS #1
- CALL Extension (IncFiles$ (FileNr%))
- PRINT TAB (20); "--> "; IncFiles$ (FileNr%)
- ' vorhandene Files werden nicht überschrieben
- IF FNExist% (IncFiles$ (FileNr%)) THEN STOP
- OPEN IncFiles$ (FileNr%) FOR OUTPUT AS #2
- WHILE NOT EOF (1)
- LINE INPUT #1, Zeile$
- INCR LineNr%
- Found% = %FALSE
- IF INSTR (UCASE$ (Zeile$), "$INCLUDE") THEN
- KeyWord$ = FNGetKeyWord$ (FNEinRueck%(Zeile$), Zeile$)
- IF UCASE$ (MID$ (KeyWord$, 1, 8)) = "$INCLUDE" THEN
- CALL Extension (Zeile$)
- Zeile$ = Zeile$ + CHR$ (34)
- END IF
- END IF
- CALL ZeileTesten (1, LineNr%, SbDel%, Found%)
- IF NOT Found% THEN
- CALL ZeileTesten (2, LineNr%, FunDel%, Found%)
- END IF
- IF NOT Found% THEN PRINT #2, Zeile$
- WEND
- CLOSE #1 : CLOSE #2
- INCR FileNr% : LineNr% = 0
- LOOP UNTIL (FileNr% > %MaxIncFiles) _
- OR (INCFiles$ (FileNr%) = "")
- '* ------------------------------------------------------- *
- IF Drucker$ = "J" THEN
- LPRINT : LPRINT CalNr%; "Sub-Aufrufe"
- FOR i% = 1 TO CalNr%
- LPRINT RufName$ (1, i%)
- NEXT i%
- LPRINT : LPRINT FunNr%; "Funktions-Aufrufe"
- FOR i% = 1 TO FunNr%
- LPRINT RufName$ (2, i%)
- NEXT i%
- LPRINT : LPRINT SNr%; "Sub-Routinen"
- FOR i% = 1 TO SNr%
- LPRINT UpNamen$ (1, i%); TAB (35); _
- USING "#####"; UpStart% (1, i%),_
- USING "#####"; UpEnde% (1, i%), upfile% (1, i%)
- NEXT i%
- LPRINT : LPRINT FuNr%; "Funktionen"
- FOR i% = 1 TO FuNr%
- LPRINT UpNamen$ (2, i%); TAB (35); _
- USING "#####"; UpStart% (2, i%),_
- USING "#####"; UpEnde% (2, i%), upfile% (2, i%)
- NEXT i%
- LPRINT
- END IF ' IF Drucker$ = "J"
- COLOR 14, 5 : PRINT : PRINT " ENDE " : COLOR 15, 0
- END
- '* ------------------------------------------------------- *
- '* Ende von ARCHI.BAS *
-