



		    x9700_doc.compdv                04/23/85  1300.0r w 04/23/85  0912.0      311814



/* Compose Device Table for the Xerox 9700 Electronic Printing System */
/*  implements the devices:
	x9700_pr
	x9700_doc
*/
/* Written September 1981 by C. Hornig */
/* revised for use with J. S. Love's writer program March 1983 by MST */
/* Modified:  6/83 - EJW - Added x9700_doc device, changed Wordspace values */
/* Modified: 11/84 - EJW - Changed Strokes from 10000 to 100 */

Strokes:		100;
Wordspace:	18, 46, 92, EN;

MediaChars:	BS	010,
		FF	014,
		EMdash	020,
		ENdash	021,
		HUGE	022,
		EM	023,
		THICK	024,
		MEDIUM	025,
		THIN	026,
		HAIR	027,
		DEVIT	027,
		STROKE	030,
		EN	040,
		PAD	177,
		014	SELF,	/* Formfeed */
		020:040	SELF,
		"!":"~"	SELF,
		177	SELF,
		200:413	SELF,
		414	040,
		415:776	SELF;

/* Monospace, fixed width fonts */
/*              small_typ       typ   symbols */
Media:	       Mp0612m,  Mp07tdm,  Mp07sym;
          BS         -44,      -50,      -50;
          FF           0,        0,        0;
          014          0,        0,        0;
	020:021     44,	  50,	  50;
          HUGE          ,         ,         ;
          022           ,         ,         ;
          EM         120,       92,       92;
          023        120,       92,       92;
          EN          44,       50,       50;
          414         44,       50,       50;
          040         44,       50,       50;
          THICK       22,       30,       30;
          024         22,       30,	  30;
          MEDIUM       8,       24,       24;
          025          8,       24,       24;
          THIN          ,         ,       50;
          026           ,         ,       50;
          HAIR          ,         ,       50;
          DEVIT         ,         ,       50;
          027           ,         ,       50;
          STROKE       2,        2,        2;
          030          2,        2,        2;
	031:037	  44,	  50,	  50;
          "!":"~"     44,       50,       50;
          177          0,        0,        0;
          PAD          0,        0,        0;
          200:225     44,       50,       50;

/* Press Roman proportional fonts */
/*                 small      text      bold    head14    head18 */
Media:           Mpr110m,  Mpr111m,  Mpr211m,  Mpr114m,   Mpr118;
          BS         -46,      -46,      -46,      -62,      -76;
          FF           0,        0,        0,        0,        0;
          EMdash	    ,       92,         ,         ,         ;
          020           ,       92,         ,         ,         ;
          ENdash	    ,       46,         ,         ,         ;
          021           ,       46,         ,         ,         ;
          HUGE       240,      230,      260,         ,         ;
          022        240,      230,      260,         ,         ;
          EM          92,       92,       92,      124,      150;
          023         92,       92,       92,      124,      150;
          EN          46,       46,       46,       62,       76;
          414         46,       46,       46,       62,       76;
          040       46,     46,     46,     62,     76;
          THICK     30,     30,     30,     42,     50;
          024       30,     30,     30,     42,     50;
          MEDIUM    24,     24,     24,     32,     38;
          025       24,     24,     24,     32,     38;
          THIN        18,       18,       18,       24,       30;
          026         18,       18,       18,       24,       30;
          HAIR         8,        8,        8,       10,       12;
          DEVIT        8,        8,        8,       10,       12;
          027          8,        8,        8,       10,       12;
          STROKE       2,        2,        2,        2,         ;
          030          2,        2,        2,        2,         ;
          031:035       ,       50,         ,         ,         ;
          036         64,       66,       70,         ,         ;
          037         68,       66,       68,         ,         ;
          "!"         20,       24,       24,       34,         ;
          """"        42,       38,       40,       50,         ;
          "#"         68,       70,       64,         ,         ;
          "$"         48,       44,       44,         ,         ;
          "%"         68,       64,       64,         ,         ;
          "&"         64,       70,       70,      100,         ;
          "'"         22,       24,       24,       24,         ;
          "("         36,       30,       24,       42,         ;
          ")"         36,       30,       24,       42,         ;
          "*"         42,       44,       44,         ,         ;
          "+"       46,     44,     74,         ,         ;
          ","       26,     24,     24,     24,     40;
          "-"       38,     48,     56,     48,     68;
          "."       24,     24,     24,     20,     40;
          "/"       36,     56,     56,     50,     62;
          "0"       48,     42,     48,     62,     76;
          "1"       48,     42,     48,     62,     76;
          "2"       48,     42,     48,     62,     76;
          "3"       48,     42,     48,     62,     76;
          "4"       48,     42,     48,     62,     76;
          "5"       48,     42,     48,     62,     76;
          "6"       48,     42,     48,     62,     76;
          "7"       48,     42,     48,     62,     76;
          "8"       48,     42,     48,     62,     76;
          "9"       48,     42,     48,     62,     76;
          ":"         22,       24,       24,       24,         ;
          ";"         26,       24,       24,       24,         ;
          "<"           ,       50,         ,         ,         ;
          "="         46,       50,       68,         ,         ;
          ">"           ,       50,         ,         ,         ;
          "?"         38,       38,       40,       64,         ;
          "@"       62,     84,     86,         ,         ;
          "A"       64,     64,     70,     90,    108;
          "B"       56,     52,     58,     78,     92;
          "C"       58,     60,     60,     80,     98;
          "D"       64,     68,     66,     90,    110;
          "E"       54,     56,     58,     78,     92;
          "F"       50,     54,     56,     72,     88;
          "G"       62,     70,     66,     96,    110;
          "H"       64,     68,     70,     88,    108;
          "I"       40,     34,     42,     40,     56;
          "J"       36,     36,     46,     52,     60;
          "K"       62,     68,     70,     92,    110;
          "L"       56,     54,     58,     70,     94;
          "M"       80,     86,     90,    110,    136;
          "N"       66,     68,     68,     86,    110;
          "O"       62,     66,     70,     92,    106;
          "P"       52,     50,     58,     70,     88;
          "Q"       60,     66,     70,     92,    106;
          "R"       58,     62,     64,     84,     98;
          "S"       46,     44,     48,     62,     74;
          "T"       56,     54,     58,     80,     94;
          "U"       66,     68,     68,     92,    110;
          "V"       62,     62,     72,     92,    104;
          "W"       82,     82,     96,    120,    134;
          "X"       56,     64,     66,     92,    110;
          "Y"       58,     62,     70,     82,    104;
          "Z"       54,     54,     58,     82,     96;
          "["           ,     50,         ,         ,         ;
          "\"           ,     50,         ,         ,         ;
          "]"           ,     50,         ,         ,         ;
          "^"           ,     50,         ,         ,         ;
          "_"       64,     50,     84,         ,         ;
          "`"       46,     50,     42,         ,         ;
          "a"       40,     40,     48,         ,         ;
          "b"       44,     48,     48,         ,         ;
          "c"       42,     40,     40,         ,         ;
          "d"       44,     48,     48,         ,         ;
          "e"       38,     40,     40,         ,         ;
          "f"       34,     38,     36,         ,         ;
          "g"       44,     42,     44,         ,         ;
          "h"       42,     48,     54,         ,         ;
          "i"       26,     26,     28,         ,         ;
          "j"       32,     28,     32,         ,         ;
          "k"       44,     48,     56,         ,         ;
          "l"       28,     26,     28,         ,         ;
          "m"       68,     72,     80,         ,         ;
          "n"       44,     48,     54,         ,         ;
          "o"       44,     46,     46,         ,         ;
          "p"       44,     48,     46,         ,         ;
          "q"       46,     46,     44,         ,         ;
          "r"       34,     36,     40,         ,         ;
          "s"       34,     32,     36,         ,         ;
          "t"       28,     30,     34,         ,         ;
          "u"       46,     46,     50,         ,         ;
          "v"       44,     44,     46,         ,         ;
          "w"       66,     62,     72,         ,         ;
          "x"       44,     42,     54,         ,         ;
          "y"       42,     44,     52,         ,         ;
          "z"       40,     42,     40,         ,         ;
          "{"           ,     50,         ,         ,         ;
          "|"           ,     50,         ,         ,         ;
          "}"           ,     50,         ,         ,         ;
          "~"           ,     50,         ,         ,         ;
          177          0,        0,        0,        0,        0;
          PAD          0,        0,        0,        0,        0;
          200:225       ,     50,         ,         ,         ;

/* Univers Proportional Fonts */
Media:           Mun110m,  Mun510m,  Mun111v,  Mun111d,  Mun211m;
          BS         -44,      -46,      -46,      -46,      -50;
          FF           0,        0,        0,        0,        0;
          EMdash	    ,         ,       92,         ,         ;
          020           ,         ,       92,         ,         ;
          ENdash	    ,         ,       46,         ,         ;
          021           ,         ,       46,         ,         ;
          HUGE       250,      230,      230,         ,      240;
          022        250,      230,      230,         ,      240;
          EM          86,       92,       92,       92,      100;
          023         86,       92,       92,       92,      100;
          EN        44,     46,     46,     46,     50;
          414       44,     46,     46,     46,     50;
          040       44,     46,     46,     46,     50;
          THICK     28,     30,     30,     30,     34;
          024       28,     30,     30,     30,     34;
          MEDIUM    22,     24,     24,     24,     26;
          025       22,     24,     24,     24,     26;
          THIN      18,     18,     18,     18,     20;
          026       18,     18,     18,     18,     20;
          HAIR         8,        8,        8,        8,        8;
          DEVIT        8,        8,        8,        8,        8;
          027          8,        8,        8,        8,        8;
          STROKE       2,        2,        2,         ,        2;
          030          2,        2,        2,         ,        2;
          031:035       ,         ,       50,         ,         ;
          036       60,     64,     50,     50,     62;
          037       62,     70,     50,     50,     68;
          "!"       16,     36,     20,     20,     20;
          """"      30,     48,     48,     48,     28;
          "#"       50,     60,     52,     52,     50;
          "$"       42,     50,     56,     56,     52;
          "%"       62,     70,     72,     72,     62;
          "&"       60,     64,     72,     72,     68;
          "'"       16,     24,     24,     24,     16;
          "("       20,     28,     24,     24,     24;
          ")"       20,     32,     24,     24,     24;
          "*"       42,     50,     46,     46,     48;
          "+"       54,     62,     44,     44,     48;
          ","       22,     24,     26,     26,     24;
          "-"       56,     48,     36,     36,     48;
          "."       16,     24,     22,     22,     20;
          "/"       34,     30,     28,     28,     36;
          "0"       56,     50,     50,     50,     52;
          "1"       56,     50,     50,     50,     52;
          "2"       56,     50,     50,     50,     52;
          "3"       56,     50,     50,     50,     52;
          "4"       56,     50,     50,     50,     52;
          "5"       56,     50,     50,     50,     52;
          "6"       56,     50,     50,     50,     52;
          "7"       56,     50,     50,     50,     52;
          "8"       56,     50,     50,     50,     52;
          "9"       56,     50,     50,     50,     52;
          ":"       16,     32,     22,     22,     20;
          ";"       22,     32,     24,     24,     26;
          "<"           ,         ,     50,     50,         ;
          "="       56,     60,     44,     44,     42;
          "?"       38,     40,     40,     40,     40;
          ">"           ,         ,     50,     50,         ;
          "@"       68,     64,     66,     66,     62;
          "A"       62,     60,     70,     70,     60;
          "B"       54,     58,     56,     56,     54;
          "C"       58,     54,     60,     60,     58;
          "D"       62,     64,     62,     62,     58;
          "E"       50,     58,     52,     52,     50;
          "F"       46,     54,     48,     48,     46;
          "G"       62,     58,     66,     66,     62;
          "H"       56,     70,     58,     58,     54;
          "I"       20,     46,     32,     32,     24;
          "J"       46,     52,     48,     48,     48;
          "K"       54,     60,     54,     54,     56;
          "L"       44,     42,     48,     48,     50;
          "M"       74,     84,     80,     80,     74;
          "N"       60,     72,     62,     62,     58;
          "O"       64,     60,     68,     68,     64;
          "P"       52,     58,     54,     54,     52;
          "Q"       68,     60,     72,     72,     68;
          "R"       54,     60,     54,     54,     56;
          "S"       56,     52,     60,     60,     54;
          "T"       50,     46,     56,     56,     52;
          "U"       58,     62,     62,     62,     62;
          "V"       62,     54,     60,     60,     62;
          "W"       94,     82,     86,     86,     78;
          "X"       62,     62,     68,     68,     60;
          "Y"       50,     54,     60,     60,     56;
          "Z"       56,     58,     58,     58,     52;
          "["           ,         ,     50,     50,         ;
          "\"           ,         ,     50,     50,         ;
          "]"           ,         ,     50,     50,         ;
          "^"           ,         ,     50,     50,         ;
          "_"         94,       48,       50,       50,       64;
          "`"         44,       40,       50,       48,       42;
          "a"       42,     42,     48,     48,     46;
          "b"       50,     48,     52,     52,     50;
          "c"       48,     40,     48,     48,     48;
          "d"       50,     56,     52,     52,     50;
          "e"       48,     44,     50,     50,     48;
          "f"       40,     40,     40,     40,     38;
          "g"       50,     50,     52,     52,     46;
          "h"       46,     50,     48,     48,     46;
          "i"       20,     36,     28,     28,     22;
          "j"       28,     44,     28,     28,     32;
          "k"       46,     48,     48,     48,     46;
          "l"       20,     38,     28,     28,     22;
          "m"       72,     76,     80,     80,     66;
          "n"       46,     50,     50,     50,     46;
          "o"       54,     44,     56,     56,     54;
          "p"       52,     54,     52,     52,     48;
          "q"       52,     50,     52,     52,     48;
          "r"       36,     40,     34,     34,     36;
          "s"       44,     40,     48,     48,     44;
          "t"       30,     30,     34,     34,     32;
          "u"       46,     48,     48,     48,     46;
          "v"       46,     50,     52,     52,     50;
          "w"       74,     72,     74,     74,     72;
          "x"       50,     54,     46,     46,     48;
          "y"       46,     48,     54,     54,     42;
          "z"       44,     44,     44,     44,     46;
          "{"           ,         ,     50,     50,         ;
          "|"           ,         ,     50,     50,         ;
          "}"           ,         ,     50,     50,         ;
          "~"           ,         ,     50,     50,         ;
          177          0,        0,        0,        0,        0;
	PAD          0,        0,        0,        0,        0;
          200:225       ,         ,     50,     50,         ;

