home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
setup.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-04-15
|
21KB
|
557 lines
{---------------------------------------------------------------------------}
{ SETUP.PAS }
{ Ein Werkzeug zur Druckerinitialisierung }
{ fuer Panasonic KX-P1092 und Epson-Kompatible. }
{ }
{---------------------------------------------------------------------------}
PROGRAM SetUp;
CONST
max = 10; { maximale Anzahl Betriebsarten/Gruppe }
Bell = ^G; { ASCII-Zeichen laesst Ton ertoenen }
up = ^E; { Control-Zeichen zur Cursorsteuerung }
down = ^X;
right = ^D;
left = ^S;
enter = ^M;
esc = #27;
backspace = ^H;
TYPE
Arten = (Schriften,ZeilenVor,PapierVor,ZeichenSt,Divers);
str20 = STRING[ 20];
str128 = STRING[128];
Beschreiber =
RECORD
Text : str20; { Betriebsarten Beschreibung }
Init : STRING[6]; { Betriebsarten Initialsierung-Sequenz }
DeInit: STRING[6]; { Betriebsarten Deinitialisieruns-Sequenz }
Parm : BYTE; { wenn zur Initialisierung ein Parameter }
{ erfragt werden soll ist dieser Wert<>0 }
Grp : BYTE; { Priority der Beriebsart:
0=Default Wert einer Gruppe,
nach dem Reset anzuzeigen
1=nach dem Reset der Bertiebsart selektiere
den Default-Wert der Gruppe
2=Diese Betriebsart kann normal gesetzt
und rueckgesetzt werden
3=Definiertes Ruecksetzten nicht moeglich
4=Nach dem Reset setzen. Wird benutzt bei
Betriebsarten anstatt Grp=0
7=fluechtige Betriebsart Einstellung z.b LF
8=reserviertes Feld, nicht benutzt
9=General Reset, IN allen Gruppen Default
Werte anzeigen }
Aktv : BOOLEAN; { Status der Betriebsart valid/invalid }
END;
Menue =
RECORD
Kopf : str20; { Titel eines Untermenues }
Anzahl: INTEGER; { Betriebsarten eines Untermenues }
Xpos : BYTE; { Anzeige eines Untermenues, an }
Ypos : BYTE; { Bildschirmposition X,Y }
Rumpf : ARRAY[1..max] OF Beschreiber;
END;
CONST
Menuefeld : ARRAY[Arten] OF Menue =
((Kopf :'** SCHRIFTARTEN **' ; Anzahl:9; Xpos:2; Ypos:5;
Rumpf :
((Text:'Pica ';Init:#27#80 ;DeInit:#0
;Parm:0 ;Grp:0 ;Aktv:TRUE),
(Text:'Elite ';Init:#27#77 ;DeInit:#27#80
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Komprimiert ';Init:#15 ;DeInit:#18
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Fett ';Init:#27#69 ;DeInit:#27#70
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'Breit ';Init:#27#87#1 ;DeInit:#27#87#0
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'Kursiv-Schrift ';Init:#27#52 ;DeInit:#27#53
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'NLQ-Schrift ';Init:#27#110 ;DeInit:#27#80
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Proport. Schrift ';Init:#27#111 ;DeInit:#27#80
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Proport. Abstand ';Init:#27#112#1 ;DeInit:#27#112#0
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE))),
(Kopf :'** ZEILENSPRUNG **'; Anzahl:5; Xpos:22; Ypos:5;
Rumpf :
((Text:'2,47mm (7/72i) ';Init:#27#49 ;DeInit:#27#50
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'3,2 mm (1/8 i) ';Init:#27#48 ;DeInit:#27#50
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'4,2 mm (1/6 i) ';Init:#27#50 ;DeInit:#0
;Parm:0 ;Grp:0 ;Aktv:TRUE ),
(Text:'[xx]/72 i ';Init:#27#65 ;DeInit:#27#50
;Parm:1 ;Grp:1 ;Aktv:FALSE),
(Text:'[xxx]/216i ';Init:#27#51 ;DeInit:#27#50
;Parm:1 ;Grp:1 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE))),
(Kopf :'** DRUCKBEREICH **'; Anzahl:3; Xpos:22; Ypos:12;
Rumpf :
((Text:'[xxx] Ueber Perfor';Init:#27#78 ;DeInit:#27#79
;Parm:1 ;Grp:2 ;Aktv:FALSE),
(Text:'[xxx] Rand rechts ';Init:#27#81 ;DeInit:#0
;Parm:1 ;Grp:3 ;Aktv:FALSE),
(Text:'[xxx] Rand links ';Init:#27#108 ;DeInit:#0
;Parm:1 ;Grp:3 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE))),
(Kopf :'** ZEICHENSATZ **'; Anzahl:10; Xpos:42; Ypos:5;
Rumpf :
((Text:'USA ';Init:#27#82#0 ;DeInit:#27#82#0
;Parm:0 ;Grp:0 ;Aktv:TRUE ),
(Text:'England ';Init:#27#82#3 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Deutschland ';Init:#27#82#2 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Frankreich ';Init:#27#82#1 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Italien ';Init:#27#82#6 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Schweden ';Init:#27#82#5 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Spanien ';Init:#27#82#7 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Japan ';Init:#27#82#8 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Norwegen ';Init:#27#82#9 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE),
(Text:'Daenemark ';Init:#27#82#10 ;DeInit:#27#82#0
;Parm:0 ;Grp:1 ;Aktv:FALSE))),
(Kopf :'** STEUERUNG **'; Anzahl:8; Xpos:62; Ypos:5;
Rumpf :
((Text:'Reset ';Init:#27#64 ;DeInit:#0
;Parm:0 ;Grp:9 ;Aktv:FALSE),
(Text:'Zeilenvorschub ';Init:#10 ;DeInit:#0
;Parm:0 ;Grp:7 ;Aktv:FALSE),
(Text:'Seitenvorschub ';Init:#12 ;DeInit:#0
;Parm:0 ;Grp:7 ;Aktv:FALSE),
(Text:'Halbe Geschwindkt ';Init:#27#115#1 ;DeInit:#27#115#0
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'Druck in e.Richtng';Init:#27#85#1 ;DeInit:#27#85#0
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'Papierendekennung ';Init:#27#57 ;DeInit:#27#56
;Parm:0 ;Grp:4 ;Aktv:TRUE ),
(Text:'Testbetrieb ';Init:#27#105#1 ;DeInit:#27#105#0
;Parm:0 ;Grp:2 ;Aktv:FALSE),
(Text:'Probedruck' ;Init:'' ;DeInit:''
;Parm:255 ;Grp:7 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE),
(Text:'' ;Init:'' ;DeInit:''
;Parm:0 ;Grp:8 ;Aktv:FALSE))));
VAR
Xalt, Yalt: INTEGER; { fuer SHARP vom Type BYTE ! }
Ch : CHAR;
f : INTEGER;
P : Arten;
Init : BOOLEAN;
{---------------------------------------------------------------------------}
PROCEDURE DruckerReset;
BEGIN Write(Lst, esc, '@'); END;
{---------------------------------------------------------------------------}
PROCEDURE Merke_alte_Position;
{ Version fuer SHARP MZ 80A unter CP/M 2.2:
VAR CurHor: BYTE ABSOLUTE $0048;
CurVer: BYTE ABSOLUTE $0049;
BEGIN
Xalt := Succ(CurHor);
Yalt := Succ(CurVer);
END;
und hier fuer MS-DOS: }
BEGIN
Xalt := WhereX;
Yalt := WhereY;
END;
{---------------------------------------------------------------------------}
PROCEDURE Setze_alte_Position;
BEGIN GotoXY(Xalt,Yalt); END;
{---------------------------------------------------------------------------}
PROCEDURE ZeigeAn (x, y: BYTE; inverse: BOOLEAN; Text: str128);
BEGIN
GotoXY(x,y);
IF inverse THEN
HighVideo;
Write(Text);
LowVideo;
END;
{---------------------------------------------------------------------------}
PROCEDURE Status_Aendern (Gruppe: Arten; feld: INTEGER);
BEGIN
Merke_alte_Position;
WITH Menuefeld[Gruppe].Rumpf[feld] DO
Aktv := NOT Aktv;
WITH Menuefeld[Gruppe] DO
ZeigeAn(Xpos, Ypos+feld, Rumpf[feld].Aktv, Rumpf[feld].Text);
Setze_alte_Position;
END;
{---------------------------------------------------------------------------}
PROCEDURE Wait_for_Ready;
VAR Stbyte : BYTE;
hell, PReady: BOOLEAN;
BEGIN
Merke_alte_Position;
REPEAT
Stbyte := Port[$FE]; Stbyte := Stbyte AND $03;
hell := NOT hell;
CASE Stbyte OF
1: BEGIN
PReady := FALSE;
ZeigeAn(1, 23, hell, '++Fehler: Drucker ONLINE schalten !');
Delay(150); { 150 Millisekunden warten }
END;
2: PReady := TRUE;
3: BEGIN
PReady := FALSE;
ZeigeAn(1, 23, hell, '++Fehler: Drucker einschalten !');
Delay(150);
END;
END;
UNTIL PReady;
GotoXY(1,23); ClrEol; { bis Zeilenende loeschen }
Setze_alte_Position;
END;
{---------------------------------------------------------------------------}
PROCEDURE Zeiger (x, y: BYTE; Mark: BOOLEAN);
VAR marker: STRING[2];
BEGIN
Merke_alte_Position;
IF Mark THEN
marker := '><'
ELSE
marker := ' ';
GotoXY(Pred(x),y); Write(marker[1]);
GotoXY(x+18,y); Write(marker[2]);
Setze_alte_Position;
END;
{---------------------------------------------------------------------------}
PROCEDURE Waehle_Betriebsart;
TYPE Str80 = STRING[80];
VAR j : Arten;
i : INTEGER;
parameter: INTEGER;
satz : Str80;
{-------------------------------------------------------------------------}
PROCEDURE GetParameter (VAR paramt: INTEGER);
VAR n,a,e, err: INTEGER;
c : CHAR;
tmp : STRING[6];
BEGIN
Merke_alte_Position;
GotoXY(1,23); Write('Parameter eingeben: ');
WITH Menuefeld[P].Rumpf[f] DO
BEGIN
e := Pos(']', Text);
a := Pos('[', Text);
n := Pred(e-a);
tmp := '';
REPEAT
Read(Kbd, c); { Zeichen von Tastatur ohne Echo lesen }
IF c IN ['0'..'9'] THEN
BEGIN
Write(c); tmp := tmp+c;
END
ELSE IF (c = backspace) AND (Length(tmp) > 0) THEN
BEGIN
Write(c); tmp[0] := Chr(Pred(Length(tmp)));
END
ELSE IF c <> enter THEN
Write(Bell);
UNTIL (c = ^M) OR (Length(tmp) = n);
Val(tmp, paramt, err);
Text := '['+Copy('000', 1, n-Length(tmp))+tmp+']'+
Copy(Text, Succ(e), Succ(Length(Text)-e));
END; { WITH }
GotoXY(1,23); ClrEol;
Setze_alte_Position;
END;
{-------------------------------------------------------------------------}
PROCEDURE GetString (VAR Satz: Str80);
BEGIN
Merke_alte_Position;
GotoXY(1,23); Write('String: ');
ReadLn(Satz);
GotoXY(1,23); ClrEol;
Setze_alte_Position;
END;
{-------------------------------------------------------------------------}
BEGIN { Waehle_Betriebsart }
WITH Menuefeld[P].Rumpf[f] DO
CASE Grp OF
0: IF Aktv THEN
Write(Bell)
ELSE
BEGIN
Write(Lst, Bell, Init);
Status_Aendern(P, f);
FOR i := 1 TO max DO
WITH Menuefeld[P].Rumpf[i] DO
IF (Grp = 1) AND Aktv THEN
Status_Aendern(P, i);
END;
1: IF Aktv THEN
BEGIN
Write(Lst, Bell, DeInit);
Status_Aendern(P, f);
FOR i := 1 TO max DO
WITH Menuefeld[P].Rumpf[i] DO
IF (Grp = 0) AND NOT Aktv THEN
Status_Aendern(P, i);
END
ELSE
BEGIN
IF Parm = 0 THEN
Write(Lst, Bell, Init)
ELSE
BEGIN
GetParameter(parameter);
Write(Lst, Bell, Init, Chr(parameter));
END;
Status_Aendern(P, f);
FOR i := 1 TO max DO
WITH Menuefeld[P].Rumpf[i] DO
IF (Grp IN [0..1]) AND Aktv AND (i <> f) THEN
Status_Aendern(P, i);
END;
2, 4: BEGIN
IF Aktv THEN
Write(Lst, Bell, DeInit)
ELSE
BEGIN
IF Parm = 0 THEN
Write(Lst, Bell, Init)
ELSE
BEGIN
GetParameter(parameter);
Write(Lst, Bell, Init, Chr(parameter));
END;
END;
Status_Aendern(P, f);
END;
3: IF NOT Aktv THEN
BEGIN
IF Parm = 0 THEN
Write(Lst, Bell, Init)
ELSE
BEGIN
GetParameter(parameter);
Write(Lst, Bell, Init, Chr(parameter));
END;
Status_Aendern(P, f);
END
ELSE
BEGIN
Merke_alte_Position;
Write(Bell, Bell, Bell);
GotoXY(1,23); HighVideo;
Write('++Fehler:Benutze RESET zum Ruecksetzen ');
Write('dieser Betriebsart');
Delay(2000);
LowVideo; GotoXY(1,23); ClrEol;
Setze_alte_Position;
END;
7: IF NOT Aktv THEN
IF Parm = 255 THEN
BEGIN
GetString(Satz);
WriteLn(Lst, Satz);
END
ELSE
BEGIN
Status_Aendern(P, f);
Write(Lst, Bell, Init);
Delay(150);
Status_Aendern(P, f);
END;
9: BEGIN
DruckerReset;
Status_Aendern(P, f);
FOR j := Schriften TO Divers DO
FOR i := 1 TO max DO
WITH Menuefeld[j].Rumpf[i] DO
IF ((Grp = 0) OR (Grp = 4)) AND NOT Aktv THEN
Status_Aendern(j, i)
ELSE IF (Grp IN [1..3]) AND Aktv THEN
Status_Aendern(j, i);
Status_Aendern(P, f);
END;
END; { CASE }
END;
{---------------------------------------------------------------------------}
PROCEDURE Baueauf;
CONST limiter = '==================';
VAR i: INTEGER;
z: Arten;
BEGIN
LowVideo;
ZeigeAn(25, 1, FALSE, '** DRUCKER-SETUP Ver 1.01 **');
ZeigeAn(27, 2, FALSE, '(c) PASCAL International');
ZeigeAn(1, 21, FALSE, '<CURSOR>=Auswahl der Betriebsart ');
ZeigeAn(34,21, FALSE, '/ <CR>=Setzen der Betriebsart / <ESC>=Ende');
WriteLn;
FOR z := Schriften TO Divers DO
WITH Menuefeld[z] DO
BEGIN
ZeigeAn(Xpos, Ypos, FALSE, Kopf);
FOR i := 1 TO Anzahl DO
WITH Rumpf[i] DO
ZeigeAn(Xpos, Ypos+i, Aktv, Text);
ZeigeAn(Xpos, Succ(Ypos+Anzahl), FALSE, limiter);
END;
GotoXY(1,22); Write('CMD>');
END;
{---------------------------------------------------------------------------}
PROCEDURE NeuesFeld (c: CHAR);
BEGIN
WITH Menuefeld[p] DO
CASE c OF
down : IF f < Anzahl THEN
BEGIN
Zeiger(Xpos, Ypos+f, FALSE);
f := Succ(f);
Zeiger(Xpos, Ypos+f, TRUE);
END
ELSE IF Ord(p) = 4 THEN
Write(Bell)
ELSE
BEGIN
Zeiger(Xpos, Ypos+f, FALSE);
p := Succ(p);
f := 1;
Zeiger(Menuefeld[p].Xpos, Menuefeld[p].Ypos+f, TRUE);
END;
up : IF f > 1 THEN
BEGIN
Zeiger(Xpos, Ypos+f, FALSE);
f := Pred(f);
Zeiger(Xpos, Ypos+f, TRUE);
END
ELSE IF Ord(p) = 0 THEN
Write(Bell)
ELSE
BEGIN
Zeiger(Xpos, Ypos+f, FALSE);
p := Pred(p);
f := Menuefeld[p].Anzahl;
Zeiger(Menuefeld[p].Xpos, Menuefeld[p].Ypos+f, TRUE);
END;
left : IF Ord(p) > 0 THEN
BEGIN
Zeiger(Xpos, Ypos+f, FALSE);
p := Pred(p);
f := 1;
Zeiger(Menuefeld[p].Xpos, Menuefeld[p].Ypos+f, TRUE);
END
ELSE
Write(Bell);
right: IF Ord(p) < 4 THEN
BEGIN
Zeiger(Xpos, Ypos+f, FALSE);
p := Succ(p);
f := 1;
Zeiger(Menuefeld[p].Xpos, Menuefeld[p].Ypos+f, TRUE);
END
ELSE
Write(Bell);
END; { CASE c }
END;
{---------------------------------------------------------------------------}
BEGIN { SetUp }
ClrScr;
Baueauf;
{ Wait_for_Ready; s. Begleitartikel }
DruckerReset;
p := Schriften;
f := 1;
Zeiger(Menuefeld[p].Xpos, Menuefeld[p].Ypos+f, TRUE);
REPEAT
Read(Kbd, Ch);
CASE Ch OF
up, down, right, left: NeuesFeld(Ch);
enter : Waehle_Betriebsart;
ELSE
Write(Bell);
END;
UNTIL Ch = esc;
END.