home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / optipas / pretty.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-12-04  |  7.2 KB  |  231 lines

  1. (* ------------------------------------------------- *)
  2. (*                   PRETTY.PAS                      *)
  3. (*    Parameterauswertung und Fehlerbehandlung       *)
  4. (*    Sprache  : Turbo Pascal Version 6.0            *)
  5. (*    (c) 1991 Wilfried Lottermoser & DMV Verlag     *)
  6. (* ------------------------------------------------- *)
  7. {$A+,B-,G-,I-,O-,R-,S-,X+,D+,L+}
  8.  
  9. PROGRAM OptiPas; 
  10.  
  11. USES Dos, Standard; 
  12.  
  13. {$I PRETTY.INC}
  14.  
  15. CONST
  16.            { Aufrufparameter }
  17.   Stand                : BOOLEAN  = TRUE;
  18.   Struktur             : BOOLEAN  = TRUE;
  19.   Platzspar            : BOOLEAN  = FALSE;
  20.   Einruecktiefe        : BYTE     = 2;
  21.            { je Einrückebene }
  22.   MaxZeilenlaenge      : BYTE     = 255;
  23.  
  24.   Min_Maxzeilenlaenge  : BYTE     = 40;
  25.   Max_Einruecktiefe    : BYTE     = 8;
  26.            { je Einrückebene }
  27.   IoErrorNr            : WORD     = 0;
  28.  
  29.   Fehlersuchen         = 0; 
  30.   Kein_Dateiname       = 1;
  31.   Falscher_Parameter   = 2;
  32.   exe_com_bak_tpu      = 3;
  33.  
  34. TYPE
  35.   Zeiger    = ^Zeigertyp;
  36.   Zeigertyp = RECORD
  37.                 Name : STRING [12];
  38.                 Size : LONGINT;
  39.                 Next : Zeiger
  40.               END; 
  41.  
  42. VAR
  43.   DateiListe, Datei    : Zeiger;
  44.   QuellName            : STRING;
  45.   TempFile             : TEXT;
  46.   DirInfo              : SearchRec;
  47.   Path, OldPath        : PathStr;
  48.   Ext                  : ExtStr;
  49.   Name                 : NameStr;
  50.   Dir                  : DirStr;
  51.   Zeit1, Zeit2         : REAL;
  52.   n                    : INTEGER;
  53.  
  54.   PROCEDURE Error(FehlerNr : WORD);
  55.    { Falls Fehler : Fehlernummer wird ausgegeben und
  56.      Programm abgebrochen }
  57.   BEGIN
  58.     IF (DosError > 0) OR (IoErrorNr > 0) OR
  59.        (FehlerNr > 0) THEN WriteLn;
  60.     IF FehlerNr > 0 THEN BEGIN
  61.       CASE FehlerNr OF
  62.         1 : BEGIN
  63.               WriteLn('PRETTY optimiert '
  64.                      +'Pascalquelltexte');
  65.               WriteLn('Syntax:');
  66.               WriteLn('PRETTY [Pfad] Dateiname [d] '
  67.                      +'[s] [p] '
  68.                      +'[e:m] [z:n] ');
  69.               WriteLn('Parameter:');
  70.               WriteLn('d   : keine '
  71.                      +'Standardschreibweise aller '
  72.                      +'Pascalwörter');
  73.               WriteLn('s   : Kein automatisches '
  74.                      +'Strukturieren '
  75.                      +'logischer '
  76.                      +'Schleifen');
  77.               WriteLn('p   : platzsparendes '
  78.                      +'Einrücken');
  79.               WriteLn('e:m : m=Einrücktiefe für '
  80.                      +'durch '
  81.                      +'Strukturierung '
  82.                      +'eingerückte Zeilen ');
  83.               WriteLn('        Standardwert m=2, '
  84.                      +'Maximalwert=8');
  85.               WriteLn('z:n : n=maximale Zeilenlänge '
  86.                      +'für '
  87.                      +'automatischen '
  88.                      +'Zeilenvorschub');
  89.               WriteLn('        Standardwert n=255='
  90.                      +'ausgeschaltet, Minimalwert=40');
  91.             END;
  92.         2:BEGIN
  93.             WriteLn('falscher Parameter!');
  94.             WriteLn('OPTIPAS h für Hilfe');
  95.           END;
  96.         3:WriteLn('Keine EXE-,COM-,BAK- oder TPU-'
  97.             +'Dateien!'); 
  98.       END; 
  99.     END ELSE IF IoErrorNr > 0 THEN
  100.       CASE IoErrorNr OF
  101.         3 : WriteLn('Pfad nicht gefunden');
  102.         5 : WriteLn('Dateizugriff verweigert');
  103.       100 : WriteLn('Fehler beim Lesen');
  104.       101 : WriteLn('Kein Platz für Temporärfile '
  105.                    +'oder Schreibfehler');
  106.       150 : WriteLn('Diskette schreibgeschützt');
  107.       152 : WriteLn('Laufwerk nicht bereit');
  108.       ELSE
  109.         WriteLn('IO-Error ', IoErrorNr);
  110.     END ELSE IF DosError > 0 THEN
  111.       CASE DosError OF
  112.        18 : WriteLn('Datei nicht gefunden');
  113.       152 : WriteLn('Laufwerk nicht bereit');
  114.       ELSE
  115.         WriteLn('DOS-Error ', DosError);
  116.     END;
  117.     IF (DosError > 0) OR (IoErrorNr > 0) OR
  118.        (FehlerNr > 0) THEN BEGIN
  119.       Close(QuellDatei);
  120.       Close(ZielDatei);
  121.       Assign(TempFile, TempFileName);
  122.       Erase(TempFile);
  123.       Close(TempFile);
  124.       ChDir(OldPath);
  125.       Halt;
  126.     END;
  127.   END;
  128.  
  129.   PROCEDURE IoErrorChk;
  130.   BEGIN
  131.     IoErrorNr := IOResult;
  132.     IF IoErrorNr > 0 THEN Error(FehlerSuchen);
  133.   END;
  134.  
  135.   PROCEDURE Parameter;  { Parameterauswertung }
  136.   VAR
  137.     Code     : INTEGER;
  138.     Puffer,
  139.     Wert     : STRING;
  140.   BEGIN
  141.     IF (ParamStr(1) = '') OR (ParamStr(1) = 'h') OR
  142.        (ParamStr(1) = '?') THEN
  143.       Error(kein_Dateiname);
  144.     QuellName := ParamStr(1);
  145.     FOR n := 2 TO ParamCount DO BEGIN
  146.       Puffer := ParamStr(n);
  147.       Wert   := Copy(Puffer, 3, Length(puffer)-2);
  148.       IF ParamStr(n) = 'd' THEN
  149.         Stand := FALSE
  150.       ELSE IF ParamStr(n) = 's' THEN
  151.         Struktur := FALSE
  152.       ELSE IF ParamStr(n) = 'p' THEN
  153.         Platzspar := TRUE
  154.       ELSE IF (Puffer[1] = 'e') AND
  155.               (Puffer[2] = ':') THEN BEGIN
  156.         Val(Wert, Einruecktiefe, Code);
  157.         IF Code <> 0 THEN Error(falscher_parameter);
  158.       END ELSE IF (Puffer[1] = 'z') AND
  159.                   (Puffer[2] = ':') THEN BEGIN
  160.         Val(Wert, MaxZeilenlaenge, Code);
  161.         IF Code <> 0 THEN Error(falscher_parameter);
  162.       END ELSE
  163.         Error(falscher_parameter);
  164.     END;
  165.     IF Einruecktiefe > Max_Einruecktiefe THEN
  166.       Einruecktiefe := Max_Einruecktiefe;
  167.     IF MaxZeilenlaenge < Min_MaxZeilenlaenge THEN
  168.       Maxzeilenlaenge := Min_MaxZeilenlaenge;
  169.   END;
  170.  
  171.   FUNCTION Zeit : REAL;
  172.   VAR
  173.     h, m, s, s100 : WORD;
  174.   BEGIN
  175.     GetTime(h, m, s, s100);
  176.     Zeit := h*3600 + m*60 + s + s100/100;
  177.   END;
  178.  
  179. BEGIN
  180.   Parameter;
  181.   QuellName := Up(QuellName);
  182.   FSplit(QuellName, Dir, Name, Ext);
  183.   IF (Ext = '') OR (Ext = '.*') OR (Ext = '.???') THEN
  184.     ext := '.' + 'PAS';
  185.   QuellName := Name + Ext;
  186.   IF Dir[Length(Dir)] = '\' THEN
  187.     Dir := Copy(Dir, 1, Length(Dir)-1);
  188.   GetDir(0, OldPath);
  189.   IoErrorChk;
  190.   ChDir(Dir);
  191.   IoErrorChk;
  192.   Dateiliste := NIL;
  193.   DosError   := 0;
  194.   FindFirst(QuellName, AnyFile, DirInfo);
  195.   Error(FehlerSuchen);    { doserror ? }
  196.   WHILE DosError = 0 DO BEGIN { Dateiliste erstellen }
  197.     Ext := Copy(DirInfo.Name,Length(DirInfo.Name)-3,4);
  198.     IF (ext = '.EXE') OR (Ext = '.COM') OR
  199.        (Ext = '.BAK') OR (Ext = '.TPU') THEN
  200.       Error(exe_com_bak_tpu);
  201.     New(Datei);
  202.     Datei^.Name := DirInfo.Name;
  203.     Datei^.Size := DirInfo.Size;
  204.     Datei^.Next := DateiListe;
  205.     DateiListe  := Datei;
  206.     FindNext(DirInfo);
  207.   END;
  208.   IF DosError = 18 THEN DosError := 0;
  209.     { keine Datei mehr gefunden }
  210.   Datei := DateiListe;
  211.   REPEAT
  212.     WriteLn; 
  213.     WriteLn('Pretty   (c) 1991 Wilfried '
  214.            +'Lottermoser & DMV-Verlag');
  215.     WriteLn('optmizing...');  WriteLn(Datei^.Name);
  216.     Zeit1 := Zeit;
  217.     IoErrorNr := Optimize(Datei^.Name, Stand, Struktur,
  218.                           Platzspar, EinrueckTiefe,
  219.                           MaxZeilenlaenge);
  220.     Error(Fehlersuchen);  { ioerror ? }
  221.     Zeit2 := Zeit;
  222.     WriteLn(Zeit2-Zeit1:2:1,' sec. ', Datei^.Size,' '
  223.                            +'Bytes');
  224.     Datei := Datei^.Next;
  225.   UNTIL Datei = NIL;
  226.   ChDir(OldPath);
  227.   IoErrorChk;
  228. END.
  229. (* ------------------------------------------------- *)
  230. (*              Ende von PRETTY.PAS                  *)
  231.