DataMuseum.dk

Presents historical artifacts from the history of:

Regnecentalen RC-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Regnecentalen RC-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦0a5d17a9d⟧ TextFile

    Length: 20369 (0x4f91)
    Types: TextFile
    Notes: UNIX file
    Names: »PostScript.in«

Derivation

└─⟦bee8f15db⟧ Bits:30004169/disk2.imd Uniplex II+ V.6 release 1.0 (dansk)
└─⟦bee8f15db⟧ UNIX Filesystem
    └─⟦this⟧ »up/new/usr/UAP/filters/PostScript.in« 

TextFile

%!PS-Adobe-1.0
%%Title: Uniplex Document Interface
%%CreationDate: 1 jul 1987
%%Creator: Graham Beint, Paul Mahoney, Colin Maclean - Redwood International
%%For: Uniplex Office Automation - Text and Graphics
%%EndComments

% Dictionaries
/WPdict 150 dict def
/GPdict 150 dict def

% Units
/dpi 300 def
/pt {} def
/in { 72 mul pt } bind def
/mm { 25.4 div in } bind def
/dots { dpi div in } bind def

% Utilities
% any array index Put -
/Put { 3 -1 roll put } bind def

% int string cvcs -
/cvcs { dup 0 4 -1 roll put } bind def

% Constants
/newline (\n) def
/space	( ) def
/buff 80 string def
/cbuf 1 string def

/A4	 { 210 mm 297 mm } bind def
/A5	 { 149 mm 210 mm } bind def
/US	 { 8.5 in 11 in } bind def
/filofax { 3.75 in 6.75 in } bind def	% filofax (R) is a registered trademark
/UShalf	 { 5.5 in 8.5 in } bind def
/USlegal { 8.5 in 11 in } bind def
/letter	 { US } bind def
/note	 { UShalf } bind def
/legal	 { USlegal } bind def
/wallet  { filofax } bind def

% Variables
/Globals 20 array def
/Face	{ Globals  0 } def	% Index of typeface in use
/Style	{ Globals  1 } def	% Index of typestyle in use
/Size	{ Globals  2 } def	% Index of typesize in use
/Char_W	{ Globals  3 } def	% Active space width increment
/Line_H	{ Globals  4 } def	% Active line height
/Ulin_W { Globals  5 } def	% Weight of underlines
/Ulin_H { Globals  6 } def	% Height of underlines
/Ulin_N	{ Globals  7 } def	% Number of underlines
/Page_W { Globals  8 } def	% Page width
/Page_H { Globals  9 } def	% Page height
/Marg_T { Globals 10 } def	% Margin at Top
/Marg_L { Globals 11 } def	% Margin at Bottom
/Graf_N	{ Globals 12 } def	% Graphics pattern number
/Shades { Globals 13 } def	% Shaded text flag
/Landscape { Globals 14 } def	% Landscape flag

/SAVE { /VMsave save def } def
/RESTORE
{
    Globals aload /#copies #copies VMsave restore def astore
} def

