[fa.info-mac] writetotroff.sh

info-mac@uw-beaver (12/31/84)

From: Bill Croft <INFO-MAC-REQUEST@SUMEX-AIM.ARPA>

#! /bin/sh
#---------------------------->Cut Here<---------------------------
# This is a shell archive.  To extract the files, save the 
# following text to a seperate file and type "sh filename" 
#
# Run this through sh, NOT csh! 
#
echo x - Makefile '		' '-rw-r--r--  1 van           226 Dec 27 06:22 Makefile'
sed 's/^X//' > Makefile << 'EOF'
XCFLAGS=	-O
X
Xall:	w2t write2troff.data
X
Xw2t:	w2t.o
X	cc -o w2t w2t.o
X
Xw2t.o:	w2t.c write.h
X	cc $(CFLAGS) -c w2t.c
X
Xwrite2troff.data: write2troff.dl
X	fromhex <write2troff.dl >write2troff.data
Xclean:
X	rm -r w2t.o write2troff.data
EOF
echo -n '			 ' ; ls -l Makefile
echo x - w2t.1 '		' '-rw-r--r--  1 van          3118 Dec 27 05:33 w2t.1'
sed 's/^X//' > w2t.1 << 'EOF'
X.TH W2T 1-local
X.SH NAME
Xw2t \- convert MacWrite files to troff input files
X.SH SYNOPSIS
X.B w2t
X[
X.B \-sPointSize
X] [
X.B \-p
X] [
X.B \-d
X] [
X.B \-w
X] [
X.B \-r
X]
Xfile ...
X.br
X.SH DESCRIPTION
X.I W2t
Xreads the
X.I files
Xand produces a
X.I troff
Xinput file on the standard output.  The files should be .data files as
Xtransferred by
X.I macget(1).
X.PP
XBy default, the output file will contain enough
X.I -me
Xmacro commands to cause the output to ``strongly resemble'' the MacWrite
Xoutput.  Currently, this means that justification, spacing, tabs,
Xparagraphing, and certain kinds of text attributes will be the same.  See
XBUGS for a list of things that don't work.
X.PP
XThe
X.B -p
Xoption saves space for pictures.  By default, pictures are ignored completely.
XThis option causes a `.sv' directive of enough space to hold the picture to
Xbe output.
X.PP
XThe
X.B -r
Xoption causes the output to have far fewer
X.I troff
Xcommands inserted.  Essentially, null paragraphs will be converted into .pp
Xmacros, and text attributes will be converted.  This is useful because the
X.I troff
Xto do a verbatim formatting job is rather ugly; this option can be used when
Xthe Mac is just being used to draft the text prior to a more rigorous
Xformatting.
X.PP
XThe
X.B -s
X.I pointsize
Xoption is used to change the document type sizes.  This amount is
Xsubtracted from all point sizes in the document.  By default, this value is
X2.  This will convert most MacWrite documents from 12 point to 10 point.
X.I Pointsize
Xcan be zero (the MacWrite pointsizes will be used) or negative (the MacWrite
Xpointsizes will be scaled up).
X.PP
XThe
X.I -w
Xoption turns intraparagraph wrapping off.  A MacWrite paragraph is a single
Xline of text with no newlines.
X.I W2t
Xwill wrap these lines at about 80 columns by default.  I have never seen an
Xapplication where this wrapping was undesirable, but...
X.PP
XThe
X.I -d
Xoption causes an immense amount of debugging information to appear
Xinterspersed with the output on stdout.
X.PP
XSince the table & math abilities of MacWrite are limitted,
X.I tbl
Xand
X.I eqn
Xcan be included in the MacWrite document.  I.e., lines between .TS/.TE
Xor .EQ/.EN will be treated specially.  Other troff directives (lines
Xstarting with a `.') will be passed through but may not do what you expect.
X.PP
X.SH "SEE ALSO"
Xmacget(1)
X.SH BUGS
X.PP
XPictures are barely supported (you will need scissors & glue).
X.PP
XHeaders and footers are ignored.
X.PP
XDecimal tabs are not handled correctly.
X.PP
XThe output is heavily -me macro dependent.
X.PP
X.PP
XAll fonts map into troff's Times Roman.
X.PP
XText attributes are not quite right.  Bold, italic, subscript, and
Xsuperscript work.  Underlining maps to italic.  Shadow maps to bold.
XMixed attributes map to either bold or italic.
X.PP
XAll the special characters of the standard Mac Geneva font map into
Xsome (reasonable?) troff character but the mapping is fixed.  Font dependent
Xcharacter conversions (e.g., for the Princeton math font) should be supported.
X.SH AUTHOR
XMichael Caplinger, Rice University (mike@rice)
X.br
XChanges for Vax & some additions by Van Jacobson, Lawrence Berkeley Laboratory
X(van@lbl-csam.arpa).
EOF
echo -n '			 ' ; ls -l w2t.1
echo x - w2t.c '		' '-rw-r--r--  1 van         16105 Dec 27 05:33 w2t.c'
sed 's/^X//' > w2t.c << 'EOF'
X/*
X    MacWrite to troff input converter.
X
X    version 0.1, Michael Caplinger (mike@rice.arpa), October 1984.
X    version 0.2-4, Van Jacobson (van@lbl-rtsg.arpa), Dec 84
X		added byte swap routines for Vax, added translations
X		for most of Mac's extended characters, added pass-
X		through for tables & equations, changed font cmds
X		from R-I-B-S form to 1-2-3-4 form to allow font
X		changing with ditroff, corrected a couple of minor
X		glitches, add "-p" flag to output space for pictures.
X*/
X
X/*
X    copyright (c) 1984, Michael Caplinger.
X    May be freely redistributed, but this comment must remain in the
X    program or any derivative.
X*/
X
X#define VERSION "0.4"
X
X#include <stdio.h>
X#include "write.h"
X
Xunsigned short ntohs();
X#define SWAP(s) (s)=ntohs(s);
X
X/* Current Document Context */
Xint curPoint = 12;
Xint curStyle = 0;
Xint curFont;
Xint curJust = -1;
Xint curRight = -1;
Xint curLeft = -1;
Xint curSpacing = -1;
Xfloat curIndent = -1.;
Xfloat curLinelength = -1.0;
Xfloat curParIndent = -1.;
X
X/* Program Option Flags */
Xint verbose = 0;
Xint wrap = 1;
Xint pflag = 0;
Xint basePoint = 2;
Xint raw = 0;
X
Xmain(argc, argv)
Xchar **argv;
X{
X    int f;
X
X    setFlags(argc, argv);
X    argv++;
X    while(*argv) {
X    	if(argv[0][0] != '-') {
X	    f = open(argv[0], 0);
X	    if(f >= 0) processFile(f);
X	}
X	argv++;
X    }
X}
X
XprocessFile(f)
Xint f;
X{
X    struct global global;
X    struct document text, header, footer;
X    struct infoArrayElem *textInfo, *headerInfo, *footerInfo;
X    char *data;
X    struct textHeader *textHeader;
X    struct paraHeader paraHeader;
X    short formatRunLength;
X    char *cp;
X    int i, j, k, col;
X    struct format *fp, *startfp, *endfp;
X    struct ruler *ruler;
X    int needSpace = 0;
X    int skipBlanks = 0;
X    int lastWasFormat = 0;
X    int doingTable = 0;
X
X    read(f, &global, 140);
X    SWAP(global.versionNumber)
X    SWAP(global.paraOffset)
X    SWAP(global.paraCount)
X    SWAP(global.headerParaCount)
X    SWAP(global.footerParaCount)
X    SWAP(global.activeDoc)
X    SWAP(global.startPageNum)
X    read(f, &text, 34);
X    read(f, &header, 34);
X    read(f, &footer, 34);
X    debug("version %d\n", global.versionNumber);
X    debug("%d paragraphs in main text\n", global.paraCount);
X    
X    textInfo = (struct infoArrayElem *) malloc(global.paraCount * 8);
X    headerInfo = (struct infoArrayElem *) malloc(global.headerParaCount * 8);
X    footerInfo = (struct infoArrayElem *) malloc(global.footerParaCount * 8);
X    read(f, textInfo, global.paraCount * 8);
X    for(j=0; j<global.paraCount; j++) {
X	SWAP(textInfo[j].paraHeight)
X	SWAP(textInfo[j].position)
X    }
X    read(f, headerInfo, global.headerParaCount * 8);
X    for(j=0; j<global.headerParaCount; j++) {
X	SWAP(headerInfo[j].paraHeight)
X	SWAP(headerInfo[j].position)
X    }
X    read(f, footerInfo, global.footerParaCount * 8);
X    for(j=0; j<global.footerParaCount; j++) {
X	SWAP(footerInfo[j].paraHeight)
X	SWAP(footerInfo[j].position)
X    }
X
X    doPrelude();
X    for(j = 0; j < global.paraCount; j++) {
X	read(f, &paraHeader, 4);
X	SWAP(paraHeader.type)
X	SWAP(paraHeader.dataLength)
X	debug("type %d paragraph\n", paraHeader.type);
X	debug("%d bytes in paragraph data\n", paraHeader.dataLength);
X	data = (char *) malloc(paraHeader.dataLength);
X	read(f, data, paraHeader.dataLength);
X	debug("height %d, position %d, page #%d\n", textInfo[j].paraHeight,
X	    textInfo[j].position, textInfo[j].pageNum);
X	switch(paraHeader.type) {
X	    case TEXTPARA:
X		textHeader = (struct textHeader *) data;
X		SWAP(textHeader->textLength)
X		debug("%d bytes of text\n", textHeader->textLength);
X		/* check for a null or empty paragraph */
X		cp = data + 2;
X		while( *cp == ' ' || *cp == '\t' )
X		    cp++;
X		if( *cp  == '\r' ) {
X		    /* null paragraph */
X		    needSpace++;
X		    break;
X		}
X	        if(needSpace && !raw) {
X		    if( needSpace > 1 )
X			printf(".sp %d\n", needSpace);
X		    else
X			printf(".sp\n");
X		    needSpace = 0;
X		}
X		cp = data + 2 + textHeader->textLength;
X		if((int) cp & 0x1) cp++; /* even byte boundary */
X		formatRunLength = ntohs(*(short *)cp);
X		formatRunLength /= 6;
X		debug("%d format items\n", formatRunLength);
X		startfp = (struct format *) (cp + 2);
X		SWAP(startfp->charPos)
X		fp = startfp;
X		for(k = 0; k < formatRunLength; k++) {
X		    SWAP(fp->charPos)
X		    debug("pos %d, pointsize %d, style 0x%0x, font %d\n",
X			fp->charPos, fp->pointSize, fp->style, fp->fontNumber);
X		    fp++;
X		}
X		cp = data + 2;
X		fp = startfp;
X		endfp = fp + (formatRunLength - 1);
X		if(*cp == '.' || (*cp == '\\' && *(cp + 1) == '*')) {
X		    lastWasFormat = 1;
X		    if ( (cp[1] == 'T' && cp[2] == 'S') ||
X		         (cp[1] == 'E' && cp[2] == 'Q') )
X			doingTable = 1;
X		    else if ( (cp[1] == 'T' && cp[2] == 'E') ||
X			      (cp[1] == 'E' && cp[2] == 'N') )
X			doingTable = 0;
X		}
X		else {
X		    if ( !lastWasFormat && !doingTable) {
X		        printf(".pp\n");
X		    }
X		    lastWasFormat = 0;
X		}
X
X		/* delete any trailing whitespace */
X		i = textHeader->textLength - 1;
X		while( cp[i] == ' ' || cp[i] == '\t' )
X		    i--;
X		textHeader->textLength = i;
X
X		col = 0;
X		for(i = 0; i < textHeader->textLength; i++) {
X		    if(i == fp->charPos) {
X			col += doFormat(fp,i);
X			if(fp != endfp) fp++;
X		    }
X		    if(wrap && *cp == ' ' && col > 65) {
X			skipBlanks = 1;
X			putchar('\n');
X			col = -1;
X			cp++;
X			continue;
X		    }
X		    if(skipBlanks && *cp == ' ')
X			;
X		    else {
X			col += putcharExtended(*cp);
X			skipBlanks = 0;
X		    }
X		    cp++;
X		}
X		/* since we deleted trailing blanks & the final
X		 * \r, we're guaranteed that we need a newline.
X		 * But first reset the style since we will get
X		 * a ".pp" before any text & -me will reset the
X		 * style on the .pp.
X		 */
X		setStyle( 0 );
X		putchar( '\n' );
X		break;
X
X	    case RULERPARA:
X		ruler = (struct ruler *) data;
X		SWAP(ruler->leftMargin)
X		SWAP(ruler->rightMargin)
X		SWAP(ruler->paraIndent)
X		for(i=0; i<ruler->numTabs; i++) {
X		    SWAP(ruler->tabs[i])
X		}
X		debug("leftMargin %d, right %d\n", 
X		    ruler->leftMargin, ruler->rightMargin);
X		debug("just %d, %d tabs, paraIndent %d\n",
X		    ruler->justify, ruler->numTabs, ruler->paraIndent);
X		doRuler(ruler);
X		break;
X
X	    case PICTUREPARA:
X		if ( pflag ) {
X		    printf(".sv %.1fi\n",
X		           -textInfo[j].paraHeight/80. );
X		}
X		break;
X	} /* switch */
X	free(data);
X    } /* for */
X    free(textInfo);
X    free(headerInfo);
X    free(footerInfo);
X}
X
XdoFormat(fp, inParagraph)
Xstruct format *fp;
X{
X    if(fp->pointSize != curPoint) {
X	if(!raw) {
X	    if ( inParagraph )
X		printf( "\\s%d\\&", fp->pointSize - basePoint);
X	    else {
X		printf(".sz %d\n", fp->pointSize - basePoint);
X		printf(".nr pp %d\n", fp->pointSize - basePoint);
X	    }
X	}
X	curPoint = fp->pointSize;
X    }
X    setStyle( fp->style );
X
X    /* this should be the number of chars taken up by the format
X    string, but I'm lazy. */
X    return 4;
X}
X
XsetStyle( style )
X{
X    static int isRaised = 0;
X    static int isLowered = 0;
X    int font;
X
X    if ( style != curStyle ) {
X
X	font = style & (BOLD|SHADOW|ITALIC|UNDERLINE);
X	if( font != (curStyle & (BOLD|SHADOW|ITALIC|UNDERLINE)) ) {
X	    if(font & (ITALIC|UNDERLINE))
X		printf("\\f2");
X	    else if(font & (BOLD|SHADOW))
X		printf("\\f3");
X	    else
X		printf("\\f1");
X	}
X
X	if(style & RAISE) {
X	    printf("\\u");
X	    isRaised = 1;
X	} else if(isRaised) {
X	    printf("\\d");
X	    isRaised = 0;
X	}
X	if(style & LOWER) {
X	    printf("\\d");
X	    isLowered = 1;
X	} else if(isLowered) {
X	    printf("\\u");
X	    isLowered = 0;
X	}
X	curStyle = style;
X    }
X}
X
Xdebug(f, a1, a2, a3, a4, a5, a6, a7, a8, a9)
Xchar *f;
X{
X    if(verbose) fprintf(stdout, f, a1, a2, a3, a4, a5, a6, a7, a8, a9);
X}
X
XsetFlags(argc, argv)
Xchar **argv;
X{
X
X    if(argc == 1) {
X    	printf("usage: %s [-r] [-p] [-d] [-w] [-s<pointadj>] files...\n", argv[0]);
X	exit(1);
X    }
X    while(*argv) {
X	if(argv[0][0] == '-') {
X	    switch(argv[0][1]) {
X		case 'd':
X		    verbose = 1;
X		    break;
X		case 'p':
X		    pflag = 1;
X		    break;
X		case 'w':
X		    wrap = 0;
X		    break;
X		case 's':
X		    basePoint = atoi(*argv + 2);
X		    break;
X		case 'r':
X		    raw = 1;
X		    break;
X	    }
X	}
X	argv++;
X    }
X}
X
XdoRuler(ruler)
Xstruct ruler *ruler;
X{
X    int i;
X
X    if(curJust != ruler->justify) {
X    	curJust = ruler->justify;
X	printf(".br\n"); /* need to put out a break or the last bit of text
X			    gets munged into the new formatting rules. */
X	switch(curJust) {
X	    case LEFTJUST:
X		printf(".ad l\n");
X		break;
X	    case CENTERJUST:
X		printf(".ad c\n");
X		break;
X	    case RIGHTJUST:
X		printf(".ad r\n");
X		break;
X	    case BOTHJUST:
X		printf(".ad b\n");
X		break;
X	}
X    }
X    if ( curSpacing != ruler->spacing ) {
X	curSpacing = ruler->spacing;
X	printf( ".vs %dp\n", (curSpacing+2)*(curPoint - basePoint + 4 )/2 );
X	printf( ".nr $r \\n(.v/\\n(.s\n" ); /* isn't -me wonderful? */
X    }
X    if(curLeft != ruler->leftMargin || curRight != ruler->rightMargin) {
X    	curLeft = ruler->leftMargin;
X	curRight = ruler->rightMargin;
X	/* set indent and line length */
X	if ( curIndent != curLeft / 80. ) {
X	    curIndent = curLeft / 80.;
X	    printf(".ba %.1fi\n", curIndent);
X	    printf(".nr $i %.1fi\n", curIndent);
X	}
X	if ( curLinelength != curRight / 80. ) {
X	    curLinelength = curRight / 80.;
X	    printf(".ll %.1fi\n", curLinelength);
X	}
X	if ( curParIndent != (ruler->paraIndent / 80. - curIndent) ) {
X	    curParIndent = ruler->paraIndent / 80. - curIndent;
X	    printf(".nr pi %.1fi\n", curParIndent );
X	}
X    }
X    printf(".ta ");
X    if ( ruler->numTabs <= 0 && curParIndent < 0 )
X	printf("%.1fi", -curParIndent );
X    else
X	for(i = 0; i < ruler->numTabs; i++) {
X	    printf("%.1fi ", ruler->tabs[i] / 10.0 / 8.0);
X	}
X    putchar('\n');
X}
X
X
X/* standard troff prelude */
XdoPrelude() {
X    printf(".\" this file generated by WtoT version %s\n", 
X	VERSION);
X    printf(".po 1i\n");
X    printf(".nr ps 0\n"); /* kill .pp's interpara spacing */
X    printf(".nr pi 0\n");
X#ifdef no
X    printf(".de pp\n"); /* redefine the .pp macro */
X    printf(".br\n.ti \\(pi\n");
X    printf("..\n");
X#endif
X}
X
X/* this table maps the Mac's extended character set into troff
X * characters.  It's set up for the standard Geneva font.  (it
X * should really be selected based on the current font)
X */
Xchar *ctrans[] = {
X	"\\(sq",	/* 0 */
X	"\\(sq",	/* 1 */
X	"\\(sq",	/* 2 */
X	"\\(sq",	/* 3 */
X	"\\(sq",	/* 4 */
X	"\\(sq",	/* 5 */
X	"\\(sq",	/* 6 */
X	"\\(sq",	/* 7 */
X	"\b",		/* 8 */
X	"\t",		/* 9 */
X	"\n",		/* 10 */
X	"\\(sq",	/* 11 */
X	"\f",		/* 12 */
X	"\n",		/* 13 */
X	"\\(sq",	/* 14 */
X	"\\(sq",	/* 15 */
X	"\\(sq",	/* 16 */
X	"\\(sq",	/* 17 */
X	"\\(sq",	/* 18 */
X	"\\(sq",	/* 19 */
X	"\\(sq",	/* 20 */
X	"\\(sq",	/* 21 */
X	"\\(sq",	/* 22 */
X	"\\(sq",	/* 23 */
X	"\\(sq",	/* 24 */
X	"\\(sq",	/* 25 */
X	"\\(sq",	/* 26 */
X	"\\(sq",	/* 27 */
X	"\\(sq",	/* 28 */
X	"\\(sq",	/* 29 */
X	"\\(sq",	/* 30 */
X	"\\(sq",	/* 31 */
X	" ",	/* 32 */
X	"!",	/* 33 */
X	"\"",	/* 34 */
X	"#",	/* 35 */
X	"$",	/* 36 */
X	"%",	/* 37 */
X	"&",	/* 38 */
X	"'",	/* 39 */
X	"(",	/* 40 */
X	")",	/* 41 */
X	"*",	/* 42 */
X	"+",	/* 43 */
X	",",	/* 44 */
X	"-",	/* 45 */
X	".",	/* 46 */
X	"/",	/* 47 */
X	"0",	/* 48 */
X	"1",	/* 49 */
X	"2",	/* 50 */
X	"3",	/* 51 */
X	"4",	/* 52 */
X	"5",	/* 53 */
X	"6",	/* 54 */
X	"7",	/* 55 */
X	"8",	/* 56 */
X	"9",	/* 57 */
X	":",	/* 58 */
X	";",	/* 59 */
X	"<",	/* 60 */
X	"=",	/* 61 */
X	">",	/* 62 */
X	"?",	/* 63 */
X	"@",	/* 64 */
X	"A",	/* 65 */
X	"B",	/* 66 */
X	"C",	/* 67 */
X	"D",	/* 68 */
X	"E",	/* 69 */
X	"F",	/* 70 */
X	"G",	/* 71 */
X	"H",	/* 72 */
X	"I",	/* 73 */
X	"J",	/* 74 */
X	"K",	/* 75 */
X	"L",	/* 76 */
X	"M",	/* 77 */
X	"N",	/* 78 */
X	"O",	/* 79 */
X	"P",	/* 80 */
X	"Q",	/* 81 */
X	"R",	/* 82 */
X	"S",	/* 83 */
X	"T",	/* 84 */
X	"U",	/* 85 */
X	"V",	/* 86 */
X	"W",	/* 87 */
X	"X",	/* 88 */
X	"Y",	/* 89 */
X	"Z",	/* 90 */
X	"[",	/* 91 */
X	"\\",	/* 92 */
X	"]",	/* 93 */
X	"^",	/* 94 -  hat accent */
X	"_",	/* 95 */
X	"\\(aa",	/* 96 -  acute accent */
X	"a",	/* 97 */
X	"b",	/* 98 */
X	"c",	/* 99 */
X	"d",	/* 100 */
X	"e",	/* 101 */
X	"f",	/* 102 */
X	"g",	/* 103 */
X	"h",	/* 104 */
X	"i",	/* 105 */
X	"j",	/* 106 */
X	"k",	/* 107 */
X	"l",	/* 108 */
X	"m",	/* 109 */
X	"n",	/* 110 */
X	"o",	/* 111 */
X	"p",	/* 112 */
X	"q",	/* 113 */
X	"r",	/* 114 */
X	"s",	/* 115 */
X	"t",	/* 116 */
X	"u",	/* 117 */
X	"v",	/* 118 */
X	"w",	/* 119 */
X	"x",	/* 120 */
X	"y",	/* 121 */
X	"z",	/* 122 */
X	"{",	/* 123 */
X	"|",	/* 124 */
X	"}",	/* 125 */
X	"~",		/* 126 -  circumflex accent */
X	"\\(sq",	/* 127 */
X	"\\(sq",	/* 128 */
X	"\\o'A\\(de'",	/* 129 -  upper circle A (A) */
X	"C",		/* 130 -  upper C with cedilla */
X	"\\(sq",	/* 131 */
X	"\\(sq",	/* 132 */
X	"\\(sq",	/* 133 */
X	"\\(sq",	/* 134 */
X	"\\(sq",	/* 135 */
X	"\\(sq",	/* 136 */
X	"\\(sq",	/* 137 */
X	"\\(sq",	/* 138 */
X	"\\(sq",	/* 139 */
X	"\\o'a\\(de'",	/* 140 -  lower a with circle */
X	"c",		/* 141 -  c with cedilla */
X	"\\(sq",	/* 142 */
X	"\\(sq",	/* 143 */
X	"\\(sq",	/* 144 */
X	"\\(sq",	/* 145 */
X	"\\(sq",	/* 146 */
X	"\\(sq",	/* 147 */
X	"\\(sq",	/* 148 */
X	"\\(sq",	/* 149 */
X	"\\(sq",	/* 150 */
X	"\\(sq",	/* 151 */
X	"\\(sq",	/* 152 */
X	"\\(sq",	/* 153 */
X	"\\(sq",	/* 154 */
X	"\\(sq",	/* 155 */
X	"\\(sq",	/* 156 */
X	"\\(sq",	/* 157 */
X	"\\(sq",	/* 158 */
X	"\\(sq",	/* 159 */
X	"\\(dg",	/* 160 -  dagger */
X	"\\(de",	/* 161 -  degrees (shift option 8) */
X	"\\(ct",	/* 162 -  cents */
X	"\\f2\\o'L-'\\fP",	/* 163 -  pounds (currency) */
X	"\\(sc",	/* 164 -  section mark */
X	"\\(bu",	/* 165 -  bullet */
X	"\\(rh",	/* 166 -  paragraph */
X	"\\(*b",	/* 167 -  beta (german "ss") */
X	"\\(rg",	/* 168 -  registered */
X	"\\(co",	/* 169 -  copyright */
X	"\\u\\s-4TM\\s0\\d",	/* 170 -  trademark */
X	"\\(ag",	/* 171 -  grave accent */
X	"\\(sq",	/* 172 -  oomlat accent */
X	"\\(!=",	/* 173 -  not equal */
X	"AE",		/* 174 -  upper AE (") */
X	"\\o'O/'",	/* 175 -  slash upper O (O) */
X	"\\(if",	/* 176 -  infinity */
X	"\\(+-",	/* 177 -  plus minus (shift option =) */
X	"\\(<=",	/* 178 -  <= */
X	"\\(>=",	/* 179 -  >= */
X	"\\o'Y-'",	/* 180 -  yen */
X	"\\(*m",	/* 181 -  lower mu */
X	"\\(pd",	/* 182 -  "partial" */
X	"\\(*S",	/* 183 -  upper sigma */
X	"\\(*P",	/* 184 -  upper PI (P) */
X	"\\(*p",	/* 185 -  lower pi */
X	"\\(is",	/* 186 -  integral sign */
X	"\\ua\\d",	/* 187 -  underbar lowercase a */
X	"\\uo\\d",	/* 188 -  underbar lowercase o */
X	"\\(*W",	/* 189 -  upper omega */
X	"ae",		/* 190 -  lower ae */
X	"\\o'o/'",	/* 191 -  slashed lower o */
X	"\\(sq",	/* 192 -  upside down ? (?) */
X	"\\(*i",	/* 193 -  lower case i */
X	"\\(no",	/* 194 -  negation */
X	"\\(sr",	/* 195 -  square root or check mark */
X	"\\f2f\\fP",	/* 196 -  script lower f */
X	"\\(~=",	/* 197 -  approx */
X	"\\(*D",	/* 198 -  triangle (upper delta) */
X	"\\s-1<<\\s0",	/* 199 -  open double angle brackets */
X	"\\s-1>>\\s0",	/* 200 -  close double angles */
X	"...",		/* 201 -  elipses (3 dots) */
X	"\\ ",		/* 202 -  unpaddable space */
X	"\\o'`A'",	/* 203 -  `A */
X	"\\o'~A'",	/* 203 -  A with circumflex */
X	"\\o'~O'",	/* 203 -  O with circumflex */
X	"OE",		/* 206 -  upper OE ligature (Q) */
X	"oe",		/* 207 -  lower oe ligature */
X	"\\(hy",	/* 208 -  hyphen */
X	"\\(em",	/* 209 -  m dash (shift option -) */
X	"``",		/* 210 -  back double quote */
X	"''",		/* 211 -  close double quote */
X	"`",		/* 212 -  back single quote */
X	"'",		/* 213 -  close single quote */
X	"\\(di",	/* 214 -  divide */
X	"\\(gr",	/* 215 -  diamond (V) */
X	"\\o'y\"'",	/* 216 -  y with umlat */
X	"\\(sq",	/* 217 */
X	"\\(sq",	/* 218 */
X	"\\(sq",	/* 219 */
X	"\\(sq",	/* 220 */
X	"\\(sq",	/* 221 */
X	"\\(sq",	/* 222 */
X	"\\(sq",	/* 223 */
X	"\\(sq",	/* 224 */
X	"\\(sq",	/* 225 */
X	"\\(sq",	/* 226 */
X	"\\(sq",	/* 227 */
X	"\\(sq",	/* 228 */
X	"\\(sq",	/* 229 */
X	"\\(sq",	/* 230 */
X	"\\(sq",	/* 231 */
X	"\\(sq",	/* 232 */
X	"\\(sq",	/* 233 */
X	"\\(sq",	/* 234 */
X	"\\(sq",	/* 235 */
X	"\\(sq",	/* 236 */
X	"\\(sq",	/* 237 */
X	"\\(sq",	/* 238 */
X	"\\(sq",	/* 239 */
X	"\\(sq",	/* 240 */
X	"\\(sq",	/* 241 */
X	"\\(sq",	/* 242 */
X	"\\(sq",	/* 243 */
X	"\\(sq",	/* 244 */
X	"\\(sq",	/* 245 */
X	"\\(sq",	/* 246 */
X	"\\(sq",	/* 247 */
X	"\\(sq",	/* 248 */
X	"\\(sq",	/* 249 */
X	"\\(sq",	/* 250 -  box (option h) */
X	"\\(sq",	/* 251 -  box (option k) */
X	"\\(sq",	/* 252 */
X	"\\(sq",	/* 253 */
X	"\\(sq",	/* 254 */
X	"\\(sq",	/* 255 */
X	0 };
X
XputcharExtended(c)
Xunsigned char c;
X{
X    printf("%s", ctrans[c]);
X    return( strlen( ctrans[c] ) );
X}
EOF
echo -n '			 ' ; ls -l w2t.c
echo x - write.h '		' '-rw-r--r--  1 van          2142 Dec 27 05:33 write.h'
sed 's/^X//' > write.h << 'EOF'
Xtypedef unsigned char byte;
X
Xstruct global { /* should be 140 bytes */
X    short versionNumber;
X    short paraOffset;
X    short paraCount;
X    short headerParaCount;
X    short footerParaCount;
X    byte titlePage;
X    byte scrapShow;
X    byte footerDisplayed;
X    byte headerDisplayed;
X    byte rulersShowing;
X    byte spare;
X    short activeDoc; /* 0 = main, 1 = header, 2 = footer */
X    short startPageNum;
X    byte printingVars[120]; /* ??? */
X};
X
X#define MAINDOC 0
X#define HEADERDOC 1
X#define FOOTERDOC 2
X
Xstruct endpoint {
X    short paraNumber;
X    short charPos;
X};
X
Xstruct position {
X    short vert;
X    short hor;
X};
X
Xstruct document { /* should be 34 bytes */
X    struct endpoint start;
X    struct endpoint end;
X    short vertOffset; /* always <= 0 */
X    short needToRedraw;
X    struct position pageNumberPos;
X    struct position datePos;
X    struct position timePos;
X    struct position timeStringPos;
X    byte iconRedraw;
X    byte iconFlag;
X    short activeFont;
X    short activeStyle;
X};
X
Xstruct infoArrayElem { /* should be 8 bytes */
X    short paraHeight;
X    short position;
X    byte pageNum; /* 0-based */
X    byte unused[3];
X};
X
X/*
X    paragraph data
X*/
X
Xstruct paraHeader {
X    short type; /* 0=ruler, 1=text, 2=picture */
X    short dataLength;
X};
X
X#define RULERPARA 0
X#define TEXTPARA 1
X#define PICTUREPARA 2
X
Xstruct textHeader {
X    short textLength;
X};
X
X/*
X    ASCII data follows.  On the even word boundary following text there is
X    a word for the format run length.  Each format consists of six bytes:
X*/
X
Xstruct format {
X    short charPos;
X    byte pointSize;
X    byte style;
X    byte unused;
X    byte fontNumber;
X};
X
Xstruct ruler {
X    short leftMargin;
X    short rightMargin;
X    byte justify;
X    byte numTabs;
X    byte filler; /* ??? */
X    byte spacing;
X    short paraIndent;
X    short tabs[12];
X};
X
X#define LEFTJUST 0
X#define CENTERJUST 1
X#define RIGHTJUST 2
X#define BOTHJUST 3
X
X#define SINGLESPACE 0
X#define DOUBLESPACE 1
X#define TRIPLESPACE 2
X
X/* bits for text styles */
X#define BOLD 0x1
X#define ITALIC 0x2
X#define	UNDERLINE 0x4
X#define	OUTLINE 0x8
X#define	SHADOW 0x10
X#define RAISE 0x20
X#define LOWER 0x40
EOF
echo -n '			 ' ; ls -l write.h
echo x - write2troff.dl '		' '-rw-r--r--  1 van         13868 Dec 27 05:33 write2troff.dl'
sed 's/^X//' > write2troff.dl << 'EOF'
X@@@C@DJJ@@FL@@@E@@@FOO@@@@OOOOOO@@@@@@@A@@@B@@@@@@DH@@E@@@@@@@@@@B
XO@@BH@OOMLOONL@BOD@BID@A@B@EBH@COL@@@A@@@@@@DH@@E@@@@@@@@@@BO@@BH@
X@@E@@@B@@BH@@LH@@@AH@@@A@A@A@@@@@@@ABG@O@@@A@A@A@@@@@@@@@@@@@@@@@@
X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
X@@@@@@@@@@@@@@@@@@AH@@AA@@AH@@AAONED@@ADOOOB@@ANOOOB@@NLOOOB@AKJOO
XOOOOOOOO@@@L@@@@@A@@@D@@@@@@@D@@@@@@@@@@@AOOOB@@AN@@AC@ABDOOOB@AKJ
XOOOOOOOO@@OOOOOOOOOO@@@E@@@@@@@E@@@@@@@@@@@A@@CC@@MLOOOB@@NLOOOB@A
XKJOOOOOOOO@@OOOOOOOOOO@@@@@@D@@@@ADFDB@@AG@@D@@@@ADFFJ@@AG@@EG@@@A
XDFHJ@@A@@@FN@@@@LL@@@@A@@@GN@@@@LKIL@@A@@@HN@@@@LLB@@@AC@@IN@@@@LK
XIH@@AC@@KA@@@ADL@D@@A@@@LD@@@ADKOL@@AC@@MD@@@@LKID@@AC@@NG@@@@LKI@
X@@AC@@OJ@@@@LKHL@@A@@A@M@@@@LKHH@@@@@AAM@@@@LKHD@@D@@AAM@@@@LKH@@@
XA@@AEM@@@@LKGL@@A@@AFM@@@@LKGH@@@@@AGM@@@@LKGD@@A@@AGM@@@@LKG@@@A@
X@AHM@@@@LKFL@@A@@AIM@@@@LKFH@@@@@AJM@@@@LKFD@@F@@AJM@@@@LKF@@@A@@B
X@M@@@@LKEL@@C@@BAM@@@@LKEH@@A@@BDM@@@@LKED@@B@@BEM@@@@LKE@@@A@@BGM
X@@@@LKDL@@@@@BHM@@@@LKDH@@D@@BHM@@@@LKDD@@A@@@G@@A@@LKD@@@CC@@H@@A
X@@LKCL@@A@@@KC@A@ADKFH@@A@@@LC@A@ADKFD@@@@@@MC@A@ADKF@@@A@@@MC@A@A
XDKEL@@A@@@NC@A@ADKEH@@A@@@OC@A@ADKED@@A@@A@C@A@ADKE@@@B@@AAC@A@ADK
XDL@@A@@ACC@A@ADKDH@@A@@ADC@A@ADKDD@@A@@AEC@A@ADKD@@@A@@AFC@A@ADKCL
X@@A@@AGC@A@ADKCH@@A@@AHC@A@ADKCD@@A@@AIC@A@ADKC@@@A@@AJC@A@ADKBL@@
XA@@AKC@A@ADKBH@@A@@ALC@A@ADKBD@@A@@AMC@A@ADKB@@@A@@ANC@A@ADKAL@@A@
X@AOC@A@ADKAH@@A@@B@C@A@ADKAD@@A@@BAC@A@ADKA@@@A@@BBC@A@ADK@L@@A@@B
XCC@A@ADK@H@@A@@BDC@A@ADK@D@@A@@BEC@A@ADK@@@@A@@BFC@A@ADJOL@@A@@BGC
X@A@ADJOH@@A@@BHC@A@ADJOD@@A@@BIC@A@ADJO@@@A@@@E@@B@ADJNL@@A@@@F@@B
X@ADJNH@@A@@@G@@B@ADJND@@A@@@H@@B@ADJN@@@A@@@I@@B@ADJML@@A@@@J@@B@A
XDJMH@@A@@@K@@B@ADJMD@@A@@@L@@B@ADJM@@@A@@@M@@B@ADJLL@@A@@@N@@B@ADJ
XLH@@A@@@O@@B@ADJLD@@A@@A@@@B@ADJL@@@A@@AA@@B@ADJKL@@A@@AB@@B@ADJKH
X@@A@@AC@@B@ADJKD@@A@@AD@@B@ADJK@@@A@@AE@@B@ADJJL@@A@@AF@@B@ADJJH@@
XA@@AG@@B@ADJJD@@A@@AH@@B@ADJJ@@@A@@AI@@B@ADJIL@@A@@AJ@@B@ADJIH@@A@
X@AK@@B@ADJID@@A@@AL@@B@ADJI@@@A@@AM@@B@ADJHL@@A@@AN@@B@ADJHH@@A@@A
XO@@B@ADJHD@@A@@B@@@B@ADJH@@@A@@BA@@B@ADJGL@@A@@BB@@B@ADJGH@@A@@BC@
X@B@ADJGD@@A@@BD@@B@ADJG@@@A@@BE@@B@ADJFL@@A@@BF@@B@ADLG@@@A@@BG@@B
X@ADLFL@@A@@BH@@B@ADLFH@@A@@BI@@B@ADLFD@@A@@@D@@C@ADLF@@@A@@@E@@C@A
XDLEL@@A@@@F@@C@ADLEH@@A@@@G@@C@ADLED@@A@@@H@@C@ADLE@@@A@@@I@@C@ADL
XDL@@A@@@J@@C@ADLDH@@A@@@K@@C@ADLDD@@@@@@@@@@@ADLD@@@A@@@@@@@@ADLCL
X@@A@@@A@@@@ADLCH@@A@@@B@@@@ADLCD@@A@@@C@@@@ADLC@@@@@@@@@@@@ADLBL@@
XA@@@@@@@@ADLBH@@A@@@A@@@@ADLBD@@A@@@B@@@@ADLB@@@A@@@C@@@@ADLAL@@A@
X@@D@@@@ADLAH@@@@@@BB@@@J@AN@@A@A@@@@@@@J@@GM@AN@@AN@@@HH@@@J@@FF@@
XCH@@ON@AJD@@@@@@AB@@@@@@@A@@C@@@BAEGCBEDB@MAB@DCFOFNGFFEGBGDB@DMFA
XFCEGGBFIGDFEB@DDFOFCGEFMFEFNGDGC@MGC@@@F@@@@AB@A@@@A@@@AAGDH@@@A@@
XAL@@@NGDFOB@EEFNFIGHB@EDGBFOFFFF@M@@@F@@@@AB@A@@@A@@@AAGAH@@@A@@A@
X@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@AH@@@A@@AB@@@CFBGI@MGI@@@F@@@@@L@@@@
X@A@@@AA@@L@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@OL@@@A@@BN@@B@DMFI
XFKFEB@DCFAG@FLFIFNFGFEGBB@BHFMFIFKFED@GBFIFCFEBNFAGBG@FABI@M@@@F@@
X@@@N@B@@@A@@@AACNL@@@A@@AN@@A@EBFIFCFEB@EEFNFIGFFEGBGCFIGDGI@M@@@F
X@@@@@N@B@@@A@@@AACLL@@@A@@AB@@@DFAFNFD@M@@@F@@@@@L@@@@@A@@@AA@KL@@
X@A@@C@@@BAEFFAFNB@DJFAFCFOFBGCFOFNB@BHGFFAFND@FLFBFLBMGBGDGCFGBNFA
XGBG@FABI@MBI@@@F@@@@@N@B@@@A@@@AACIH@@@A@@BL@@AMDLFAGGGBFEFNFCFEB@
XDBFEGBFKFEFLFEGIB@DLFAFBFOGBFAGDFOGBGI@MGI@@@F@@@@@N@B@@@A@@@AACIH
X@@@A@@A@@@@A@M@A@@@F@@@@@N@@@@@A@@@AACHL@@@A@@A@@@@A@M@A@@@F@@@@@L
X@@@@@A@@@AA@GL@@@@@@BB@@@J@AN@@C@A@@@@@@@J@@GM@AN@@AN@@@HH@@@J@@FF
X@@CH@@ON@AJD@@@@@@AB@@@@@@@A@ADD@AAEEGCBGDB@FIGCB@FAB@EEFNFIGHJJB@
XG@GBFOFGGBFAFMB@GDFOB@FCFOFNGFFEGBGDB@DMFAFCEGGBFIGDFEJJB@FFFIFLFE
XGCB@FIFNGDFOB@GDGBFOFFFFB@FOGBB@FDFIGDGBFOFFFFB@FIFNG@GEGDB@FFFIFL
XFEGCBNB@B@DIGDB@BHFCFOGBGBFEFCGDFLGICOBIB@FCFOFNGFFEGBGDGCB@FMFOGC
XGDB@DMFAFCEGGBFIGDFEB@FFFEFAGDGEGBFEGCB@FIFNGDFOB@GDFHFEB@FCFOGBGB
XFEGCG@FOFNFDFIFNFGB@GDGBFOFFFFB@FCFOFMFMFAFNFDGCBNB@B@EDFHFEB@FCFO
XFNGFFEGBGDFEFDB@FDFOFCGEFMFEFNGDB@FCFAFNB@FBFEB@G@FIG@FEFDB@FDFIGB
XFEFCGDFLGIB@GDFOB@GFGDGBFOFFFFB@FOGBB@FIGDGBFOFFFFB@FOGBB@FCFAFNB@
XFBFEB@GCFAGFFEFDB@FFFOGBB@FFGEGBGDFHFEGBB@FEFDFIGDGDFIFNFGBN@MBN@@
XBD@@@@@L@A@@@A@@@D@L@@@@@A@@CG@L@B@@@A@@CM@L@@@@@A@@D@@L@B@@@A@@DG
X@L@@@@@A@@@DA@A@A@A@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@AH@@@A@@
XBF@@ABEGCBGDB@FIGCB@FIFNGFFOFKFEFDB@FAGC@M@@@L@@@@@L@A@@@A@@@C@L@@
X@@@A@@@AA@AH@@@@@@BB@@@J@AN@@A@A@@@@@@@J@@GM@AN@@AN@@@HH@@@J@@FF@@
XCH@@ON@AJD@@@@@@AB@@@@@@@A@@A@@@@A@M@A@@@F@@@@@L@A@@@A@@@AA@OD@@@A
X@@EF@@AMGGCBGDB@EKBMGCFNEMB@EKBMG@EMB@EKBMFDEMB@FFFIFLFEB@BNBNBN@M
XBN@@C@@@@@@L@A@@@A@@@C@L@@@@@A@@@E@L@A@@@A@@@G@L@@@@@A@@@K@L@A@@@A
X@@@M@L@@@@@A@@A@@L@A@@@A@@AB@L@@@@@A@@@AA@OD@@@A@@A@@@@A@M@A@@@F@@
X@@@L@@@@@A@@@AA@OD@@@@@@BB@@BH@AN@@C@@@@@@@@@J@AN@@AN@@AN@@AN@@@@J
X@@FF@@CH@@ON@AJD@@@@@@AB@@@@@@@A@ALB@AGJBMGCFN@IGCFCFAFLFEGCB@GDFH
XFEB@G@FOFIFNGDB@GCFIGJFEGCB@FIFNB@GDFHFEB@FCFOFNGFFEGBGDFEFDB@FDFO
XFCGEFMFEFNGDBNB@B@DBFEFCFAGEGCFEB@FOFFB@GCFCGBFEFEFNB@FAFNFDB@G@GB
XFIFNGDFEGBB@FLFIFMFIGDFAGDFIFOFNGCBLB@FMFOGCGDB@DMFAFCEGGBFIGDFEB@
XFDFOFCGEFMFEFNGDGCB@FAGBFEB@FDFOFNFEB@FIFNB@CACBBMG@FOFIFNGDB@FFFO
XFNGDGCBNB@B@B@EDGBFOFFFFB@FDFOFCGEFMFEFNGDGCB@FGFEFNFEGBFAFLFLGIB@
XFLFOFOFKB@FBFEGDGDFEGBB@FIFNB@CAC@B@G@FOFIFNGDB@FFFOFNGDGCBNB@B@B@
XEDFHFIGCB@FFFLFAFGB@FCFAGEGCFEGCB@FAFLFLB@FFFOFNGDB@GCFIGJFEGCB@FI
XFNB@GDFHFEB@DMFAFCEGGBFIGDFEB@FDFOFCGEFMFEFNGDB@GDFOB@FBFEB@FDFEFC
XGBFEFAGCFEFDB@FBGIB@FNB@G@FOFIFNGDGCBNB@B@BHDNB@FMFAGIB@FBFEB@FNFE
XFGFAGDFIGFFEB@GDFOB@GCFCFAFLFEB@GDFHFEB@FDFOFCGEFMFEFNGDB@FFFOFNGD
XB@GCFIGJFEGCB@GEG@BIBNB@B@EDFHFEB@FDFEFFFAGEFLGDB@FIGCB@MBBMGCCBMC
XBN@M@@CL@@@@@L@A@@@A@@@B@L@@@@@A@@@C@L@A@@@A@@@D@L@@@@@A@AAO@L@B@@
X@A@AB@@L@@@@@A@ABK@L@B@@@A@ABL@L@@@@@A@AGD@L@A@@@A@AGG@L@@@@@A@@@F
XA@A@A@A@A@A@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@OD@@@A@@ON@@LOBM
XG@@IGBFEGCFEGBGFFEGCB@GCG@FAFCFEB@FFFOGBB@G@FIFCGDGEGBFEGCBNB@B@DN
XFOGBFMFAFLFLGIBLB@G@FIFCGDGEGBFEGCB@FIFNB@GDFHFEB@DMFAFCEGGBFIGDFE
XB@FDFOFCGEFMFEFNGDB@FAGBFEB@FIFGFNFOGBFEFDBNB@B@DIFFB@GDFHFEB@BMG@
XB@FFFLFAFGB@FIGCB@FGFIGFFEFNBLB@FAB@FBFLFOFCFKB@FOFFB@GCG@FAFCFEB@
XFLFAGBFGFEB@FEFNFOGEFGFHB@GDFOB@FHFOFLFDB@GDFHFEB@G@FIFCGDGEGBFEB@
XFIGCB@GBFEGCFEGBGFFEFDB@GFFIFAB@FAB@MBBNGCGFMCB@GDGBFOFFFFB@FDFIGB
XFEFCGDFIGFFEBN@M@@@@BD@@@@@L@A@@@A@@@C@L@@@@@A@@FB@L@A@@@A@@FD@L@@
X@@@A@@KI@L@A@@@A@@KL@L@@@@@A@@@CA@A@A@I@@@@A@@A@@@@A@M@A@@@F@@@@@L
X@@@@@A@@@AA@OD@@@A@@FL@@EHBMFD@IFCFAGEGCFEGCB@FCFOG@FIFOGEGCB@FAFM
XFOGEFNGDGCB@FOFFB@FDFEFBGEFGFGFIFNFGB@FOGEGDG@GEGDB@GDFOB@FBFEB@FI
XFNFCFLGEFDFEFDB@FIFNB@GDFHFEB@FCFOFNGFFEGBGDFEFDB@FDFOFCGEFMFEFNGD
XBN@M@@@L@@@@@L@A@@@A@@@C@L@@@@@A@@@BA@A@@@@A@@A@@@@A@M@A@@@F@@@@@L
X@@@@@A@@@AA@OD@@@@@@BB@@@J@AN@@C@A@@@@@@@J@@FD@AN@@AN@@AN@@@@J@@FF
X@@CH@@ON@AJD@@@@@@AB@@@@@@@A@ADF@@OIEDFAFBFLFEGCB@BHFBGBFAFCFKFEGD
XFEFDB@FBGIB@BNEDECB@FAFNFDB@BNEDDEB@FLFIFNFEGCBIB@FAFNFDB@FEGAGEFA
XGDFIFOFNGCB@BHFBGBFAFCFKFEGDFEFDB@FBGIB@BNDEEAB@FAFNFDB@BNDEDNB@FL
XFIFNFEGCBIB@FCFAFNB@FBFEB@FIFNFCFLGEFDFEFDB@FIFNB@GDFHFEB@DMFAFCEG
XGBFIGDFEB@FFFIFLFEBNB@B@DOGDFHFEGBB@GDGBFOFFFFB@FDFIGBFEFCGDFIGFFE
XGCB@BHFLFIFNFEGCB@GCGDFAGBGDFIFNFGB@GGFIGDFHB@FAB@MBBNMCBIB@FCFAFN
XB@FBFEB@FIFNFCFLGEFDFEFDB@FIFNB@GDFHFEB@FFFIFLFEB@FBGEGDB@GDFHFEB@
XGBFEGCGEFLGDGCB@FMFAGIB@FNFOGDB@FBFEB@GGFHFAGDB@GIFOGEB@FEGHG@FEFC
XGDBN@MBN@@DB@@@@@L@@@@@A@@AE@L@A@@@A@@AH@L@@@@@A@@AM@L@A@@@A@@B@@L
X@@@@@A@@DD@L@A@@@A@@DH@L@@@@@A@@DL@L@A@@@A@@DO@L@@@@@A@@JM@L@A@@@A
X@@JN@L@@@@@A@@@DA@A@A@A@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@OB@@
X@A@ABB@@LOEGCBGDB@FMFAG@GCB@FAFLFLB@DMFAFCB@FFFOFNGDGCB@GDFOB@GDGB
XFOFFFFBGGCB@EDFIFMFEGCB@EBFOFMFAFNBNB@B@DBFOFLFDFFFAFCFEB@FAFNFDB@
XECFHFAFDFOGGB@FAGBFEB@G@GBFIFNGDFEFDB@FIFNB@FBFOFLFDBNB@B@DIGDFAFL
XFIFCB@FAFNFDB@EEFNFDFEGBFLFIFNFEB@FAGBFEB@G@GBFIFNGDFEFDB@FIFNB@FI
XGDFAFLFIFCBNB@B@ECGDGIFLFEB@FCFOFMFBFIFNFAGDFIFOFNGCB@FAGBFEB@G@GE
XFNGDFEFDB@BHFEBNFGBNBLB@DBFOFLFDBMDIGDFAFLFIFCB@B@FCFOFMFEGCB@FOGE
XGDB@FAGCB@FIGDFAFLFIFCBIBN@MBN@@DH@@@@@L@A@@@A@@@C@L@@@@@A@@C@@L@A
X@@@A@@CH@L@@@@@A@@CM@LA@@@@A@@DC@L@@@@@A@@EJ@L@B@@@A@@F@@L@@@@@A@@
XFE@L@D@@@A@@FN@L@@@@@A@@JL@L@C@@@A@@KG@L@@@@@A@@@CACA@A@I@@@@A@@A@
X@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@LB@@@A@@CJ@@AODAB@GDGIG@FIFCFAFLB@GE
XGCFEB@FOFFB@GGCBGDB@FMFIFGFHGDB@FBFEBL@MBL@@AB@@@@@L@@@@@A@@AA@L@A
X@@@A@@AD@L@@@@@A@@@AA@KF@@@@@@BB@@@J@AN@@@@B@@@@@@@J@@BH@@MB@AN@@A
XN@@@@J@@FF@@CH@@ON@AJD@@@@@@AB@@@@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A
X@@@AA@IB@@@A@@CN@@BJ@IFMFAFCFGFEGDB@BMFDB@FDFOFC@IGBFEGDGBFIFEGFFE
XB@DMFAFCEGGBFIGDFEB@FDFOFCGEFMFEFNGD@M@@@L@@@@@L@@@@@A@@@O@L@B@@@A
X@@@AA@IB@@@A@@DJ@@CF@IGGCBGDB@FDFOFCBNFDFAGDFAB@GLB@FIGDGBFOFFFFB@
XBMFMFE@IFCFOFNGFFEGBGDB@BFB@FOGEGDG@GEGDB@GDFOB@FIFMFAFGFEFN@M@@@L
X@@@@@L@@@@@A@@AK@L@B@@@A@@@AA@HF@@@A@@A@@@@A@M@A@@@F@@@@@L@B@@@A@@
X@AA@FB@@@A@@FF@@EAEGCBGDB@FDFOFEGCB@GDFHFEB@FFFOFLFLFOGGFIFNFGB@GD
XGBFAFNGCFLFAGDFIFOFNGCB@FBFEGDGGFEFEFNB@DMFAFCB@FCFHFAGBFAFCGDFEGB
XGCB@FAFNFDB@GDGBFOFFFFB@FCFHFAGBFAFCGDFEGBGCBN@MBN@@@L@@@@@L@A@@@A
X@@@C@L@@@@@A@@@BA@A@@@@A@@AB@@@DBNEDEC@M@@@F@@@@@L@@@@@A@@@AA@CB@@
X@A@@AF@@@HFCFEFNGDFEGBCK@M@@@F@@@@@L@@@@@A@@@AA@CB@@@A@@AD@@@FFCDB
XB@FCDB@M@@@F@@@@@L@@@@@A@@@AA@@N@@@A@@AD@@@EFCB@FLBN@MBN@@@F@@@@@L
X@@@@@A@@@AA@@N@@@A@@BB@@ADEDGBFOFFFF@IDMFAFCB@DCFHFAGBFAFCGDFEGB@M
X@@@F@@@@@L@@@@@A@@@AA@NJ@@@A@@A@@@@BCM@M@@@F@@@@@L@@@@@A@@@AA@NJ@@
X@A@@AN@@@OF@@IFGGBFAGFFEB@FAFCFCFEFNGD@MGD@@@F@@@@@L@@@@@A@@@AA@NJ
X@@@A@@AJ@@@KLA@IFIFOGDFAB@BHCOBI@MBI@@@F@@@@@L@@@@@A@@@AA@LF@@@A@@
XAJ@@@LJJ@IGDGBFAFDFEFMFAGBFK@M@@@F@@@@@L@@@@@A@@@AA@LF@@@A@@B@@@AB
XJC@IG@FOGEFNFDGCB@GCGDFEGBFLFIFNFG@M@@@F@@@@@L@@@@@A@@@AA@JB@@@A@@
XAF@@@HJB@IFCFEFNGDGC@M@@@F@@@@@L@@@@@A@@@AA@JB@@@A@@AJ@@@KK@@IFIFN
XFFFIFNFIGDGI@MGI@@@F@@@@@L@@@@@A@@@AA@HI@@@A@@AN@@@OJD@IGCFEFCGDFI
XFOFNB@FMFAGBFK@MFK@@@F@@@@@L@@@@@A@@@AA@HI@@@A@@AL@@@MJF@IG@FAGBFA
XFGGBFAG@FHB@@MB@@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@AH@@@IJE@IFBGEFLFLFE
XGD@MGD@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@BF@@AGKK@IGEFNFDFEGBFBFAGBB@FL
XFOGGFEGBFCFAGCFEB@FA@MFA@@@F@@@@@L@@@@@A@@@AA@EI@@@A@@BF@@AGKL@IGE
XFNFDFEGBFBFAGBB@FLFOGGFEGBFCFAGCFEB@FO@MFO@@@F@@@@@L@@@@@A@@@AA@CE
X@@@A@@AH@@@IM@@IFHGIG@FHFEFN@MFN@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@AJ@@
X@LJM@IFNFOGDB@FEGAGEFAFL@M@@@F@@@@@L@@@@@A@@@AA@BI@@@A@@AL@@@NLO@I
XFOFEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@@E@@@A@@AL@@@NKG@IGE
XG@G@FEGBB@GCFIFGFMFA@M@@@F@@@@@L@@@@@A@@@AA@@E@@@A@@AN@@@OJK@IFAFC
XGEGDFEB@FAFCFCFEFNGD@MGD@@@F@@@@@L@@@@@A@@@AA@DE@@@A@@AL@@@MJH@IGB
XFEFGFIGCGDFEGBFEFD@MFD@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@AH@@@IJ@@IFDFA
XFGFGFEGB@M@A@@@F@@@@@L@@@@@A@@@AA@BI@@@A@@AD@@@FKD@IGIFEFN@M@@@F@@
X@@@L@@@@@A@@@AA@@E@@@A@@AN@@A@JL@IFOFOFMFLFAGDB@FAFCFCFEFNGD@M@@@F
X@@@@@L@@@@@A@@@AA@@E@@@A@@AL@@@MEN@IFHFAGDB@FAFCFCFEFNGD@MO@@@@F@@
X@@@L@@@@@A@@@AA@OI@@@A@@B@@@ABKO@IGCFLFAGCFHFEFDB@FLFOGGFEGBB@FO@M
X@@@F@@@@@L@@@@@A@@@AA@ME@@@A@@AJ@@@KKI@IFLFOGGFEGBB@G@FI@MFI@@@F@@
X@@@L@@@@@A@@@AA@ME@@@A@@BB@@ADMB@IFBFAFCFKB@FDFOGEFBFLFEB@GAGEFOGD
XFE@M@@@F@@@@@L@@@@@A@@@AA@LI@@@A@@BB@@ADMD@IFBFAFCFKB@GCFIFNFGFLFE
XB@GAGEFOGDFE@M@@@F@@@@@L@@@@@A@@@AA@JE@@@A@@BL@@AMLG@IFOG@FEFNB@FD
XFOGEFBFLFEB@FAFNFGFLFEB@FBGBFAFCFKFEGDGC@MGC@@@F@@@@@L@@@@@A@@@AA@
XJE@@@A@@BD@@AFHL@IFLFOGGFEGBB@FAB@GGFIGDFHB@FCFIGBFCFLFE@M@@@F@@@@
X@L@@@@@A@@@AA@II@@@A@@BD@@AEJG@IFBFEGDFAB@BHFGFEGBFMFAFNB@BBGCGCBB
XBI@MBI@@@F@@@@@L@@@@@A@@@AA@GE@@@A@@BD@@AEKF@IG@FAGBGDFIFAFLB@FDFE
XGBFIGFFAGDFIGFFE@MH@@@@F@@@@@L@@@@@A@@@AA@GE@@@A@@B@@@AALD@IGCFCGB
XFIG@GDB@FLFOGGFEGBB@FF@MFF@@@F@@@@@L@@@@@A@@@AA@FI@@@A@@AJ@@@LJI@I
XFCFOG@GIGBFIFGFHGD@M@@@F@@@@@L@@@@@A@@@AA@DE@@@A@@BH@@AILF@IGDGBFI
XFAFNFGFLFEB@BHGEG@G@FEGBB@FDFEFLGDFABI@MBI@@@F@@@@@L@@@@@A@@@AA@DE
X@@@A@@AD@@@FOK@IFBFOGH@M@@@F@@@@@L@@@@@A@@@AA@CI@@@A@@AJ@@@KLB@IFN
XFEFGFAGDFIFOFN@MFN@@@F@@@@@L@@@@@A@@@AA@AE@@@A@@BB@@ACLI@IFEFLFIG@
XGCFEGCB@BHCCB@FDFOGDGCBI@M@@@@@F@@@@@L@@@@@A@@@AA@AE@@@A@@BB@@ADKN
X@IFLFOGGFEGBB@FAFEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@OA@@@A
X@@AL@@@NKM@IGEG@G@FEGBB@FOFMFEFGFA@M@@@F@@@@@L@@@@@A@@@AA@OA@@@A@@
XAH@@@ILE@IFAG@G@GBFOGH@MGH@@@F@@@@@L@@@@@A@@@AA@LM@@@A@@B@@@AAHM@I
XFCB@GGFIGDFHB@FCFEFDFIFLFLFA@M@@@@@F@@@@@L@@@@@A@@@AA@LM@@@A@@BJ@@
XALLC@IGCGAGEFAGBFEB@GBFOFOGDB@FOGBB@FCFHFEFCFKB@FMFAGBFK@M@@@F@@@@
X@L@@@@@A@@@AA@LM@@@A@@AN@@A@KJ@IFIFNGDFEFGGBFAFLB@GCFIFGFN@M@@@F@@
X@@@L@@@@@A@@@AA@JI@@@A@@BB@@ADGN@IFCFIGBFCGEFMFFFLFEGHB@FAFCFCFEFN
XGD@M@@@F@@@@@L@@@@@A@@@AA@JI@@@A@@AJ@@@KKE@IFLFOGGFEGBB@FMGE@M@@@@
X@F@@@@@L@@@@@A@@@AA@II@@@A@@AD@@@EKB@ICLCM@MCM@@@F@@@@@L@@@@@A@@@A
XA@HI@@@A@@AD@@@EKC@ICNCM@MCM@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@AH@@@IMF
X@IFDFIGFFIFDFE@MFE@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@BJ@@AKJA@IFDFEFGGB
XFEFEGCB@BHGCFHFIFFGDB@FOG@GDFIFOFNB@CHBI@MBI@@@F@@@@@L@@@@@A@@@AA@
XEI@@@A@@BH@@AJMA@IFMB@FDFAGCFHB@BHGCFHFIFFGDB@FOG@GDFIFOFNB@BMBI@M
X@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@BL@@ANKA@IG@FLGEGCB@FMFIFNGEGCB@BHGC
XFHFIFFGDB@FOG@GDFIFOFNB@CMBI@M@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@BB@@AD
XLN@IGEG@G@FEGBB@DODEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@BI@@
X@A@@AN@@A@JO@IGCFLFAGCFHB@GEG@G@FEGBB@DO@M@@@F@@@@@L@@@@@A@@@AA@@E
X@@@A@@AJ@@@KKH@IGEG@G@FEGBB@E@DI@MDI@@@F@@@@@L@@@@@A@@@AA@@E@@@A@@
XBD@@AEMC@IFCFLFOGCFEB@FDFOGEFBFLFEB@GAGEFOGDFE@MFE@@@F@@@@@L@@@@@A
X@@@AA@H@@@@A@@BD@@AEME@IFCFLFOGCFEB@GCFIFNFGFLFEB@GAGEFOGDFE@MFE@@
X@F@@@@@L@@@@@A@@@AA@G@@@@A@@BD@@AFLH@IFCFLFOGCFEB@FDFOGEFBFLFEB@FA
XFNFGFLFEGC@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@BD@@AFHA@IGEG@G@FEGBB@DA
XB@GGFIGDFHB@FCFIGBFCFLFE@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@BB@@ADJN@I
XGEG@G@FEGBB@DADEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@
XBF@@AGHB@IGEG@G@FEGBB@DCB@GGFIGDFHB@FCFEFDFIFLFLFA@MFA@@@F@@@@@L@@
X@@@A@@@AA@G@@@@A@@AJ@@@KMG@IFDFIFAFMFOFNFDB@@MB@@@@F@@@@@L@@@@@A@@
X@AA@G@@@@A@@BB@@ADL@@IGEG@GCFIFDFEB@FDFOGGFNB@COB@BHCOBI@M@@@F@@@@
X@L@@@@@A@@@AA@G@@@@A@@AB@@@DBNEDDE@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@
X@N@@@@@@@F@@@@@L@@@@@A@@@AA@G@@@@@@@BB@@@J@AN@@@@A@@@@@@@J@AFHAIEB
X@AL@@@@@@@@@@@HH@AEL@@@@LKOL@@@@LKID@@@@@@@A@@A@@@@A@M@A@@@F@@@@@L
X@@@@@A@@@AA@@@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@@N@@@A@@A@@@@A
X@M@A@@@F@@@@@L@@@@@A@@@AA@@N@@@A@@@N@@@@@@@F@@@@@L@@@@@A@@@AA@@@@@
X@@@@BB@@@J@AN@@@@A@@@@@@@J@AFHAIEB@@@B@@OO@@@@@@@ADFHN@@@@LL@@@@@@
XLKIL@A@A@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@@@@@@A@@A@@@@A@M@A@@
X@F@@@@@L@@@@@A@@@AA@AH@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@AJ@@@A
X@@DJ@@CKB@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@
XB@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@BMB@B@B@B@B@B@B@B@BM@MBM@@@F
X@@@@@L@@@@@A@@@AA@AB@@@A@@@N@@@@@@@F@@@@@L@@@@@A@@@AA@@@|@@@EILLG
EOF
echo -n '			 ' ; ls -l write2troff.dl
-------