Media:            Mun311,   Mun411,   Mun611,  Mun114m,   Mun118;
          BS         -50,      -50,      -50,      -60,      -76;
          FF           0,        0,        0,        0,        0;
          EM         100,      100,      100,      118,      150;
          023        100,      100,      100,      118,      150;
          EN          50,       50,       50,       60,       76;
          414         50,       50,       50,       60,       76;
          040         50,       50,       50,       60,       76;
          THICK       34,       34,       34,       40,       50;
          024         34,       34,       34,       40,       50;
          MEDIUM    26,     26,     26,     30,     38;
          025       26,     26,     26,     30,     38;
          THIN      20,     20,     20,     24,     30;
          026       20,     20,     20,     24,     30;
          HAIR       8,      8,      8,     10,     12;
          DEVIT      8,      8,      8,     10,     12;
          027        8,      8,      8,     10,     12;
          STROKE        ,         ,         ,         ,        2;
          030           ,         ,         ,         ,        2;
          036         58,       62,       60,         ,         ;
          037       58,     64,     60,         ,         ;
          "!"         18,       18,       38,         ,       34;
          """"        36,       32,       36,         ,       40;
          "#"       52,     60,     46,         ,         ;
          "$"       38,     42,     40,         ,         ;
          "%"       60,     60,     56,         ,         ;
          "&"         56,       62,       62,         ,      102;
          "'"         18,       18,       20,         ,       24;
          "("         18,       22,       34,         ,       42;
          ")"         18,       22,       34,         ,       42;
          "*"       38,     56,     54,         ,         ;
          "+"       58,     68,     62,         ,         ;
          ","       20,     20,     28,     24,     36;
          "-"       64,     60,     64,     72,     84;
          "."       18,     20,     22,     20,     32;
          "/"       36,     42,     36,     42,     56;
          "0"       52,     52,     52,     76,    100;
          "1"       52,     52,     52,     76,    100;
          "2"       52,     52,     52,     76,    100;
          "3"       52,     52,     52,     76,    100;
          "4"       52,     52,     52,     76,    100;
          "5"       52,     52,     52,     76,    100;
          "6"       52,     52,     52,     76,    100;
          "7"       52,     52,     52,     76,    100;
          "8"       52,     52,     52,     76,    100;
          "9"       52,     52,     52,     76,    100;
          ":"         18,       20,       32,         ,       24;
          ";"         20,       24,       36,         ,       24;
          "="         64,       52,       64,         ,         ;
          "?"         40,       42,       44,         ,       64;
          "@"       72,     80,     70,         ,         ;
          "A"       52,     58,     54,     90,    112;
          "B"       48,     48,     54,     74,     94;
          "C"       46,     48,     50,     78,    102;
          "D"       48,     52,     56,     84,    106;
          "E"       38,     40,     50,     62,     86;
          "F"       38,     40,     50,     62,     86;
          "G"       50,     54,     52,     80,    102;
          "H"       46,     50,     58,     74,     98;
          "I"       22,     26,     36,     28,     30;
          "J"       44,     44,     52,     60,     76;
          "K"       46,     52,     56,     70,     94;
          "L"       38,     42,     36,     62,     74;
          "M"       70,     76,     74,     98,    132;
          "N"       52,     60,     60,     80,    104;
          "O"       50,     52,     52,     86,    108;
          "P"       46,     48,     54,     70,     86;
          "Q"       56,     56,     54,     92,    108;
          "R"       50,     50,     52,     72,     88;
          "S"       48,     50,     48,     72,     98;
          "T"       46,     46,     42,     72,     88;
          "U"       46,     50,     54,     80,     96;
          "V"       50,     58,     50,     86,    108;
          "W"       78,     86,     64,    124,    156;
          "X"       52,     56,     64,     88,    112;
          "Y"       46,     50,     44,     72,    102;
          "Z"       46,     50,     54,     74,     90;
          "_"       96,    100,     80,         ,         ;
          "`"       40,     42,     42,         ,         ;
          "a"       42,     42,     44,         ,         ;
          "b"       42,     44,     42,         ,         ;
          "c"       40,     42,     40,         ,         ;
          "d"       40,     44,     48,         ,         ;
          "e"       44,     44,     40,         ,         ;
          "f"       36,     38,     38,         ,         ;
          "g"       44,     46,     50,         ,         ;
          "h"       42,     46,     42,         ,         ;
          "i"       22,     26,     32,         ,         ;
          "j"       28,     32,     48,         ,         ;
          "k"       42,     46,     44,         ,         ;
          "l"       22,     26,     34,         ,         ;
          "m"       58,     66,     58,         ,         ;
          "n"       40,     44,     42,         ,         ;
          "o"       46,     46,     42,         ,         ;
          "p"       42,     46,     50,         ,         ;
          "q"       42,     46,     44,         ,         ;
          "r"       32,     34,     40,         ,         ;
          "s"       40,     42,     38,         ,         ;
          "t"       28,     28,     32,         ,         ;
          "u"       42,     46,     44,         ,         ;
          "v"       42,     46,     42,         ,         ;
          "w"       62,     78,     60,         ,         ;
          "x"       44,     48,     50,         ,         ;
          "y"       38,     46,     50,         ,         ;
          "z"       40,     40,     42,         ,         ;
          177          0,        0,        0,        0,        0;
	PAD          0,        0,        0,        0,        0;

View:
          Vp0612m		Mp0612m,
	Vp0612mSUP	Mp0612m,
	Vp0612mSUB	Mp0612m,
	Vp07tdm		Mp07tdm,
	Vp07tdmSUP	Mp07tdm,
	Vp07tdmSUB	Mp07tdm,
	Vp07sym		Mp07sym,
	Vp07symSUP	Mp07sym,
	Vp07symSUB	Mp07sym,
	Vpr510e		Mun510m,    /* univers italics stands in here */
	Vpr110m		Mpr110m,
          Vpr111m		Mpr111m,
	Vpr111mSUP	Mpr111m,
	Vpr111mSUB	Mpr111m,
/*          Vpr111d		Mpr111m,*/
/*	Vpr111dSUP	Mpr111m,*/
/*	Vpr111dSUB	Mpr111m,*/
	Vpr211m		Mpr211m,
/*	Vpr211d		Mpr211e,*/
	Vpr114m		Mpr114m,
	Vpr118		Mpr118,
/*	Vun110m		Mun110m,*/
          Vun111v		Mun111v;
/*	Vun111vSUP	Mun111v,*/
/*	Vun111vSUB	Mun111v,*/
/*          Vun111d		Mun111d,
/*	Vun111dSUP	Mun111d,
/*	Vun111dSUB	Mun111d,*/
/*	Vun211m		Mun211m,
/*	Vun211d		Mun211m,*/
/*	Vun311		Mun311,*/
/*	Vun411		Mun411,*/
/*	Vun611		Mun611,*/
/*          Vun114m		Mun114m,*/
/*	Vun118 		Mun118,*/
/*	Vun510m		Mun510m;*/

Def:	artsy;
	''	"""";	``	"""";	EN	EN;
	420	"-";			/* hyphen */
	EN-	"-";	EN_	"_";	EM- Vpr111m 020;
	EM_	"_" "_";	multiply	"x";	pl_mi	"+/-";
	vrule	("!")=0;	bullet Vp07sym 042;	cright	"(c)";
	modmark	"!";	delmark	"*";

	art [, art [tp, art [ht, art [md, art [bt, art [fl Vpr111m "[";
	art ], art ]tp, art ]ht, art ]md, art ]bt, art ]fl Vpr111m "]";
	art {, art {tp, art {ht, art {md, art {bt, art {fl Vpr111m "{";
	art }, art }tp, art }ht, art }md, art }bt, art }fl Vpr111m "}";
	art (, art lptp, art lpht, art lpmd, art lpbt, art lpfl Vpr111m "(";
	art ), art rptp, art rpht, art rpmd, art rpbt, art rpfl Vpr111m ")";
	art |, art |tp, art |ht, art |md, art |bt, art |fl Vpr111m "|";
	art ||, art ||tp, art ||ht, art ||md, art ||bt, art ||fl Vp07sym ":";
	art [hb, art ]hb, art {hb, art }hb, art lphb, art rphb,
	art |hb, art ||hb	"";
						
	art v	"v";
	art Dv	"v";	art Clf	"(";	art Crt	")";
	art -str	"";	art -stp	"";	art lptp	"(";
	art |rul	("!")=0;	art -rul	"_";	art /rul	"/";
	art o	"o"  "x";		art X	"X";
	art m Vp07sym "(";	art d	"*";
	art PI	"PI";
	art pi	"pi";	art /	"/";	art \ Vpr111m "\";
	art c	"(c)";	art t	"(TM)";	art ^ Vpr111m "^" ;
	art v	"v" ;	art <- Vpr111m "<";	art -> Vp07sym 120;
	art D^ Vpr111m "^";	art Dv	"v";
	art D< Vpr111m "<";	art D> Vpr111m ">";	art Clf	"(";
	art Crt	")";
	art -str, art -stp	"";	art -rul	"_";
	art |rul Vpr111m "|" ;	art /rul	"/";
	art \rul Vpr111m "\";
	art bxtl Vp07sym 100; art bxt Vp07sym 136; art bxtr Vp07sym 043;
	art bxl  Vp07sym 050; art bxx Vp07sym 045; art bxr Vp07sym 051;
	art bxbl Vp07sym 052; art bxb Vp07sym 046; art bxbr Vp07sym 053;
/*
art lztl	"_";	art lztr	"_" ;
art lzl	"/";	art lzr	"\";
art lzbl	 "\_";	art lzbr	"_/"  ;
*/
Def:	proportional_set_b;
	001	027;	010	BS;	023:027	SELF;
	EM	023;	THICK	024;	MEDIUM	025;
	THIN	026;	PS	026;	DEVIT	027;
	HAIR	027;	040	SELF;	",":"/"	SELF;
	177	SELF;	414	040;	"0":"9"	SELF;
	"A":"Z"	SELF;
	"a" "A";	"b" "B";	"c" "C";	"d" "D";	"e" "E";	"f" "F";	"g" "G";
	"h" "H";	"i" "I";	"j" "J";	"k" "K";	"l" "L";	"m" "M";	"n" "N";
	"o" "O";	"p" "P";	"q" "Q";	"r" "R";	"s" "S";	"t" "T";	"u" "U";
	"v" "V";	"w" "W";	"x" "X";	"y" "Y";	"z" "Z";

Def:	complete;
	010	BS;	014	FF;	EM	023;
	THIN	026;	PS	026;	HAIR	027;
	DEVIT	027; 	030	SELF;
	001	030;    /* for spacing control: 1 unit in modified fonts */
	031:037	SELF;          040	EN;	"!":"~"	SELF;
	177	SELF;	200:225	SELF;	277	"";
	modmark	"|";	^0	200;	^1	201;
	^2	202;	^3	203;	^4	204;
	^5	205;	^6	206;	^7	207;
	^8	210;	^9	211;	002	212;
	003	215;	art o	222;
	261	220;	/* dagger */
	275	225;	/* not equal */
	301	221;	/* double dagger */
	375	223;	/* square */

Def:	proportional_set_e;
	010	BS;	EM	023;	EN	040;
	THICK	024;	MEDIUM	025;	THIN	026;
	PS	026;	HAIR	027;	DEVIT	027;
	STROKE	030;
	001	027;	/* for spacing control */
	036	SELF;	037	SELF;     040	EN;
	"!":";"	SELF;	"="	SELF;	"?":"Z"	SELF;
	"_":"z"	SELF;	177	"";	277	"";

Def:	fixed_set_c;
	010	BS;	014	FF;	020:021	SELF;
          023	SELF;	030	SELF;	EM	023;
	PS	EN;	032:035	SELF;
          040	EN;	"!":"~"	SELF;	177	SELF;
	200:225	SELF;	277	"";	modmark	"|";
	^0	200;	^1	201;	^2	202;
	^3	203;	^4	204;	^5	205;
	^6	206;	^7	207;	^8	210;
	^9	211;	002	212;	003	215;
	art o	222;	261	220;	/* dagger */
	275	225;	/* not equal */
	301	221;	/* double dagger */
	375	223;	/* square */


Def:	borrowed_from_pr111m;
	"<"	Vpr111m	"<";	">"	Vpr111m	">";
	"["	Vpr111m	"[";	"\"	Vpr111m	"\";
	"]"	Vpr111m	"]";	"^"	Vpr111m	"^";
	"{"	Vpr111m	"{";	"|"	Vpr111m	"|";
	"}"	Vpr111m	"}";	"~"	Vpr111m	"~";
	"`"	Vpr111m	"`";

Def:	borrowed_from_un111v;
	"<"	Vun111v	"<";	">"	Vun111v	">";
	"["	Vun111v	"[";	"\"	Vun111v	"\";
	"]"	Vun111v	"]";	"^"	Vun111v	"^";
	"{"	Vun111v	"{";	"|"	Vun111v	"|";
	"}"	Vun111v	"}";	"~"	Vun111v	"~";
	"`"	Vun111v	"`";

Font:		Fp0612m	Vp0612m;
 footrefseparator:	" ";
 wordspace:	44, 44, 88, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp0612mSUP Vp0612mSUP;
 footrefseparator:	" ";
 wordspace:	44, 44, 88, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp0612mSUB Vp0612mSUB;
 footrefseparator:	" ";
 wordspace:	44, 44, 88, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07tdm Vp07tdm;
 footrefseparator:	" ";
 wordspace:	50, 50, 100, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07tdmSUP Vp07tdmSUP;
 footrefseparator:	" ";
 wordspace:	50, 50, 100, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07tdmSUB Vp07tdmSUB;
 footrefseparator:	" ";
 wordspace:	50, 50, 100, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07sym	Vp07sym;
 footrefseparator:	" ";
 wordspace:	50, 50, 100, EN;
 ref:		artsy;
 ref:		complete;

Font:		Fp07symSUP	Vp07symSUP;
 footrefseparator:	" ";
 wordspace:	50, 50, 100, EN;
 ref:		artsy;
 ref:		complete;

Font:		Fp07symSUB	Vp07symSUB;
 footrefseparator:	" ";
 wordspace:	50, 50, 100, EN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr110m	Vpr110m;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Font:		Fpr111m	Vpr111m;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr111mSUP	Vpr111mSUP;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr111mSUB	Vpr111mSUB;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr111_UC	Vpr111m;
 footrefseparator:	THIN;
 ref:		complete;
 ref:		proportional_set_b;  /* use uppercase instead of lower */

/*Font:		Fpr111d	Vpr111d;
/* footrefseparator:	THIN;
/* ref:		artsy;
/* ref:		proportional_set_e;*/

/*Font:		Fpr111dSUP	Vpr111dSUP;
/* footrefseparator:	THIN;
/* ref:		artsy;
/* ref:		proportional_set_e;*/

/*Font:		Fpr111dSUB	Vpr111dSUB;
/* footrefseparator:	THIN;
/* ref:		artsy;
/* ref:		proportional_set_e;*/

Font:		Fpr211m	Vpr211m;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;
 ref:		borrowed_from_pr111m;

/*Font:		Fpr211d	Vpr211d;
/* footrefseparator:	THIN;
/* ref:		artsy;
/* ref:		proportional_set_e;*/

Font:		Fpr211_UC	Vpr211m;
 footrefseparator:	THIN;
 ref:		proportional_set_e;
 ref:		proportional_set_b;  /* use upper case instead of lower */
		EN	040;
		HAIR	027;
		DEVIT	027;

Font:		Fpr114m	Vpr114m;
 footrefseparator:	THIN;
 wordspace:	42, 70, 140, EN;
 ref:		proportional_set_b;

Font:		Fpr118	Vpr118;
 footrefseparator:	THIN;
 wordspace:	50, 74, 148, EN;
 ref:		proportional_set_b;
		EN	040;
		HAIR	027;
		DEVIT	027;

/****Font:		Fun111v	Vun111v;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		complete;*/

Font:		Fpr510e	Vpr510e;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;
 ref:		borrowed_from_pr111m;

Font:		Fpr510_UC	Vpr510e;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;
 ref:		borrowed_from_pr111m;
 ref:		proportional_set_b;


Units:		pt;

Size:	size9,	9;
Size:	size12,	12;

Artproc:		x9700_writer_$artproc;
/* Attach: */
/* Cleanup: */
/* Comment:		see devices */
DefaultMargs:	48, 24, 24, 48;
DevClass:		"bitmap";
DevName:		"x9700";
Endpage:		014;
Footproc:		x9700_writer_$footproc;
Interleave:	on;
Letterspace:	0;
/* MaxFiles: */
/* MaxPages: */
/* MaxPageLength: */
/* MaxPageWidth: */
MinTopMarg:	0;	/* Really 12 "points" into page for top line */
MinBotMarg:	0;
MinLead:		3;	/* Minimum Vertical Spacing 1/4 line */
MinSpace:		.240;	/* one pixel */
Outproc:		x9700_writer_;
/* Sizes: */
Stream:		on;
/* Taperec: */

Device:		x9700_pr, roman;
 comment:		" ;9700DJDE FORMAT=PDE062, BOF=255, FONTINDEX=0, DATA=(1,150), END; ";
 init:		text	12;
 maxpagelength:	825;	/* 11 inches at 75 "points" per inch */
 maxpagewidth:	612;	/* 8.5 inches at 72 points per inch */
 Sizes:		size12;

bachelor:	ascii, roman, text, APL, CSR, HR		        Fpr111m;
bachelor:	ascii_super, superscript, super, footref	        Fpr111mSUP;
bachelor:	ascii_sub, subscript, sub			        Fpr111mSUB;
bachelor:	bold, CSBR, HBR, HBBI, l1exact, l2font, l2exact	        Fpr211m;
bachelor:	BOLD, l1font				        Fpr211_UC;
bachelor:	italic, CSI, ascii_, l3exact, l4font, l4exact, script     Fpr510e;
bachelor:	ASCII					        Fpr111_UC;
bachelor: l3font					        Fpr510_UC;
bachelor: CSBI, HBI					        Fpr510e;
bachelor:	small, footnote				        Fpr110m;
bachelor:	head, head14				        Fpr114m;
bachelor:	head18, l0font, l0exact			        Fpr118;
bachelor:	elite, courier12, typ			        Fp07tdm;
bachelor:	typ_super, tsuper				        Fp07tdmSUP;
bachelor:	typ_sub, tsub				        Fp07tdmSUB;
bachelor:	small_typ, x1200, ascii9, small_ascii		        Fp0612m;
bachelor:	symbol, sym				        Fp07sym;
bachelor:	symbol_super, sym_super, ssuper		        Fp07symSUP;
bachelor:	symbol_sub, sym_sub, ssub			        Fp07symSUB;

viewselect:	Vpr111m		"2",
		Vpr111mSUP	"2U",
		Vpr111mSUB	"2D",
		Vpr211m		"3",
                    Vpr510e		"4",
		Vpr110m		"5",
                    Vpr114m   		"6",
		Vpr118		"7",
                    Vp07tdmSUP	"8U",
                    Vp07tdmSUB	"8D",
		Vp07tdm		"8",
		Vp0612m		"9",
		Vp07sym		":",
		Vp07symSUP	":U",
		Vp07symSUB	":D";

Device:		x9700_doc;
 comment:		" ;9700DJDE FORMAT=PDE062, BOF=255, FONTINDEX=0, DATA=(1,150), END; ";
 init:		text	12;
 maxpagelength:	825;	/* 11 inches at 75 "points" per inch */
 maxpagewidth:	612;	/* 8.5 inches at 72 points per inch */
 Sizes:		size12;

bachelor:	roman, text, APL, CSR, HR			        Fpr111m;
bachelor:	superscript, super, footref			        Fpr111mSUP;
bachelor:	subscript, sub				        Fpr111mSUB;
bachelor:	bold, CSBR, HBR, HBBl, l1exact, l2font, l2exact	        Fpr211m;
bachelor:	BOLD, l1font				        Fpr211_UC;
bachelor:	italic, CSI, l3exact, l4font, l4exact, script, CSBI, HBI  Fpr510e;
bachelor:	ASCII					        Fpr111_UC;
bachelor: l3font					        Fpr510_UC;
bachelor:	small, footnote				        Fpr110m;
bachelor:	head, head14				        Fpr114m;
bachelor:	head18, l0font, l0exact			        Fpr118;
bachelor:	elite, courier12, ascii, typ			        Fp07tdm;
bachelor:	typ_super, tsuper				        Fp07tdmSUP;
bachelor:	typ_sub, tsub				        Fp07tdmSUB;
bachelor:	small_typ, x1200, ascii9, small_ascii		        Fp0612m;
bachelor:	symbol, sym				        Fp07sym;
bachelor:	symbol_super, sym_super, ssuper		        Fp07symSUP;
bachelor:	symbol_sub, sym_sub, ssub			        Fp07symSUB;

viewselect:	Vpr111m		"2",
		Vpr111mSUP	"2U",
		Vpr111mSUB	"2D",
		Vpr211m		"3",
                    Vpr510e		"4",
		Vpr110m		"5",
                    Vpr114m   		"6",
		Vpr118		"7",
                    Vp07tdmSUP	"8U",
                    Vp07tdmSUB	"8D",
		Vp07tdm		"8",
		Vp0612m		"9",
		Vp07sym		":",
		Vp07symSUP	":U",
		Vp07symSUB	":D";




		    x9700_un.compdv                 04/23/85  1300.0r w 04/23/85  0912.0      313812



/* Compose Device Table for the Xerox 9700 Electronic Printing System */
/*  implements the devices:
	x9700_un
	x9700_un_land
*/
/* Written September 1981 by C. Hornig */
/* revised for use with J. S. Love's writer program March 1983 by MST */
/* Changed Wordspace values June 83 by EJW */

Strokes:		10000;
Wordspace:	1800, 4600, 9200, EN;

MediaChars:	BS	010,
		FF	014,
		EM	023,
		THICK	024,
		MEDIUM	025,
		THIN	026,
		HAIR	027,
		DEVIT	027,
		STROKE	030,
		EN	040,
		PAD	177,
		014	SELF,	/* Formfeed */
		020:040	SELF,
		"!":"~"	SELF,
		177	SELF,
		200:225	SELF;

/* Monospace, fixed width fonts */
/*              small_typ       typ   symbols */
Media:               M06,      M07, M07mixed;
          BS       -4400,    -5000,    -5000;
          FF           0,        0,        0;
          014          0,        0,        0;
	020:022	4400,	5000,	5000;
          EM        4400,     5000,     9200;
          023       4400,     5000,     9200;
          EN        4400,     5000,     5000;
          040       4400,     5000,     5000;
          THICK     4400,     5000,     3000;
          024       4400,     5000,     3000;
          MEDIUM    4400,     5000,     2400;
          025       4400,     5000,     2400;
          THIN      4400,     5000,     1800;
          026       4400,     5000,     1800;
          HAIR      4400,     5000,      800;
          DEVIT     4400,     5000,      800;
          027       4400,     5000,      800;
          STROKE    4400,     5000,      200;
          030       4400,     5000,      200;
	031:037	4400,	5000,	5000;
          "!":"~"   4400,     5000,     5000;
          177          0,        0,        0;
          PAD          0,        0,        0;
          200:225   4400,     5000,     5000;

/* Press Roman proportional fonts */
/*                 small      text      bold    head14    head18 */
Media:            Mpr110,  Mpr111m,  Mpr211e,   Mpr114,   Mpr118;
          BS       -4600,    -4600,    -4600,    -6200,    -7600;
          FF           0,        0,        0,        0,        0;
          EM        9200,     9200,     9200,    12400,    15000;
          023       9200,     9200,     9200,    12400,    15000;
          EN        4600,     4600,     4600,     6200,     7600;
          040       4600,     4600,     4600,     6200,     7600;
          THICK     3000,     3000,     3000,     4200,     5000;
          024       3000,     3000,     3000,     4200,     5000;
          MEDIUM    2400,     2400,     2400,     3200,     3800;
          025       2400,     2400,     2400,     3200,     3800;
          THIN      1800,     1800,     1800,     2400,     3000;
          026       1800,     1800,     1800,     2400,     3000;
          HAIR       800,      800,      800,     1000,     1200;
          DEVIT      800,      800,      800,     1000,     1200;
          027        800,      800,      800,     1000,     1200;
          STROKE        ,      200,         ,         ,         ;
          030           ,      200,         ,         ,         ;
          031:035       ,     5000,         ,         ,         ;
          036       6400,     6600,     7000,         ,         ;
          037       6800,     6600,     6800,         ,         ;
          "!"       2000,     2400,     2400,         ,         ;
          """"      4200,     3800,     4000,         ,         ;
          "#"       6800,     7000,     6400,         ,         ;
          "$"       4800,     4400,     4400,         ,         ;
          "%"       6800,     6400,     6400,         ,         ;
          "&"       6400,     7000,     7000,         ,         ;
          "'"       2200,     2400,     2400,         ,         ;
          "("       3600,     3000,     2400,         ,         ;
          ")"       3600,     3000,     2400,         ,         ;
          "*"       4200,     4400,     4400,         ,         ;
          "+"       4600,     4400,     7400,         ,         ;
          ","       2600,     2400,     2400,     2400,     4000;
          "-"       3800,     4800,     5600,     4800,     6800;
          "."       2400,     2400,     2400,     2000,     4000;
          "/"       3600,     5600,     5600,     5000,     6200;
          "0"       4800,     4200,     4800,     6200,     7600;
          "1"       4800,     4200,     4800,     6200,     7600;
          "2"       4800,     4200,     4800,     6200,     7600;
          "3"       4800,     4200,     4800,     6200,     7600;
          "4"       4800,     4200,     4800,     6200,     7600;
          "5"       4800,     4200,     4800,     6200,     7600;
          "6"       4800,     4200,     4800,     6200,     7600;
          "7"       4800,     4200,     4800,     6200,     7600;
          "8"       4800,     4200,     4800,     6200,     7600;
          "9"       4800,     4200,     4800,     6200,     7600;
          ":"       2200,     2400,     2400,         ,         ;
          ";"       2600,     2400,     2400,         ,         ;
          "<"           ,     5000,         ,         ,         ;
          "="       4600,     5000,     6800,         ,         ;
          ">"           ,     5000,         ,         ,         ;
          "?"       3800,     3800,     4000,         ,         ;
          "@"       6200,     8400,     8600,         ,         ;
          "A"       6400,     6400,     7000,     9000,    10800;
          "B"       5600,     5200,     5800,     7800,     9200;
          "C"       5800,     6000,     6000,     8000,     9800;
          "D"       6400,     6800,     6600,     9000,    11000;
          "E"       5400,     5600,     5800,     7800,     9200;
          "F"       5000,     5400,     5600,     7200,     8800;
          "G"       6200,     7000,     6600,     9600,    11000;
          "H"       6400,     6800,     7000,     8800,    10800;
          "I"       4000,     3400,     4200,     4000,     5600;
          "J"       3600,     3600,     4600,     5200,     6000;
          "K"       6200,     6800,     7000,     9200,    11000;
          "L"       5600,     5400,     5800,     7000,     9400;
          "M"       8000,     8600,     9000,    11000,    13600;
          "N"       6600,     6800,     6800,     8600,    11000;
          "O"       6200,     6600,     7000,     9200,    10600;
          "P"       5200,     5000,     5800,     7000,     8800;
          "Q"       6000,     6600,     7000,     9200,    10600;
          "R"       5800,     6200,     6400,     8400,     9800;
          "S"       4600,     4400,     4800,     6200,     7400;
          "T"       5600,     5400,     5800,     8000,     9400;
          "U"       6600,     6800,     6800,     9200,    11000;
          "V"       6200,     6200,     7200,     9200,    10400;
          "W"       8200,     8200,     9600,    12000,    13400;
          "X"       5600,     6400,     6600,     9200,    11000;
          "Y"       5800,     6200,     7000,     8200,    10400;
          "Z"       5400,     5400,     5800,     8200,     9600;
          "["           ,     5000,         ,         ,         ;
          "\"           ,     5000,         ,         ,         ;
          "]"           ,     5000,         ,         ,         ;
          "^"           ,     5000,         ,         ,         ;
          "_"       6400,     5000,     8400,         ,         ;
          "`"       4600,     5000,     4200,         ,         ;
          "a"       4000,     4000,     4800,         ,         ;
          "b"       4400,     4800,     4800,         ,         ;
          "c"       4200,     4000,     4000,         ,         ;
          "d"       4400,     4800,     4800,         ,         ;
          "e"       3800,     4000,     4000,         ,         ;
          "f"       3400,     3800,     3600,         ,         ;
          "g"       4400,     4200,     4400,         ,         ;
          "h"       4200,     4800,     5400,         ,         ;
          "i"       2600,     2600,     2800,         ,         ;
          "j"       3200,     2800,     3200,         ,         ;
          "k"       4400,     4800,     5600,         ,         ;
          "l"       2800,     2600,     2800,         ,         ;
          "m"       6800,     7200,     8000,         ,         ;
          "n"       4400,     4800,     5400,         ,         ;
          "o"       4400,     4600,     4600,         ,         ;
          "p"       4400,     4800,     4600,         ,         ;
          "q"       4600,     4600,     4400,         ,         ;
          "r"       3400,     3600,     4000,         ,         ;
          "s"       3400,     3200,     3600,         ,         ;
          "t"       2800,     3000,     3400,         ,         ;
          "u"       4600,     4600,     5000,         ,         ;
          "v"       4400,     4400,     4600,         ,         ;
          "w"       6600,     6200,     7200,         ,         ;
          "x"       4400,     4200,     5400,         ,         ;
          "y"       4200,     4400,     5200,         ,         ;
          "z"       4000,     4200,     4000,         ,         ;
          "{"           ,     5000,         ,         ,         ;
          "|"           ,     5000,         ,         ,         ;
          "}"           ,     5000,         ,         ,         ;
          "~"           ,     5000,         ,         ,         ;
          177          0,        0,        0,        0,        0;
          PAD          0,        0,        0,        0,        0;
          200:225       ,     5000,         ,         ,         ;

