home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 08 / ldm / autoconf.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1989-06-06  |  5.5 KB  |  246 lines

  1. {* ------------------------------------------------ *}
  2. {*                   AUTOCONF.PAS                   *}
  3. {*  Zur schnellen Anpassung der Autoexec.Bat-Datei  *}
  4. {*      (c) 1989 by Thomas Schoch & TOOLBOX         *}
  5. {* ------------------------------------------------ *}
  6. {*        Compiler: Turbo-Pascal 4.0 / 5.0          *}
  7. {* ------------------------------------------------ *}
  8.  
  9. USES Dos,Crt;
  10.  
  11. TYPE
  12.   origline = STRING[120];
  13.  
  14. CONST
  15.   Maxlines = 255; {Maximale Länge der Datei}
  16.   Esc = #27; Up = #72; Down = #80;
  17.   PageUp = #73; PageDn = #81;
  18.   Home = #71; _END = #79;
  19.   F1 = #59; F2 = #60; F3 = #61; F4 = #62;
  20.  
  21. VAR
  22.   ynf   : ARRAY [1..Maxlines] OF BOOLEAN;
  23.   lines : ARRAY [1..Maxlines] OF origline;
  24.  
  25.   f,ff1  : TEXT;
  26.   fn,fn1 : STRING[64];
  27.  
  28.   i,ii,tc : INTEGER;
  29.   c : STRING[1];
  30.  
  31.   te : REAL;
  32.   hour,minute,sec,sec100 : WORD;
  33.  
  34.   ok : BOOLEAN;
  35.  
  36.   akt,aktvt : INTEGER;
  37.   Leer : STRING[80];
  38.   ch : CHAR;
  39.   Maxline : INTEGER;
  40.  
  41.  
  42. PROCEDURE ChkRem (i:INTEGER);
  43. VAR s:STRING[4]; n:INTEGER;
  44. BEGIN
  45.   IF lines[i][1] = '@' THEN n:= 1 ELSE n:= 0;
  46.   s := Copy(lines[i],1+n,4);
  47.   IF ((s[1] = 'R') OR (s[1] = 'r')) AND
  48.      ((s[2] = 'E') OR (s[2] = 'e')) AND
  49.      ((s[3] = 'M') OR (s[3] = 'm')) AND
  50.      (s[4] = ' ') THEN BEGIN
  51.     lines[i] := Copy (lines[i],5+n,
  52.                                 Length(lines[i])-4-n);
  53.     ynf[i] := FALSE;
  54.   END;
  55. END;
  56.  
  57. PROCEDURE ReadFile;
  58. BEGIN
  59.   Assign(f,fn);
  60. {$I-}
  61.   Reset(f);
  62. {$I+}
  63.   IF IOResult <> 0 THEN BEGIN
  64.     WriteLn('Datei nicht gefunden');
  65.     Halt;
  66.   END;
  67.   Assign(ff1,fn1);
  68.   Rewrite(ff1);
  69.   i := 1;
  70.   WHILE (i<=255) AND (NOT(Eof(f))) DO BEGIN
  71.     ReadLn(f,lines[i]);
  72.     WriteLn(ff1,lines[i]);
  73.     ynf[i] := TRUE;
  74.     ChkRem(i);
  75.     i := i+ 1;
  76.   END;
  77.   Maxline := i-1;
  78.   Close(f); Close (ff1);
  79. END;
  80.  
  81. PROCEDURE ShowOne(vt,n:INTEGER);
  82. BEGIN
  83.   GotoXY(1,vt);
  84.   IF ynf[n] THEN Write (CHAR(#251))
  85.             ELSE Write (' ');
  86.   Write   ('  ');
  87.   WriteLn (Copy(Concat(lines[n]+Leer),1,76));
  88. END;
  89.  
  90. PROCEDURE ShowFile(n,vt:INTEGER);
  91. BEGIN
  92.   FOR i := 1 TO 23 DO BEGIN
  93.     ShowOne(vt,n);
  94.     vt := vt + 1; n:= n+1;
  95.   END;
  96. END;
  97.  
  98. PROCEDURE Process_Char;
  99. VAR xi : INTEGER;
  100. BEGIN
  101.   IF (ch = F1) THEN BEGIN
  102.     ynf[akt] := (ynf[akt] = FALSE);
  103.     ShowOne(aktvt,akt);
  104.     ch := Down;
  105.   END;
  106.   IF (ch = Down) OR (ch = #13)
  107.      AND (akt < Maxlines) THEN BEGIN
  108.     akt := akt + 1; aktvt := aktvt + 1;
  109.   END;
  110.   IF (ch = Up) AND (akt > 1) THEN BEGIN
  111.     akt := akt - 1; aktvt := aktvt - 1;
  112.   END;
  113.   IF (ch = Home) THEN BEGIN
  114.     aktvt := 1; akt := 1;
  115.     ShowFile(akt,1);
  116.   END;
  117.   IF (ch = _END) THEN BEGIN
  118.     aktvt := 1; akt := Maxline;
  119.     ShowFile(akt,1);
  120.   END;
  121.   IF ch = F3 THEN BEGIN
  122.     FOR xi := 1 TO Maxlines DO
  123.       ynf[xi] := FALSE;
  124.     ShowFile(akt-aktvt+1,1);
  125.   END;
  126.   IF ch = F4 THEN BEGIN
  127.     FOR xi := 1 TO Maxlines DO
  128.       ynf[xi] := TRUE;
  129.     ShowFile(akt-aktvt+1,1);
  130.   END;
  131.   IF (aktvt < 1) AND (akt > 0) THEN BEGIN
  132.     aktvt := 1;
  133.     ShowFile(akt,1);
  134.   END;
  135.   IF aktvt > 23 THEN BEGIN
  136.     ShowFile(akt-22,1);
  137.     aktvt := 23;
  138.   END;
  139.   IF (ch = PageUp) THEN
  140.     FOR xi := 1 TO 22 DO BEGIN
  141.       ch := Up;
  142.       Process_Char;
  143.     END;
  144.   IF (ch = PageDn) THEN BEGIN
  145.     FOR xi := 1 TO 22 DO BEGIN
  146.       ch := Down;
  147.       Process_Char;
  148.     END;
  149.   END;
  150. END;
  151.  
  152. PROCEDURE CopyOrig;
  153. BEGIN
  154.   Assign(f,fn1);
  155.   Rewrite(f);
  156.   FOR i := 1 TO Maxlines DO
  157.     IF lines[i] <> '' THEN BEGIN
  158.       IF NOT(ynf[i]) THEN Write(f,'REM ');
  159.       WriteLn(f,lines[i]);
  160.     END;
  161.   Close(f);
  162. END;
  163.  
  164. PROCEDURE Select;
  165. VAR x:REAL;
  166.     s:STRING;
  167.  
  168. BEGIN
  169.   akt := 1; aktvt := 1;
  170.   ClrScr;
  171.   ShowFile(akt,aktvt);
  172.   ok := TRUE;
  173.   GotoXY(1,25);
  174.   Write('Esc=Abbruch│ F1=Toggle│ F2=speichern│ ');
  175.   Write('F3=alle ein│ F4=alle aus│ PgUp │ PgDn │');
  176.   Write(Chr(24),Chr(25));
  177.   WHILE ok DO BEGIN
  178.     s := lines[akt];
  179.     GotoXY(3,aktvt); Write(Chr(26));
  180.     ch := ReadKey;
  181.     IF ch = #0 THEN ch:= ReadKey;
  182.     GotoXY(3,aktvt); Write(' ');
  183.     Process_Char;
  184.     IF (ch = Esc) OR (ch = F2) THEN ok := FALSE;
  185.   END;
  186.   ClrScr;
  187.   IF ch = F2 THEN BEGIN
  188.     WriteLn('Changes accepted.');
  189.     WriteLn('Just a moment!');
  190.     CopyOrig;
  191.   END ELSE WriteLn('Changes ignored...');
  192. END;
  193.  
  194. FUNCTION TimeEnd:BOOLEAN;
  195. BEGIN
  196.   GetTime(hour,minute,sec,sec100);
  197.   TimeEnd := ( (hour*3600)+(minute*60)+sec >= te);
  198. END;
  199.  
  200.  
  201. BEGIN
  202.   tc := 10;                 {Default-Werte}
  203.   fn := 'C:\AUTOEXEC.';
  204.   fn1 := 'C:\$$$.BAT';
  205.   FillChar(Leer,SizeOf(Leer),' ');
  206.   Leer[0] := #80;
  207.   FOR i := 1 TO Maxlines DO BEGIN
  208.     lines[i] := '';
  209.     ynf[i] := FALSE;
  210.   END;
  211.  
  212.   FOR i := 1 TO ParamCount DO BEGIN
  213.     c := Copy(ParamStr(i),1,1);
  214.     IF (c >= '0') AND (c <= '9') THEN
  215.       Val(ParamStr(i),tc,ii)
  216.     ELSE
  217.       IF ((c >= 'a') AND (c <= 'z')) OR
  218.          ((c >= 'A') AND (c <= 'Z')) THEN
  219.         fn := ParamStr(i)
  220.       ELSE
  221.         IF (c = '-') THEN
  222.           fn1 := Copy(ParamStr(i),2,
  223.                                Length(ParamStr(i))-1);
  224.   END;
  225.  
  226.   IF tc > 60 THEN tc := 60;
  227.   GetTime(hour,minute,sec,sec100);     {Aktuelle Zeit}
  228.   te := (hour*3600)+(minute*60)+sec+tc; {End Time}
  229.   ok := FALSE;
  230.   ReadFile;
  231.   WriteLn ('<Esc>: ohne Änderung weitermachen');
  232.   WriteLn ('Beliebige andere Taste: Autoexec ändern');
  233.   WHILE (NOT(ok)) AND (NOT(TimeEnd))  DO BEGIN
  234.     ok := KeyPressed;
  235.   END;
  236.   IF KeyPressed THEN c[1]:=ReadKey;
  237.   IF ok THEN ok := (c[1] <> #27);
  238.   IF NOT(ok) THEN
  239.     CopyOrig
  240.   ELSE BEGIN
  241.     ClrScr;
  242.     Select;
  243.   END;
  244. END.
  245. {* ------------------------------------------------- *}
  246. {*             Ende von AUTOCONF.PAS                 *}