home *** CD-ROM | disk | FTP | other *** search
-
- PROGRAM UL;
- { LISTE DER USES- ANWEISUNGEN }
-
-
- USES TPDOS,TPSTRING,GETPUT;
-
-
- VAR I,J : WORD;
- S,CMDLIN,CC : STRING;
- ARR : ARRAY[1..200] OF STRING;
- AP,TIEFE : WORD;
- ALLE : BOOLEAN;
- K1,K2 : BOOLEAN;
-
- F : FILE;
- BUF : ARRAY[0..2000] OF CHAR;
- UNITPATH : ARRAY[1..5] OF STRING;
-
-
- FUNCTION ISSCHONDA(VAR NAME:STRING):BOOLEAN;
- VAR I : WORD;
- BEGIN
- ISSCHONDA := TRUE;
- FOR I := 1 TO AP DO BEGIN
- IF NAME = ARR[I] THEN EXIT;
- END;
- ISSCHONDA := FALSE;
- END;
-
-
- PROCEDURE SPEICHERN(VAR NAME:STRING);
- VAR I : WORD;
- BEGIN
- IF ISSCHONDA(NAME) THEN EXIT;
- INC(AP);
- ARR[AP] := NAME;
- END;
-
-
- PROCEDURE LISTE(VAR NAME:STRING;INCLUDE:BOOLEAN);
- VAR I,P : WORD;
- LIN,N,N1,NAM2 : STRING;
- F : TEXT;
- F1 : FILE;
- FOUND,FF,CK : BOOLEAN;
- TPUID : ARRAY[1..4] OF CHAR;
- TPUBUF : STRING;
- EC : CHAR;
-
- PROCEDURE GETLINE;
- VAR C,CA : CHAR;
- BEGIN
- C := ' ';
- CA := ' ';
- LIN := '';
- CC := '';
- K1 := FALSE;
- K2 := FALSE;
- CK := FALSE;
- WHILE (NOT EOF(F)) AND (C <> ^J) DO BEGIN
- CA := C;
- READ(F,C);
- CASE C OF
- '$' : BEGIN
- IF (K1 AND (CA = '{')) OR (K2 AND (CA = '*')) THEN BEGIN
- CK := TRUE;
- END;
- END;
- '{' : K1 := TRUE;
- '*' : BEGIN
- IF CA = '(' THEN BEGIN
- K2 := TRUE;
- DELETE(LIN,LENGTH(LIN),1);
- END ELSE IF NOT K1 AND NOT K2 THEN LIN := LIN + C;
- END;
- '}' : BEGIN
- K1 := FALSE;
- CK := FALSE;
- END;
- ')' : BEGIN
- IF K2 THEN BEGIN
- IF CA = '*' THEN BEGIN
- K2 := FALSE;
- CK := FALSE;
- END;
- END ELSE IF NOT K1 AND NOT K2 THEN LIN := LIN + C;
- END;
- ^M : BEGIN
- END;
- ^J : BEGIN
- IF K1 OR K2 THEN C := ' ';
- END;
- ELSE
- IF K1 OR K2 THEN BEGIN
- IF CK THEN CC := CC + C;
- END ELSE BEGIN
- LIN := LIN + C;
- END;
- END; { CASE C }
- END; { WHILE }
- LIN := STUPCASE(LIN);
- END; { GETLINE }
-
- FUNCTION GETNAME(LESEN:BOOLEAN):STRING;
- VAR S1 : STRING;
- P : WORD;
- BEGIN
- GETNAME := '';
- S1 := '';
- IF LENGTH(LIN) = 0 THEN BEGIN
- IF NOT LESEN THEN EXIT;
- GETLINE;
- IF (CC <> '') THEN BEGIN
- IF (UPCASE(CC[1]) = 'L') AND (CC[2] = ' ') THEN BEGIN
- DELETE(CC,1,1);
- WRITELN('$L',CC);
- END;
- IF (UPCASE(CC[1]) = 'I') AND (CC[2] = ' ') THEN BEGIN
- DELETE(CC,1,1);
- WRITELN('$I',CC);
- END;
- END;
- P := POS('USES ',LIN);
- IF P > 0 THEN DELETE(LIN,1,P+4);
- END;
- WHILE (LENGTH(LIN) > 0) AND (LIN[1] = ' ') DO DELETE(LIN,1,1);
- WHILE (LENGTH(LIN) > 0) AND (LIN[1] = ',') DO DELETE(LIN,1,1);
-
- IF LIN[1] = ';' THEN BEGIN
- FOUND := TRUE;
- EXIT;
- END;
- WHILE NOT (LIN[1] IN [' ',',',';']) AND NOT (LENGTH(LIN) = 0) DO BEGIN
- S1 := S1 + LIN[1];
- DELETE(LIN,1,1);
- END; { WHILE }
- GETNAME := S1;
- END; { GETNAME }
-
- PROCEDURE LISTTPU0(VAR NAME:STRING;WEITER:BYTE);
- VAR I : WORD;
- BEGIN
- REPEAT
- FGETW(F1,I);
- FGETS(F1,TPUBUF);
- FGETC(F1,EC);
- FSEEK(F1,FPOS(F1)+WEITER);
- IF (EC = 'Z') AND (TPUBUF <> NAME) AND (TPUBUF <> 'SYSTEM') THEN BEGIN
- INC(TIEFE);
- LISTE(TPUBUF,FALSE);
- DEC(TIEFE);
- END;
- UNTIL EC <> 'Z';
- END; { LISTTPU0 }
-
- PROCEDURE LISTTPU6(VAR NAME:STRING);
- VAR I : WORD;
- BEGIN
- REPEAT
- FGETW(F1,I);
- FGETC(F1,EC);
- FGETS(F1,TPUBUF);
- FSEEK(F1,FPOS(F1)+8);
- IF (EC = 'Y') AND (TPUBUF <> NAME) AND (TPUBUF <> 'SYSTEM') THEN BEGIN
- INC(TIEFE);
- LISTE(TPUBUF,FALSE);
- DEC(TIEFE);
- END;
- UNTIL EC <> 'Y';
- END; { LISTTPU6 }
-
- BEGIN { LISTE }
- {$I-}
- IF ALLE THEN BEGIN
- FOR I := 1 TO TIEFE DO WRITE(' ');
- IF INCLUDE THEN WRITE('INCLUDE ');
- WRITE(NAME);
- END;
- IF ISSCHONDA(NAME) THEN BEGIN
- IF ALLE THEN WRITELN;
- EXIT;
- END;
-
- IF NOT ALLE THEN BEGIN
- FOR I := 1 TO TIEFE DO WRITE(' ');
- IF INCLUDE THEN WRITE('INCLUDE ');
- WRITE(NAME);
- END;
- SPEICHERN(NAME); { EIGENEN NAMEN MERKEN }
-
- IF POS('.',NAME) > 0 THEN NAM2 := NAME ELSE NAM2 := NAME + '.PAS';
- IF EXISTONPATH(NAM2,N1) THEN BEGIN
- IF POS('.',NAME) = 0 THEN WRITE('.PAS');
- WRITELN;
- INC(TIEFE);
-
- FOUND := FALSE;
- ASSIGN(F,N1);
- RESET(F);
- REPEAT
- GETLINE;
- IF (CC <> '') THEN BEGIN
- IF (UPCASE(CC[1]) = 'L') AND (CC[2] = ' ') THEN BEGIN
- DELETE(CC,1,1);
- WHILE CC[1] = ' ' DO DELETE(CC,1,1);
- FOR I := 1 TO TIEFE DO WRITE(' ');
- IF POS('.',CC) = 0 THEN WRITELN(CC,'.OBJ') ELSE WRITELN(CC);
- END;
- IF (UPCASE(CC[1]) = 'I') AND (CC[2] = ' ') THEN BEGIN
- DELETE(CC,1,1);
- WHILE CC[1] = ' ' DO DELETE(CC,1,1);
- LISTE(CC,TRUE);
- END;
- END;
- N := GETNAME(FALSE);
- IF N = 'VAR' THEN FOUND := TRUE;
- IF N = 'USES' THEN BEGIN
- REPEAT
- N := GETNAME(TRUE);
- IF N <> '' THEN LISTE(N,FALSE);
- UNTIL FOUND;
- END; { IF POS ('VAR', }
- UNTIL EOF(F) {OR FOUND};
- CLOSE(F);
-
- DEC(TIEFE);
-
- END ELSE BEGIN
- IF NAME = 'OVERLAY' THEN BEGIN
- WRITELN(' : TURBO intern');
- EXIT;
- END;
- IF NAME = 'DOS' THEN BEGIN
- WRITELN(' : TURBO intern');
- EXIT;
- END;
- IF NAME = 'GRAPH' THEN BEGIN
- WRITELN(' : TURBO intern');
- EXIT;
- END;
- IF NAME = 'CRT' THEN BEGIN
- WRITELN(' : TURBO intern');
- EXIT;
- END;
- IF NAME = 'PRINTER' THEN BEGIN
- WRITELN(' : TURBO intern');
- EXIT;
- END;
-
- FF := FALSE;
- IF POS('.',NAME) = 0 THEN BEGIN
- IF EXISTONPATH(NAME+'.TPU',N1) THEN FF := TRUE;
- FOR I := 1 TO 5 DO BEGIN
- IF NOT FF AND (UNITPATH[I] <> '') THEN BEGIN
- IF EXISTONPATH(UNITPATH[I]+'\'+NAME+'.TPU',N1) THEN FF := TRUE;
- END;
- END; { NEXT I }
- END;
-
- IF FF THEN BEGIN
- WRITELN('.TPU');
- FOPENI(F1,N1);
- FGET(F1,@TPUID,4);
- FSEEK(F1,8);
- FGETW(F1,I);
- FSEEK(F1,I);
- IF TPUID = 'TPU0' THEN LISTTPU0(NAME,4);
- IF TPUID = 'TPU5' THEN LISTTPU0(NAME,6);
- IF TPUID = 'TPU6' THEN LISTTPU6(NAME);
- FCLOSE(F1);
- END ELSE BEGIN
- WRITELN('.PAS nicht gefunden');
- END;
- END;
- {$I+}
- END;
-
-
- BEGIN
- WRITELN;
-
- AP := 0;
- TIEFE := 0;
-
- ALLE := STUPCASE(PARAMSTR(2)) = 'ALLE';
- CMDLIN := STUPCASE(PARAMSTR(1));
- IF (CMDLIN <> '') AND
- (CMDLIN <> '-?') AND
- (CMDLIN <> '/?') AND
- (CMDLIN <> '?') THEN BEGIN
- CMDLIN := JUSTFILENAME(CMDLIN);
- I := POS('.',CMDLIN);
- IF I > 0 THEN DELETE(CMDLIN,I,SUCC(LENGTH(CMDLIN)-I));
-
- { EINLESEN UNIT- DIRECTORY AUS TURBO.TP }
- FOR I := 1 TO 5 DO UNITPATH[I] := '';
- IF EXISTONPATH('TURBO.TP',UNITPATH[1]) THEN BEGIN
- ASSIGN(F,UNITPATH[1]);
- RESET(F);
- BLOCKREAD(F,BUF,8,I);
- CLOSE(F);
- UNITPATH[1] := '';
- I := $19C; J := 1;
- WHILE BUF[I] <> #0 DO BEGIN
- IF BUF[I] = ';' THEN INC(J) ELSE UNITPATH[J] := UNITPATH[J] + BUF[I];
- INC(I);
- END; { WHILE }
- END;
- {}
-
- IF NOT EXISTONPATH(CMDLIN+'.PAS',S) THEN
- IF NOT EXISTONPATH(CMDLIN+'.TPU',S) THEN S := '';
- S := JUSTPATHNAME(S);
- IF S = '' THEN GETDIR(0,S);
- IF S[LENGTH(S)] <> '\' THEN S := S+ '\';
-
- WRITE('USES- Liste für File : ',S);
- LISTE(CMDLIN,FALSE);
- END ELSE BEGIN
- WRITELN('UL PROGRAMMNAME listet alle geschachtelten USES- Anweisungen für ein ');
- WRITELN('PASCAL- Programm oder ein *.TPU- File (.PAS muß nicht angegeben werden)');
- WRITELN('');
- WRITELN('Die vorliegende Version ist etwas langsam bei großen Programmen, zeigt');
- WRITELN('dafür aber auch die INCLUDE- Files (rekursiv) und die mit $L eingebundenen');
- WRITELN('*.OBJ- Files an.');
- WRITELN('');
- WRITELN('Mehrfach benutzte UNITs werden nur beim 1. USES angezeigt.');
- WRITELN('');
- WRITELN('Wird als 2. Parameter ALLE angegeben, werden auch mehrfach benutzte');
- WRITELN('Units gelistet, für diese wird dann aber keine Rekursion mehr ausgeführt.');
- WRITELN('');
- WRITELN('Files werden auf dem PATH gesucht, Pfadnamen im Filename sind nicht möglich.');
- WRITELN('Ist kein *.PAS File zu finden, wird ein *.TPU File gesucht.');
- WRITELN('Es können TPUs Version 4.0, 5.0 und 5.5 verarbeitet werden.');
- WRITELN('');
- WRITELN('Wird TURBO.TP auf dem PATH gefunden, werden die dort gespeicherten UNIT-');
- WRITELN('Directories bei der Suche berücksichtigt.');
- WRITELN('');
- WRITELN('Ausgabeumleitung mit ''>'' ist möglich.');
- END;
-
- END.
-
-