/* Univers Propoertional Fonts */
Media:            Mun110,  Mun510e,  Mun111v,  Mun111d,  Mun211e;
          BS       -4400,    -4600,    -4600,    -4600,    -5000;
          FF           0,        0,        0,        0,        0;
          EM        8600,     9200,     9200,     9200,    10000;
          023       8600,     9200,     9200,     9200,    10000;
          EN        4400,     4600,     4600,     4600,     5000;
          040       4400,     4600,     4600,     4600,     5000;
          THICK     2800,     3000,     3000,     3000,     3400;
          024       2800,     3000,     3000,     3000,     3400;
          MEDIUM    2200,     2400,     2400,     2400,     2600;
          025       2200,     2400,     2400,     2400,     2600;
          THIN      1800,     1800,     1800,     1800,     2000;
          026       1800,     1800,     1800,     1800,     2000;
          HAIR       800,      800,      800,      800,      800;
          DEVIT      800,      800,      800,      800,      800;
          027        800,      800,      800,      800,      800;
          STROKE     200,      200,      200,      200,      200;
          030        200,      200,      200,      200,      200;
          031:035       ,         ,     5000,         ,         ;
          036       6000,     6400,     5000,     5000,     6200;
          037       6200,     7000,     5000,     5000,     6800;
          "!"       1600,     3600,     2000,     2000,     2000;
          """"      3000,     4800,     4800,     4800,     2800;
          "#"       5000,     6000,     5200,     5200,     5000;
          "$"       4200,     5000,     5600,     5600,     5200;
          "%"       6200,     7000,     7200,     7200,     6200;
          "&"       6000,     6400,     7200,     7200,     6800;
          "'"       1600,     2400,     2400,     2400,     1600;
          "("       2000,     2800,     2400,     2400,     2400;
          ")"       2000,     3200,     2400,     2400,     2400;
          "*"       4200,     5000,     4600,     4600,     4800;
          "+"       5400,     6200,     4400,     4400,     4800;
          ","       2200,     2400,     2600,     2600,     2400;
          "-"       5600,     4800,     3600,     3600,     4800;
          "."       1600,     2400,     2200,     2200,     2000;
          "/"       3400,     3000,     2800,     2800,     3600;
          "0"       5600,     5000,     5000,     5000,     5200;
          "1"       5600,     5000,     5000,     5000,     5200;
          "2"       5600,     5000,     5000,     5000,     5200;
          "3"       5600,     5000,     5000,     5000,     5200;
          "4"       5600,     5000,     5000,     5000,     5200;
          "5"       5600,     5000,     5000,     5000,     5200;
          "6"       5600,     5000,     5000,     5000,     5200;
          "7"       5600,     5000,     5000,     5000,     5200;
          "8"       5600,     5000,     5000,     5000,     5200;
          "9"       5600,     5000,     5000,     5000,     5200;
          ":"       1600,     3200,     2200,     2200,     2000;
          ";"       2200,     3200,     2400,     2400,     2600;
          "<"           ,         ,     5000,     5000,         ;
          "="       5600,     6000,     4400,     4400,     4200;
          "?"       3800,     4000,     4000,     4000,     4000;
          ">"           ,         ,     5000,     5000,         ;
          "@"       6800,     6400,     6600,     6600,     6200;
          "A"       6200,     6000,     7000,     7000,     6000;
          "B"       5400,     5800,     5600,     5600,     5400;
          "C"       5800,     5400,     6000,     6000,     5800;
          "D"       6200,     6400,     6200,     6200,     5800;
          "E"       5000,     5800,     5200,     5200,     5000;
          "F"       4600,     5400,     4800,     4800,     4600;
          "G"       6200,     5800,     6600,     6600,     6200;
          "H"       5600,     7000,     5800,     5800,     5400;
          "I"       2000,     4600,     3200,     3200,     2400;
          "J"       4600,     5200,     4800,     4800,     4800;
          "K"       5400,     6000,     5400,     5400,     5600;
          "L"       4400,     4200,     4800,     4800,     5000;
          "M"       7400,     8400,     8000,     8000,     7400;
          "N"       6000,     7200,     6200,     6200,     5800;
          "O"       6400,     6000,     6800,     6800,     6400;
          "P"       5200,     5800,     5400,     5400,     5200;
          "Q"       6800,     6000,     7200,     7200,     6800;
          "R"       5400,     6000,     5400,     5400,     5600;
          "S"       5600,     5200,     6000,     6000,     5400;
          "T"       5000,     4600,     5600,     5600,     5200;
          "U"       5800,     6200,     6200,     6200,     6200;
          "V"       6200,     5400,     6000,     6000,     6200;
          "W"       9400,     8200,     8600,     8600,     7800;
          "X"       6200,     6200,     6800,     6800,     6000;
          "Y"       5000,     5400,     6000,     6000,     5600;
          "Z"       5600,     5800,     5800,     5800,     5200;
          "["           ,         ,     5000,     5000,         ;
          "\"           ,         ,     5000,     5000,         ;
          "]"           ,         ,     5000,     5000,         ;
          "^"           ,         ,     5000,     5000,         ;
          "_"       9400,     4800,     5000,     5000,     6400;
          "`"       4400,     4000,     4800,     4800,     4200;
          "a"       4200,     4200,     4800,     4800,     4600;
          "b"       5000,     4800,     5200,     5200,     5000;
          "c"       4800,     4000,     4800,     4800,     4800;
          "d"       5000,     5600,     5200,     5200,     5000;
          "e"       4800,     4400,     5000,     5000,     4800;
          "f"       4000,     4000,     4000,     4000,     3800;
          "g"       5000,     5000,     5200,     5200,     4600;
          "h"       4600,     5000,     4800,     4800,     4600;
          "i"       2000,     3600,     2800,     2800,     2200;
          "j"       2800,     4400,     2800,     2800,     3200;
          "k"       4600,     4800,     4800,     4800,     4600;
          "l"       2000,     3800,     2800,     2800,     2200;
          "m"       7200,     7600,     8000,     8000,     6600;
          "n"       4600,     5000,     5000,     5000,     4600;
          "o"       5400,     4400,     5600,     5600,     5400;
          "p"       5200,     5400,     5200,     5200,     4800;
          "q"       5200,     5000,     5200,     5200,     4800;
          "r"       3600,     4000,     3400,     3400,     3600;
          "s"       4400,     4000,     4800,     4800,     4400;
          "t"       3000,     3000,     3400,     3400,     3200;
          "u"       4600,     4800,     4800,     4800,     4600;
          "v"       4600,     5000,     5200,     5200,     5000;
          "w"       7400,     7200,     7400,     7400,     7200;
          "x"       5000,     5400,     4600,     4600,     4800;
          "y"       4600,     4800,     5400,     5400,     4200;
          "z"       4400,     4400,     4400,     4400,     4600;
          "{"           ,         ,     5000,     5000,         ;
          "|"           ,         ,     5000,     5000,         ;
          "}"           ,         ,     5000,     5000,         ;
          "~"           ,         ,     5000,     5000,         ;
          177          0,        0,        0,        0,        0;
	PAD          0,        0,        0,        0,        0;
          200:225       ,         ,     5000,     5000,         ;
Media:            Mun311,   Mun411,   Mun611,  Mun114b,   Mun118;
          BS       -5000,    -5000,    -5000,    -6000,    -7600;
          FF           0,        0,        0,        0,        0;
          EM       10000,    10000,    10000,    11800,    15000;
          023      10000,    10000,    10000,    11800,    15000;
          EN        5000,     5000,     5000,     6000,     7600;
          040       5000,     5000,     5000,     6000,     7600;
          THICK     3400,     3400,     3400,     4000,     5000;
          024       3400,     3400,     3400,     4000,     5000;
          MEDIUM    2600,     2600,     2600,     3000,     3800;
          025       2600,     2600,     2600,     3000,     3800;
          THIN      2000,     2000,     2000,     2400,     3000;
          026       2000,     2000,     2000,     2400,     3000;
          HAIR       800,      800,      800,     1000,     1200;
          DEVIT      800,      800,      800,     1000,     1200;
          027        800,      800,      800,     1000,     1200;
	STROKE	 200,	 200,	 200,	    ,	    ;
	030	 200,	 200,	 200	    ,	    ;
          036       5800,     6200,     6000,         ,         ;
          037       5800,     6400,     6000,         ,         ;
          "!"       1800,     1800,     3800,         ,         ;
          """"      3600,     3200,     3600,         ,         ;
          "#"       5200,     6000,     4600,         ,         ;
          "$"       3800,     4200,     4000,         ,         ;
          "%"       6000,     6000,     5600,         ,         ;
          "&"       5600,     6200,     6200,         ,         ;
          "'"       1800,     1800,     2000,         ,         ;
          "("       1800,     2200,     3400,         ,         ;
          ")"       1800,     2200,     3400,         ,         ;
          "*"       3800,     5600,     5400,         ,         ;
          "+"       5800,     6800,     6200,         ,         ;
          ","       2000,     2000,     2800,     2400,     3600;
          "-"       6400,     6000,     6400,     7200,     8400;
          "."       1800,     2000,     2200,     2000,     3200;
          "/"       3600,     4200,     3600,     4200,     5600;
          "0"       5200,     5200,     5200,     7600,    10000;
          "1"       5200,     5200,     5200,     7600,    10000;
          "2"       5200,     5200,     5200,     7600,    10000;
          "3"       5200,     5200,     5200,     7600,    10000;
          "4"       5200,     5200,     5200,     7600,    10000;
          "5"       5200,     5200,     5200,     7600,    10000;
          "6"       5200,     5200,     5200,     7600,    10000;
          "7"       5200,     5200,     5200,     7600,    10000;
          "8"       5200,     5200,     5200,     7600,    10000;
          "9"       5200,     5200,     5200,     7600,    10000;
          ":"       1800,     2000,     3200,         ,         ;
          ";"       2000,     2400,     3600,         ,         ;
          "="       6400,     5200,     6400,         ,         ;
          "?"       4000,     4200,     4400,         ,         ;
          "@"       7200,     8000,     7000,         ,         ;
          "A"       5200,     5800,     5400,     9000,    11200;
          "B"       4800,     4800,     5400,     7400,     9400;
          "C"       4600,     4800,     5000,     7800,    10200;
          "D"       4800,     5200,     5600,     8400,    10600;
          "E"       3800,     4000,     5000,     6200,     8600;
          "F"       3800,     4000,     5000,     6200,     8600;
          "G"       5000,     5400,     5200,     8000,    10200;
          "H"       4600,     5000,     5800,     7400,     9800;
          "I"       2200,     2600,     3600,     2800,     3000;
          "J"       4400,     4400,     5200,     6000,     7600;
          "K"       4600,     5200,     5600,     7000,     9400;
          "L"       3800,     4200,     3600,     6200,     7400;
          "M"       7000,     7600,     7400,     9800,    13200;
          "N"       5200,     6000,     6000,     8000,    10400;
          "O"       5000,     5200,     5200,     8600,    10800;
          "P"       4600,     4800,     5400,     7000,     8600;
          "Q"       5600,     5600,     5400,     9200,    10800;
          "R"       5000,     5000,     5200,     7200,     8800;
          "S"       4800,     5000,     4800,     7200,     9800;
          "T"       4600,     4600,     4200,     7200,     8800;
          "U"       4600,     5000,     5400,     8000,     9600;
          "V"       5000,     5800,     5000,     8600,    10800;
          "W"       7800,     8600,     6400,     1240,    15600;
          "X"       5200,     5600,     6400,     8800,    11200;
          "Y"       4600,     5000,     4400,     7200,    10200;
          "Z"       4600,     5000,     5400,     7400,     9000;
          "_"       9600,    10000,     8000,         ,         ;
          "`"       4000,     4200,     4200,         ,         ;
          "a"       4200,     4200,     4400,         ,         ;
          "b"       4200,     4400,     4200,         ,         ;
          "c"       4000,     4200,     4000,         ,         ;
          "d"       4000,     4400,     4800,         ,         ;
          "e"       4400,     4400,     4000,         ,         ;
          "f"       3600,     3800,     3800,         ,         ;
          "g"       4400,     4600,     5000,         ,         ;
          "h"       4200,     4600,     4200,         ,         ;
          "i"       2200,     2600,     3200,         ,         ;
          "j"       2800,     3200,     4800,         ,         ;
          "k"       4200,     4600,     4400,         ,         ;
          "l"       2200,     2600,     3400,         ,         ;
          "m"       5800,     6600,     5800,         ,         ;
          "n"       4000,     4400,     4200,         ,         ;
          "o"       4600,     4600,     4200,         ,         ;
          "p"       4200,     4600,     5000,         ,         ;
          "q"       4200,     4600,     4400,         ,         ;
          "r"       3200,     3400,     4000,         ,         ;
          "s"       4000,     4200,     3800,         ,         ;
          "t"       2800,     2800,     3200,         ,         ;
          "u"       4200,     4600,     4400,         ,         ;
          "v"       4200,     4600,     4200,         ,         ;
          "w"       6200,     7800,     6000,         ,         ;
          "x"       4400,     4800,     5000,         ,         ;
          "y"       3800,     4600,     5000,         ,         ;
          "z"       4000,     4000,     4200,         ,         ;
          177          0,        0,        0,        0,        0;
	PAD          0,        0,        0,        0,        0;

