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, ¶Header, 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 -------