/Filldict 12 dict def
    Filldict begin
    /Msave		matrix		def
    /Mdots	1 dup	matrix scale	def
    /Mbits		matrix 		def
    /Fbits 32 def
    /Fvars	5	array		def
    /Farg	{ Fvars 0 } def
    /Fx0	{ Fvars 1 } def
    /Fy0	{ Fvars 2 } def
    /Fx1	{ Fvars 3 } def
    /Fy1	{ Fvars 4 } def
    /Fmap	[ 0 1 2 3 4 5 6 7 0 9 10 11 12 13 14 9 10 14 ] def
    /Fpats
    [
% none
{ <00> }

% solid
{ <ff> }

% horizontal
{ <000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff> }

% +45
{ <003f803f007f007f00fe00fe01fc01fc03f803f807f007f00fe00fe01fc01fc03f803f807f007f00fe00fe00fc01fc01f803f803f007f007e00fe00fc01fc01f003f803f007f007f00fe00fe01fc01fc03f803f807f007f00fe00fe01fc01fc03f803f807f007f00fe00fe00fc01fc01f803f803f007f007e00fe00fc01fc01f> }

% vertical
{ <f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000> }

% +135
{ <7f007f003f803f801fc01fc00fe00fe007f007f003f803f801fc01fc00fe00fe007f007f803f803fc01fc01fe00fe00ff007f007f803f803fc01fc01fe00fe007f007f003f803f801fc01fc00fe00fe007f007f003f803f801fc01fc00fe00fe007f007f803f803fc01fc01fe00fe00ff007f007f803f803fc01fc01fe00fe00> }

% +grid
{ <f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000fffffffffffffffffffffffffffffffff000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000ffffffffffffffffffffffffffffffff> }

% xgrid
{ <ff3fff3f3fff3fff1ffe1ffe0ffc0ffc07f807f807f807f80ffc0ffc1ffe1ffe3fff3fffff3fff3ffe1ffe1ffc0ffc0ff807f807f807f807fc0ffc0ffe1ffe1fff3fff3f3fff3fff1ffe1ffe0ffc0ffc07f807f807f807f80ffc0ffc1ffe1ffe3fff3fffff3fff3ffe1ffe1ffc0ffc0ff807f807f807f807fc0ffc0ffe1ffe1f> }

% hollow
{ <00> }

% brick
{ <fffffffffffffffffffffffffffffffff0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000ffffffffffffffffffffffffffffffff0000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000> }

% scales
{ <000f3ff0000f0ff8000f03fc000f00fc001f007e001f003e003e001f007e001f00fc000f03fc000f0ff8000f3ff0000fffc0000fff00000fff00000fffc0000f3ff0000f0ff8000f03fc000f00fc000f007e001f003e001f001f003e001f007e000f00fc000f03fc000f0ff8000f3ff0000fffc0000fff00000fff00000fffc0> }

% weave
{ <fc03e003f801f001f001f801e003fc03c007fe07800fff0f001fff9f003ffffe007ffffc00fffff801fffff003ffffe007ffffc00f9fff801f0fff003e07fe007c03fc00f801f800f800f801fc007c03fe003e07ff001f0fff800f9fffc007ffffe003fffff001fffff800fffffc007ffffe003fff9f001fff0f800ffe07c007> }

% chess
{ <ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00000000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff> }

% lozenge
{ <000180000003c0000007e000000ff000001ff800003ffc00007ffe0000ffff0001ffff8003ffffc007ffffe00ffffff01ffffff83ffffffc7ffffffefffffffe7ffffffe3ffffffc1ffffff80ffffff007ffffe003ffffc001ffff8000ffff00007ffe00003ffc00001ff800000ff0000007e0000003c0000001800000000000> }

% frieze
{ <000000000000000000000000000000000fffffff0fffffff0fffffff0fffffff0f00000f0f00000f0f00000f0f00000f0f0fff0f0f0fff0f0f0fff0f0f0fff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0fff0f0f0fff0f0f0fff0f0f0fff0f0f00000f0f00000f0f00000f0f00000f0fffffff0fffffff0fffffff0fffffff0f> }

    ] def
    end

/Fill
{
    Filldict begin
    Fmap length mod dup 8 eq { pop 0 } if
    Farg Put
    Farg get 2 ge
    {
	gsave clip Msave currentmatrix
	gsave 1 setgray fill grestore			% Opaque fills
	Mdots setmatrix
	Farg get Fpats length ge { 90 rotate } if	% Rotated patterns
	Landscape get { 90 rotate } if
	pathbbox					% Enclosing rectangle
	3 index 2 index gt { 4 2 roll } if
	2 index 1 index gt { 3 1 roll exch } if

	Fbits div ceiling cvi Fbits mul Fy1 Put	% Ensure integral tiles
	Fbits div ceiling cvi Fbits mul Fx1 Put
	Fbits div 0.9 sub cvi Fbits mul Fy0 Put
	Fbits div 0.9 sub cvi Fbits mul Fx0 Put

	Fx0 get Fy0 get translate
	Fbits Fy1 get Fy0 get sub true Mbits
	Fpats Fmap Farg get get get
	Fx1 get Fx0 get sub
	Fbits div ceiling cvi
	{ 5 copy imagemask Fbits 0 translate } repeat 5 { pop } repeat

	setmatrix grestore
    }
    {
	Farg get 1 eq { fill } if
    } ifelse
    end
} bind def

/Founts
    [
	[ /Symbol /Symbol /Symbol /Symbol ]
	[ /Courier-BoldOblique /Courier /Courier-Bold /Courier-Oblique ]
	[ /Times-BoldItalic /Times-Roman /Times-Bold /Times-Italic ]
	[ /Helvetica-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique ]
    ] def
/SYMBOL		0 def
/COURIER	1 def
/TIMES		2 def
/HELVETICA	3 def
/BoldItalic	0 def
/Roman		1 def
/Bold		2 def
/Italic		3 def