View:
          Vx1200		M06,
	Vx1200SUP		M06,
	Vx1200SUB		M06,
	Vp07tdc		M07,
	Vp07tdcSUP	M07,
	Vp07tdcSUB	M07,
	Vp07sym		M07mixed,
	Vp07symSUP	M07mixed,
	Vp07symSUB	M07mixed,
/****	Vpr510e		Mun510e,    /* univers italics stands in here */
/****	Vpr510d		Mun510e,    /* univers italics stands in here */
/****	Vpr110		Mpr110,*/
          Vpr111m		Mpr111m,
	Vpr111mSUP	Mpr111m,
	Vpr111mSUB	Mpr111m,
/****          Vpr111d		Mpr111m,
/****	Vpr111dSUP	Mpr111m,
/****	Vpr111dSUB	Mpr111m,
/****	Vpr211e		Mpr211e,
/****	Vpr211d		Mpr211e,*/
/****	Vpr114		Mpr114,
/****	Vpr118		Mpr118,*/
	Vun110		Mun110,
          Vun111v		Mun111v,
	Vun111vSUP	Mun111v,
	Vun111vSUB	Mun111v,
          Vun111d		Mun111d,
	Vun111dSUP	Mun111d,
	Vun111dSUB	Mun111d,
	Vun211e		Mun211e,
	Vun211d		Mun211e,
	Vun311		Mun311,
	Vun411		Mun411,
	Vun611		Mun611,
          Vun114b		Mun114b,
	Vun118 		Mun118,
	Vun510d		Mun510e,
	Vun510e		Mun510e;

Def:	artsy;
	''	"""";	``	"""";	EN	EN;
	420	"-";			/* hyphen */
	EN-	"-";	EN_	"_";	EM-	"-" "-";
	EM_	"_" "_";	multiply	"x";	pl_mi	"+/-";
	vrule	("!")=0;	bullet	"*";	cright	"(c)";
	modmark	"!";	delmark	"*";
	art (	"(";	art )	")";	art /	"/";
	art X	"X";	art d	"*";	art v	"v";
	art Dv	"v";	art Clf	"(";	art Crt	")";
	art -str	"";	art -stp	"";	art lptp	"(";
	art rptp	")";	art lpht	"(";	art rpht	")";
	art lpmd	"(";	art rpmd	")";	art lpbt	"(";
	art rpbt	")";	art lpfl	"(";	art rpfl	")";
	art |rul	("!")=0;	art -rul	"_";	art /rul	"/";


Def:	proportional_set_b;
	001	027;	010	BS;	023:027	SELF;
	EM	023;	THICK	024;	MEDIUM	025;
	THIN	026;	PS	026;	DEVIT	027;
	HAIR	027;	040	SELF;	",":"/"	SELF;
	177	SELF;	"0":"9"	SELF;	"A":"Z"	SELF;
	"a" "A";	"b" "B";	"c" "C";	"d" "D";	"e" "E";	"f" "F";	"g" "G";
	"h" "H";	"i" "I";	"j" "J";	"k" "K";	"l" "L";	"m" "M";	"n" "N";
	"o" "O";	"p" "P";	"q" "Q";	"r" "R";	"s" "S";	"t" "T";	"u" "U";
	"v" "V";	"w" "W";	"x" "X";	"y" "Y";	"z" "Z";

Def:	complete;
	010	BS;	014	FF;	EM	023;
	THIN	026;	PS	026;	HAIR	027;
	DEVIT	027; 	030	SELF;
	001	030;    /* for spacing control: 1 unit in modified fonts */
	031:037	SELF;          040	EN;	"!":"~"	SELF;
	177	SELF;	200:225	SELF;	277	"";
	modmark	"|";	^0	200;	^1	201;
	^2	202;	^3	203;	^4	204;
	^5	205;	^6	206;	^7	207;
	^8	210;	^9	211;	002	212;
	003	215;	art o	222;
	261	220;	/* dagger */
	275	225;	/* not equal */
	301	221;	/* double dagger */
	375	223;	/* square */

Def:	proportional_set_e;
	010	BS;	EM	023;	EN	040;
	THICK	024;	MEDIUM	025;	THIN	026;
	PS	026;	HAIR	027;	DEVIT	027;
	STROKE	030;
	001	027;	/* for spacing control */
	036	SELF;	037	SELF;          040	EN;
	"!":";"	SELF;	"="	SELF;	"?":"Z"	SELF;
	"_":"z"	SELF;	277	"";

Def:	fixed_set_c;
	010	BS;	014	FF;
          020:027	SELF;	EM	EN EN;	THICK	024;
	MEDIUM	025;	THIN	EN;	PS	EN;
	DEVIT	027;	HAIR	027;	032:035	SELF;
          040	EN;	"!":"~"	SELF;	177	SELF;
	200:225	SELF;	277	"";	modmark	"|";
	^0	200;	^1	201;	^2	202;
	^3	203;	^4	204;	^5	205;
	^6	206;	^7	207;	^8	210;
	^9	211;	002	212;	003	215;
	art o	222;	261	220;	/* dagger */
	275	225;	/* not equal */
	301	221;	/* double dagger */
	375	223;	/* square */


Def:	borrowed_from_pr111m;
	"<"	Vpr111m	"<";	">"	Vpr111m	">";
	"["	Vpr111m	"[";	"\"	Vpr111m	"\";
	"]"	Vpr111m	"]";	"^"	Vpr111m	"^";
	"{"	Vpr111m	"{";	"|"	Vpr111m	"|";
	"}"	Vpr111m	"}";	"~"	Vpr111m	"~";
	"`"	Vpr111m	"`";

Def:	borrowed_from_un111v;
	"<"	Vun111v	"<";	">"	Vun111v	">";
	"["	Vun111v	"[";	"\"	Vun111v	"\";
	"]"	Vun111v	"]";	"^"	Vun111v	"^";
	"{"	Vun111v	"{";	"|"	Vun111v	"|";
	"}"	Vun111v	"}";	"~"	Vun111v	"~";
	"`"	Vun111v	"`";

Font:		Fx1200	Vx1200;
 footrefseparator:	" ";
 wordspace:	4400, 4400, 8800, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fx1200SUP	Vx1200SUP;
 footrefseparator:	" ";
 wordspace:	4400, 4400, 8800, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fx1200SUB	Vx1200SUB;
 footrefseparator:	" ";
 wordspace:	4400, 4400, 8800, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07tdc Vp07tdc;
 footrefseparator:	" ";
 wordspace:	5000, 5000, 10000, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07tdcSUP Vp07tdcSUP;
 footrefseparator:	" ";
 wordspace:	5000, 5000, 10000, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07tdcSUB Vp07tdcSUB;
 footrefseparator:	" ";
 wordspace:	5000, 5000, 10000, EN;
 ref:		artsy;
 ref:		fixed_set_c;

Font:		Fp07sym	Vp07sym;
 footrefseparator:	" ";
 wordspace:	5000, 5000, 10000, EN;
 ref:		artsy;
 ref:		complete;

Font:		Fp07symSUP	Vp07symSUP;
 footrefseparator:	" ";
 wordspace:	5000, 5000, 10000, EN;
 ref:		artsy;
 ref:		complete;

Font:		Fp07symSUB	Vp07symSUB;
 footrefseparator:	" ";
 wordspace:	5000, 5000, 10000, EN;
 ref:		artsy;
 ref:		complete;

/****Font:		Fpr110	Vpr110;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		proportional_set_e;*/

Font:		Fpr111m	Vpr111m;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr111mSUP	Vpr111mSUP;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr111mSUB	Vpr111mSUB;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fpr111_UC	Vpr111m;
 footrefseparator:	THIN;
 ref:		complete;
 ref:		proportional_set_b;  /* use uppercase instead of lower */

/****Font:		Fpr111d	Vpr111d;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		proportional_set_e;*/

/****Font:		Fpr111dSUP	Vpr111dSUP;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		proportional_set_e;*/

/****Font:		Fpr111dSUB	Vpr111dSUB;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		proportional_set_e;*/

/****Font:		Fpr211e	Vpr211e;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		proportional_set_e;
/**** ref:		borrowed_from_pr111m;*/

/****Font:		Fpr211d	Vpr211d;
/**** footrefseparator:	THIN;
/**** ref:		artsy;
/**** ref:		proportional_set_e;*/

/****Font:		Fpr211_UC	Vpr211e;
/**** footrefseparator:	THIN;
/**** ref:		proportional_set_e;
/**** ref:		proportional_set_b;  /* use upper case instead of lower */
/****		EN	040;
/****		HAIR	027;
/****		DEVIT	027;*/

/****Font:		Fpr114	Vpr114;
/**** footrefseparator:	THIN;
/**** wordspace:	4200, 7000, 14000, EN;
/**** ref:		proportional_set_b;*/

/****Font:		Fpr118	Vpr118;
/**** footrefseparator:	THIN;
/**** wordspace:	5000, 7400, 14800, EN;
/**** ref:		proportional_set_b;
/****		EN	040;
/****		HAIR	027;
/****		DEVIT	027;*/

Font:		Fun110	Vun110;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Font:		Fun111v	Vun111v;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fun111vSUP	Vun111vSUP;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fun111vSUB	Vun111vSUB;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		complete;

Font:		Fun111_UC	Vun111v;
 footrefseparator:	THIN;
 ref:		complete;
 ref:		proportional_set_b;  /* use capitals instead of lower case */

Font:		Fun111d	Vun111d;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Font:		Fun111dSUP	Vun111dSUP;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Font:		Fun111dSUB	Vun111dSUB;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Font:		Fun211e	Vun211e;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;
 ref:		borrowed_from_un111v;

Font:		Fun211d	Vun211d;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Font:		Fun211_UC	Vun211e;
 footrefseparator:	THIN;
 ref:		proportional_set_e;
 ref:		proportional_set_b;  /* use upper case instead of lower */

Font:		Fun311	Vun311;
 footrefseparator:	THIN;
 ref:		proportional_set_e;
 ref:		borrowed_from_un111v;

Font:		Fun411	Vun411;
 footrefseparator:	THIN;
 ref:		proportional_set_e;
 ref:		borrowed_from_un111v;

Font:		Fun611	Vun611;
 footrefseparator:	THIN;
 ref:		proportional_set_e;
 ref:		borrowed_from_un111v;

Font:		Fun114b	Vun114b;
 footrefseparator:	THIN;
 wordspace:	4200, 7000, 14000, EN;
 ref:		proportional_set_b;

Font:		Fun118	Vun118;
 footrefseparator:	THIN;
 wordspace:	5000, 7400, 14800, EN;
 ref:		proportional_set_b;

Font:		Fun510e	Vun510e;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;
 ref:		borrowed_from_un111v;

Font:		Fun510d	Vun510d;
 footrefseparator:	THIN;
 ref:		artsy;
 ref:		proportional_set_e;

Units:		pt;
Size:	size9,	9;
Size:	size12,	12;

Artproc:		x9700_writer_$artproc;
/* Attach: */
/* Cleanup: */
/* Comment:		see devices */
DefaultMargs:	48, 24, 24, 48;
DevClass:		"photocomp";
DevName:		"x9700";
Endpage:		014;
Footproc:		x9700_writer_$footproc;
Interleave:	on;
Letterspace:	0;
/* MaxFiles: */
/* MaxPages: */
/* MaxPageLength: */
/* MaxPageWidth: */
MinBotMarg:	0;
MinLead:		3;	/* Minimum Vertical Spacing 1/4 line */
MinSpace:		1;
MinTopMarg:	0;	/* Really 12 "points" into page for top line */
Outproc:		x9700_writer_;
/* Sizes: */
Stream:		on;
/* Taperec: */

Device:		x9700_un;
 comment:		" ;9700DJDE FORMAT=PDE061, BOF=255, FONTINDEX=0, DATA=(1,150), END; ";
 init:		ascii	12;
 maxpagelength:	825;	/* 11 inches at 75 "points" per inch */
 maxpagewidth:	612;	/* 8.5 inches at 72 points per inch */
 Sizes:		size12;

bachelor:	ascii, l3exact, text, footnote, APL, CSR, HR	        Fun111v;
bachelor:	ascii_super, superscript, super, footref	        Fun111vSUP;
bachelor:	ascii_sub, subscript, sub			        Fun111vSUB;
bachelor:	ASCII, l3font				        Fun111_UC;
bachelor:	bold, CSBR, HBR, HBBl, l0exact, l1exact, l2font, l2exact  Fun211e;
bachelor:	BOLD, l0font, l1font			        Fun211_UC;
bachelor:	un311					        Fun311;
bachelor:	un411					        Fun411;
bachelor:	italic, CSI, HmI, ascii_, l4font, l4exact	        Fun510e;
bachelor:	un611					        Fun611;
bachelor:	small					        Fun110;
bachelor:	head, head14, univers14			        Fun114b;
bachelor:	head18					        Fun118;
bachelor:	elite, typ				        Fp07tdc;
bachelor:	small_typ, x1200				        Fx1200;
bachelor:	symbol, sym				        Fp07sym;
bachelor:	sym_super, symbol_super, ssuper		        Fp07symSUP;
bachelor:	sym_sub, symbol_sub, ssub			        Fp07symSUB;

family:	medium, m, centuryschoolbook, cs, helvetica, h;
 member:	/roman, /r, /, /medium, /m	Fun111v;
 member:	/bold, /b, /boldroman, /br	Fun211e;
 member:	/italic, /i, /mediumitalic, /mi		        Fun510e;

family:		condensed, con;
 member:		/roman, /r, /		Fun311;
 member:		/bold, /b			Fun411;
 member:		/italic, /i		Fun611;

viewselect:	Vun111v	 	"2",
		Vun111vSUP	"2U",
		Vun111vSUB	"2D",
		Vun211e		"3",
		Vun311		"4",
		Vun411		"5",
                    Vun510e  		"6",
		Vun611		"7",
		Vun110		"8",
		Vun114b  		"9",
		Vun118		":",
		Vp07tdc	"$",
		Vx1200		"%",
		Vp07sym   	")",
		Vp07symSUP	")U",
		Vp07symSUB	")D";





		    x9700_writer_.pl1               04/23/85  1300.0r w 04/23/85  1123.0      486225



/* compose support routine to write output to x9700 (Xerox 9700) (class bitmap) */

/*			     PREFACE
/* This program handles length and distance values in "picture elements"
/* (pixels). These are the native units in the machine and, sooner or later,
/* all internal length and distance values have to be converted to pixels to
/* actually get device output. In some cases the vertical and horizontal
/* pixels are not of the same size, i.e. a Diablo-type typewriter has
/* 60/inch horizontally and 48/inch vertically.

/* All values which are fixed bin (31) are in millipoints.

/* Debugging tools---
/* There are several switches that control debugging output from a writer--
/*    shared.bug_mode    db_sw    dt_sw	    lg_sw
/*    debug_sw	     detail_sw	    long_sw
/* shared.bug_mode is set via the family of -db arguments. It means that all
/*	of compose is being debugged.
/* db_sw, dt_sw, lg_sw (static) are set by the entries dbn, dtn, and lgn     */
/*	respectively. They are reset by the entries dbf, dtf, and lgf.     */

