home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* PRETTY.PAS *)
- (* Parameterauswertung und Fehlerbehandlung *)
- (* Sprache : Turbo Pascal Version 6.0 *)
- (* (c) 1991 Wilfried Lottermoser & DMV Verlag *)
- (* ------------------------------------------------- *)
- {$A+,B-,G-,I-,O-,R-,S-,X+,D+,L+}
-
- PROGRAM OptiPas;
-
- USES Dos, Standard;
-
- {$I PRETTY.INC}
-
- CONST
- { Aufrufparameter }
- Stand : BOOLEAN = TRUE;
- Struktur : BOOLEAN = TRUE;
- Platzspar : BOOLEAN = FALSE;
- Einruecktiefe : BYTE = 2;
- { je Einrückebene }
- MaxZeilenlaenge : BYTE = 255;
-
- Min_Maxzeilenlaenge : BYTE = 40;
- Max_Einruecktiefe : BYTE = 8;
- { je Einrückebene }
- IoErrorNr : WORD = 0;
-
- Fehlersuchen = 0;
- Kein_Dateiname = 1;
- Falscher_Parameter = 2;
- exe_com_bak_tpu = 3;
-
- TYPE
- Zeiger = ^Zeigertyp;
- Zeigertyp = RECORD
- Name : STRING [12];
- Size : LONGINT;
- Next : Zeiger
- END;
-
- VAR
- DateiListe, Datei : Zeiger;
- QuellName : STRING;
- TempFile : TEXT;
- DirInfo : SearchRec;
- Path, OldPath : PathStr;
- Ext : ExtStr;
- Name : NameStr;
- Dir : DirStr;
- Zeit1, Zeit2 : REAL;
- n : INTEGER;
-
- PROCEDURE Error(FehlerNr : WORD);
- { Falls Fehler : Fehlernummer wird ausgegeben und
- Programm abgebrochen }
- BEGIN
- IF (DosError > 0) OR (IoErrorNr > 0) OR
- (FehlerNr > 0) THEN WriteLn;
- IF FehlerNr > 0 THEN BEGIN
- CASE FehlerNr OF
- 1 : BEGIN
- WriteLn('PRETTY optimiert '
- +'Pascalquelltexte');
- WriteLn('Syntax:');
- WriteLn('PRETTY [Pfad] Dateiname [d] '
- +'[s] [p] '
- +'[e:m] [z:n] ');
- WriteLn('Parameter:');
- WriteLn('d : keine '
- +'Standardschreibweise aller '
- +'Pascalwörter');
- WriteLn('s : Kein automatisches '
- +'Strukturieren '
- +'logischer '
- +'Schleifen');
- WriteLn('p : platzsparendes '
- +'Einrücken');
- WriteLn('e:m : m=Einrücktiefe für '
- +'durch '
- +'Strukturierung '
- +'eingerückte Zeilen ');
- WriteLn(' Standardwert m=2, '
- +'Maximalwert=8');
- WriteLn('z:n : n=maximale Zeilenlänge '
- +'für '
- +'automatischen '
- +'Zeilenvorschub');
- WriteLn(' Standardwert n=255='
- +'ausgeschaltet, Minimalwert=40');
- END;
- 2:BEGIN
- WriteLn('falscher Parameter!');
- WriteLn('OPTIPAS h für Hilfe');
- END;
- 3:WriteLn('Keine EXE-,COM-,BAK- oder TPU-'
- +'Dateien!');
- END;
- END ELSE IF IoErrorNr > 0 THEN
- CASE IoErrorNr OF
- 3 : WriteLn('Pfad nicht gefunden');
- 5 : WriteLn('Dateizugriff verweigert');
- 100 : WriteLn('Fehler beim Lesen');
- 101 : WriteLn('Kein Platz für Temporärfile '
- +'oder Schreibfehler');
- 150 : WriteLn('Diskette schreibgeschützt');
- 152 : WriteLn('Laufwerk nicht bereit');
- ELSE
- WriteLn('IO-Error ', IoErrorNr);
- END ELSE IF DosError > 0 THEN
- CASE DosError OF
- 18 : WriteLn('Datei nicht gefunden');
- 152 : WriteLn('Laufwerk nicht bereit');
- ELSE
- WriteLn('DOS-Error ', DosError);
- END;
- IF (DosError > 0) OR (IoErrorNr > 0) OR
- (FehlerNr > 0) THEN BEGIN
- Close(QuellDatei);
- Close(ZielDatei);
- Assign(TempFile, TempFileName);
- Erase(TempFile);
- Close(TempFile);
- ChDir(OldPath);
- Halt;
- END;
- END;
-
- PROCEDURE IoErrorChk;
- BEGIN
- IoErrorNr := IOResult;
- IF IoErrorNr > 0 THEN Error(FehlerSuchen);
- END;
-
- PROCEDURE Parameter; { Parameterauswertung }
- VAR
- Code : INTEGER;
- Puffer,
- Wert : STRING;
- BEGIN
- IF (ParamStr(1) = '') OR (ParamStr(1) = 'h') OR
- (ParamStr(1) = '?') THEN
- Error(kein_Dateiname);
- QuellName := ParamStr(1);
- FOR n := 2 TO ParamCount DO BEGIN
- Puffer := ParamStr(n);
- Wert := Copy(Puffer, 3, Length(puffer)-2);
- IF ParamStr(n) = 'd' THEN
- Stand := FALSE
- ELSE IF ParamStr(n) = 's' THEN
- Struktur := FALSE
- ELSE IF ParamStr(n) = 'p' THEN
- Platzspar := TRUE
- ELSE IF (Puffer[1] = 'e') AND
- (Puffer[2] = ':') THEN BEGIN
- Val(Wert, Einruecktiefe, Code);
- IF Code <> 0 THEN Error(falscher_parameter);
- END ELSE IF (Puffer[1] = 'z') AND
- (Puffer[2] = ':') THEN BEGIN
- Val(Wert, MaxZeilenlaenge, Code);
- IF Code <> 0 THEN Error(falscher_parameter);
- END ELSE
- Error(falscher_parameter);
- END;
- IF Einruecktiefe > Max_Einruecktiefe THEN
- Einruecktiefe := Max_Einruecktiefe;
- IF MaxZeilenlaenge < Min_MaxZeilenlaenge THEN
- Maxzeilenlaenge := Min_MaxZeilenlaenge;
- END;
-
- FUNCTION Zeit : REAL;
- VAR
- h, m, s, s100 : WORD;
- BEGIN
- GetTime(h, m, s, s100);
- Zeit := h*3600 + m*60 + s + s100/100;
- END;
-
- BEGIN
- Parameter;
- QuellName := Up(QuellName);
- FSplit(QuellName, Dir, Name, Ext);
- IF (Ext = '') OR (Ext = '.*') OR (Ext = '.???') THEN
- ext := '.' + 'PAS';
- QuellName := Name + Ext;
- IF Dir[Length(Dir)] = '\' THEN
- Dir := Copy(Dir, 1, Length(Dir)-1);
- GetDir(0, OldPath);
- IoErrorChk;
- ChDir(Dir);
- IoErrorChk;
- Dateiliste := NIL;
- DosError := 0;
- FindFirst(QuellName, AnyFile, DirInfo);
- Error(FehlerSuchen); { doserror ? }
- WHILE DosError = 0 DO BEGIN { Dateiliste erstellen }
- Ext := Copy(DirInfo.Name,Length(DirInfo.Name)-3,4);
- IF (ext = '.EXE') OR (Ext = '.COM') OR
- (Ext = '.BAK') OR (Ext = '.TPU') THEN
- Error(exe_com_bak_tpu);
- New(Datei);
- Datei^.Name := DirInfo.Name;
- Datei^.Size := DirInfo.Size;
- Datei^.Next := DateiListe;
- DateiListe := Datei;
- FindNext(DirInfo);
- END;
- IF DosError = 18 THEN DosError := 0;
- { keine Datei mehr gefunden }
- Datei := DateiListe;
- REPEAT
- WriteLn;
- WriteLn('Pretty (c) 1991 Wilfried '
- +'Lottermoser & DMV-Verlag');
- WriteLn('optmizing...'); WriteLn(Datei^.Name);
- Zeit1 := Zeit;
- IoErrorNr := Optimize(Datei^.Name, Stand, Struktur,
- Platzspar, EinrueckTiefe,
- MaxZeilenlaenge);
- Error(Fehlersuchen); { ioerror ? }
- Zeit2 := Zeit;
- WriteLn(Zeit2-Zeit1:2:1,' sec. ', Datei^.Size,' '
- +'Bytes');
- Datei := Datei^.Next;
- UNTIL Datei = NIL;
- ChDir(OldPath);
- IoErrorChk;
- END.
- (* ------------------------------------------------- *)
- (* Ende von PRETTY.PAS *)
-