/ColourArray
[
  [1 1 1]		    % white
  [1 0 0]		    % red
  [1 1 0]		    % yellow
  [0 1 0]		    % green
  [0 1 1]		    % cyan
  [0 0 1]		    % blue
  [1 0 1]		    % magenta
  [0 0 0]		    % black
  [1 1 1]		    % white
] def

% Procedures

% Founts
/Setfount { exch Founts exch get exch get findfont } def

% ================ Uniplex WP Support =============================

WPdict begin

/Selfount
{
    Face get Style get
    Setfount Size get scalefont setfont
} bind def

/Selital
{
    Face get Style get
    dup Roman eq { pop Italic } { dup Bold eq { pop BoldItalic } if } ifelse
    Setfount Size get scalefont setfont
} bind def

/Selspace
{
    Char_W space stringwidth pop put
} bind def
% Painting
/Box { moveto 3 { lineto } repeat closepath } bind def

/Quad { 4 copy 5 -2 roll exch } bind def

/Shade { setgray currentpoint fill moveto } bind def

% Text

/Stringshow
{
    Char_W get space stringwidth pop sub 0 32 4 -1 roll widthshow
} bind def

/Textshow
{
    0 Shades get lt
    {
	currentpoint 2 index 1 Shades get le
	{
	    % 1 <= Shades
	    0 setgray
	    0.4 0 rmoveto 2 Shades get le
	    {
		% 2 <= Shades
		Shades get 2 sub setgray
	    }
	    {
		% 1 <= Shades < 2
		Shades get 1 sub setgray
		currentpoint 2 index 0.3 0 rmoveto Stringshow moveto
		1 setgray
	    } ifelse
	    Stringshow
	}
	{
	    % 0 < Shades < 1
	    0 setgray
	    gsave currentpoint newpath moveto Stringshow
	    2 copy currentpoint Size get
	    dup -4 div dup 6 -1 roll add 5 1 roll 3 -1 roll add 2 1 roll
	    add newpath Quad Box
	    Shades get Shade grestore
	} ifelse
	newpath moveto
    } if
    0 setgray Stringshow
} bind def

/Secpost (\n#postscript:) def
/Secends (\n\)\)\n\f) def
/Sechigh (\nHIGHT= ) def
/Secwide (\nOTHER= ) def
/Secnumb (\nDIGIT= ) def
/Secsize (\nSIZES= ) def
/Seccheq (=) def
/Secstar (*) def
/Seccomm (,) def

/Fpad
{
    1 index length sub { space print } repeat print
} bind def

/Fval
{
    cbuf cvcs stringwidth pop		% Character width
    1 in div 12000 mul			% From points to 1/12000 in
    ceiling cvi buff cvs
} bind def

/Frow
{
    Secsize 4
    {
	print dup buff cvs 4 Fpad Seccheq print dup Fval 4 Fpad 1 add Seccomm
    } repeat pop
} bind def

/FCAP
{
    mark
    Secstar
    newline print 40 { dup print } repeat
    newline print dup print space print
    Founts Face get get Style get get buff cvs print space print
    Size get buff cvs print
    newline print 40 { dup print } repeat
    pop newline print
    Secpost print
    Sechigh print Size get 72 div 48 mul ceiling cvi buff cvs 4 Fpad
    Secwide print 0 Fval 4 Fpad
    Secnumb print 48 Fval 4 Fpad
    32 4 127 { Frow pop } for
    160 4 255 { Frow pop } for
    Secends print
    cleartomark
} bind def

% Interface

/SETF { Size Put Style Put Face Put Selfount Selspace } bind def

/TE
{
    dup type /stringtype eq
    {
	dup length 0 ne
	{
	    0 setgray Ulin_N get 0 eq
	    {
		Textshow
	    }
	    {
		currentlinewidth exch Ulin_W get setlinewidth
		currentpoint 3 -1 roll
		Textshow currentpoint 4 2 roll Ulin_N get dup
		{
		    5 copy neg Ulin_H get mul dup 5 -1 roll add 4 1 roll add
		    newpath moveto lineto stroke 1 sub
		} repeat
		3
		{
		    pop
		} repeat
		moveto
		setlinewidth
	    } ifelse
	}
	{
	    pop
	} ifelse
    } if
} bind def

