home *** CD-ROM | disk | FTP | other *** search
- {* ------------------------------------------------ *}
- {* AUTOCONF.PAS *}
- {* Zur schnellen Anpassung der Autoexec.Bat-Datei *}
- {* (c) 1989 by Thomas Schoch & TOOLBOX *}
- {* ------------------------------------------------ *}
- {* Compiler: Turbo-Pascal 4.0 / 5.0 *}
- {* ------------------------------------------------ *}
-
- USES Dos,Crt;
-
- TYPE
- origline = STRING[120];
-
- CONST
- Maxlines = 255; {Maximale Länge der Datei}
- Esc = #27; Up = #72; Down = #80;
- PageUp = #73; PageDn = #81;
- Home = #71; _END = #79;
- F1 = #59; F2 = #60; F3 = #61; F4 = #62;
-
- VAR
- ynf : ARRAY [1..Maxlines] OF BOOLEAN;
- lines : ARRAY [1..Maxlines] OF origline;
-
- f,ff1 : TEXT;
- fn,fn1 : STRING[64];
-
- i,ii,tc : INTEGER;
- c : STRING[1];
-
- te : REAL;
- hour,minute,sec,sec100 : WORD;
-
- ok : BOOLEAN;
-
- akt,aktvt : INTEGER;
- Leer : STRING[80];
- ch : CHAR;
- Maxline : INTEGER;
-
-
- PROCEDURE ChkRem (i:INTEGER);
- VAR s:STRING[4]; n:INTEGER;
- BEGIN
- IF lines[i][1] = '@' THEN n:= 1 ELSE n:= 0;
- s := Copy(lines[i],1+n,4);
- IF ((s[1] = 'R') OR (s[1] = 'r')) AND
- ((s[2] = 'E') OR (s[2] = 'e')) AND
- ((s[3] = 'M') OR (s[3] = 'm')) AND
- (s[4] = ' ') THEN BEGIN
- lines[i] := Copy (lines[i],5+n,
- Length(lines[i])-4-n);
- ynf[i] := FALSE;
- END;
- END;
-
- PROCEDURE ReadFile;
- BEGIN
- Assign(f,fn);
- {$I-}
- Reset(f);
- {$I+}
- IF IOResult <> 0 THEN BEGIN
- WriteLn('Datei nicht gefunden');
- Halt;
- END;
- Assign(ff1,fn1);
- Rewrite(ff1);
- i := 1;
- WHILE (i<=255) AND (NOT(Eof(f))) DO BEGIN
- ReadLn(f,lines[i]);
- WriteLn(ff1,lines[i]);
- ynf[i] := TRUE;
- ChkRem(i);
- i := i+ 1;
- END;
- Maxline := i-1;
- Close(f); Close (ff1);
- END;
-
- PROCEDURE ShowOne(vt,n:INTEGER);
- BEGIN
- GotoXY(1,vt);
- IF ynf[n] THEN Write (CHAR(#251))
- ELSE Write (' ');
- Write (' ');
- WriteLn (Copy(Concat(lines[n]+Leer),1,76));
- END;
-
- PROCEDURE ShowFile(n,vt:INTEGER);
- BEGIN
- FOR i := 1 TO 23 DO BEGIN
- ShowOne(vt,n);
- vt := vt + 1; n:= n+1;
- END;
- END;
-
- PROCEDURE Process_Char;
- VAR xi : INTEGER;
- BEGIN
- IF (ch = F1) THEN BEGIN
- ynf[akt] := (ynf[akt] = FALSE);
- ShowOne(aktvt,akt);
- ch := Down;
- END;
- IF (ch = Down) OR (ch = #13)
- AND (akt < Maxlines) THEN BEGIN
- akt := akt + 1; aktvt := aktvt + 1;
- END;
- IF (ch = Up) AND (akt > 1) THEN BEGIN
- akt := akt - 1; aktvt := aktvt - 1;
- END;
- IF (ch = Home) THEN BEGIN
- aktvt := 1; akt := 1;
- ShowFile(akt,1);
- END;
- IF (ch = _END) THEN BEGIN
- aktvt := 1; akt := Maxline;
- ShowFile(akt,1);
- END;
- IF ch = F3 THEN BEGIN
- FOR xi := 1 TO Maxlines DO
- ynf[xi] := FALSE;
- ShowFile(akt-aktvt+1,1);
- END;
- IF ch = F4 THEN BEGIN
- FOR xi := 1 TO Maxlines DO
- ynf[xi] := TRUE;
- ShowFile(akt-aktvt+1,1);
- END;
- IF (aktvt < 1) AND (akt > 0) THEN BEGIN
- aktvt := 1;
- ShowFile(akt,1);
- END;
- IF aktvt > 23 THEN BEGIN
- ShowFile(akt-22,1);
- aktvt := 23;
- END;
- IF (ch = PageUp) THEN
- FOR xi := 1 TO 22 DO BEGIN
- ch := Up;
- Process_Char;
- END;
- IF (ch = PageDn) THEN BEGIN
- FOR xi := 1 TO 22 DO BEGIN
- ch := Down;
- Process_Char;
- END;
- END;
- END;
-
- PROCEDURE CopyOrig;
- BEGIN
- Assign(f,fn1);
- Rewrite(f);
- FOR i := 1 TO Maxlines DO
- IF lines[i] <> '' THEN BEGIN
- IF NOT(ynf[i]) THEN Write(f,'REM ');
- WriteLn(f,lines[i]);
- END;
- Close(f);
- END;
-
- PROCEDURE Select;
- VAR x:REAL;
- s:STRING;
-
- BEGIN
- akt := 1; aktvt := 1;
- ClrScr;
- ShowFile(akt,aktvt);
- ok := TRUE;
- GotoXY(1,25);
- Write('Esc=Abbruch│ F1=Toggle│ F2=speichern│ ');
- Write('F3=alle ein│ F4=alle aus│ PgUp │ PgDn │');
- Write(Chr(24),Chr(25));
- WHILE ok DO BEGIN
- s := lines[akt];
- GotoXY(3,aktvt); Write(Chr(26));
- ch := ReadKey;
- IF ch = #0 THEN ch:= ReadKey;
- GotoXY(3,aktvt); Write(' ');
- Process_Char;
- IF (ch = Esc) OR (ch = F2) THEN ok := FALSE;
- END;
- ClrScr;
- IF ch = F2 THEN BEGIN
- WriteLn('Changes accepted.');
- WriteLn('Just a moment!');
- CopyOrig;
- END ELSE WriteLn('Changes ignored...');
- END;
-
- FUNCTION TimeEnd:BOOLEAN;
- BEGIN
- GetTime(hour,minute,sec,sec100);
- TimeEnd := ( (hour*3600)+(minute*60)+sec >= te);
- END;
-
-
- BEGIN
- tc := 10; {Default-Werte}
- fn := 'C:\AUTOEXEC.';
- fn1 := 'C:\$$$.BAT';
- FillChar(Leer,SizeOf(Leer),' ');
- Leer[0] := #80;
- FOR i := 1 TO Maxlines DO BEGIN
- lines[i] := '';
- ynf[i] := FALSE;
- END;
-
- FOR i := 1 TO ParamCount DO BEGIN
- c := Copy(ParamStr(i),1,1);
- IF (c >= '0') AND (c <= '9') THEN
- Val(ParamStr(i),tc,ii)
- ELSE
- IF ((c >= 'a') AND (c <= 'z')) OR
- ((c >= 'A') AND (c <= 'Z')) THEN
- fn := ParamStr(i)
- ELSE
- IF (c = '-') THEN
- fn1 := Copy(ParamStr(i),2,
- Length(ParamStr(i))-1);
- END;
-
- IF tc > 60 THEN tc := 60;
- GetTime(hour,minute,sec,sec100); {Aktuelle Zeit}
- te := (hour*3600)+(minute*60)+sec+tc; {End Time}
- ok := FALSE;
- ReadFile;
- WriteLn ('<Esc>: ohne Änderung weitermachen');
- WriteLn ('Beliebige andere Taste: Autoexec ändern');
- WHILE (NOT(ok)) AND (NOT(TimeEnd)) DO BEGIN
- ok := KeyPressed;
- END;
- IF KeyPressed THEN c[1]:=ReadKey;
- IF ok THEN ok := (c[1] <> #27);
- IF NOT(ok) THEN
- CopyOrig
- ELSE BEGIN
- ClrScr;
- Select;
- END;
- END.
- {* ------------------------------------------------- *}
- {* Ende von AUTOCONF.PAS *}