/* These switches interact with each other. In order to reduce the amount of */
/* code executed when not debugging, these interactions are distilled into   */
/* automatic switches, debug_sw, detail_sw, and long_sw with this logic.     */
/*    debug_sw  = (shared.bug_mode | db_sw);			       */
/*    detail_sw = debug_sw & dt_sw;				       */
/*    long_sw   = debug_sw & lg_sw;				       */
/* debug_sw controls these outputs--				       */
/* -- entry and exit notification				       */
/* -- an interpretation of each line of the input structure before it is     */
/*    acted upon.						       */
/* -- gap count error notification				       */
/* detail_sw controls these outputs--				       */
/* -- justification calculations				       */
/* -- device control (DCxx) display				       */
/* -- plot trace						       */
/* -- put_ trace						       */
/* -- set_font trace					       */
/* -- set_media trace					       */
/* long_sw controls these outputs--				       */
/* -- shows the justified text line				       */
/* -- shows detailed Multics/device translation (simple)		       */

/* This writer emits text in quarter-line increments. */


/* format: style2,ind2,ll79,dclind4,idind15,comcol41,linecom */

x9700_writer_:
  proc (func, code);

/* PARAMETERS */

    dcl func	   fixed bin;	/* function code */
				/* 0 = build a page */
				/* 1 = initialize a page */
				/* 2 = initialize a file */
				/* 3 = clean up */
				/* 4 = prepare epilogue */
    dcl code	   fixed bin (35);	/* error code */

/* LOCAL STORAGE */

    dcl auto_lead	   fixed bin (31);	/* automatic baseline advance */
    dcl BAD_CHAR	   char (1) static options (constant) init ("ÿ");
				/* list of bad font chars */
    dcl bad_chrs	   char (128) var static;
    dcl char_ndx	   fixed bin;	/* index into font table */
    dcl col_width	   fixed bin (31);	/* calculated column width */
    dcl debug_str	   char (1020) var;
    dcl debug_sw	   bit (1);
    dcl detail_sw	   bit (1);
    dcl dev_stat_ptr   ptr static init (null ());
    dcl EM_width	   fixed bin (31);	/* width of EM */
    dcl EN_width	   fixed bin (31);	/* width of EN */
    dcl fcdevfnt	   fixed bin;	/* device font needed by a char */
    dcl fcwidth	   fixed bin (31);	/* font char width */
    dcl first_line	   bit (1) static;
    dcl first_page	   bit (1) aligned static init ("0"b);
    dcl font_in	   fixed bin;	/* current font */
    dcl font_size	   fixed bin (31);	/* point size in current font */
    dcl fonts_done	   bit (36);	/* which fonts have been processed */
    dcl fonts_needed   bit (36);	/* which fonts have been requested */
    dcl (i, j, jj, k, ll)
		   fixed bin;
    dcl ichr	   fixed bin;	/* index to current text character */
    dcl ilin	   fixed bin static;/* page image line counter */
    dcl just_line	   char (1020) var; /* the justified line */
    dcl lineinfoptr	   ptr;		/* -> info structure for image line */
    dcl line_window_size		/* # of window lines per output line */
		   fixed bin;
    dcl Lmarg	   fixed bin (31);	/* left margin */
    dcl loctxt	   char (1020) var; /* max rev leading allowed */
    dcl long_sw	   bit (1);
    dcl max_level	   fixed bin;
    dcl max_revlead	   fixed bin (31) static;
    dcl font_media	   (36) fixed bin;	/* media needed by the fonts */
    dcl media_size	   fixed bin (31);	/* point size in media */
    dcl medselstr	   char (32) var;	/* emitted medsel string */
    dcl need_font	   fixed bin;	/* needed font */
    dcl need_devfnt	   fixed bin;	/* device font for needed font */
    dcl need_size	   fixed bin (31);	/* needed size */
    dcl NULs	   char (4) var static options (constant) init ("");
    dcl pref_sw	   bit (1);	/* effective preface switch */
    dcl quad	   bit (6);	/* alignment flags */
    dcl runout	   fixed bin;	/* # NLs for page runout */
    dcl SHIFT_OP	   bit (1) static options (constant) init ("0"b);
				/* device status info */
    dcl stat_blk	   (100) fixed bin (35) static init ((100) 0);
				/* The developer of a device writer */
				/* may use this block (by defining a */
				/* based overlay) to hold any */
				/* necessary device status info. */
				/* Note that the first word is */
				/* initialized to -1 for each page, */
				/* thus any overlay should keep it */
				/* fixed bin (35) and assure that */
				/* all special device modes are */
				/* reset at the end of each page. */
    dcl text_sw	   bit (1);
    dcl text_width	   fixed bin (31);	/* local text width */
    dcl tchr	   char (1);	/* local text char */
    dcl THIN_width	   fixed bin (31);	/* width of THIN */
    dcl tstr_ptr	   ptr;		/* text string */
    dcl 1 tstr	   aligned based (tstr_ptr),
	2 open	   bit (1) unal,	/* line has something */
	2 white	   bit (1) unal,	/* line is white */
	2 MBZ	   bit (16) unal,
	2 devfnt	   fixed bin unal,	/* starting device font for line */
	2 last_cr	   fixed bin unal,	/* position of last CR or NL */
	2 font	   fixed bin unal,	/* font being processed */
	2 xpos	   fixed bin (31),	/* X position */
	2 ypos	   fixed bin (31),	/* Y position */
	2 w	   fixed bin (31),	/* width of str */
	2 str_ptr	   ptr;
    dcl tstr_line	   char (2048) var based (tstr.str_ptr);
    dcl txtlen	   fixed bin;	/* length of txtstr */
    dcl unstart	   fixed bin (31);	/* start of underscore */
    dcl unstring	   bit (1) static;	/* underscoring is active */
    dcl VECTOR_OP	   bit (1) static options (constant) init ("1"b);
    dcl window_area_ptr		/* points to current window area seg */
		   ptr static init (null);
    dcl window_bottom  fixed bin static init (0);
    dcl window_level   fixed bin;
    dcl window_ptr	   ptr static init (null);
    dcl 1 window	   (window_top:window_bottom) aligned like tstr
		   based (window_ptr);
    dcl window_top	   fixed bin static init (0);
    dcl word	   char (4090) var; /* word accumulator */
    dcl wrdwidth	   fixed bin (31);	/* word width in MPTS */
    dcl Xmov	   fixed bin (31);	/* horizontal CTL movement */
    dcl Xmptstrk	   fixed bin (31);	/* horizontal mpt -> stroke conv */
    dcl Xpixel	   fixed bin (31);	/* horizontal pixel size */
    dcl Xpos	   fixed bin (31);	/* current horizontal position */
    dcl Xspc	   fixed bin (31);	/* horizontal movement */
    dcl Xmpts	   fixed bin (31);	/* temp horiz value */
    dcl Yinit	   fixed bin (31);	/* initial page depth */
    dcl Ymov	   fixed bin (31);	/* vertical CTL movement */
    dcl Ypixel	   fixed bin (31);	/* vertical pixel size */
    dcl Ypos	   fixed bin (31);	/* current vertical position */
    dcl Yspc	   fixed bin (31);	/* vertical movement */
    dcl Ympts	   fixed bin (31);	/* temp vert value */

    dcl (addr, bin, divide, fixed, index, length, max, min, mod, null, pointer,
        size, string, substr, unspec)
		   builtin;
    dcl (cleanup, comp_abort, null_font_char, overlength_line, zero_font_index)
		   condition;

    dcl error_table_$fatal_error
		   fixed bin (35) ext static;
    dcl error_table_$unimplemented_version
		   fixed bin (35) ext static;
    dcl comp_error_table_$limitation
		   fixed bin (35) ext static;
    dcl comp_error_table_$program_error
		   fixed bin (35) ext static;

    dcl ioa_$rs	   entry options (variable);
    dcl ioa_$rsnnl	   entry options (variable);
    dcl translator_temp_$get_segment
		   entry (char (*) aligned, ptr, fixed bin (35));
    dcl translator_temp_$release_all_segments
		   entry (ptr, fixed bin (35));