/Supscale [ 1 0 0 0.75 0  3 ] def
/Subscale [ 1 0 0 0.75 0 -1 ] def
/SUPS	{ TE currentfont Supscale makefont setfont } def
/SUPE	{ TE Selfount } bind def
/SUBS	{ TE currentfont Subscale makefont setfont } def
/SUBE	{ TE Selfount } bind def
/SHB	{ exch TE Shades Put } bind def
/SHE	{ 0 SHB } bind def

/X	{ dpi div in     } bind def
/Y	{ dpi div in neg } bind def
/U	{ dpi div in exch TE 0 exch rmoveto } bind def
/H	{ dpi div in exch TE     Char_W Put } bind def
/V	{ dpi div in exch TE neg Line_H Put } bind def

/P	{ TE currentpoint } bind def
/M	{ TE moveto } bind def
/G	{ TE currentpoint newpath moveto } bind def
/E	{ currentpoint 2 copy
	2 { exch 5 -1 roll add } repeat Quad Box } bind def
/N	{ Graf_N Put } bind def
/F	{ Graf_N get Fill } bind def
/S	{ 10 dup Graf_N get sub exch div Shade } bind def
/B	{ 0 Shade } bind def

/UOFF	{ TE Ulin_N 0 put } bind def
/ULIN	{ TE Ulin_N 1 put } bind def
/UDBL	{ TE Ulin_N 2 put } bind def

/Newpage
{
    Selfount
    Landscape get { 90 rotate 0 Page_H get neg translate } if
    Marg_L get Page_H get US exch pop sub translate % Assume US for graphics
    0 US exch pop Marg_T get sub moveto
} def

/PAGE
{
    SAVE
    Newpage
} def

/FF
{
    TE
    RESTORE
    showpage
} def
/R	{ TE 0 currentpoint exch pop moveto } bind def
/L	{ TE 0 Line_H get rmoveto } bind def

/TIME10R	{ TE TIMES     Roman  10 SETF } bind def
/TIME10B	{ TE TIMES     Bold   10 SETF } bind def
/TIME10I	{ TE TIMES     Italic 10 SETF } bind def
/TIME08R	{ TE TIMES     Roman   8 SETF } bind def
/HELV14B	{ TE HELVETICA Bold   14 SETF } bind def
/HELV10R	{ TE HELVETICA Roman  10 SETF } bind def
/HELV08R	{ TE HELVETICA Roman   8 SETF } bind def
/COUR12R	{ TE COURIER   Roman  12 SETF } bind def
/COUR08R	{ TE COURIER   Roman   8 SETF } bind def

/NORMAL		{ TIME10R } bind def
/BOLD		{ TIME10B } bind def
/ITALIC		{ TIME10I } bind def
/SMALL		{ TIME08R } bind def
/LARGE		{ HELV14B } bind def
/PS-NORMAL	{ HELV10R } bind def
/PS-SMALL	{ HELV08R } bind def
/FX-NORMAL	{ COUR12R } bind def
/FX-SMALL	{ COUR08R } bind def

end

%  Uniplex Graphics Support  ==========================

GPdict begin

/CTM matrix def

%  local LaserWriter path procedures  =================

%  x y w h rectpath -
/rectpath
{
    CTM currentmatrix 5 1 roll
    4 2 roll translate
    exch 2 copy 0 0 0 0 8 1 roll
    moveto lineto lineto lineto 
    closepath
    setmatrix
} def

%  [x1 y1 .... xn yn] polypath -
/polypath
{
    /co_ords exch def		    % save the co_ords array
    co_ords length 0 gt		    % check length > 0
    {
      co_ords length 2 mod 0 gt	    % check length is even
      { (%%[ Error: odd number of co-ords : polypath ]%%) print }
      {
	co_ords length 1 sub -1 0
	{ co_ords exch get } for	% => yn xn .. y1 x1
	2 copy exch moveto		% move to first co_ord
	co_ords length 2 idiv		% calculate number of points to go
	{ exch lineto } repeat
      } ifelse
    } if
} def

%  [x1 y1 .... xn yn] markpath -
/markpath
{
    /co_ords exch def		    % save the co_ords array
    co_ords length 0 gt		    % check length > 0
    {
      co_ords length 2 mod 0 gt	    % check length is even
      { (%%[ Error: odd number of co-ords : markpath ]%%) print }
      {
	co_ords length 1 sub -1 0
	{ co_ords exch get } for	% => yn xn .. y1 x1
	2 copy exch moveto		% move to first co_ord
	co_ords length 2 idiv		% calculate number of points to go
	{ exch moveto MarkIt } repeat	% move to point and place mark
      } ifelse
    } if
} def

