ST-Tips: CONTROL.ACC

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


Volker Kächele
Aus: ST-Computer 05 / 1987, Seite 53

Links

Copyright-Bestimmungen: siehe Über diese Seite