/**** &dcls FOR x9700 */
dcl comment_ptr	   ptr;		/* the DJDE string */
    dcl 1 comment	   aligned based (comment_ptr),
	2 len	   fixed bin (21),
	2 str	   char (0 refer (comment.len)) unaligned;
    dcl FNL	   char (2)	/* full newline */
		   static options (constant) initial ("1
");
    dcl hot_chars	   char (9) static options (constant)
		   init ("");
    dcl inf_media      bit (36);	/* inferior fonts */
    dcl MAX_STR	   fixed bin static options (constant) init (130);
    dcl PENDOWN	   char (1) static options (constant) init ("_");
    dcl PENUP	   char (1) static options (constant) init ("");
    dcl QNL	   char (2)	/* quarter newline */
		   static options (constant) initial ("2
");
    dcl sup_media      bit (36);	/* superior fonts */
/**** END x9700 */
%page;
    code = 0;			/* clear error code */

    if func = 3			/* clean up */
    then
      do;
/**** &cleanup FOR x9700 */
/**** NO CODE *//**** END x9700 */
        return;
      end;

    if func = 1			/* new page */
    then
      do;
init:
  entry;				/* called by pco */
        stat_blk (*) = 0;
        stat_blk (1) = -1;
        dev_stat_ptr = addr (stat_blk);
        return;
      end;

    if func = 2			/* new input file */
    then
      do;
myself:				/* check structure versions */
        const.outproc_ptr = codeptr (myself);
        if shared.version ^= shared_version
	| option.version ^= option_version | page.version ^= page_version
	| comp_dvid.version ^= comp_dvid_version
        then
	do;
	  code = error_table_$unimplemented_version;
	  if db_sw
	  then
	    do;
	      call ioa_ ("  shared.version=^i", shared.version);
	      call ioa_ ("  shared_version=^i", shared_version);
	      call ioa_ ("  option.version=^i", option.version);
	      call ioa_ ("  option_version=^i", option_version);
	      call ioa_ ("	page.version=^i", page.version);
	      call ioa_ ("	page_version=^i", page_version);
	      call ioa_ ("	dvid.version=^i", comp_dvid.version);
	      call ioa_ ("	dvid_version=^i", comp_dvid_version);
	    end;
	  return;
	end;

        bad_chrs = "";
        unstring = "0"b;
        first_page = "1"b;
/**** &file_init FOR x9700 */
max_revlead = -12000;		/* back up only 1 line */
/**** END x9700 */
        return;
      end;			/**/
				/* set debug switches */
    debug_sw, detail_sw, long_sw, pref_sw, text_sw = "0"b;
    debug_sw = (shared.bug_mode | db_sw);
    detail_sw = debug_sw & dt_sw;
    long_sw = debug_sw & lg_sw;
    text_sw = debug_sw & tx_sw;
    pref_sw = debug_sw & pf_sw;

    if func = 4			/* prepare epilogue */
    then
      do;
        page_record_ptr = addr (page_image.text_ptr -> record.page_record);
        unspec (page_record) = "0"b;
/**** &epilogue FOR x9700 */
/**** NO CODE *//**** END x9700 */
        return;
      end;

/* func = 0			   build page */
    line_window_size = divide (12000, comp_dvt.min_lead, 17, 0);
    window_top = -line_window_size;
    window_bottom = divide (page.parms.length, comp_dvt.min_lead, 17, 0);

    if debug_sw
    then call
	 ioa_ ("x9700_writer_(^a): (pag=^a lct=^d lvl=^d:^d)",
	 option.device, page.hdr.pageno, page_image.count, window_top,
	 window_bottom);

    if page_image.count = 0
    then
      do;
        call
	comp_report_ (4, 0, "No output lines on page " || page.hdr.pageno,
	addr (ctl.info), "");
        return;
      end;

    on cleanup call release_window;	/**/
				/* preset local stuff */
    auto_lead, font_in, need_devfnt, media_size, font_size, Xpos, Ypos, Yinit,
      font_media (*) = 0;
    Xpixel = comp_dvt.min_WS;
    Ypixel = comp_dvt.min_lead;
    page_record_ptr = addr (page_image.text_ptr -> record.page_record);
/**** &page_init FOR x9700 */
/**** NO CODE *//**** END DEVICE x9700 */
rescan_page:			/* (re)starting page */
				/* get storage for output image */
    call translator_temp_$get_segment ("compose", window_area_ptr, ercd);
    if ercd ^= 0
    then
      do;
        call com_err_ (ercd, "compose", "Defining an output window area.");
        signal cleanup;
        return;
      end;

    Xspc, Yspc = 0;

    window_ptr = allocate (window_area_ptr,
      (window_bottom - window_top + 1) * size (tstr));
    unspec (window) = "0"b;
    window.str_ptr = null;
    unspec (page_record) = "0"b;
    first_line = "1"b;
    window_level, max_level = 0;
    tstr_ptr = addr (window (0));
    if tstr.str_ptr = null
    then tstr.str_ptr = allocate (window_area_ptr, 1024); 
    tstr_line = "";					
    tstr.devfnt = 0;

/**** &image_init FOR x9700 */
if first_page
      then
        do;			/* emit DJDE */
	window_level, max_level = 0;
	tstr_ptr = addr (window (0));
	tstr.str_ptr = allocate (window_area_ptr, 1024); 
	medselstr = "";
	comment_ptr = pointer (const.devptr, comp_dvt.comment_r);
	call put_str ((comment.str), 0);
	call put_;
	tstr_line = "";		/* clean up */
	tstr.open = "0"b;
	first_page = "0"b;
        end;

    if comp_dvt.pdl_max > 792000	/* Center 11" frob on longer page */
    then if page.length <= comp_dvt.pdl_max
         then			/* This is an idiosyncracy in the */
	 do;			/* way that the 9700 handles */
				/* vertical space; it thinks that a */
				/* page is 825 pts long when its */
				/* actually only 792 pts. Thus, we */
				/* try to center when the real page */
	   if page.length > 792000	/* length is between 792 and 825 */
	   then Yinit =
		   -round (divide (comp_dvt.pdl_max - page.length, 2 * Ypixel, 31, 1), 0);
	   else Yinit = -round (divide (comp_dvt.pdl_max - 792000, 2 * Ypixel, 31, 1), 0);
	 end;

/**** END x9700 */
    if debug_sw
    then call
	 ioa_ (":iln fn/ln   ch/gp  lmarg   rmarg   width   depth"
	 || "    lead s med  fnt  sz");
%page;
image_loop:
    do ilin = 1 to page_image.count;	/* for all given image lines */
      debug_sw, detail_sw, long_sw, text_sw = "0"b;
      fonts_done, fonts_needed ="0"b;
      Lmarg, col_width, text_width = 0;

      if (shared.bug_mode | db_sw)
      then if ilin >= db_line
	 then
	   do;
	     debug_sw = "1"b;
	     if dt_sw
	     then detail_sw = "1"b;
	     else detail_sw = "0"b;
	     if lg_sw
	     then long_sw = "1"b;
	     else long_sw = "0"b;
	     if tx_sw
	     then text_sw = "1"b;
	     else text_sw = "0"b;
	   end;			/**/
				/* set text pointer	       */
      txtstrptr = page_image.line (ilin).ptr;
      loctxt = txtstr;		/* copy txtstr */
      txtlen = length (txtstr);	/* and record length */

trim_font:			/* trim trailing font change */
      if txtlen > 7
      then if substr (loctxt, txtlen - 7, 2) = "À"
	 then
	   do;
	     txtlen = txtlen - 8;
	     goto trim_font;
	   end;

      lineinfoptr = addr (page_image.line (ilin).info);
      quad = page_image.line (ilin).quad;

      if debug_sw
      then call blat;

      Yspc = divide (page_image.line (ilin).depth, Ypixel, 31, 0) - Ypos - Yinit;
      if ilin > 1
      then Yspc = Yspc - auto_lead;	/* account for the "free" amount */

      need_font = page_image.line (ilin).lfnt;
      need_size = page_image.line (ilin).lsize;

      if txtlen > 0
      then
        do;

	if font_in ^= need_font
	then call set_font (need_font, need_size);

	if page_image.line (ilin).lmarg > 0
	then Lmarg = divide (page_image.line (ilin).lmarg, Xmptstrk, 31, 0);
	if page_image.line (ilin).net > 0
	then col_width = divide (page_image.line (ilin).net, Xmptstrk, 31, 0);
	if page_image.line (ilin).width > 0
	then text_width = divide (page_image.line (ilin).width, Xmptstrk, 31, 0);
/**** &line_init FOR x9700 */
sup_media, inf_media = "0"b;/* clear font control bits */
/**** END x9700 */
	if quad = quadr | quad = quadc
	then			/* if setting right */
	  do;			/* or center */
	    Xspc = col_width - text_width;
	    if quad = quadc		/* if centering, take half */
	    then Xspc = round (divide (max (Xspc, 0), 2, 31, 1), 0);
	    Lmarg = Lmarg + Xspc;
	  end;			/**/
				/* if justifying and device doesnt */
	if quad = just & ^comp_dvt.justifying
				/* and there are some gaps */
	& page_image.line (ilin).gaps > 0
	then call pad_block;

rescan_line:
	if detail_sw
	then call
	       ioa_ ("^5x(rescan_line: Lmarg=^f lvl=^d)",
	          show (Lmarg * Xmptstrk, 12000), window_level);

	word = "";		/* clear word accumulator */
	wrdwidth = 0;

	if Yspc ^= 0
	then call plot (SHIFT_OP, 0, Ypos + Yspc);
	Yspc = 0;		/* initial movement */
	Xspc = Lmarg - Xpos;

	if font_in ^= page_image.line (ilin).lfnt
	  | font_size ^= page_image.line (ilin).lsize
	then call set_font (page_image.line (ilin).lfnt,
	       page_image.line (ilin).lsize);

char_loop:			/* process each character */
	do ichr = 1 to txtlen;
	  tchr = substr (loctxt, ichr, 1);

	  if tchr ^= DC1		/* do any font chars */
	  then
font_char:
	    do;
	      char_ndx = rank (tchr); /* fnttbl index for text char */
				/* -> replacement */
	      repl_str_ptr = fnttbl.replptr (char_ndx);
				/* if there's no replacement */
	      if repl_str_ptr = null ()
	      then
	        do;		/* if not already reported */
		if index (bad_chrs, tchr) = 0
		then
		  do;		/* add to bad chars and report */
		    bad_chrs = bad_chrs || tchr;
		    call
		      comp_report_$ctlstr (2,
		      comp_error_table_$program_error, lineinfoptr, loctxt,
		      "Font ^a, no replacement for ""^a"" (\^.3b)",
		      fnttbl.entry.name, tchr, unspec (tchr));

		    if abrt_sw	/* abort if desired */
		    then signal null_font_char;
		  end;
		goto end_chars;	/* skip rest of line */
	        end;		/**/
				/* copy fnttbl data */
	      fcdevfnt = fnttbl.devfnt (char_ndx);
				/* white space? */
	      if fnttbl.white (char_ndx)
	      then
	        do;
		if word ^= ""	/* flush current word */
		then
		  do;
		    call put_str (word, wrdwidth);
		    wrdwidth = 0;
		    tstr.white = "0"b;
		  end;

		fcwidth = fnttbl.units (char_ndx);
		Xspc = Xspc + fcwidth;

		if text_sw & ^pref_sw
	          then call ioa_ ("^5x(text: ^d ^i ^f ^f ""^1a"" WS)",
			fcdevfnt, fcwidth,
			show (fcwidth * Xmptstrk, 12000),
			show ((Xpos + Xspc) * Xmptstrk, 12000),
			comp_util_$display ((tchr), 0, "0"b));
	        end;		/**/
				/* if cant put char */
	      else if fcdevfnt ^= tstr.devfnt & tstr.devfnt ^= 0
	      then
	        do;
		if word ^= ""	/* flush current word */
		then
		  do;
		    call put_str (word, wrdwidth);
		    wrdwidth = 0;
		    tstr.white = "0"b;
		  end;		/**/
				/* ..treat like whitespace */
		fcwidth = fnttbl.units (char_ndx);
		Xspc = Xspc + fcwidth;

		if text_sw & ^pref_sw
	          then call ioa_ ("^5x(text: ^d ^i ^f ^f ""^a"" ^^font)",
			fcdevfnt, fcwidth,
			show (fcwidth * Xmptstrk, 12000),
			show ((Xpos + Xspc + wrdwidth) * Xmptstrk,
			12000), comp_util_$display ((tchr), 0, "0"b));
	        end;

	      else		/* not white space */
	        do;		/* emit any accumulated motion */
	          if Yspc ^= 0 | (Xspc ^= 0 & txtlen ^= 0)
	          then call plot (SHIFT_OP, Xpos + Xspc, Ypos + Yspc);
		Xspc, Yspc = 0;
if tstr.devfnt = 0
		then call set_media (font_in, fcdevfnt);
/**** &process_text FOR x9700 */
if tstr_line = ""
        then call put_str ((medselstr), 0);

/**** END x9700 */
	          word = word || replstr;
		fcwidth = fnttbl.units (char_ndx);
		wrdwidth = wrdwidth + fcwidth;

		if text_sw & ^pref_sw
	          then call ioa_ ("^5x(text: ^d ^i ^f ^f ""^a"" -> ""^a^va"")",
			fcdevfnt, fcwidth,
			show (fcwidth * Xmptstrk, 12000),
			show ((Xpos + Xspc + wrdwidth) * Xmptstrk,
			12000), comp_util_$display ((tchr), 0, "0"b),
			comp_util_$display (replstr, 0, "0"b),
			repl_str.len - length (rtrim (replstr)),
			" ");
	        end;
	    end font_char;

	  else
ctl_char:
	    do;			/* its a DC1 control string */
	      if word ^= ""	/* flush current word */
	      then
	        do;
		call put_str (word, wrdwidth);
		wrdwidth = 0;
		tstr.white = "0"b;
	        end;

	      DCxx_p =		/* set control string overlay ptr    */
	        addr (substr (loctxt, ichr, 1));
				/* for device/writer controls  */
	      if dcxx.ctl.type = "000"b
	      then
	        do;
(nostrg):		if long_sw
		then call
		       ioa_ ("^5x(CTL: ^[wait^]^[unstrt^]^[unstop^]"
		       || " ^a^[ Xpos=^f^;^s^])", (dcfs.type = type_wait),
		       (dcfs.type = type_unstart),
		       (dcfs.type = type_unstop),
		       comp_util_$display
		       ((substr (loctxt, ichr, dcxx.leng + 3)), 0, "0"b),
		       (dcfs.type = type_unstart)
		       | (dcfs.type = type_unstop),
		       show ((Xpos + Xspc) * Xmptstrk, 12000));
/* start underscore?      */
		if dcfs.type = type_unstart
		then
		  do;
		    unstart = max (Xpos + Xspc, Lmarg);
		    unstring = "1"b;
		  end;		/**/
				/* stop underscore?       */
		if dcfs.type = type_unstop
		then
		  do;		/* underscoring active? */
		    if unstring & tstr_line ^= ""
		      &
		      ^(page_image.line (ilin).cbar
		      | page_image.line (ilin).mrgtxt)
		    then
		      do;
		        call put_uns;
		        unstring = "0"b;
		      end;
		  end;
	        end;		/**/
				/* a font change? */
	      else if dcfs.type = type_font 
	      then
	        do;
		if long_sw
		then
		  do;
(nostrg):		    debug_str = substr (loctxt, ichr, dcxx.leng + 3);
		    call ioa_ ("^5x(CTL: font ^a)",
		      comp_util_$display (debug_str, 0, "0"b));
		  end;

		need_font = dcfs.f;
		need_size = dcfs.p;
		call set_font (need_font, need_size);
	        end;		/**/
				/* a literal? */
	      else if dcfs.type = type_lit
	      then
	        do;
		call put_str (substr (loctxt, ichr + 3, dcxx.leng), 0);

		if long_sw
		then
		  do;
(nostrg):		    debug_str = substr (loctxt, ichr, dcxx.leng + 3);
		    call ioa_ ("^5x(CTL: literal ^a)",
		       comp_util_$display (debug_str, 0, "0"b));
		  end;
	        end;

	      else		/* its either a shift or a vector */
	        do;		/* fetch a short X */
		if (dcxx.Xctl = "01"b) 
		then Xmpts = dcshort_val.v1;
				/* fetch a long X */
		else if (dcxx.Xctl = "10"b)
		then Xmpts = dclong_val.v1;
		else Xmpts = 0;	/* no X movement */

		if (dcxx.Xctl ^= "00"b)
		then		/* if X is given */
		  do;		/* then Y is in v2 */
				/* fetch a short Y */
		    if (dcxx.Yctl = "01"b)
		    then Ympts = dcshort_val.v2;
				/* fetch a long Y */
		    else if (dcxx.Yctl = "10"b)
		    then Ympts = dclong_val.v2;
		    else Ympts = 0;
		  end;

		else		/* no X was given */
		  do;		/* fetch a short Y */
		    if (dcxx.Yctl = "01"b)
		    then Ympts = dcshort_val.v1;
				/* fetch a long Y */
		    else if (dcxx.Yctl = "10"b)
		    then Ympts = dclong_val.v1;
		    else Ympts = 0;
		  end;		/**/
				/* shift */
		if dcxx.type = "100"b
		then
		  do;
		    if font_in = 0
		    then call set_font (need_font, need_size);

		    Xmov = sign (Xmpts)
		      *
		      round (divide (abs (Xmpts) - 4, Xmptstrk, 31, 1), 0);
		    Xspc = Xspc + Xmov;

		    Ymov = sign (Ympts)
		      *
		      divide (abs (Ympts), Ypixel, 17, 0);
		    Yspc = Yspc + Ymov;

		    if long_sw
		    then
		      do;
(nostrg):		        debug_str = substr (loctxt, ichr, dcxx.leng + 3);
		        call ioa_ ("^5x(CTL: shift ^f ^f (^f ^f) ^a)",
		          show (Xmpts, 12000), show (Ympts, 12000),
			show (Xspc * Xmptstrk, 12000), show (Yspc,12000),
		          comp_util_$display (debug_str, 0, "0"b));
		      end;
		  end;

		else
		  do;		/* not shift, it must be vector */
		    if Xspc ^= 0 | Xmpts > 0
		    then if font_in ^= need_font | font_size ^= need_size
		      then call set_font (need_font, need_size);
			 	/* need to position first? */
		    if Xspc ^= 0 | Yspc ^= 0
		    then call plot (SHIFT_OP, Xpos + Xspc, Ypos + Yspc);
		    Xspc, Yspc = 0;

		    Xspc = divide (Xmpts, Xmptstrk, 31, 0);
		    Yspc = divide (Ympts, Ypixel, 31, 0);

		    if long_sw
		    then
		      do;
(nostrg):		        debug_str = substr (loctxt, ichr, dcxx.leng + 3);
		        call ioa_ ("^5x(CTL: vector ^f ^f ^a)",
		          show (Xmpts, 12000), show (Ympts, 12000),
		          comp_util_$display (debug_str, 0, "0"b));
		      end;
		    call plot (VECTOR_OP, Xpos + Xspc, Ypos + Yspc);
		    Xspc, Yspc = 0;
		  end;
	        end;		/**/
				/* move to last ctl char */
	      ichr = ichr + dcxx.leng + 2;
	  end ctl_char;		/* end of control sequence loop */
end_chars:
	end char_loop;

	if word ^= ""	/* flush last word */
	then
	  do;
	    call put_str (word, wrdwidth);
	    wrdwidth = 0;
	    tstr.white = "0"b;
	  end;

	if unstring 			/* underscoring active? */
	  & ^(page_image.line (ilin).cbar | page_image.line (ilin).mrgtxt)
	then call put_uns;
/**** &line_finish FOR x9700 */
if tstr.devfnt > 0		/* if device font has been set */
	then
	  do;			/* show this one complete */
	    substr (fonts_done, tstr.font, 1) = "1"b;

	    if tstr_line = medselstr	/* empty line? */
	    then
	      do;
	        tstr_line = "";
	        tstr.devfnt = 0;
	      end;		/**/
				/* is it a superior font? */
	    if substr (sup_media, tstr.font, 1)
	    then call move_tstr (1);	/**/
				/* is it a inferior font? */
	    else if substr (inf_media, tstr.font, 1)
	    then call move_tstr (-1);
	  end;			/**/
				/* look for another */
	need_font = index (fonts_needed & ^fonts_done, "1"b);

	if need_font > 0		/* if another is needed */
	then
	  do;
	    if tstr.font = 0
	    then
	      do;
	        call set_font (need_font, media_size);
	        call set_media (font_in, font_media (font_in));
	        goto rescan_line;
	      end;

	    if font_media (tstr.font) ^= font_media (need_font)
	    then
	      do;			/* trim trailing media select */
	        if length (tstr_line) > 1
	        then if index (substr (tstr_line, length (tstr_line) - 1),
		        CR || medselstr) = 1
	             then tstr_line = rtrim (tstr_line, CR || medselstr);
				/* set font right away */
	        call set_font (need_font, media_size);
	        call set_media (font_in, font_media (font_in));
	        goto rescan_line;
	      end;
	  end;			/**/
				/* trim trailing media select */
	if length (tstr_line) > 1
	then if index (substr (tstr_line, length (tstr_line) - 1),
	          CR || medselstr) = 1
	     then tstr_line = rtrim (tstr_line, CR || medselstr);

/**** END x9700 */
	if detail_sw
	then
	  do;
	    call ioa_ ("^5x(line_finish: tstr lvl=^d ^[^^^]opn Y=^f X=^f ln=^d)",
	      window_level, ^(tstr.open), show (Ypos * Ypixel, 12000),
	      show (Xpos * Xmptstrk, 12000), length (tstr_line));
	      if tstr.open
	      then call ioa_ ("""^a^va""",
	      comp_util_$display (rtrim (tstr_line), 0, "0"b),
	      length (tstr_line) - length (rtrim (tstr_line)), " ");
	  end;
        end;

    end image_loop;

finish_page:
    if detail_sw
    then call ioa_ ("^5x(finish_page:)");
				/* add any trailing lead */
    if page_image.line (page_image.count).white
    then call plot (SHIFT_OP, 0, Ypos +
	 divide (page_image.line (page_image.count).lead, Ypixel, 31, 0));
    call put_;			/* flush output image */

    call release_window;		/* discard image just put */

    if ^option.galley_opt
    then
      do;
        if comp_dvt.endpage ^= "0"b	/* if FF is defined, then */
        then			/* replace last NL with it */
	substr (page_record.text, page_record.leng, 1) =
	  byte (bin (comp_dvt.endpage));
	 			/* else run out the page with NLs */
        else if Ypos < divide (page.parms.length, Ypixel, 31, 0)
        then
	do;
	  runout = divide (page.parms.length, 12000, 31, 0) - 1 -
	    divide (Ypos, line_window_size, 31, 0) - bin (option.stop_opt);
	  page_record.leng = page_record.leng + runout;
	  substr (page_record.text, page_record.leng - runout + 1,
	    runout) = copy (NL, runout);
	end;			/**/
/**** &page_finish FOR x9700 */
/**** NO CODE */
/**** END x9700 */
      end;

    page_record.nextref = "0"b;	/* show nothing follows */

return_:
    if debug_sw
    then call ioa_ ("     (x9700_writer_)");
    return;
%page;
footproc:
   entry (footref, ptr);

/* PARAMETERS */
/* 				actual reference string */
      dcl footref	     (3) char (*) var;
      dcl ptr	     ptr;		/* -> comp_dvt */
				/* &foot_proc for x9700 */
footref (1) = "";
      footref (3) = "";
if (shared.bug_mode | db_sw)
    then do;
       call ioa_ ("x9700_writer_$footproc: ^a",
	comp_util_$display (footref (1) || footref (2) || footref (3), 0,
	"0"b));
    end;
    return;

%page;
/* This routine returns a printable interpretation of a native device string */

dcl x9700_writer_$display entry (char (*) var, fixed bin (24),
	bit (1)) returns (char (*) var);

display:
  entry (dtext, dlen, noerr) returns (char (*) var);

/* PARAMETERS */

    dcl dtext	   char (*) var;	/* string to be displayed */
    dcl dlen	   fixed bin (24);	/* chars scanned by this call */
    dcl noerr	   bit (1);	/* 1= dont print error messages */

/* LOCAL STORAGE */

    dcl ch	   char (1);	/* extracted text char */
    dcl ct	   fixed bin;	/* number of duplicate chars */
    dcl dstr	   char (1020) var;	/* working string */
    dcl rtn_str	   char (16384) var;/* return string */

    if dev_stat_ptr = null ()
    then dev_stat_ptr = addr (stat_blk);

    if stat_blk (1) ^= -1		/* check status block */
    then
      do;
        stat_blk (*) = 0;
        stat_blk (1) = -1;
      end;

    rtn_str = "";			/* clear return string */
    ct = 0;

    ch = substr (dtext, 1, 1);	/* extract a char */

    if ch = THIN
    then
      do;
        ct = verify (dtext, THIN);	/* how many? */
        if ct = 0        /* all the rest */
        then ct = length (dtext);
        else ct = ct - 1;

        if ct > 1        /* if more than one */
        then call ioa_$rsnnl ("<THN*^d>", dstr, 0, ct);
        else dstr = "<THN>";

        rtn_str = rtn_str || dstr;
      end;

         else if ch = DEVIT
         then do;
	  ct = verify (dtext, DEVIT);	/* how many? */
	  if ct = 0        /* all the rest */
	  then ct = length (dtext);
	  else ct = ct - 1;

	  if ct > 1        /* if more than one */
	  then call ioa_$rsnnl ("<DVT*^d>", dstr, 0, ct);
	  else dstr = "<DVT>";

	  rtn_str = rtn_str || dstr;
         end;

    else
      do;
device_display:			/* &display FOR DEVICE x9700 */
goto rtn (index (hot_chars, ch));

rtn (1):				/* \020 = EM- */
    ct = verify (dtext, ch);	/* how many? */
    if ct = 0			/* all the rest */
    then ct = length (dtext);
    else ct = ct - 1;

    if ct > 1			/* if more than one */
    then call ioa_$rsnnl ("<EM-*^d>", dstr, 0, ct);
    else dstr = "<EM->";

    rtn_str = rtn_str || dstr;
    goto rtn_end;

rtn (3):				/* \022 = HUGE */
    ct = verify (dtext, ch);	/* how many? */
    if ct = 0			/* all the rest */
    then ct = length (dtext);
    else ct = ct - 1;

    if ct > 1			/* if more than one */
    then call ioa_$rsnnl ("<HUGE*^d>", dstr, 0, ct);
    else dstr = "<HUGE>";

    rtn_str = rtn_str || dstr;
    goto rtn_end;

rtn (4):				/* \023 = EM */
    ct = verify (dtext, ch);	/* how many? */
    if ct = 0			/* all the rest */
    then ct = length (dtext);
    else ct = ct - 1;

    if ct > 1			/* if more than one */
    then call ioa_$rsnnl ("<EM*^d>", dstr, 0, ct);
    else dstr = "<EM>";

    rtn_str = rtn_str || dstr;
    goto rtn_end;

rtn (5):				/* 21 (\024) THICK */
				/* how many? */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<THK*^d>", dstr, 0, ct);
      else dstr = "<THK>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (6):				/* 22 (\025) MEDIUM */
				/* how many? */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<MED*^d>", dstr, 0, ct);
      else dstr = "<MED>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (7):				/* 23 (\026) THIN */
      ct = verify (dtext, ch);
      if ct = 0
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1
      then call ioa_$rsnnl ("<THN*^d>", dstr, 0, ct);
      else dstr = "<THN>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (8):				/* 24 (\027) HAIR */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<HAIR*^d>", dstr, 0, ct);
      else dstr = "<HAIR>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (9):				/* 25 (\030) STROKE */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<STRK*^d>", dstr, 0, ct);
      else dstr = "<STRK>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (0):				/* 0 not hot */
rtn (2):				/* \021 = interfers with DC1 ctls */
      ct = 0;
rtn_end:
				/**/
				/* END DEVICE x9700 */
      end;

disp_ret:
      dlen = ct;

      return (rtn_str);		/* end of display */
%page;
artproc: entry ();			/**/
				/* &art_proc for x9700 */
/**** NO CODE */return;
%page;
blat: proc;

