summaryrefslogtreecommitdiff
path: root/printer
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2016-09-30 16:57:23 +0200
committerLars-Dominik Braun <lars@6xq.net>2016-09-30 16:59:06 +0200
commit724cc003460ec67eda269911da85c9f9e40aa6cf (patch)
tree14e27b45e04279516e4be546b15dcf6fafe17268 /printer
downloadeumel-src-724cc003460ec67eda269911da85c9f9e40aa6cf.tar.gz
eumel-src-724cc003460ec67eda269911da85c9f9e40aa6cf.tar.bz2
eumel-src-724cc003460ec67eda269911da85c9f9e40aa6cf.zip
Add extracted sources from floppy disk images
Some files have no textual representation (yet) and were added as raw dataspaces.
Diffstat (limited to 'printer')
-rw-r--r--printer/dotmatrix24/beschreibungen2462
-rw-r--r--printer/dotmatrix24/fonttab.brotherbin0 -> 38400 bytes
-rw-r--r--printer/dotmatrix24/fonttab.epson.lq1500bin0 -> 35840 bytes
-rw-r--r--printer/dotmatrix24/fonttab.epson.lq850bin0 -> 38400 bytes
-rw-r--r--printer/dotmatrix24/fonttab.nec.p5bin0 -> 39936 bytes
-rw-r--r--printer/dotmatrix24/fonttab.nec.p5.newbin0 -> 39936 bytes
-rw-r--r--printer/dotmatrix24/fonttab.nec.p6+bin0 -> 48128 bytes
-rw-r--r--printer/dotmatrix24/fonttab.okibin0 -> 38400 bytes
-rw-r--r--printer/dotmatrix24/fonttab.toshiba.p321bin0 -> 15872 bytes
-rw-r--r--printer/dotmatrix24/inserter793
-rw-r--r--printer/dotmatrix24/module241554
-rw-r--r--printer/dotmatrix24/printer.24.nadel776
-rw-r--r--printer/dotmatrix24/readme320
-rw-r--r--printer/dotmatrix9/beschreibungen997
-rw-r--r--printer/dotmatrix9/fonttab.1bin0 -> 11264 bytes
-rw-r--r--printer/dotmatrix9/fonttab.10bin0 -> 15872 bytes
-rw-r--r--printer/dotmatrix9/fonttab.20bin0 -> 36864 bytes
-rw-r--r--printer/dotmatrix9/fonttab.20.lcbin0 -> 36864 bytes
-rw-r--r--printer/dotmatrix9/fonttab.20.lxbin0 -> 24576 bytes
-rw-r--r--printer/dotmatrix9/fonttab.7bin0 -> 46080 bytes
-rw-r--r--printer/dotmatrix9/fonttab.7.cxpbin0 -> 46080 bytes
-rw-r--r--printer/dotmatrix9/fonttab.7.fujbin0 -> 56832 bytes
-rw-r--r--printer/dotmatrix9/fonttab.7.mtbin0 -> 46080 bytes
-rw-r--r--printer/dotmatrix9/module91099
-rw-r--r--printer/dotmatrix9/printer.neun.nadel1129
-rw-r--r--printer/dotmatrix9/readme324
-rw-r--r--printer/laser/fonttab.apple.laserwriterbin0 -> 100864 bytes
-rw-r--r--printer/laser/fonttab.canon.lbp-8bin0 -> 58368 bytes
-rw-r--r--printer/laser/fonttab.epson.sqbin0 -> 29696 bytes
-rw-r--r--printer/laser/fonttab.hp.laserjetbin0 -> 24064 bytes
-rw-r--r--printer/laser/fonttab.kyocera.f-1010bin0 -> 71168 bytes
-rw-r--r--printer/laser/fonttab.nec.lc-08bin0 -> 38400 bytes
-rw-r--r--printer/laser/genfont.kyocera.f-1010.dynamic130
-rw-r--r--printer/laser/genfont.kyocera.f-1010.dynamic230
-rw-r--r--printer/laser/laser.inserter275
-rw-r--r--printer/laser/printer.apple.laserwriter770
-rw-r--r--printer/laser/printer.canon.lbp-8327
-rw-r--r--printer/laser/printer.epson.sq585
-rw-r--r--printer/laser/printer.hp.laserjet417
-rw-r--r--printer/laser/printer.kyocera.f-1010373
-rw-r--r--printer/laser/printer.nec.lc-08626
-rw-r--r--printer/laser/readme155
42 files changed, 9742 insertions, 0 deletions
diff --git a/printer/dotmatrix24/beschreibungen24 b/printer/dotmatrix24/beschreibungen24
new file mode 100644
index 0000000..e3d2fa9
--- /dev/null
+++ b/printer/dotmatrix24/beschreibungen24
@@ -0,0 +1,62 @@
+
+(*************************************************************************)
+(* Stand : 3. 1.89 *)
+(* Beschreibungen-Datei für 24-Nadel-Drucker Version : 0.9 *)
+(* Autor : hjh *)
+(*************************************************************************)
+
+$necp5p7$
+begin;headnecp5p7;declarations;feed;
+open;opendoch;opendocp5p7;openpagep5-7;close;closepage;
+execute;cmdp5-7;crs;move;movep5-7;onoff;typep5-7;end
+
+$necp6$
+begin;headnecp6;declarations;feed;
+open;opendoch;opendocp6;openpagep5-7;close;closepage;
+execute;cmdp5-7;crs;move;movep5-7;onoff;typep5-7;end
+
+$necp6+$
+begin;headnecp6+;declarations;speed;topmargin;typefacep6+;feed;
+open;opendoch;initspeed;opendocp6+;openpage;close;closepage;
+execute;cmdp6+;crs;move;stdmove;onoff;typep6+;end
+
+$epsonlq850$
+begin;headlq850;declarations;speed;topmargin;typefacelq850;feed;
+open;opendoch;initspeed;opendoclq850;openpage;close;closepage;
+execute;cmdlq850;crs;move;stdmove;onoff;typeplq850;end
+
+$epsonlq1500$
+printerlq1500;end
+
+$oki390/391$
+begin;headoki390/391;declarations;speed;topmargin;typefaceoki;feedschacht;
+open;opendoch;initspeed;opendocokieps;openpage;close;closepage;
+execute;cmdoki;crs;move;stdmove;onoff;typeokieps;end
+
+$oki393/393Ceps$
+begin;headoki393/393Ceps;declarations;speed;topmargin;typefaceoki;feedschacht;
+open;opendoch;initspeed;opendocokieps;openpage;close;closepage;
+execute;cmdoki;crs;move;stdmove;onoff;typeokieps;end
+
+$oki393/393Cibm$
+begin;headoki393/393Cibm;declarations;speed;topmargin;typefaceoki;feedschacht;
+open;opendoch;initspeed;opendocokiibm;openpage;close;closepage;
+execute;cmdoki;crs;move;stdmove;onoff;typeokiibm;end
+
+$toshp321$
+begin;headtoshp321;declarations;speed;feed;
+open;opendochtosh;initspeed;opendoctosh;openpagetosh;close;closepagetosh;
+execute;cmdtosh;crs;move;stdmove;onoff;typetosh;end
+
+$starnb24$
+begin;headstarnb24;declarations;speed;topmargin;typefacestar;feedschacht;
+open;opendoch;initspeed;opendocstar;openpage;close;closepage;
+execute;cmdstar;crs;move;stdmove;onoff;typestar;end
+
+$brotherm1724l$
+begin;headbrotherm1724l;declarations;speed;topmargin;feed;
+open;opendoch;initspeed;opendocbrother;openpage;close;closepage;
+execute;cmdtosh;crs;move;stdmove;onoff;typebrother;end
+
+
+
diff --git a/printer/dotmatrix24/fonttab.brother b/printer/dotmatrix24/fonttab.brother
new file mode 100644
index 0000000..2251e18
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.brother
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.epson.lq1500 b/printer/dotmatrix24/fonttab.epson.lq1500
new file mode 100644
index 0000000..1b4c6a6
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.epson.lq1500
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.epson.lq850 b/printer/dotmatrix24/fonttab.epson.lq850
new file mode 100644
index 0000000..7a6d2f0
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.epson.lq850
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.nec.p5 b/printer/dotmatrix24/fonttab.nec.p5
new file mode 100644
index 0000000..9910da6
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.nec.p5
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.nec.p5.new b/printer/dotmatrix24/fonttab.nec.p5.new
new file mode 100644
index 0000000..9804bd5
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.nec.p5.new
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.nec.p6+ b/printer/dotmatrix24/fonttab.nec.p6+
new file mode 100644
index 0000000..b209e81
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.nec.p6+
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.oki b/printer/dotmatrix24/fonttab.oki
new file mode 100644
index 0000000..2251e18
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.oki
Binary files differ
diff --git a/printer/dotmatrix24/fonttab.toshiba.p321 b/printer/dotmatrix24/fonttab.toshiba.p321
new file mode 100644
index 0000000..452afca
--- /dev/null
+++ b/printer/dotmatrix24/fonttab.toshiba.p321
Binary files differ
diff --git a/printer/dotmatrix24/inserter b/printer/dotmatrix24/inserter
new file mode 100644
index 0000000..442075d
--- /dev/null
+++ b/printer/dotmatrix24/inserter
@@ -0,0 +1,793 @@
+
+(*************************************************************************)
+(* Installationsprogramm für Stand : 3. 1.89 *)
+(* 24-Nadel Drucker Version : 0.9 *)
+(* Autor : hjh *)
+(*************************************************************************)
+
+PACKET driver inst 24
+
+
+ DEFINES treiber einrichten:
+
+
+LET up = ""3""13""5"",
+
+ generator name = "printer.24.nadel",
+
+ description file name = "beschreibungen24",
+ module file name = "module24";
+
+
+INT VAR pr channel,
+ quality,
+ paper format number,
+ service option;
+TEXT VAR fonttab name :: "",
+ driver name :: "";
+TEXT VAR inp;
+BOOL VAR was esc;
+
+treiber einrichten
+
+PROC treiber einrichten:
+
+ treiber einrichten (0)
+END PROC treiber einrichten;
+
+PROC treiber einrichten (INT CONST service opt):
+
+ ask for print channel;
+ main menu;
+ IF installed
+ THEN generate printer spool
+ ELSE inform about restart
+ FI.
+
+ ask for printchannel:
+ inits;
+ page;
+ headline ("Druckerkanal - Einstellung");
+ cursor (1, 15);
+ putline ("Hinweis: Die Druckerkanalnummer kann auch nachträglich mit");
+ putline (" 'serverchannel (Kanalnummer)' in der Task """ +
+ name (myself) + """");
+ putline (" verändert werden.");
+ REP
+ cursor (1, 10);
+ put (""5"EUMEL-Kanalnummer des Druckerkanals:");
+ get (pr channel);
+ disable stop;
+ serverchannel (pr channel);
+ BOOL VAR no error :: NOT is error;
+ clear error;
+ no error := no error CAND
+ (pr channel <> channel (myself)) CAND
+ (pr channel > 1) CAND
+ (pr channel < 17);
+
+ IF NOT no error
+ THEN cursor (1, 7);
+ put error;
+ putline ("Eingabe korrigiert wiederholen!")
+ FI;
+ enable stop
+ UNTIL no error PER;
+ IF exists task ("canal " + text (pr channel))
+ THEN end (/ ("canal " + text (pr channel)));
+ FI;
+
+. inits:
+ line;
+ IF single task
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+ FI;
+ command dialogue (TRUE);
+ IF name (myself) <> "PRINTER"
+ THEN putline ("Diese Task heißt nicht ""PRINTER"", sondern """ +
+ name (myself) + """ !");
+ IF yes ("Soll die Task in ""PRINTER"" umbenannt werden ?")
+ THEN rename myself ("PRINTER")
+ FI
+ FI;
+ INT VAR choice;
+ service option := service opt.
+
+ single task: (pcb (9) AND 255) = 1.
+
+ main menu:
+ BOOL VAR installed :: FALSE;
+ REP
+ show main menu;
+ get choice;
+ treat choice
+ UNTIL was esc OR installed PER.
+
+ show main menu:
+ page;
+ headline("Hauptmenü 24-Nadel-Drucker");
+ putline (" 1. Brother");
+ putline (" 2. Epson");
+ putline (" 3. NEC");
+ putline (" 4. OKI");
+ putline (" 5. Toshiba").
+
+ get choice:
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Installation abbrechen");
+ ask user (5).
+
+ treat choice:
+ SELECT int (inp) OF
+ CASE 1: brother menu
+ CASE 2: epson menu
+ CASE 3: nec menu
+ CASE 4: oki menu
+ CASE 5: toshiba menu
+ END SELECT.
+
+
+ brother menu:
+ page;
+ headline ("brother - Menü");
+ putline (" 1. M-1724 L");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (1);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ brother m1724l inst
+ FI.
+
+ brother m1724l inst:
+ putline ("brother M-1724 L");
+ line;
+ putline ("Wählen Sie folgende DIP-Schalter Optionen:");
+ putline ("Emulationsmodus IBM Proprinter XL ");
+ putline ("Automatischer Zeilenvorschub Nein ");
+ show control options ("paperfeed, std speed, top margin");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.brother");
+ generate ("brotherm1724l");
+ adjust papersize;
+ adjust quality;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+
+ toshiba menu:
+ page;
+ headline ("TOSHIBA - Menü");
+ putline (" 1. P 321");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (1);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ toshiba p321 inst
+ FI.
+
+ toshiba p321 inst:
+ putline ("TOSHIBA P 321");
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S3-8 S3-7 S3-5 übrige Schalter");
+ putline ("OFF OFF *) egal ");
+ putline ("*) ON: Einzelblatteinzug, OFF: kein Einzug");
+ show control options ("std speed, paper feed");
+ show material options("slow, fast");
+ show command options ("nlq, draft");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.toshiba.p321");
+ generate ("toshp321");
+ adjust papersize;
+ adjust quality;
+ do ("papersize(21.0,30.48)");
+ installed := TRUE;
+ FI.
+
+
+ epson menu:
+ page;
+ headline ("Epson - Menü");
+ putline (" 1. LQ 850");
+ putline (" 2. LQ 1050");
+ putline (" 3. LQ 1500");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (3);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1 : lq850 inst
+ CASE 2 : lq850 inst
+ CASE 3 : lq1500 inst
+ END SELECT
+ FI.
+
+ lq850 inst:
+ IF choice = 1
+ THEN putline ("Epson LQ 850")
+ ELSE putline ("Epson LQ 1050")
+ FI;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("SW1-1 SW1-2 SW1-3 SW1-4 SW1-5 SW1-6 SW1-7 SW1-8");
+ putline ("egal egal egal egal egal egal *1) OFF ");
+ putline ("*1) ON: Einzelblatteinzug, OFF: kein Einzug"); line;
+ putline ("SW2-1 SW2-2 SW2-3 SW2-4 SW2-5 SW2-6 SW2-7 SW2-8");
+ putline ("egal egal *2) OFF OFF");
+ putline ("*2) SW2-2 bis SW2-6 müssen je nach Art der Schnittstelle ");
+ putline (" gesetzt werden (Druckerhandbuch)");
+ show control options ("std speed, top margin, std typeface, paperfeed");
+ show material options ("slow, fast, draft, nlq, roman, sansserif");
+ show command options ("draft, nlq, roman, sansserif");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.epson.lq850");
+ generate ("epsonlq850");
+ adjust quality;
+ adjust papersize;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ lq1500 inst:
+ putline ("EPSON LQ-1500");
+ show control options ("");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq");
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.epson.lq1500");
+ generate ("epsonlq1500");
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ nec menu:
+ page;
+ headline ("NEC - Menü");
+ putline (" 1. PINWRITER P5 ");
+ putline (" 2. PINWRITER P6 ");
+ putline (" 3. PINWRITER P7 ");
+ putline (" 4. PINWRITER P6 PLUS");
+ putline (" 5. PINWRITER P7 PLUS");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (5);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1 : necp5p7 inst
+ CASE 2 : necp6 inst
+ CASE 3 : necp5p7 inst
+ CASE 4 : necp6plus inst
+ CASE 5 : necp6plus inst
+ END SELECT
+ FI.
+
+ necp5p7 inst:
+ IF choice = 1
+ THEN putline ("NEC PINWRITER P5")
+ ELSE putline ("NEC PINWRITER P7")
+ FI;
+ show control options ("paper feed");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.nec.p5.new");
+ generate ("necp5p7");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ necp6 inst:
+ putline ("NEC PINWRITER P6 ");
+ show control options ("paper feed");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.nec.p5.new");
+ generate ("necp6");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ necp6plus inst:
+ IF choice = 4
+ THEN putline ("NEC PINWRITER P6 PLUS")
+ ELSE putline ("NEC PINWRITER P7 PLUS")
+ FI;
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("CR FUNCTION CR ONLY ");
+ show control options ("std speed, top margin, std typeface, paperfeed");
+ show material options ("slow, fast, draft, nlq, courier, souvenir");
+ show command options ("draft, nlq, courier, souvenir");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.nec.p6+");
+ generate ("necp6+");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE;
+ IF choice = 5 THEN do ("papersize (34.544, 30.48)") FI;
+ FI.
+
+ oki menu:
+ page;
+ headline ("OKI - Menü");
+ putline (" 1. MICROLINE 390 IBM-/EPSON-kompatibel");
+ putline (" 2. MICROLINE 391 IBM-/EPSON-kompatibel");
+ putline (" 3. MICROLINE 393/393C EPSON-kompatibel");
+ putline (" 4. MICROLINE 393/393C IBM-kompatibel");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (4);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1 : oki ml390 inst
+ CASE 2 : oki ml390 inst
+ CASE 3 : oki ml393eps inst
+ CASE 4 : oki ml393ibm inst
+ END SELECT
+ FI.
+
+ oki ml390 inst:
+ IF choice = 1
+ THEN putline ("OKI Microline 390") ;
+ ELSE putline ("OKI Microline 391") ;
+ FI;
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("EMULATION MODE EPSON LQ ");
+ putline ("AUTO LF NO ");
+ show control options ("paperfeed, std speed, top margin");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq, courier, kassette");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.oki");
+ generate ("oki390/391");
+ adjust papersize;
+ adjust quality;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+
+ oki ml393eps inst:
+ putline ("OKI Microline 393 EPSON-kompatibel");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("AUTO LF NO ");
+ show control options ("paperfeed, std speed, top margin, std typeface");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq, courier, kassette, schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.oki");
+ generate ("oki393/393Ceps");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ oki ml393ibm inst:
+ putline ("OKI Microline 393 IBM-kompatibel");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("EMULATION MODE ASCII ");
+ putline ("AUTO LF NO ");
+ show control options ("paperfeed, std speed, top margin, std typeface");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq, courier, kassette, schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.oki");
+ generate ("oki393/393Cibm");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+
+
+generate printer spool:
+ IF service opt = 0
+ THEN forget (generator name, quiet);
+ forget (driver name, quiet)
+ FI;
+ eumel must advertise;
+ cursor (1, 10);
+(* putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (2);
+ putline ("Hinweis: Dieses Installationsprogramm kann in der Task """ + name (myself) + """");
+ putline (" mit 'treiber einrichten' aufgerufen werden, wenn ein anderer");
+ putline (" Drucker eingesetzt werden soll.");
+ line (2);
+*)
+(* put ("Generierung beendet, weiter mit 'SV'");
+ break (quiet);
+*)
+ putline (" Generierung beendet.");
+ putline (" Weiter: Bitte Taste drücken");
+ WHILE incharety <> "" REP ENDREP;
+ REP UNTIL incharety <> "" ENDREP;
+ break;
+ do ("spool manager (PROC printer)").
+
+ inform about restart:
+ page;
+ putline ("Es ist kein Druckertreiber installiert worden!");
+ line;
+ putline ("Dieses Installationsprogramm kann in der Task """ + name (myself) + """");
+ putline ("mit 'treiber einrichten' erneut aufgerufen werden.");
+ line;
+ pause(50);
+ break.
+
+END PROC treiber einrichten;
+
+PROC headline (TEXT CONST header):
+
+ cursor (13,1);
+ putline ("E U M E L - Druckertreiber - Installations - Programm");
+ cursor (40 - LENGTH header DIV 2, 2);
+ put (header);
+ line (2)
+END PROC headline;
+
+PROC ask user (INT CONST max choice):
+
+ TEXT VAR exit;
+ inp := "";
+ REP
+ cursor (1,23);
+ IF inp = ""
+ THEN put ("Ihre Wahl (Nummer eingeben):")
+ ELSE put ("FEHLER! Eingabe korrigieren:")
+ FI;
+ editget (inp, ""27"", "", exit);
+ was esc := exit = ""27"";
+ UNTIL was esc OR ok PER.
+
+ ok:
+ int (inp) > 0 AND int (inp) <= max choice AND last conversion ok.
+END PROC ask user;
+
+PROC show control options (TEXT CONST options):
+
+ line;
+ putline ("Steuerprozeduren in der Task """ + name (myself) + """:");
+ write ("papersize, std quality");
+ IF options <> ""
+ THEN put (",");
+ putline (options)
+ FI
+END PROC show control options;
+
+PROC show material options (TEXT CONST options):
+
+ line;
+ putline ("Mögliche Materialwerte (#material(""..."")#):");
+ putline (options)
+END PROC show material options;
+
+PROC show command options (TEXT CONST options):
+
+ line;
+ putline ("Mögliche direkte Druckeranweisungen (#""...""#):");
+ putline (options)
+END PROC show command options;
+
+PROC ask for quality:
+
+ line (1);
+ putline ("Standard - Druckqualität:");
+ line;
+ REP out (up);
+ IF yes ("Draft Quality (schneller, aber nicht so schön)")
+ THEN quality := 1; LEAVE ask for quality
+ FI;
+ out (up);
+ IF yes ("Near Letter Quality (schöner, aber langsamer)")
+ THEN quality := 2; LEAVE ask for quality
+ FI;
+ PER
+END PROC ask for quality;
+
+PROC adjust quality:
+
+ IF quality = 1
+ THEN do ("std quality (""draft"")")
+ ELSE do ("std quality (""nlq"")")
+ FI
+END PROC adjust quality;
+
+PROC ask for papersize :
+LET up = ""3""13""5"";
+
+ paper format number := paper format ;
+
+ . paper format :
+ line (1);
+ putline ("Papierformat:");
+ line;
+ REP out (up);
+ IF yes ("Endlospapier, 8 Zoll breit")
+ THEN LEAVE paper format WITH 1 FI;
+ out (up);
+ IF yes ("Endlospapier, 13.2 Zoll breit")
+ THEN LEAVE paper format WITH 2 FI;
+ out (up);
+ IF yes ("Einzelblatteinzug, DINA 4")
+ THEN LEAVE paper format WITH 3 FI;
+ PER;
+ 0
+END PROC ask for papersize;
+
+
+PROC adjust papersize:
+
+ SELECT paper format number OF
+ CASE 1 : do("papersize ( 8.0 * 2.54, 12.0 * 2.54)");
+ do ("paper feed (""tractor"")")
+ CASE 2 : do("papersize (13.2 * 2.54, 12.0 * 2.54)");
+ do ("paper feed (""tractor"")")
+ CASE 3 : do("papersize (21.0, 29.7)");
+ do ("paper feed (""sheet"")")
+ END SELECT
+
+END PROC adjust papersize;
+
+BOOL PROC all right:
+
+ line (3);
+ cursor (1,23);
+ yes ("Soll der ausgewählte Druckertreiber installiert werden")
+END PROC all right;
+
+PROC get fonttable (TEXT CONST name):
+
+ fonttab name := name;
+ from archive ((description file name & module file name & fonttab name)
+ - all);
+ fonttable (fonttab name);
+ command dialogue (FALSE);
+ save (fonttab name, /"configurator");
+ IF service option = 0
+ THEN forget (fonttab name)
+ FI;
+ command dialogue (TRUE);
+END PROC get fonttable;
+
+PROC from archive (THESAURUS CONST files):
+
+ IF highest entry (files) > 0
+ THEN fetch from archive;
+ release (archive);
+ putline ("Archiv abgemeldet !")
+ FI.
+
+ fetch from archive:
+ THESAURUS VAR thes :: files;
+ REP
+ ask for archive;
+ reserve archive;
+ fetch (thes / ALL archive, archive);
+ thes := thes - all
+ UNTIL highest entry (thes) = 0 PER.
+
+ask for archive:
+ TEXT VAR buffer;
+(*line;
+ putline ("Bitte Archiv mit den Dateien");
+ INT VAR index :: 0;
+ REP
+ get (thes, buffer, index);
+ putline (" " + buffer)
+ UNTIL index = 0 PER;
+ putline ("einlegen !");
+ line;
+ putline ("Wenn eingelegt: Taste drücken !");
+ inchar (buffer)*).
+
+reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop.
+
+END PROC from archive;
+
+THESAURUS OP & (TEXT CONST left, right):
+ THESAURUS VAR result := empty thesaurus;
+ insert (result, left);
+ insert (result, right);
+ result
+END OP &;
+
+THESAURUS OP & (THESAURUS CONST left, TEXT CONST right):
+ THESAURUS VAR result := left;
+ insert (result, right);
+ result
+END OP &;
+
+PROC generate (TEXT CONST name):
+
+ open files;
+ read description;
+ build programme;
+ insert programme;
+ forget files.
+
+ open files:
+ line (5);
+ cursor (1, 20);
+ putline (""4"Bitte warten !");
+ putline (" - Der Treiber wird generiert.");
+ driver name := "printer." + name + "(generiert)";
+ IF exists (driver name)
+ THEN forget (driver name, quiet)
+ FI;
+ FILE VAR des file :: sequential file (modify, description file name),
+ mod file :: sequential file (modify, module file name),
+ driver file :: sequential file (output, driver name).
+
+ read description:
+ to line (des file, 1);
+ col (des file, 1);
+ downety (des file, "$" + name + "$");
+ IF eof (des file)
+ THEN errorstop ("Beschreibung von """ + name + """ nicht im"13""10"" +
+ "Descriptions-File enthalten")
+ FI;
+ TEXT VAR description :: "",
+ record;
+ BOOL VAR done :: FALSE;
+ read record (des file, record);
+ record := subtext (record, col (des file) + LENGTH name + 2);
+ WHILE NOT eof (des file) AND NOT done REP
+ treat record
+ PER.
+
+ treat record:
+ INT VAR dollar pos :: pos (record, "$");
+ IF dollar pos = 0
+ THEN description CAT compress (record);
+ down (des file);
+ read record (des file, record)
+ ELSE description CAT compress (subtext (record, 1, dollar pos - 1));
+ col (des file, dollar pos);
+ done := TRUE;
+ FI.
+
+ build programme:
+ get module name;
+ WHILE still modules REP
+ find module;
+ transfer module;
+ get module name
+ PER.
+
+ get module name:
+ INT VAR semicol pos :: pos (description, ";");
+ TEXT VAR module name;
+ IF semicol pos > 0
+ THEN module name := subtext (description, 1, semicol pos - 1);
+ description := subtext (description, semicol pos + 1)
+ ELSE module name := description;
+ description := ""
+ FI.
+
+ still modules:
+ module name <> "" OR description <> "".
+
+ find module:
+ to line (mod file, 1);
+ col (mod file, 1);
+ downety (mod file, "$" + module name + "$");
+ IF eof (mod file)
+ THEN errorstop ("Modul """ + module name + """ nicht im"13""10"" +
+ "Modul-File enthalten")
+ FI.
+
+ transfer module:
+ done := FALSE;
+ read record (mod file, record);
+ record := subtext (record, col (mod file) + LENGTH module name + 2);
+ WHILE NOT eof (mod file) AND NOT done REP
+ transfer record
+ PER.
+
+ transfer record:
+ dollar pos := pos (record, "$");
+ IF dollar pos = 0
+ THEN write (driver file, compress (record));
+ line (driver file);
+ down (mod file);
+ read record (mod file, record)
+ ELSE write (driver file, compress (subtext (record, 1,
+ dollar pos - 1)));
+ col (mod file, dollar pos);
+ done := TRUE;
+ cout (line no (mod file))
+ FI.
+
+ insert programme:
+ IF online
+ THEN putline (" - Der Treiber wird insertiert.")
+ FI;
+ check off;
+ insert (driver name).
+
+ forget files:
+ IF service option = 0
+ THEN forget (description file name, quiet);
+ forget (module file name, quiet)
+ FI .
+END PROC generate;
+
+END PACKET driver inst 24
+
diff --git a/printer/dotmatrix24/module24 b/printer/dotmatrix24/module24
new file mode 100644
index 0000000..a4957c2
--- /dev/null
+++ b/printer/dotmatrix24/module24
@@ -0,0 +1,1554 @@
+
+(*************************************************************************)
+(* Stand : 03. 1.89 *)
+(* Module-Datei für 24-Nadel-Drucker Version : 0.9 *)
+(* Autor : hjh *)
+(*************************************************************************)
+
+$begin$
+PACKET printer driver
+
+ DEFINES printer,
+ open,
+ close,
+ execute,
+ paper size,
+ std quality,
+
+$headnecp6$ paper feed:
+(* Treiber fuer NEC P6, automatisch generiert *)
+LET underline linetype = 1;
+INT VAR factor 1, factor 2, draft factor 1, draft factor 2;
+
+$headnecp5p7$ paper feed:
+(* Treiber fuer NEC P5, P7 , automatisch generiert *)
+LET underline linetype = 1;
+INT VAR factor 1, factor 2, draft factor 1, draft factor 2;
+
+$headnecp6+$ std speed,
+ top margin,
+ paper feed,
+ std typeface:
+(* Treiber für NEC P6 plus/P7 plus ,automatisch generiert *)
+
+
+$headlq850$ std speed,
+ top margin,
+ paper feed,
+ std typeface:
+(* Treiber für EPSON LQ-850/1050 ,automatisch generiert *)
+
+$headbrotherm1724l$
+ std speed,
+ top margin,
+ paper feed:
+INT VAR vertical factor := 1;
+(* Treiber für BROTHER M-1724L in IBM-Emulation, automatisch generiert *)
+
+$headoki390/391$
+ std speed,
+ top margin,
+ paper feed,
+ std typeface:
+INT VAR vertical factor := 1;
+(* Treiber für OKI MIKROLINE 390/391 ,automatisch generiert *)
+
+$headoki393/393Ceps$
+ std speed,
+ top margin,
+ paper feed,
+ std typeface:
+INT VAR vertical factor := 1;
+(* Treiber für OKI MIKROLINE 393/393C EPSON-kompatibel, automatisch generiert *)
+
+$headoki393/393Cibm$
+ std speed,
+ top margin,
+ paper feed,
+ std typeface:
+INT VAR vertical factor := 1;
+(* Treiber für OKI MIKROLINE 393/393C IBM-kompatibel, automatisch generiert *)
+
+$headtoshp321$ std speed,
+ paper feed:
+(* Treiber für TOSHIBA P321, automatisch generiert *)
+
+$headstarnb24$
+ std speed,
+ top margin,
+ paper feed,
+ std typeface:
+(* Treiber für STAR NB 24-10/15 in Standard Betriebsart automatisch generiert *)
+
+$declarations$
+INT VAR font nr, font bits, modification bits,
+ blankbreite, x rest, high, low, steps;
+REAL VAR x size, y size;
+TEXT VAR buffer :: "";
+BOOL VAR is nlq ;
+TEXT VAR font text :: "";
+TEXT VAR std quality name :: "draft";
+
+. is pica : font bits = 0
+. is elite : font bits = 1
+.;
+
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+END PROC paper size;
+
+papersize (20.32, 30.48);
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+END PROC paper size;
+
+
+
+PROC std quality (TEXT CONST quality) :
+
+ IF quality = "nlq" OR quality = "draft"
+ THEN std quality name := quality
+ ELSE errorstop ("unzulässige Qualitätsbezeichnung")
+ FI
+END PROC std quality;
+
+TEXT PROC std quality :
+
+ std quality name
+END PROC std quality;
+
+
+$topmargin$
+REAL VAR y margin := 0.0 ;
+
+PROC top margin (REAL CONST margin):
+
+ y margin := margin
+END PROC top margin;
+
+REAL PROC top margin:
+
+ y margin
+END PROC top margin;
+
+
+$speed$
+BOOL VAR is slow :: TRUE;
+TEXT VAR std speed name :: "slow";
+
+PROC std speed (TEXT CONST speed) :
+
+ IF speed = "fast" OR speed = "slow"
+ THEN std speed name := speed
+ ELSE errorstop ("unzulässige Geschwindigkeit")
+ FI
+END PROC std speed;
+
+TEXT PROC std speed :
+
+std speed name
+END PROC std speed;
+
+
+$typefacelq850$
+TEXT VAR act typeface name :: "";
+TEXT VAR std typeface name :: "";
+
+. is roman:
+ act typeface name = "roman".
+. is sansserif:
+ act typeface name = "sansserif"
+.;
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "" OR typeface = "roman" OR typeface = "sansserif"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface :
+
+ std typeface name
+END PROC std typeface;
+
+
+
+$typefacep6+$
+BOOL VAR is courier :: TRUE;
+TEXT VAR std typeface name :: "courier";
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "courier" OR typeface = "souvenir"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface :
+
+ std typeface name
+END PROC std typeface;
+
+$typefaceoki$
+BOOL VAR is courier ;
+TEXT VAR std typeface name :: "";
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "" OR typeface = "courier" OR typeface = "kassette"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface :
+
+ std typeface name
+END PROC std typeface;
+
+$typefacestar$
+BOOL VAR is roman ;
+TEXT VAR std typeface name :: "";
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "" OR typeface = "roman" OR typeface = "font1"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface :
+
+ std typeface name
+END PROC std typeface;
+
+$feed$
+BOOL VAR is sheet feed :: FALSE;
+
+PROC paper feed (TEXT CONST feeder) :
+
+ IF feeder = "sheet"
+ THEN is sheet feed := TRUE
+ ELIF feeder = "tractor"
+ THEN is sheet feed := FALSE
+ ELSE errorstop ("unzulässige Einzugsart")
+ FI
+END PROC paper feed;
+
+TEXT PROC paper feed:
+ IF is sheet feed
+ THEN "sheet"
+ ELSE "tractor"
+ FI
+END PROC paper feed;
+
+$feedschacht$
+BOOL VAR is sheet feed :: FALSE;
+TEXT VAR feeder name :: "tractor";
+
+PROC paper feed (TEXT CONST feeder) :
+
+ IF feeder = "tractor"
+ THEN feeder name := "tractor";
+ is sheet feed := FALSE
+ ELIF feeder = "sheet" OR feeder = "schacht1"
+ THEN feeder name := "schacht1" ;
+ is sheet feed := TRUE
+ ELIF feeder = "schacht2"
+ THEN feeder name := "schacht2" ;
+ is sheet feed := TRUE
+ ELSE errorstop ("unzulässige Einzugsart")
+ FI
+END PROC paper feed;
+
+TEXT PROC paper feed: feeder name END PROC paper feed;
+
+$open$
+PROC open (INT CONST op code, INT VAR param1, param2):
+
+ SELECT op code OF
+ CASE 1: open document(param1,param2)
+ CASE 2: open page (param1,param2)
+ END SELECT.
+END PROC open ;
+
+
+$opendoch$
+PROC open document (INT VAR x steps,y steps):
+ modification bits := 0;
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ y steps := (y steps DIV 30) * 30;
+
+$opendochtosh$
+PROC open document (INT VAR x steps,y steps):
+ modification bits := 0;
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ y steps := (y steps DIV 36) * 36;
+
+$initspeed$
+ IF pos (material, "slow") <> 0
+ THEN is slow := TRUE;
+ ELIF pos (material, "fast") <> 0
+ THEN is slow := FALSE;
+ ELSE is slow := std speed name = "slow"
+ FI;
+
+$opendocp6+$
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"t"1""27"6"27"R"0""); (* Zeichentabelle 4 (Grafik) *)
+ out (""27"O");
+ out (""27"2" + ""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF is sheet feed
+ THEN out (""27""25"4"); (* Sheetmode ein *)
+ FI;
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF pos (material, "courier") <> 0
+ THEN is courier := TRUE ;
+ ELIF pos (material, "souvenir") <> 0
+ THEN is courier := FALSE ;
+ ELSE is courier := std typeface name = "courier"
+ FI;
+END PROC open document ;
+
+$opendocp5p7$
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""); (* Amerikanischer Zeichensatz *)
+ out (""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF is sheet feed
+ THEN out (""27""25"4"); (* Sheetmode ein *)
+ center paper ;
+ FI;
+
+ . center paper :
+ INT CONST x steps in chars := x steps DIV x step conversion (2.54 / 10.0),
+ left margin := (136 - x steps in chars) DIV 2;
+ out (""27"P");
+ out (""27"l"); out (code (left margin + 1));
+END PROC open document ;
+
+$opendocp6$
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""); (* Amerikanischer Zeichensatz *)
+ out (""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF is sheet feed
+ THEN out (""27""25"4"); (* Sheetmode ein *)
+ FI;
+END PROC open document ;
+
+$opendoclq850$
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"t"1""27"6"27"R"0""); (* Zeichentabelle 4 (Grafik) *)
+ out (""27"O");
+ out (""27"2" + ""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF is sheet feed
+ THEN out (""27""25"4"); (* Sheetmode ein *)
+ FI;
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF pos (material, "roman") <> 0
+ THEN act typeface name := "roman"
+ ELIF pos (material, "sansserif") <> 0
+ THEN act typeface name := "sansserif"
+ ELSE act typeface name := std typeface name
+ FI;
+END PROC open document ;
+
+$opendocokieps$
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"t"1""27"6"27"R"0""); (* Zeichentabelle 4 (Grafik) *)
+ out (""27"O");
+ out (""27"2" + ""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF is sheet feed
+ THEN IF feeder name = "schacht2"
+ THEN out (""27""25"2")
+ ELSE out (""27""25"1")
+ FI
+ FI; (* Sheetmode ein *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF pos (material, "courier") <> 0
+ THEN is courier := TRUE ;
+ ELIF pos (material, "kassette") <> 0
+ THEN is courier := FALSE ;
+ ELSE is courier := std typeface name = "courier"
+ FI;
+END PROC open document ;
+
+$opendoctosh$
+ out (""24""27"5"0""27"4"27"O"); (* Reset des Druckers *)
+ out (""27"6"); (* Zeichensatz *)
+ out (""27"A"12""27"2") ;
+ out (""27"C" + code (y steps DIV 36)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+END PROC open document ;
+
+$opendocbrother$
+ out (""24""27"5"0""27"4"27"O"); (* Reset des Druckers *)
+ out (""27"6" + ""27"R"0""); (* Zeichensatz II ascii *)
+ out (""27"A"10""27"2") ; (* Zeilenabstand *)
+ out (""27"C" + code (y steps DIV 36)); (* Formularlaenge *)
+ IF is sheet feed
+ THEN out (""27""25"4")
+ FI; (* Sheetmode ein *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+END PROC open document ;
+
+$opendocokiibm$
+ out (""24""27"5"0""27"4"27"O"); (* Reset des Druckers *)
+ out (""27"6" + ""27"!"64""); (* Zeichensatz II ascii *)
+ out (""27""91""92""4""0""0""0""180""); (* 1/180 *)
+ out (""27"A"12""27"2") ; (* Zeilenabstand *)
+ out (""27"C" + code (y steps DIV 36)); (* Formularlaenge *)
+ IF is sheet feed
+ THEN IF feeder name = "schacht2"
+ THEN out (""27""25"2")
+ ELSE out (""27""25"1")
+ FI
+ FI; (* Sheetmode ein *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF pos (material, "courier") <> 0
+ THEN is courier := TRUE ;
+ ELIF pos (material, "kassette") <> 0
+ THEN is courier := FALSE ;
+ ELSE is courier := std typeface name = "courier"
+ FI;
+END PROC open document ;
+
+$opendocstar$
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""); (* amerikanischer Zeichensatz *)
+ out (""27"O");
+ out (""27"2" + ""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ IF is sheet feed
+ THEN IF feeder name = "schacht2"
+ THEN out (""27""25"2")
+ ELSE out (""27""25"1")
+ FI
+ FI; (* Sheetmode ein *)
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ IF pos (material, "roman") <> 0
+ THEN is roman := TRUE ;
+ ELIF pos (material, "font1") <> 0
+ THEN is roman := FALSE ;
+ ELSE is roman := std typeface name = "roman"
+ FI;
+END PROC open document ;
+
+$openpagetosh$
+PROC open page (INT VAR x start , y start):
+
+ x start := 0;
+ IF is sheet feed
+ THEN y start := y step conversion (2.54) (* 1 Inch *)
+ ELSE y start := 0;
+ FI;
+ x rest := 0;
+ out (""13"");
+END PROC open page;
+
+$openpage$
+PROC open page (INT VAR x start , y start):
+
+ x start := 0 ;
+ y start := y step conversion (y margin) ;
+ x rest := 0;
+ out (""13"").
+END PROC open page;
+
+$openpagep5-7$
+PROC open page (INT VAR x start , y start):
+
+ x start := 0;
+ IF is sheet feed
+ THEN y start := y step conversion (8.466667e-1) (* 2/6 Inch *)
+ ELSE y start := 0;
+ FI;
+ x rest := 0;
+ out (""13"");
+END PROC open page;
+
+$close$
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+ SELECT op code OF
+ CASE 1: close document
+ CASE 2: close page (param1)
+ END SELECT.
+
+close document :
+.
+END PROC close ;
+
+$closepage$
+PROC close page (INT CONST remaining y steps) :
+ IF remaining y steps > 0
+ THEN out (""12"")
+ ELIF is sheet feed
+ THEN out (""27""25"R")
+ FI;
+END PROC close page;
+
+$closepagetosh$
+PROC close page (INT CONST remaining y steps) :
+ IF is sheet feed
+ THEN out (""12"")
+ ELIF remaining y steps > 0
+ THEN out (""12"")
+ FI;
+END PROC close page;
+
+$execute$
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE 1: write text
+ CASE 2: write cmd
+ CASE 3: carriage return
+ CASE 4: move
+ CASE 5: draw
+ CASE 6: on
+ CASE 7: off
+ CASE 8: type
+END SELECT.
+
+from : param1.
+to : param2.
+
+ write text :
+ out subtext (string, from, to).
+
+$cmdp6+$
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN IF NOT is nlq THEN is nlq := TRUE; switch to nlq FI;
+ ELIF buffer = "draft"
+ THEN IF is nlq THEN is nlq := FALSE; switch to draft FI;
+ ELIF buffer = "courier"
+ THEN IF NOT is courier THEN is courier := TRUE; switch to courier FI;
+ ELIF buffer = "souvenir"
+ THEN IF is courier THEN is courier := FALSE; switch to souvenir FI;
+ ELIF buffer = "schwarz"
+ THEN out (""27"r0")
+ ELIF buffer = "rot"
+ THEN out (""27"r1")
+ ELIF buffer = "blau"
+ THEN out (""27"r2")
+ ELIF buffer = "violett"
+ THEN out (""27"r3")
+ ELIF buffer = "gelb"
+ THEN out (""27"r4")
+ ELIF buffer = "orange"
+ THEN out (""27"r5")
+ ELIF buffer = "grün"
+ THEN out (""27"r6")
+ ELSE out (buffer)
+ FI.
+
+$cmdp5-7$
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN IF NOT is nlq THEN switch to nlq FI;
+ is nlq := TRUE;
+ ELIF buffer = "draft"
+ THEN IF is nlq THEN switch to draft FI;
+ is nlq := FALSE;
+ ELSE out (buffer);
+ FI;.
+
+$cmdlq850$
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN IF NOT is nlq THEN is nlq := TRUE; switch to nlq FI;
+ ELIF buffer = "draft"
+ THEN IF is nlq THEN is nlq := FALSE; switch to draft FI;
+ ELIF buffer = "roman"
+ THEN IF NOT is roman THEN act typeface name := "roman" ;
+ switch to roman FI;
+ ELIF buffer = "sansserif"
+ THEN IF NOT is sansserif THEN act typeface name := "sansserif";
+ switch to sansserif FI;
+ ELSE out (buffer)
+ FI.
+
+$cmdoki$
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN IF NOT is nlq THEN is nlq := TRUE; switch to nlq FI;
+ ELIF buffer = "draft"
+ THEN IF is nlq THEN is nlq := FALSE; switch to draft FI;
+ ELIF buffer = "courier"
+ THEN IF NOT is courier THEN is courier := TRUE; switch to courier FI;
+ ELIF buffer = "kassette"
+ THEN IF is courier THEN is courier := FALSE; switch to kassette FI;
+ ELIF buffer = "schwarz"
+ THEN out (""27"r0")
+ ELIF buffer = "rot"
+ THEN out (""27"r1")
+ ELIF buffer = "blau"
+ THEN out (""27"r2")
+ ELIF buffer = "violett"
+ THEN out (""27"r3")
+ ELIF buffer = "gelb"
+ THEN out (""27"r4")
+ ELIF buffer = "orange"
+ THEN out (""27"r5")
+ ELIF buffer = "grün"
+ THEN out (""27"r6")
+ ELSE out (buffer)
+ FI.
+
+$cmdtosh$
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN IF NOT is nlq THEN is nlq := TRUE; switch to nlq FI;
+ ELIF buffer = "draft"
+ THEN IF is nlq THEN is nlq := FALSE; switch to draft FI;
+ ELSE out (buffer);
+ FI;.
+
+$cmdstar$
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN IF NOT is nlq THEN is nlq := TRUE; switch to nlq FI;
+ ELIF buffer = "draft"
+ THEN IF is nlq THEN is nlq := FALSE; switch to draft FI;
+ ELIF buffer = "roman"
+ THEN IF NOT is roman THEN is roman := TRUE; switch to roman FI;
+ ELIF buffer = "font1"
+ THEN IF is roman THEN is roman := FALSE; switch to font1 FI;
+ FI.
+
+$crs$
+ carriage return :
+ x rest := 0;
+ out (""13"").
+
+$move$
+x steps : param1.
+y steps : param2.
+
+move :
+ IF x steps < 0 OR y steps < 0 THEN stop FI;
+ IF x steps > 0 THEN x move FI;
+ IF y steps > 0 THEN y move FI.
+
+$stdmove$
+x move :
+ x rest INCR x steps;
+ high := (x rest) DIV blankbreite;
+ x rest := (x rest) MOD blankbreite;
+ steps := x rest DIV 3;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF steps > 0 AND is slow
+ THEN IF is underline THEN out (" "8"") FI;
+ out (""27"Y" + code (steps) + ""0""); (* 1/360 *)
+ steps TIMESOUT ""0"";
+ x rest := x rest MOD 3
+ FI.
+
+is underline:
+ bit (modification bits,7).
+
+y move :
+ IF y steps > 0
+ THEN high := y steps DIV 255;
+ low := y steps MOD 255;
+ IF high > 0 THEN high TIMESOUT ""27"J"255"" FI; (* 1/180 *)
+ IF low > 0 THEN out (""27"J" + code (low)) FI;
+ FI.
+
+draw :
+ IF x steps < 0 OR y steps <> 0 OR linetype <> 1
+ THEN stop
+ ELIF x steps > 0
+ THEN x draw
+ FI.
+
+x draw :
+ x rest INCR x steps ;
+ steps := x steps DIV 3 ;
+ IF steps > 0 THEN
+ x rest := x steps MOD 3 ;
+ out (""27"Y");
+ out (code (steps MOD 256));
+ out (code (steps DIV 256));
+ steps TIMESOUT ""1"";
+ FI.
+
+$movep5-7$
+ x move :
+ x rest INCR x steps;
+ IF not is underline
+ THEN simple x move
+ ELSE underline x move
+ FI;
+
+ . not is underline :
+ NOT bit (modification bits, 7)
+
+ . simple x move :
+ high := x rest DIV factor 1;
+ x rest := x rest MOD factor 1;
+ out (""27"\");
+ out (code (high MOD 256));
+ out (code (high DIV 256));
+
+ . underline x move :
+ high := x rest DIV factor 2;
+ x rest := x rest MOD factor 2;
+ IF high < blankbreite
+ THEN stop
+ ELSE low := high MOD 127;
+ high := high DIV 127;
+ IF low >= blankbreite
+ THEN low DECR blankbreite;
+ ELSE high DECR 1;
+ low DECR (blankbreite - 127);
+ FI;
+ IF high > 0
+ THEN out (""27" ");
+ out (code (127 - blankbreite));
+ high TIMESOUT " ";
+ FI;
+ out (""27" ");
+ out (code (low));
+ out (" "27" "0"");
+ FI;
+. y move:
+
+ low := y steps MOD 255;
+ high := y steps DIV 255;
+ IF high > 0 THEN high TIMESOUT (""27"J"255"") FI;
+ IF low > 0 THEN out (""27"J" + code (low)) FI;
+
+. draw :
+ IF x steps < 0 OR y steps <> 0
+ THEN stop
+ ELIF x steps > 0
+ THEN x draw
+ FI;
+
+ . x draw :
+ x rest INCR x steps;
+ steps := x rest DIV 4;
+ x rest := x rest MOD 4;
+ IF steps > 0
+ THEN low := steps MOD 256;
+ high := steps DIV 256;
+ out (""27"*"39"");
+ out (code (low));
+ out (code (high));
+ steps TIMESOUT dot;
+ FI;
+
+ . dot :
+ IF linetype = underline linetype
+ THEN ""000""000""001""
+ ELSE ""000""000""048""
+ FI.
+
+
+$onoff$
+ modification : param1
+.
+ on :
+ buffer := on string (modification);
+ IF buffer <> ""
+ THEN modification bits := modification bits OR code (buffer);
+ switch to font;
+ ELSE stop
+ FI
+
+.
+ off :
+ buffer := off string (modification);
+ IF buffer <> ""
+ THEN modification bits := modification bits XOR code (buffer);
+ switch to font;
+ ELSE stop
+ FI.
+
+$typep6+$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is courier
+ THEN switch to courier
+ ELSE switch to souvenir
+ FI ;
+ switch to font;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+
+. switch to font :
+ out (""27"!");
+ out (code (font bits OR modification bits));
+ out (font text);
+
+. switch to nlq :
+ out (""27"x"1"");
+
+. switch to draft :
+ out (""27"x"0"");
+
+. switch to courier :
+ out (""27"k"0"") ;
+
+. switch to souvenir :
+ out (""27"k"15"") ;
+END PROC execute;
+
+$typeplq850$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is roman
+ THEN switch to roman
+ ELSE switch to sansserif
+ FI ;
+ switch to font;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+
+. switch to font :
+ out (""27"!");
+ out (code (font bits OR modification bits));
+ out (font text);
+
+. switch to nlq :
+ out (""27"x"1"");
+
+. switch to draft :
+ out (""27"x"0"");
+
+. switch to roman :
+ out (""27"k"0"") ;
+
+. switch to sansserif :
+ out (""27"k"1"") ;
+END PROC execute;
+
+$typeokieps$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ font bits := code (buffer SUB 3);
+ vertical factor := code (buffer SUB 1);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is courier
+ THEN switch to courier
+ ELSE switch to kassette
+ FI ;
+ switch to font;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+
+. switch to font :
+ out (""27"!");
+ out (code (font bits OR modification bits));
+ IF vertical factor = 2
+ THEN out (""27"w"1"")
+ ELSE out (""27"w"0"")
+ FI;
+ out (font text);
+
+. switch to nlq :
+ out (""27"x"1"");
+
+. switch to draft :
+ out (""27"x"0"");
+
+. switch to courier :
+ out (""27"k"0"") ;
+
+. switch to kassette :
+ out (""27"k"127"") ;
+END PROC execute;
+
+$typep5-7$
+ type :
+ font nr := param1;
+ buffer := font string (font nr);
+ factor 1 := code (buffer SUB 1); (* 720 / Mikroschritte pro Inch mit ESC \ *)
+ factor 2 := code (buffer SUB 2); (* 720 / Mikroschritte pro Inch mit ESC Blank *)
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") DIV factor 2;
+ switch to font;
+ IF is nlq THEN switch to nlq FI;
+
+END PROC execute;
+
+
+PROC switch to font :
+
+ out (""27"!");
+ out (code (font bits OR modification bits));
+ out (font text);
+
+END PROC switch to font;
+
+
+PROC switch to nlq :
+
+ IF is pica OR is elite
+ THEN draft factor 1 := factor 1;
+ factor 1 := 4;
+ draft factor 2 := factor 2;
+ IF is pica
+ THEN factor 2 := 4 * factor 2 DIV 6;
+ blankbreite := char pitch (font nr, " ") DIV factor 2;
+ FI;
+ out (""27"x"1"");
+ ELSE out (""27"x"0"");
+ FI;
+
+END PROC switch to nlq;
+
+
+PROC switch to draft :
+
+ IF is pica OR is elite
+ THEN factor 1 := draft factor 1;
+ factor 2 := draft factor 2;
+ out (""27"x"0"");
+ FI;
+
+END PROC switch to draft;
+
+$typetosh$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+ switch to font;
+
+. switch to font :
+ INT VAR master select bits := font bits OR modification bits ;
+ IF bit (master select bits,0)
+ THEN out (""27":")
+ ELSE out (""18"")
+ FI;
+ IF bit (master select bits,1)
+ THEN out (""27"I"2""27"P"1"")
+ ELSE out (""27"P"0"")
+ FI;
+ IF bit (master select bits,2)
+ THEN out (""27""15"")
+ FI;
+ IF bit (master select bits,3)
+ THEN out (""27"E")
+ ELSE out (""27"F")
+ FI;
+ IF bit (master select bits,4)
+ THEN out (""27"G")
+ ELSE out (""27"H")
+ FI;
+ IF bit (master select bits,5)
+ THEN out (""27"W"1"")
+ ELSE out (""27"W"0"")
+ FI;
+ IF bit (master select bits,6)
+ THEN
+ ELSE
+ FI;
+ IF bit (master select bits,7)
+ THEN out (""27"-"1"")
+ ELSE out (""27"-"0"")
+ FI;
+ out (font text);
+
+
+. switch to nlq :
+ out (""27"I"2"");
+
+. switch to draft :
+ out (""27"I"1"");
+
+END PROC execute;
+
+$typeokiibm$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ vertical factor := code (buffer SUB 1);
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is courier
+ THEN switch to courier
+ ELSE switch to kassette
+ FI ;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+ switch to font;
+
+. switch to font :
+ INT VAR master select bits := font bits OR modification bits ;
+ IF bit (master select bits,0)
+ THEN out (""27":")
+ ELSE out (""18"")
+ FI;
+ IF bit (master select bits,1)
+ THEN out (""27"I"2""27"P"1"")
+ ELSE out (""27"P"0"")
+ FI;
+ IF bit (master select bits,2)
+ THEN out (""27""15"")
+ FI;
+ IF bit (master select bits,3)
+ THEN out (""27"E")
+ ELSE out (""27"F")
+ FI;
+ IF bit (master select bits,4)
+ THEN out (""27"G")
+ ELSE out (""27"H")
+ FI;
+ IF bit (master select bits,5)
+ THEN out (""27"W"1"")
+ ELSE out (""27"W"0"")
+ FI;
+ IF bit (master select bits,6)
+ THEN out(""27"%G")
+ ELSE out(""27"%H")
+ FI;
+ IF bit (master select bits,7)
+ THEN out (""27"-"1"")
+ ELSE out (""27"-"0"")
+ FI;
+ IF vertical factor = 2
+ THEN out (""27""91""64""4""0""0""0""2""0"")
+ ELSE out (""27""91""64""4""0""0""0""1""0"")
+ FI;
+ out (font text);
+
+
+. switch to nlq :
+ out (""27"I"2"");
+
+. switch to draft :
+ out (""27"I"0"");
+
+. switch to courier :
+ out (""27"k"0"") ;
+
+. switch to kassette :
+ out (""27"k"127"") ;
+END PROC execute;
+
+$typebrother$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ vertical factor := code (buffer SUB 1);
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+ switch to font;
+
+. switch to font :
+ INT VAR master select bits := font bits OR modification bits ;
+ IF bit (master select bits,0)
+ THEN out (""27":")
+ ELSE out (""18"")
+ FI;
+ IF bit (master select bits,1)
+ THEN out (""27"I"2""27"P"1"")
+ ELSE out (""27"P"0"")
+ FI;
+ IF bit (master select bits,2)
+ THEN out (""27""15"")
+ FI;
+ IF bit (master select bits,3)
+ THEN out (""27"E")
+ ELSE out (""27"F")
+ FI;
+ IF bit (master select bits,4)
+ THEN out (""27"G")
+ ELSE out (""27"H")
+ FI;
+ IF bit (master select bits,5)
+ THEN out (""27"W"1"")
+ ELSE out (""27"W"0"")
+ FI;
+ IF bit (master select bits,6)
+ THEN
+ ELSE
+ FI;
+ IF bit (master select bits,7)
+ THEN out (""27"-"1"")
+ ELSE out (""27"-"0"")
+ FI;
+ IF vertical factor = 2
+ THEN out (""27""91""64""4""0""0""0""2""0"")
+ ELSE out (""27""91""64""4""0""0""0""1""0"")
+ FI;
+ out (font text);
+
+. switch to nlq :
+ out (""27"I"2"");
+
+. switch to draft :
+ out (""27"I"0"");
+
+END PROC execute;
+
+$typestar$
+ type :
+ font nr := param1 ;
+ buffer := font string (font nr);
+ font bits := code (buffer SUB 3);
+ font text := subtext (buffer, 4);
+ blankbreite := char pitch (font nr, " ") ;
+ IF is roman
+ THEN switch to roman
+ ELSE switch to font1
+ FI ;
+ switch to font;
+ IF is nlq
+ THEN switch to nlq
+ ELSE switch to draft
+ FI;
+
+. switch to font :
+ out (""27"!");
+ out (code (font bits OR modification bits));
+ out (font text);
+
+. switch to nlq :
+ out (""27"x"1"");
+
+. switch to draft :
+ out (""27"x"0"");
+
+. switch to roman :
+ out (""27"k"0"") ;
+
+. switch to font1 :
+ out (""27"k"1"") ;
+END PROC execute;
+
+
+
+$printerlq1500$
+PACKET printer driver
+
+(**************************************************************************)
+(* Stand : 29.07.86 *)
+(* EPSON LQ-1500 Version : 4 *)
+(* Autor : Rudolf Ruland *)
+(* geändert am 15.12.88 hjh *)
+(**************************************************************************)
+
+ DEFINES printer,
+ open,
+ close,
+ execute,
+
+ paper size,
+ std quality:
+
+LET
+(* underline = 1,
+ bold = 2,
+ italics = 4,
+ reverse = 8, *)
+
+ underline linetype = 1,
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1,
+ c write cmd = 2,
+ c carriage return = 3,
+ c move = 4,
+ c draw = 5,
+ c on = 6,
+ c off = 7,
+ c type = 8;
+
+INT VAR rest, high, low, factor;
+BOOL VAR is nlq, factor was 6, condensed;
+REAL VAR x size, y size;
+TEXT VAR std quality name, buffer;
+
+(*********************************************************************)
+
+paper size (13.6 * 2.54, 12.0 * 2.54);
+std quality ("draft");
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+
+PROC std quality (TEXT CONST quality) :
+
+ IF quality = "nlq" OR quality = "draft"
+ THEN std quality name := quality;
+ ELSE errorstop ("unzulaessige Betriebsart")
+ FI;
+
+END PROC std quality;
+
+TEXT PROC std quality : std quality name END PROC std quality;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+ factor := 0;
+ factor was 6 := FALSE;
+ condensed := FALSE;
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ y steps := (y steps DIV 30) * 30;
+ out (""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""); (* Amerikanischer Zeichensatz *)
+ out (""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ x start := 0;
+ y start := 0;
+ rest := 0;
+ out (""13"");
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+END SELECT;
+
+.
+ close document :
+
+
+. remaining y steps : param1
+.
+ close page :
+ IF remaining y steps > 0 THEN out (""12"") FI
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ out subtext (string, from, to)
+
+.
+ write cmd :
+ buffer := subtext (string, from, to);
+ IF buffer = "nlq"
+ THEN is nlq := TRUE;
+ near letter quality;
+ ELIF buffer = "draft"
+ THEN is nlq := FALSE;
+ draft quality;
+ ELSE out (buffer);
+ FI;
+
+ . near letter quality :
+ IF factor = 6
+ THEN factor was 6 := TRUE;
+ factor := 4;
+ ELSE factor was 6 := FALSE;
+ FI;
+ IF condensed
+ THEN out (""27"x"0"")
+ ELSE out (""27"x"1"")
+ FI;
+
+ . draft quality :
+ IF factor was 6
+ THEN factor was 6 := FALSE;
+ factor := 6;
+ FI;
+ out (""27"x"0"");
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ rest := 0;
+ out (""13"");
+
+
+. x steps : param1
+. y steps : param2
+.
+ move :
+ IF x steps < 0 OR y steps < 0
+ THEN stop
+ ELIF x steps > 0
+ THEN x move
+ ELIF y steps > 0
+ THEN y move
+ FI;
+
+ . x move :
+ high := (x steps + rest) DIV factor;
+ rest := (x steps + rest) MOD factor;
+ out (""27"\");
+ out (code (high MOD 256));
+ out (code (high DIV 256));
+
+ . y move :
+ high := y steps DIV 255;
+ low := y steps MOD 255;
+ IF high > 0 THEN high TIMESOUT ""27"J"255"" FI;
+ IF low > 0 THEN out (""27"J"); out (code (low)) FI;
+
+.
+ draw :
+ IF x steps < 0 OR y steps <> 0 OR linetype <> underline linetype
+ THEN stop
+ ELIF x steps > 0
+ THEN x draw
+ FI;
+
+ . x draw :
+ high := (x steps + rest) DIV 6;
+ rest := (x steps + rest) MOD 6;
+ IF high > 0
+ THEN low := high MOD 255;
+ high := high DIV 255;
+ out (""27"V");
+ out (code (low));
+ out (""27"*"1""1""0""1""27"V"0"");
+ FOR low FROM 1 UPTO high
+ REP out (""27"V"255""27"*"1""1""0""1""27"V"0"") PER;
+ FI;
+
+
+. modification : param1
+.
+ on :
+ IF on string (modification) <> ""
+ THEN out (on string (modification))
+ ELSE stop
+ FI
+
+.
+ off :
+ IF off string (modification) <> ""
+ THEN out (off string (modification))
+ ELSE stop
+ FI
+
+
+. font nr : param1
+.
+ type :
+ buffer := font string (font nr);
+ out (buffer);
+ factor := pitch factor;
+ IF is nlq THEN near letter quality FI;
+
+ . pitch factor : (* Mikroschritt *)
+ INT CONST font bits := code (buffer SUB 3);
+ IF bit (font bits, 1)
+ THEN condensed := FALSE; 2 (* proportional 1/360 Inch *)
+ ELIF pos (buffer, ""27"x"1"") <> 0
+ THEN condensed := FALSE; 4 (* near letter 1/180 Inch *)
+ ELIF bit (font bits, 2)
+ THEN condensed := TRUE; 3 (* condensed 1/240 Inch *)
+ ELIF bit (font bits, 0)
+ THEN condensed := FALSE; 4 (* elite 1/180 Inch *)
+ ELSE condensed := FALSE; 6 (* pica 1/120 Inch *)
+ FI
+
+END PROC execute;
+
+
+$end$
+INT VAR reply; DATASPACE VAR ds; FILE VAR file;
+
+PROC printer:
+
+ disable stop;
+ continue (server channel);
+ check error (error message);
+ ds := nilspace;
+ REP forget (ds);
+ execute print;
+ IF is error AND online THEN put error; clear error; FI;
+ PER;
+END PROC printer;
+
+PROC execute print:
+
+ LET ack = 0, fetch code = 11, file type = 1003;
+ enable stop;
+ ds := nilspace;
+ call (father, fetch code, ds, reply);
+ IF reply = ack CAND type (ds) = file type
+ THEN file := sequential file (input, ds);
+ print (file,
+ PROC (INT CONST, INT VAR, INT VAR) open,
+ PROC (INT CONST, INT CONST) close,
+ PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);
+ FI;
+END PROC execute print;
+
+PROC check error(TEXT CONST message):
+
+ IF is error
+ THEN clear error; rename myself (message);
+ IF is error THEN end(myself) FI;
+ pause (9000); end(myself);
+ FI;
+END PROC check error;
+
+END PACKET printerdriver
+
+
diff --git a/printer/dotmatrix24/printer.24.nadel b/printer/dotmatrix24/printer.24.nadel
new file mode 100644
index 0000000..579f67f
--- /dev/null
+++ b/printer/dotmatrix24/printer.24.nadel
@@ -0,0 +1,776 @@
+
+(*************************************************************************)
+(* Installationsprogramm für Stand : 3. 1.89 *)
+(* 24-Nadel Drucker Version : 0.9 *)
+(* Autor : hjh *)
+(*************************************************************************)
+
+PACKET driver inst 24
+
+
+ DEFINES treiber einrichten:
+
+
+LET up = ""3""13""5"",
+
+ generator name = "printer.24.nadel",
+
+ description file name = "beschreibungen24",
+ module file name = "module24";
+
+
+INT VAR pr channel,
+ quality,
+ paper format number,
+ service option;
+TEXT VAR fonttab name :: "",
+ driver name :: "";
+TEXT VAR inp;
+BOOL VAR was esc;
+
+treiber einrichten
+
+PROC treiber einrichten:
+
+ treiber einrichten (0)
+END PROC treiber einrichten;
+
+PROC treiber einrichten (INT CONST service opt):
+
+ ask for print channel;
+ main menu;
+ IF installed
+ THEN generate printer spool
+ ELSE inform about restart
+ FI.
+
+ ask for printchannel:
+ inits;
+ page;
+ headline ("Druckerkanal - Einstellung");
+ cursor (1, 15);
+ putline ("Hinweis: Die Druckerkanalnummer kann auch nachträglich mit");
+ putline (" 'serverchannel (Kanalnummer)' in der Task """ +
+ name (myself) + """");
+ putline (" verändert werden.");
+ REP
+ cursor (1, 10);
+ put (""5"EUMEL-Kanalnummer des Druckerkanals:");
+ get (pr channel);
+ disable stop;
+ serverchannel (pr channel);
+ BOOL VAR no error :: NOT is error;
+ IF is error
+ THEN cursor (1, 7);
+ put error;
+ putline ("Eingabe korrigiert wiederholen!")
+ FI;
+ clear error;
+ enable stop
+ UNTIL no error PER.
+
+ inits:
+ line;
+ IF single task
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+ FI;
+ command dialogue (TRUE);
+ IF name (myself) <> "PRINTER"
+ THEN putline ("Diese Task heißt nicht ""PRINTER"", sondern """ +
+ name (myself) + """ !");
+ IF yes ("Soll die Task in ""PRINTER"" umbenannt werden ?")
+ THEN rename myself ("PRINTER")
+ FI
+ FI;
+ INT VAR choice;
+ service option := service opt.
+
+ single task: (pcb (9) AND 255) = 1.
+
+ main menu:
+ BOOL VAR installed :: FALSE;
+ REP
+ show main menu;
+ get choice;
+ treat choice
+ UNTIL was esc OR installed PER.
+
+ show main menu:
+ page;
+ headline("Hauptmenü 24-Nadel-Drucker");
+ putline (" 1. Brother");
+ putline (" 2. Epson");
+ putline (" 3. NEC");
+ putline (" 4. OKI");
+ putline (" 5. Toshiba").
+
+ get choice:
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Installation abbrechen");
+ ask user (5).
+
+ treat choice:
+ SELECT int (inp) OF
+ CASE 1: brother menu
+ CASE 2: epson menu
+ CASE 3: nec menu
+ CASE 4: oki menu
+ CASE 5: toshiba menu
+ END SELECT.
+
+
+ brother menu:
+ page;
+ headline ("brother - Menü");
+ putline (" 1. M-1724 L");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (1);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ brother m1724l inst
+ FI.
+
+ brother m1724l inst:
+ putline ("brother M-1724 L");
+ line;
+ putline ("Wählen Sie folgende DIP-Schalter Optionen:");
+ putline ("Emulationsmodus IBM Proprinter XL ");
+ putline ("Automatischer Zeilenvorschub Nein ");
+ show control options ("paperfeed, std speed, top margin");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.brother");
+ generate ("brotherm1724l");
+ adjust papersize;
+ adjust quality;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+
+ toshiba menu:
+ page;
+ headline ("TOSHIBA - Menü");
+ putline (" 1. P 321");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (1);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ toshiba p321 inst
+ FI.
+
+ toshiba p321 inst:
+ putline ("TOSHIBA P 321");
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S3-8 S3-7 S3-5 übrige Schalter");
+ putline ("OFF OFF *) egal ");
+ putline ("*) ON: Einzelblatteinzug, OFF: kein Einzug");
+ show control options ("std speed, paper feed");
+ show material options("slow, fast");
+ show command options ("nlq, draft");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.toshiba.p321");
+ generate ("toshp321");
+ adjust papersize;
+ adjust quality;
+ do ("papersize(21.0,30.48)");
+ installed := TRUE;
+ FI.
+
+
+ epson menu:
+ page;
+ headline ("Epson - Menü");
+ putline (" 1. LQ 850");
+ putline (" 2. LQ 1050");
+ putline (" 3. LQ 1500");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (3);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1 : lq850 inst
+ CASE 2 : lq850 inst
+ CASE 3 : lq1500 inst
+ END SELECT
+ FI.
+
+ lq850 inst:
+ IF choice = 1
+ THEN putline ("Epson LQ 850")
+ ELSE putline ("Epson LQ 1050")
+ FI;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("SW1-1 SW1-2 SW1-3 SW1-4 SW1-5 SW1-6 SW1-7 SW1-8");
+ putline ("egal egal egal egal egal egal *1) OFF ");
+ putline ("*1) ON: Einzelblatteinzug, OFF: kein Einzug"); line;
+ putline ("SW2-1 SW2-2 SW2-3 SW2-4 SW2-5 SW2-6 SW2-7 SW2-8");
+ putline ("egal egal *2) OFF OFF");
+ putline ("*2) SW2-2 bis SW2-6 müssen je nach Art der Schnittstelle ");
+ putline (" gesetzt werden (Druckerhandbuch)");
+ show control options ("std speed, top margin, std typeface, paperfeed");
+ show material options ("slow, fast, draft, nlq, roman, sansserif");
+ show command options ("draft, nlq, roman, sansserif");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.epson.lq850");
+ generate ("epsonlq850");
+ adjust quality;
+ adjust papersize;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ lq1500 inst:
+ putline ("EPSON LQ-1500");
+ show control options ("");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq");
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.epson.lq1500");
+ generate ("epsonlq1500");
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ nec menu:
+ page;
+ headline ("NEC - Menü");
+ putline (" 1. PINWRITER P5 ");
+ putline (" 2. PINWRITER P6 ");
+ putline (" 3. PINWRITER P7 ");
+ putline (" 4. PINWRITER P6 PLUS");
+ putline (" 5. PINWRITER P7 PLUS");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (5);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1 : necp5p7 inst
+ CASE 2 : necp6 inst
+ CASE 3 : necp5p7 inst
+ CASE 4 : necp6plus inst
+ CASE 5 : necp6plus inst
+ END SELECT
+ FI.
+
+ necp5p7 inst:
+ IF choice = 1
+ THEN putline ("NEC PINWRITER P5")
+ ELSE putline ("NEC PINWRITER P7")
+ FI;
+ show control options ("paper feed");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.nec.p5.new");
+ generate ("necp5p7");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ necp6 inst:
+ putline ("NEC PINWRITER P6 ");
+ show control options ("paper feed");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq");
+ ask for quality;
+ ask for papersize;
+ IF all right
+ THEN get fonttable ("fonttab.nec.p5.new");
+ generate ("necp6");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ necp6plus inst:
+ IF choice = 4
+ THEN putline ("NEC PINWRITER P6 PLUS")
+ ELSE putline ("NEC PINWRITER P7 PLUS")
+ FI;
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("CR FUNCTION CR ONLY ");
+ show control options ("std speed, top margin, std typeface, paperfeed");
+ show material options ("slow, fast, draft, nlq, courier, souvenir");
+ show command options ("draft, nlq, courier, souvenir");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.nec.p6+");
+ generate ("necp6+");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE;
+ IF choice = 5 THEN do ("papersize (34.544, 30.48)") FI;
+ FI.
+
+ oki menu:
+ page;
+ headline ("OKI - Menü");
+ putline (" 1. MICROLINE 390 IBM-/EPSON-kompatibel");
+ putline (" 2. MICROLINE 391 IBM-/EPSON-kompatibel");
+ putline (" 3. MICROLINE 393/393C EPSON-kompatibel");
+ putline (" 4. MICROLINE 393/393C IBM-kompatibel");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (4);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1 : oki ml390 inst
+ CASE 2 : oki ml390 inst
+ CASE 3 : oki ml393eps inst
+ CASE 4 : oki ml393ibm inst
+ END SELECT
+ FI.
+
+ oki ml390 inst:
+ IF choice = 1
+ THEN putline ("OKI Microline 390") ;
+ ELSE putline ("OKI Microline 391") ;
+ FI;
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("EMULATION MODE EPSON LQ ");
+ putline ("AUTO LF NO ");
+ show control options ("paperfeed, std speed, top margin");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq, courier, kassette");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.oki");
+ generate ("oki390/391");
+ adjust papersize;
+ adjust quality;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+
+ oki ml393eps inst:
+ putline ("OKI Microline 393 EPSON-kompatibel");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("AUTO LF NO ");
+ show control options ("paperfeed, std speed, top margin, std typeface");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq, courier, kassette, schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.oki");
+ generate ("oki393/393Ceps");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+ oki ml393ibm inst:
+ putline ("OKI Microline 393 IBM-kompatibel");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Wählen Sie folgende Optionen im Druckmenü des Druckers:");
+ putline ("EMULATION MODE ASCII ");
+ putline ("AUTO LF NO ");
+ show control options ("paperfeed, std speed, top margin, std typeface");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq, courier, kassette, schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for papersize;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.oki");
+ generate ("oki393/393Cibm");
+ adjust papersize;
+ adjust quality;
+ installed := TRUE
+ FI.
+
+
+
+generate printer spool:
+ IF service opt = 0
+ THEN forget (generator name, quiet);
+ forget (driver name, quiet)
+ FI;
+ eumel must advertise;
+ cursor (1, 10);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (2);
+ putline ("Hinweis: Dieses Installationsprogramm kann in der Task """ + name (myself) + """");
+ putline (" mit 'treiber einrichten' aufgerufen werden, wenn ein anderer");
+ putline (" Drucker eingesetzt werden soll.");
+ line (2);
+ put ("Generierung beendet, weiter mit 'SV'");
+ break (quiet);
+ do ("spool manager (PROC printer)").
+
+ inform about restart:
+ page;
+ putline ("Es ist kein Druckertreiber installiert worden!");
+ line;
+ putline ("Dieses Installationsprogramm kann in der Task """ + name (myself) + """");
+ putline ("mit 'treiber einrichten' erneut aufgerufen werden.");
+ line.
+
+END PROC treiber einrichten;
+
+PROC headline (TEXT CONST header):
+
+ cursor (13,1);
+ putline ("E U M E L - Druckertreiber - Installations - Programm");
+ cursor (40 - LENGTH header DIV 2, 2);
+ put (header);
+ line (2)
+END PROC headline;
+
+PROC ask user (INT CONST max choice):
+
+ TEXT VAR exit;
+ inp := "";
+ REP
+ cursor (1,23);
+ IF inp = ""
+ THEN put ("Ihre Wahl (Nummer eingeben):")
+ ELSE put ("FEHLER! Eingabe korrigieren:")
+ FI;
+ editget (inp, ""27"", "", exit);
+ was esc := exit = ""27"";
+ UNTIL was esc OR ok PER.
+
+ ok:
+ int (inp) > 0 AND int (inp) <= max choice AND last conversion ok.
+END PROC ask user;
+
+PROC show control options (TEXT CONST options):
+
+ line;
+ putline ("Steuerprozeduren in der Task """ + name (myself) + """:");
+ write ("papersize, std quality");
+ IF options <> ""
+ THEN put (",");
+ putline (options)
+ FI
+END PROC show control options;
+
+PROC show material options (TEXT CONST options):
+
+ line;
+ putline ("Mögliche Materialwerte (#material(""..."")#):");
+ putline (options)
+END PROC show material options;
+
+PROC show command options (TEXT CONST options):
+
+ line;
+ putline ("Mögliche direkte Druckeranweisungen (#""...""#):");
+ putline (options)
+END PROC show command options;
+
+PROC ask for quality:
+
+ line (1);
+ putline ("Standard - Druckqualität:");
+ line;
+ REP out (up);
+ IF yes ("Draft Quality (schneller, aber nicht so schön)")
+ THEN quality := 1; LEAVE ask for quality
+ FI;
+ out (up);
+ IF yes ("Near Letter Quality (schöner, aber langsamer)")
+ THEN quality := 2; LEAVE ask for quality
+ FI;
+ PER
+END PROC ask for quality;
+
+PROC adjust quality:
+
+ IF quality = 1
+ THEN do ("std quality (""draft"")")
+ ELSE do ("std quality (""nlq"")")
+ FI
+END PROC adjust quality;
+
+PROC ask for papersize :
+LET up = ""3""13""5"";
+
+ paper format number := paper format ;
+
+ . paper format :
+ line (1);
+ putline ("Papierformat:");
+ line;
+ REP out (up);
+ IF yes ("Endlospapier, 8 Zoll breit")
+ THEN LEAVE paper format WITH 1 FI;
+ out (up);
+ IF yes ("Endlospapier, 13.2 Zoll breit")
+ THEN LEAVE paper format WITH 2 FI;
+ out (up);
+ IF yes ("Einzelblatteinzug, DINA 4")
+ THEN LEAVE paper format WITH 3 FI;
+ PER;
+ 0
+END PROC ask for papersize;
+
+
+PROC adjust papersize:
+
+ SELECT paper format number OF
+ CASE 1 : do("papersize ( 8.0 * 2.54, 12.0 * 2.54)");
+ do ("paper feed (""tractor"")")
+ CASE 2 : do("papersize (13.2 * 2.54, 12.0 * 2.54)");
+ do ("paper feed (""tractor"")")
+ CASE 3 : do("papersize (21.0, 29.7)");
+ do ("paper feed (""sheet"")")
+ END SELECT
+
+END PROC adjust papersize;
+
+BOOL PROC all right:
+
+ line (3);
+ cursor (1,23);
+ yes ("Soll der ausgewählte Druckertreiber installiert werden")
+END PROC all right;
+
+PROC get fonttable (TEXT CONST name):
+
+ fonttab name := name;
+ from archive ((description file name & module file name & fonttab name)
+ - all);
+ fonttable (fonttab name);
+ command dialogue (FALSE);
+ save (fonttab name, /"configurator");
+ IF service option = 0
+ THEN forget (fonttab name)
+ FI;
+ command dialogue (TRUE);
+END PROC get fonttable;
+
+PROC from archive (THESAURUS CONST files):
+
+ IF highest entry (files) > 0
+ THEN fetch from archive;
+ release (archive);
+ putline ("Archiv abgemeldet !")
+ FI.
+
+ fetch from archive:
+ THESAURUS VAR thes :: files;
+ REP
+ ask for archive;
+ reserve archive;
+ fetch (thes / ALL archive, archive);
+ thes := thes - all
+ UNTIL highest entry (thes) = 0 PER.
+
+ask for archive:
+ line;
+ putline ("Bitte Archiv mit den Dateien");
+ TEXT VAR buffer;
+ INT VAR index :: 0;
+ REP
+ get (thes, buffer, index);
+ putline (" " + buffer)
+ UNTIL index = 0 PER;
+ putline ("einlegen !");
+ line;
+ putline ("Wenn eingelegt: Taste drücken !");
+ inchar (buffer).
+
+reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop.
+
+END PROC from archive;
+
+THESAURUS OP & (TEXT CONST left, right):
+ THESAURUS VAR result := empty thesaurus;
+ insert (result, left);
+ insert (result, right);
+ result
+END OP &;
+
+THESAURUS OP & (THESAURUS CONST left, TEXT CONST right):
+ THESAURUS VAR result := left;
+ insert (result, right);
+ result
+END OP &;
+
+PROC generate (TEXT CONST name):
+
+ open files;
+ read description;
+ build programme;
+ insert programme;
+ forget files.
+
+ open files:
+ line (5);
+ cursor (1, 20);
+ putline (""4"Bitte warten !");
+ putline (" - Der Treiber wird generiert.");
+ driver name := "printer." + name + "(generiert)";
+ IF exists (driver name)
+ THEN forget (driver name, quiet)
+ FI;
+ FILE VAR des file :: sequential file (modify, description file name),
+ mod file :: sequential file (modify, module file name),
+ driver file :: sequential file (output, driver name).
+
+ read description:
+ to line (des file, 1);
+ col (des file, 1);
+ downety (des file, "$" + name + "$");
+ IF eof (des file)
+ THEN errorstop ("Beschreibung von """ + name + """ nicht im"13""10"" +
+ "Descriptions-File enthalten")
+ FI;
+ TEXT VAR description :: "",
+ record;
+ BOOL VAR done :: FALSE;
+ read record (des file, record);
+ record := subtext (record, col (des file) + LENGTH name + 2);
+ WHILE NOT eof (des file) AND NOT done REP
+ treat record
+ PER.
+
+ treat record:
+ INT VAR dollar pos :: pos (record, "$");
+ IF dollar pos = 0
+ THEN description CAT compress (record);
+ down (des file);
+ read record (des file, record)
+ ELSE description CAT compress (subtext (record, 1, dollar pos - 1));
+ col (des file, dollar pos);
+ done := TRUE;
+ FI.
+
+ build programme:
+ get module name;
+ WHILE still modules REP
+ find module;
+ transfer module;
+ get module name
+ PER.
+
+ get module name:
+ INT VAR semicol pos :: pos (description, ";");
+ TEXT VAR module name;
+ IF semicol pos > 0
+ THEN module name := subtext (description, 1, semicol pos - 1);
+ description := subtext (description, semicol pos + 1)
+ ELSE module name := description;
+ description := ""
+ FI.
+
+ still modules:
+ module name <> "" OR description <> "".
+
+ find module:
+ to line (mod file, 1);
+ col (mod file, 1);
+ downety (mod file, "$" + module name + "$");
+ IF eof (mod file)
+ THEN errorstop ("Modul """ + module name + """ nicht im"13""10"" +
+ "Modul-File enthalten")
+ FI.
+
+ transfer module:
+ done := FALSE;
+ read record (mod file, record);
+ record := subtext (record, col (mod file) + LENGTH module name + 2);
+ WHILE NOT eof (mod file) AND NOT done REP
+ transfer record
+ PER.
+
+ transfer record:
+ dollar pos := pos (record, "$");
+ IF dollar pos = 0
+ THEN write (driver file, compress (record));
+ line (driver file);
+ down (mod file);
+ read record (mod file, record)
+ ELSE write (driver file, compress (subtext (record, 1,
+ dollar pos - 1)));
+ col (mod file, dollar pos);
+ done := TRUE;
+ cout (line no (mod file))
+ FI.
+
+ insert programme:
+ IF online
+ THEN putline (" - Der Treiber wird insertiert.")
+ FI;
+ check off;
+ insert (driver name).
+
+ forget files:
+ IF service option = 0
+ THEN forget (description file name, quiet);
+ forget (module file name, quiet)
+ FI .
+END PROC generate;
+
+END PACKET driver inst 24
+
diff --git a/printer/dotmatrix24/readme b/printer/dotmatrix24/readme
new file mode 100644
index 0000000..d526aa3
--- /dev/null
+++ b/printer/dotmatrix24/readme
@@ -0,0 +1,320 @@
+#type("nlq10")##limit(18.0)##start(1.5,1.0)#
+#head#
+Treiber-Installations-Programm #right#Seite %
+für 24-Nadel-Matrixdrucker #right#23.12.1988
+
+
+#end#
+#on("u")#Dokumentation zum Treiber-Installations-Programm für 24-Nadel-
+Matrixdrucker#off("u")#
+
+#on("u")#Inhalt:#off("u")#
+
+1. Installations- und Gebrauchsanleitung
+2. Druckertreiber-Auswahl
+3. Steuerungsmöglichkeiten und Spezialfeatures
+4. Weitere Hinweise
+
+
+#on("b")#1. Installations- und Gebrauchsanleitung#off("b")#
+
+#on("u")#Einrichten#off("u")#
+So wird das Treiber-Installationsprogramm eingerichtet:
+
+ SV drücken
+
+ nach 'gib supervisor kommando:'
+
+ begin("PRINTER","SYSUR")
+
+ in der Task "PRINTER" (nach 'gib kommando'):
+
+ archive ("std.printer")
+ fetch ("printer.24.nadel",archive)
+ check off
+ insert ("printer.24.nadel")
+
+Das Programm wird dann insertiert.
+
+#on("u")#Druckerkanal#off("u")#
+Hiernach wird die Kanalnummer des Druckers erfragt. Wenn der Drucker
+über Parallelschnittstelle betrieben wird, ist die Kanalnummer
+meistens 15.
+
+#on("u")#Menüsystem#off("u")#
+Das Installationsprogramm zeigt nun eine Liste von Druckerherstellern.
+Wählen Sie den Hersteller Ihres Druckers aus! Hiernach wird eine Liste
+der unterstützten Drucker dieses Herstellers gezeigt. Wählen Sie hier
+den passenden Typ aus!
+Das Installationsprogramm zeigt nun einige Informationen zu dem ange­
+wählten Drucker. Besonders zu beachten sind hierbei #on("u")#Angaben zur Konfi­
+guration des Druckers#off("u")# (z.B. DIP-Schalter). Der Drucker muß unbedingt
+wie angegeben konfiguriert werden, wenn er mit dem ausgewählten Trei­
+ber betrieben werden soll.
+
+Hinweise zu Konfigurationsangaben:
+1. Die Angabe 'egal' bedeutet, daß die Einstellung für die Funktion
+ des Treibers keine Bedeutung hat. Dennoch solte der Anwender darauf
+ achten, welche Funktion die Schalter haben (Druckerhandbuch!). So
+ ist es zum Beispiel immer empfehlenswert, den Papierende-Sensor zu
+ aktivieren, damit der Drucker nach Papierende nicht auf der Walze
+ weiterdruckt.
+2. Die Konfigurationsangaben beziehen sich immer auf genau den ausge­
+ wählten Druckertyp. Wenn Sie den Treiber mit einem anderen Drucker
+ als den ausgewählten verwenden, dann beachten Sie folgende Regeln
+ für die Konfiguration:
+ - Der Drucker muß auf eine passende Emulation konfiguriert werden.
+ - Der Drucker darf bei einem Carriage Return (Code 13) keinen Zei­
+ lenvorschub durchführen.
+ - Der Drucker darf die Perforation #on("u")#nicht#off("u")# automatisch überspringen.
+
+ - Auf Seitenlängen und internationale Zeichensätze müssen Sie nicht
+ achten.
+
+(Hinweise zur Auswahl des richtigen Treibers gibt Abschnitt 2)
+
+Nach den Konfigurationsangaben werden Steuerungsmöglichkeiten des
+ausgewählten Treibers angezeigt. (Siehe hierzu Abschnitt 3)
+
+Falls der Treiber bestimmte grundsätzliche Betriebsmöglichkeiten er­
+laubt (z.B. DRAFT/NLQ, Einzelblatteinzug), werden Sie danach gefragt,
+welche Möglichkeit standardmäßig gewählt werden soll. diese Vorein­
+stellungen können nachträglich in der Task "PRINTER" mit den entspre­
+chenden Steuerprozeduren neu gesetzt werden. Außerdem können bestimmte
+Einstellungen noch für jedes einzelne Dokument (d.h. für jede Druck­
+datei) gewählt ('material'-Anweisung) oder sogar innerhalb eines Doku­
+ments verändert werden (direkte Druckeranweisung \#"..."\#).
+Über die Steuerungsmöglichkeiten informiert Abschnitt 3 ausführlicher.
+
+
+#on("b")#2. Druckertreiber-Auswahl#off("b")#
+
+#on("u")#Verwendung nicht im Menü enthaltener Drucker#off("u")#
+Für den Fall, daß Sie genau Ihren Drucker im Menü nicht finden, soll­
+ten Sie zunächst versuchen, ob ein Treiber für einen anderen Drucker
+des gleichen Herstellers mit Ihrem Drucker korrekt arbeitet.
+Falls dies nicht funktioniert oder der Hersteller überhaupt nicht im
+Menü erscheint, müssen Sie herausfinden (Druckerhandbuch, -händler!),
+welchen Drucker Ihr Drucker emuliert oder welchem er ähnlich ist.
+(Viele Drucker verfügen über EPSON LQ-1000 oder IBM Grafikdrucker bzw.
+Proprinter-Eumulationen.)
+Eine der beiden Anpassungen 'EPSON LQ-1050' oder 'OKI ML-393
+IBM-kompatibel' müßte immer einen (Minimal-) Betrieb ermöglichen (wobei die
+Verwendung der Proportionalschrift bzw. der doppelt hohen Schriften u. U.
+nicht funktioniert).
+
+
+#on("b")#3. Steuerungsmöglichkeiten und Spezialfeatures#off("b")#
+
+Einige Treiber bieten bestimmte Einstellungsmöglichkeiten (z.B.
+DRAFT/NLQ) und/oder Spezialfeatures (z.B. Farbdruck).
+Die Einstellungen können über
+- Steuerprozeduren
+- Materialanweisungen bzw.
+- direkte Druckeranweisungen
+vorgenommen werden.
+
+#on("u")#Steuerprozeduren#off("u")#
+setzen Einstellungen, die für alle Dokumente (Druckdateien) gelten
+sollen. Die Prozeduren müssen in der Druckspooltask (meist: "PRINTER")
+aufgerufen werden. #on("b")#Gültig werden die Änderungen erst, wenn danach in
+der Druckspooltask das Kommando 'start' gegeben wird!#off("b")#
+
+PROC papersize (REAL CONST breite, länge)
+ Dient zur Einstellung der Größe der physikalisch beschreibbaren
+ Fläche.
+ Beispiel: papersize (20.32, 30.48)
+ (Standardeinstellung für Endlospapier 8 Zoll breit und
+ 12 Zoll lang)
+
+PROC papersize
+ Informationsprozedur
+
+PROC top margin (REAL CONST margin)
+ Falls der Drucker es nicht erlaubt, direkt am Blattanfang zu druk­
+ ken (zum Beispiel wegen eines Einzelblatteinzugs), muß mit dieser
+ Prozedur die Länge des oberen Randes, den der Drucker nicht be­
+ drucken kann, in cm angegeben werden.
+ Beispiel: top margin (2.0)
+ (Teilt dem Druckertreiber mit, daß die ersten 2 cm
+ nicht bedruckbar sind.)
+
+REAL PROC top margin
+ Informationsprozedur
+
+PROC std speed (TEXT CONST speed)
+ Parameter: slow, fast
+ Wahl zwischen Positionierung in Mikroschritten (slow) oder in
+ Blanks (fast).
+ Beispiel: std speed ("slow")
+
+TEXR PROC std speed
+ Informationsprozedur
+
+PROC std quality (TEXT CONST quality)
+ übliche Parameter: draft, nlq
+ Wahl zwischen Datenverarbeitungs-Qualität und Schönschrift-
+ Qualität
+ Beispiel: std quality ("draft")
+
+TEXT PROC std quality
+ Informationsprozedur
+
+PROC std typeface (TEXT CONST typeface)
+ übliche Parameter: roman, sansserif, courier
+ Wahl zwischen verschiedenen NLQ-Schriftarten (nur sichtbar im
+ NLQ-Modus, das heißt 'std typeface' schaltet nicht auf NLQ).
+ Beispiel: std typeface ("roman")
+
+TEXT PROC std typeface
+ Informationsprozedur
+
+PROC paper feed (TEXT CONST name)
+ übliche Parameter: tractor, sheet, schacht1, schacht2
+ Wählt Endlospapier oder Einzelblatteinzug und ggf. Schachtnummer.
+ Beispiel: paper feed ("sheet")
+
+TEXT PROC paper feed
+ Informationsprozedur
+
+
+#on("u")#Materialanweisungen \#material("...")\##off("u")#
+müssen in der Druckdatei vor dem ersten druckbaren Zeichen stehen und
+setzen Einstellungen für eine ganze Datei. (Materialanweisungen haben
+für die jeweilige Datei Vorrang vor den durch Steuerprozeduren einge­
+stellten Standardwerten. Diese werden durch die Materialanweisung aber
+nicht geändert.)
+
+Beispiel: \#material("nlq")\#
+ sorgt bei entsprechendem Treiber dafür, daß das gesamte
+ Dokument in Schönschrift-Qualität ausgedruckt wird, egal
+ wie 'std quality' eingestellt ist.
+
+#on("b")#Es darf in einer Datei nur eine Materialanweisung stehen!#off("b")# Sollen meh­
+rere Einstellungen vorgenommen werden, müssen sie in einer Anweisung
+erscheinen. Beispiel: \#material("sheet;draft")\#
+
+
+#on("u")#direkte Druckeranweisungen \#"..."\##off("u")#
+gelten ab der Position, an der sie in der Datei auftreten. Sie haben
+(sofern sie erlaubt sind,) Vorrang vor Standardeinstellungen und
+Materialeinstellungen.
+
+Beispiel: \#"draft"\#
+ schaltet (bei entsprechendem Treiber) auf Datenverar­
+ beitungs-Qualität, egal welche Standardeinstellung vorliegt
+ und welche Materialanweisung gegeben wurde.
+
+#on("b")#In einer Druckeranweisung darf nur eine Einstellung vorgenommen
+werden.#off("b")# Also: \#"nlq"\#\#"sansserif"\#
+
+
+#on("u")#Wichtig#off("u")#
+- Achten Sie bei Materialanweisungen und direkten Druckeranweisungen
+ besonders auf korrekte Schreibweise! Es werden nur Kleinbuchstaben
+ berücksichtigt! Also: \#"nlq"\# und keinesfalls \#"NLQ"\#!!!
+- Direkte Druckeranweisungen werden vom EUMEL-Drucker ignoriert und
+ nur vom Druckertreiber in eine Kommando-Sequenz umgesetzt. Es kann
+ daher vorkommen, daß (z.B. bei Spaltendruck) unerwartete Ergebnisse
+ erscheinen, weil der EUMEL-Drucker dann den Text in einer anderen
+ Reihenfolge an den Drucker sendet, als er in der Datei steht, die
+ mit dem direkten Druckerkommando gesetzte Modifikation aber (z.B.
+ für beide Spalten) unerwünscht erhalten bleibt.
+
+
+#on("u")#Tabelle#off("u")#
+Die Tabelle soll einen Anhaltspunkt dafür geben, wie welche Einstel­
+lungen erfolgen können.
+
+#type("17")#
+ Steuerprozeduren Materialanweisungen direkte Druckeranweisungen
+
+#on("u")#                                                                                          #off("u")#
+
+Positionierung std speed slow, fast ------
+ slow, fast
+
+Qualität std quality z.B. draft, nlq z.B. draft, nlq
+ z.B. draft, nlq
+
+Schriftart std typeface z.B. roman, z.B. roman,
+(nur bei NLQ) z.B. roman, sansserif, courier sansserif, courier
+ sansserif, courier
+
+Einzelblatt- paper feed z.B. schacht1, z.B. schacht1,
+einzug z.B. tractor, schacht2 schacht2
+ sheet,
+ schacht1, schacht2
+
+Farbdruck ------ ------ z.B. schwarz,
+ rot, blau,
+ violett, gelb
+ orange, grün
+
+
+
+#type("nlq10")##on("b")#4. Weitere Hinweise#off("b")#
+
+#on("u")#Zeichensatzänderungen gegenüber früheren Versionen#off("u")#
+In den Fonttabellen früherer Druckertreiber-Versionen wurden oberhalb
+des Codes 127 einige internationale Zeichen zur Verfügung gestellt
+(und zwar in Anlehnung an den Agfa-Laserdrucker-Zeichensatz).
+Bei den Treibern der vorliegenden Version gilt folgendes:
+- Wie bisher wird der volle im Benutzerhandbuch festgelegte EUMEL-
+ Zeichensatz (sofern möglich) unterstützt.
+- Der Code 252 liefert das Paragraphzeichen.
+- Alle übrigen (vom EUMEL-Zeichensatz nicht definierten) Zeichencodes
+ oberhalb 127 liefern, sofern möglich, die entsprechenden Zeichen des
+ IBM-Grafikzeichensatzes.
+
+
+#on("u")#Hinweis zu Proportionalschriften#off("u")#
+Bei Proportionalschriften kann die Modifikation \#on("i")\# zu Problemen
+führen (z.B. beim Blocksatz), wenn die kursiven Zeichen andere
+Proportionalbreiten haben.
+
+#on("u")#Hinweis zur Modifikation on/off("b") bzw. on/off("r")#off("u")#
+Die meisten 24-Nadel Drucker verfügen sowohl über einen horizontalen als
+auch über einen vertikalen Schattendruck. Diese beiden Druckarten können
+mit der Modifikation on("b") (bold) bzw. on("r") (eigentlich für reverse
+gedacht) eingeschaltet werden.
+
+#on("u")#Hinweis zur Benutzung von Einzelblatteinzügen#off("u")#
+Bei der Benutzung von Einzelblatteinzügen müssen folgende Einstel­
+lungen vorgenommen werden (vgl. auch Abschnitt 3!):
+
+ Am Drucker:
+1. Sie müssen Ihren Drucker auf die Option Einzelblatteinzug
+ schalten (siehe Druckerhandbuch!).
+
+ In der Druckspooltask (meist 'PRINTER'):
+2. Falls der Druckertreiber die Steuerprozedur 'paper feed' zur Verfü­
+ gung stellt, müssen Sie mit 'paperfeed ("sheet")' oder (für
+ 2-Schacht-Einzüge) mit 'paperfeed ("schacht1")' bzw. 'paperfeed
+ ("schacht2")' den Druckertreiber auf Einzelblatteinzug umschalten.
+3. Falls Sie eine andere Papierlänge als 12 Zoll (=30.48 cm) verwen­
+ den, müssen Sie die neuen Papiermaße mit 'papersize' in cm einstel­
+ len.
+ Beispiel: papersize (21.0, 29.7)
+ (für DIN A4-Blätter)
+4. Falls der Drucker mit dem Einzelblatteinzug nicht direkt am Blatt­
+ anfang drucken kann, sondern ein gewisser oberer Rand bleibt, muß
+ mit 'top margin' die Länge des nicht bedruckbaren Randes in cm dem
+ Druckertreiber mitgeteilt werden.
+ Beispiel: top margin (1.5)
+ (Wie groß der obere Rand ist, kann festgestellt werden, indem eine
+ Datei mit \#start(0.0,0.0)\# ausgedruckt wird.)
+
+ Wurde mit 'top margin' dem Treiber die Größe der nicht bedruckbaren
+ Fläche mitgeteilt, so ist darauf zu achten, daß in den Druckdateien
+ ein genügend großer y-Wert für die Startposition eingestellt wird
+ ('start'-Anweisung). Andernfalls kommt es bei der Ausgabe in der
+ ersten Zeile zu Überschreibungen.
+
+
+#on("b")#5. Die Änderungen, die Sie in der Druckspooltask vorgenommen haben
+ werden erst wirksam, wenn das Spool-Kommando 'start' gegeben wird.#off("b")#
+
+
+
+
diff --git a/printer/dotmatrix9/beschreibungen9 b/printer/dotmatrix9/beschreibungen9
new file mode 100644
index 0000000..6a74b88
--- /dev/null
+++ b/printer/dotmatrix9/beschreibungen9
@@ -0,0 +1,97 @@
+
+(*************************************************************************)
+(* Stand : 01.10.88 *)
+(* Beschreibungen-Datei für 9-Nadel-Drucker Version : 0.9 *)
+(* Autoren : mov/hjh *)
+(*************************************************************************)
+
+$fx85$
+head;hfx85;decl;speed;openh;opendoch;initspeed;opendocfx85;openpge;betwoc;
+clpge;betwce;cmd;crs;moh;mofx85;ymodr;onoff;tyfx85;end
+
+$fx800$
+head;hfx800;decl;quality;typeface;openh;opendoch;opendocfx800;openpge;betwoc;
+clpge;betwce;cmdfx800;crs;moh;mofx800;ymodr;onoff;tyfx800;end
+
+$mx$
+head;hmx;decl;speed;openh;opendoch;initspeed;opendocmx;openpge;betwoc;clpge;
+betwce;cmd;crs;moh;modrmx;onoff;tymx;end
+
+$lx800$
+head;hlx800;decl;speed;quality;typeface;openh;opendoch;initspeed;
+opendocfx800;openpge;betwoc;clpge;betwce;cmdfx800;crs;moh;mofx85;ymodr;onoff;
+tyfx800;end
+
+$ibmgp$
+head;hgp;decl;speed;openh;opendoch;initspeed;opendocgp;openpge;betwoc;
+clpge;betwce;cmd;crs;moh;mogp;ymodr;onoff;tyfx85;end
+
+$ibmpp$
+head;hpp;decl;speed;quality;openh;opendoch;initspeed;opendocpp;openpge;
+betwoc;clpge;betwce;cmdpp;crs;moh;mofx85;ymodr;onoffpp;tyfx85;end
+
+$okiml182i$
+head;hml182i;decl;speed;quality;openh;opendoch;initspeed;opendocml182i;
+opendocgp;openpge;betwoc;clpge;betwce;cmdml182i;crs;moh;mogp;ymodr;onoff;
+tyohnesmall;end
+
+$okiml192el$
+head;hml192el;decl;speed;feed;openh;opendoch;initspeed;opendocml192el;
+openpgemlsf;betwoc;clmlsf;betwce;cmd;crs;moh;moml192el;ymodr;onoff;tyml192el;
+end
+
+$okiml292el$
+head;hml292el;decl;quality;typeface292;feed;openh;opendoch;opendocml292el;
+openpgemlsf;betwoc;clmlsf;betwce;cmdml292el;crs;moh;mofx800;ymodr;onoff;
+tyml292el;end
+
+$okiml294i$
+head;hml294i;decl;speed;quality;feed;openh;opendoch;initspeed;opendocml294i;
+openpgemlsf;betwoc;clmlsf;betwce;cmdml294i;crs;moh;mofx85;ymodr;ontyml294i;end
+
+$okiml320$
+head;hml320;decl;speed;openh;opendoch;initspeed;opendocml320;
+openpge;betwoc;clpge;betwce;cmd;crs;moh;moml192el;ymodr;onoff;tyml192el;
+end
+
+$starlc10$
+head;hlc10;decl;quality;typefacelc10;openh;opendoch;opendoclc10;openpge;
+betwoc;clpge;betwce;cmdlc10;crs;moh;mofx800;ymodr;onoff;tyfx800;end
+
+$dmp4000$
+head;hdmp4000;decl;speed;openh;opendoch;initspeed;opendocdmp4000;openpge;
+betwoc;clpge;betwce;cmd;crs;moh;mofx85;ymodr;onoff;tyfx85;end
+
+$starnx15$
+head;hnx15;decl;speed;openh;opendoch;initspeed;opendocnx15;openpge;betwoc;
+clpge;betwce;cmd;crs;moh;mofx85;ymodr;onoff;tyfx85;end
+
+$mt230$
+head;hmt230;decl;speed;feedschacht;openh;opendoch;initspeed;opendocmt;
+openpgemtsf;betwoc;clmtsf;betwce;cmdmt230;crs;moh;mofx85;ymodr;onoff;
+tyfx85;end
+
+$mt340$
+head;hmt340;decl;speed;feedschacht;openh;opendoch;initspeed;opendocmt;
+openpgemtsf;betwoc;clmtsf;betwce;cmdmt230;crs;moh;moml192el;ymodr;onoff;
+tyml192el;end
+
+$citi120d$
+head;h120d;decl;openh;opendoch;opendoc120d;openpge;betwoc;
+clpge;betwce;cmd;crs;moh;mofx800;ymodr;onoff;tyfx85;end
+
+$citohc310cxp$
+head;hc310;decl;speed;feedschacht;openh;opendoch;initspeed;opendocc310;
+openpgec310sf;betwoc;clc310sf;betwce;cmdc310;crs;moh;mofx85;ymodr;onoff;
+tyfx85;end
+
+$citohci3500$
+head;hci3500;decl;speed;openh;opendoch;initspeed;opendocgp;openpge;betwoc;
+clpge;betwce;cmd;crs;moh;mogp;ymodr;onoff;tyfx85;end
+
+$fujdx2100$
+head;hdx2100;decl;speed;feed;openh;opendoch;initspeed;opendocdx2100;
+openpge;betwoc;clpge;betwce;cmddx2100;crs;moh;moml192el;ymodr;onoff;tyml192el;
+end
+
+
diff --git a/printer/dotmatrix9/fonttab.1 b/printer/dotmatrix9/fonttab.1
new file mode 100644
index 0000000..b5d17e6
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.1
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.10 b/printer/dotmatrix9/fonttab.10
new file mode 100644
index 0000000..6a13c49
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.10
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.20 b/printer/dotmatrix9/fonttab.20
new file mode 100644
index 0000000..7cf0aaf
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.20
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.20.lc b/printer/dotmatrix9/fonttab.20.lc
new file mode 100644
index 0000000..ddf4535
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.20.lc
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.20.lx b/printer/dotmatrix9/fonttab.20.lx
new file mode 100644
index 0000000..1ce0940
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.20.lx
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.7 b/printer/dotmatrix9/fonttab.7
new file mode 100644
index 0000000..676b9a0
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.7
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.7.cxp b/printer/dotmatrix9/fonttab.7.cxp
new file mode 100644
index 0000000..0a996f3
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.7.cxp
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.7.fuj b/printer/dotmatrix9/fonttab.7.fuj
new file mode 100644
index 0000000..1ed83be
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.7.fuj
Binary files differ
diff --git a/printer/dotmatrix9/fonttab.7.mt b/printer/dotmatrix9/fonttab.7.mt
new file mode 100644
index 0000000..c816646
--- /dev/null
+++ b/printer/dotmatrix9/fonttab.7.mt
Binary files differ
diff --git a/printer/dotmatrix9/module9 b/printer/dotmatrix9/module9
new file mode 100644
index 0000000..65de1ee
--- /dev/null
+++ b/printer/dotmatrix9/module9
@@ -0,0 +1,1099 @@
+
+(*************************************************************************)
+(* Stand : 01.10.88 *)
+(* Module-Datei für 9-Nadel-Drucker Version : 0.9 *)
+(* Autoren : mov/hjh *)
+(*************************************************************************)
+
+$head$
+PACKET printer driver
+
+ DEFINES printer,
+ open,
+ close,
+ execute,
+ paper size,
+ top margin,
+
+$hfx85$ std speed:
+(* Treiber für EPSON FX85/105, automatisch generiert *)
+
+$hfx800$ std quality,
+ std typeface:
+(* Treiber für EPSON FX800/1000, automatisch generiert *)
+BOOL VAR was tall font;
+
+$hmx$ std speed:
+(* Treiber für EPSON MX80/100, Typ III *)
+(* Treiber automatisch generiert *)
+BOOL VAR is condensed, is small;
+
+$hlx800$ std speed,
+ std quality,
+ std typeface:
+(* Treiber für EPSON LX800/1000, automatisch generiert *)
+BOOL VAR was tall font;
+
+$hgp$ std speed:
+(* Treiber für IBM-Grafikdrucker *)
+(* Treiber automatisch generiert *)
+
+$hpp$ std speed,
+ std quality:
+(* Treiber für IBM-Proprinter *)
+(* Treiber automatisch generiert *)
+
+$hml182i$ std speed,
+ std quality:
+(* Treiber für OKI ML182/183 IBM-kompatibel *)
+(* Treiber automatisch generiert *)
+
+$hml192el$ paper feed,
+ std speed:
+(* Treiber für OKI ML192/193 Elite *)
+(* Treiber automatisch generiert *)
+BOOL VAR prop font;
+
+$hml292el$ std quality,
+ std typeface,
+ paper feed:
+(* Treiber für OKI ML292/293 Elite *)
+(* Treiber automatisch generiert *)
+BOOL VAR was tall font;
+
+$hml294i$ std speed,
+ paper feed,
+ std quality:
+(* Treiber für OKI ML294 IBM-kompatibel *)
+(* Treiber automatisch generiert *)
+
+$hml320$ std speed:
+(* Treiber für OKI ML320 IBM/EPSON-kompatibel *)
+(* Treiber automatisch generiert *)
+BOOL VAR prop font;
+
+$hlc10$ std quality,
+ std typeface:
+(* Treiber für Star LC-10 oder LC-10 Colour *)
+(* Treiber automatisch generiert *)
+BOOL VAR was tall font;
+
+$hdmp4000$ std speed:
+(* Treiber für Schneider DMP4000, automatisch generiert *)
+
+$hnx15$ std speed:
+(* Treiber für Star NX-15, ND-10, ND-15, NR-10 und NR-15 *)
+(* Treiber automatisch generiert *)
+
+$hmt230$ paper feed,
+ std speed:
+(* Treiber für Mannesmann-Tally MT 230 *)
+(* Treiber automatisch generiert *)
+
+$hmt340$ paper feed,
+ std speed:
+(* Treiber für Mannesmann-Tally MT 340 *)
+(* Treiber automatisch generiert *)
+BOOL VAR prop font := FALSE;
+
+$h120d$ :
+(* Treiber für Citizen 120-D *)
+(* Treiber automatisch generiert *)
+
+$hc310$ paper feed,
+ std speed:
+(* Treiber für C. Itoh C 310/315 CXP *)
+(* Treiber automatisch generiert *)
+
+$hci3500$ std speed:
+(* Treiber für C. Itoh CI-3500 *)
+(* Treiber automatisch generiert *)
+
+$hdx2100$ paper feed,
+ std speed:
+(* Treiber für Fujitsu DX 2100 *)
+(* Treiber automatisch generiert *)
+BOOL VAR prop font := FALSE ;
+
+$decl$
+INT VAR blankbreite, x rest, y rest, high, low, small, modifikations;
+REAL VAR x size, y size, y margin;
+TEXT VAR buffer :: "";
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+END PROC paper size;
+
+papersize (20.32, 30.48);
+
+PROC top margin (REAL CONST margin):
+
+ y margin := margin
+END PROC top margin;
+
+REAL PROC top margin: y margin END PROC top margin;
+
+top margin (0.0);
+
+$speed$
+BOOL VAR is slow;
+TEXT VAR std speed name :: "slow";
+
+PROC std speed (TEXT CONST speed) :
+
+ IF speed = "fast" OR speed = "slow"
+ THEN std speed name := speed
+ ELSE errorstop ("unzulässige Geschwindigkeit")
+ FI
+END PROC std speed;
+
+TEXT PROC std speed : std speed name END PROC std speed;
+
+$quality$
+TEXT VAR std quality name :: "draft";
+
+PROC std quality (TEXT CONST quality) :
+
+ IF quality = "nlq" OR quality = "draft"
+ THEN std quality name := quality
+ ELSE errorstop ("unzulässige Qualitätsbezeichnung")
+ FI
+END PROC std quality;
+
+TEXT PROC std quality : std quality name END PROC std quality;
+
+$typeface$
+TEXT VAR std typeface name :: "";
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "" OR typeface = "roman" OR typeface = "sansserif"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface : std typeface name END PROC std typeface;
+
+$typeface292$
+TEXT VAR std typeface name :: "";
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "" OR typeface = "courier" OR typeface = "sansserif"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface : std typeface name END PROC std typeface;
+
+$typefacelc10$
+TEXT VAR std typeface name :: "";
+
+PROC std typeface (TEXT CONST typeface) :
+
+ IF typeface = "" OR typeface = "courier" OR typeface = "sansserif"
+ OR typeface = "orator1" OR typeface = "orator2"
+ THEN std typeface name := typeface
+ ELSE errorstop ("unzulässige Schriftart")
+ FI
+END PROC std typeface;
+
+TEXT PROC std typeface : std typeface name END PROC std typeface;
+
+$feed$
+TEXT VAR feeder name :: "tractor";
+
+PROC paper feed (TEXT CONST feeder) :
+
+ IF feeder = "sheet" OR feeder = "tractor"
+ THEN feeder name := feeder
+ ELSE errorstop ("unzulässige Einzugsart")
+ FI
+END PROC paper feed;
+
+TEXT PROC paper feed: feeder name END PROC paper feed;
+
+$feedschacht$
+TEXT VAR act feeder :: "",
+ feeder name :: "tractor";
+
+PROC paper feed (TEXT CONST feeder) :
+
+ IF feeder = "tractor" OR feeder = "schacht1" OR feeder = "schacht2"
+ THEN feeder name := feeder
+ ELIF feeder = "sheet"
+ THEN feeder name := "schacht1"
+ ELSE errorstop ("unzulässige Einzugsart")
+ FI
+END PROC paper feed;
+
+TEXT PROC paper feed: feeder name END PROC paper feed;
+
+$openh$
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE 1: open document
+ CASE 2: open page
+END SELECT.
+
+$opendoch$
+ open document :
+ modifikations := 0;
+ param 1 := x step conversion ( x size );
+ param 2 := y step conversion ( y size );
+$initspeed$
+ IF pos (material, "slow") <> 0
+ THEN is slow := TRUE;
+ ELIF pos (material, "fast") <> 0
+ THEN is slow := FALSE;
+ ELSE is slow := std speed name = "slow"
+ FI;
+$opendocfx85$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2"27"6");
+ out (""27"C" + code (param 2 DIV 36)). (* Formularlaenge *)
+
+$opendocfx800$
+ param 2 := (param 2 DIV 36) * 36;
+ was tall font := TRUE;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"t"1""27"6"); (* Zeichentabelle 4 (Grafik) *)
+ out (""27"R"0""27"9"27"O"27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ IF pos (material, "nlq") <> 0
+ THEN out (""27"x"1"")
+ ELIF pos (material, "draft") <> 0
+ THEN out (""27"x"0"")
+ ELIF std quality name = "nlq"
+ THEN out (""27"x"1"")
+ ELSE out (""27"x"0"")
+ FI;
+ IF pos (material, "roman") <> 0
+ THEN out (""27"k"0"")
+ ELIF pos (material, "sansserif") <> 0
+ THEN out (""27"k"1"")
+ ELIF std typeface name = "roman"
+ THEN out (""27"k"0"")
+ ELIF std typeface name = "sansserif"
+ THEN out (""27"k"1"")
+ FI.
+
+$opendocmx$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27"R"0""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"9"27"O").
+
+$opendocgp$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27"6"); (* Zeichensatz 2 *)
+ out (""18""27"F"27"H"27"W"0""27"T"27"-"0""); (* Modifikationen rücksetzen *)
+ out (""27"9"27"O"27"A"12""27"2");
+ out (""27"C" + code (param 2 DIV 36)). (* Formularlaenge *)
+
+$opendocpp$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27"6"); (* Zeichensatz 2 *)
+ out (""18""27"F"27"W"0""27"T"27"-"0""); (* Modifikationen rücksetzen *)
+ out (""27"9"27"O"27"A"12""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ IF pos (material, "nlq") <> 0
+ THEN out (""27"G")
+ ELIF pos (material, "draft") <> 0
+ THEN out (""27"H")
+ ELIF std quality name = "nlq"
+ THEN out (""27"G")
+ ELSE out (""27"H")
+ FI.
+
+$opendocml182i$
+ IF pos (material, "nlq") <> 0
+ THEN out (""27"I3")
+ ELIF pos (material, "draft") <> 0
+ THEN out (""27"I1")
+ ELIF std quality name = "nlq"
+ THEN out (""27"I3")
+ ELSE out (""27"I1")
+ FI;
+ out (""27"N"0""); (* Kein Sprung über Perf. *)
+
+$opendocml192el$
+ param 2 := (param 2 DIV 36) * 36;
+ prop font := FALSE;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"6"); (* Erweiterung des Zeichensatzes *)
+ out (""27"9"27"O"27"x"0"").
+
+$opendocml292el$
+ param 2 := (param 2 DIV 36) * 36;
+ was tall font := TRUE;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"t"1""27"6"); (* Zeichentabelle 4 (Grafik) *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"9"27"O"27"r0");
+ IF pos (material, "nlq") <> 0
+ THEN out (""27"x"1"")
+ ELIF pos (material, "draft") <> 0
+ THEN out (""27"x"0"")
+ ELIF std quality name = "nlq"
+ THEN out (""27"x"1"")
+ ELSE out (""27"x"0"")
+ FI;
+ IF pos (material, "courier") <> 0
+ THEN out (""27"k"0"")
+ ELIF pos (material, "sansserif") <> 0
+ THEN out (""27"k"1"")
+ ELIF std typeface name = "courier"
+ THEN out (""27"k"0"")
+ ELIF std typeface name = "sansserif"
+ THEN out (""27"k"1"")
+ FI.
+
+$opendocml294i$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27"6"); (* Zeichensatz 2 *)
+ out (""18""27"F"27"W0"27"T"27"-0"27"%H"); (* Modifikationen rücksetzen *)
+ out (""27"9"27"O"27"A"12""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ IF pos (material, "nlq") <> 0
+ THEN out (""27"G")
+ ELIF pos (material, "draft") <> 0
+ THEN out (""27"H")
+ ELIF std quality name = "nlq"
+ THEN out (""27"G")
+ ELSE out (""27"H")
+ FI.
+
+$opendocml320$
+ param 2 := (param 2 DIV 36) * 36;
+ prop font := FALSE;
+ out (""27"{"99""27"{"40""); (* Umschaltung auf EPSON-Emulation *)
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"6"); (* Erweiterung des Zeichensatzes *)
+ out (""27"9"27"O"27"x"0"").
+
+$opendoclc10$
+ param 2 := (param 2 DIV 36) * 36;
+ was tall font := TRUE;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"t"1""27"6"); (* Zeichentabelle 4 (Grafik) *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"9"27"r"0"");
+ IF pos (material, "nlq") <> 0
+ THEN out (""27"x"1"")
+ ELIF pos (material, "draft") <> 0
+ THEN out (""27"x"0"")
+ ELIF std quality name = "nlq"
+ THEN out (""27"x"1"")
+ ELSE out (""27"x"0"")
+ FI;
+ IF pos (material, "courier") <> 0
+ THEN out (""27"k"0"")
+ ELIF pos (material, "sansserif") <> 0
+ THEN out (""27"k"1"")
+ ELIF pos (material, "orator1") <> 0
+ THEN out (""27"k"2"")
+ ELIF pos (material, "orator2") <> 0
+ THEN out (""27"k"3"")
+ ELIF std typeface name = "courier"
+ THEN out (""27"k"0"")
+ ELIF std typeface name = "sansserif"
+ THEN out (""27"k"1"")
+ ELIF std typeface name = "orator1"
+ THEN out (""27"k"2"")
+ ELIF std typeface name = "orator2"
+ THEN out (""27"k"3"")
+ FI.
+
+$opendocnx15$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"6"); (* Erweiterung des Zeichensatzes *)
+ out (""27"9"27"x"0"").
+
+$opendocdmp4000$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"m"0""27"R"0""27"9"27"O"27"2"27"6");
+ out (""27"C" + code (param 2 DIV 36)). (* Formularlaenge *)
+
+$opendocmt$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"O"27"x"0""27"r"0""27"6");
+ IF feeder name = "tractor"
+ THEN act feeder := feeder name;
+ out (""27"[5{")
+ ELSE out (""27"[0{");
+ IF pos (material, "schacht1") <> 0
+ THEN act feeder := "schacht1"
+ ELIF pos (material, "schacht2") <> 0
+ THEN act feeder := "schacht2"
+ ELSE act feeder := feeder name
+ FI
+ FI.
+
+$opendocdx2100$
+param 2 := (param 2 DIV 36) * 36;
+out (""24""27""64""); (* Reset des Druckers *)
+out (""27"R"0""); (* US-Zeichensatz *)
+out (""27"2" + ""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+out (""27"N"0""); (* skip perforation *)
+out (""27"x"0"" + ""27"r"0""). (* draft und black *)
+
+
+$opendoc120d$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"9"27"O"27"x0"27"2");
+ out (""27"C" + code (param 2 DIV 36)). (* Formularlaenge *)
+
+$opendocc310$
+ param 2 := (param 2 DIV 36) * 36;
+ out (""27""64""27""64""); (* Reset des Druckers *)
+ out (""27"R"0""27"2");
+ out (""27"C" + code (param 2 DIV 36)); (* Formularlaenge *)
+ out (""27"O"27"x"0""27"r"0""27"6");
+ IF feeder name = "tractor"
+ THEN act feeder := feeder name;
+ ELSE IF pos (material, "schacht1") <> 0
+ THEN act feeder := "schacht1"
+ ELIF pos (material, "schacht2") <> 0
+ THEN act feeder := "schacht2"
+ ELSE act feeder := feeder name
+ FI
+ FI.
+
+$openpge$
+ open page :
+ param 1 := 0;
+ param 2 := y step conversion (y margin);
+ x rest := 0;
+ y rest := 0;
+ small := 0;
+ out (""13"").
+$openpgemlsf$
+ open page :
+ param 1 := 0;
+ param 2 := 0;
+ x rest := 0;
+ y rest := 0;
+ small := 0;
+ IF feeder name = "sheet" THEN out (""12"") FI;
+ out (""13"").
+$openpgemtsf$
+ open page :
+ param 1 := 0;
+ param 2 := 0;
+ x rest := 0;
+ y rest := 0;
+ small := 0;
+ IF feeder name = "schacht1"
+ THEN out (""27"[21{"12"")
+ ELIF feeder name = "schacht2"
+ THEN out (""27"[22{"12"")
+ FI;
+ out (""13"").
+
+$openpgec310sf$
+ open page :
+ param 1 := 0;
+ param 2 := 0;
+ x rest := 0;
+ y rest := 0;
+ small := 0;
+ IF feeder name = "schacht1"
+ THEN out (""27""25"1"12"")
+ ELIF feeder name = "schacht2"
+ THEN out (""27""25"2"12"")
+ FI;
+ out (""13"").
+
+$betwoc$
+END PROC open;
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE 1: close document
+ CASE 2: close page
+END SELECT.
+close document :
+$clpge$
+. close page :
+ IF param 1 > 0 THEN out (""12"") FI.
+$clmlsf$
+.close page :
+ IF feeder name = "sheet"
+ THEN out (""27""25""3"")
+ ELIF param 1 > 0
+ THEN out (""12"")
+ FI.
+$clmtsf$
+.close page :
+ IF feeder name <> "tractor"
+ THEN out (""27"[2J")
+ ELIF param 1 > 0
+ THEN out (""12"")
+ FI.
+$clc310sf$
+.close page :
+ IF feeder name = "sheet"
+ THEN out (""27""25"R")
+ ELIF param 1 > 0
+ THEN out (""12"")
+ FI.
+
+$betwce$
+END PROC close;
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE 1: write text
+ CASE 2: write cmd
+ CASE 3: carriage return
+ CASE 4: move
+ CASE 5: draw
+ CASE 6: on
+ CASE 7: off
+ CASE 8: type
+END SELECT.
+
+is underline: bit (modifikations, 0).
+is bold : bit (modifikations, 1).
+is italics : bit (modifikations, 2).
+
+ write text :
+ out subtext (string, param 1, param 2).
+$cmd$
+ write cmd :
+ out subtext (string, param 1, param 2).
+$cmdfx800$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "draft"
+ THEN out (""27"x"0"")
+ ELIF buffer = "nlq"
+ THEN out (""27"x"1"")
+ ELIF buffer = "roman"
+ THEN out (""27"k"0"")
+ ELIF buffer = "sansserif"
+ THEN out (""27"k"1"")
+ ELSE out (buffer)
+ FI.
+$cmdpp$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "draft"
+ THEN out (""27"H")
+ ELIF buffer = "nlq"
+ THEN out (""27"G")
+ ELSE out (buffer)
+ FI.
+$cmdml182i$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "draft"
+ THEN out (""27"I1")
+ ELIF buffer = "nlq"
+ THEN out (""27"I3")
+ ELSE out (buffer)
+ FI.
+$cmdml292el$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "draft"
+ THEN out (""27"x"0"")
+ ELIF buffer = "nlq"
+ THEN out (""27"x"1"")
+ ELIF buffer = "courier"
+ THEN out (""27"k"0"")
+ ELIF buffer = "sansserif"
+ THEN out (""27"k"1"")
+ ELIF buffer = "schwarz"
+ THEN out (""27"r0")
+ ELIF buffer = "rot"
+ THEN out (""27"r1")
+ ELIF buffer = "blau"
+ THEN out (""27"r2")
+ ELIF buffer = "violett"
+ THEN out (""27"r3")
+ ELIF buffer = "gelb"
+ THEN out (""27"r4")
+ ELIF buffer = "orange"
+ THEN out (""27"r5")
+ ELIF buffer = "grün"
+ THEN out (""27"r6")
+ ELSE out (buffer)
+ FI.
+$cmdml294i$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "draft"
+ THEN out (""27"H")
+ ELIF buffer = "nlq"
+ THEN out (""27"G")
+ ELIF buffer = "schwarz"
+ THEN out (""27"r0")
+ ELIF buffer = "rot"
+ THEN out (""27"r1")
+ ELIF buffer = "blau"
+ THEN out (""27"r2")
+ ELIF buffer = "violett"
+ THEN out (""27"r3")
+ ELIF buffer = "gelb"
+ THEN out (""27"r4")
+ ELIF buffer = "orange"
+ THEN out (""27"r5")
+ ELIF buffer = "grün"
+ THEN out (""27"r6")
+ ELSE out (buffer)
+ FI.
+$cmdlc10$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "draft"
+ THEN out (""27"x"0"")
+ ELIF buffer = "nlq"
+ THEN out (""27"x"1"")
+ ELIF buffer = "courier"
+ THEN out (""27"k"0"")
+ ELIF buffer = "sansserif"
+ THEN out (""27"k"1"")
+ ELIF buffer = "orator1"
+ THEN out (""27"k"2"")
+ ELIF buffer = "orator2"
+ THEN out (""27"k"3"")
+ ELIF buffer = "schwarz"
+ THEN out (""27"r"0"")
+ ELIF buffer = "rot"
+ THEN out (""27"r"1"")
+ ELIF buffer = "blau"
+ THEN out (""27"r"2"")
+ ELIF buffer = "violett"
+ THEN out (""27"r"3"")
+ ELIF buffer = "gelb"
+ THEN out (""27"r"4"")
+ ELIF buffer = "orange"
+ THEN out (""27"r"5"")
+ ELIF buffer = "grün"
+ THEN out (""27"r"6"")
+ ELSE out (buffer)
+ FI.
+$cmdmt230$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF feeder name <> "tractor"
+ THEN IF buffer = "schacht1" OR buffer = "schacht2"
+ THEN act feeder := buffer
+ FI
+ ELIF buffer = "schwarz"
+ THEN out (""27"r"0"")
+ ELIF buffer = "magenta"
+ THEN out (""27"r"1"")
+ ELIF buffer = "cyan"
+ THEN out (""27"r"2"")
+ ELIF buffer = "blau"
+ THEN out (""27"r"3"")
+ ELIF buffer = "gelb"
+ THEN out (""27"r"4"")
+ ELIF buffer = "rot"
+ THEN out (""27"r"5"")
+ ELIF buffer = "grün"
+ THEN out (""27"r"6"")
+ ELSE out (buffer)
+ FI.
+
+$cmdc310$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF feeder name <> "tractor"
+ THEN IF buffer = "schacht1" OR buffer = "schacht2"
+ THEN act feeder := buffer
+ FI
+ ELIF buffer = "schwarz"
+ THEN out (""27"r"0"")
+ ELIF buffer = "rot"
+ THEN out (""27"r"1"")
+ ELIF buffer = "blau"
+ THEN out (""27"r"2"")
+ ELIF buffer = "violett"
+ THEN out (""27"r"3"")
+ ELIF buffer = "gelb"
+ THEN out (""27"r"4"")
+ ELIF buffer = "orange"
+ THEN out (""27"r"5"")
+ ELIF buffer = "grün"
+ THEN out (""27"r"6"")
+ ELSE out (buffer)
+ FI.
+
+$cmddx2100$
+ write cmd :
+ buffer := subtext (string, param 1, param 2);
+ IF buffer = "schwarz"
+ THEN out (""27"r"0"")
+ ELIF buffer = "rot"
+ THEN out (""27"r"1"")
+ ELIF buffer = "blau"
+ THEN out (""27"r"2"")
+ ELIF buffer = "violett"
+ THEN out (""27"r"3"")
+ ELIF buffer = "gelb"
+ THEN out (""27"r"4"")
+ ELIF buffer = "orange"
+ THEN out (""27"r"5"")
+ ELIF buffer = "grün"
+ THEN out (""27"r"6"")
+ ELSE out (buffer)
+ FI.
+
+$crs$
+ carriage return :
+ y rest INCR small;
+ x rest := 0;
+ small := 0;
+ out (""13"").
+$moh$
+x steps : param1.
+y steps : param2.
+
+move :
+ IF x steps < 0 OR y steps < 0 THEN stop FI;
+ IF x steps > 0 THEN x move FI;
+ IF y steps > 0 THEN y move FI.
+
+$mofx85$
+x move :
+ high := (x steps + x rest) DIV blankbreite;
+ x rest := (x steps + x rest) MOD blankbreite;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF x rest > 0 AND is slow
+ THEN IF is underline THEN out (" "8"") FI;
+ out (""27"Y"+ code (x rest) + ""0"");
+ x rest TIMESOUT ""0"";
+ x rest := 0
+ FI.
+
+
+$mofx800$
+x move :
+ IF is underline
+ THEN underline x move
+ ELSE simple x move
+ FI.
+
+underline x move:
+ high := (x steps + x rest) DIV blankbreite;
+ low := (x steps + x rest) MOD blankbreite;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF low > 0
+ THEN out (" "8""27"\"+ code (low) + ""0"")
+ FI.
+
+simple x move:
+ out (""27"\");
+ out (code (x steps MOD 256));
+ out (code (x steps DIV 256)).
+
+$modrmx$
+x move :
+ high := (x steps + x rest) DIV blankbreite;
+ low := (x steps + x rest) MOD blankbreite;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF low > 0 AND is slow
+ THEN IF is underline THEN out ("_"8"") FI;
+ IF is condensed
+ THEN high := low;
+ low := 0;
+ out (""27"L"+ code (high) + ""0"");
+ ELSE high := low DIV 2;
+ low := low MOD 2;
+ out (""27"K"+ code (high) + ""0"");
+ FI;
+ high TIMESOUT ""0"";
+ IF is small
+ THEN out (""27"S"1"");
+ small DECR 1;
+ FI;
+ FI;
+ x rest := low.
+
+y move :
+ y rest INCR y steps;
+ IF y rest > 0
+ THEN high := y rest DIV 255;
+ low := y rest MOD 255;
+ IF high > 0 THEN high TIMESOUT ""27"J"255"" FI;
+ IF low > 0 THEN out (""27"J"); out (code (low)) FI;
+ y rest := 0
+ FI.
+
+draw :
+ IF x steps < 0 OR y steps <> 0 OR linetype <> 1
+ THEN stop
+ ELIF x steps > 0
+ THEN x draw
+ FI.
+
+x draw :
+ out (""27"L");
+ out (code (x steps MOD 256));
+ out (code (x steps DIV 256));
+ x steps TIMESOUT ""1"";
+ IF is small THEN out (""27"S"1"") FI.
+
+$mogp$
+x move :
+ high := (x steps + x rest) DIV blankbreite;
+ x rest := (x steps + x rest) MOD blankbreite;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF x rest > 0 AND is slow
+ THEN IF is underline
+ THEN out (" "13""27"Y");
+ out (code (x pos MOD 256));
+ out (code (x pos DIV 256));
+ x pos TIMESOUT ""0""
+ ELSE out (""27"Y"+ code (x rest) + ""0"");
+ x rest TIMESOUT ""0""
+ FI;
+ x rest := 0
+ FI.
+
+$moml192el$
+x move :
+ high := (x steps + x rest) DIV blankbreite;
+ x rest := (x steps + x rest) MOD blankbreite;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF x rest > 0 AND is slow
+ THEN IF is underline THEN
+ IF prop font THEN
+ out (""27"p"0"" + " "8"" + ""27"p"1"")
+ ELSE
+ out (" "8"")
+ FI;
+ FI;
+ out (""27"Y"+ code (x rest) + ""0"");
+ x rest TIMESOUT ""0"";
+ x rest := 0
+ FI.
+
+$ymodr$
+y move :
+ y rest INCR y steps;
+ IF y rest > 0
+ THEN high := y rest DIV 255;
+ low := y rest MOD 255;
+ IF high > 0 THEN high TIMESOUT ""27"J"255"" FI;
+ IF low > 0 THEN out (""27"J"); out (code (low)) FI;
+ y rest := 0
+ FI.
+
+draw :
+ IF x steps < 0 OR y steps <> 0 OR linetype <> 1
+ THEN stop
+ ELIF x steps > 0
+ THEN x draw
+ FI.
+
+x draw :
+ out (""27"Y");
+ out (code (x steps MOD 256));
+ out (code (x steps DIV 256));
+ x steps TIMESOUT ""1"".
+
+$onoff$
+ on :
+ IF on string (param 1) <> ""
+ THEN out (on string (param 1));
+ modifikations := modifikations OR param 1
+ ELSE stop
+ FI.
+
+ off :
+ IF off string (param 1) <> ""
+ THEN out (off string (param 1));
+ modifikations := modifikations AND (param 1 XOR -1)
+ ELSE stop
+ FI.
+
+$onoffpp$
+ on :
+ IF on string (param 1) <> "" AND param 1 <> 2
+ THEN out (on string (param 1));
+ modifikations := modifikations OR param 1
+ ELSE stop
+ FI.
+
+ off :
+ IF off string (param 1) <> "" AND param 1 <> 2
+ THEN out (off string (param 1));
+ modifikations := modifikations AND (param 1 XOR -1)
+ ELSE stop
+ FI.
+
+$tyfx85$
+ type :
+ buffer := font string (param 1);
+ out (buffer);
+ restore modifikations;
+ blankbreite := char pitch (param 1, " ");
+ IF pos (buffer, ""27"S") <> 0 THEN small DECR 1 FI.
+
+$tyfx800$
+ type :
+ buffer := font string (param 1);
+ IF was tall font
+ THEN out (""27"w"0"")
+ FI;
+ out (buffer);
+ restore modifikations;
+ blankbreite := char pitch (param 1, " ");
+ was tall font := pos (buffer, ""27"w"1"") <> 0.
+
+$tymx$
+ type :
+ buffer := font string (param 1);
+ blankbreite := char pitch (param 1, " ");
+ is condensed := pos (buffer, ""15"") <> 0;
+ IF pos (buffer, ""27"S") <> 0
+ THEN small DECR 1;
+ is small := TRUE;
+ ELSE is small := FALSE;
+ FI;
+ out (buffer);
+ restore modifikations.
+
+$tyohnesmall$
+ type :
+ buffer := font string (param 1);
+ out (buffer);
+ restore modifikations;
+ blankbreite := char pitch (param 1, " ").
+
+$tyml192el$
+ type :
+ buffer := font string (param 1);
+ out (buffer);
+ restore modifikations;
+ blankbreite := char pitch (param 1, " ");
+ prop font := pos (buffer, ""27"p"1"") <> 0;
+ IF pos (buffer, ""27"S") <> 0 THEN small DECR 1 FI.
+
+$tyml292el$
+ type :
+ buffer := font string (param 1);
+ IF was tall font
+ THEN out (""27""31"0"27"U0")
+ FI;
+ was tall font := pos (buffer, ""27"w"1"") <> 0;
+ change all (buffer, ""27"w"0"", ""27""31"0"27"U0");
+ change all (buffer, ""27"w"1"", ""27""31"1"27"U1");
+ out (buffer);
+ restore modifikations;
+ blankbreite := char pitch (param 1, " ").
+
+$ontyml294i$
+ on :
+ IF on string (param 1) <> "" AND param 1 <> 2
+ THEN out (on string (param 1));
+ modifikations := modifikations OR param 1
+ ELIF param 1 = 4
+ THEN out (""27"%G");
+ modifikations := modifikations OR param 1
+ ELSE stop
+ FI.
+
+ off :
+ IF off string (param 1) <> "" AND param 1 <> 2
+ THEN out (off string (param 1));
+ modifikations := modifikations AND (param 1 XOR -1)
+ ELIF param 1 = 4
+ THEN out (""27"%H");
+ modifikations := modifikations AND (param 1 XOR -1)
+ ELSE stop
+ FI.
+
+ type :
+ buffer := font string (param 1);
+ out (buffer);
+ IF is underline THEN out (on string (1)) FI;
+ IF is bold THEN out (on string (2)) FI;
+ IF is italics THEN out (""27"%G") FI;
+ blankbreite := char pitch (param 1, " ");
+ IF pos (buffer, ""27"S") <> 0 THEN small DECR 1 FI.
+
+$end$
+ restore modifikations:
+ IF is underline THEN out (on string (1)) FI;
+ IF is bold THEN out (on string (2)) FI;
+ IF is italics THEN out (on string (4)) FI.
+
+END PROC execute;
+
+INT VAR reply; DATASPACE VAR ds; FILE VAR file;
+
+PROC printer:
+
+ disable stop;
+ continue (server channel);
+ check error (error message);
+ ds := nilspace;
+ REP forget (ds);
+ execute print;
+ IF is error AND online THEN put error; clear error; FI;
+ PER;
+END PROC printer;
+
+PROC execute print:
+
+ LET ack = 0, fetch code = 11, file type = 1003;
+ enable stop;
+ ds := nilspace;
+ call (father, fetch code, ds, reply);
+ IF reply = ack CAND type (ds) = file type
+ THEN file := sequential file (input, ds);
+ print (file,
+ PROC (INT CONST, INT VAR, INT VAR) open,
+ PROC (INT CONST, INT CONST) close,
+ PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);
+ FI;
+END PROC execute print;
+
+PROC check error(TEXT CONST message):
+
+ IF is error
+ THEN clear error; rename myself (message);
+ IF is error THEN end(myself) FI;
+ pause (9000); end(myself);
+ FI;
+END PROC check error;
+
+END PACKET printerdriver
+
+
diff --git a/printer/dotmatrix9/printer.neun.nadel b/printer/dotmatrix9/printer.neun.nadel
new file mode 100644
index 0000000..00f698b
--- /dev/null
+++ b/printer/dotmatrix9/printer.neun.nadel
@@ -0,0 +1,1129 @@
+PACKET driver inst 9 (* Autoren : mov/hjh *)
+ (* Stand : 01.10.88 *)
+
+ DEFINES druckerkanal,
+ treiber einrichten:
+
+
+LET up = ""3""13""5"",
+
+ generator name = "printer.neun.nadel",
+
+ description file name = "beschreibungen9",
+ module file name = "module9";
+
+
+INT VAR pr channel,
+ positioning,
+ quality,
+ sheet feeder,
+ service option;
+TEXT VAR fonttab name :: "",
+ driver name :: "";
+TEXT VAR inp;
+BOOL VAR was esc;
+
+
+PROC druckerkanal (INT CONST channel) :
+
+ serverchannel (channel)
+
+END PROC druckerkanal;
+
+INT PROC druckerkanal : pr channel END PROC druckerkanal;
+
+
+PROC treiber einrichten:
+
+ treiber einrichten (0)
+END PROC treiber einrichten;
+
+PROC treiber einrichten (INT CONST service opt):
+
+ ask for print channel;
+ main menu;
+ IF installed
+ THEN generate printer spool
+ ELSE inform about restart
+ FI.
+
+ ask for printchannel:
+ inits;
+ page;
+ headline ("Druckerkanal - Einstellung");
+ cursor (1, 15);
+ putline ("Hinweis: Die Druckerkanalnummer kann auch nachträglich mit");
+ putline (" 'druckerkanal (Kanalnummer)' in der Task """ +
+ name (myself) + """");
+ putline (" verändert werden.");
+ REP
+ cursor (1, 10);
+ put (""5"EUMEL-Kanalnummer des Druckerkanals:");
+ get (pr channel);
+ disable stop;
+ druckerkanal (pr channel);
+ BOOL VAR no error :: NOT is error;
+ IF is error
+ THEN cursor (1, 7);
+ put error;
+ putline ("Eingabe korrigiert wiederholen!")
+ FI;
+ clear error;
+ enable stop
+ UNTIL no error PER.
+
+ inits:
+ line;
+ IF single task
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+ FI;
+ command dialogue (TRUE);
+ IF name (myself) <> "PRINTER"
+ THEN putline ("Diese Task heißt nicht ""PRINTER"", sondern """ +
+ name (myself) + """ !");
+ IF yes ("Soll die Task in ""PRINTER"" umbenannt werden ?")
+ THEN rename myself ("PRINTER")
+ FI
+ FI;
+ INT VAR choice;
+ service option := service opt.
+
+ single task: (pcb (9) AND 255) = 1.
+
+ main menu:
+ BOOL VAR installed :: FALSE;
+ REP
+ show main menu;
+ get choice;
+ treat choice
+ UNTIL was esc OR installed PER.
+
+ show main menu:
+ page;
+ headline ("Hauptmenü 9-Nadel-Drucker");
+ putline (" 1. Brother");
+ putline (" 2. Citizen");
+ putline (" 3. C. Itoh");
+ putline (" 4. Epson");
+ putline (" 5. Fujitsu");
+ putline (" 6. IBM");
+ putline (" 7. Mannesmann - Tally");
+ putline (" 8. OKI");
+ putline (" 9. Schneider");
+ putline ("10. Star").
+
+ get choice:
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Installation abbrechen");
+ ask user (10).
+
+ treat choice:
+ SELECT int (inp) OF
+ CASE 1: brother menu
+ CASE 2: citizen menu
+ CASE 3: c itoh menu
+ CASE 4: epson menu
+ CASE 5: fujitsu menu
+ CASE 6: ibm menu
+ CASE 7: mannesmann menu
+ CASE 8: oki menu
+ CASE 9: schneider menu
+ CASE 10: star menu
+ END SELECT.
+
+
+ brother menu:.
+
+ citizen menu:
+ page;
+ headline ("Citizen - Menü");
+ putline (" 1. 120-D");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (1);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ citi120d inst
+ FI.
+
+ citi120d inst:
+ putline ("Citizen 120-D");
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S1 S2 S3 S4 S5 S6 S7 S8");
+ putline ("egal OFF OFF egal egal egal egal egal");
+ show control options ("");
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("citi120d");
+ installed := TRUE
+ FI.
+
+ c itoh menu:
+ page;
+ headline ("C. Itoh - Menü");
+ putline (" 1. C 310 CXP");
+ putline (" 2. C 315 CXP");
+ putline (" 3. CI-3500");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (3);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ IF choice = 3
+ THEN ci3500 inst
+ ELSE c310 inst
+ FI
+ FI.
+
+ c310 inst:
+ IF choice = 1
+ THEN putline ("C. Itoh C 310 CXP")
+ ELSE putline ("C. Itoh C 315 CXP")
+ FI;
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Der Drucker muß so konfiguriert sein (Druckmenü des Druckers):");
+ putline ("- 00: Epson-Modus (02)");
+ putline ("- 22: nur Wagenrücklauf (01)");
+ show control options ("std speed, paperfeed");
+ show material options ("slow, fast, schacht1, schacht2");
+ show command options ("schacht1, schacht2, schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for positioning;
+ ask for paper feed;
+ IF all right
+ THEN get fonttable ("fonttab.7.cxp");
+ generate ("citohc310cxp");
+ adjust positioning;
+ adjust paper feed;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ ci3500 inst:
+ putline ("C. Itoh CI-3500");
+ line;
+ putline ("Der Drucker muß so konfiguriert sein (Druckmenü des Druckers):");
+ putline ("- 26: nur Wagenrücklauf (1)");
+ putline ("- 49: 17,1 Zeichen pro Zoll (17)");
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.10");
+ generate ("citohci3500");
+ adjust positioning;
+ installed := TRUE
+ FI.
+
+ epson menu:
+ page;
+ headline ("Epson - Menü");
+ putline (" 1. MX 80 Typ III");
+ putline (" 2. MX 100 Typ III");
+ putline (" 3. LX 800");
+ putline (" 4. LX 1000");
+ putline (" 5. FX 85");
+ putline (" 6. FX 105");
+ putline (" 7. FX 800 oder FX 850");
+ putline (" 8. FX 1000 oder FX 1050");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (8);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1, 2: mx80 inst
+ CASE 3, 4: lx800 inst
+ CASE 5, 6: fx85 inst
+ CASE 7, 8: fx800 inst
+ END SELECT
+ FI.
+
+ mx80 inst:
+ IF choice = 1
+ THEN putline ("Epson MX 80 Typ III")
+ ELSE putline ("Epson MX 100 Typ III")
+ FI;
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.1");
+ generate ("mx");
+ adjust positioning;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ lx800 inst:
+ IF choice = 3
+ THEN putline ("Epson LX 800")
+ ELSE putline ("Epson LX 1000")
+ FI;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("SW1-1 SW1-2 SW1-3 SW1-4 SW1-5 SW1-6 SW1-7 SW1-8 SW2-1 SW2-2 SW2-3 SW2-4");
+ putline ("egal egal egal egal egal egal egal egal egal *) OFF OFF");
+ putline ("*) ON: Einzelblatteinzug, OFF: kein Einzug");
+ show control options ("std speed, std quality, std typeface");
+ show material options ("slow, fast, draft, nlq, roman, sansserif");
+ show command options ("draft, nlq, roman, sansserif");
+ ask for positioning;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.20.lx");
+ generate ("lx800");
+ adjust positioning;
+ adjust quality;
+ IF choice = 4 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ fx85 inst:
+ IF choice = 5
+ THEN putline ("Epson FX 85")
+ ELSE putline ("Epson FX 105")
+ FI;
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("SW1-1 SW1-2 SW1-3 SW1-4 SW1-5 SW1-6 SW1-7 SW1-8 SW2-1 SW2-2 SW2-3 SW2-4");
+ putline ("egal egal egal ON egal egal egal egal egal egal OFF OFF");
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("fx85");
+ adjust positioning;
+ IF choice = 6 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ fx800 inst:
+ IF choice = 7
+ THEN putline ("Epson FX 800 oder FX 850")
+ ELSE putline ("Epson FX 1000 oder FX 1050")
+ FI;
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("SW1-1 SW1-2 SW1-3 SW1-4 SW1-5 SW1-6 SW1-7 SW1-8 SW2-1 SW2-2 SW2-3 SW2-4");
+ putline ("egal egal egal ON egal egal egal egal egal *) OFF OFF");
+ putline ("*) ON: Einzelblatteinzug, OFF: kein Einzug");
+ show control options ("std quality, std typeface");
+ show material options ("draft, nlq, roman, sansserif");
+ show command options ("draft, nlq, roman, sansserif");
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.20");
+ generate ("fx800");
+ adjust quality;
+ IF choice = 8 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ fujitsu menu:
+ page;
+ headline ("Fujitsu - Menü");
+ putline (" 1. DX 2100");
+ putline (" 2. DX 2200");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (2);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1,2 : dx2100 inst
+ END SELECT
+ FI.
+
+ dx2100 inst:
+ IF choice = 1
+ THEN putline ("Fujitsu DX 2100")
+ ELSE putline ("Fujitsu DX 2200")
+ FI;
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("SW1-1 SW1-2 SW1-3 SW1-4 SW1-5 SW1-6 SW1-7 SW1-8 SW2-1 SW2-2 SW2-3 SW2-4");
+ putline ("egal egal egal egal egal egal egal egal egal *) OFF OFF");
+ putline ("*) ON: Einzelblatteinzug, OFF: kein Einzug");
+ show control options ("std speed, paper feed");
+ show material options ("slow, fast");
+ show command options ("schwarz, rot, blau, violett, gelb, rot, grün");
+ ask for positioning;
+ ask for paper feed;
+ IF all right
+ THEN get fonttable ("fonttab.7.fuj");
+ generate ("fujdx2100");
+ adjust positioning;
+ adjust paper feed;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+
+
+ ibm menu:
+ page;
+ headline ("IBM - Menü");
+ putline (" 1. Grafikdrucker (""80 Zeichen breit"")");
+ putline (" 2. Grafikdrucker (""136 Zeichen breit"")");
+ putline (" 3. Proprinter/Grafikdrucker II (""80 Zeichen breit"")");
+ putline (" 4. Proprinter/Grafikdrucker II (""136 Zeichen breit"")");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (4);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ IF choice = 1 OR choice = 2
+ THEN ibmgp inst
+ ELSE ibmpp inst
+ FI
+ FI.
+
+ ibmgp inst:
+ IF choice = 1
+ THEN putline ("IBM Grafikdrucker (""80 Zeichen breit"")")
+ ELSE putline ("IBM Grafikdrucker (""136 Zeichen breit"")")
+ FI;
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.10");
+ generate ("ibmgp");
+ adjust positioning;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ ibmpp inst:
+ IF choice = 3
+ THEN putline ("IBM Proprinter/Grafikdrucker II (""80 Zeichen breit"")")
+ ELSE putline ("IBM Proprinter/Grafikdrucker II (""136 Zeichen breit"")")
+ FI;
+ show control options ("std speed, std quality");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq");
+ ask for positioning;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.10");
+ generate ("ibmpp");
+ adjust positioning;
+ adjust quality;
+ IF choice = 4 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ mannesmann menu:
+ page;
+ headline ("Mannesmann - Tally - Menü");
+ putline (" 1. MT 230");
+ putline (" 2. MT 340");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (2);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ IF choice = 1
+ THEN mt230 inst
+ ELSE mt340 inst
+ FI
+ FI.
+
+ mt230 inst:
+ putline ("Mannesmann-Tally MT 230");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Der Drucker muß auf den ANSI+EPSON - Modus eingestellt werden.");
+ putline ("(Siehe: MT 230 Anwenderhandbuch, S. 4-145)");
+ show control options ("std speed, paperfeed");
+ show material options ("slow, fast, schacht1, schacht2");
+ show command options ("schacht1, schacht2, schwarz, magenta, cyan, blau, gelb, rot, grün");
+ ask for positioning;
+ ask for paper feed;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("mt230");
+ adjust positioning;
+ adjust paper feed;
+ do ("papersize (39.37, 30.48)");
+ installed := TRUE
+ FI.
+
+ mt340 inst:
+ putline ("Mannesmann-Tally MT 340");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Der Drucker muß auf den ANSI+EPSON - Modus eingestellt werden.");
+ putline ("(Siehe: MT 340 Anwenderhandbuch, S. 4-104)");
+ show control options ("std speed, paperfeed");
+ show material options ("slow, fast, schacht1, schacht2");
+ show command options ("schacht1, schacht2, schwarz, magenta, cyan, blau, gelb, rot, grün");
+ ask for positioning;
+ ask for paper feed;
+ IF all right
+ THEN get fonttable ("fonttab.7.mt");
+ generate ("mt340");
+ adjust positioning;
+ adjust paper feed;
+ do ("papersize (39.37, 30.48)");
+ installed := TRUE
+ FI.
+
+ oki menu:
+ page;
+ headline ("OKI - Menü");
+ putline (" 1. MICROLINE 182 IBM-kompatibel");
+ putline (" 2. MICROLINE 183 IBM-kompatibel");
+ putline (" 3. MICROLINE 192 ELITE");
+ putline (" 4. MICROLINE 193 ELITE");
+ putline (" 5. MICROLINE 292 ELITE");
+ putline (" 6. MICROLINE 293 ELITE");
+ putline (" 7. MICROLINE 294 IBM-kompatibel");
+ putline (" 8. MICROLINE 320");
+ putline (" 9. MICROLINE 321");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (9);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ SELECT choice OF
+ CASE 1, 2: ml182i inst
+ CASE 3, 4: ml192el inst
+ CASE 5, 6: ml292el inst
+ CASE 7 : ml294i inst
+ CASE 8, 9: ml320 inst
+ END SELECT
+ FI.
+
+ ml182i inst:
+ IF choice = 1
+ THEN putline ("OKI Microline 182 IBM-kompatibel")
+ ELSE putline ("OKI Microline 183 IBM-kompatibel")
+ FI;
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S-1 S-2 S-3 S-4 S-5 S-6 S-7 S-8");
+ putline ("egal egal OFF egal egal OFF egal OFF");
+ show control options ("std speed, std quality");
+ show material options ("slow, fast, draft, nlq");
+ show command options ("draft, nlq");
+ ask for positioning;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.10");
+ generate ("okiml182i");
+ adjust positioning;
+ adjust quality;
+ IF choice = 2 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ ml192el inst:
+ IF choice = 3
+ THEN putline ("OKI Microline 192 ELITE (IBM/EPSON-kompatibel)")
+ ELSE putline ("OKI Microline 193 ELITE (IBM/EPSON-kompatibel)")
+ FI;
+ line;
+ putline ("Der Drucker muß so konfiguriert sein (Druckmenü des Druckers):");
+ putline ("- 13: Automatic Line Feed: Nein");
+ putline ("- 18: Compatibility: EPSON FX");
+ putline ("(Außerdem: Jumper SP5 in Position 'B')");
+ show control options ("std speed, paperfeed");
+ show material options ("slow, fast");
+ ask for positioning;
+ ask for paper feed;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("okiml192el");
+ adjust positioning;
+ adjust paper feed;
+ IF choice = 4 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ ml292el inst:
+ IF choice = 5
+ THEN putline ("OKI Microline 292 ELITE (IBM/EPSON-kompatibel)")
+ ELSE putline ("OKI Microline 293 ELITE (IBM/EPSON-kompatibel)")
+ FI;
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Der Drucker muß so konfiguriert sein (Druckmenü des Druckers):");
+ putline ("- Automatic Line Feed: NO");
+ putline ("- Compatibility: EPSON EX");
+ putline ("(Außerdem: Jumper SP5 in Position 'B')");
+ show control options ("paperfeed, std quality, std typeface");
+ show material options ("draft, nlq, courier, sansserif");
+ show command options ("draft, nlq, courier, sansserif");
+ putline ("schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for paper feed;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.20");
+ generate ("okiml292el");
+ adjust paper feed;
+ adjust quality;
+ IF choice = 6 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ ml294i inst:
+ putline ("OKI Microline 294 IBM-kompatibel");
+ putline ("Der Druckertreiber unterstützt auch den Farbdruck mit entsprechendem");
+ putline ("Farbband.");
+ line;
+ putline ("Der Drucker muß so konfiguriert sein (Druckmenü des Druckers):");
+ putline ("- Proportional Spacing: NO");
+ putline ("- Automatic Line Feed: NO");
+ putline ("- Compatibility: PROPRINTER XL");
+ show control options ("paperfeed, std quality");
+ show material options ("draft, nlq");
+ show command options ("draft, nlq, schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for paper feed;
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.10");
+ generate ("okiml294i");
+ adjust paper feed;
+ adjust quality;
+ do ("papersize (34.544, 30.48)");
+ installed := TRUE
+ FI.
+
+ ml320 inst:
+ IF choice = 8
+ THEN putline ("OKI Microline 320 IBM/EPSON-kompatibel")
+ ELSE putline ("OKI Microline 321 IBM/EPSON-kompatibel")
+ FI;
+ line;
+ putline ("Der Drucker muß so konfiguriert sein (Druckmenü des Druckers):");
+ putline ("- Automatic Line Feed: Nein");
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("okiml320");
+ adjust positioning;
+ IF choice = 9 THEN do ("papersize (34.544, 30.48)") FI;
+ installed := TRUE
+ FI.
+
+ schneider menu:
+ page;
+ headline ("Schneider - Menü");
+ putline (" 1. DMP 4000");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (1);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ dmp4000 inst
+ FI.
+
+ dmp4000 inst:
+ putline ("Schneider DMP 4000");
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("DS1-4 übrige Schalter");
+ putline (" OFF egal");
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("dmp4000");
+ adjust positioning;
+ do ("papersize (39.37, 30.48)");
+ installed := TRUE
+ FI.
+
+ star menu:
+ page;
+ headline ("Star - Menü");
+ putline (" 1. LC-10 (auch LC-10 Colour)");
+ putline (" 2. NX-15");
+ putline (" 3. ND-10");
+ putline (" 4. ND-15");
+ putline (" 5. NR-10");
+ putline (" 6. NR-15");
+ cursor (1,24);
+ put ("CR: Eingabe ESC: Zurück zum Hauptmenü");
+ ask user (6);
+ page;
+ choice := int (inp);
+ IF was esc
+ THEN was esc := FALSE
+ ELSE headline ("");
+ putline ("Druckertyp:");
+ IF choice = 1
+ THEN lc10 inst
+ ELIF choice = 2
+ THEN nx15 inst
+ ELSE nd10 inst
+ FI
+ FI.
+
+ lc10 inst:
+ putline ("Star LC-10 oder LC-10 Colour");
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S1-1 S1-2 S1-3 S1-4 S1-5 S1-6 S1-7 S1-8 S2-1 S2-2 S2-3 S2-4");
+ putline ("egal egal egal *) egal EIN egal EIN egal egal egal egal");
+ putline ("*) AUS: Einzelblatteinzug, EIN: kein Einzug");
+ show control options ("std quality, std typeface");
+ show material options ("draft, nlq, courier, sansserif, orator1, orator2");
+ show command options ("draft, nlq, courier, sansserif, orator1, orator2");
+ putline ("schwarz, rot, blau, violett, gelb, orange, grün");
+ ask for quality;
+ IF all right
+ THEN get fonttable ("fonttab.20.lc");
+ generate ("starlc10");
+ adjust quality;
+ do ("papersize (21.0, 30.48)");
+ installed := TRUE
+ FI.
+
+ nx15 inst:
+ putline ("Star NX-15");
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S1-4 S1-8 S2-5 übrige Schalter");
+ putline ("EIN EIN EIN egal");
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("starnx15");
+ adjust positioning;
+ do ("papersize (36.0, 30.48)");
+ installed := TRUE
+ FI.
+
+ nd10 inst:
+ IF choice = 3
+ THEN putline ("Star ND-10");
+ ELIF choice = 4
+ THEN putline ("Star ND-15");
+ ELIF choice = 5
+ THEN putline ("Star NR-10");
+ ELSE putline ("Star NR-15");
+ FI;
+ line;
+ putline ("Die DIP-Schalter müssen so eingestellt sein:");
+ putline ("S1-5 S1-6 S2-2 übrige Schalter");
+ putline ("EIN EIN EIN egal");
+ show control options ("std speed");
+ show material options ("slow, fast");
+ ask for positioning;
+ IF all right
+ THEN get fonttable ("fonttab.7");
+ generate ("starnx15");
+ adjust positioning;
+ IF choice = 3 OR choice = 5
+ THEN do ("papersize (21.0, 30.48)")
+ ELSE do ("papersize (36.0, 30.48)")
+ FI;
+ installed := TRUE
+ FI.
+
+generate printer spool:
+ IF service opt = 0
+ THEN forget (generator name, quiet);
+ forget (driver name, quiet)
+ FI;
+ eumel must advertise;
+ cursor (1, 10);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (2);
+ putline ("Hinweis: Dieses Installationsprogramm kann in der Task """ + name (myself) + """");
+ putline (" mit 'treiber einrichten' aufgerufen werden, wenn ein anderer");
+ putline (" Drucker eingesetzt werden soll.");
+ line (2);
+ put ("Generierung beendet, weiter mit 'SV'");
+ break (quiet);
+ do ("spool manager (PROC printer)").
+
+ inform about restart:
+ page;
+ putline ("Es ist kein Druckertreiber installiert worden!");
+ line;
+ putline ("Dieses Installationsprogramm kann in der Task """ + name (myself) + """");
+ putline ("mit 'treiber einrichten' erneut aufgerufen werden.");
+ line.
+
+END PROC treiber einrichten;
+
+PROC headline (TEXT CONST header):
+
+ cursor (13,1);
+ putline ("E U M E L - Druckertreiber - Installations - Programm");
+ cursor (40 - LENGTH header DIV 2, 2);
+ put (header);
+ line (2)
+END PROC headline;
+
+PROC ask user (INT CONST max choice):
+
+ TEXT VAR exit;
+ inp := "";
+ REP
+ cursor (1,23);
+ IF inp = ""
+ THEN put ("Ihre Wahl (Nummer eingeben):")
+ ELSE put ("FEHLER! Eingabe korrigieren:")
+ FI;
+ editget (inp, ""27"", "", exit);
+ was esc := exit = ""27"";
+ UNTIL was esc OR ok PER.
+
+ ok:
+ int (inp) > 0 AND int (inp) <= max choice AND last conversion ok.
+END PROC ask user;
+
+PROC show control options (TEXT CONST options):
+
+ line;
+ putline ("Steuerprozeduren in der Task """ + name (myself) + """:");
+ write ("papersize, top margin");
+ IF options <> ""
+ THEN put (",");
+ putline (options)
+ FI
+END PROC show control options;
+
+PROC show material options (TEXT CONST options):
+
+ line;
+ putline ("Mögliche Materialwerte (#material(""..."")#):");
+ putline (options)
+END PROC show material options;
+
+PROC show command options (TEXT CONST options):
+
+ line;
+ putline ("Mögliche direkte Druckeranweisungen (#""...""#):");
+ putline (options)
+END PROC show command options;
+
+PROC ask for positioning:
+
+ line (2);
+ putline ("Positionierung in x-Richtung:");
+ line;
+ REP out (up);
+ IF yes ("in Mikroschritten (genauer, aber langsamer)")
+ THEN positioning := 1; LEAVE ask for positioning
+ FI;
+ out (up);
+ IF yes ("in Blanks (schneller, aber ungenauer)")
+ THEN positioning := 2; LEAVE ask for positioning
+ FI;
+ PER
+END PROC ask for positioning;
+
+PROC ask for quality:
+
+ line (2);
+ putline ("Standard - Druckqualität:");
+ line;
+ REP out (up);
+ IF yes ("Draft Quality (schneller, aber nicht so schön)")
+ THEN quality := 1; LEAVE ask for quality
+ FI;
+ out (up);
+ IF yes ("Near Letter Quality (schöner, aber langsamer)")
+ THEN quality := 2; LEAVE ask for quality
+ FI;
+ PER
+END PROC ask for quality;
+
+PROC ask for paper feed:
+
+ line (2);
+ putline ("Einzelblatteinzug:");
+ line;
+ REP out (up);
+ IF yes ("kein Einzelblatteinzug vorhanden")
+ THEN sheet feeder := 0; LEAVE ask for paper feed
+ FI;
+ out (up);
+ IF yes ("Einzelblatteinzug vorhanden")
+ THEN sheet feeder := 1; LEAVE ask for paper feed
+ FI;
+ PER
+END PROC ask for paper feed;
+
+BOOL PROC all right:
+
+ line (3);
+ cursor (1,23);
+ yes ("Soll der ausgewählte Druckertreiber installiert werden")
+END PROC all right;
+
+PROC get fonttable (TEXT CONST name):
+
+ fonttab name := name;
+ from archive ((description file name & module file name & fonttab name)
+ - all);
+ fonttable (fonttab name);
+ command dialogue (FALSE);
+ save (fonttab name, /"configurator");
+ IF service option = 0
+ THEN forget (fonttab name)
+ FI;
+ command dialogue (TRUE);
+END PROC get fonttable;
+
+PROC from archive (THESAURUS CONST files):
+
+ IF highest entry (files) > 0
+ THEN fetch from archive;
+ release (archive);
+ putline ("Archiv abgemeldet !")
+ FI.
+
+ fetch from archive:
+ THESAURUS VAR thes :: files;
+ REP
+ ask for archive;
+ reserve archive;
+ fetch (thes / ALL archive, archive);
+ thes := thes - all
+ UNTIL highest entry (thes) = 0 PER.
+
+ask for archive:
+ line;
+ putline ("Bitte Archiv mit den Dateien");
+ TEXT VAR buffer;
+ INT VAR index :: 0;
+ REP
+ get (thes, buffer, index);
+ putline (" " + buffer)
+ UNTIL index = 0 PER;
+ putline ("einlegen !");
+ line;
+ putline ("Wenn eingelegt: Taste drücken !");
+ inchar (buffer).
+
+reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop.
+
+END PROC from archive;
+
+THESAURUS OP & (TEXT CONST left, right):
+ THESAURUS VAR result := empty thesaurus;
+ insert (result, left);
+ insert (result, right);
+ result
+END OP &;
+
+THESAURUS OP & (THESAURUS CONST left, TEXT CONST right):
+ THESAURUS VAR result := left;
+ insert (result, right);
+ result
+END OP &;
+
+PROC generate (TEXT CONST name):
+
+ open files;
+ read description;
+ build programme;
+ insert programme;
+ forget files.
+
+ open files:
+ line (5);
+ cursor (1, 20);
+ putline (""4"Bitte warten !");
+ putline (" - Der Treiber wird generiert.");
+ driver name := "printer." + name + "(generiert)";
+ IF exists (driver name)
+ THEN forget (driver name, quiet)
+ FI;
+ FILE VAR des file :: sequential file (modify, description file name),
+ mod file :: sequential file (modify, module file name),
+ driver file :: sequential file (output, driver name).
+
+ read description:
+ to line (des file, 1);
+ col (des file, 1);
+ downety (des file, "$" + name + "$");
+ IF eof (des file)
+ THEN errorstop ("Beschreibung von """ + name + """ nicht im"13""10"" +
+ "Descriptions-File enthalten")
+ FI;
+ TEXT VAR description :: "",
+ record;
+ BOOL VAR done :: FALSE;
+ read record (des file, record);
+ record := subtext (record, col (des file) + LENGTH name + 2);
+ WHILE NOT eof (des file) AND NOT done REP
+ treat record
+ PER.
+
+ treat record:
+ INT VAR dollar pos :: pos (record, "$");
+ IF dollar pos = 0
+ THEN description CAT compress (record);
+ down (des file);
+ read record (des file, record)
+ ELSE description CAT compress (subtext (record, 1, dollar pos - 1));
+ col (des file, dollar pos);
+ done := TRUE;
+ FI.
+
+ build programme:
+ get module name;
+ WHILE still modules REP
+ find module;
+ transfer module;
+ get module name
+ PER.
+
+ get module name:
+ INT VAR semicol pos :: pos (description, ";");
+ TEXT VAR module name;
+ IF semicol pos > 0
+ THEN module name := subtext (description, 1, semicol pos - 1);
+ description := subtext (description, semicol pos + 1)
+ ELSE module name := description;
+ description := ""
+ FI.
+
+ still modules:
+ module name <> "" OR description <> "".
+
+ find module:
+ to line (mod file, 1);
+ col (mod file, 1);
+ downety (mod file, "$" + module name + "$");
+ IF eof (mod file)
+ THEN errorstop ("Modul """ + module name + """ nicht im"13""10"" +
+ "Modul-File enthalten")
+ FI.
+
+ transfer module:
+ done := FALSE;
+ read record (mod file, record);
+ record := subtext (record, col (mod file) + LENGTH module name + 2);
+ WHILE NOT eof (mod file) AND NOT done REP
+ transfer record
+ PER.
+
+ transfer record:
+ dollar pos := pos (record, "$");
+ IF dollar pos = 0
+ THEN write (driver file, compress (record));
+ line (driver file);
+ down (mod file);
+ read record (mod file, record)
+ ELSE write (driver file, compress (subtext (record, 1,
+ dollar pos - 1)));
+ col (mod file, dollar pos);
+ done := TRUE;
+ cout (line no (mod file))
+ FI.
+
+ insert programme:
+ IF online
+ THEN putline (" - Der Treiber wird insertiert.")
+ FI;
+ check off;
+ insert (driver name).
+
+ forget files:
+ IF service option = 0
+ THEN forget (description file name, quiet);
+ forget (module file name, quiet)
+ FI.
+END PROC generate;
+
+PROC adjust positioning:
+
+ IF positioning = 1
+ THEN do ("std speed (""slow"")")
+ ELSE do ("std speed (""fast"")")
+ FI
+END PROC adjust positioning;
+
+PROC adjust quality:
+
+ IF quality = 1
+ THEN do ("std quality (""draft"")")
+ ELSE do ("std quality (""nlq"")")
+ FI
+END PROC adjust quality;
+
+PROC adjust paper feed:
+
+ IF sheet feeder = 1
+ THEN do ("paper feed (""sheet"")")
+ ELSE do ("paper feed (""tractor"")")
+ FI
+END PROC adjust paperfeed;
+
+treiber einrichten
+
+END PACKET driver inst 9
+
diff --git a/printer/dotmatrix9/readme b/printer/dotmatrix9/readme
new file mode 100644
index 0000000..2047abe
--- /dev/null
+++ b/printer/dotmatrix9/readme
@@ -0,0 +1,324 @@
+#type("nlq10")##limit(18.0)##start(1.5,1.0)#
+#head#
+Treiber-Installations-Programm #right#Seite %
+für 9-Nadel-Matrixdrucker #right#23.06.1988
+
+
+#end#
+#on("u")#Dokumentation zum Treiber-Installations-Programm für 9-Nadel-
+Matrixdrucker#off("u")#
+
+#on("u")#Inhalt:#off("u")#
+
+1. Installations- und Gebrauchsanleitung
+2. Druckertreiber-Auswahl
+3. Steuerungsmöglichkeiten und Spezialfeatures
+4. Weitere Hinweise
+
+
+#on("b")#1. Installations- und Gebrauchsanleitung#off("b")#
+
+#on("u")#Einrichten#off("u")#
+So wird das Treiber-Installationsprogramm eingerichtet:
+
+ SV drücken
+
+ nach 'gib supervisor kommando:'
+
+ begin("PRINTER","SYSUR")
+
+ in der Task "PRINTER" (nach 'gib kommando'):
+
+ archive ("std.printer")
+ fetch ("printer.neun.nadel",archive)
+ check off
+ insert ("printer.neun.nadel")
+
+Das Programm wird dann insertiert.
+
+#on("u")#Druckerkanal#off("u")#
+Hiernach wird die Kanalnummer des Druckers erfragt. Wenn der Drucker
+über Parallelschnittstelle betrieben wird, ist die Kanalnummer
+meistens 15.
+
+#on("u")#Menüsystem#off("u")#
+Das Installationsprogramm zeigt nun eine Liste von Druckerherstellern.
+Wählen Sie den Hersteller Ihres Druckers aus! Hiernach wird eine Liste
+der unterstützten Drucker dieses Herstellers gezeigt. Wählen Sie hier
+den passenden Typ aus!
+Das Installationsprogramm zeigt nun einige Informationen zu dem ange­
+wählten Drucker. Besonders zu beachten sind hierbei #on("u")#Angaben zur Konfi­
+guration des Druckers#off("u")# (z.B. DIP-Schalter). Der Drucker muß unbedingt
+wie angegeben konfiguriert werden, wenn er mit dem ausgewählten Trei­
+ber betrieben werden soll.
+
+Hinweise zu Konfigurationsangaben:
+1. Die Angabe 'egal' bedeutet, daß die Einstellung für die Funktion
+ des Treibers keine Bedeutung hat. Dennoch solte der Anwender darauf
+ achten, welche Funktion die Schalter haben (Druckerhandbuch!). So
+ ist es zum Beispiel immer empfehlenswert, den Papierende-Sensor zu
+ aktivieren, damit der Drucker nach Papierende nicht auf der Walze
+ weiterdruckt.
+2. Die Konfigurationsangaben beziehen sich immer auf genau den ausge­
+ wählten Druckertyp. Wenn Sie den Treiber mit einem anderen Drucker
+ als den ausgewählten verwenden, dann beachten Sie folgende Regeln
+ für die Konfiguration:
+ - Der Drucker muß auf eine passende Emulation konfiguriert werden.
+ - Der Drucker darf bei einem Carriage Return (Code 13) keinen Zei­
+ lenvorschub durchführen.
+ - Der Drucker darf die Perforation #on("u")#nicht#off("u")# automatisch überspringen.
+
+ - Auf Seitenlängen und internationale Zeichensätze müssen Sie nicht
+ achten.
+
+(Hinweise zur Auswahl des richtigen Treibers gibt Abschnitt 2)
+
+Nach den Konfigurationsangaben werden Steuerungsmöglichkeiten des
+ausgewählten Treibers angezeigt. (Siehe hierzu Abschnitt 3)
+
+Falls der Treiber bestimmte grundsätzliche Betriebsmöglichkeiten er­
+laubt (z.B. DRAFT/NLQ, Einzelblatteinzug), werden Sie danach gefragt,
+welche Möglichkeit standardmäßig gewählt werden soll. diese Vorein­
+stellungen können nachträglich in der Task "PRINTER" mit den entspre­
+chenden Steuerprozeduren neu gesetzt werden. Außerdem können bestimmte
+Einstellungen noch für jedes einzelne Dokument (d.h. für jede Druck­
+datei) gewählt ('material'-Anweisung) oder sogar innerhalb eines Doku­
+ments verändert werden (direkte Druckeranweisung \#"..."\#).
+Über die Steuerungsmöglichkeiten informiert Abschnitt 3 ausführlicher.
+
+
+#on("b")#2. Druckertreiber-Auswahl#off("b")#
+
+#on("u")#Verwendung nicht im Menü enthaltener Drucker#off("u")#
+Für den Fall, daß Sie genau Ihren Drucker im Menü nicht finden, soll­
+ten Sie zunächst versuchen, ob ein Treiber für einen anderen Drucker
+des gleichen Herstellers mit Ihrem Drucker korrekt arbeitet.
+Falls dies nicht funktioniert oder der Hersteller überhaupt nicht im
+Menü erscheint, müssen Sie herausfinden (Druckerhandbuch, -händler!),
+welchen Drucker Ihr Drucker emuliert oder welchem er ähnlich ist.
+(Viele Drucker verfügen über EPSON FX-85 bzw. FX-800-Emulationen oder
+IBM Grafikdrucker bzw. Proprinter-Eumulationen.)
+Eine der beiden Anpassungen 'EPSON MX' oder 'IBM-Grafikdrucker' müßte
+immer einen (Minimal-) Betrieb ermöglichen.
+
+#on("u")#Hinweise zu den Treibern für FX-80/85-kompatilble Drucker#off("u")#
+Die Treiber für FX-80-bzw. FX-85-kompatible Geräte, die oft auch IBM-
+kompatibel sind, basieren üblicherweise auf den Treibern für EPSON-
+Drucker, weil so einige Schrifttypen (z.B. Proportionalschrift) und
+Modifikationen leichter ausgenutzt werden können. Ein Nachteil liegt
+aber darin, daß beim FX-80 und FX-85 noch die alten EPSON-Zeichensätze
+benutzt werden, die nicht die IBM-üblichen Grafik- und Sonderzeichen
+enthalten.
+Falls für Sie die Benutzung dieser Zeichen vordringlich ist, sollten
+Sie Ihren Drucker (nachdem er auf IBM-Emulation konfiguriert wurde)
+zusammen mit dem Treiber für IBM-Grafikdrucker bzw. -Proprinter ver­
+wenden.
+
+
+#on("b")#3. Steuerungsmöglichkeiten und Spezialfeatures#off("b")#
+
+Einige Treiber bieten bestimmte Einstellungsmöglichkeiten (z.B.
+DRAFT/NLQ) und/oder Spezialfeatures (z.B. Farbdruck).
+Die Einstellungen können über
+- Steuerprozeduren
+- Materialanweisungen bzw.
+- direkte Druckeranweisungen
+vorgenommen werden.
+
+#on("u")#Steuerprozeduren#off("u")#
+setzen Einstellungen, die für alle Dokumente (Druckdateien) gelten
+sollen. Die Prozeduren müssen in der Druckspooltask (meist: "PRINTER")
+aufgerufen werden. #on("b")#Gültig werden die Änderungen erst, wenn danach in
+der Druckspooltask das Kommando 'start' gegeben wird!#off("b")#
+
+PROC papersize (REAL CONST breite, länge)
+ Dient zur Einstellung der Größe der physikalisch beschreibbaren
+ Fläche.
+ Beispiel: papersize (20.32, 30.48)
+ (Standardeinstellung für Endlospapier 8 Zoll breit und
+ 12 Zoll lang)
+
+PROC papersize
+ Informationsprozedur
+
+PROC top margin (REAL CONST margin)
+ Falls der Drucker es nicht erlaubt, direkt am Blattanfang zu druk­
+ ken (zum Beispiel wegen eines Einzelblatteinzugs), muß mit dieser
+ Prozedur die Länge des oberen Randes, den der Drucker nicht be­
+ drucken kann, in cm angegeben werden.
+ Beispiel: top margin (2.0)
+ (Teilt dem Druckertreiber mit, daß die ersten 2 cm
+ nicht bedruckbar sind.)
+
+REAL PROC top margin
+ Informationsprozedur
+
+PROC std speed (TEXT CONST speed)
+ Parameter: slow, fast
+ Wahl zwischen Positionierung in Mikroschritten (slow) oder in
+ Blanks (fast).
+ Beispiel: std speed ("slow")
+
+TEXR PROC std speed
+ Informationsprozedur
+
+PROC std quality (TEXT CONST quality)
+ übliche Parameter: draft, nlq
+ Wahl zwischen Datenverarbeitungs-Qualität und Schönschrift-
+ Qualität
+ Beispiel: std quality ("draft")
+
+TEXT PROC std quality
+ Informationsprozedur
+
+PROC std typeface (TEXT CONST typeface)
+ übliche Parameter: roman, sansserif, courier
+ Wahl zwischen verschiedenen NLQ-Schriftarten (nur sichtbar im
+ NLQ-Modus, das heißt 'std typeface' schaltet nicht auf NLQ).
+ Beispiel: std typeface ("roman")
+
+TEXT PROC std typeface
+ Informationsprozedur
+
+PROC paper feed (TEXT CONST name)
+ übliche Parameter: tractor, sheet, schacht1, schacht2
+ Wählt Endlospapier oder Einzelblatteinzug und ggf. Schachtnummer.
+ Beispiel: paper feed ("sheet")
+
+TEXT PROC paper feed
+ Informationsprozedur
+
+
+#on("u")#Materialanweisungen \#material("...")\##off("u")#
+müssen in der Druckdatei vor dem ersten druckbaren Zeichen stehen und
+setzen Einstellungen für eine ganze Datei. (Materialanweisungen haben
+für die jeweilige Datei Vorrang vor den durch Steuerprozeduren einge­
+stellten Standardwerten. Diese werden durch die Materialanweisung aber
+nicht geändert.)
+
+Beispiel: \#material("nlq")\#
+ sorgt bei entsprechendem Treiber dafür, daß das gesamte
+ Dokument in Schönschrift-Qualität ausgedruckt wird, egal
+ wie 'std quality' eingestellt ist.
+
+#on("b")#Es darf in einer Datei nur eine Materialanweisung stehen!#off("b")# Sollen meh­
+rere Einstellungen vorgenommen werden, müssen sie in einer Anweisung
+erscheinen. Beispiel: \#material("sheet;draft")\#
+
+
+#on("u")#direkte Druckeranweisungen \#"..."\##off("u")#
+gelten ab der Position, an der sie in der Datei auftreten. Sie haben
+(sofern sie erlaubt sind,) Vorrang vor Standardeinstellungen und
+Materialeinstellungen.
+
+Beispiel: \#"draft"\#
+ schaltet (bei entsprechendem Treiber) auf Datenverar­
+ beitungs-Qualität, egal welche Standardeinstellung vorliegt
+ und welche Materialanweisung gegeben wurde.
+
+#on("b")#In einer Druckeranweisung darf nur eine Einstellung vorgenommen
+werden.#off("b")# Also: \#"nlq"\#\#"sansserif"\#
+
+
+#on("u")#Wichtig#off("u")#
+- Achten Sie bei Materialanweisungen und direkten Druckeranweisungen
+ besonders auf korrekte Schreibweise! Es werden nur Kleinbuchstaben
+ berücksichtigt! Also: \#"nlq"\# und keinesfalls \#"NLQ"\#!!!
+- Direkte Druckeranweisungen werden vom EUMEL-Drucker ignoriert und
+ nur vom Druckertreiber in eine Kommando-Sequenz umgesetzt. Es kann
+ daher vorkommen, daß (z.B. bei Spaltendruck) unerwartete Ergebnisse
+ erscheinen, weil der EUMEL-Drucker dann den Text in einer anderen
+ Reihenfolge an den Drucker sendet, als er in der Datei steht, die
+ mit dem direkten Druckerkommando gesetzte Modifikation aber (z.B.
+ für beide Spalten) unerwünscht erhalten bleibt.
+
+
+#on("u")#Tabelle#off("u")#
+Die Tabelle soll einen Anhaltspunkt dafür geben, wie welche Einstel­
+lungen erfolgen können.
+
+#type("17")#
+ Steuerprozeduren Materialanweisungen direkte Druckeranweisungen
+
+#on("u")#                                                                                          #off("u")#
+
+Positionierung std speed slow, fast ------
+ slow, fast
+
+Qualität std quality z.B. draft, nlq z.B. draft, nlq
+ z.B. draft, nlq
+
+Schriftart std typeface z.B. roman, z.B. roman,
+(nur bei NLQ) z.B. roman, sansserif, courier sansserif, courier
+ sansserif, courier
+
+Einzelblatt- paper feed z.B. schacht1, z.B. schacht1,
+einzug z.B. tractor, schacht2 schacht2
+ sheet,
+ schacht1, schacht2
+
+Farbdruck ------ ------ z.B. schwarz,
+ rot, blau,
+ violett, gelb
+ orange, grün
+
+
+
+#type("nlq10")##on("b")#4. Weitere Hinweise#off("b")#
+
+#on("u")#Zeichensatzänderungen gegenüber früheren Versionen#off("u")#
+In den Fonttabellen früherer Druckertreiber-Versionen wurden oberhalb
+des Codes 127 einige internationale Zeichen zur Verfügung gestellt
+(und zwar in Anlehnung an den Agfa-Laserdrucker-Zeichensatz).
+Bei den Treibern der vorliegenden Version gilt folgendes:
+- Wie bisher wird der volle im Benutzerhandbuch festgelegte EUMEL-
+ Zeichensatz (sofern möglich) unterstützt.
+- Der Code 252 liefert das Paragraphzeichen.
+- Alle übrigen (vom EUMEL-Zeichensatz nicht definierten) Zeichencodes
+ oberhalb 127 liefern, sofern möglich, die entsprechenden Zeichen des
+ IBM-Grafikzeichensatzes.
+
+
+#on("u")#Hinweis zu Proportionalschriften#off("u")#
+Bei Proportionalschriften sollte die Modifikation \#on("i")\# nicht
+benutzt werden, da die kursiven Zeichen andere Proportionalbreiten
+haben. Stattdessen sollte auf den schrägen Typ umgeschaltet werden
+(z.B. von "prop10" auf "prop10i").
+
+
+#on("u")#Hinweis zur Benutzung von Einzelblatteinzügen#off("u")#
+Bei der Benutzung von Einzelblatteinzügen müssen folgende Einstel­
+lungen vorgenommen werden (vgl. auch Abschnitt 3!):
+
+ Am Drucker:
+1. Sie müssen Ihren Drucker auf die Option Einzelblatteinzug konfigu­
+ rieren (siehe Druckerhandbuch!).
+
+ In der Druckspooltask (meist 'PRINTER'):
+2. Falls der Druckertreiber die Steuerprozedur 'paper feed' zur Verfü­
+ gung stellt, müssen Sie mit 'paperfeed ("sheet")' oder (für
+ 2-Schacht-Einzüge) mit 'paperfeed ("schacht1")' bzw. 'paperfeed
+ ("schacht2")' den Druckertreiber auf Einzelblatteinzug umschalten.
+3. Falls Sie eine andere Papierlänge als 12 Zoll (=30.48 cm) verwen­
+ den, müssen Sie die neuen Papiermaße mit 'papersize' in cm einstel­
+ len.
+ Beispiel: papersize (21.0, 29.7)
+ (für DIN A4-Blätter)
+4. Falls der Drucker mit dem Einzelblatteinzug nicht direkt am Blatt­
+ anfang drucken kann, sondern ein gewisser oberer Rand bleibt, muß
+ mit 'top margin' die Länge des nicht bedruckbaren Randes in cm dem
+ Druckertreiber mitgeteilt werden.
+ Beispiel: top margin (1.5)
+ (Wie groß der obere Rand ist, kann festgestellt werden, indem eine
+ Datei mit \#start(0.0,0.0)\# ausgedruckt wird.)
+
+ Wurde mit 'top margin' dem Treiber die Größe der nicht bedruckbaren
+ Fläche mitgeteilt, so ist darauf zu achten, daß in den Druckdateien
+ ein genügend großer y-Wert für die Startposition eingestellt wird
+ ('start'-Anweisung). Andernfalls kommt es bei der Ausgabe in der
+ ersten Zeile zu Überschreibungen.
+
+
+#on("b")#5. Die Änderungen, die Sie in der Druckspooltask vorgenommen haben
+ werden erst wirksam, wenn das Spool-Kommando 'start' gegeben wird.#off("b")#
+
diff --git a/printer/laser/fonttab.apple.laserwriter b/printer/laser/fonttab.apple.laserwriter
new file mode 100644
index 0000000..bee2d6a
--- /dev/null
+++ b/printer/laser/fonttab.apple.laserwriter
Binary files differ
diff --git a/printer/laser/fonttab.canon.lbp-8 b/printer/laser/fonttab.canon.lbp-8
new file mode 100644
index 0000000..45314ac
--- /dev/null
+++ b/printer/laser/fonttab.canon.lbp-8
Binary files differ
diff --git a/printer/laser/fonttab.epson.sq b/printer/laser/fonttab.epson.sq
new file mode 100644
index 0000000..a3f7af3
--- /dev/null
+++ b/printer/laser/fonttab.epson.sq
Binary files differ
diff --git a/printer/laser/fonttab.hp.laserjet b/printer/laser/fonttab.hp.laserjet
new file mode 100644
index 0000000..4082e46
--- /dev/null
+++ b/printer/laser/fonttab.hp.laserjet
Binary files differ
diff --git a/printer/laser/fonttab.kyocera.f-1010 b/printer/laser/fonttab.kyocera.f-1010
new file mode 100644
index 0000000..9c3fbda
--- /dev/null
+++ b/printer/laser/fonttab.kyocera.f-1010
Binary files differ
diff --git a/printer/laser/fonttab.nec.lc-08 b/printer/laser/fonttab.nec.lc-08
new file mode 100644
index 0000000..f032953
--- /dev/null
+++ b/printer/laser/fonttab.nec.lc-08
Binary files differ
diff --git a/printer/laser/genfont.kyocera.f-1010.dynamic1 b/printer/laser/genfont.kyocera.f-1010.dynamic1
new file mode 100644
index 0000000..fae8c09
--- /dev/null
+++ b/printer/laser/genfont.kyocera.f-1010.dynamic1
@@ -0,0 +1,30 @@
+#"!"82"! "#
+#"CMNT 'dyn1.6 '; GENF 10220, 'DYNAMIC1', 22, 32, 126, 32, 0.94, 0.0, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.6.i '; GENF 10224, 'DYNAMIC1', 22, 32, 126, 32, 0.94, 0.3, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.8 '; GENF 10280, 'DYNAMIC1', 28, 32, 126, 32, 0.94, 0.0, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.8.i '; GENF 10284, 'DYNAMIC1', 28, 32, 126, 32, 0.94, 0.3, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.10 '; GENF 10340, 'DYNAMIC1', 34, 32, 126, 32, 0.94, 0.0, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.10.i'; GENF 10344, 'DYNAMIC1', 34, 32, 126, 32, 0.94, 0.3, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.12 '; GENF 10420, 'DYNAMIC1', 42, 32, 126, 32, 0.94, 0.0, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.12.i'; GENF 10424, 'DYNAMIC1', 42, 32, 126, 32, 0.94, 0.3, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.14 '; GENF 10500, 'DYNAMIC1', 50, 32, 126, 32, 0.94, 0.0, 0, 0, 0.0, 0.0; "#
+#"CMNT 'dyn1.14.b'; GENF 10502, 'DYNAMIC1', 50, 32, 126, 32, 1.04, 0.0, 0, 0, 5.0, 3.0; "#
+#"CMNT 'dyn1.18.b'; GENF 10682, 'DYNAMIC1', 68, 32, 126, 32, 1.04, 0.0, 0, 0, 5.0, 3.0; "#
+#"CMNT 'dyn1.24.b'; GENF 10922, 'DYNAMIC1', 92, 32, 126, 32, 1.04, 0.0, 0, 0, 5.0, 3.0; "#
+#"CMNT 'dyn1.36.b'; GENF 11322, 'DYNAMIC1', 132, 32, 126, 32, 1.04, 0.0, 0, 0, 5.0, 3.0; "#
+#"MAP 0, 0; EXIT;"#
+
+#type ("dyn1.6") #\#type("dyn1.6")\#
+#type ("dyn1.6.i") #\#type("dyn1.6.i")\#
+#type ("dyn1.8") #\#type("dyn1.8")\#
+#type ("dyn1.8.i") #\#type("dyn1.8.i")\#
+#type ("dyn1.10") #\#type("dyn1.10")\#
+#type ("dyn1.10.i")#\#type("dyn1.10.i")\#
+#type ("dyn1.12") #\#type("dyn1.12")\#
+#type ("dyn1.12.i")#\#type("dyn1.12.i")\#
+#type ("dyn1.14") #\#type("dyn1.14")\#
+#type ("dyn1.14.b")#\#type("dyn1.14.b")\#
+#type ("dyn1.18.b")#\#type("dyn1.18.b")\#
+#type ("dyn1.24.b")#\#type("dyn1.24.b")\#
+#type ("dyn1.36.b")#\#type("dyn1.36.b")\#
+
diff --git a/printer/laser/genfont.kyocera.f-1010.dynamic2 b/printer/laser/genfont.kyocera.f-1010.dynamic2
new file mode 100644
index 0000000..f425a7f
--- /dev/null
+++ b/printer/laser/genfont.kyocera.f-1010.dynamic2
@@ -0,0 +1,30 @@
+#"!"82"! "#
+#"CMNT 'dyn2.6 '; GENF 20200, 'DYNAMIC2', 20, 32, 126, 32, 0.94, 0.0, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.6.i '; GENF 20204, 'DYNAMIC2', 20, 32, 126, 32, 0.94, 0.3, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.8 '; GENF 20260, 'DYNAMIC2', 26, 32, 126, 32, 0.94, 0.0, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.8.i '; GENF 20264, 'DYNAMIC2', 26, 32, 126, 32, 0.94, 0.3, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.10 '; GENF 20320, 'DYNAMIC2', 32, 32, 126, 32, 0.94, 0.0, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.10.i'; GENF 20324, 'DYNAMIC2', 32, 32, 126, 32, 0.94, 0.3, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.12 '; GENF 20400, 'DYNAMIC2', 40, 32, 126, 32, 0.94, 0.0, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.12.i'; GENF 20404, 'DYNAMIC2', 40, 32, 126, 32, 0.94, 0.3, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.14 '; GENF 20480, 'DYNAMIC2', 48, 32, 126, 32, 0.94, 0.0, 0, 0, 2.0, 0.0; "#
+#"CMNT 'dyn2.14.b'; GENF 20482, 'DYNAMIC2', 48, 32, 126, 32, 0.99, 0.0, 0, 0, 5.0, 3.0; "#
+#"CMNT 'dyn2.18.b'; GENF 20662, 'DYNAMIC2', 66, 32, 126, 32, 0.99, 0.0, 0, 0, 5.0, 3.0; "#
+#"CMNT 'dyn2.24.b'; GENF 20902, 'DYNAMIC2', 90, 32, 126, 32, 0.99, 0.0, 0, 0, 5.0, 3.0; "#
+#"CMNT 'dyn2.36.b'; GENF 21302, 'DYNAMIC2', 130, 32, 126, 32, 0.99, 0.0, 0, 0, 5.0, 3.0; "#
+#"MAP 0, 0; EXIT;"#
+
+#type ("dyn2.6") #\#type("dyn2.6")\#
+#type ("dyn2.6.i") #\#type("dyn2.6.i")\#
+#type ("dyn2.8") #\#type("dyn2.8")\#
+#type ("dyn2.8.i") #\#type("dyn2.8.i")\#
+#type ("dyn2.10") #\#type("dyn2.10")\#
+#type ("dyn2.10.i")#\#type("dyn2.10.i")\#
+#type ("dyn2.12") #\#type("dyn2.12")\#
+#type ("dyn2.12.i")#\#type("dyn2.12.i")\#
+#type ("dyn2.14") #\#type("dyn2.14")\#
+#type ("dyn2.14.b")#\#type("dyn2.14.b")\#
+#type ("dyn2.18.b")#\#type("dyn2.18.b")\#
+#type ("dyn2.24.b")#\#type("dyn2.24.b")\#
+#type ("dyn2.36.b")#\#type("dyn2.36.b")\#
+
diff --git a/printer/laser/laser.inserter b/printer/laser/laser.inserter
new file mode 100644
index 0000000..c28766f
--- /dev/null
+++ b/printer/laser/laser.inserter
@@ -0,0 +1,275 @@
+PACKET laserdrucker inserter DEFINES treiber einrichten :
+
+(**************************************************************************)
+(* Installationsprogramm Stand : 12.12.88 *)
+(* für Tintenstrahl- Version : 0.9 *)
+(* und Laserdrucker Autor : hjh *)
+(**************************************************************************)
+
+LET anzahl firmen = 6 ;
+LET apple = "APPLE" ,
+ canon = "CANON" ,
+ epson = "EPSON" ,
+ hp = "HEWLETT PACKARD" ,
+ kyo = "KYOCERA" ,
+ nec = "NEC" ;
+
+THESAURUS VAR firmen := empty thesaurus ;
+
+INT VAR i ;
+ROW anzahl firmen THESAURUS VAR drucker ;
+FOR i FROM 1 UPTO anzahl firmen REP
+ drucker (i) := empty thesaurus
+PER ;
+ROW anzahl firmen THESAURUS VAR printer ;
+FOR i FROM 1 UPTO anzahl firmen REP
+ printer (i) := empty thesaurus
+PER ;
+ROW anzahl firmen THESAURUS VAR fonttables ;
+FOR i FROM 1 UPTO anzahl firmen REP
+ fonttables (i) := empty thesaurus
+PER ;
+
+liste (apple,"LASERWRITER","printer.apple.laserwriter","fonttab.apple.laserwriter");
+liste (canon , "LBP-8" ,"printer.canon.lbp-8" ,"fonttab.canon.lbp-8");
+liste (epson , "SQ 2500" ,"printer.epson.sq" ,"fonttab.epson.sq");
+liste (hp , "HP LASERJET" ,"printer.hp.laserjet" ,"fonttab.hp.laserjet");
+liste (hp , "HP LASERJET+" ,"printer.hp.laserjet" ,"fonttab.hp.laserjet");
+liste (kyo , "F-1010" ,"printer.kyocera.f-1010" ,"fonttab.kyocera.f-1010");
+liste (kyo , "F-2200" ,"printer.kyocera.f-1010" ,"fonttab.kyocera.f-1010");
+liste (nec , "SILENTWRITER LC-08" ,"printer.nec.lc-08"
+,"fonttab.nec.lc-08");
+
+treiber einrichten;
+
+PROC liste (TEXT CONST firmenname, druckername ,
+ printername, fonttabname ) :
+ INT VAR firmnum ;
+ IF firmen CONTAINS firmenname
+ THEN firmnum := link (firmen,firmenname)
+ ELSE insert (firmen,firmenname,firmnum)
+ FI;
+ insert (drucker(firmnum), druckername) ;
+ insert (printer(firmnum), printername) ;
+ insert (fonttables(firmnum), fonttabname) ;
+END PROC liste ;
+
+PROC treiber einrichten :
+ INT VAR menu phase := 1 ;
+ BOOL VAR installed := FALSE ;
+ BOOL VAR was esc ;
+ INT VAR firmnum, druckernum ;
+ TEXT VAR firmenname, druckername, printername, fonttabname ;
+
+ pre menu ;
+ REP
+ SELECT menu phase OF
+ CASE 1 : menu ("Hauptmenü Tintenstrahl und Laserdrucker", firmen,
+ "CR: Eingabe ESC : Installation abrechen",
+ firmnum, was esc ) ;
+ IF was esc
+ THEN menu phase := 0
+ ELSE menu phase := 2 ;
+ firmenname := name (firmen,firmnum) ;
+ FI ;
+
+ CASE 2 : menu (firmenname + " - Menü", drucker(firmnum),
+ "CR: Eingabe ESC : Zurück zum Hauptmenü",
+ druckernum, was esc) ;
+ IF was esc
+ THEN menu phase := 1
+ ELSE menu phase := 3 ;
+ druckername := name (drucker(firmnum),druckernum);
+ printername := name (printer(firmnum),druckernum);
+ fonttabname := name (fonttables(firmnum),druckernum);
+ FI;
+
+ CASE 3 : inst (druckername, printername, fonttabname, installed) ;
+ IF NOT installed THEN menu phase := 1 FI;
+ END SELECT
+ UNTIL installed OR abbruch PER ;
+ post menu.
+
+ abbruch:
+ menu phase < 1 .
+
+ pre menu:
+ line;
+ IF is single task system
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+ FI;
+ IF NOT is system task (myself)
+ THEN errorstop ("Die Druckertask muß im Systemzweig angelegt werden")
+ FI;
+ command dialogue (TRUE);
+ IF name (myself) <> "PRINTER"
+ THEN putline ("Diese Task heißt nicht ""PRINTER"", sondern """ +
+ name (myself) + """ !");
+ IF yes ("Soll die Task in ""PRINTER"" umbenannt werden ?")
+ THEN rename myself ("PRINTER")
+ FI
+ FI.
+
+ is single task system: (pcb (9) AND 255) = 1.
+
+ post menu:
+ IF NOT installed
+ THEN page;
+ putline ("Es ist kein Druckertreiber installiert worden!");
+ line;
+ putline ("Wenn dieses Installationsprogramm insertiert wurde,");
+ putline ("kann es in der Task """ + name (myself) + """ ");
+ putline ("mit 'treiber einrichten' erneut aufgerufen werden.");
+ line;
+ FI.
+
+END PROC treiber einrichten ;
+
+PROCEDURE menu (TEXT CONST header, THESAURUS CONST items, TEXT CONST bottom,
+ INT VAR choice, BOOL VAR was esc) :
+ INT VAR anzahl ;
+ page;
+ headline (header) ;
+ show list (items,anzahl) ;
+ bottomline (bottom) ;
+ ask user (anzahl,choice,was esc);
+END PROC menu ;
+
+PROC headline (TEXT CONST header):
+ cursor (13,1);
+ putline ("E U M E L - Druckertreiber - Installations - Programm");
+ cursor (40 - LENGTH header DIV 2, 2);
+ IF header <> "" THEN put (header) FI ;
+ line (2)
+END PROC headline;
+
+PROC bottomline (TEXT CONST bottom):
+ cursor (1,24);
+ IF bottom <> "" THEN put (""5"" + bottom) FI ;
+END PROC bottomline;
+
+PROC show list (THESAURUS CONST items , INT VAR anzahl ) :
+ INT VAR i ;
+ anzahl := highest entry (items);
+ FOR i FROM 1 UPTO anzahl REP
+ putline ( text(i) + ". " + name (items,i) ) ;
+ PER;
+END PROC show list ;
+
+PROC ask user (INT CONST max choice, INT VAR choice, BOOL VAR was esc):
+ TEXT VAR exit;
+ TEXT VAR inp := "";
+ REP
+ cursor (1,23);
+ IF inp = ""
+ THEN put ("Ihre Wahl (Nummer eingeben):")
+ ELSE put ("FEHLER! Eingabe korrigieren:")
+ FI;
+ editget (inp, ""27"", "", exit);
+ was esc := exit = ""27"";
+ UNTIL was esc OR ok PER.
+
+ ok:
+ choice := int (inp) ;
+ last conversion ok CAND ( choice > 0 AND choice <= max choice) .
+END PROC ask user;
+
+BOOL PROC is system task (TASK CONST task):
+ TASK VAR tsk := task ;
+ WHILE NOT (tsk = supervisor OR tsk = niltask) REP
+ tsk := father (tsk) ;
+ PER;
+ tsk = supervisor
+END PROC is system task ;
+
+PROC inst (TEXT CONST druckername, printername, fonttabname,
+ BOOL VAR success) :
+ page ;
+ headline (druckername) ;
+ fetch from archive if necessary ((empty thesaurus
+ + printer name + fonttab name) - all ,success);
+ IF success AND ok
+ THEN page ;
+ putline ("Der Drucker wird insertiert");
+ insert (printer name) ;
+ ELSE success := FALSE ;
+ FI.
+
+ok:
+ bottomline (" ");
+ yes ("Soll der ausgewählte Drucker insertiert werden").
+
+END PROC inst ;
+
+PROC fetch from archive if necessary (THESAURUS CONST files,
+ BOOL VAR success ):
+ BOOL VAR was esc ;
+ THESAURUS VAR thes :: files;
+
+ WHILE highest entry (thes) > 0 REP
+ ask for archive;
+ IF NOT was esc
+ THEN disable stop ;
+ bottomline ("Bitte warten ! ");
+ reserve archive;
+ IF NOT is error
+ THEN IF highest entry (thes / ALL archive) > 0
+ THEN fetch (thes / ALL archive, archive);
+ ELSE fehler ("Dateien nicht gefunden")
+ FI;
+ thes := thes - all;
+ FI;
+ IF is error
+ THEN fehler (errormessage);
+ clear error
+ FI;
+ command dialogue (FALSE);
+ release (archive);
+ command dialogue (TRUE);
+ enable stop ;
+ FI;
+ UNTIL was esc PER;
+ success := highest entry (thes) = 0.
+
+ask for archive:
+ headline ("") ;
+ putline ("Bitte Archiv mit den Dateien");
+ TEXT VAR buffer;
+ INT VAR index :: 0;
+ REP
+ get (thes, buffer, index);
+ putline (" " + buffer)
+ UNTIL index = 0 PER;
+ putline ("einlegen !");
+ bottomline ("CR: Wenn Archiv eingelegt ESC : Zurück zum Hauptmenü");
+ cursor (1,24);
+ REP
+ inchar (buffer) ;
+ UNTIL buffer = ""13"" OR buffer = ""27"" PER ;
+ was esc := buffer = ""27"".
+
+reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI.
+
+END PROC fetch from archive if necessary ;
+
+PROC fehler (TEXT CONST fehlermeldung):
+ bottomline (""7"" + fehlermeldung + " Bitte eine Taste drücken") ;
+ pause ;
+ bottomline (" ") ;
+END PROC fehler;
+
+END PACKET laserdrucker inserter;
+
diff --git a/printer/laser/printer.apple.laserwriter b/printer/laser/printer.apple.laserwriter
new file mode 100644
index 0000000..d4c6adf
--- /dev/null
+++ b/printer/laser/printer.apple.laserwriter
@@ -0,0 +1,770 @@
+PACKET apple laser writer printer
+
+(**************************************************************************)
+(* Stand : 24.02.88 *)
+(* APPLE LaswerWriter (PostScript) Verison : 4 *)
+(* Autor : Rudolf Ruland *)
+(**************************************************************************)
+
+ DEFINES open,
+ close,
+ execute,
+
+ paper size,
+ paper x size,
+ paper y size,
+
+ load positioning procs,
+ load underline procs,
+ load italics procs,
+ load encoding,
+
+ read ps input,
+
+ box commands,
+ insert box command,
+ delete box command,
+
+ print error,
+ :
+
+LET
+(* underline = 1,
+ bold = 2,
+ italics = 4,
+ reverse = 8,
+*)
+ underline linetype = 1,
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1,
+ c write cmd = 2,
+ c carriage return = 3,
+ c move = 4,
+ c draw = 5,
+ c on = 6,
+ c off = 7,
+ c type = 8,
+
+ ps input name = "PostScript.input",
+ ps error = 999,
+
+ tag type = 1;
+
+INT VAR paper length, font no, underline no, symbol type;
+REAL VAR x size, y size;
+BOOL VAR is landscape;
+TEXT VAR record, char, command, symbol;
+FILE VAR ps input;
+THESAURUS VAR box cmds := empty thesaurus;
+
+(*********************************************************************)
+
+paper size (21.0, 29.7);
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+REAL PROC paper x size : x size END PROC paper x size;
+
+REAL PROC paper y size : y size END PROC paper y size;
+
+
+THESAURUS PROC box commands : box cmds END PROC box commands;
+
+PROC insert box command (TEXT CONST new command) :
+
+ command := new command;
+ change all (command, " ", "");
+ insert (box cmds, command)
+
+END PROC insert box command;
+
+PROC delete box command (TEXT CONST old command) :
+
+ INT VAR dummy;
+ command := old command;
+ change all (command, " ", "");
+ delete (box cmds, command, dummy)
+
+END PROC delete box command;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ IF pos (material, "landscape") > 0 OR pos (material, "quer") > 0
+ THEN is landscape := TRUE;
+ x steps := x step conversion ( y size );
+ y steps := y step conversion ( x size );
+ ELSE is landscape := FALSE;
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ FI;
+ forget (ps input name, quiet);
+ ps input := sequential file (output, ps input name);
+ paper length := y steps;
+ font no := 0;
+ underline no := 0;
+ disable stop;
+ out (""4"");
+ read ps input (ps input, 18000, ""4"");
+ clear error;
+ enable stop;
+ out ("initgraphics erasepage statusdict /waittimeout 3000 put ");
+ load positioning procs;
+ load underline procs;
+ load italics procs;
+ load encoding;
+ read ps input (ps input, 0, "");
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ x start := 0;
+ y start := 0;
+ IF pos (material, "tray") > 0
+ THEN out ("statusdict /manualfeed false put ");
+ ELIF pos (material, "manual") > 0
+ THEN out ("statusdict /manualfeed true put statusdict /manualfeedtimeout 3600 put ");
+ FI;
+ IF material contains a number
+ THEN out ("/#copies "); out (number); out ("def ");
+ FI;
+ IF is landscape
+ THEN out (paper length);
+ out ("ys 0 translate 90 rotate ");
+ FI;
+ read ps input (ps input, 0, "");
+
+ . material contains a number :
+ INT VAR number := pos (material, "0", "9", 1);
+ IF number = 0
+ THEN FALSE
+ ELSE number := max (1, int (subtext (material, number, number + 1)));
+ TRUE
+ FI
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+ OTHERWISE : put (param1)
+END SELECT;
+
+.
+ close document :
+ disable stop;
+ out (""4"");
+ read ps input (ps input, 18000, ""4"");
+
+
+(*. remaining y steps : param1*)
+.
+ close page :
+ outline ("showpage");
+ read ps input (ps input, 0, "");
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ out ("(");
+ out subtext (string, from, to);
+ out (") show ");
+.
+ write cmd :
+ command := subtext (string, from, to);
+ IF is box cmd
+ THEN disable stop;
+ do (command);
+ clear error;
+ ELSE out (command);
+ out (" ");
+ FI;
+
+ . is box cmd :
+ scan (command);
+ next symbol (symbol, symbol type);
+ (symbol type = tag type) CAND (box cmds CONTAINS symbol)
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ move to (0, y pos);
+ line;
+ read ps input (ps input, 0, "");
+
+
+. x steps : param1
+. y steps : param2
+
+.
+ move :
+ move to (x pos, y pos);
+
+.
+ draw :
+ IF y steps <> 0 COR x steps < 0 COR linetype <> underline linetype
+ THEN stop
+ ELSE IF underline no <> font no THEN out ("lu ") FI;
+ out (x steps);
+ out ("ul ");
+ FI;
+
+
+. modification : param1
+.
+ on :
+ IF on string (modification) <> ""
+ THEN out (on string (modification));
+ out (" ");
+ ELSE stop
+ FI
+
+.
+ off :
+ IF off string (modification) <> ""
+ THEN out (off string (modification));
+ out (" ");
+ ELSE stop
+ FI
+
+
+. font nr : param1
+.
+ type :
+ font no := font nr;
+ out (fontstring (font nr));
+ out (" /af exch def af setfont ");
+
+END PROC execute;
+
+
+PROC move to (INT CONST x, y) :
+
+ out (x); out ("xs ");
+ out (paper length - y); out ("ys moveto ");
+
+END PROC move to;
+
+
+PROC line : out (""13""10"") END PROC line;
+
+PROC outline (TEXT CONST string) : out (string); out (""13""10"") END PROC outline;
+
+PROC out (INT CONST value) : out (text (value)); out (" ") END PROC out;
+
+PROC out (REAL CONST value) : out (text (value)); out (" ") END PROC out;
+
+
+PROC load positioning procs :
+
+ out ("/xs {"); out (72.0 / 2.54 * x step conversion (1)); out ("mul} def ");
+ out ("/ys {"); out (72.0 / 2.54 * y step conversion (1)); out ("mul} def ");
+
+END PROC load positioning procs;
+
+
+PROC load underline procs :
+
+ out ("/ul {xs ut setlinewidth 0 up rmoveto dup gsave 0 rlineto stroke grestore up neg rmoveto} def ");
+ out ("/lu {af /FontMatrix get 3 get af /FontInfo get 2 copy /up 3 1 roll /UnderlinePosition get mul 3 mul def /ut 3 1 roll /UnderlineThickness get mul def} def ");
+
+END PROC load underline procs;
+
+
+PROC load italics procs :
+
+ out ("/iton {/m matrix def m 2 12 sin 12 cos div put af m makefont setfont} def ");
+ out ("/itoff {af setfont} def ");
+
+END PROC load italics procs;
+
+
+PROC load encoding :
+
+ out ("/reencsmalldict 12 dict def ");
+ out ("/ReEncodeSmall {reencsmalldict begin ");
+ out ("/newcodesandnames exch def /newfontname exch def /basefontname exch def ");
+ out ("/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def ");
+ out ("basefontdict {exch dup /FID ne {dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch newfont 3 1 roll put} ifelse} {pop pop} ifelse} forall ");
+ out ("newfont /FontName newfontname put newcodesandnames aload pop newcodesandnames length 2 idiv {newfont /Encoding get 3 1 roll put} repeat ");
+ out ("newfontname newfont definefont pop ");
+ out ("end} def ");
+ out ("/eumelencoding[10#128 /Ccedilla 10#129 /udieresis 10#128 /Ccedilla 10#129 /udieresis ");
+ out ("10#130 /eacute 10#131 /acircumflex 10#132 /adieresis 10#133 /agrave 10#134 /aring 10#135 /ccedilla 10#136 /ecircumflex 10#137 /edieresis 10#138 /egrave 10#139 /idieresis ");
+ out ("10#140 /icircumflex 10#141 /igrave 10#142 /Adieresis 10#143 /Aring 10#144 /Eacute 10#145 /ae 10#146 /AE 10#147 /ocircumflex 10#148 /odieresis 10#149 /ograve ");
+ out ("10#150 /ucircumflex 10#151 /ugrave 10#152 /ydieresis 10#153 /Odieresis 10#154 /Udieresis 10#155 /cent 10#156 /sterling 10#157 /yen 10#158 /currency 10#159 /florin ");
+ out ("10#160 /aacute 10#161 /iacute 10#162 /oacute 10#163 /uacute 10#164 /ntilde 10#165 /Ntilde 10#166 /ordfeminine 10#167 /ordmasculine 10#168 /questiondown 10#169 /quotedblleft ");
+ out ("10#170 /quotedblright 10#171 /guilsinglleft 10#172 /guilsinglright 10#173 /exclamdown 10#174 /guillemotleft 10#175 /guillemotright 10#176 /atilde 10#177 /otilde 10#178 /Oslash 10#179 /oslash ");
+ out ("10#180 /oe 10#181 /OE 10#182 /Agrave 10#183 /Atilde 10#184 /Otilde 10#185 /section 10#186 /daggerdbl 10#187 /dagger 10#188 /paragraph 10#189 /space ");
+ out ("10#190 /space 10#191 /space 10#192 /quotedblbase 10#193 /ellipsis 10#194 /perthousand 10#195 /bullet 10#196 /endash 10#197 /emdash 10#198 /space 10#199 /Aacute ");
+ out ("10#200 /Acircumflex 10#201 /Egrave 10#202 /Ecircumflex 10#203 /Edieresis 10#204 /Igrave 10#205 /Iacute 10#206 /Icircumflex 10#207 /Idieresis 10#208 /Ograve 10#209 /Oacute ");
+ out ("10#210 /Ocircumflex 10#211 /Scaron 10#212 /scaron 10#213 /Ugrave 10#214 /Adieresis 10#215 /Odieresis 10#216 /Udieresis 10#217 /adieresis 10#218 /odieresis 10#219 /udieresis ");
+ out ("10#220 /k 10#221 /hyphen 10#222 /numbersign 10#223 /space 10#224 /grave 10#225 /acute 10#226 /circumflex 10#227 /tilde 10#228 /dieresis 10#229 /ring ");
+ out ("10#230 /cedilla 10#231 /caron 10#232 /Lslash 10#233 /Oslash 10#234 /OE 10#235 /ordmasculine 10#236 /Uacute 10#237 /Ucircumflex 10#238 /Ydieresis 10#239 /germandbls ");
+ out ("10#240 /Zcaron 10#241 /zcaron 10#242 /fraction 10#243 /ae ");
+ out ("10#251 /germandbls 10#252 /section] def ");
+ out ("/Helvetica /EHelvetica eumelencoding ReEncodeSmall ");
+ out ("/Helvetica-Bold /EHelvetica-Bold eumelencoding ReEncodeSmall ");
+ out ("/Helvetica-Oblique /EHelvetica-Oblique eumelencoding ReEncodeSmall ");
+ out ("/Helvetica-BoldOblique /EHelvetica-BoldOblique eumelencoding ReEncodeSmall ");
+ out ("/Times-Roman /ETimes-Roman eumelencoding ReEncodeSmall ");
+ out ("/Times-Bold /ETimes-Bold eumelencoding ReEncodeSmall ");
+ out ("/Times-Italic /ETimes-Italic eumelencoding ReEncodeSmall ");
+ out ("/Times-BoldItalic /ETimes-BoldItalic eumelencoding ReEncodeSmall ");
+ out ("/Courier /ECourier eumelencoding ReEncodeSmall ");
+ out ("/Courier-Oblique /ECourier-Oblique eumelencoding ReEncodeSmall ");
+ out ("/Courier-BoldOblique /ECourier-BoldOblique eumelencoding ReEncodeSmall ");
+ out ("/Courier-Bold /ECourier-Bold eumelencoding ReEncodeSmall ");
+ line;
+
+END PROC load encoding;
+
+
+PROC read ps input (FILE VAR input file, INT CONST timeout, TEXT CONST ok) :
+
+ BOOL VAR was cr;
+ record := "";
+ was cr := FALSE;
+ char := incharety (timeout);
+ REP IF char = ""10"" CAND was cr
+ THEN put record;
+ was cr := FALSE;
+ ELIF char = ""13"" CAND NOT was cr
+ THEN was cr := TRUE;
+ ELSE IF was cr
+ THEN record CAT """13""";
+ was cr := FALSE;
+ FI;
+ IF char = ""4""
+ THEN IF record <> "" THEN put record FI;
+ putline (input file, "-- EOF --");
+ line (input file);
+ ELIF char >= " "
+ THEN record CAT char
+ ELIF char >= ""0""
+ THEN record CAT """";
+ record CAT text (code (char));
+ record CAT """";
+ ELSE IF record <> "" THEN put record FI;
+ LEAVE read ps input;
+ FI;
+ FI;
+ IF pos (ok, char) > 0
+ THEN IF record <> "" THEN put record FI;
+ LEAVE read ps input;
+ FI;
+ cat input (record, char);
+ IF char = "" THEN char := incharety (min (5, time out)) FI;
+ PER;
+
+ . put record :
+ putline (input file, record);
+ IF NOT is error CAND pos (record, "%%[ Error:") > 0
+ THEN errorstop (ps error, record) FI;
+ record := "";
+
+END PROC read ps input;
+
+
+PROC print error (TEXT CONST error message, INT CONST error line) :
+
+ REAL CONST pl := y size * 72.0 / 2.54,
+ ys := 56.69291,
+ xs := 51.02362,
+ h := 12.0;
+ REAL VAR x := xs, y := ys + h;
+ outline ("/Courier findfont 10 scalefont setfont");
+ move to x and y;
+ out ("(FEHLER : ");
+ out (error message);
+ IF error line > 0
+ THEN out (" in Zeile ");
+ out (error line);
+ FI;
+ outline (") show");
+ IF exists (ps input name)
+ THEN ps input := sequential file (input, ps input name);
+ y INCR 3.0 * h;
+ move to x and y;
+ outline ("(PostScript - Input :) show");
+ y INCR h;
+ WHILE NOT eof (ps input)
+ REP getline (ps input, record);
+ y INCR h;
+ move to x and y;
+ out ("(");
+ out (record);
+ outline (") show");
+ PER;
+ output (ps input);
+ FI;
+ outline ("showpage");
+ out (""4"");
+ read ps input (ps input, 18000, ""4"");
+
+ . move to x and y :
+ out (x); out (pl - y); out ("moveto ");
+
+END PROC print error;
+
+
+END PACKET apple laser writer printer;
+
+
+PACKET apple laserwriter box commands
+
+(**************************************************************************)
+(* *)
+(* Kommandos zum Zeichen von Boxen, Linien und Schraffuren *)
+(* für den Apple LaserWriter *)
+(* *)
+(* Autor : Rudolf Ruland *)
+(* Stand : 24.02.88 *)
+(**************************************************************************)
+
+ DEFINES line,
+ x line,
+ y line,
+
+ box,
+ box frame,
+ box shade,
+
+ cake,
+ cake frame,
+ cake shade,
+ :
+
+INT VAR x, y, h, w;
+
+WHILE highest entry (box commands) > 0
+ REP delete box command (name (box commands, highest entry (box commands))) PER;
+insert box command ("line");
+insert box command ("xline");
+insert box command ("yline");
+insert box command ("box");
+insert box command ("boxshade");
+insert box command ("boxframe");
+insert box command ("cake");
+insert box command ("cakeshade");
+insert box command ("cakeframe");
+
+
+PROC line (REAL CONST x offset, y offset, width, height, line width) :
+
+ IF line width > 0.0
+ THEN graph on (x offset, y offset, width, height);
+ out (text (line width / 300.0 * 72.0));
+ out (" setlinewidth ");
+ out (text (w));
+ out (" xs ");
+ out (text (-h));
+ out (" ys rlineto stroke ");
+ graph off;
+ FI;
+
+END PROC line;
+
+PROC x line (REAL CONST x offset, y offset, width, line width) :
+
+ line (x offset, y offset, width, 0.0, line width);
+
+END PROC x line;
+
+PROC y line (REAL CONST x offset, y offset, height, line width) :
+
+ line (x offset, y offset, 0.0, height, line width);
+
+END PROC y line;
+
+
+PROC box (REAL CONST x offset, y offset, width, height, line width, pattern):
+
+ box shade (x offset, y offset, width, height, pattern);
+ box frame (x offset, y offset, width, height, line width);
+
+END PROC box;
+
+
+PROC box shade (REAL CONST x offset, y offset, width, height, pattern) :
+
+ graph on (x offset, y offset, width, height);
+ box path;
+ out (text (pattern));
+ out (" setgray fill ");
+ graph off;
+
+END PROC box shade;
+
+
+PROC box frame (REAL CONST x offset, y offset, width, height, line width) :
+
+ IF line width <> 0.0
+ THEN graph on (x offset, y offset, width, height);
+ box path;
+ out (text (line width / 300.0 * 72.0));
+ out (" setlinewidth stroke ");
+ graph off;
+ FI;
+
+END PROC box frame;
+
+
+PROC box path :
+
+ out (text (w));
+ out (" xs 0 rlineto 0 ");
+ out (text (-h));
+ out (" ys rlineto ");
+ out (text (-w));
+ out (" xs 0 rlineto closepath ");
+
+END PROC box path;
+
+
+
+PROC cake (REAL CONST x offset, y offset, radius, start angle, sweep angle, line width, pattern) :
+
+ cake shade (x offset, y offset, radius, start angle, sweep angle, pattern);
+ cake frame (x offset, y offset, radius, start angle, sweep angle, line width);
+
+END PROC cake;
+
+
+PROC cake shade (REAL CONST x offset, y offset, radius, start angle, sweep angle, pattern) :
+
+ graph on (x offset, y offset, radius, 0.0);
+ cake path (start angle, sweep angle);
+ out (text (pattern));
+ out (" setgray fill ");
+ graph off;
+
+END PROC cake shade;
+
+
+PROC cake frame (REAL CONST x offset, y offset, radius, start angle, sweep angle, line width) :
+
+
+ IF line width <> 0.0
+ THEN graph on (x offset, y offset, radius, 0.0);
+ cake path (start angle, sweep angle);
+ out (text (line width / 300.0 * 72.0));
+ out (" setlinewidth stroke ");
+ graph off;
+ FI;
+
+END PROC cake frame;
+
+
+PROC cake path (REAL CONST start angle, sweep angle) :
+
+ out (text (start angle));
+ out (" rotate ");
+ out ("currentpoint ");
+ out (text (w));
+ out (" xs 0 ");
+ out (text (sweep angle));
+ out (" ");
+ IF sweep angle < 360.0
+ THEN out ("2 setlinejoin arc closepath ");
+ ELSE out (text (w));
+ out (" xs 0 rmoveto arc ");
+ FI;
+
+END PROC cake path;
+
+
+PROC graph on (REAL CONST x offset, y offset, width, height) :
+
+ x := x step conversion (x offset);
+ y := y step conversion (y offset);
+ w := x step conversion (width);
+ h := y step conversion (height);
+ out ("gsave ");
+ out (text (x));
+ out (" xs ");
+ out (text (-y));
+ out (" ys rmoveto ");
+
+END PROC graph on;
+
+PROC graph off :
+
+ out ("grestore ");
+
+END PROC graph off;
+
+
+END PACKET apple laserwriter box commands;
+
+
+
+#page#
+(******************************************************************)
+(*** ***)
+(*** Generierung des Printers ***)
+(*** ***)
+(******************************************************************)
+(*
+LET up = ""3""13""5"";
+*)
+LET printer name = "printer.apple.laserwriter";
+TEXT VAR fonttab name := "fonttab.apple.laserwriter";
+
+BOOL CONST multi user := (pcb (9) AND 255) <> 1;
+
+INT VAR pr channel;
+TEXT VAR buffer;
+
+command dialogue (TRUE);
+IF NOT multi user
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+FI;
+ask for print channel;
+load font table;
+forget (printer name, quiet);
+IF multi user THEN generate printer spool FI;
+command dialogue (TRUE);
+check on;
+.
+ ask for print channel :
+ line;
+ put ("gib Druckerkanal:");
+ get (pr channel);
+ do ("serverchannel(" + text (pr channel) + ")" ) ;
+ line;
+.
+ load font table :
+ IF NOT exists (fonttab name)
+ THEN REP line (2);
+ putline ("Bitte Archiv mit der Fonttabelle """ +
+ fonttab name + """ einlegen!");
+ line;
+ UNTIL yes ("Archiv eingelegt") PER;
+ reserve archive;
+ fetch (fonttab name, archive);
+ release (archive);
+ FI;
+ font table (fonttab name);
+ IF multi user
+ THEN command dialogue (FALSE);
+ do ("save(""" + font tab name + """,task(""configurator""))")
+ FI;
+ forget (fonttab name, quiet);
+
+ . reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop;
+
+. generate printer spool :
+ eumel must advertise;
+ cursor (1, 12);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (4);
+ putline ("Generierung beendet, weiter mit 'SV'");
+ generate printer server;
+ do (buffer);
+
+. generate printer server :
+ buffer := "break (quiet);";
+ buffer CAT "spool manager (PROC printer);";
+ buffer CAT "INT VAR reply; DATASPACE VAR ds; FILE VAR file;";
+ buffer CAT "PROC printer:";
+ buffer CAT " disable stop;";
+ buffer CAT " continue (server channel);";
+ buffer CAT " check error (error message);";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " REP forget (ds);";
+ buffer CAT " execute print;";
+ buffer CAT " IF is error AND online THEN clear error; print error (error message, 0); clear error FI;";
+ buffer CAT " PER;";
+ buffer CAT "END PROC printer;";
+ buffer CAT "PROC execute print:";
+ buffer CAT " LET ack = 0, fetch code = 11, file type = 1003;";
+ buffer CAT " enable stop;";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " call (father, fetch code, ds, reply);";
+ buffer CAT " IF reply = ack CAND type (ds) = file type";
+ buffer CAT " THEN file := sequential file (input, ds);";
+ buffer CAT " print (file,";
+ buffer CAT " PROC (INT CONST, INT VAR, INT VAR) open,";
+ buffer CAT " PROC (INT CONST, INT CONST) close,";
+ buffer CAT " PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC execute print;";
+ buffer CAT "PROC check error(TEXT CONST message):";
+ buffer CAT " IF is error";
+ buffer CAT " THEN clear error; rename myself (message);";
+ buffer CAT " IF is error THEN end(myself) FI;";
+ buffer CAT " pause (9000); end(myself);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC check error;";
+
diff --git a/printer/laser/printer.canon.lbp-8 b/printer/laser/printer.canon.lbp-8
new file mode 100644
index 0000000..4dfe9f8
--- /dev/null
+++ b/printer/laser/printer.canon.lbp-8
@@ -0,0 +1,327 @@
+PACKET canon lbp 8 printer
+
+(*************************************************************************)
+(* Stand : 29.07.86 *)
+(* CANON LBP-8 A1/A2 Version : 4 *)
+(* Autor : Rudolf Ruland *)
+(*************************************************************************)
+
+
+ DEFINES open,
+ close,
+ execute,
+
+ paper size :
+
+LET underline = 1,
+(* bold = 2,
+ italics = 4,
+ reverse = 8,
+
+ underline linetype = 1, *)
+
+ csi = ""155"",
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1,
+ c write cmd = 2,
+ c carriage return = 3,
+ c move = 4,
+ c draw = 5,
+ c on = 6,
+ c off = 7,
+ c type = 8;
+
+REAL VAR x size, y size;
+BOOL VAR is underline;
+
+(*********************************************************************)
+
+paper size (21.0, 29.7);
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ is underline := FALSE;
+ x steps := x step conversion ( x size - 0.8043333 );
+ y steps := y step conversion ( y size - 0.508);
+ out (""27":"27"P"13""); (* Enable - Prop.Type *)
+ out (""27";"27"<"155"11h"); (* Reset des Druckers *)
+ out (""27"(B"); (* ACSII-Zeichensatz *)
+ out (""155"1;4 D"); (* Char.Satz 1 = PICA *)
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ x start := x step conversion (0.4064 );
+ y start := y step conversion (0.508 + 0.6345);
+ out (""13"");
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+ OTHERWISE : put (param1)
+END SELECT;
+
+.
+ close document :
+ (* out(""155"0q") von Standard-Cassette Papier holen *)
+
+(*. remaining y steps : param1*)
+.
+ close page :
+ out (""13""12"");
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ INT VAR new from, new to;
+ IF is underline
+ THEN IF pos (string, " ", from, from) <> 0
+ THEN out ("_");
+ new from := from + 1;
+ ELSE new from := from;
+ FI;
+ IF from < to AND pos (string, " ", to, to) <> 0
+ THEN new to := to - 1;
+ ELSE new to := to;
+ FI;
+ out subtext (string, new from, new to);
+ IF to <> new to THEN out ("_") FI;
+ ELSE out subtext (string, from, to)
+ FI;
+
+.
+ write cmd :
+ out subtext (string, from, to)
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ out (""13"")
+
+
+. x steps : param1
+. y steps : param2
+.
+ move :
+ IF x steps > 0
+ THEN out (csi); out (text ( x steps)); out ("a")
+ ELIF x steps < 0
+ THEN out (csi); out (text (- x steps)); out ("j")
+ FI;
+ IF y steps > 0
+ THEN out (csi); out (text ( y steps)); out ("e")
+ ELIF y steps < 0
+ THEN out (csi); out (text (- y steps)); out ("k")
+ FI;
+
+.
+ draw :
+ stop
+
+
+. modification : param1
+.
+ on :
+ IF on string (modification) <> ""
+ THEN out (on string (modification));
+ IF modification = underline THEN is underline := TRUE FI;
+ ELSE stop
+ FI
+
+.
+ off :
+ IF off string (modification) <> ""
+ THEN out (off string (modification));
+ IF modification = underline THEN is underline := FALSE FI;
+ ELSE stop
+ FI
+
+
+. font nr : param1
+.
+ type :
+ out (font string (font nr));
+
+END PROC execute;
+
+
+END PACKET canon lbp 8 printer;
+
+
+
+#page#
+(******************************************************************)
+(*** ***)
+(*** Generierung des Printers ***)
+(*** ***)
+(******************************************************************)
+
+LET printer name = "printer.canon.lbp-8";
+
+TEXT VAR fonttab name := "fonttab.canon.lbp-8";
+
+BOOL CONST multi user := (pcb (9) AND 255) <> 1;
+
+INT VAR pr channel;
+TEXT VAR buffer;
+
+command dialogue (TRUE);
+IF NOT multi user
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+FI;
+ask for print channel;
+ask for font cartridge;
+load font table;
+forget (printer name, quiet);
+IF multi user THEN generate printer spool FI;
+check on;
+.
+ ask for print channel :
+ line;
+ put ("gib Druckerkanal:");
+ get (pr channel);
+ do ("serverchannel(" + text (pr channel) + ")" ) ;
+ line;
+.
+ ask for font cartridge :
+.
+ load font table :
+ IF NOT exists (fonttab name)
+ THEN command dialogue (TRUE);
+ REP line (2);
+ putline ("Bitte Archiv mit der Fonttabelle """ +
+ fonttab name + """ einlegen!");
+ line;
+ UNTIL yes ("Archiv eingelegt") PER;
+ reserve archive;
+ fetch (fonttab name, archive);
+ release (archive);
+ FI;
+ font table (fonttab name);
+ IF multi user
+ THEN command dialogue (FALSE);
+ do ("save(""" + font tab name + """,task(""configurator""))")
+ FI;
+ forget (fonttab name, quiet);
+
+ . reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop;
+
+. generate printer spool :
+ eumel must advertise;
+ cursor (1, 12);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (4);
+ putline ("Generierung beendet, weiter mit 'SV'");
+ generate printer server;
+ do (buffer);
+
+. generate printer server :
+ buffer := "break (quiet);";
+ buffer CAT "spool manager (PROC printer);";
+ buffer CAT "INT VAR reply; DATASPACE VAR ds; FILE VAR file;";
+ buffer CAT "PROC printer:";
+ buffer CAT " disable stop;";
+ buffer CAT " continue (server channel);";
+ buffer CAT " check error (error message);";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " REP forget (ds);";
+ buffer CAT " execute print;";
+ buffer CAT " IF is error AND online THEN put error; clear error; FI;";
+ buffer CAT " PER;";
+ buffer CAT "END PROC printer;";
+ buffer CAT "PROC execute print:";
+ buffer CAT " LET ack = 0, fetch code = 11, file type = 1003;";
+ buffer CAT " enable stop;";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " call (father, fetch code, ds, reply);";
+ buffer CAT " IF reply = ack CAND type (ds) = file type";
+ buffer CAT " THEN file := sequential file (input, ds);";
+ buffer CAT " print (file,";
+ buffer CAT " PROC (INT CONST, INT VAR, INT VAR) open,";
+ buffer CAT " PROC (INT CONST, INT CONST) close,";
+ buffer CAT " PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC execute print;";
+ buffer CAT "PROC check error(TEXT CONST message):";
+ buffer CAT " IF is error";
+ buffer CAT " THEN clear error; rename myself (message);";
+ buffer CAT " IF is error THEN end(myself) FI;";
+ buffer CAT " pause (9000); end(myself);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC check error;";
+
diff --git a/printer/laser/printer.epson.sq b/printer/laser/printer.epson.sq
new file mode 100644
index 0000000..63e474f
--- /dev/null
+++ b/printer/laser/printer.epson.sq
@@ -0,0 +1,585 @@
+PACKET epson sq printer
+
+(**************************************************************************)
+(* Stand : 03.12.86 *)
+(* EPSON SQ-2500 Version : 4 *)
+(* Autor : Rudolf Ruland *)
+(**************************************************************************)
+
+ DEFINES open,
+ close,
+ execute,
+
+ paper size,
+ (* paper feed, *) (* <-- nicht getestet *)
+ std typeface,
+ std quality:
+
+LET
+(* underline = 1,
+ bold = 2,
+ italics = 4,
+ reverse = 8, *)
+
+ underline linetype = 1,
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1, cmd draft = 1,
+ c write cmd = 2, cmd nlq = 2,
+ c carriage return = 3, cmd roman = 3,
+ c move = 4, cmd sansserif = 4,
+ c draw = 5, cmd courier = 5,
+ c on = 6, cmd prestige = 6,
+ c off = 7, cmd script = 7,
+ c type = 8;
+
+INT VAR font nr, x rest, high, low, font bits, modification bits, blank pitch,
+ factor 1, factor 2, steps;
+BOOL VAR is nlq, sheet feed;
+REAL VAR x size, y size;
+TEXT VAR std quality name, std typeface name, buffer, symbol, font text;
+THESAURUS VAR commands := empty thesaurus;
+
+insert (commands, "draft");
+insert (commands, "nlq");
+insert (commands, "roman");
+insert (commands, "sansserif");
+insert (commands, "courier");
+insert (commands, "prestige");
+insert (commands, "script");
+
+. is prop : bit (font bits, 1)
+. is double : bit (font bits, 5)
+.;
+
+(*********************************************************************)
+
+paper size (13.6 * 2.54, 12.0 * 2.54);
+paper size ( 8.0 * 2.54, 12.0 * 2.54);
+paper feed ("tractor");
+std typeface ("roman");
+std quality ("draft");
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+
+PROC paper feed (TEXT CONST paper) :
+
+ IF pos (paper, "sheet") <> 0
+ THEN sheet feed := TRUE;
+ ELIF pos (paper, "tractor") <> 0
+ THEN sheet feed := FALSE;
+ ELSE errorstop ("unzulaessige Papiereinfuehrung")
+ FI;
+
+END PROC paper feed;
+
+TEXT PROC paper feed :
+
+ IF sheet feed
+ THEN "sheet"
+ ELSE "tractor"
+ FI
+
+END PROC paper feed;
+
+
+PROC std typeface (TEXT CONST typeface) :
+
+ buffer := typeface;
+ changeall (buffer, " ", "");
+ IF link (commands, buffer) >= cmd roman
+ THEN std typeface name := buffer
+ ELSE errorstop ("unzulaessige Schriftart")
+ FI;
+
+END PROC std typeface;
+
+TEXT PROC std typeface : std typeface name END PROC std typeface;
+
+
+PROC std quality (TEXT CONST quality) :
+
+ IF quality = "nlq" OR quality = "draft"
+ THEN std quality name := quality;
+ ELSE errorstop ("unzulaessige Betriebsart")
+ FI;
+
+END PROC std quality;
+
+TEXT PROC std quality : std quality name END PROC std quality;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ y steps := (y steps DIV 30) * 30;
+ modification bits := 0;
+ out (""24""27""64""); (* Reset des Druckers *)
+ out (""27"C" + code (y steps DIV 30)); (* Formularlaenge *)
+ out (""27"x"0""); (* Entwurfsqualität *)
+ out (""27"R"0""); (* Amerikanischer Zeichensatz *)
+ out (""27"t"1""27"6"); (* Erweiterung des Zeichensatzes *)
+ IF sheet feed THEN out (""27""25"4") FI; (* Sheetmode ein *)
+ IF pos (material, "roman") <> 0
+ THEN out (""27"k"0"")
+ ELIF pos (material, "sansserif") <> 0
+ THEN out (""27"k"1"")
+ ELIF pos (material, "courier") <> 0
+ THEN out (""27"k"2"")
+ ELIF pos (material, "prestige") <> 0
+ THEN out (""27"k"3"")
+ ELIF pos (material, "script") <> 0
+ THEN out (""27"k"4"")
+ ELSE out (""27"k" + code (link (commands, std typeface) - cmd roman));
+ FI;
+ IF pos (material, "nlq") <> 0
+ THEN is nlq := TRUE;
+ ELIF pos (material, "draft") <> 0
+ THEN is nlq := FALSE;
+ ELSE is nlq := std quality = "nlq"
+ FI;
+
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ x start := 0;
+ IF sheet feed
+ THEN y start := y step conversion (8.466667e-1) (* 2/6 Inch *)
+ ELSE y start := 0;
+ FI;
+ x rest := 0;
+ out (""13"");
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+END SELECT;
+
+.
+ close document :
+
+
+. remaining y steps : param1
+.
+ close page :
+ IF sheet feed
+ THEN out (""27""25"R")
+ ELIF remaining y steps > 0
+ THEN out (""12"")
+ FI;
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ out subtext (string, from, to)
+
+.
+ write cmd :
+ buffer := subtext (string, from, to);
+ scan (buffer);
+ next symbol (symbol);
+ SELECT link (commands, symbol) OF
+ CASE cmd draft : IF is nlq THEN switch to draft FI; is nlq := FALSE;
+ CASE cmd nlq : IF NOT is nlq THEN switch to nlq FI; is nlq := TRUE;
+ CASE cmd roman : out (""27"k"0"")
+ CASE cmd sansserif : out (""27"k"1"")
+ CASE cmd courier : out (""27"k"2"")
+ CASE cmd prestige : out (""27"k"3"")
+ CASE cmd script : out (""27"k"4"")
+ OTHERWISE : out (buffer);
+ END SELECT;
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ x rest := 0;
+ out (""13"");
+
+
+. x steps : param1
+. y steps : param2
+.
+ move :
+ IF x steps < 0 OR y steps < 0
+ THEN stop
+ ELSE IF x steps > 0 THEN x move FI;
+ IF y steps > 0 THEN y move FI;
+ FI;
+
+ . x move :
+ x rest INCR x steps;
+ IF not is underline
+ THEN simple x move
+ ELSE underline x move
+ FI;
+
+ . not is underline :
+ NOT bit (modification bits, 7)
+
+ . simple x move :
+ high := x rest DIV factor 1;
+ x rest := x rest MOD factor 1;
+ out (""27"\");
+ out (code (high MOD 256));
+ out (code (high DIV 256));
+
+ . underline x move :
+ high := x rest DIV factor 2;
+ x rest := x rest MOD factor 2;
+ IF high < blank pitch
+ THEN stop
+ ELSE low := high MOD 127;
+ high := high DIV 127;
+ IF low >= blank pitch
+ THEN low DECR blankpitch;
+ ELSE high DECR 1;
+ low DECR (blankpitch - 127);
+ FI;
+ IF high > 0
+ THEN out (""27" ");
+ out (code (127 - blankpitch));
+ high TIMESOUT " ";
+ FI;
+ out (""27" ");
+ out (code (low));
+ out (" "27" "0"");
+ FI;
+
+ . y move :
+ low := y steps MOD 255;
+ high := y steps DIV 255;
+ IF high > 0 THEN high TIMESOUT (""27"J"255"") FI;
+ IF low > 0 THEN out (""27"J"); out (code (low)) FI;
+.
+ draw :
+ IF x steps < 0 OR y steps <> 0 OR linetype <> underline linetype
+ THEN stop
+ ELIF x steps > 0
+ THEN x draw
+ FI;
+
+ . x draw :
+ x rest INCR x steps;
+ steps := x rest DIV 6;
+ x rest := x rest MOD 6;
+ IF steps > 0
+ THEN low := steps MOD 256;
+ high := steps DIV 256;
+ out (""27"L");
+ out (code (low));
+ out (code (high));
+ steps TIMESOUT ""1"";
+ FI;
+
+
+. modification : param1
+.
+ on :
+ buffer := on string (modification);
+ IF buffer <> ""
+ THEN modification bits := modification bits OR code (buffer);
+ switch to font;
+ ELSE stop
+ FI
+
+.
+ off :
+ buffer := off string (modification);
+ IF buffer <> ""
+ THEN modification bits := modification bits XOR code (buffer);
+ switch to font;
+ ELSE stop
+ FI
+
+.
+ type :
+ font nr := param1;
+ buffer := font string (font nr);
+ font bits := code (buffer SUB 1);
+ font text := subtext (buffer, 2);
+ IF is prop
+ THEN factor 1 := 4;
+ factor 2 := 4;
+ ELSE factor 1 := 6;
+ factor 2 := 6;
+ FI;
+ IF is double THEN factor 2 INCR factor 2 FI;
+ blank pitch := char pitch (font nr, " ") DIV factor 2;
+ switch to font;
+ IF is nlq THEN switch to nlq FI;
+
+END PROC execute;
+
+
+PROC switch to font :
+
+ out (""27"!");
+ out (code (font bits OR modification bits));
+ out (font text);
+
+END PROC switch to font;
+
+
+PROC switch to nlq :
+
+ IF NOT is prop
+ THEN factor 1 := 4;
+ factor 2 := (4 * factor 2) DIV 6;
+ blankpitch := (6 * blankpitch) DIV 4;
+ out (""27"x"1"");
+ ELSE out (""27"x"0"");
+ FI;
+
+END PROC switch to nlq;
+
+
+PROC switch to draft :
+
+ IF NOT is prop
+ THEN factor 1 := 6;
+ factor 2 := (6 * factor 2) DIV 4;
+ blankpitch := (4 * blankpitch) DIV 6;
+ out (""27"x"0"");
+ FI;
+
+END PROC switch to draft;
+
+
+END PACKET epson sq printer;
+
+
+
+#page#
+(******************************************************************)
+(*** ***)
+(*** Generierung des Printers ***)
+(*** ***)
+(******************************************************************)
+
+LET printer name = "printer.epson.sq",
+ up = ""3""13""5"";
+
+TEXT VAR fonttab name := "fonttab.epson.sq";
+
+BOOL CONST multi user := (pcb (9) AND 255) <> 1;
+
+INT VAR pr channel;
+TEXT VAR buffer;
+
+command dialogue (TRUE);
+IF NOT multi user
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+FI;
+ask for print channel;
+ask for paper format;
+ask for typeface;
+ask for print quality;
+load font table;
+forget (printer name, quiet);
+IF multi user THEN generate printer spool FI;
+check on;
+.
+ ask for print channel :
+ line;
+ put ("gib Druckerkanal:");
+ get (pr channel);
+ do ("serverchannel(" + text (pr channel) + ")" ) ;
+ line;
+.
+ ask for paper format :
+ SELECT paper format OF
+ CASE 1 : papersize ( 8.0 * 2.54, 12.0 * 2.54)
+ CASE 2 : papersize (13.6 * 2.54, 12.0 * 2.54)
+ CASE 3 : papersize (21.0, 29.7)
+ END SELECT
+
+ . paper format :
+ line;
+ REP out (up);
+ IF yes ("Papierformat : endlos, 8 Zoll breit")
+ THEN LEAVE paper format WITH 1 FI;
+ out (up);
+ IF yes ("Papierformat : endlos, 13.6 Zoll breit")
+ THEN LEAVE paper format WITH 2 FI;
+ out (up);
+ IF yes ("Papierformat : DINA 4")
+ THEN LEAVE paper format WITH 3 FI;
+ PER;
+ 0
+.
+ ask for typeface :
+ line;
+ std typeface (typeface)
+
+ . typeface :
+ REP out (up);
+ IF yes ("standardmäßige Schriftart : roman")
+ THEN LEAVE typeface WITH "roman" FI;
+ out (up);
+ IF yes ("standardmäßige Schriftart : sansserif")
+ THEN LEAVE typeface WITH "sansserif" FI;
+ out (up);
+ IF yes ("standardmäßige Schriftart : courier")
+ THEN LEAVE typeface WITH "courier" FI;
+ out (up);
+ IF yes ("standardmäßige Schriftart : prestige")
+ THEN LEAVE typeface WITH "prestige" FI;
+ out (up);
+ IF yes ("standardmäßige Schriftart : script")
+ THEN LEAVE typeface WITH "script" FI;
+ PER;
+ ""
+.
+ ask for print quality :
+ line;
+ std quality (quality);
+
+ . quality :
+ REP out (up);
+ IF yes ("standardmäßige Druckqualität : draft quality")
+ THEN LEAVE quality WITH "draft" FI;
+ out (up);
+ IF yes ("standardmäßige Druckqualität : near letter quality")
+ THEN LEAVE quality WITH "nlq" FI;
+ PER;
+ ""
+.
+ load font table :
+ IF NOT exists (fonttab name)
+ THEN command dialogue (TRUE);
+ REP line (2);
+ putline ("Bitte Archiv mit der Fonttabelle """ +
+ fonttab name + """ einlegen!");
+ line;
+ UNTIL yes ("Archiv eingelegt") PER;
+ reserve archive;
+ fetch (fonttab name, archive);
+ release (archive);
+ FI;
+ font table (fonttab name);
+ IF multi user
+ THEN command dialogue (FALSE);
+ do ("save(""" + font tab name + """,task(""configurator""))")
+ FI;
+ forget (fonttab name, quiet);
+
+ . reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop;
+
+. generate printer spool :
+ eumel must advertise;
+ cursor (1, 12);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (4);
+ putline ("Generierung beendet, weiter mit 'SV'");
+ generate printer server;
+ do (buffer);
+
+. generate printer server :
+ buffer := "break (quiet);";
+ buffer CAT "spool manager (PROC printer);";
+ buffer CAT "INT VAR reply; DATASPACE VAR ds; FILE VAR file;";
+ buffer CAT "PROC printer:";
+ buffer CAT " disable stop;";
+ buffer CAT " continue (server channel);";
+ buffer CAT " check error (error message);";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " REP forget (ds);";
+ buffer CAT " execute print;";
+ buffer CAT " IF is error AND online THEN put error; clear error; FI;";
+ buffer CAT " PER;";
+ buffer CAT "END PROC printer;";
+ buffer CAT "PROC execute print:";
+ buffer CAT " LET ack = 0, fetch code = 11, file type = 1003;";
+ buffer CAT " enable stop;";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " call (father, fetch code, ds, reply);";
+ buffer CAT " IF reply = ack CAND type (ds) = file type";
+ buffer CAT " THEN file := sequential file (input, ds);";
+ buffer CAT " print (file,";
+ buffer CAT " PROC (INT CONST, INT VAR, INT VAR) open,";
+ buffer CAT " PROC (INT CONST, INT CONST) close,";
+ buffer CAT " PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC execute print;";
+ buffer CAT "PROC check error(TEXT CONST message):";
+ buffer CAT " IF is error";
+ buffer CAT " THEN clear error; rename myself (message);";
+ buffer CAT " IF is error THEN end(myself) FI;";
+ buffer CAT " pause (9000); end(myself);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC check error;";
+
diff --git a/printer/laser/printer.hp.laserjet b/printer/laser/printer.hp.laserjet
new file mode 100644
index 0000000..152ee8e
--- /dev/null
+++ b/printer/laser/printer.hp.laserjet
@@ -0,0 +1,417 @@
+PACKET hp laserjet printer
+
+(**************************************************************************)
+(* Stand : 03.02.88 *)
+(* HP 2686A LaserJet / LaserJet+ Verison : 4 *)
+(* Autor : Rudolf Ruland *)
+(**************************************************************************)
+
+ DEFINES open,
+ close,
+ execute,
+
+ paper size,
+ printer type :
+
+LET
+(* underline = 1,
+ bold = 2,
+ italics = 4,
+ reverse = 8,
+
+ underline linetype = 1, *)
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1,
+ c write cmd = 2,
+ c carriage return = 3,
+ c move = 4,
+ c draw = 5,
+ c on = 6,
+ c off = 7,
+ c type = 8;
+
+INT VAR abs x pos
+REAL VAR x size, y size;
+BOOL VAR is laser jet plus, is landscape;
+
+(*********************************************************************)
+
+paper size (21.0, 29.7);
+printer type ("LaserJet");
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+PROC printer type (TEXT CONST type) :
+
+ is laser jet plus := pos (type, "+") <> 0
+
+END PROC printer type;
+
+TEXT PROC printer type :
+
+ IF is laser jet plus
+ THEN "LaserJet+"
+ ELSE "LaserJet"
+ FI
+
+END PROC printer type;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ out (""27"E"); (* Reset des Druckers *)
+ out (""27"&s1C"); (* 'end of line wrap' aus *)
+ out (""27"&l0L"); (* 'perforation skip' aus *)
+ out (""27"&l1X"); (* eine Kopie *)
+ out (""27"&l1H"); (* upper tray *)
+ IF pos (material, "landscape") > 0 OR pos (material, "quer") > 0
+ THEN is landscape := TRUE;
+ x steps := x step conversion ( y size );
+ y steps := y step conversion ( x size );
+ out (""27"&l1O");
+ ELSE is landscape := FALSE;
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ FI;
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ IF is landscape
+ THEN x start := x step conversion (0.508); (* 0.200*2.54 *)
+ y start := y step conversion (1.693333); (* 0.500*2.54 + 2.54/6.0 *)
+ ELSE x start := x step conversion (0.39878); (* 0.157*2.54 *)
+ y start := y step conversion (1.693333); (* 0.500*2.54 + 2.54/6.0 *)
+ FI;
+ IF pos (material, "lower tray") > 0 COR pos (material, "lowertray") > 0
+ THEN out (""27"&l4H");
+ ELIF pos (material, "tray") > 0 COR pos (material, "upper tray") > 0 COR pos (material, "uppertray") > 0
+ THEN out (""27"&l1H");
+ ELIF pos (material, "manual") > 0
+ THEN out (""27"&l2H");
+ ELIF pos (material, "envelope") > 0
+ THEN out (""27"&l3H");
+ FI;
+ IF material contains a number
+ THEN out (""27"&l" + text (number) + "X");
+ FI;
+ out (""13"");
+
+ . material contains a number :
+ INT VAR number := pos (material, "0", "9", 1);
+ IF number = 0
+ THEN FALSE
+ ELSE number := max (1, int (subtext (material, number, number + 1)));
+ TRUE
+ FI
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+ OTHERWISE : put (param1)
+END SELECT;
+
+.
+ close document :
+
+
+(*. remaining y steps : param1*)
+.
+ close page :
+ out (""12"")
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ out subtext (string, from, to)
+
+.
+ write cmd :
+ out subtext (string, from, to)
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ out (""13"")
+
+
+. x steps : param1
+. y steps : param2
+.
+ move :
+ IF x steps <> 0
+ THEN x move
+ ELIF y steps > 0
+ THEN out (""27"&a+" + text (y steps) + "V");
+ ELIF y steps < 0
+ THEN out (""27"&a" + text (y steps) + "V");
+ FI;
+
+ . x move :
+ IF is laser jet plus
+ THEN laser jet plus x move
+ ELSE laser jet x move
+ FI;
+
+ . laser jet plus x move :
+ IF x steps >= 0
+ THEN out (""27"*p+" + text (x steps) + "X");
+ ELSE out (""27"*p" + text (x steps) + "X");
+ FI;
+
+ . laser jet x move :
+ abs x pos := x pos;
+ IF abs x pos >= 0
+ THEN out (""27"&a");
+ out (text ((abs x pos DIV 5) * 12 + ((abs x pos MOD 5) * 12 + 4) DIV 5));
+ out ("H");
+ ELSE stop
+ FI;
+
+.
+ draw :
+ stop
+
+
+. modification : param1
+.
+ on :
+ IF on string (modification) <> ""
+ THEN out (on string (modification))
+ ELSE stop
+ FI
+
+.
+ off :
+ IF off string (modification) <> ""
+ THEN out (off string (modification))
+ ELSE stop
+ FI
+
+
+. font nr : param1
+.
+ type :
+ out (font string (font nr));
+
+END PROC execute;
+
+
+END PACKET hp laserjet printer;
+
+
+#page#
+(******************************************************************)
+(*** ***)
+(*** Generierung des Printers ***)
+(*** ***)
+(******************************************************************)
+
+LET printer name = "printer.hp.laserjet",
+ up = ""3""13""5"";
+
+TEXT VAR fonttab name := "fonttab.hp.laserjet";
+
+BOOL CONST multi user := (pcb (9) AND 255) <> 1;
+
+INT VAR pr channel;
+TEXT VAR buffer;
+
+command dialogue (TRUE);
+IF NOT multi user
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+FI;
+ask for print channel;
+ask for printer type;
+load font table;
+forget (printer name, quiet);
+IF multi user THEN generate printer spool FI;
+check on;
+.
+ ask for print channel :
+ line;
+ put ("gib Druckerkanal:");
+ get (pr channel);
+ do ("serverchannel(" + text (pr channel) + ")" ) ;
+ line;
+.
+ ask for printer type :
+ printer type (laser jet);
+
+ . laser jet :
+ line;
+ REP out (up);
+ IF yes ("Druckertyp : HP LaserJet")
+ THEN LEAVE laser jet WITH "LaserJet" FI;
+ out (up);
+ IF yes ("Druckertyp : HP LaserJet+")
+ THEN LEAVE laser jet WITH "LaserJet+" FI;
+ PER;
+ ""
+.
+ load font table :
+ line (2);
+ write (""13""4"");
+ putline ("Die Fonttabelle """ + fonttab name +
+ """ enthält die Schrifttypen der");
+ putline ("Font Cartriges:");
+ putline (" 92286A Courier 1");
+ putline (" 92286C International 1");
+ putline (" 92286D Prestige Elite");
+ putline (" 92286E Letter Gothic");
+ putline (" 92286F TMS Proportional 2");
+ putline (" 92286L Courier P&L");
+ putline (" 92286M Prestige Elite P&L");
+ putline (" 92286N Letter Gothic P&L");
+ putline (" 92286P TMS RMN P&L");
+ putline (" 92286Q Memo 1");
+ line;
+ putline ("Für ein korrektes Druckbild dürfen immer nur die Schrifttypen angesprochen");
+ putline ("werden, deren Cartrige eingeschoben ist!");
+ IF printer type = "LaserJet"
+ THEN line;
+ putline ("ELAN-Listings können nur gedruckt werden, wenn ein Cartrige mit dem");
+ putline ("Schrifttyp 'LINE PRINTER' eingeschoben ist!");
+ FI;
+ line (2);
+ putline ("Weiter nach Eingabe einer Taste");
+ pause;
+ IF NOT exists (fonttab name)
+ THEN command dialogue (TRUE);
+ REP line (2);
+ putline ("Bitte Archiv mit der Fonttabelle """ +
+ fonttab name + """ einlegen!");
+ line;
+ UNTIL yes ("Archiv eingelegt") PER;
+ reserve archive;
+ fetch (fonttab name, archive);
+ release (archive);
+ FI;
+ font table (fonttab name);
+ IF multi user
+ THEN command dialogue (FALSE);
+ do ("save(""" + font tab name + """,task(""configurator""))")
+ FI;
+ forget (fonttab name, quiet);
+
+ . reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop;
+
+. generate printer spool :
+ eumel must advertise;
+ cursor (1, 12);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (4);
+ putline ("Generierung beendet, weiter mit 'SV'");
+ generate printer server;
+ do (buffer);
+
+. generate printer server :
+ buffer := "break (quiet);";
+ buffer CAT "spool manager (PROC printer);";
+ buffer CAT "INT VAR reply; DATASPACE VAR ds; FILE VAR file;";
+ buffer CAT "PROC printer:";
+ buffer CAT " disable stop;";
+ buffer CAT " continue (server channel);";
+ buffer CAT " check error (error message);";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " REP forget (ds);";
+ buffer CAT " execute print;";
+ buffer CAT " IF is error AND online";
+ buffer CAT " THEN out (""""27""(8U""27""(s0p10h12v0s0b3T"");";
+ buffer CAT " put error; clear error; out (""""12"""");";
+ buffer CAT " FI;";
+ buffer CAT " PER;";
+ buffer CAT "END PROC printer;";
+ buffer CAT "PROC execute print:";
+ buffer CAT " LET ack = 0, fetch code = 11, file type = 1003;";
+ buffer CAT " enable stop;";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " call (father, fetch code, ds, reply);";
+ buffer CAT " IF reply = ack CAND type (ds) = file type";
+ buffer CAT " THEN file := sequential file (input, ds);";
+ buffer CAT " print (file,";
+ buffer CAT " PROC (INT CONST, INT VAR, INT VAR) open,";
+ buffer CAT " PROC (INT CONST, INT CONST) close,";
+ buffer CAT " PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC execute print;";
+ buffer CAT "PROC check error(TEXT CONST message):";
+ buffer CAT " IF is error";
+ buffer CAT " THEN clear error; rename myself (message);";
+ buffer CAT " IF is error THEN end(myself) FI;";
+ buffer CAT " pause (9000); end(myself);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC check error;";
+
diff --git a/printer/laser/printer.kyocera.f-1010 b/printer/laser/printer.kyocera.f-1010
new file mode 100644
index 0000000..a46f7b3
--- /dev/null
+++ b/printer/laser/printer.kyocera.f-1010
@@ -0,0 +1,373 @@
+PACKET kyocera f 1010 printer
+
+(**************************************************************************)
+(* Stand : 03.12.86 *)
+(* KYOCERA F - 1010 Verison : 4 *)
+(* Autor : Rudolf Ruland *)
+(**************************************************************************)
+
+(**************************************************************************)
+(* Hinweis : Die 'time-out' Zeit, nach der der Eingabepuffer ausgegeben *)
+(* wird, wenn keine Eingabe mehr erfolgt, sollte moeglichst *)
+(* gross gewaehlt werden, *)
+(* z.B. mit FRPO H9, 60; wird sie auf 5 Min. gesetzt *)
+(**************************************************************************)
+
+
+ DEFINES open,
+ close,
+ execute,
+
+ paper size :
+
+LET underline = 1,
+(* bold = 2,
+ italics = 4,
+ reverse = 8,
+
+ underline linetype = 1, *)
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1,
+ c write cmd = 2,
+ c carriage return = 3,
+ c move = 4,
+ c draw = 5,
+ c on = 6,
+ c off = 7,
+ c type = 8;
+
+INT VAR blankpitch, high, low;
+REAL VAR x size, y size;
+BOOL VAR is landscape, is underline;
+
+(*********************************************************************)
+
+paper size (21.0, 29.7);
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ out ("!"82"! RES; UNIT D; EXIT;"); (* Reset des Druckers *)
+ IF pos (material, "landscape") > 0 OR pos (material, "quer") > 0
+ THEN is landscape := TRUE;
+ x steps := x step conversion ( y size );
+ y steps := y step conversion ( x size );
+ out (""27"&l1O");
+ ELSE is landscape := FALSE;
+ x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ FI;
+ is underline := FALSE;
+ IF y size < 29.7 OR x size < 21.0
+ THEN out ("!"82"! SLM ");
+ IF is landscape
+ THEN out (text (x step conversion (29.7 - y size)));
+ out ("; STM ");
+ out (text (y step conversion ((21.0 - x size) * 0.5)));
+ ELSE out (text (x step conversion ((21.0 - x size) * 0.5)));
+ FI;
+ out ("; EXIT;");
+ FI;
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ out ("!"82"! MZP 0, 0; EXIT;"); (* Positionierung zum Nullpunkt *)
+ IF is landscape
+ THEN x start := x step conversion (0.19);
+ y start := y step conversion (0.70);
+ ELSE x start := x step conversion (0.56);
+ y start := y step conversion (0.60);
+ FI;
+ IF pos (material, "tray") > 0
+ THEN out (""27"&l1H");
+ ELIF pos (material, "manual") > 0
+ THEN out (""27"&l2H");
+ FI;
+ out (""13"");
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+ OTHERWISE : put (param1)
+END SELECT;
+
+.
+ close document :
+
+
+(*. remaining y steps : param1*)
+.
+ close page :
+ out (""12"");
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ out subtext (string, from, to)
+
+.
+ write cmd :
+ out subtext (string, from, to)
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ out (""13"")
+
+
+. x steps : param1
+. y steps : param2
+.
+ move :
+ IF x steps > 0
+ THEN IF is underline
+ THEN underline x move
+ ELSE out (""27"*p+" + text (x steps) + "X");
+ FI;
+ ELIF x steps < 0
+ THEN out (""27"*p" + text (x steps) + "X");
+ ELIF y steps > 0
+ THEN out (""27"*p+" + text (y steps) + "Y");
+ ELIF y steps < 0
+ THEN out (""27"*p" + text (y steps) + "Y");
+ FI;
+
+ . underline x move :
+ high := x steps DIV blankpitch;
+ low := x steps MOD blankpitch;
+ IF high > 0 THEN high TIMESOUT " " FI;
+ IF low > 0 THEN out (" "27"*p" + text (low - blank pitch) + "X") FI;
+
+.
+ draw :
+ stop
+
+
+. modification : param1
+.
+ on :
+ IF on string (modification) <> ""
+ THEN out (on string (modification));
+ IF modification = underline THEN is underline := TRUE FI;
+ ELSE stop
+ FI
+
+.
+ off :
+ IF off string (modification) <> ""
+ THEN out (off string (modification));
+ IF modification = underline THEN is underline := FALSE FI;
+ ELSE stop
+ FI
+
+
+. font nr : param1
+.
+ type :
+ out (font string (font nr));
+ blankpitch := char pitch (font nr, " ");
+
+END PROC execute;
+
+
+END PACKET kyocera f 1010 printer;
+
+
+
+#page#
+(******************************************************************)
+(*** ***)
+(*** Generierung des Printers ***)
+(*** ***)
+(******************************************************************)
+
+LET printer name = "printer.kyocera.f-1010";
+
+TEXT VAR fonttab name := "fonttab.kyocera.f-1010";
+
+BOOL CONST multi user := (pcb (9) AND 255) <> 1;
+
+INT VAR pr channel;
+TEXT VAR buffer;
+
+command dialogue (TRUE);
+IF NOT multi user
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+FI;
+ask for print channel;
+dynamic font hint;
+load font table;
+forget (printer name, quiet);
+IF multi user THEN generate printer spool FI;
+check on;
+command dialogue (TRUE);
+.
+ ask for print channel :
+ line;
+ put ("gib Druckerkanal:");
+ get (pr channel);
+ do ("serverchannel(" + text (pr channel) + ")" ) ;
+ line;
+.
+ dynamic font hint :
+ line (3);
+ putline (""4"Hinweis zur Benutzung der dynamischen Schrifttypen:");
+ line;
+ putline (" In der Fonttabelle """ + fonttab name + """ sind einige dynamische");
+ putline (" Schrifttypen angepaßt. Diese müssen nach jedem Einschalten des");
+ putline (" Druckers neu generiert werden.");
+ putline (" Zur Generierung dieser Schrifttypen befinden sich auf dem Standard-");
+ putline (" archive die folgenden Dateien:");
+ line;
+ putline (" ""genfont.kyocera.f-1010.dynamic1""");
+ putline (" ""genfont.kyocera.f-1010.dynamic2""");
+ line;
+ putline (" Nach Einschalten des Druckers müssen diese Dateien zuerst ausgedruckt");
+ putline (" werden.");
+ putline (" Die Generierung benötigt pro Schriftart etwa 15 Minuten.");
+ line (2);
+ putline ("Weiter nach Eingabe einer Taste");
+ pause;
+.
+ load font table :
+ IF NOT exists (fonttab name)
+ THEN REP line (2);
+ putline ("Bitte Archiv mit der Fonttabelle """ +
+ fonttab name + """ einlegen!");
+ line;
+ UNTIL yes ("Archiv eingelegt") PER;
+ reserve archive;
+ fetch (fonttab name, archive);
+ release (archive);
+ FI;
+ font table (fonttab name);
+ IF multi user
+ THEN command dialogue (FALSE);
+ do ("save(""" + font tab name + """,task(""configurator""))")
+ FI;
+ forget (fonttab name, quiet);
+
+ . reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop;
+
+. generate printer spool :
+ eumel must advertise;
+ cursor (1, 12);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (4);
+ putline ("Generierung beendet, weiter mit 'SV'");
+ generate printer server;
+ do (buffer);
+
+. generate printer server :
+ buffer := "break (quiet);";
+ buffer CAT "spool manager (PROC printer);";
+ buffer CAT "INT VAR reply; DATASPACE VAR ds; FILE VAR file;";
+ buffer CAT "PROC printer:";
+ buffer CAT " disable stop;";
+ buffer CAT " continue (server channel);";
+ buffer CAT " check error (error message);";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " REP forget (ds);";
+ buffer CAT " execute print;";
+ buffer CAT " IF is error AND online";
+ buffer CAT " THEN out (""""27""(8U""27""(s0p10h12v0s0b3T"");";
+ buffer CAT " put error; clear error; out (""""12"""");";
+ buffer CAT " FI;";
+ buffer CAT " PER;";
+ buffer CAT "END PROC printer;";
+ buffer CAT "PROC execute print:";
+ buffer CAT " LET ack = 0, fetch code = 11, file type = 1003;";
+ buffer CAT " enable stop;";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " call (father, fetch code, ds, reply);";
+ buffer CAT " IF reply = ack CAND type (ds) = file type";
+ buffer CAT " THEN file := sequential file (input, ds);";
+ buffer CAT " print (file,";
+ buffer CAT " PROC (INT CONST, INT VAR, INT VAR) open,";
+ buffer CAT " PROC (INT CONST, INT CONST) close,";
+ buffer CAT " PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC execute print;";
+ buffer CAT "PROC check error(TEXT CONST message):";
+ buffer CAT " IF is error";
+ buffer CAT " THEN clear error; rename myself (message);";
+ buffer CAT " IF is error THEN end(myself) FI;";
+ buffer CAT " pause (9000); end(myself);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC check error;";
+
diff --git a/printer/laser/printer.nec.lc-08 b/printer/laser/printer.nec.lc-08
new file mode 100644
index 0000000..9ee2837
--- /dev/null
+++ b/printer/laser/printer.nec.lc-08
@@ -0,0 +1,626 @@
+PACKET nec lc 08 printer
+
+(**************************************************************************)
+(* Stand : 29.01.88 *)
+(* NEC Silentwriter LC-08 Verison : 4 *)
+(* Autor : Rudolf Ruland *)
+(**************************************************************************)
+
+ DEFINES open,
+ close,
+ execute,
+
+ box commands,
+ insert box command,
+ delete box command,
+
+ paper size,
+ paper x size,
+ paper y size:
+
+LET
+(* underline = 1,
+ bold = 2,
+ italics = 4,
+ reverse = 8,
+
+ underline linetype = 1, *)
+
+ c document = 1,
+ c page = 2,
+
+ c write text = 1,
+ c write cmd = 2,
+ c carriage return = 3,
+ c move = 4,
+ c draw = 5,
+ c on = 6,
+ c off = 7,
+ c type = 8,
+
+ tag type = 1;
+
+INT VAR symbol type;
+REAL VAR x size, y size;
+BOOL VAR is landscape, was cr;
+TEXT VAR bold buffer, mod string, command, symbol;
+THESAURUS VAR box cmds := empty thesaurus;
+
+(*********************************************************************)
+
+paper size (21.0, 29.7);
+
+PROC paper size (REAL CONST x, y) :
+
+ x size := x;
+ y size := y;
+
+END PROC paper size;
+
+PROC paper size :
+
+ line;
+ putline ("Papierbreite = " + text (x size, 5, 2) + " cm = " + text (x size / 2.54, 5, 2) + " Zoll");
+ putline ("Papierlaenge = " + text (y size, 5, 2) + " cm = " + text (y size / 2.54, 5, 2) + " Zoll");
+
+END PROC paper size;
+
+REAL PROC paper x size : x size END PROC paper x size;
+REAL PROC paper y size : y size END PROC paper y size;
+
+
+THESAURUS PROC box commands : box cmds END PROC box commands;
+
+PROC insert box command (TEXT CONST new command) :
+
+ command := new command;
+ change all (command, " ", "");
+ insert (box cmds, command)
+
+END PROC insert box command;
+
+PROC delete box command (TEXT CONST old command) :
+
+ INT VAR dummy;
+ command := old command;
+ change all (command, " ", "");
+ delete (box cmds, command, dummy)
+
+END PROC delete box command;
+
+(*********************************************************************)
+
+PROC open (INT CONST op code, INT VAR param1, param2) :
+
+SELECT op code OF
+ CASE c document : open document
+ CASE c page : open page
+END SELECT;
+
+
+. x steps : param1
+. y steps : param2
+.
+ open document :
+ out (""28"Cz"); (* Diablo 630 Emulation *)
+ out (""27""13"P"); (* Reset *)
+ out (""28"$"); (* Formatlaenge loeschen *)
+ out (""28"Ca"27"6"28"Cz"); (* Zeichensatz 2 *)
+ out (""28"Ra"); (* USA-Zeichensatz *)
+ out (""27""25"1"); (* Sheet 1 *)
+ is landscape := pos (material, "landscape") > 0;
+ IF is landscape
+ THEN x steps := x step conversion ( y size );
+ y steps := y step conversion ( x size );
+ out (""28")"128""0""); (* Landscape-Mode *)
+ ELSE x steps := x step conversion ( x size );
+ y steps := y step conversion ( y size );
+ out (""28")"001""0""); (* Portait -Mode *)
+ FI;
+ was cr := FALSE;
+ bold buffer := "";
+
+. x start : param1
+. y start : param2
+.
+ open page :
+ IF is landscape
+ THEN x start := x step conversion (0.45);
+ y start := y step conversion (0.9);
+ ELSE x start := x step conversion (0.7);
+ y start := y step conversion (0.9);
+ FI;
+ IF pos (material, "sheet1") > 0
+ THEN out (""27""25"1")
+ ELIF pos (material, "sheet2") > 0
+ THEN out (""27""25"2")
+ ELIF pos (material, "manual") > 0
+ THEN out (""27""25"E")
+ FI;
+ out (""28"'a"0""0""28"&a"0""0""); (* Positionierung auf den Nullpunkt *)
+
+END PROC open;
+
+
+PROC close (INT CONST op code, INT CONST param1) :
+
+SELECT op code OF
+ CASE c document : close document
+ CASE c page : close page
+ OTHERWISE : put (param1)
+END SELECT;
+
+.
+ close document :
+
+
+(*. remaining y steps : param1*)
+.
+ close page :
+ out (""12"")
+
+END PROC close;
+
+
+PROC execute (INT CONST op code, TEXT CONST string, INT CONST param1, param2) :
+
+SELECT op code OF
+ CASE c write text : write text
+ CASE c write cmd : write cmd
+ CASE c carriage return : carriage return
+ CASE c move : move
+ CASE c draw : draw
+ CASE c on : on
+ CASE c off : off
+ CASE c type : type
+END SELECT
+
+
+. from : param1
+. to : param2
+.
+ write text :
+ IF was cr
+ THEN was cr := FALSE;
+ out (bold buffer);
+ FI;
+ out subtext (string, from, to)
+
+.
+ write cmd :
+ IF was cr
+ THEN was cr := FALSE;
+ out (bold buffer);
+ FI;
+ command := subtext (string, from, to);
+ IF is box cmd
+ THEN disable stop;
+ do (command);
+ clear error;
+ ELSE out (command);
+ FI;
+
+ . is box cmd :
+ scan (command);
+ next symbol (symbol, symbol type);
+ (symbol type = tag type) CAND (box cmds CONTAINS symbol)
+
+
+(*. x steps to left margin : param1*)
+.
+ carriage return :
+ out (""13"");
+ was cr := TRUE;
+
+
+. x steps : param1
+. y steps : param2
+.
+ move :
+ IF x steps <> 0 THEN x move FI;
+ IF y steps <> 0 THEN y move FI;
+
+ . x move :
+ IF x steps > 0 THEN out (""28"&c") ELSE out (""28"&d") FI;
+ out (x steps low);
+ out (x steps high);
+
+ . x steps low : code (abs (x steps) MOD 256)
+ . x steps high : code (abs (x steps) DIV 256)
+
+ . y move :
+ IF y steps > 0 THEN out (""28"'c") ELSE out (""28"'d") FI;
+ out (y steps low);
+ out (y steps high);
+
+ . y steps low : code (abs (y steps) MOD 256)
+ . y steps high : code (abs (y steps) DIV 256)
+.
+ draw :
+ stop
+
+
+. modification : param1
+.
+ on :
+ mod string := on string (modification);
+ IF mod string <> ""
+ THEN out (mod string);
+ IF pos (""27"W"27"O", mod string) > 0
+ THEN bold buffer CAT mod string;
+ FI;
+ ELSE stop
+ FI
+
+.
+ off :
+ mod string := off string (modification);
+ IF mod string <> ""
+ THEN out (mod string);
+ IF pos (""27"&", mod string) > 0
+ THEN bold buffer := subtext (bold buffer, 1, LENGTH bold buffer - 2);
+ out (bold buffer);
+ FI;
+ ELSE stop
+ FI
+
+
+. font nr : param1
+.
+ type :
+ out (""28")"); (* Font Identifikation *)
+ command := font string (font nr);
+ IF is landscape
+ THEN out subtext (command, 3, 4);
+ ELSE out subtext (command, 1, 2);
+ FI;
+ out (""28"E"); (* Zeilenvorschub (VMI) *)
+ out (code (font height (font nr) + font depth (font nr) + font lead (font nr)));
+ out (""28"F"); (* Zeichenabstand (HMI) *)
+ out (code (char pitch (font nr, " ")));
+ out (""27"P"); (* proportional ein *)
+ out subtext (command, 5);
+
+END PROC execute;
+
+END PACKET nec lc 08 printer;
+
+
+PACKET nec lc 08 box commands
+
+(**************************************************************************)
+(* *)
+(* Kommandos zum Zeichen von Boxen, Linien und Schraffuren *)
+(* für den NEC Laserdrucker LC-08 *)
+(* *)
+(* Autor : Rudolf Ruland *)
+(* Stand : 29.01.88 *)
+(**************************************************************************)
+
+ DEFINES line,
+ x line,
+ y line,
+
+ box,
+ box frame,
+ box shade,
+
+ cake,
+ cake frame,
+ cake shade,
+ :
+
+INT VAR x, y, h, w;
+
+WHILE highest entry (box commands) > 0
+ REP delete box command (name (box commands, highest entry (box commands))) PER;
+insert box command ("line");
+insert box command ("xline");
+insert box command ("yline");
+insert box command ("box");
+insert box command ("boxshade");
+insert box command ("boxframe");
+insert box command ("cake");
+insert box command ("cakeshade");
+insert box command ("cakeframe");
+
+
+PROC line (REAL CONST x offset, y offset, width, height, INT CONST line width) :
+
+ IF line width > 0
+ THEN graph on (x offset, y offset, width, height);
+ out ("LW" + text (line width) + ";");
+ out ("PR;");
+ out ("PD" + text (+w) + "," + text (-h) + ";");
+ graph off;
+ FI;
+
+END PROC line;
+
+PROC x line (REAL CONST x offset, y offset, width, INT CONST line width) :
+
+ IF line width > 0
+ THEN graph on (x offset, y offset, width, 0.0);
+ out ("LW" + text (line width) + ";");
+ out ("PR;");
+ out ("PD" + text (+w) + "," + "0;");
+ graph off;
+ FI;
+
+END PROC x line;
+
+PROC y line (REAL CONST x offset, y offset, height, INT CONST line width) :
+
+ IF line width > 0
+ THEN graph on (x offset, y offset, 0.0, height);
+ out ("LW" + text (line width) + ";");
+ out ("PR;");
+ out ("PD0," + text (-h) + ";");
+ graph off;
+ FI;
+
+END PROC y line;
+
+
+PROC box (REAL CONST x offset, y offset, width, height,
+ INT CONST pattern type, line width) :
+
+ IF pattern type = 0
+ THEN box frame (x offset, y offset, width, height, line width)
+ ELIF line width = 0
+ THEN box shade (x offset, y offset, width, height, pattern type)
+ ELSE graph on (x offset, y offset, width, height);
+ out ("LW" + text (line width) + ";");
+ set pattern (pattern type);
+ out ("ER" + text (+w) + "," + text (-h) + ";");
+ graph off;
+ FI;
+
+END PROC box;
+
+
+PROC box shade (REAL CONST x offset, y offset, width, height,
+ INT CONST pattern type) :
+
+ IF pattern type <> 0
+ THEN graph on (x offset, y offset, width, height);
+ set pattern (pattern type);
+ out ("RR" + text (+w) + "," + text (-h) + ";");
+ graph off;
+ FI;
+
+END PROC box shade;
+
+
+PROC box frame (REAL CONST x offset, y offset, width, height,
+ INT CONST line width) :
+
+ IF line width <> 0
+ THEN graph on (x offset, y offset, width, height);
+ out ("LW" + text (line width) + ";");
+ out ("PR;");
+ out ("PD");
+ out (text (+w) + "," + "0,");
+ out ( "0," + text (-h) + ",");
+ out (text (-w) + "," + "0,");
+ out ( "0," + text (+h) + ";");
+ graph off;
+ FI;
+
+END PROC box frame;
+
+
+PROC cake (REAL CONST x offset, y offset, radius, start angle, sweep angle,
+ INT CONST pattern type, line width) :
+
+ IF pattern type = 0
+ THEN cake frame (x offset, y offset, radius, start angle, sweep angle, line width)
+ ELIF line width = 0
+ THEN cake shade (x offset, y offset, radius, start angle, sweep angle, pattern type)
+ ELSE graph on (x offset, y offset, radius, 0.0);
+ out ("LW" + text (line width) + ";");
+ set pattern (pattern type);
+ out ("EW" + text (+w) + "," + text (start angle) + "," + text (sweep angle) + ";");
+ graph off;
+ FI;
+
+END PROC cake;
+
+
+PROC cake shade (REAL CONST x offset, y offset, radius, start angle, sweep angle,
+ INT CONST pattern type) :
+
+ IF pattern type > 0 CAND w > 0
+ THEN graph on (x offset, y offset, radius, 0.0);
+ set pattern (pattern type);
+ out ("WG" + text (+w) + "," + text (start angle) + "," + text (sweep angle) + ";");
+ graph off;
+ FI;
+
+END PROC cake shade;
+
+
+PROC cake frame (REAL CONST x offset, y offset, radius, start angle, sweep angle,
+ INT CONST line width) :
+
+
+ IF line width <> 0
+ THEN REAL CONST xs := real (x) + cos (start angle*pi/180.0) * real (w),
+ ys := real (y) + sin (start angle*pi/180.0) * real (w);
+ graph on (x offset, y offset, radius, 0.0);
+ out ("LW" + text (line width) + ";");
+ out ("MA"+ text (xs) + "," + text (ys) + ";");
+ out ("FA"+ text ( x) + "," + text ( y) + "," + text (sweep angle) + ";");
+ out ("MA"+ text ( x) + "," + text ( y) + ";");
+ graph off;
+ FI;
+
+END PROC cake frame;
+
+
+PROC graph on (REAL CONST x offset, y offset, width, height) :
+
+ x := x pos + x step conversion (x offset);
+ y := plot y size - (y pos + y step conversion (y offset));
+ w := x step conversion (width);
+ h := y step conversion (height);
+ out (""28"Aa");
+ out ("DF;");
+ out ("MA"+ text (x) + "," + text (y) + ";");
+
+ . plot y size : 3389 - y step conversion (1.0)
+
+END PROC graph on;
+
+PROC graph off :
+
+ out (""28"Az");
+
+END PROC graph off;
+
+
+PROC set pattern (INT CONST pattern type) :
+
+ out ("XX1;");
+ out (pattern);
+
+ . pattern :
+ SELECT pattern type OF
+ CASE 1 : "FT2,1,0;"
+ CASE 2 : "FT2,1,90;"
+ CASE 3 : "FT2,1,45;"
+ CASE 4 : "FT3,1,0;"
+ CASE 5 : "FT3,1,45;"
+ CASE 6 : "FT2,100,0;"
+ CASE 7 : "FT2,100,90;"
+ CASE 8 : "FT2,100,45;"
+ CASE 9 : "FT3,100,0;"
+ CASE 10 : "FT3,100,45;"
+ OTHERWISE : "FT1;"
+ END SELECT
+
+END PROC set pattern;
+
+
+END PACKET nec lc 08 box commands;
+
+
+
+#page#
+(******************************************************************)
+(*** ***)
+(*** Generierung des Printers ***)
+(*** ***)
+(******************************************************************)
+
+LET printer name = "printer.nec.lc-08";
+
+TEXT VAR fonttab name := "fonttab.nec.lc-08";
+
+BOOL CONST multi user := (pcb (9) AND 255) <> 1;
+
+INT VAR pr channel;
+TEXT VAR buffer;
+
+command dialogue (TRUE);
+IF NOT multi user
+ THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL")
+FI;
+ask for print channel;
+load font table;
+forget (printer name, quiet);
+IF multi user THEN generate printer spool FI;
+command dialogue (TRUE);
+check on;
+.
+ ask for print channel :
+ line;
+ put ("gib Druckerkanal:");
+ get (pr channel);
+ do ("serverchannel(" + text (pr channel) + ")" ) ;
+ line;
+.
+ load font table :
+ IF NOT exists (fonttab name)
+ THEN REP line (2);
+ putline ("Bitte Archiv mit der Fonttabelle """ +
+ fonttab name + """ einlegen!");
+ line;
+ UNTIL yes ("Archiv eingelegt") PER;
+ reserve archive;
+ fetch (fonttab name, archive);
+ release (archive);
+ FI;
+ font table (fonttab name);
+ IF multi user
+ THEN command dialogue (FALSE);
+ do ("save(""" + font tab name + """,task(""configurator""))")
+ FI;
+ forget (fonttab name, quiet);
+
+ . reserve archive :
+ INT VAR p1, p2;
+ archive (" "31" ");
+ disable stop;
+ list (archive);
+ IF is error
+ THEN buffer := errormessage;
+ p1 := pos (buffer, """", 1 ) + 1;
+ p2 := pos (buffer, """", p1) - 1;
+ IF p1 > 0 AND p2 > 0
+ THEN clear error;
+ buffer := subtext (buffer, p1, p2);
+ archive (buffer);
+ FI;
+ FI;
+ enable stop;
+
+. generate printer spool :
+ eumel must advertise;
+ cursor (1, 12);
+ putline ("In allen bestehenden Tasks - insbesondere in der Task ""PUBLIC"" - muß");
+ putline ("die Fonttabelle mit dem Kommando");
+ line;
+ putline (" font table (""" + font tab name + """)");
+ line;
+ putline ("eingestellt werden!!!");
+ line (4);
+ putline ("Generierung beendet, weiter mit 'SV'");
+ generate printer server;
+ do (buffer);
+
+. generate printer server :
+ buffer := "break (quiet);";
+ buffer CAT "spool manager (PROC printer);";
+ buffer CAT "INT VAR reply; DATASPACE VAR ds; FILE VAR file;";
+ buffer CAT "PROC printer:";
+ buffer CAT " disable stop;";
+ buffer CAT " continue (server channel);";
+ buffer CAT " check error (error message);";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " REP forget (ds);";
+ buffer CAT " execute print;";
+ buffer CAT " IF is error AND online THEN put error; clear error; FI;";
+ buffer CAT " PER;";
+ buffer CAT "END PROC printer;";
+ buffer CAT "PROC execute print:";
+ buffer CAT " LET ack = 0, fetch code = 11, file type = 1003;";
+ buffer CAT " enable stop;";
+ buffer CAT " ds := nilspace;";
+ buffer CAT " call (father, fetch code, ds, reply);";
+ buffer CAT " IF reply = ack CAND type (ds) = file type";
+ buffer CAT " THEN file := sequential file (input, ds);";
+ buffer CAT " print (file,";
+ buffer CAT " PROC (INT CONST, INT VAR, INT VAR) open,";
+ buffer CAT " PROC (INT CONST, INT CONST) close,";
+ buffer CAT " PROC (INT CONST, TEXT CONST, INT CONST, INT CONST) execute);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC execute print;";
+ buffer CAT "PROC check error(TEXT CONST message):";
+ buffer CAT " IF is error";
+ buffer CAT " THEN clear error; rename myself (message);";
+ buffer CAT " IF is error THEN end(myself) FI;";
+ buffer CAT " pause (9000); end(myself);";
+ buffer CAT " FI;";
+ buffer CAT "END PROC check error;";
+
diff --git a/printer/laser/readme b/printer/laser/readme
new file mode 100644
index 0000000..019d75c
--- /dev/null
+++ b/printer/laser/readme
@@ -0,0 +1,155 @@
+Treiber-Installations-Programm für Laserdrucker 21. 2.1989
+
+
+1. Installations- und Gebrauchsanleitung
+
+Einrichten
+So wird das Treiber-Installationsprogramm eingerichtet:
+
+ Richten Sie die Task PRINTER als Sohn von SYSUR ein :
+
+ begin ("PRINTER", "SYSUR")
+
+ Geben Sie in der Task PRINTER nacheinander folgende Kommandos
+ ein, die Sie jeweils mit der ENTER-Taste bestätigen:
+
+ archive ("std.printer")
+ fetch("laser.inserter",archive)
+ insert ("laser.inserter")
+
+Das Programm wird dann insertiert.
+
+
+Menüsystem
+Das Installationsprogramm zeigt nun eine Liste von Druckerherstellern.
+Wählen Sie den Hersteller Ihres Druckers aus! Hiernach wird eine Liste
+der unterstützten Drucker dieses Herstellers gezeigt. Wählen Sie hier
+den passenden Typ aus!
+Das Installationsprogramm fragt nun nach der Art der Druckerschnittstelle.
+Die Druckerhardware muß wie hier angegeben konfiguriert sein, wenn sie
+mit dem ausgewählten Treiber betrieben werden soll.
+
+Das Installationsprogramm kann mit 'treiber einrichten' erneut aufgerufen
+werden. Die Druckerschnittstelle kann mit 'printer setup' nachträglich
+umkonfiguriert werden.
+
+2. Druckertreiber-Auswahl
+
+Verwendung nicht im Menü enthaltener Drucker
+Für den Fall, daß Sie genau Ihren Drucker im Menü nicht finden,
+müssen Sie herausfinden (Druckerhandbuch, -händler!),
+welchen Drucker Ihr Drucker emuliert oder welchem er ähnlich ist.
+(Die meisten Laserdrucker verfügen über eine HP-Laserjet Emulation).
+
+
+3. Steuerungsmöglichkeiten und Spezialfeatures
+
+Einige Treiber bieten bestimmte Einstellungsmöglichkeiten.
+Die Einstellungen können über
+- Steuerprozeduren
+- Materialanweisungen bzw.
+- direkte Druckeranweisungen
+vorgenommen werden.
+
+Steuerprozeduren
+setzen Einstellungen, die für alle Dokumente (Druckdateien) gelten
+sollen. Die Prozeduren müssen in der Druckspooltask (meist: "PRINTER")
+aufgerufen werden. Vor Aufruf der Prozeduren muß das Spoolkommando
+'stop spool' gegeben werden!
+
+
+
+PROC papersize (REAL CONST breite, länge)
+ Dient zur Einstellung der Größe der physikalisch beschreibbaren
+ Fläche.
+ Beispiel: papersize (21.0, 29.7)
+ (Standardeinstellung für DIN A4 Format)
+
+PROC papersize
+ Informationsprozedur
+
+Die Änderungen, die Sie in der Druckspooltask vorgenommen haben
+werden erst wirksam, nachdem das Spool-Kommando 'start spool' ge­
+geben und die Druckspooltask verlassen wurde.
+
+
+
+Materialanweisungen \#material("...")\#
+müssen in der Druckdatei vor dem ersten druckbaren Zeichen stehen und
+setzen Einstellungen für eine ganze Datei. (Materialanweisungen haben
+für die jeweilige Datei Vorrang vor den durch Steuerprozeduren einge­
+stellten Standardwerten. Diese werden durch die Materialanweisung aber
+nicht geändert.)
+
+Beispiel: \#material("landscape")\# oder \#material("quer")\#
+ Der Druckertreiber stellt sich auf Querdruck ein. Für das
+ Papierformat werden die
+ durch papersize eingestellten Werte vertauscht angenommen.
+ Es sollten nur Schrifttypen verwendet werden, die auch im
+ Landscape-Modus vorhanden sind.
+
+
+- Es darf in einer Datei nur eine Materialanweisung stehen! Sollen meh­
+ rere Einstellungen vorgenommen werden, müssen sie in einer Anweisung
+ erscheinen. Beispiel: \#material("quer;2")\#
+
+- Achten Sie bei Materialanweisungen
+ besonders auf korrekte Schreibweise! Es werden nur Kleinbuchstaben
+ berücksichtigt! Also: \#"quer"\# und keinesfalls \#"QUER"\#!!!
+
+- Bei Laserdruckern gebräuchliche Materialanweisungen sind:
+ - landscape (quer)
+ - manual
+ - tray
+
+direkte Druckeranweisungen \#"..."\#
+gelten ab der Position, an der sie in der Datei auftreten. Sie haben
+(sofern sie erlaubt sind,) Vorrang vor Standardeinstellungen und
+Materialeinstellungen.
+
+
+- Direkte Druckeranweisungen werden vom EUMEL-Drucker ignoriert und
+ nur vom Druckertreiber in eine Kommando-Sequenz umgesetzt. Es kann
+ daher vorkommen, daß (z.B. bei Spaltendruck) unerwartete Ergebnisse
+ erscheinen, weil der EUMEL-Drucker dann den Text in einer anderen
+ Reihenfolge an den Drucker sendet, als er in der Datei steht, die
+ mit dem direkten Druckerkommando gesetzte Modifikation aber (z.B.
+ für beide Spalten) unerwünscht erhalten bleibt. Direkte
+ Druckeranweisungen, die das Schriftformat verändern,
+ sollten grundsätzlich nicht gegeben werden.
+
+
+4. Spezialfeatures:
+
+Die Druckertreiber für die Drucker APPLE-Laserwriter und NEC LC-08
+verfügen über Anweisungen zum Zeichnen einer Linie, Box oder eines Kuchen-
+stücks, die als direkte Druckeranweisungen in ELAN-Syntax gegeben werden
+müssen.
+Folgende Anweisungen stehen zur Verfügung:
+
+PROC line (REAL CONST x offset, y offset, width, height, line width) :
+
+PROC x line (REAL CONST x offset, y offset, width, line width) :
+
+PROC y line (REAL CONST x offset, y offset, height, line width) :
+
+PROC box (REAL CONST x offset, y offset, width, height, line width, pattern):
+
+PROC box shade (REAL CONST x offset, y offset, width, height, pattern) :
+
+PROC box frame (REAL CONST x offset, y offset, width, height, line width) :
+
+PROC cake (REAL CONST x offset, y offset, radius, start angle, sweep angle,
+ line width, pattern) :
+
+PROC cake shade (REAL CONST x offset, y offset, radius, start angle,
+ sweep angle, pattern) :
+
+PROC cake frame (REAL CONST x offset, y offset, radius, start angle,
+ sweep angle, line width) :
+
+
+
+
+
+