writetotroff.sh
Posted: January 16th, 1985, 2:10 am
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.2 9/18/84; site uw-beaver
Path: utzoo!watmath!clyde!cbosgd!ihnp4!houxm!vax135!cornell!uw-beaver!info-mac
From: info-mac@uw-beaver
Newsgroups: fa.info-mac
Subject: writetotroff.sh
Message-ID:
Date: Sun, 30-Dec-84 21:11:47 EST
Article-I.D.: uw-beave.322
Posted: Sun Dec 30 21:11:47 1984
Date-Received: Tue, 1-Jan-85 00:35:59 EST
Sender: daemon@uw-beaver
Organization: U of Washington Computer Science
Lines: 1155
From: Bill Croft
#! /bin/sh
#---------------------------->Cut Here Makefile 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 w2t.c
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; jtextLength)
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 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 == ' ' || cp == '\t' )
X i--;
X textHeader->textLength = i;
X
X col = 0;
X for(i = 0; i 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; inumTabs; i++) {
X SWAP(ruler->tabs)
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] 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 numTabs; i++) {
X printf("%.1fi ", ruler->tabs / 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 "", /* 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 "\\(=", /* 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", /* 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 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
-------
Posting-Version: version B 2.10.2 9/18/84; site uw-beaver
Path: utzoo!watmath!clyde!cbosgd!ihnp4!houxm!vax135!cornell!uw-beaver!info-mac
From: info-mac@uw-beaver
Newsgroups: fa.info-mac
Subject: writetotroff.sh
Message-ID:
Date: Sun, 30-Dec-84 21:11:47 EST
Article-I.D.: uw-beave.322
Posted: Sun Dec 30 21:11:47 1984
Date-Received: Tue, 1-Jan-85 00:35:59 EST
Sender: daemon@uw-beaver
Organization: U of Washington Computer Science
Lines: 1155
From: Bill Croft
#! /bin/sh
#---------------------------->Cut Here Makefile 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 w2t.c
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; jtextLength)
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 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 == ' ' || cp == '\t' )
X i--;
X textHeader->textLength = i;
X
X col = 0;
X for(i = 0; i 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; inumTabs; i++) {
X SWAP(ruler->tabs)
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] 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 numTabs; i++) {
X printf("%.1fi ", ruler->tabs / 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 "", /* 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 "\\(=", /* 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", /* 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 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
-------