(*************************************************************************) (* 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