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