% ====================== Short Utility Routines ============================

%  - FillPath -
/FillPath { CFillPattern Fill } def

%  - MarkIt -
/MarkIt
{
    CMarkSize 0 ne
    {
	gsave
	CLineWidth 2 SetLineWidth	    % poke current line width
	currentpoint translate		    % make mark point the origin
	1 setlinecap			    % round ends shows points!
	CMarkSize dup scale
	newpath CMarkStyle		    % this is the proc to draw mark
	1 CMarkSize div dup scale
	stroke
	SetLineWidth			    % restore line width from stack
	grestore
    } if
} def


% ====================  RGIP/Postscript Declarations  =======================

/DashArray
  []			    % solid
  []			    % solid
  [8 4]			    % dash
  [1 3]			    % dot
  [3 2 1 2]		    % dash dot
  [4 4]			    % dash dash
  [3 2 1 2 1 2]		    % dash dot dot
  [1 2 3 2 3 2]		    % dot dash dash
  [1 2]			    % dot dot
  9 array astore def

/MarkArray
[
  { -2 -3 moveto 2 -3 lineto -2 3 lineto 2 3 lineto closepath }   % vert bow
  { 0  0 1 0 360 arc }						  % point
  { -3 0 moveto 3 0 lineto 0 -3 moveto 0 3 lineto }		  % plus
  { 3 { -3 0 moveto 3 0 lineto 60 rotate } repeat }		  % star
  { -3 -3 moveto 3 -3 lineto 3 3 lineto -3 3 lineto closepath }	  % square
  { 45 rotate -3 0 moveto 3 0 lineto 0 -3 moveto 0 3 lineto }	  % multiply
  { 0 -4 moveto 3 0 lineto 0 4 lineto -3 0 lineto closepath }	  % diamond
  { -3 -2 moveto -3 2 lineto 3 -2 lineto 3 2 lineto closepath }   % horz bow
] def

% /CTextVector    0 def
% /CFillPattern   0 def
% /CLineWidth	1 def
% /CLineStyle	0 def
% /CFontFace	1 def
% /CFontType	0 def
% /CFontSize	1 def
% /CMarkStyle	{} def
% /Background	0 def	    /Foreground	7 def
% /CColour	7 def

% /Vport_x	0.5 def	    % viewport x co-ord
% /Vport_y	0.5 def	    % viewport y co-ord
% /Vport_w	7.0 def	    % viewport width
% /Vport_h	7.0 def	    % viewport height

/SWin_minx	0     def   % window min x
/SWin_maxx	10000 def   % window max x
/SWin_miny	0     def   % window min y
/SWin_maxy	10000 def   % window max y

% ======================  RGIP/Postscript commands  ==========================

%  x y w h EraseArea -
/EraseArea
{
    newpath gsave rectpath ColourArray Background get aload pop setrgbcolor fill
    grestore
} def

%  - EraseViewport -
/EraseViewport
{
    newpath gsave clippath ColourArray Background get aload pop setrgbcolor fill
    grestore
} def

% (string) TLength
/TLength { length CFontSize 300 mul 7 12 div mul mul } bind def

% (string) TScale
/TScale { dup TLength 1 index stringwidth pop sub exch length div 0 } bind def

%  x y hjust (string) TextAbs -
/TextAbs
{
    4 2 roll			% => hjust (string) x y
    moveto			% => hjust (string)
    dup TLength 2 div		% => hjust (string) width/2
    3 -1 roll			% => (string) width/2 hjust
    gsave
      CTextVector rotate
      3 {
	2 copy 0 gt
	{neg 0 rmoveto 1 sub}
	{pop} ifelse
      } repeat pop pop
      dup TScale 3 -1 roll ashow
    grestore
} def

% angle TextBaseline -
/TextBaseline { cvi 360 mod /CTextVector exch def } def

%  num SetLineStyle -
/SetLineStyle
{
    9 mod abs /CLineStyle exch def
    [ DashArray CLineStyle get { CLineWidth 3 mul mul abs } forall ]
    0 setdash
} def

%  w SetLineWidth -
/SetLineWidth { dup /CLineWidth exch def 3 mul abs setlinewidth } def

%  face type size SetFontStyle -
/SetFontStyle
{
    abs /CFontSize exch def
    Founts 0 get length mod abs /CFontType exch def
    Founts length mod abs /CFontFace exch def
    CFontFace CFontType Setfount CFontSize 300 mul scalefont setfont
} def

