123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- (* ETH Oberon, Copyright 2001 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
- Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
- MODULE PrinterInfo IN Oberon; (** portable *) (* ejz *)
- IMPORT Objects, Display, Fonts, Printer, Pictures, Strings, Texts, Oberon, Attributes, Gadgets;
- VAR
- W: Texts.Writer;
- PROCEDURE Int(name: ARRAY OF CHAR; val: LONGINT);
- VAR obj: Objects.Object;
- BEGIN
- obj := Gadgets.FindObj(Gadgets.context, name);
- IF obj # NIL THEN
- Attributes.SetInt(obj, "Value", val);
- Gadgets.Update(obj)
- END
- END Int;
- PROCEDURE FixedStr(val: REAL; VAR str: ARRAY OF CHAR);
- VAR v, i: LONGINT;
- BEGIN
- v := ENTIER(val*100.0+0.5); i := 1;
- IF v >= 1000 THEN
- str[0] := CHR(ORD("0")+v DIV 1000)
- ELSE
- COPY(" ", str)
- END;
- str[i] := CHR(ORD("0")+(v DIV 100) MOD 10); INC(i);
- str[i] := "."; INC(i);
- str[i] := CHR(ORD("0")+(v DIV 10) MOD 10); INC(i);
- str[i] := CHR(ORD("0")+v MOD 10); INC(i);
- str[i] := 0X
- END FixedStr;
- PROCEDURE Fixed(name: ARRAY OF CHAR; val: REAL);
- VAR
- obj: Objects.Object;
- str: ARRAY 8 OF CHAR;
- BEGIN
- obj := Gadgets.FindObj(Gadgets.context, name);
- IF obj # NIL THEN
- FixedStr(val, str);
- Attributes.SetString(obj, "Value", str);
- Gadgets.Update(obj)
- END
- END Fixed;
- PROCEDURE Str(name, val: ARRAY OF CHAR);
- VAR obj: Objects.Object;
- BEGIN
- obj := Gadgets.FindObj(Gadgets.context, name);
- IF obj # NIL THEN
- Attributes.SetString(obj, "Value", val);
- Gadgets.Update(obj)
- END
- END Str;
- PROCEDURE unit(VAR cm: BOOLEAN);
- VAR
- obj: Objects.Object;
- i: LONGINT;
- BEGIN
- obj := Gadgets.FindObj(Gadgets.context, "unit");
- IF obj # NIL THEN
- Attributes.GetInt(obj, "Value", i);
- cm := i = 0
- ELSE
- cm := TRUE
- END
- END unit;
- PROCEDURE PrInfo;
- VAR
- P: Printer.Printer;
- cm: BOOLEAN;
- BEGIN
- unit(cm);
- P := Printer.current;
- IF P # NIL THEN
- Str("driver", P.gen);
- Int("res", 914400 DIV P.Unit);
- IF cm THEN
- Fixed("width", P.Unit*P.Width / 360000.0);
- Fixed("height", P.Unit*P.Height / 360000.0)
- ELSE
- Fixed("width", P.Unit*P.Width / 36000.0 / 25.4);
- Fixed("height", P.Unit*P.Height / 36000.0 / 25.4)
- END
- ELSE
- Str("driver", "no printer installed");
- Fixed("width", 0.0); Fixed("height", 0.0);
- Fixed("res", 0.0)
- END
- END PrInfo;
- PROCEDURE PgInfo;
- VAR
- P: Printer.Printer;
- cm: BOOLEAN;
- BEGIN
- unit(cm);
- P := Printer.current;
- IF P # NIL THEN
- IF cm THEN
- Fixed("left", P.Unit*P.FrameX / 360000.0);
- Fixed("bottom", P.Unit*P.FrameY / 360000.0);
- Fixed("right", P.Unit*(P.Width-P.FrameW-P.FrameX) / 360000.0);
- Fixed("top", P.Unit*(P.Height-P.FrameH-P.FrameY) / 360000.0)
- ELSE
- Fixed("left", P.Unit*P.FrameX / 36000.0 / 25.4);
- Fixed("bottom", P.Unit*P.FrameY / 36000.0 / 25.4);
- Fixed("right", P.Unit*(P.Width-P.FrameW-P.FrameX) / 36000.0 / 25.4);
- Fixed("top", P.Unit*(P.Height-P.FrameH-P.FrameY) / 36000.0 / 25.4)
- END
- ELSE
- Fixed("left", 0.0); Fixed("right", 0.0);
- Fixed("top", 0.0); Fixed("bottom", 0.0)
- END
- END PgInfo;
- PROCEDURE Update*;
- VAR
- S: Texts.Scanner;
- res: INTEGER;
- BEGIN
- Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos);
- Texts.Scan(S);
- IF S.class = Texts.Name THEN
- Oberon.Call(S.s, Oberon.Par, FALSE, res);
- Gadgets.context := Gadgets.context.dlink
- END;
- PrInfo(); PgInfo()
- END Update;
- PROCEDURE Print*;
- VAR
- S: Texts.Scanner;
- fnt: Fonts.Font;
- str: ARRAY 256 OF CHAR;
- printer: ARRAY 64 OF CHAR;
- P: Printer.Printer;
- t, d: LONGINT;
- pict: Pictures.Picture;
- cm1, cm4, left, left1, left2, FrameTop, y, dy, i, r, g, b: INTEGER;
- cm: BOOLEAN;
- BEGIN
- Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos);
- Texts.Scan(S);
- IF S.class IN {Texts.Name, Texts.String} THEN
- COPY(S.s, printer); Texts.Scan(S);
- IF S.class IN {Texts.Name, Texts.String} THEN
- COPY(S.s, str)
- ELSE
- str := ""
- END;
- Strings.AppendCh(str, Oberon.OptionChar);
- Strings.Append(str, "ETH Oberon Printer Test Page");
- Printer.Open(printer, str);
- IF Printer.res = 0 THEN
- P := Printer.current; unit(cm);
- Texts.WriteString(W, "Printing test page on "); Texts.WriteString(W, str);
- Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);
- IF S.s # "" THEN
- Texts.WriteString(W, ", options: "); Texts.WriteString(W, S.s)
- END;
- FrameTop := P.FrameY+P.FrameH;
- Printer.ReplConst(P.FrameX, P.FrameY, P.FrameW, 1);
- Printer.ReplConst(P.FrameX, P.FrameY, 1, P.FrameH);
- Printer.ReplConst(P.FrameX, FrameTop-1, P.FrameW, 1);
- Printer.ReplConst(P.FrameX+P.FrameW-1, P.FrameY, 1, P.FrameH);
- cm1 := SHORT(ENTIER((360000.0 / P.Unit)+0.5));
- left := SHORT(ENTIER(P.FrameX+0.5*cm1+0.5));
- left1 := SHORT(ENTIER(left+0.5*cm1+0.5)); left2 := SHORT(ENTIER(left+3.0*cm1+0.5));
- fnt := Fonts.This("Default24.Scn.Fnt");
- Printer.String(left, SHORT(ENTIER(FrameTop-1.25*cm1+0.5)), "ETH Oberon Printer Test Page", fnt);
- Printer.ReplConst(P.FrameX, SHORT(ENTIER(FrameTop-2.0*cm1+0.5)), P.FrameW, 1);
- y := SHORT(ENTIER(FrameTop-3.0*cm1+0.5)); dy := SHORT(ENTIER(0.5*cm1+0.5));
- fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Printer Information", fnt); DEC(y, dy);
- fnt := Fonts.This("Default12.Scn.Fnt");
- Printer.String(left1, y, "Printer Driver:", fnt);
- Printer.String(left2, y, P.gen, fnt); DEC(y, dy);
- Printer.String(left1, y, "Resolution:", fnt);
- Strings.IntToStr(914400 DIV P.Unit, str); Strings.Append(str, " dpi");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- IF cm THEN
- Printer.String(left1, y, "Page Width:", fnt);
- FixedStr(P.Unit*P.Width / 360000.0, str); Strings.Append(str, " cm");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Page Height:", fnt);
- FixedStr(P.Unit*P.Height / 360000.0, str); Strings.Append(str, " cm");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- ELSE
- Printer.String(left1, y, "Page Width:", fnt);
- FixedStr(P.Unit*P.Width / 36000.0 / 25.4, str); Strings.Append(str, " inch");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Page Height:", fnt);
- FixedStr(P.Unit*P.Height / 36000.0, str); Strings.Append(str, " inch");
- Printer.String(left2, y, str, fnt); DEC(y, dy)
- END;
- y := SHORT(ENTIER(FrameTop-3.0*cm1+0.5)); left := SHORT(ENTIER(P.FrameX+P.FrameW/2.0+0.5));
- left1 := SHORT(ENTIER(left+0.5*cm1+0.5)); left2 := SHORT(ENTIER(left+3.0*cm1+0.5));
- fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Page Setup", fnt);
- fnt := Fonts.This("Default12.Scn.Fnt"); DEC(y, dy);
- IF cm THEN
- Printer.String(left1, y, "Left Margin:", fnt);
- FixedStr(P.Unit*P.FrameX / 360000.0, str); Strings.Append(str, " cm");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Right Margin:", fnt);
- FixedStr(P.Unit*(P.Width-P.FrameW-P.FrameX) / 360000.0, str); Strings.Append(str, " cm");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Bottom Margin:", fnt);
- FixedStr(P.Unit*P.FrameY / 360000.0, str); Strings.Append(str, " cm");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Top Margin:", fnt);
- FixedStr(P.Unit*(P.Height-P.FrameH-P.FrameY) / 360000.0, str); Strings.Append(str, " cm");
- Printer.String(left2, y, str, fnt); DEC(y, dy)
- ELSE
- Printer.String(left1, y, "Left Margin:", fnt);
- FixedStr(P.Unit*P.FrameX / 36000.0 / 25.4, str); Strings.Append(str, " inch");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Right Margin:", fnt);
- FixedStr(P.Unit*(P.Width-P.FrameW-P.FrameX) / 36000.0 / 25.4, str); Strings.Append(str, " inch");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Bottom Margin:", fnt);
- FixedStr(P.Unit*P.FrameY / 36000.0 / 25.4, str); Strings.Append(str, " inch");
- Printer.String(left2, y, str, fnt); DEC(y, dy);
- Printer.String(left1, y, "Top Margin:", fnt);
- FixedStr(P.Unit*(P.Height-P.FrameH-P.FrameY) / 36000.0 / 25.4, str); Strings.Append(str, " inch");
- Printer.String(left2, y, str, fnt); DEC(y, dy)
- END;
- left := SHORT(ENTIER(P.FrameX+0.5*cm1+0.5));
- DEC(y, dy); fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Font Test", fnt);
- DEC(y, dy); DEC(y, dy);
- fnt := Fonts.This("Default10.Scn.Fnt"); Printer.String(left, y, "Default10", fnt);
- fnt := Fonts.This("Default12.Scn.Fnt"); Printer.ContString("Default12", fnt);
- fnt := Fonts.This("Default14.Scn.Fnt"); Printer.ContString("Default14", fnt);
- fnt := Fonts.This("Default16.Scn.Fnt"); Printer.ContString("Default16", fnt);
- fnt := Fonts.This("Default20.Scn.Fnt"); Printer.ContString("Default20", fnt);
- fnt := Fonts.This("Default24.Scn.Fnt"); Printer.ContString("Default24", fnt);
- DEC(y, dy); DEC(y, dy);
- fnt := Fonts.This("Default10i.Scn.Fnt"); Printer.String(left, y, "Default10i", fnt);
- fnt := Fonts.This("Default12i.Scn.Fnt"); Printer.ContString("Default12", fnt);
- fnt := Fonts.This("Default14i.Scn.Fnt"); Printer.ContString("Default14i", fnt);
- fnt := Fonts.This("Default16i.Scn.Fnt"); Printer.ContString("Default16i", fnt);
- fnt := Fonts.This("Default20i.Scn.Fnt"); Printer.ContString("Default20i", fnt);
- fnt := Fonts.This("Default24i.Scn.Fnt"); Printer.ContString("Default24i", fnt);
- DEC(y, dy); DEC(y, dy);
- fnt := Fonts.This("Default10m.Scn.Fnt"); Printer.String(left, y, "Default10m", fnt);
- fnt := Fonts.This("Default12m.Scn.Fnt"); Printer.ContString("Default12m", fnt);
- fnt := Fonts.This("Default14m.Scn.Fnt"); Printer.ContString("Default14m", fnt);
- fnt := Fonts.This("Default16m.Scn.Fnt"); Printer.ContString("Default16m", fnt);
- fnt := Fonts.This("Default20m.Scn.Fnt"); Printer.ContString("Default20m", fnt);
- fnt := Fonts.This("Default24m.Scn.Fnt"); Printer.ContString("Default24m", fnt);
- DEC(y, dy); DEC(y, dy);
- fnt := Fonts.This("Default10b.Scn.Fnt"); Printer.String(left, y, "Default10b", fnt);
- fnt := Fonts.This("Default12b.Scn.Fnt"); Printer.ContString("Default12b", fnt);
- fnt := Fonts.This("Default14b.Scn.Fnt"); Printer.ContString("Default14b", fnt);
- fnt := Fonts.This("Default16b.Scn.Fnt"); Printer.ContString("Default16b", fnt);
- fnt := Fonts.This("Default20b.Scn.Fnt"); Printer.ContString("Default20b", fnt);
- fnt := Fonts.This("Default24b.Scn.Fnt"); Printer.ContString("Default24b", fnt);
- DEC(y, dy);
- DEC(y, dy); fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Font Color Test", fnt);
- DEC(y, dy); DEC(y, dy);
- fnt := Fonts.This("Default12.Scn.Fnt");
- Printer.String(left, y, "", fnt);
- FOR i := 0 TO 15 DO
- Display.GetColor(i, r, g, b);
- Printer.UseColor(r, g, b);
- Strings.IntToStr(i, str); Strings.AppendCh(str, " ");
- Printer.ContString(str, fnt)
- END;
- Printer.UseColor(0, 0, 0);
- DEC(y, dy);
- DEC(y, dy); fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Pattern Test", fnt);
- DEC(y, dy); DEC(y, dy); DEC(y, dy);
- left1 := SHORT(ENTIER(P.FrameX+(P.FrameW-16*cm1)/2.0+0.5));
- FOR i := 0 TO 15 DO
- Printer.ReplPattern(left1+i*cm1, y, cm1, cm1, i)
- END; DEC(y, dy);
- DEC(y, dy); fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Color Test", fnt); DEC(y, dy); DEC(y, cm1);
- cm4 := SHORT(ENTIER((360000.0 / P.Unit / 4.0)+0.5));
- FOR i := 0 TO 255 DO
- Display.GetColor(i, r, g, b);
- Printer.UseColor(r, g, b);
- Printer.ReplConst(left1+(i MOD 64)*cm4, y+(i DIV 64)*cm4, cm4, cm4)
- END;
- Printer.UseColor(0, 0, 0);
- DEC(y, dy); DEC(y, dy); fnt := Fonts.This("Default12m.Scn.Fnt");
- Printer.String(left, y, "Miscellaneous Test", fnt); DEC(y, dy);
- Printer.Line(left1, y-cm1, left1, y); Printer.Line(left1+16*cm1, y-cm1,left1+16*cm1, y);
- Printer.Line(left1, y-cm1, left1+16*cm1, y); Printer.Line(left1, y, left1+16*cm1, y-cm1);
- Printer.Line(left1, y, left1+16*cm1, y); Printer.Line(left1, y-cm1, left1+16*cm1, y-cm1);
- Printer.Circle(left1+8*cm1, SHORT(ENTIER(y-cm1/2.0+0.5)), SHORT(ENTIER(cm1/2.0+0.5)));
- FOR i := 1 TO 8 DO
- Printer.Ellipse(left1+8*cm1, SHORT(ENTIER(y-cm1/2.0+0.5)), i*cm1, SHORT(ENTIER(cm1/2.0+0.5)))
- END;
- NEW(pict); Pictures.Open(pict, "Default.Pict", TRUE);
- Printer.Picture(pict, 0, 0, pict.width, pict.height, left1, SHORT(ENTIER(P.FrameY+1.5*cm1+0.5)), 16*cm1, y-P.FrameY-3*cm1, Display.replace);
- Printer.ReplConst(P.FrameX, P.FrameY+cm1, P.FrameW, 1);
- fnt := Fonts.This("Default12.Scn.Fnt"); str := "Printed on ";
- Strings.Append(str, printer);
- IF S.s # "" THEN
- Strings.Append(str, ", options: "); Strings.Append(str, S.s)
- END;
- Printer.String(left, SHORT(ENTIER(P.FrameY+0.3*cm1+0.5)), str, fnt);
- Oberon.GetClock(t, d);
- Strings.TimeToStr(t, str); Strings.DateToStr(d, printer);
- Strings.AppendCh(str, " "); Strings.Append(str, printer);
- Printer.String(SHORT(ENTIER(Printer.FrameX+P.FrameW-3.5*cm1+0.5)), SHORT(ENTIER(P.FrameY+0.3*cm1+0.5)), str, fnt);
- Printer.Page(1); Printer.Close()
- ELSE
- Texts.WriteString(W, "Printer.Open failed")
- END;
- Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)
- END
- END Print;
- BEGIN
- Texts.OpenWriter(W)
- END PrinterInfo.
- PrinterInfo.Panel
- System.Free PrinterInfo ~
|