From 724cc003460ec67eda269911da85c9f9e40aa6cf Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Fri, 30 Sep 2016 16:57:23 +0200 Subject: Add extracted sources from floppy disk images Some files have no textual representation (yet) and were added as raw dataspaces. --- printer/dotmatrix24/beschreibungen24 | 62 + printer/dotmatrix24/fonttab.brother | Bin 0 -> 38400 bytes printer/dotmatrix24/fonttab.epson.lq1500 | Bin 0 -> 35840 bytes printer/dotmatrix24/fonttab.epson.lq850 | Bin 0 -> 38400 bytes printer/dotmatrix24/fonttab.nec.p5 | Bin 0 -> 39936 bytes printer/dotmatrix24/fonttab.nec.p5.new | Bin 0 -> 39936 bytes printer/dotmatrix24/fonttab.nec.p6+ | Bin 0 -> 48128 bytes printer/dotmatrix24/fonttab.oki | Bin 0 -> 38400 bytes printer/dotmatrix24/fonttab.toshiba.p321 | Bin 0 -> 15872 bytes printer/dotmatrix24/inserter | 793 +++++++++++++ printer/dotmatrix24/module24 | 1554 +++++++++++++++++++++++++ printer/dotmatrix24/printer.24.nadel | 776 ++++++++++++ printer/dotmatrix24/readme | 320 +++++ printer/dotmatrix9/beschreibungen9 | 97 ++ printer/dotmatrix9/fonttab.1 | Bin 0 -> 11264 bytes printer/dotmatrix9/fonttab.10 | Bin 0 -> 15872 bytes printer/dotmatrix9/fonttab.20 | Bin 0 -> 36864 bytes printer/dotmatrix9/fonttab.20.lc | Bin 0 -> 36864 bytes printer/dotmatrix9/fonttab.20.lx | Bin 0 -> 24576 bytes printer/dotmatrix9/fonttab.7 | Bin 0 -> 46080 bytes printer/dotmatrix9/fonttab.7.cxp | Bin 0 -> 46080 bytes printer/dotmatrix9/fonttab.7.fuj | Bin 0 -> 56832 bytes printer/dotmatrix9/fonttab.7.mt | Bin 0 -> 46080 bytes printer/dotmatrix9/module9 | 1099 +++++++++++++++++ printer/dotmatrix9/printer.neun.nadel | 1129 ++++++++++++++++++ printer/dotmatrix9/readme | 324 ++++++ printer/laser/fonttab.apple.laserwriter | Bin 0 -> 100864 bytes printer/laser/fonttab.canon.lbp-8 | Bin 0 -> 58368 bytes printer/laser/fonttab.epson.sq | Bin 0 -> 29696 bytes printer/laser/fonttab.hp.laserjet | Bin 0 -> 24064 bytes printer/laser/fonttab.kyocera.f-1010 | Bin 0 -> 71168 bytes printer/laser/fonttab.nec.lc-08 | Bin 0 -> 38400 bytes printer/laser/genfont.kyocera.f-1010.dynamic1 | 30 + printer/laser/genfont.kyocera.f-1010.dynamic2 | 30 + printer/laser/laser.inserter | 275 +++++ printer/laser/printer.apple.laserwriter | 770 ++++++++++++ printer/laser/printer.canon.lbp-8 | 327 ++++++ printer/laser/printer.epson.sq | 585 ++++++++++ printer/laser/printer.hp.laserjet | 417 +++++++ printer/laser/printer.kyocera.f-1010 | 373 ++++++ printer/laser/printer.nec.lc-08 | 626 ++++++++++ printer/laser/readme | 155 +++ 42 files changed, 9742 insertions(+) create mode 100644 printer/dotmatrix24/beschreibungen24 create mode 100644 printer/dotmatrix24/fonttab.brother create mode 100644 printer/dotmatrix24/fonttab.epson.lq1500 create mode 100644 printer/dotmatrix24/fonttab.epson.lq850 create mode 100644 printer/dotmatrix24/fonttab.nec.p5 create mode 100644 printer/dotmatrix24/fonttab.nec.p5.new create mode 100644 printer/dotmatrix24/fonttab.nec.p6+ create mode 100644 printer/dotmatrix24/fonttab.oki create mode 100644 printer/dotmatrix24/fonttab.toshiba.p321 create mode 100644 printer/dotmatrix24/inserter create mode 100644 printer/dotmatrix24/module24 create mode 100644 printer/dotmatrix24/printer.24.nadel create mode 100644 printer/dotmatrix24/readme create mode 100644 printer/dotmatrix9/beschreibungen9 create mode 100644 printer/dotmatrix9/fonttab.1 create mode 100644 printer/dotmatrix9/fonttab.10 create mode 100644 printer/dotmatrix9/fonttab.20 create mode 100644 printer/dotmatrix9/fonttab.20.lc create mode 100644 printer/dotmatrix9/fonttab.20.lx create mode 100644 printer/dotmatrix9/fonttab.7 create mode 100644 printer/dotmatrix9/fonttab.7.cxp create mode 100644 printer/dotmatrix9/fonttab.7.fuj create mode 100644 printer/dotmatrix9/fonttab.7.mt create mode 100644 printer/dotmatrix9/module9 create mode 100644 printer/dotmatrix9/printer.neun.nadel create mode 100644 printer/dotmatrix9/readme create mode 100644 printer/laser/fonttab.apple.laserwriter create mode 100644 printer/laser/fonttab.canon.lbp-8 create mode 100644 printer/laser/fonttab.epson.sq create mode 100644 printer/laser/fonttab.hp.laserjet create mode 100644 printer/laser/fonttab.kyocera.f-1010 create mode 100644 printer/laser/fonttab.nec.lc-08 create mode 100644 printer/laser/genfont.kyocera.f-1010.dynamic1 create mode 100644 printer/laser/genfont.kyocera.f-1010.dynamic2 create mode 100644 printer/laser/laser.inserter create mode 100644 printer/laser/printer.apple.laserwriter create mode 100644 printer/laser/printer.canon.lbp-8 create mode 100644 printer/laser/printer.epson.sq create mode 100644 printer/laser/printer.hp.laserjet create mode 100644 printer/laser/printer.kyocera.f-1010 create mode 100644 printer/laser/printer.nec.lc-08 create mode 100644 printer/laser/readme (limited to 'printer') 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 Binary files /dev/null and b/printer/dotmatrix24/fonttab.brother differ diff --git a/printer/dotmatrix24/fonttab.epson.lq1500 b/printer/dotmatrix24/fonttab.epson.lq1500 new file mode 100644 index 0000000..1b4c6a6 Binary files /dev/null and b/printer/dotmatrix24/fonttab.epson.lq1500 differ diff --git a/printer/dotmatrix24/fonttab.epson.lq850 b/printer/dotmatrix24/fonttab.epson.lq850 new file mode 100644 index 0000000..7a6d2f0 Binary files /dev/null and b/printer/dotmatrix24/fonttab.epson.lq850 differ diff --git a/printer/dotmatrix24/fonttab.nec.p5 b/printer/dotmatrix24/fonttab.nec.p5 new file mode 100644 index 0000000..9910da6 Binary files /dev/null and b/printer/dotmatrix24/fonttab.nec.p5 differ diff --git a/printer/dotmatrix24/fonttab.nec.p5.new b/printer/dotmatrix24/fonttab.nec.p5.new new file mode 100644 index 0000000..9804bd5 Binary files /dev/null and b/printer/dotmatrix24/fonttab.nec.p5.new differ diff --git a/printer/dotmatrix24/fonttab.nec.p6+ b/printer/dotmatrix24/fonttab.nec.p6+ new file mode 100644 index 0000000..b209e81 Binary files /dev/null and b/printer/dotmatrix24/fonttab.nec.p6+ differ diff --git a/printer/dotmatrix24/fonttab.oki b/printer/dotmatrix24/fonttab.oki new file mode 100644 index 0000000..2251e18 Binary files /dev/null and b/printer/dotmatrix24/fonttab.oki differ diff --git a/printer/dotmatrix24/fonttab.toshiba.p321 b/printer/dotmatrix24/fonttab.toshiba.p321 new file mode 100644 index 0000000..452afca Binary files /dev/null and b/printer/dotmatrix24/fonttab.toshiba.p321 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 Binary files /dev/null and b/printer/dotmatrix9/fonttab.1 differ diff --git a/printer/dotmatrix9/fonttab.10 b/printer/dotmatrix9/fonttab.10 new file mode 100644 index 0000000..6a13c49 Binary files /dev/null and b/printer/dotmatrix9/fonttab.10 differ diff --git a/printer/dotmatrix9/fonttab.20 b/printer/dotmatrix9/fonttab.20 new file mode 100644 index 0000000..7cf0aaf Binary files /dev/null and b/printer/dotmatrix9/fonttab.20 differ diff --git a/printer/dotmatrix9/fonttab.20.lc b/printer/dotmatrix9/fonttab.20.lc new file mode 100644 index 0000000..ddf4535 Binary files /dev/null and b/printer/dotmatrix9/fonttab.20.lc differ diff --git a/printer/dotmatrix9/fonttab.20.lx b/printer/dotmatrix9/fonttab.20.lx new file mode 100644 index 0000000..1ce0940 Binary files /dev/null and b/printer/dotmatrix9/fonttab.20.lx differ diff --git a/printer/dotmatrix9/fonttab.7 b/printer/dotmatrix9/fonttab.7 new file mode 100644 index 0000000..676b9a0 Binary files /dev/null and b/printer/dotmatrix9/fonttab.7 differ diff --git a/printer/dotmatrix9/fonttab.7.cxp b/printer/dotmatrix9/fonttab.7.cxp new file mode 100644 index 0000000..0a996f3 Binary files /dev/null and b/printer/dotmatrix9/fonttab.7.cxp differ diff --git a/printer/dotmatrix9/fonttab.7.fuj b/printer/dotmatrix9/fonttab.7.fuj new file mode 100644 index 0000000..1ed83be Binary files /dev/null and b/printer/dotmatrix9/fonttab.7.fuj differ diff --git a/printer/dotmatrix9/fonttab.7.mt b/printer/dotmatrix9/fonttab.7.mt new file mode 100644 index 0000000..c816646 Binary files /dev/null and b/printer/dotmatrix9/fonttab.7.mt 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 Binary files /dev/null and b/printer/laser/fonttab.apple.laserwriter differ diff --git a/printer/laser/fonttab.canon.lbp-8 b/printer/laser/fonttab.canon.lbp-8 new file mode 100644 index 0000000..45314ac Binary files /dev/null and b/printer/laser/fonttab.canon.lbp-8 differ diff --git a/printer/laser/fonttab.epson.sq b/printer/laser/fonttab.epson.sq new file mode 100644 index 0000000..a3f7af3 Binary files /dev/null and b/printer/laser/fonttab.epson.sq differ diff --git a/printer/laser/fonttab.hp.laserjet b/printer/laser/fonttab.hp.laserjet new file mode 100644 index 0000000..4082e46 Binary files /dev/null and b/printer/laser/fonttab.hp.laserjet differ diff --git a/printer/laser/fonttab.kyocera.f-1010 b/printer/laser/fonttab.kyocera.f-1010 new file mode 100644 index 0000000..9c3fbda Binary files /dev/null and b/printer/laser/fonttab.kyocera.f-1010 differ diff --git a/printer/laser/fonttab.nec.lc-08 b/printer/laser/fonttab.nec.lc-08 new file mode 100644 index 0000000..f032953 Binary files /dev/null and b/printer/laser/fonttab.nec.lc-08 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) : + + + + + + -- cgit v1.2.3