dcl blatstr char (1020) var;

       call ioa_$nnl (":^3d^3d/^d^12t^4d/^i^18t^5(^8f^)" ||
	" ^[I^]^[O^]^[L^]^[C^]^[R^]^[J^]^[L^]^60t^3i ^6a ^f^/^4x", ilin,
	page_image.line (ilin).fileno, page_image.line (ilin).lineno,
	txtlen, page_image.line (ilin).gaps,
	show (page_image.line (ilin).lmarg, 12000),
	show (page_image.line (ilin).rmarg, 12000),
	show (page_image.line (ilin).width, 12000),
	show (page_image.line (ilin).depth, 12000),
	show (page_image.line (ilin).lead, 12000),
	quad & quadi, quad & quado, quad & quadl,
	quad & quadc, quad & quadr, quad & just, (quad = "0"b),
	page_image.line (ilin).lfnt,
	fnttbldata.ptr (page_image.line (ilin).lfnt) -> fnttbl.entry.name,
	show (fnttbldata.ptr (page_image.line (ilin).lfnt) -> fnttbl.entry.size, 1000),
	txtlen);

       blatstr = comp_util_$display (substr (loctxt, 1, txtlen), 0, "0"b);
       call ioa_ ("""^a^va""", blatstr,
	length (blatstr) - length (rtrim (blatstr)), " ");
    end blat;
%page;
release_window:
    proc;

      call translator_temp_$release_all_segments (window_area_ptr, 0);

    end release_window;
%page;
move_tstr:			/* move tstr ptr to new window level */
   proc (incr);

/* PARAMETERS */

   dcl incr	  fixed bin (31);	/* amount to move */

   if detail_sw
   then call ioa_ ("^-(move_tstr: ^d -> ^d)", window_level,
	 window_level + incr);

   window_level = window_level + incr;

   max_level = max (max_level, window_level);
   tstr_ptr = addr (window (window_level));

   tstr.ypos, Ypos = Ypos + incr;
   Xpos = tstr.xpos;
   tstr.open = "1"b;

   if tstr.str_ptr = null
   then tstr.str_ptr = allocate (window_area_ptr, 1024); 
						
   end move_tstr;
%page;
show:
  proc (datum, scale) returns (fixed dec (11, 3));
    dcl datum	   fixed bin (31);
    dcl scale	   fixed bin (31);

      return (round (dec (round (divide (datum, scale, 31, 11), 10), 11, 4), 3));
  end show;
%page;
plot:
  proc (PLOT_OP, new_xpos, new_ypos);

/* This routine moves the current position to (new_xpos,new_ypos), */
/* plotting or shifting according to the value of PLOT_OP. */

/* PARAMETERS */

    dcl PLOT_OP	   bit (1);	/* 0-shift; 1-vector */
    dcl new_xpos	   fixed bin (31);	/* needed horizontal position */
    dcl new_ypos	   fixed bin (31);	/* needed vertical position */

/* LOCAL STORAGE */

    dcl copystr	   char (2048) var;
    dcl exit_str	   char (32) var;
    dcl old_xpos	   fixed bin (31);
    dcl old_ypos	   fixed bin (31);
    dcl penctl	   char (6) var;	/* pen control string */
    dcl pltstr	   char (4090) var;
    dcl pltwidth	   fixed bin (31);
    dcl xii	   fixed bin;	/* working value */
    dcl xmove	   fixed bin (31);	/* X movement */
    dcl ymove	   fixed bin (31);	/* Y movement */

    if new_xpos = Xpos & new_ypos = Ypos
    then return;

    xmove, ymove, pltwidth = 0;
    pltstr = "";

    old_xpos = Xpos;		/* case a VSFT changes Xpos */
    old_ypos = Ypos;
    xmove = new_xpos - Xpos;
    ymove = new_ypos - Ypos;

    if detail_sw
    then call
	 ioa_ ("^5xplot: (^[V^;S^] ^f/^f -> ^f/^f = ^f/^f)", PLOT_OP,
	 show (Xpos * Xmptstrk, 12000), show (Ypos * Ypixel, 12000),
	 show (new_xpos * Xmptstrk, 12000), show (new_ypos * Ypixel, 12000),
	 show (xmove * Xmptstrk, 12000), show (ymove * Ypixel, 12000));

    if ^PLOT_OP			/* if a SHIFT is wanted */
    then
      do;
        if ymove ^= 0			/* any Y movement? */
        then
          do;		
	  if window_level + ymove < window_top | 
	    window_level + ymove > window_bottom
	  then
	    do;
	      call comp_report_$ctlstr (2, comp_error_table_$program_error,
	        lineinfoptr, loctxt,
	        "Attempt to place a line off page ^a at line ^d.",
	        page.hdr.pageno, window_level);
	      signal comp_abort;
	    end;

	  call move_tstr (ymove);
	  ymove = 0;
	  xmove = new_xpos - Xpos;
          end;

        penctl = PENUP;		/* init for pen up */
      end;			/**/
				/* else a VECTOR is wanted */
      else penctl = PENDOWN;		/* init for pen down */
/**** &plot FOR x9700 */

    dcl ch1	     char (1);	/* a spacing char */
    dcl cu	     fixed bin;	/* ch1 width in strokes */

    if ^PLOT_OP			/* if a SHIFT is wanted */
    then
      do;
        if xmove ^= 0                   /* any X movement? */
        then
          do;
	  if xmove < 0
	  then
	    do;
	      if new_ypos = old_ypos	/* on the same line? */
	      & Xpos ^= 0
	      then pltstr = pltstr || CR || medselstr;
	      pltwidth = pltwidth - Xpos;
	      xmove = new_xpos;
	    end;

	  if tstr.devfnt ^= need_devfnt
	  then
	    do;
	      call set_media (font_in, need_devfnt);
	      xmove = new_xpos;
	    end;

	  if tstr_line = medselstr
	  then tstr.white = "1"b;

	  do ch1 = HUGE, EM, EN, THICK, MEDIUM, THIN, DEVIT, STROKE
	    while (xmove > 0);

	    if fnttbl.replptr (rank (ch1)) ^= null
	    then
	      do;
	        cu = fnttbl.units (rank (ch1));
	        penctl = fnttbl.replptr (rank (ch1)) -> replstr;

	        xii = divide (xmove, cu, 17, 0);
	        if xii > 0
	        then
		do;
		  pltstr = pltstr || copy (penctl, xii);
		  pltwidth = pltwidth + xii * cu;
		  xmove = xmove - xii * cu;
		end;
	      end;
	  end;
	end;
      end;			/**/
				/* else a VECTOR is wanted	       */
    else
      do;
        if ymove ^= 0		/* no vertical vectors allowed       */
        then call comp_report_$exact ("Vertical vectors not allowed " ||
	     "for x9700 device.", lineinfoptr);

        if xmove < 0		/* no rev horiz vectors allowed      */
        then call comp_report_$exact ("Reverse horizontal vectors not " ||
	     "allowed for x9700 device.", lineinfoptr);

        else if xmove > 0	/* forward horzontal vector	       */
        then
	do;
	      ch1 = substr (penctl, 1, 1);
	      char_ndx = rank (ch1);
	      repl_str_ptr = fnttbl.replptr (char_ndx);
	      cu = fnttbl.units (char_ndx);

	      if cu > 0
	      then
	        do;
		penctl = substr (replstr, 1, repl_str.len);

		xii = divide (xmove, cu, 17, 0);
		pltstr = pltstr || copy (penctl, xii);
		pltwidth = pltwidth + xii * cu;
	        end;
	   end;
	end;
/**** END x9700 */

plot_return:
     if length (pltstr) > 0
     then call put_str (pltstr, pltwidth);

/*     Xpos, tstr.xpos = new_xpos;*/

     if detail_sw
     then call
	  ioa_ ("^-(plot: ^f/^f lvl=^d ^[^^^]opn^[ W^])", 
	  show (Xpos * Xmptstrk, 12000), show (Ypos * Ypixel, 12000),
	  window_level, ^tstr.open, tstr.white);

/*     Xplt, Yplt = 0;		/* motion used */
   end plot;
%page;
pad_block:
   proc;				/**/

/* these two values in fixed dec so round off doesnt affect pad placement. */
/*      dcl
/*	( igap,			/* gap counter for padding */
/*	  padeach			/* padding interval */
/*	)	     fixed dec (11, 3);*/

      dcl
	( igap,			/* gap counter for padding */
	  padeach			/* padding interval */
	)	     fixed bin;

      dcl gaps	     fixed bin;	/* gap count for line */
      dcl jl_ptr	     ptr;		/* pointer to the justified line */
      dcl just_line	     char (1020) var;
				/* pads per gap */
      dcl pads	     (page_image.line (ilin).gaps) fixed bin;
      dcl padsize	     fixed bin;	/* pad space in pixels */
      dcl 1 pad_ctl	     like dclong_val; /* for inserting pads */
      dcl pad_ctl_ptr    ptr;
      dcl pad_string     char (7) based (pad_ctl_ptr);
      dcl SP_DC1	     char (2) int static options (constant) init (" ");

      just_line = "";		/* clear the justified line */
      jl_ptr = addr (just_line);	/* and set pointer for the overlay */

      if font_in ^= need_font
      then call set_font (need_font, need_size);

      if col_width < 0
      then col_width = divide (page_image.line (ilin).net, Xmptstrk, 31, 0);
      if text_width > 0
      then text_width = divide (page_image.line (ilin).width, Xmptstrk, 31, 0);

      if Xpixel ^= EN_width	/* set up pad_ctl string */
        then
	do;
	  pad_ctl.mark = DC1;
	  pad_ctl.type = type_slx;
	  pad_ctl.leng = dclong1_len;
	  pad_ctl.v2 = 0;
	  pad_ctl_ptr = addr (pad_ctl);
	end;

      gaps = page_image.line (ilin).gaps;
      padsize = max (0, col_width - text_width);
				/* fill in common amount */
      pads = fnttbl.units (rank (STROKE)) * divide (
        divide (padsize, gaps, 17, 0), fnttbl.units (rank (STROKE)), 17, 0);
				/* then get the leftover amount */
      padsize = padsize - pads (1) * gaps;

      if long_sw
      then call
	   ioa_$nnl ("^5x(pad_block: l/w/r=^f/^f/^f gp=^i pd=^i+^i",
	   show (Lmarg * Xmptstrk, 12000),
	   show (text_width * Xmptstrk, 12000),
	   show (page_image.line (ilin).rmarg, 12000), gaps,
	   pads (1), padsize);

    do while (padsize > 0);		/* use up any leftovers */
      padeach =			/* pad interval */
	 max (round (divide (gaps * fnttbl.units (rank (STROKE)), padsize, 17, 1), 0), 1);
      igap = max (round (divide (gaps * fnttbl.units (rank (STROKE)), 2 * padsize, 17, 1), 0), 1);

      do igap = igap to gaps by padeach while (padsize > 0);
        pads (igap) = pads (igap) + fnttbl.units (rank (STROKE));
        padsize = padsize - fnttbl.units (rank (STROKE));
      end;
    end;

    if long_sw
    then call ioa_ ("^(,^i^))", pads);

    ichr = verify (loctxt, " ");	/* start at front of text */
    if ichr > 1
    then just_line = just_line || copy (EN, ichr - 1);

    do j = 1 to gaps;
try_again:			/* find word boundary */
       k = search (substr (loctxt, ichr, txtlen - ichr + 1), SP_DC1) - 1;

       if k < 0			/* MGOD! gap count is too large */
       then
         do;
	 if detail_sw
	 then
	   do;
	     call ioa_$nnl ("gap=^i ", gaps);
	     call blat;
	   end;
	 goto gap_exit;
         end;			/**/
				/* copy word */
         just_line = just_line || substr (loctxt, ichr, k);
         ichr = ichr + k;		/* step over "word" */
				/*  did we find a control? */
         if substr (loctxt, ichr, 1) = DC1
         then
	  do;			/* set pointer    */
	     DCxx_p = addr (substr (loctxt, ichr));
	     k = dcxx.leng + 3;	/* and control string length	       */
				/* copy ctl str	*/
	     just_line = just_line || substr (loctxt, ichr, k);
	     ichr = ichr + k;
	     goto try_again;
	  end;

         ichr = ichr + 1;		/* skip the wordspace */

         if Xpixel = EN_width	/* now, any excess count */
         then just_line = just_line || copy (" ", pads (j));
         else
	 do;
	   pad_ctl.v1 = pads (j) * Xmptstrk;
	   just_line = just_line || pad_string;
	 end;
      end;

gap_exit:
      k = txtlen - ichr + 1;		/* length of the last word */
				/* move the last word */
      just_line = just_line || substr (loctxt, ichr, k);
      loctxt = just_line;		/* switch to the justified line */
      txtlen = length (just_line);

      if long_sw
      then call ioa_ ("^a", comp_util_$display (just_line, 0, "0"b));

   end pad_block;
%page;
put_:
  proc;

    dcl level	   fixed bin;
    dcl level_skip	   fixed bin;

    if detail_sw
    then call
	 ioa_ ("^5x(put: maxlvl=^d)", max_level);

    level_skip = 0;

    if first_line
    then
      do level = window_top to -1	/* discard leading null lines */
        while (^window (level).open);
      end;
    else level = window_top;

    do level = level to max_level;
      tstr_ptr = addr (window (level)); /**/

      if tstr.str_ptr = null
      then
        do;
	tstr.str_ptr = allocate (window_area_ptr, 1024);
	tstr_line = "";
        end;			/**/
				/* &put FOR DEVICE x9700 */
/* for full/partial lines */
      do level_skip = 0 to line_window_size - 1
        while (^window (level + level_skip + 1).open);
      end;			/**/
				/* need a FNL? */
      if level_skip >= line_window_size - 1 | level = max_level
      then
        do;
          if first_page		/* is this the DJDE line? */
          then tstr_line = tstr_line || NL;

          else			/* not DJDE; thus, main body */
	  do;
	    if tstr_line ^= "" & index (reverse (tstr_line), NL) ^= 1
	    then tstr_line = tstr_line || CR;
	    tstr_line = tstr_line || FNL;
	  end;

	level_skip = 3;
        end;			/**/
				/* need a QNL */
      else
        do;
          if tstr_line ^= "" & index (reverse (tstr_line), NL) ^= 1
          then tstr_line = tstr_line || CR;
          tstr_line = tstr_line || QNL;
	level_skip = 0;
        end;
				/**/
				/* END DEVICE x9700 */
      if detail_sw
      then call
	   ioa_ ("^7x(lvl=^d ^d+^d=^d ""^a"")", level, page_record.leng,
	   length (tstr_line), page_record.leng + length (tstr_line),
	   comp_util_$display (tstr_line, 0, "0"b));

      level = level + level_skip;
      tstr.last_cr = 0;
      page_record.leng = page_record.leng + length (tstr_line);
      substr (page_record.text, page_record.leng - length (tstr_line) + 1,
        length (tstr_line)) = tstr_line;
    end;

    if page_record.leng > 0
    then page_record.in_use = "1"b;
    Ypos = tstr.ypos;

  end put_;
%page;
put_str:
  proc (string, width);

    dcl string	   char (4090) var;	/* string to put */
    dcl width	   fixed bin (31);	/* string width */

    dcl (i, j)	   fixed bin;
    dcl new_len	   fixed bin;
    dcl old_len	   fixed bin;
    dcl pos	   fixed bin (31);	/* current position */

    if tstr.devfnt ^= need_devfnt
    then call set_media (font_in, need_devfnt);

    old_len = length (tstr_line) - tstr.last_cr;
    new_len = old_len + length (string);

if new_len > MAX_STR & substr (string, length (string), 1) ^= NL
then
      do;
if long_sw
        then
          do;
            debug_str = comp_util_$display (CR || medselstr, 0, "0"b);
            call ioa_ ("^-(overlay: lvl=^d X=^f^f=0 ^d+^d=^d ""^a^va"")",
	       window_level, show (Xpos * Xmptstrk, 12000),
	       show (-Xpos * Xmptstrk, 12000),
	       old_len, length (CR || medselstr),
	       old_len + length (CR || medselstr), debug_str,
	       length (debug_str) - length (rtrim (debug_str)), " ");
          end;

        tstr_line = tstr_line || CR || medselstr;
        tstr.last_cr = length (tstr_line);
        Xpos = 0;
        call plot (SHIFT_OP, tstr.xpos, Ypos);
        old_len = length (tstr_line) - tstr.last_cr;
        new_len =  old_len + length (string);
end;

    if detail_sw
    then
      do;
        debug_str = comp_util_$display (string, 0, "0"b);
        call ioa_ (
	   "^5x(put_str: lvl=^d X=^f+^f=^f ^d+^d=^d^[(^d)^;^s^] ""^a^va"")",
	   window_level, show (Xpos * Xmptstrk, 12000), show (width * Xmptstrk, 12000),
	   show ((Xpos + width) * Xmptstrk, 12000), old_len, length (string), new_len,
	   (tstr.last_cr > 0), length (tstr_line) + length (string),
	   debug_str, length (debug_str) - length (rtrim (debug_str)), " ");
      end;

    tstr_line = tstr_line || string;
    Xpos, tstr.xpos = Xpos + width;

    string = "";
    width = 0;
    tstr.open = "1"b;
  end put_str;
%page;
put_uns:
  proc;	
    dcl Y_offs fixed bin (31);	/* baseline offset */
    dcl unslen	     fixed bin (31);/* length of underscore */

    Y_offs = 0;
    unslen = Xpos + Xspc - unstart;

    if unslen > 0
    then
      do;
        if detail_sw
        then call
	     ioa_ ("^5x(put_uns: ^f)",
	     show (unslen * Xmptstrk, 12000));

Xspc = unstart;
        call put_str (CR || medselstr, -tstr.xpos);
        Xpos, tstr.xpos = 0;
call plot (SHIFT_OP, Xpos + Xspc, Ypos + Y_offs);
        Xspc, Yspc = 0;		/**/
				/* put the underscore */
        call plot (VECTOR_OP, Xpos + unslen, Ypos);
unstart = Lmarg;

        if detail_sw
        then call ioa_ ("^-(put_uns)");
      end;
  end put_uns;
%page;
set_font:
   proc (new_font, new_size);