%  num SetColour -
/SetColour
{
    9 mod abs dup /CColour exch def ColourArray exch get aload pop setrgbcolor
} def

% num SetMarkStyle -
/SetMarkStyle
{
    MarkArray length mod abs MarkArray exch get /CMarkStyle exch def
} def

% size SetMarkSize -
/SetMarkSize { dup 0 ne { 1 add 150 mul } if 8 div /CMarkSize exch def } def

% sx sy ex ey lw lstyle lcolour LINE -
/LINE
{
    SetColour SetLineStyle SetLineWidth
    4 2 roll newpath moveto lineto currentpoint stroke moveto
} def

% x y w h lw lstyle lcolour fstyle fcolour BOX -
/BOX
{
    9 -4 roll newpath rectpath SetColour gsave Fill grestore
    SetColour SetLineStyle dup SetLineWidth 0 gt { stroke } if
} def

% x y msize mstyle mcolour MARK -
/MARK { SetColour SetMarkStyle SetMarkSize moveto MarkIt } def


% cx cy rad s_ang sweep lw lstyle lcolour fstyle fcolour SEGMENT -
/SEGMENT
{
    10 5 roll 2 copy pop add newpath 4 index 4 index moveto
    arc closepath SetColour gsave Fill grestore
    SetColour SetLineStyle dup SetLineWidth 0 gt { stroke } if
} def

% cx cy rad s_ang sweep lw lstyle lcolour fstyle fcolour ARC -
/ARC
{
    10 5 roll 2 copy pop add newpath
    arc SetColour gsave closepath Fill grestore
    SetColour SetLineStyle dup SetLineWidth 0 gt { stroke } if
} def

% [x1 y1 ... xn yn] lw lstyle lcolour fstyle fcolour POLY -
/POLY
{
    6 5 roll newpath
    polypath SetColour gsave closepath Fill grestore
    SetColour SetLineStyle dup SetLineWidth 0 gt { stroke } if
} def

% x y hjust rot (string) face type size colour TEXT -
/TEXT { SetColour SetFontStyle exch TextBaseline TextAbs } def

%    x y w h SetViewport -
/SetViewport
{
  /Vport_h exch def
  /Vport_w exch def
  /Vport_y exch def
  /Vport_x exch def

  grestoreall

  1 in dup scale % convert to inches scale

  newpath Vport_x Vport_y Vport_w Vport_h rectpath clip newpath
  Vport_x Vport_y translate

  Vport_w SWin_maxx SWin_minx sub div	    % x scale
  Vport_h SWin_maxy SWin_miny sub div	    % y scale
  scale

  SWin_minx neg SWin_miny neg translate
} def

%    x_min y_min x_max y_max SetWindow -
/SetWindow
{
  /SWin_maxy exch def
  /SWin_maxx exch def
  /SWin_miny exch def
  /SWin_minx exch def
  Vport_x Vport_y Vport_w Vport_h SetViewport
} def

%    -- Initialise -
/Initialise
{
    grestoreall
    % set default graphics state

    0.5 0.5 7.0 7.0	SetViewport
    0 0 10000 10000	SetWindow

    0 0 1		SetFontStyle

    0			TextBaseline
    1			SetLineWidth
    7			SetColour
    0			SetLineStyle
} def

Initialise

end

/OPEN { end save GPdict begin } bind def
/CLOSE { end restore WPdict begin } bind def

% - Open -
/Open { OPEN } bind def

%    -- Close -
/Close { CLOSE showpage } bind def

/GB
{
    TE gsave OPEN
    /Open {} def /Initialise {} def /Close {} def
} bind def
/GE	{ CLOSE grestore } bind def

/DEINIT { clear end } bind def
/INIT
{
    erasepage initgraphics mark

    WPdict begin

    Face	TIMES	put
    Style	Roman	put
    Size	10	put
    Char_W	0	put
    Line_H	-12	put
    Ulin_W	0.25	put
    Ulin_H	1	put
    Ulin_N	0	put
    Page_W	US
    Page_H		Put put
    Marg_T	0.5 in	put
    Marg_L	0.3 in	put
    Shades	0	put
    Landscape	false	put

    userdict /PAPER known
    {
	PAPER
	Landscape Put
	Marg_T Put Marg_L Put
	Landscape get { exch } if
	Page_H Put Page_W Put
    } if
} def

%%EndProlog

INIT