Das Accessory âCONTROL. ACCâ erlaubt es dem Benutzer, die Standardwerte fĂźr Drucker und Konsole seinen WĂźnschen entsprechend zu verändern. Werden diese veränderten Werte nun in der Datei âDESKTOP.INFâ gespeichert, so werden die Ăźblichen Werte beim Booten durch die veränderten Werte ersetzt - vorausgesetzt allerdings, das Accessory befindet sich auf der Bootdiskette. Falls es nicht vorhanden ist, bleiben die Standardwerte unverändert, im Gegensatz etwa zur V.24-Einstellung.
Mein Programm umgeht diesen Fehler. Dadurch spart es das speicherplatzfressende Kontrollfeld und zwei Einträge im DESK-Menß, wo ßberhaupt nur sechs zugelassen sind. Es wird lediglich nach dem Booten einmal gestartet, wozu man es am besten im AUTO-Ordner ablegt. Danach belegt das Programm weder Speicherplatz noch Einträge im DESK-Menß.
Zur Funktionsweise
Das Programm liest aus der Datei DESKTOP.INFâ die Werte fĂźr die Druckeranpassung und das Kontrollfeld und ändert mit XBIOS-Aufrufen die Standardwerte. Sollte die Datei 'DESKTOP.INFâ auf der Diskette nicht vorhanden sein, bricht das Programm mit einer Fehlermeldung ab. Das ist aber kein Problem; Wenn diese Datei nicht vorhanden ist, gibt es auch keine vom Benutzer abgeänderten Werte.
Das Listing meines Programms âCONTROLâ ist in ST-Pascal geschrieben. Verbesserungsvorschläge sind selbstverständlich willkommen, obwohl ich glaube, daĂ das Programm fĂźr die Praxis geeignet ist. Auf meinem ST versieht es schon längere Zeit seinen Dienst.
program Control; { Version 01.03.87 }
{ ersetzt Control.Acc und spart somit zwei Eintraege im âDeskâ }
{ und den Speicherplatz dafuer ein. Dieses Programm sollte im }
{ AUTO-Ordner abgelegt werden. }
{ von Volker Kaechele, Goldouer.lestr. 39 3 7032 Sindelfingen }
type str255=string[255];
var bz,cz:str255;
procedure Zeilen_holen(var bz,cz str255);
var f:text;
begin { Zeilen_holen }
reset(f,'Desktop.Inf');
readln(f, bz) ; { die erste Zeile enthält hierfuer Unwichtiges }
readln(f,bz); { Informationen Ăźber Druckeranpassung }
readln(f,cz); { Kontrollfeld }
close(f);
end { Zeilen_holen };
procedure Druckeranpassung(bz:str255);
{ setzt die Druckerstandardwerte }
var c,i:integer;
procedure setprt(config:integer);
xbios(33);
begin { Druckeranpassung }
c:=0;
for i:=6 downto 1 do
c:=2*c+(ord(bz[i+2])-48); { Konfigurationsbyte berechnen }
setprt(c);
end; { Druckeranpassung }
procedure Farbpalette(cz:str255); { setzt die Farbpalette wie }
type word16=array[1..16] of integer;{ im Kontrollfeld definiert }
word16_ptr=^word16;
var i:integer;
ptr:word16_ptr;
procedure setPalette(palette:word16_ptr);
xbios(6);
begin { Farbpalette }
new(ptr);
i:=3;
while i<=48 do
begin { Farbanteil rot gruen }
ptr^[trunc(i/3)]:=256*(ord(cz[i])-48)+16*(ord(cz[i+1])-48) +ord(cz[i+2])-48; { blau festsetzen }
i:= i +3 ;
end { while };
setPalette(ptr);
end; { Farbpalette }
procedure Wiederholrate(cz:str255); { setzt die Wiederholrate }
var zeit,rate:integer; { und -zeit }
procedure kbrate(zeit:integer;rate:integer);
xbios(35);
begin { Wiederholrate }
zeit:=16*(ord(cz[54])-48)+ord(cz[55])-48; { Zeit und... }
rate:= 16*(ord(cz[56])-48)+ord(cz[57])-48; { Rate berechnen }
kbrate(zeit, rate);
end; { Wiederholrate }
procedure Click(cz:str255);{ Keyclick und Glocke an-/abschalten }
const BCLR=2232;
BSET=2296;
RTS=20085;
type mcode=array[1..7] of integer;
var code:mcode;
procedure supexec(var codeptr:mcode);
xbios(38);
begin { Click }
if cz[53]='0' then code[1]:= BCLR { Maschinenprogramm laden... }
else code[1]:= BSET;
code[2]:= 0;
code[3]:= $484;
if cz[52]='0' then code[4]:= BCLR
else code[4]:= BSET;
code[5]:= 2;
code[6]:= $484;
code[7]:= RTS;
supexec(Code); { ... und im Supervisormodus. }
end; { Click } { ausfuehren }
begin { Hauptprogramm }
Zeilen_holen(bz,cz);
Druckeranpassung(bz);
Farbpalette(cz);
Wiederholrate(cz);
Click(cz);
end.
Listing 1