/* PARAMETERS */

   dcl new_font	   fixed bin;	/* desired font index */
   dcl new_size	   fixed bin (31);	/* desired pointsize */

   dcl chng	   bit (1);

   chng = (font_in ^= new_font | font_size ^= new_size);

   if chng
   then
     do;
       if detail_sw
       then
         do;
	 if font_in = 0
	 then call ioa_$nnl ("^5x(set_font: 0 - 0. -->");
	 else call
	        ioa_$nnl ("^5x(set_font: ^i ^a ^f -->", font_in,
	        fnttbldata.ptr (font_in) -> fnttbl.entry.name,
	        show (font_size, 1000));
         end;

       font_in = new_font;
     end;

   fnttbl_ptr = fnttbldata.ptr (font_in);
   substr (fonts_needed, font_in, 1) = "1"b;
   need_devfnt = fnttbl.devfnt (32);
/**** &set_font FOR x9700 */
if index (medsel (need_devfnt), "U") = 2
    then substr (sup_media, font_in, 1) = "1"b;
    else if index (medsel (need_devfnt), "D") = 2
    then substr (inf_media, font_in, 1) = "1"b;
    font_media (font_in) = need_devfnt;

/**** END x9700 */
   if siztbl.ct = 1
   then font_size, new_size = siztbl.size (1);
   else font_size = new_size;

   Xmptstrk = divide (font_size, fnttbl.rel_units, 31, 0);
   EM_width =
     divide (font_size * fnttbl.units (rank (EM)), fnttbl.rel_units, 31, 10);
   EN_width =
     divide (font_size * fnttbl.units (rank (EN)), fnttbl.rel_units, 31, 10);
   THIN_width =
     divide (font_size * fnttbl.units (rank (THIN)), fnttbl.rel_units, 31, 10);

   if (detail_sw | long_sw) & chng
   then
     do;
       call ioa_ (" ^i ^a ^f Xscl=^d)", new_font,
         fnttbldata.ptr (new_font) -> fnttbl.entry.name,
         show (font_size, 1000), Xmptstrk);
       if long_sw
       then call ioa_ ("^-(HUGE=^d EM=^d EN=^d THK=^d MED=^d "
	    || "THN=^d HAIR=^d STRK=^d)", fnttbl.units (rank (HUGE)),
	    fnttbl.units (rank (EM)),fnttbl.units (rank (EN)),
	    fnttbl.units (rank (THICK)),fnttbl.units (rank (MEDIUM)),
	    fnttbl.units (rank (THIN)),fnttbl.units (rank (DEVIT)),
	    fnttbl.units (rank (STROKE)));
     end;
  end set_font;
%page;
set_media:
  proc (media_font, new_devfnt);

/* PARAMETERS */

    dcl media_font	   fixed bin;	/* font needing the media */
    dcl new_devfnt	   fixed bin;	/* wanted device font */

/* LOCAL STORAGE */

    dcl chng	   bit (1);	/* 1= media or size has to change */
    dcl med_chng	   bit (1);	/* 1= media has to change */
    dcl size_chng	   bit (1);	/* 1= size has to change */
    dcl temp_r	   bit (18);

    med_chng = tstr.devfnt ^= new_devfnt;
    size_chng = media_size ^= font_size;
    chng = med_chng | size_chng;

    if detail_sw & chng
    then call ioa_$nnl ("^5x(set_media: siz=^f med=^d --> siz=^f med=^d ",
	    show (media_size, 1000), tstr.devfnt, show (font_size, 1000),
	    new_devfnt);
/**** &set_media FOR x9700 */
medselstr = substr (medsel (new_devfnt), 1, 1);

/**** END x9700 */
/**** &set_ps FOR x9700 */
/**** NO CODE */
/**** END x9700 */
      if detail_sw & chng
      then call ioa_ ("sel=""^a"")",
         comp_util_$display ((medsel (new_devfnt)), 0, "0"b));
/* is it a superior font? */
      if substr (sup_media, media_font, 1)
      then call move_tstr (-1);	/**/
				/* is it a inferior font? */
      else if substr (inf_media, media_font, 1)
      then call move_tstr (1);

				/* if not in media needed */
      if med_chng			/* ...change to it */
      then
        do;
	tstr.devfnt = new_devfnt;
	tstr.font = media_font;
        end;

      if length (tstr_line) > 2 & med_chng
      then do;
        tstr.last_cr = length (tstr_line);
        call put_str (CR || medselstr, -Xpos);
      end;

      else if length (tstr_line) <= 2
      then do;
        tstr_line = "";
        tstr.last_cr = 0;
        call put_str ((medselstr), 0);
      end;

      if chng
      then Xpos, tstr.xpos = 0;
end set_media;

/* device x9700 "other_procs" */
/**** NO CODE */dcl db_sw bit (1) aligned static init ("0"b);

dbn: entry;db_sw = "1"b;goto db_join;
dbf: entry;db_sw = "0"b;return;

dcl tx_sw bit (1) aligned static init ("0"b);
txn: entry; tx_sw = "1"b; goto db_join;
txf: entry; tx_sw = "0"b; return;

dcl lg_sw bit (1) aligned static init ("0"b);
lgn: entry; lg_sw = "1"b; goto db_join;
lgf: entry; lg_sw = "0"b; return;

dcl pf_sw bit (1) aligned static init ("0"b);
pfn: entry; pf_sw = "1"b; return;
pff: entry; pf_sw = "0"b; return;

dcl abrt_sw bit (1) aligned static init ("0"b);
abrtn: entry; abrt_sw = "1"b; return;
abrtf: entry; abrt_sw = "0"b; return;

dcl dt_sw bit (1) aligned static init ("0"b);
dtn: entry;dt_sw = "1"b;goto db_join;
dtf: entry;dt_sw = "0"b;return;

alln: entry; db_sw, dt_sw, lg_sw = "1"b; 
db_join:
dcl db_line fixed bin static init (0);
dcl com_err_ entry options (variable);
dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35));
dcl arg char (argl) based (argp);
dcl argl fixed bin;
dcl argp ptr;
dcl ercd fixed bin (35);
dcl error_table_$noarg fixed bin (35) ext static;

db_line = 0;
call cu_$arg_ptr (1, argp, argl, ercd);
if ercd ^= 0
then do;
  if ercd ^= error_table_$noarg
  then call com_err_ (ercd, "x9700_writer_");
  return;
end;
db_line = convert (db_line, arg);
return;

allf: entry; db_sw, lg_sw, tx_sw, pf_sw, dt_sw, abrt_sw = "0"b;
	return;
%page;
/* This one include file contains all the compose includes necessary for an  */
/*  output writer						       */
%	include comp_outproc;

 end x9700_writer_;





		    x9700_writer_.pl1.xdw           04/23/85  1300.0rew 04/23/85  0912.0       89712



&ext device= x9700&;
&ext machines= &.(Xerox 9700)&;
&ext devclass = bitmap&;&+
&ext notes =
/* This writer emits text in quarter-line increments. */
&;&+

&ext dcls=
    dcl comment_ptr	   ptr;		/* the DJDE string */
    dcl 1 comment	   aligned based (comment_ptr),
	2 len	   fixed bin (21),
	2 str	   char (0 refer (comment.len)) unaligned;
    dcl FNL	   char (2)	/* full newline */
		   static options (constant) initial ("1
");
    dcl hot_chars	   char (9) static options (constant)
		   init ("");
    dcl inf_media      bit (36);	/* inferior fonts */
    dcl MAX_STR	   fixed bin static options (constant) init (130);
    dcl PENDOWN	   char (1) static options (constant) init ("_");
    dcl PENUP	   char (1) static options (constant) init ("");
    dcl QNL	   char (2)	/* quarter newline */
		   static options (constant) initial ("2
");
    dcl sup_media      bit (36);	/* superior fonts */
&;&+

&ext file_init=
      max_revlead = -12000;		/* back up only 1 line */
&;&+

&ext display=&+
    goto rtn (index (hot_chars, ch));

rtn (1):				/* \020 = EM- */
    ct = verify (dtext, ch);	/* how many? */
    if ct = 0			/* all the rest */
    then ct = length (dtext);
    else ct = ct - 1;

    if ct > 1			/* if more than one */
    then call ioa_$rsnnl ("<EM-*^d>", dstr, 0, ct);
    else dstr = "<EM->";

    rtn_str = rtn_str || dstr;
    goto rtn_end;

rtn (3):				/* \022 = HUGE */
    ct = verify (dtext, ch);	/* how many? */
    if ct = 0			/* all the rest */
    then ct = length (dtext);
    else ct = ct - 1;

    if ct > 1			/* if more than one */
    then call ioa_$rsnnl ("<HUGE*^d>", dstr, 0, ct);
    else dstr = "<HUGE>";

    rtn_str = rtn_str || dstr;
    goto rtn_end;

rtn (4):				/* \023 = EM */
    ct = verify (dtext, ch);	/* how many? */
    if ct = 0			/* all the rest */
    then ct = length (dtext);
    else ct = ct - 1;

    if ct > 1			/* if more than one */
    then call ioa_$rsnnl ("<EM*^d>", dstr, 0, ct);
    else dstr = "<EM>";

    rtn_str = rtn_str || dstr;
    goto rtn_end;

rtn (5):				/* 21 (\024) THICK */
				/* how many? */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<THK*^d>", dstr, 0, ct);
      else dstr = "<THK>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (6):				/* 22 (\025) MEDIUM */
				/* how many? */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<MED*^d>", dstr, 0, ct);
      else dstr = "<MED>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (7):				/* 23 (\026) THIN */
      ct = verify (dtext, ch);
      if ct = 0
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1
      then call ioa_$rsnnl ("<THN*^d>", dstr, 0, ct);
      else dstr = "<THN>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (8):				/* 24 (\027) HAIR */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<HAIR*^d>", dstr, 0, ct);
      else dstr = "<HAIR>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (9):				/* 25 (\030) STROKE */
      ct = verify (dtext, ch);
      if ct = 0			/* all the rest */
      then ct = length (dtext);
      else ct = ct - 1;

      if ct > 1			/* if more than one */
      then call ioa_$rsnnl ("<STRK*^d>", dstr, 0, ct);
      else dstr = "<STRK>";

      rtn_str = rtn_str || dstr;
      goto rtn_end;

rtn (0):				/* 0 not hot */
rtn (2):				/* \021 = interfers with DC1 ctls */
      ct = 0;
rtn_end:
&;&+

&ext image_init=
      if first_page
      then
        do;			/* emit DJDE */
	window_level, max_level = 0;
	tstr_ptr = addr (window (0));
	tstr.str_ptr = allocate (window_area_ptr, 1024); 
	medselstr = "";
	comment_ptr = pointer (const.devptr, comp_dvt.comment_r);
	call put_str ((comment.str), 0);
	call put_;
	tstr_line = "";		/* clean up */
	tstr.open = "0"b;
	first_page = "0"b;
        end;

    if comp_dvt.pdl_max > 792000	/* Center 11" frob on longer page */
    then if page.length <= comp_dvt.pdl_max
         then			/* This is an idiosyncracy in the */
	 do;			/* way that the 9700 handles */
				/* vertical space; it thinks that a */
				/* page is 825 pts long when its */
				/* actually only 792 pts. Thus, we */
				/* try to center when the real page */
	   if page.length > 792000	/* length is between 792 and 825 */
	   then Yinit =
		   -round (divide (comp_dvt.pdl_max - page.length, 2 * Ypixel, 31, 1), 0);
	   else Yinit = -round (divide (comp_dvt.pdl_max - 792000, 2 * Ypixel, 31, 1), 0);
	 end;
&;&+

&ext line_init=
            sup_media, inf_media = "0"b;/* clear font control bits */
&;&+

&ext process_text=
        if tstr_line = ""
        then call put_str ((medselstr), 0);
&;&+

&ext line_finish=
	if tstr.devfnt > 0		/* if device font has been set */
	then
	  do;			/* show this one complete */
	    substr (fonts_done, tstr.font, 1) = "1"b;

	    if tstr_line = medselstr	/* empty line? */
	    then
	      do;
	        tstr_line = "";
	        tstr.devfnt = 0;
	      end;		/**/
				/* is it a superior font? */
	    if substr (sup_media, tstr.font, 1)
	    then call move_tstr (1);	/**/
				/* is it a inferior font? */
	    else if substr (inf_media, tstr.font, 1)
	    then call move_tstr (-1);
	  end;			/**/
				/* look for another */
	need_font = index (fonts_needed && ^fonts_done, "1"b);

	if need_font > 0		/* if another is needed */
	then
	  do;
	    if tstr.font = 0
	    then
	      do;
	        call set_font (need_font, media_size);
	        call set_media (font_in, font_media (font_in));
	        goto rescan_line;
	      end;

	    if font_media (tstr.font) ^= font_media (need_font)
	    then
	      do;			/* trim trailing media select */
	        if length (tstr_line) > 1
	        then if index (substr (tstr_line, length (tstr_line) - 1),
		        CR || medselstr) = 1
	             then tstr_line = rtrim (tstr_line, CR || medselstr);
				/* set font right away */
	        call set_font (need_font, media_size);
	        call set_media (font_in, font_media (font_in));
	        goto rescan_line;
	      end;
	  end;			/**/
				/* trim trailing media select */
	if length (tstr_line) > 1
	then if index (substr (tstr_line, length (tstr_line) - 1),
	          CR || medselstr) = 1
	     then tstr_line = rtrim (tstr_line, CR || medselstr);
&;&+

&ext plot= &.
    dcl ch1	     char (1);	/* a spacing char */
    dcl cu	     fixed bin;	/* ch1 width in strokes */

    if ^PLOT_OP			/* if a SHIFT is wanted */
    then
      do;
        if xmove ^= 0                   /* any X movement? */
        then
          do;
	  if xmove < 0
	  then
	    do;
	      if new_ypos = old_ypos	/* on the same line? */
	      && Xpos ^= 0
	      then pltstr = pltstr || CR || medselstr;
	      pltwidth = pltwidth - Xpos;
	      xmove = new_xpos;
	    end;

	  if tstr.devfnt ^= need_devfnt
	  then
	    do;
	      call set_media (font_in, need_devfnt);
	      xmove = new_xpos;
	    end;

	  if tstr_line = medselstr
	  then tstr.white = "1"b;

	  do ch1 = HUGE, EM, EN, THICK, MEDIUM, THIN, DEVIT, STROKE
	    while (xmove > 0);

	    if fnttbl.replptr (rank (ch1)) ^= null
	    then
	      do;
	        cu = fnttbl.units (rank (ch1));
	        penctl = fnttbl.replptr (rank (ch1)) -> replstr;

	        xii = divide (xmove, cu, 17, 0);
	        if xii > 0
	        then
		do;
		  pltstr = pltstr || copy (penctl, xii);
		  pltwidth = pltwidth + xii * cu;
		  xmove = xmove - xii * cu;
		end;
	      end;
	  end;
	end;
      end;			/**/
				/* else a VECTOR is wanted	       */
    else
      do;
        if ymove ^= 0		/* no vertical vectors allowed       */
        then call comp_report_$exact ("Vertical vectors not allowed " ||
	     "for &device&. device.", lineinfoptr);

        if xmove < 0		/* no rev horiz vectors allowed      */
        then call comp_report_$exact ("Reverse horizontal vectors not " ||
	     "allowed for &device&. device.", lineinfoptr);

        else if xmove > 0	/* forward horzontal vector	       */
        then
	do;
	      ch1 = substr (penctl, 1, 1);
	      char_ndx = rank (ch1);
	      repl_str_ptr = fnttbl.replptr (char_ndx);
	      cu = fnttbl.units (char_ndx);

	      if cu > 0
	      then
	        do;
		penctl = substr (replstr, 1, repl_str.len);

		xii = divide (xmove, cu, 17, 0);
		pltstr = pltstr || copy (penctl, xii);
		pltwidth = pltwidth + xii * cu;
	        end;
	   end;
	end;
&;&+

&ext set_font=&+
    if index (medsel (need_devfnt), "U") = 2
    then substr (sup_media, font_in, 1) = "1"b;
    else if index (medsel (need_devfnt), "D") = 2
    then substr (inf_media, font_in, 1) = "1"b;
    font_media (font_in) = need_devfnt;
&;

&ext set_media=&+
	medselstr = substr (medsel (new_devfnt), 1, 1);
&;&+

&ext put=&+
				/* for full/partial lines */
      do level_skip = 0 to line_window_size - 1
        while (^window (level + level_skip + 1).open);
      end;			/**/
				/* need a FNL? */
      if level_skip >= line_window_size - 1 | level = max_level
      then
        do;
          if first_page		/* is this the DJDE line? */
          then tstr_line = tstr_line || NL;

          else			/* not DJDE; thus, main body */
	  do;
	    if tstr_line ^= "" && index (reverse (tstr_line), NL) ^= 1
	    then tstr_line = tstr_line || CR;
	    tstr_line = tstr_line || FNL;
	  end;

	level_skip = 3;
        end;			/**/
				/* need a QNL */
      else
        do;
          if tstr_line ^= "" && index (reverse (tstr_line), NL) ^= 1
          then tstr_line = tstr_line || CR;
          tstr_line = tstr_line || QNL;
	level_skip = 0;
        end;
&;&+

&ext foot_proc=
      footref (1) = "";
      footref (3) = "";
&;&+

&comp_dev_writer()



		    bull_copyright_notice.txt       08/30/05  1008.4r   08/30/05  1007.3    00020025

                                          -----------------------------------------------------------


Historical Background

This edition of the Multics software materials and documentation is provided and donated
to Massachusetts Institute of Technology by Group Bull including Bull HN Information Systems Inc. 
as a contribution to computer science knowledge.  
This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology,
Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell Bull Inc., Groupe Bull
and Bull HN Information Systems Inc. to the development of this operating system. 
Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970),
renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership
of Professor Fernando Jose Corbato.Users consider that Multics provided the best software architecture for 
managing computer hardware properly and for executing programs. Many subsequent operating systems
incorporated Multics principles.
Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., 
as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. .

                                          -----------------------------------------------------------

Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without
fee is hereby granted,provided that the below copyright notice and historical background appear in all copies
and that both the copyright notice and historical background and this permission notice appear in supporting
documentation, and that the names of MIT, HIS, Bull or Bull HN not be used in advertising or publicity pertaining
to distribution of the programs without specific prior written permission.
    Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc.
    Copyright 2006 by Bull HN Information Systems Inc.
    Copyright 2006 by Bull SAS
    All Rights Reserved
