home *** CD-ROM | disk | FTP | other *** search
/ Carousel Volume 2 #1 / carousel.iso / mactosh / unix / unix_mw2.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  1984-12-30  |  38KB  |  1,153 lines

  1. #! /bin/sh
  2. #---------------------------->Cut Here<---------------------------
  3. # This is a shell archive.  To extract the files, save the 
  4. # following text to a seperate file and type "sh filename" 
  5. #
  6. # Run this through sh, NOT csh! 
  7. #
  8. echo x - Makefile '        ' '-rw-r--r--  1 van           226 Dec 27 06:22 Makefile'
  9. sed 's/^X//' > Makefile << 'EOF'
  10. XCFLAGS=    -O
  11. X
  12. Xall:    w2t write2troff.data
  13. X
  14. Xw2t:    w2t.o
  15. X    cc -o w2t w2t.o
  16. X
  17. Xw2t.o:    w2t.c write.h
  18. X    cc $(CFLAGS) -c w2t.c
  19. X
  20. Xwrite2troff.data: write2troff.dl
  21. X    fromhex <write2troff.dl >write2troff.data
  22. Xclean:
  23. X    rm -r w2t.o write2troff.data
  24. EOF
  25. echo -n '             ' ; ls -l Makefile
  26. echo x - w2t.1 '        ' '-rw-r--r--  1 van          3118 Dec 27 05:33 w2t.1'
  27. sed 's/^X//' > w2t.1 << 'EOF'
  28. X.TH W2T 1-local
  29. X.SH NAME
  30. Xw2t \- convert MacWrite files to troff input files
  31. X.SH SYNOPSIS
  32. X.B w2t
  33. X[
  34. X.B \-sPointSize
  35. X] [
  36. X.B \-p
  37. X] [
  38. X.B \-d
  39. X] [
  40. X.B \-w
  41. X] [
  42. X.B \-r
  43. X]
  44. Xfile ...
  45. X.br
  46. X.SH DESCRIPTION
  47. X.I W2t
  48. Xreads the
  49. X.I files
  50. Xand produces a
  51. X.I troff
  52. Xinput file on the standard output.  The files should be .data files as
  53. Xtransferred by
  54. X.I macget(1).
  55. X.PP
  56. XBy default, the output file will contain enough
  57. X.I -me
  58. Xmacro commands to cause the output to ``strongly resemble'' the MacWrite
  59. Xoutput.  Currently, this means that justification, spacing, tabs,
  60. Xparagraphing, and certain kinds of text attributes will be the same.  See
  61. XBUGS for a list of things that don't work.
  62. X.PP
  63. XThe
  64. X.B -p
  65. Xoption saves space for pictures.  By default, pictures are ignored completely.
  66. XThis option causes a `.sv' directive of enough space to hold the picture to
  67. Xbe output.
  68. X.PP
  69. XThe
  70. X.B -r
  71. Xoption causes the output to have far fewer
  72. X.I troff
  73. Xcommands inserted.  Essentially, null paragraphs will be converted into .pp
  74. Xmacros, and text attributes will be converted.  This is useful because the
  75. X.I troff
  76. Xto do a verbatim formatting job is rather ugly; this option can be used when
  77. Xthe Mac is just being used to draft the text prior to a more rigorous
  78. Xformatting.
  79. X.PP
  80. XThe
  81. X.B -s
  82. X.I pointsize
  83. Xoption is used to change the document type sizes.  This amount is
  84. Xsubtracted from all point sizes in the document.  By default, this value is
  85. X2.  This will convert most MacWrite documents from 12 point to 10 point.
  86. X.I Pointsize
  87. Xcan be zero (the MacWrite pointsizes will be used) or negative (the MacWrite
  88. Xpointsizes will be scaled up).
  89. X.PP
  90. XThe
  91. X.I -w
  92. Xoption turns intraparagraph wrapping off.  A MacWrite paragraph is a single
  93. Xline of text with no newlines.
  94. X.I W2t
  95. Xwill wrap these lines at about 80 columns by default.  I have never seen an
  96. Xapplication where this wrapping was undesirable, but...
  97. X.PP
  98. XThe
  99. X.I -d
  100. Xoption causes an immense amount of debugging information to appear
  101. Xinterspersed with the output on stdout.
  102. X.PP
  103. XSince the table & math abilities of MacWrite are limitted,
  104. X.I tbl
  105. Xand
  106. X.I eqn
  107. Xcan be included in the MacWrite document.  I.e., lines between .TS/.TE
  108. Xor .EQ/.EN will be treated specially.  Other troff directives (lines
  109. Xstarting with a `.') will be passed through but may not do what you expect.
  110. X.PP
  111. X.SH "SEE ALSO"
  112. Xmacget(1)
  113. X.SH BUGS
  114. X.PP
  115. XPictures are barely supported (you will need scissors & glue).
  116. X.PP
  117. XHeaders and footers are ignored.
  118. X.PP
  119. XDecimal tabs are not handled correctly.
  120. X.PP
  121. XThe output is heavily -me macro dependent.
  122. X.PP
  123. X.PP
  124. XAll fonts map into troff's Times Roman.
  125. X.PP
  126. XText attributes are not quite right.  Bold, italic, subscript, and
  127. Xsuperscript work.  Underlining maps to italic.  Shadow maps to bold.
  128. XMixed attributes map to either bold or italic.
  129. X.PP
  130. XAll the special characters of the standard Mac Geneva font map into
  131. Xsome (reasonable?) troff character but the mapping is fixed.  Font dependent
  132. Xcharacter conversions (e.g., for the Princeton math font) should be supported.
  133. X.SH AUTHOR
  134. XMichael Caplinger, Rice University (mike@rice)
  135. X.br
  136. XChanges for Vax & some additions by Van Jacobson, Lawrence Berkeley Laboratory
  137. X(van@lbl-csam.arpa).
  138. EOF
  139. echo -n '             ' ; ls -l w2t.1
  140. echo x - w2t.c '        ' '-rw-r--r--  1 van         16105 Dec 27 05:33 w2t.c'
  141. sed 's/^X//' > w2t.c << 'EOF'
  142. X/*
  143. X    MacWrite to troff input converter.
  144. X
  145. X    version 0.1, Michael Caplinger (mike@rice.arpa), October 1984.
  146. X    version 0.2-4, Van Jacobson (van@lbl-rtsg.arpa), Dec 84
  147. X        added byte swap routines for Vax, added translations
  148. X        for most of Mac's extended characters, added pass-
  149. X        through for tables & equations, changed font cmds
  150. X        from R-I-B-S form to 1-2-3-4 form to allow font
  151. X        changing with ditroff, corrected a couple of minor
  152. X        glitches, add "-p" flag to output space for pictures.
  153. X*/
  154. X
  155. X/*
  156. X    copyright (c) 1984, Michael Caplinger.
  157. X    May be freely redistributed, but this comment must remain in the
  158. X    program or any derivative.
  159. X*/
  160. X
  161. X#define VERSION "0.4"
  162. X
  163. X#include <stdio.h>
  164. X#include "write.h"
  165. X
  166. Xunsigned short ntohs();
  167. X#define SWAP(s) (s)=ntohs(s);
  168. X
  169. X/* Current Document Context */
  170. Xint curPoint = 12;
  171. Xint curStyle = 0;
  172. Xint curFont;
  173. Xint curJust = -1;
  174. Xint curRight = -1;
  175. Xint curLeft = -1;
  176. Xint curSpacing = -1;
  177. Xfloat curIndent = -1.;
  178. Xfloat curLinelength = -1.0;
  179. Xfloat curParIndent = -1.;
  180. X
  181. X/* Program Option Flags */
  182. Xint verbose = 0;
  183. Xint wrap = 1;
  184. Xint pflag = 0;
  185. Xint basePoint = 2;
  186. Xint raw = 0;
  187. X
  188. Xmain(argc, argv)
  189. Xchar **argv;
  190. X{
  191. X    int f;
  192. X
  193. X    setFlags(argc, argv);
  194. X    argv++;
  195. X    while(*argv) {
  196. X        if(argv[0][0] != '-') {
  197. X        f = open(argv[0], 0);
  198. X        if(f >= 0) processFile(f);
  199. X    }
  200. X    argv++;
  201. X    }
  202. X}
  203. X
  204. XprocessFile(f)
  205. Xint f;
  206. X{
  207. X    struct global global;
  208. X    struct document text, header, footer;
  209. X    struct infoArrayElem *textInfo, *headerInfo, *footerInfo;
  210. X    char *data;
  211. X    struct textHeader *textHeader;
  212. X    struct paraHeader paraHeader;
  213. X    short formatRunLength;
  214. X    char *cp;
  215. X    int i, j, k, col;
  216. X    struct format *fp, *startfp, *endfp;
  217. X    struct ruler *ruler;
  218. X    int needSpace = 0;
  219. X    int skipBlanks = 0;
  220. X    int lastWasFormat = 0;
  221. X    int doingTable = 0;
  222. X
  223. X    read(f, &global, 140);
  224. X    SWAP(global.versionNumber)
  225. X    SWAP(global.paraOffset)
  226. X    SWAP(global.paraCount)
  227. X    SWAP(global.headerParaCount)
  228. X    SWAP(global.footerParaCount)
  229. X    SWAP(global.activeDoc)
  230. X    SWAP(global.startPageNum)
  231. X    read(f, &text, 34);
  232. X    read(f, &header, 34);
  233. X    read(f, &footer, 34);
  234. X    debug("version %d\n", global.versionNumber);
  235. X    debug("%d paragraphs in main text\n", global.paraCount);
  236. X    
  237. X    textInfo = (struct infoArrayElem *) malloc(global.paraCount * 8);
  238. X    headerInfo = (struct infoArrayElem *) malloc(global.headerParaCount * 8);
  239. X    footerInfo = (struct infoArrayElem *) malloc(global.footerParaCount * 8);
  240. X    read(f, textInfo, global.paraCount * 8);
  241. X    for(j=0; j<global.paraCount; j++) {
  242. X    SWAP(textInfo[j].paraHeight)
  243. X    SWAP(textInfo[j].position)
  244. X    }
  245. X    read(f, headerInfo, global.headerParaCount * 8);
  246. X    for(j=0; j<global.headerParaCount; j++) {
  247. X    SWAP(headerInfo[j].paraHeight)
  248. X    SWAP(headerInfo[j].position)
  249. X    }
  250. X    read(f, footerInfo, global.footerParaCount * 8);
  251. X    for(j=0; j<global.footerParaCount; j++) {
  252. X    SWAP(footerInfo[j].paraHeight)
  253. X    SWAP(footerInfo[j].position)
  254. X    }
  255. X
  256. X    doPrelude();
  257. X    for(j = 0; j < global.paraCount; j++) {
  258. X    read(f, ¶Header, 4);
  259. X    SWAP(paraHeader.type)
  260. X    SWAP(paraHeader.dataLength)
  261. X    debug("type %d paragraph\n", paraHeader.type);
  262. X    debug("%d bytes in paragraph data\n", paraHeader.dataLength);
  263. X    data = (char *) malloc(paraHeader.dataLength);
  264. X    read(f, data, paraHeader.dataLength);
  265. X    debug("height %d, position %d, page #%d\n", textInfo[j].paraHeight,
  266. X        textInfo[j].position, textInfo[j].pageNum);
  267. X    switch(paraHeader.type) {
  268. X        case TEXTPARA:
  269. X        textHeader = (struct textHeader *) data;
  270. X        SWAP(textHeader->textLength)
  271. X        debug("%d bytes of text\n", textHeader->textLength);
  272. X        /* check for a null or empty paragraph */
  273. X        cp = data + 2;
  274. X        while( *cp == ' ' || *cp == '\t' )
  275. X            cp++;
  276. X        if( *cp  == '\r' ) {
  277. X            /* null paragraph */
  278. X            needSpace++;
  279. X            break;
  280. X        }
  281. X            if(needSpace && !raw) {
  282. X            if( needSpace > 1 )
  283. X            printf(".sp %d\n", needSpace);
  284. X            else
  285. X            printf(".sp\n");
  286. X            needSpace = 0;
  287. X        }
  288. X        cp = data + 2 + textHeader->textLength;
  289. X        if((int) cp & 0x1) cp++; /* even byte boundary */
  290. X        formatRunLength = ntohs(*(short *)cp);
  291. X        formatRunLength /= 6;
  292. X        debug("%d format items\n", formatRunLength);
  293. X        startfp = (struct format *) (cp + 2);
  294. X        SWAP(startfp->charPos)
  295. X        fp = startfp;
  296. X        for(k = 0; k < formatRunLength; k++) {
  297. X            SWAP(fp->charPos)
  298. X            debug("pos %d, pointsize %d, style 0x%0x, font %d\n",
  299. X            fp->charPos, fp->pointSize, fp->style, fp->fontNumber);
  300. X            fp++;
  301. X        }
  302. X        cp = data + 2;
  303. X        fp = startfp;
  304. X        endfp = fp + (formatRunLength - 1);
  305. X        if(*cp == '.' || (*cp == '\\' && *(cp + 1) == '*')) {
  306. X            lastWasFormat = 1;
  307. X            if ( (cp[1] == 'T' && cp[2] == 'S') ||
  308. X                 (cp[1] == 'E' && cp[2] == 'Q') )
  309. X            doingTable = 1;
  310. X            else if ( (cp[1] == 'T' && cp[2] == 'E') ||
  311. X                  (cp[1] == 'E' && cp[2] == 'N') )
  312. X            doingTable = 0;
  313. X        }
  314. X        else {
  315. X            if ( !lastWasFormat && !doingTable) {
  316. X                printf(".pp\n");
  317. X            }
  318. X            lastWasFormat = 0;
  319. X        }
  320. X
  321. X        /* delete any trailing whitespace */
  322. X        i = textHeader->textLength - 1;
  323. X        while( cp[i] == ' ' || cp[i] == '\t' )
  324. X            i--;
  325. X        textHeader->textLength = i;
  326. X
  327. X        col = 0;
  328. X        for(i = 0; i < textHeader->textLength; i++) {
  329. X            if(i == fp->charPos) {
  330. X            col += doFormat(fp,i);
  331. X            if(fp != endfp) fp++;
  332. X            }
  333. X            if(wrap && *cp == ' ' && col > 65) {
  334. X            skipBlanks = 1;
  335. X            putchar('\n');
  336. X            col = -1;
  337. X            cp++;
  338. X            continue;
  339. X            }
  340. X            if(skipBlanks && *cp == ' ')
  341. X            ;
  342. X            else {
  343. X            col += putcharExtended(*cp);
  344. X            skipBlanks = 0;
  345. X            }
  346. X            cp++;
  347. X        }
  348. X        /* since we deleted trailing blanks & the final
  349. X         * \r, we're guaranteed that we need a newline.
  350. X         * But first reset the style since we will get
  351. X         * a ".pp" before any text & -me will reset the
  352. X         * style on the .pp.
  353. X         */
  354. X        setStyle( 0 );
  355. X        putchar( '\n' );
  356. X        break;
  357. X
  358. X        case RULERPARA:
  359. X        ruler = (struct ruler *) data;
  360. X        SWAP(ruler->leftMargin)
  361. X        SWAP(ruler->rightMargin)
  362. X        SWAP(ruler->paraIndent)
  363. X        for(i=0; i<ruler->numTabs; i++) {
  364. X            SWAP(ruler->tabs[i])
  365. X        }
  366. X        debug("leftMargin %d, right %d\n", 
  367. X            ruler->leftMargin, ruler->rightMargin);
  368. X        debug("just %d, %d tabs, paraIndent %d\n",
  369. X            ruler->justify, ruler->numTabs, ruler->paraIndent);
  370. X        doRuler(ruler);
  371. X        break;
  372. X
  373. X        case PICTUREPARA:
  374. X        if ( pflag ) {
  375. X            printf(".sv %.1fi\n",
  376. X                   -textInfo[j].paraHeight/80. );
  377. X        }
  378. X        break;
  379. X    } /* switch */
  380. X    free(data);
  381. X    } /* for */
  382. X    free(textInfo);
  383. X    free(headerInfo);
  384. X    free(footerInfo);
  385. X}
  386. X
  387. XdoFormat(fp, inParagraph)
  388. Xstruct format *fp;
  389. X{
  390. X    if(fp->pointSize != curPoint) {
  391. X    if(!raw) {
  392. X        if ( inParagraph )
  393. X        printf( "\\s%d\\&", fp->pointSize - basePoint);
  394. X        else {
  395. X        printf(".sz %d\n", fp->pointSize - basePoint);
  396. X        printf(".nr pp %d\n", fp->pointSize - basePoint);
  397. X        }
  398. X    }
  399. X    curPoint = fp->pointSize;
  400. X    }
  401. X    setStyle( fp->style );
  402. X
  403. X    /* this should be the number of chars taken up by the format
  404. X    string, but I'm lazy. */
  405. X    return 4;
  406. X}
  407. X
  408. XsetStyle( style )
  409. X{
  410. X    static int isRaised = 0;
  411. X    static int isLowered = 0;
  412. X    int font;
  413. X
  414. X    if ( style != curStyle ) {
  415. X
  416. X    font = style & (BOLD|SHADOW|ITALIC|UNDERLINE);
  417. X    if( font != (curStyle & (BOLD|SHADOW|ITALIC|UNDERLINE)) ) {
  418. X        if(font & (ITALIC|UNDERLINE))
  419. X        printf("\\f2");
  420. X        else if(font & (BOLD|SHADOW))
  421. X        printf("\\f3");
  422. X        else
  423. X        printf("\\f1");
  424. X    }
  425. X
  426. X    if(style & RAISE) {
  427. X        printf("\\u");
  428. X        isRaised = 1;
  429. X    } else if(isRaised) {
  430. X        printf("\\d");
  431. X        isRaised = 0;
  432. X    }
  433. X    if(style & LOWER) {
  434. X        printf("\\d");
  435. X        isLowered = 1;
  436. X    } else if(isLowered) {
  437. X        printf("\\u");
  438. X        isLowered = 0;
  439. X    }
  440. X    curStyle = style;
  441. X    }
  442. X}
  443. X
  444. Xdebug(f, a1, a2, a3, a4, a5, a6, a7, a8, a9)
  445. Xchar *f;
  446. X{
  447. X    if(verbose) fprintf(stdout, f, a1, a2, a3, a4, a5, a6, a7, a8, a9);
  448. X}
  449. X
  450. XsetFlags(argc, argv)
  451. Xchar **argv;
  452. X{
  453. X
  454. X    if(argc == 1) {
  455. X        printf("usage: %s [-r] [-p] [-d] [-w] [-s<pointadj>] files...\n", argv[0]);
  456. X    exit(1);
  457. X    }
  458. X    while(*argv) {
  459. X    if(argv[0][0] == '-') {
  460. X        switch(argv[0][1]) {
  461. X        case 'd':
  462. X            verbose = 1;
  463. X            break;
  464. X        case 'p':
  465. X            pflag = 1;
  466. X            break;
  467. X        case 'w':
  468. X            wrap = 0;
  469. X            break;
  470. X        case 's':
  471. X            basePoint = atoi(*argv + 2);
  472. X            break;
  473. X        case 'r':
  474. X            raw = 1;
  475. X            break;
  476. X        }
  477. X    }
  478. X    argv++;
  479. X    }
  480. X}
  481. X
  482. XdoRuler(ruler)
  483. Xstruct ruler *ruler;
  484. X{
  485. X    int i;
  486. X
  487. X    if(curJust != ruler->justify) {
  488. X        curJust = ruler->justify;
  489. X    printf(".br\n"); /* need to put out a break or the last bit of text
  490. X                gets munged into the new formatting rules. */
  491. X    switch(curJust) {
  492. X        case LEFTJUST:
  493. X        printf(".ad l\n");
  494. X        break;
  495. X        case CENTERJUST:
  496. X        printf(".ad c\n");
  497. X        break;
  498. X        case RIGHTJUST:
  499. X        printf(".ad r\n");
  500. X        break;
  501. X        case BOTHJUST:
  502. X        printf(".ad b\n");
  503. X        break;
  504. X    }
  505. X    }
  506. X    if ( curSpacing != ruler->spacing ) {
  507. X    curSpacing = ruler->spacing;
  508. X    printf( ".vs %dp\n", (curSpacing+2)*(curPoint - basePoint + 4 )/2 );
  509. X    printf( ".nr $r \\n(.v/\\n(.s\n" ); /* isn't -me wonderful? */
  510. X    }
  511. X    if(curLeft != ruler->leftMargin || curRight != ruler->rightMargin) {
  512. X        curLeft = ruler->leftMargin;
  513. X    curRight = ruler->rightMargin;
  514. X    /* set indent and line length */
  515. X    if ( curIndent != curLeft / 80. ) {
  516. X        curIndent = curLeft / 80.;
  517. X        printf(".ba %.1fi\n", curIndent);
  518. X        printf(".nr $i %.1fi\n", curIndent);
  519. X    }
  520. X    if ( curLinelength != curRight / 80. ) {
  521. X        curLinelength = curRight / 80.;
  522. X        printf(".ll %.1fi\n", curLinelength);
  523. X    }
  524. X    if ( curParIndent != (ruler->paraIndent / 80. - curIndent) ) {
  525. X        curParIndent = ruler->paraIndent / 80. - curIndent;
  526. X        printf(".nr pi %.1fi\n", curParIndent );
  527. X    }
  528. X    }
  529. X    printf(".ta ");
  530. X    if ( ruler->numTabs <= 0 && curParIndent < 0 )
  531. X    printf("%.1fi", -curParIndent );
  532. X    else
  533. X    for(i = 0; i < ruler->numTabs; i++) {
  534. X        printf("%.1fi ", ruler->tabs[i] / 10.0 / 8.0);
  535. X    }
  536. X    putchar('\n');
  537. X}
  538. X
  539. X
  540. X/* standard troff prelude */
  541. XdoPrelude() {
  542. X    printf(".\" this file generated by WtoT version %s\n", 
  543. X    VERSION);
  544. X    printf(".po 1i\n");
  545. X    printf(".nr ps 0\n"); /* kill .pp's interpara spacing */
  546. X    printf(".nr pi 0\n");
  547. X#ifdef no
  548. X    printf(".de pp\n"); /* redefine the .pp macro */
  549. X    printf(".br\n.ti \\(pi\n");
  550. X    printf("..\n");
  551. X#endif
  552. X}
  553. X
  554. X/* this table maps the Mac's extended character set into troff
  555. X * characters.  It's set up for the standard Geneva font.  (it
  556. X * should really be selected based on the current font)
  557. X */
  558. Xchar *ctrans[] = {
  559. X    "\\(sq",    /* 0 */
  560. X    "\\(sq",    /* 1 */
  561. X    "\\(sq",    /* 2 */
  562. X    "\\(sq",    /* 3 */
  563. X    "\\(sq",    /* 4 */
  564. X    "\\(sq",    /* 5 */
  565. X    "\\(sq",    /* 6 */
  566. X    "\\(sq",    /* 7 */
  567. X    "\b",        /* 8 */
  568. X    "\t",        /* 9 */
  569. X    "\n",        /* 10 */
  570. X    "\\(sq",    /* 11 */
  571. X    "\f",        /* 12 */
  572. X    "\n",        /* 13 */
  573. X    "\\(sq",    /* 14 */
  574. X    "\\(sq",    /* 15 */
  575. X    "\\(sq",    /* 16 */
  576. X    "\\(sq",    /* 17 */
  577. X    "\\(sq",    /* 18 */
  578. X    "\\(sq",    /* 19 */
  579. X    "\\(sq",    /* 20 */
  580. X    "\\(sq",    /* 21 */
  581. X    "\\(sq",    /* 22 */
  582. X    "\\(sq",    /* 23 */
  583. X    "\\(sq",    /* 24 */
  584. X    "\\(sq",    /* 25 */
  585. X    "\\(sq",    /* 26 */
  586. X    "\\(sq",    /* 27 */
  587. X    "\\(sq",    /* 28 */
  588. X    "\\(sq",    /* 29 */
  589. X    "\\(sq",    /* 30 */
  590. X    "\\(sq",    /* 31 */
  591. X    " ",    /* 32 */
  592. X    "!",    /* 33 */
  593. X    "\"",    /* 34 */
  594. X    "#",    /* 35 */
  595. X    "$",    /* 36 */
  596. X    "%",    /* 37 */
  597. X    "&",    /* 38 */
  598. X    "'",    /* 39 */
  599. X    "(",    /* 40 */
  600. X    ")",    /* 41 */
  601. X    "*",    /* 42 */
  602. X    "+",    /* 43 */
  603. X    ",",    /* 44 */
  604. X    "-",    /* 45 */
  605. X    ".",    /* 46 */
  606. X    "/",    /* 47 */
  607. X    "0",    /* 48 */
  608. X    "1",    /* 49 */
  609. X    "2",    /* 50 */
  610. X    "3",    /* 51 */
  611. X    "4",    /* 52 */
  612. X    "5",    /* 53 */
  613. X    "6",    /* 54 */
  614. X    "7",    /* 55 */
  615. X    "8",    /* 56 */
  616. X    "9",    /* 57 */
  617. X    ":",    /* 58 */
  618. X    ";",    /* 59 */
  619. X    "<",    /* 60 */
  620. X    "=",    /* 61 */
  621. X    ">",    /* 62 */
  622. X    "?",    /* 63 */
  623. X    "@",    /* 64 */
  624. X    "A",    /* 65 */
  625. X    "B",    /* 66 */
  626. X    "C",    /* 67 */
  627. X    "D",    /* 68 */
  628. X    "E",    /* 69 */
  629. X    "F",    /* 70 */
  630. X    "G",    /* 71 */
  631. X    "H",    /* 72 */
  632. X    "I",    /* 73 */
  633. X    "J",    /* 74 */
  634. X    "K",    /* 75 */
  635. X    "L",    /* 76 */
  636. X    "M",    /* 77 */
  637. X    "N",    /* 78 */
  638. X    "O",    /* 79 */
  639. X    "P",    /* 80 */
  640. X    "Q",    /* 81 */
  641. X    "R",    /* 82 */
  642. X    "S",    /* 83 */
  643. X    "T",    /* 84 */
  644. X    "U",    /* 85 */
  645. X    "V",    /* 86 */
  646. X    "W",    /* 87 */
  647. X    "X",    /* 88 */
  648. X    "Y",    /* 89 */
  649. X    "Z",    /* 90 */
  650. X    "[",    /* 91 */
  651. X    "\\",    /* 92 */
  652. X    "]",    /* 93 */
  653. X    "^",    /* 94 -  hat accent */
  654. X    "_",    /* 95 */
  655. X    "\\(aa",    /* 96 -  acute accent */
  656. X    "a",    /* 97 */
  657. X    "b",    /* 98 */
  658. X    "c",    /* 99 */
  659. X    "d",    /* 100 */
  660. X    "e",    /* 101 */
  661. X    "f",    /* 102 */
  662. X    "g",    /* 103 */
  663. X    "h",    /* 104 */
  664. X    "i",    /* 105 */
  665. X    "j",    /* 106 */
  666. X    "k",    /* 107 */
  667. X    "l",    /* 108 */
  668. X    "m",    /* 109 */
  669. X    "n",    /* 110 */
  670. X    "o",    /* 111 */
  671. X    "p",    /* 112 */
  672. X    "q",    /* 113 */
  673. X    "r",    /* 114 */
  674. X    "s",    /* 115 */
  675. X    "t",    /* 116 */
  676. X    "u",    /* 117 */
  677. X    "v",    /* 118 */
  678. X    "w",    /* 119 */
  679. X    "x",    /* 120 */
  680. X    "y",    /* 121 */
  681. X    "z",    /* 122 */
  682. X    "{",    /* 123 */
  683. X    "|",    /* 124 */
  684. X    "}",    /* 125 */
  685. X    "~",        /* 126 -  circumflex accent */
  686. X    "\\(sq",    /* 127 */
  687. X    "\\(sq",    /* 128 */
  688. X    "\\o'A\\(de'",    /* 129 -  upper circle A (A) */
  689. X    "C",        /* 130 -  upper C with cedilla */
  690. X    "\\(sq",    /* 131 */
  691. X    "\\(sq",    /* 132 */
  692. X    "\\(sq",    /* 133 */
  693. X    "\\(sq",    /* 134 */
  694. X    "\\(sq",    /* 135 */
  695. X    "\\(sq",    /* 136 */
  696. X    "\\(sq",    /* 137 */
  697. X    "\\(sq",    /* 138 */
  698. X    "\\(sq",    /* 139 */
  699. X    "\\o'a\\(de'",    /* 140 -  lower a with circle */
  700. X    "c",        /* 141 -  c with cedilla */
  701. X    "\\(sq",    /* 142 */
  702. X    "\\(sq",    /* 143 */
  703. X    "\\(sq",    /* 144 */
  704. X    "\\(sq",    /* 145 */
  705. X    "\\(sq",    /* 146 */
  706. X    "\\(sq",    /* 147 */
  707. X    "\\(sq",    /* 148 */
  708. X    "\\(sq",    /* 149 */
  709. X    "\\(sq",    /* 150 */
  710. X    "\\(sq",    /* 151 */
  711. X    "\\(sq",    /* 152 */
  712. X    "\\(sq",    /* 153 */
  713. X    "\\(sq",    /* 154 */
  714. X    "\\(sq",    /* 155 */
  715. X    "\\(sq",    /* 156 */
  716. X    "\\(sq",    /* 157 */
  717. X    "\\(sq",    /* 158 */
  718. X    "\\(sq",    /* 159 */
  719. X    "\\(dg",    /* 160 -  dagger */
  720. X    "\\(de",    /* 161 -  degrees (shift option 8) */
  721. X    "\\(ct",    /* 162 -  cents */
  722. X    "\\f2\\o'L-'\\fP",    /* 163 -  pounds (currency) */
  723. X    "\\(sc",    /* 164 -  section mark */
  724. X    "\\(bu",    /* 165 -  bullet */
  725. X    "\\(rh",    /* 166 -  paragraph */
  726. X    "\\(*b",    /* 167 -  beta (german "ss") */
  727. X    "\\(rg",    /* 168 -  registered */
  728. X    "\\(co",    /* 169 -  copyright */
  729. X    "\\u\\s-4TM\\s0\\d",    /* 170 -  trademark */
  730. X    "\\(ag",    /* 171 -  grave accent */
  731. X    "\\(sq",    /* 172 -  oomlat accent */
  732. X    "\\(!=",    /* 173 -  not equal */
  733. X    "AE",        /* 174 -  upper AE (") */
  734. X    "\\o'O/'",    /* 175 -  slash upper O (O) */
  735. X    "\\(if",    /* 176 -  infinity */
  736. X    "\\(+-",    /* 177 -  plus minus (shift option =) */
  737. X    "\\(<=",    /* 178 -  <= */
  738. X    "\\(>=",    /* 179 -  >= */
  739. X    "\\o'Y-'",    /* 180 -  yen */
  740. X    "\\(*m",    /* 181 -  lower mu */
  741. X    "\\(pd",    /* 182 -  "partial" */
  742. X    "\\(*S",    /* 183 -  upper sigma */
  743. X    "\\(*P",    /* 184 -  upper PI (P) */
  744. X    "\\(*p",    /* 185 -  lower pi */
  745. X    "\\(is",    /* 186 -  integral sign */
  746. X    "\\ua\\d",    /* 187 -  underbar lowercase a */
  747. X    "\\uo\\d",    /* 188 -  underbar lowercase o */
  748. X    "\\(*W",    /* 189 -  upper omega */
  749. X    "ae",        /* 190 -  lower ae */
  750. X    "\\o'o/'",    /* 191 -  slashed lower o */
  751. X    "\\(sq",    /* 192 -  upside down ? (?) */
  752. X    "\\(*i",    /* 193 -  lower case i */
  753. X    "\\(no",    /* 194 -  negation */
  754. X    "\\(sr",    /* 195 -  square root or check mark */
  755. X    "\\f2f\\fP",    /* 196 -  script lower f */
  756. X    "\\(~=",    /* 197 -  approx */
  757. X    "\\(*D",    /* 198 -  triangle (upper delta) */
  758. X    "\\s-1<<\\s0",    /* 199 -  open double angle brackets */
  759. X    "\\s-1>>\\s0",    /* 200 -  close double angles */
  760. X    "...",        /* 201 -  elipses (3 dots) */
  761. X    "\\ ",        /* 202 -  unpaddable space */
  762. X    "\\o'`A'",    /* 203 -  `A */
  763. X    "\\o'~A'",    /* 203 -  A with circumflex */
  764. X    "\\o'~O'",    /* 203 -  O with circumflex */
  765. X    "OE",        /* 206 -  upper OE ligature (Q) */
  766. X    "oe",        /* 207 -  lower oe ligature */
  767. X    "\\(hy",    /* 208 -  hyphen */
  768. X    "\\(em",    /* 209 -  m dash (shift option -) */
  769. X    "``",        /* 210 -  back double quote */
  770. X    "''",        /* 211 -  close double quote */
  771. X    "`",        /* 212 -  back single quote */
  772. X    "'",        /* 213 -  close single quote */
  773. X    "\\(di",    /* 214 -  divide */
  774. X    "\\(gr",    /* 215 -  diamond (V) */
  775. X    "\\o'y\"'",    /* 216 -  y with umlat */
  776. X    "\\(sq",    /* 217 */
  777. X    "\\(sq",    /* 218 */
  778. X    "\\(sq",    /* 219 */
  779. X    "\\(sq",    /* 220 */
  780. X    "\\(sq",    /* 221 */
  781. X    "\\(sq",    /* 222 */
  782. X    "\\(sq",    /* 223 */
  783. X    "\\(sq",    /* 224 */
  784. X    "\\(sq",    /* 225 */
  785. X    "\\(sq",    /* 226 */
  786. X    "\\(sq",    /* 227 */
  787. X    "\\(sq",    /* 228 */
  788. X    "\\(sq",    /* 229 */
  789. X    "\\(sq",    /* 230 */
  790. X    "\\(sq",    /* 231 */
  791. X    "\\(sq",    /* 232 */
  792. X    "\\(sq",    /* 233 */
  793. X    "\\(sq",    /* 234 */
  794. X    "\\(sq",    /* 235 */
  795. X    "\\(sq",    /* 236 */
  796. X    "\\(sq",    /* 237 */
  797. X    "\\(sq",    /* 238 */
  798. X    "\\(sq",    /* 239 */
  799. X    "\\(sq",    /* 240 */
  800. X    "\\(sq",    /* 241 */
  801. X    "\\(sq",    /* 242 */
  802. X    "\\(sq",    /* 243 */
  803. X    "\\(sq",    /* 244 */
  804. X    "\\(sq",    /* 245 */
  805. X    "\\(sq",    /* 246 */
  806. X    "\\(sq",    /* 247 */
  807. X    "\\(sq",    /* 248 */
  808. X    "\\(sq",    /* 249 */
  809. X    "\\(sq",    /* 250 -  box (option h) */
  810. X    "\\(sq",    /* 251 -  box (option k) */
  811. X    "\\(sq",    /* 252 */
  812. X    "\\(sq",    /* 253 */
  813. X    "\\(sq",    /* 254 */
  814. X    "\\(sq",    /* 255 */
  815. X    0 };
  816. X
  817. XputcharExtended(c)
  818. Xunsigned char c;
  819. X{
  820. X    printf("%s", ctrans[c]);
  821. X    return( strlen( ctrans[c] ) );
  822. X}
  823. EOF
  824. echo -n '             ' ; ls -l w2t.c
  825. echo x - write.h '        ' '-rw-r--r--  1 van          2142 Dec 27 05:33 write.h'
  826. sed 's/^X//' > write.h << 'EOF'
  827. Xtypedef unsigned char byte;
  828. X
  829. Xstruct global { /* should be 140 bytes */
  830. X    short versionNumber;
  831. X    short paraOffset;
  832. X    short paraCount;
  833. X    short headerParaCount;
  834. X    short footerParaCount;
  835. X    byte titlePage;
  836. X    byte scrapShow;
  837. X    byte footerDisplayed;
  838. X    byte headerDisplayed;
  839. X    byte rulersShowing;
  840. X    byte spare;
  841. X    short activeDoc; /* 0 = main, 1 = header, 2 = footer */
  842. X    short startPageNum;
  843. X    byte printingVars[120]; /* ??? */
  844. X};
  845. X
  846. X#define MAINDOC 0
  847. X#define HEADERDOC 1
  848. X#define FOOTERDOC 2
  849. X
  850. Xstruct endpoint {
  851. X    short paraNumber;
  852. X    short charPos;
  853. X};
  854. X
  855. Xstruct position {
  856. X    short vert;
  857. X    short hor;
  858. X};
  859. X
  860. Xstruct document { /* should be 34 bytes */
  861. X    struct endpoint start;
  862. X    struct endpoint end;
  863. X    short vertOffset; /* always <= 0 */
  864. X    short needToRedraw;
  865. X    struct position pageNumberPos;
  866. X    struct position datePos;
  867. X    struct position timePos;
  868. X    struct position timeStringPos;
  869. X    byte iconRedraw;
  870. X    byte iconFlag;
  871. X    short activeFont;
  872. X    short activeStyle;
  873. X};
  874. X
  875. Xstruct infoArrayElem { /* should be 8 bytes */
  876. X    short paraHeight;
  877. X    short position;
  878. X    byte pageNum; /* 0-based */
  879. X    byte unused[3];
  880. X};
  881. X
  882. X/*
  883. X    paragraph data
  884. X*/
  885. X
  886. Xstruct paraHeader {
  887. X    short type; /* 0=ruler, 1=text, 2=picture */
  888. X    short dataLength;
  889. X};
  890. X
  891. X#define RULERPARA 0
  892. X#define TEXTPARA 1
  893. X#define PICTUREPARA 2
  894. X
  895. Xstruct textHeader {
  896. X    short textLength;
  897. X};
  898. X
  899. X/*
  900. X    ASCII data follows.  On the even word boundary following text there is
  901. X    a word for the format run length.  Each format consists of six bytes:
  902. X*/
  903. X
  904. Xstruct format {
  905. X    short charPos;
  906. X    byte pointSize;
  907. X    byte style;
  908. X    byte unused;
  909. X    byte fontNumber;
  910. X};
  911. X
  912. Xstruct ruler {
  913. X    short leftMargin;
  914. X    short rightMargin;
  915. X    byte justify;
  916. X    byte numTabs;
  917. X    byte filler; /* ??? */
  918. X    byte spacing;
  919. X    short paraIndent;
  920. X    short tabs[12];
  921. X};
  922. X
  923. X#define LEFTJUST 0
  924. X#define CENTERJUST 1
  925. X#define RIGHTJUST 2
  926. X#define BOTHJUST 3
  927. X
  928. X#define SINGLESPACE 0
  929. X#define DOUBLESPACE 1
  930. X#define TRIPLESPACE 2
  931. X
  932. X/* bits for text styles */
  933. X#define BOLD 0x1
  934. X#define ITALIC 0x2
  935. X#define    UNDERLINE 0x4
  936. X#define    OUTLINE 0x8
  937. X#define    SHADOW 0x10
  938. X#define RAISE 0x20
  939. X#define LOWER 0x40
  940. EOF
  941. echo -n '             ' ; ls -l write.h
  942. echo x - write2troff.dl '        ' '-rw-r--r--  1 van         13868 Dec 27 05:33 write2troff.dl'
  943. sed 's/^X//' > write2troff.dl << 'EOF'
  944. X@@@C@DJJ@@FL@@@E@@@FOO@@@@OOOOOO@@@@@@@A@@@B@@@@@@DH@@E@@@@@@@@@@B
  945. XO@@BH@OOMLOONL@BOD@BID@A@B@EBH@COL@@@A@@@@@@DH@@E@@@@@@@@@@BO@@BH@
  946. X@@E@@@B@@BH@@LH@@@AH@@@A@A@A@@@@@@@ABG@O@@@A@A@A@@@@@@@@@@@@@@@@@@
  947. X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  948. X@@@@@@@@@@@@@@@@@@AH@@AA@@AH@@AAONED@@ADOOOB@@ANOOOB@@NLOOOB@AKJOO
  949. XOOOOOOOO@@@L@@@@@A@@@D@@@@@@@D@@@@@@@@@@@AOOOB@@AN@@AC@ABDOOOB@AKJ
  950. XOOOOOOOO@@OOOOOOOOOO@@@E@@@@@@@E@@@@@@@@@@@A@@CC@@MLOOOB@@NLOOOB@A
  951. XKJOOOOOOOO@@OOOOOOOOOO@@@@@@D@@@@ADFDB@@AG@@D@@@@ADFFJ@@AG@@EG@@@A
  952. XDFHJ@@A@@@FN@@@@LL@@@@A@@@GN@@@@LKIL@@A@@@HN@@@@LLB@@@AC@@IN@@@@LK
  953. XIH@@AC@@KA@@@ADL@D@@A@@@LD@@@ADKOL@@AC@@MD@@@@LKID@@AC@@NG@@@@LKI@
  954. X@@AC@@OJ@@@@LKHL@@A@@A@M@@@@LKHH@@@@@AAM@@@@LKHD@@D@@AAM@@@@LKH@@@
  955. XA@@AEM@@@@LKGL@@A@@AFM@@@@LKGH@@@@@AGM@@@@LKGD@@A@@AGM@@@@LKG@@@A@
  956. X@AHM@@@@LKFL@@A@@AIM@@@@LKFH@@@@@AJM@@@@LKFD@@F@@AJM@@@@LKF@@@A@@B
  957. X@M@@@@LKEL@@C@@BAM@@@@LKEH@@A@@BDM@@@@LKED@@B@@BEM@@@@LKE@@@A@@BGM
  958. X@@@@LKDL@@@@@BHM@@@@LKDH@@D@@BHM@@@@LKDD@@A@@@G@@A@@LKD@@@CC@@H@@A
  959. X@@LKCL@@A@@@KC@A@ADKFH@@A@@@LC@A@ADKFD@@@@@@MC@A@ADKF@@@A@@@MC@A@A
  960. XDKEL@@A@@@NC@A@ADKEH@@A@@@OC@A@ADKED@@A@@A@C@A@ADKE@@@B@@AAC@A@ADK
  961. XDL@@A@@ACC@A@ADKDH@@A@@ADC@A@ADKDD@@A@@AEC@A@ADKD@@@A@@AFC@A@ADKCL
  962. X@@A@@AGC@A@ADKCH@@A@@AHC@A@ADKCD@@A@@AIC@A@ADKC@@@A@@AJC@A@ADKBL@@
  963. XA@@AKC@A@ADKBH@@A@@ALC@A@ADKBD@@A@@AMC@A@ADKB@@@A@@ANC@A@ADKAL@@A@
  964. X@AOC@A@ADKAH@@A@@B@C@A@ADKAD@@A@@BAC@A@ADKA@@@A@@BBC@A@ADK@L@@A@@B
  965. XCC@A@ADK@H@@A@@BDC@A@ADK@D@@A@@BEC@A@ADK@@@@A@@BFC@A@ADJOL@@A@@BGC
  966. X@A@ADJOH@@A@@BHC@A@ADJOD@@A@@BIC@A@ADJO@@@A@@@E@@B@ADJNL@@A@@@F@@B
  967. X@ADJNH@@A@@@G@@B@ADJND@@A@@@H@@B@ADJN@@@A@@@I@@B@ADJML@@A@@@J@@B@A
  968. XDJMH@@A@@@K@@B@ADJMD@@A@@@L@@B@ADJM@@@A@@@M@@B@ADJLL@@A@@@N@@B@ADJ
  969. XLH@@A@@@O@@B@ADJLD@@A@@A@@@B@ADJL@@@A@@AA@@B@ADJKL@@A@@AB@@B@ADJKH
  970. X@@A@@AC@@B@ADJKD@@A@@AD@@B@ADJK@@@A@@AE@@B@ADJJL@@A@@AF@@B@ADJJH@@
  971. XA@@AG@@B@ADJJD@@A@@AH@@B@ADJJ@@@A@@AI@@B@ADJIL@@A@@AJ@@B@ADJIH@@A@
  972. X@AK@@B@ADJID@@A@@AL@@B@ADJI@@@A@@AM@@B@ADJHL@@A@@AN@@B@ADJHH@@A@@A
  973. XO@@B@ADJHD@@A@@B@@@B@ADJH@@@A@@BA@@B@ADJGL@@A@@BB@@B@ADJGH@@A@@BC@
  974. X@B@ADJGD@@A@@BD@@B@ADJG@@@A@@BE@@B@ADJFL@@A@@BF@@B@ADLG@@@A@@BG@@B
  975. X@ADLFL@@A@@BH@@B@ADLFH@@A@@BI@@B@ADLFD@@A@@@D@@C@ADLF@@@A@@@E@@C@A
  976. XDLEL@@A@@@F@@C@ADLEH@@A@@@G@@C@ADLED@@A@@@H@@C@ADLE@@@A@@@I@@C@ADL
  977. XDL@@A@@@J@@C@ADLDH@@A@@@K@@C@ADLDD@@@@@@@@@@@ADLD@@@A@@@@@@@@ADLCL
  978. X@@A@@@A@@@@ADLCH@@A@@@B@@@@ADLCD@@A@@@C@@@@ADLC@@@@@@@@@@@@ADLBL@@
  979. XA@@@@@@@@ADLBH@@A@@@A@@@@ADLBD@@A@@@B@@@@ADLB@@@A@@@C@@@@ADLAL@@A@
  980. X@@D@@@@ADLAH@@@@@@BB@@@J@AN@@A@A@@@@@@@J@@GM@AN@@AN@@@HH@@@J@@FF@@
  981. XCH@@ON@AJD@@@@@@AB@@@@@@@A@@C@@@BAEGCBEDB@MAB@DCFOFNGFFEGBGDB@DMFA
  982. XFCEGGBFIGDFEB@DDFOFCGEFMFEFNGDGC@MGC@@@F@@@@AB@A@@@A@@@AAGDH@@@A@@
  983. XAL@@@NGDFOB@EEFNFIGHB@EDGBFOFFFF@M@@@F@@@@AB@A@@@A@@@AAGAH@@@A@@A@
  984. X@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@AH@@@A@@AB@@@CFBGI@MGI@@@F@@@@@L@@@@
  985. X@A@@@AA@@L@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@OL@@@A@@BN@@B@DMFI
  986. XFKFEB@DCFAG@FLFIFNFGFEGBB@BHFMFIFKFED@GBFIFCFEBNFAGBG@FABI@M@@@F@@
  987. X@@@N@B@@@A@@@AACNL@@@A@@AN@@A@EBFIFCFEB@EEFNFIGFFEGBGCFIGDGI@M@@@F
  988. X@@@@@N@B@@@A@@@AACLL@@@A@@AB@@@DFAFNFD@M@@@F@@@@@L@@@@@A@@@AA@KL@@
  989. X@A@@C@@@BAEFFAFNB@DJFAFCFOFBGCFOFNB@BHGFFAFND@FLFBFLBMGBGDGCFGBNFA
  990. XGBG@FABI@MBI@@@F@@@@@N@B@@@A@@@AACIH@@@A@@BL@@AMDLFAGGGBFEFNFCFEB@
  991. XDBFEGBFKFEFLFEGIB@DLFAFBFOGBFAGDFOGBGI@MGI@@@F@@@@@N@B@@@A@@@AACIH
  992. X@@@A@@A@@@@A@M@A@@@F@@@@@N@@@@@A@@@AACHL@@@A@@A@@@@A@M@A@@@F@@@@@L
  993. X@@@@@A@@@AA@GL@@@@@@BB@@@J@AN@@C@A@@@@@@@J@@GM@AN@@AN@@@HH@@@J@@FF
  994. X@@CH@@ON@AJD@@@@@@AB@@@@@@@A@ADD@AAEEGCBGDB@FIGCB@FAB@EEFNFIGHJJB@
  995. XG@GBFOFGGBFAFMB@GDFOB@FCFOFNGFFEGBGDB@DMFAFCEGGBFIGDFEJJB@FFFIFLFE
  996. XGCB@FIFNGDFOB@GDGBFOFFFFB@FOGBB@FDFIGDGBFOFFFFB@FIFNG@GEGDB@FFFIFL
  997. XFEGCBNB@B@DIGDB@BHFCFOGBGBFEFCGDFLGICOBIB@FCFOFNGFFEGBGDGCB@FMFOGC
  998. XGDB@DMFAFCEGGBFIGDFEB@FFFEFAGDGEGBFEGCB@FIFNGDFOB@GDFHFEB@FCFOGBGB
  999. XFEGCG@FOFNFDFIFNFGB@GDGBFOFFFFB@FCFOFMFMFAFNFDGCBNB@B@EDFHFEB@FCFO
  1000. XFNGFFEGBGDFEFDB@FDFOFCGEFMFEFNGDB@FCFAFNB@FBFEB@G@FIG@FEFDB@FDFIGB
  1001. XFEFCGDFLGIB@GDFOB@GFGDGBFOFFFFB@FOGBB@FIGDGBFOFFFFB@FOGBB@FCFAFNB@
  1002. XFBFEB@GCFAGFFEFDB@FFFOGBB@FFGEGBGDFHFEGBB@FEFDFIGDGDFIFNFGBN@MBN@@
  1003. XBD@@@@@L@A@@@A@@@D@L@@@@@A@@CG@L@B@@@A@@CM@L@@@@@A@@D@@L@B@@@A@@DG
  1004. X@L@@@@@A@@@DA@A@A@A@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@AH@@@A@@
  1005. XBF@@ABEGCBGDB@FIGCB@FIFNGFFOFKFEFDB@FAGC@M@@@L@@@@@L@A@@@A@@@C@L@@
  1006. X@@@A@@@AA@AH@@@@@@BB@@@J@AN@@A@A@@@@@@@J@@GM@AN@@AN@@@HH@@@J@@FF@@
  1007. XCH@@ON@AJD@@@@@@AB@@@@@@@A@@A@@@@A@M@A@@@F@@@@@L@A@@@A@@@AA@OD@@@A
  1008. X@@EF@@AMGGCBGDB@EKBMGCFNEMB@EKBMG@EMB@EKBMFDEMB@FFFIFLFEB@BNBNBN@M
  1009. XBN@@C@@@@@@L@A@@@A@@@C@L@@@@@A@@@E@L@A@@@A@@@G@L@@@@@A@@@K@L@A@@@A
  1010. X@@@M@L@@@@@A@@A@@L@A@@@A@@AB@L@@@@@A@@@AA@OD@@@A@@A@@@@A@M@A@@@F@@
  1011. X@@@L@@@@@A@@@AA@OD@@@@@@BB@@BH@AN@@C@@@@@@@@@J@AN@@AN@@AN@@AN@@@@J
  1012. X@@FF@@CH@@ON@AJD@@@@@@AB@@@@@@@A@ALB@AGJBMGCFN@IGCFCFAFLFEGCB@GDFH
  1013. XFEB@G@FOFIFNGDB@GCFIGJFEGCB@FIFNB@GDFHFEB@FCFOFNGFFEGBGDFEFDB@FDFO
  1014. XFCGEFMFEFNGDBNB@B@DBFEFCFAGEGCFEB@FOFFB@GCFCGBFEFEFNB@FAFNFDB@G@GB
  1015. XFIFNGDFEGBB@FLFIFMFIGDFAGDFIFOFNGCBLB@FMFOGCGDB@DMFAFCEGGBFIGDFEB@
  1016. XFDFOFCGEFMFEFNGDGCB@FAGBFEB@FDFOFNFEB@FIFNB@CACBBMG@FOFIFNGDB@FFFO
  1017. XFNGDGCBNB@B@B@EDGBFOFFFFB@FDFOFCGEFMFEFNGDGCB@FGFEFNFEGBFAFLFLGIB@
  1018. XFLFOFOFKB@FBFEGDGDFEGBB@FIFNB@CAC@B@G@FOFIFNGDB@FFFOFNGDGCBNB@B@B@
  1019. XEDFHFIGCB@FFFLFAFGB@FCFAGEGCFEGCB@FAFLFLB@FFFOFNGDB@GCFIGJFEGCB@FI
  1020. XFNB@GDFHFEB@DMFAFCEGGBFIGDFEB@FDFOFCGEFMFEFNGDB@GDFOB@FBFEB@FDFEFC
  1021. XGBFEFAGCFEFDB@FBGIB@FNB@G@FOFIFNGDGCBNB@B@BHDNB@FMFAGIB@FBFEB@FNFE
  1022. XFGFAGDFIGFFEB@GDFOB@GCFCFAFLFEB@GDFHFEB@FDFOFCGEFMFEFNGDB@FFFOFNGD
  1023. XB@GCFIGJFEGCB@GEG@BIBNB@B@EDFHFEB@FDFEFFFAGEFLGDB@FIGCB@MBBMGCCBMC
  1024. XBN@M@@CL@@@@@L@A@@@A@@@B@L@@@@@A@@@C@L@A@@@A@@@D@L@@@@@A@AAO@L@B@@
  1025. X@A@AB@@L@@@@@A@ABK@L@B@@@A@ABL@L@@@@@A@AGD@L@A@@@A@AGG@L@@@@@A@@@F
  1026. XA@A@A@A@A@A@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@OD@@@A@@ON@@LOBM
  1027. XG@@IGBFEGCFEGBGFFEGCB@GCG@FAFCFEB@FFFOGBB@G@FIFCGDGEGBFEGCBNB@B@DN
  1028. XFOGBFMFAFLFLGIBLB@G@FIFCGDGEGBFEGCB@FIFNB@GDFHFEB@DMFAFCEGGBFIGDFE
  1029. XB@FDFOFCGEFMFEFNGDB@FAGBFEB@FIFGFNFOGBFEFDBNB@B@DIFFB@GDFHFEB@BMG@
  1030. XB@FFFLFAFGB@FIGCB@FGFIGFFEFNBLB@FAB@FBFLFOFCFKB@FOFFB@GCG@FAFCFEB@
  1031. XFLFAGBFGFEB@FEFNFOGEFGFHB@GDFOB@FHFOFLFDB@GDFHFEB@G@FIFCGDGEGBFEB@
  1032. XFIGCB@GBFEGCFEGBGFFEFDB@GFFIFAB@FAB@MBBNGCGFMCB@GDGBFOFFFFB@FDFIGB
  1033. XFEFCGDFIGFFEBN@M@@@@BD@@@@@L@A@@@A@@@C@L@@@@@A@@FB@L@A@@@A@@FD@L@@
  1034. X@@@A@@KI@L@A@@@A@@KL@L@@@@@A@@@CA@A@A@I@@@@A@@A@@@@A@M@A@@@F@@@@@L
  1035. X@@@@@A@@@AA@OD@@@A@@FL@@EHBMFD@IFCFAGEGCFEGCB@FCFOG@FIFOGEGCB@FAFM
  1036. XFOGEFNGDGCB@FOFFB@FDFEFBGEFGFGFIFNFGB@FOGEGDG@GEGDB@GDFOB@FBFEB@FI
  1037. XFNFCFLGEFDFEFDB@FIFNB@GDFHFEB@FCFOFNGFFEGBGDFEFDB@FDFOFCGEFMFEFNGD
  1038. XBN@M@@@L@@@@@L@A@@@A@@@C@L@@@@@A@@@BA@A@@@@A@@A@@@@A@M@A@@@F@@@@@L
  1039. X@@@@@A@@@AA@OD@@@@@@BB@@@J@AN@@C@A@@@@@@@J@@FD@AN@@AN@@AN@@@@J@@FF
  1040. X@@CH@@ON@AJD@@@@@@AB@@@@@@@A@ADF@@OIEDFAFBFLFEGCB@BHFBGBFAFCFKFEGD
  1041. XFEFDB@FBGIB@BNEDECB@FAFNFDB@BNEDDEB@FLFIFNFEGCBIB@FAFNFDB@FEGAGEFA
  1042. XGDFIFOFNGCB@BHFBGBFAFCFKFEGDFEFDB@FBGIB@BNDEEAB@FAFNFDB@BNDEDNB@FL
  1043. XFIFNFEGCBIB@FCFAFNB@FBFEB@FIFNFCFLGEFDFEFDB@FIFNB@GDFHFEB@DMFAFCEG
  1044. XGBFIGDFEB@FFFIFLFEBNB@B@DOGDFHFEGBB@GDGBFOFFFFB@FDFIGBFEFCGDFIGFFE
  1045. XGCB@BHFLFIFNFEGCB@GCGDFAGBGDFIFNFGB@GGFIGDFHB@FAB@MBBNMCBIB@FCFAFN
  1046. XB@FBFEB@FIFNFCFLGEFDFEFDB@FIFNB@GDFHFEB@FFFIFLFEB@FBGEGDB@GDFHFEB@
  1047. XGBFEGCGEFLGDGCB@FMFAGIB@FNFOGDB@FBFEB@GGFHFAGDB@GIFOGEB@FEGHG@FEFC
  1048. XGDBN@MBN@@DB@@@@@L@@@@@A@@AE@L@A@@@A@@AH@L@@@@@A@@AM@L@A@@@A@@B@@L
  1049. X@@@@@A@@DD@L@A@@@A@@DH@L@@@@@A@@DL@L@A@@@A@@DO@L@@@@@A@@JM@L@A@@@A
  1050. X@@JN@L@@@@@A@@@DA@A@A@A@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@OB@@
  1051. X@A@ABB@@LOEGCBGDB@FMFAG@GCB@FAFLFLB@DMFAFCB@FFFOFNGDGCB@GDFOB@GDGB
  1052. XFOFFFFBGGCB@EDFIFMFEGCB@EBFOFMFAFNBNB@B@DBFOFLFDFFFAFCFEB@FAFNFDB@
  1053. XECFHFAFDFOGGB@FAGBFEB@G@GBFIFNGDFEFDB@FIFNB@FBFOFLFDBNB@B@DIGDFAFL
  1054. XFIFCB@FAFNFDB@EEFNFDFEGBFLFIFNFEB@FAGBFEB@G@GBFIFNGDFEFDB@FIFNB@FI
  1055. XGDFAFLFIFCBNB@B@ECGDGIFLFEB@FCFOFMFBFIFNFAGDFIFOFNGCB@FAGBFEB@G@GE
  1056. XFNGDFEFDB@BHFEBNFGBNBLB@DBFOFLFDBMDIGDFAFLFIFCB@B@FCFOFMFEGCB@FOGE
  1057. XGDB@FAGCB@FIGDFAFLFIFCBIBN@MBN@@DH@@@@@L@A@@@A@@@C@L@@@@@A@@C@@L@A
  1058. X@@@A@@CH@L@@@@@A@@CM@LA@@@@A@@DC@L@@@@@A@@EJ@L@B@@@A@@F@@L@@@@@A@@
  1059. XFE@L@D@@@A@@FN@L@@@@@A@@JL@L@C@@@A@@KG@L@@@@@A@@@CACA@A@I@@@@A@@A@
  1060. X@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@LB@@@A@@CJ@@AODAB@GDGIG@FIFCFAFLB@GE
  1061. XGCFEB@FOFFB@GGCBGDB@FMFIFGFHGDB@FBFEBL@MBL@@AB@@@@@L@@@@@A@@AA@L@A
  1062. X@@@A@@AD@L@@@@@A@@@AA@KF@@@@@@BB@@@J@AN@@@@B@@@@@@@J@@BH@@MB@AN@@A
  1063. XN@@@@J@@FF@@CH@@ON@AJD@@@@@@AB@@@@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A
  1064. X@@@AA@IB@@@A@@CN@@BJ@IFMFAFCFGFEGDB@BMFDB@FDFOFC@IGBFEGDGBFIFEGFFE
  1065. XB@DMFAFCEGGBFIGDFEB@FDFOFCGEFMFEFNGD@M@@@L@@@@@L@@@@@A@@@O@L@B@@@A
  1066. X@@@AA@IB@@@A@@DJ@@CF@IGGCBGDB@FDFOFCBNFDFAGDFAB@GLB@FIGDGBFOFFFFB@
  1067. XBMFMFE@IFCFOFNGFFEGBGDB@BFB@FOGEGDG@GEGDB@GDFOB@FIFMFAFGFEFN@M@@@L
  1068. X@@@@@L@@@@@A@@AK@L@B@@@A@@@AA@HF@@@A@@A@@@@A@M@A@@@F@@@@@L@B@@@A@@
  1069. X@AA@FB@@@A@@FF@@EAEGCBGDB@FDFOFEGCB@GDFHFEB@FFFOFLFLFOGGFIFNFGB@GD
  1070. XGBFAFNGCFLFAGDFIFOFNGCB@FBFEGDGGFEFEFNB@DMFAFCB@FCFHFAGBFAFCGDFEGB
  1071. XGCB@FAFNFDB@GDGBFOFFFFB@FCFHFAGBFAFCGDFEGBGCBN@MBN@@@L@@@@@L@A@@@A
  1072. X@@@C@L@@@@@A@@@BA@A@@@@A@@AB@@@DBNEDEC@M@@@F@@@@@L@@@@@A@@@AA@CB@@
  1073. X@A@@AF@@@HFCFEFNGDFEGBCK@M@@@F@@@@@L@@@@@A@@@AA@CB@@@A@@AD@@@FFCDB
  1074. XB@FCDB@M@@@F@@@@@L@@@@@A@@@AA@@N@@@A@@AD@@@EFCB@FLBN@MBN@@@F@@@@@L
  1075. X@@@@@A@@@AA@@N@@@A@@BB@@ADEDGBFOFFFF@IDMFAFCB@DCFHFAGBFAFCGDFEGB@M
  1076. X@@@F@@@@@L@@@@@A@@@AA@NJ@@@A@@A@@@@BCM@M@@@F@@@@@L@@@@@A@@@AA@NJ@@
  1077. X@A@@AN@@@OF@@IFGGBFAGFFEB@FAFCFCFEFNGD@MGD@@@F@@@@@L@@@@@A@@@AA@NJ
  1078. X@@@A@@AJ@@@KLA@IFIFOGDFAB@BHCOBI@MBI@@@F@@@@@L@@@@@A@@@AA@LF@@@A@@
  1079. XAJ@@@LJJ@IGDGBFAFDFEFMFAGBFK@M@@@F@@@@@L@@@@@A@@@AA@LF@@@A@@B@@@AB
  1080. XJC@IG@FOGEFNFDGCB@GCGDFEGBFLFIFNFG@M@@@F@@@@@L@@@@@A@@@AA@JB@@@A@@
  1081. XAF@@@HJB@IFCFEFNGDGC@M@@@F@@@@@L@@@@@A@@@AA@JB@@@A@@AJ@@@KK@@IFIFN
  1082. XFFFIFNFIGDGI@MGI@@@F@@@@@L@@@@@A@@@AA@HI@@@A@@AN@@@OJD@IGCFEFCGDFI
  1083. XFOFNB@FMFAGBFK@MFK@@@F@@@@@L@@@@@A@@@AA@HI@@@A@@AL@@@MJF@IG@FAGBFA
  1084. XFGGBFAG@FHB@@MB@@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@AH@@@IJE@IFBGEFLFLFE
  1085. XGD@MGD@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@BF@@AGKK@IGEFNFDFEGBFBFAGBB@FL
  1086. XFOGGFEGBFCFAGCFEB@FA@MFA@@@F@@@@@L@@@@@A@@@AA@EI@@@A@@BF@@AGKL@IGE
  1087. XFNFDFEGBFBFAGBB@FLFOGGFEGBFCFAGCFEB@FO@MFO@@@F@@@@@L@@@@@A@@@AA@CE
  1088. X@@@A@@AH@@@IM@@IFHGIG@FHFEFN@MFN@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@AJ@@
  1089. X@LJM@IFNFOGDB@FEGAGEFAFL@M@@@F@@@@@L@@@@@A@@@AA@BI@@@A@@AL@@@NLO@I
  1090. XFOFEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@@E@@@A@@AL@@@NKG@IGE
  1091. XG@G@FEGBB@GCFIFGFMFA@M@@@F@@@@@L@@@@@A@@@AA@@E@@@A@@AN@@@OJK@IFAFC
  1092. XGEGDFEB@FAFCFCFEFNGD@MGD@@@F@@@@@L@@@@@A@@@AA@DE@@@A@@AL@@@MJH@IGB
  1093. XFEFGFIGCGDFEGBFEFD@MFD@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@AH@@@IJ@@IFDFA
  1094. XFGFGFEGB@M@A@@@F@@@@@L@@@@@A@@@AA@BI@@@A@@AD@@@FKD@IGIFEFN@M@@@F@@
  1095. X@@@L@@@@@A@@@AA@@E@@@A@@AN@@A@JL@IFOFOFMFLFAGDB@FAFCFCFEFNGD@M@@@F
  1096. X@@@@@L@@@@@A@@@AA@@E@@@A@@AL@@@MEN@IFHFAGDB@FAFCFCFEFNGD@MO@@@@F@@
  1097. X@@@L@@@@@A@@@AA@OI@@@A@@B@@@ABKO@IGCFLFAGCFHFEFDB@FLFOGGFEGBB@FO@M
  1098. X@@@F@@@@@L@@@@@A@@@AA@ME@@@A@@AJ@@@KKI@IFLFOGGFEGBB@G@FI@MFI@@@F@@
  1099. X@@@L@@@@@A@@@AA@ME@@@A@@BB@@ADMB@IFBFAFCFKB@FDFOGEFBFLFEB@GAGEFOGD
  1100. XFE@M@@@F@@@@@L@@@@@A@@@AA@LI@@@A@@BB@@ADMD@IFBFAFCFKB@GCFIFNFGFLFE
  1101. XB@GAGEFOGDFE@M@@@F@@@@@L@@@@@A@@@AA@JE@@@A@@BL@@AMLG@IFOG@FEFNB@FD
  1102. XFOGEFBFLFEB@FAFNFGFLFEB@FBGBFAFCFKFEGDGC@MGC@@@F@@@@@L@@@@@A@@@AA@
  1103. XJE@@@A@@BD@@AFHL@IFLFOGGFEGBB@FAB@GGFIGDFHB@FCFIGBFCFLFE@M@@@F@@@@
  1104. X@L@@@@@A@@@AA@II@@@A@@BD@@AEJG@IFBFEGDFAB@BHFGFEGBFMFAFNB@BBGCGCBB
  1105. XBI@MBI@@@F@@@@@L@@@@@A@@@AA@GE@@@A@@BD@@AEKF@IG@FAGBGDFIFAFLB@FDFE
  1106. XGBFIGFFAGDFIGFFE@MH@@@@F@@@@@L@@@@@A@@@AA@GE@@@A@@B@@@AALD@IGCFCGB
  1107. XFIG@GDB@FLFOGGFEGBB@FF@MFF@@@F@@@@@L@@@@@A@@@AA@FI@@@A@@AJ@@@LJI@I
  1108. XFCFOG@GIGBFIFGFHGD@M@@@F@@@@@L@@@@@A@@@AA@DE@@@A@@BH@@AILF@IGDGBFI
  1109. XFAFNFGFLFEB@BHGEG@G@FEGBB@FDFEFLGDFABI@MBI@@@F@@@@@L@@@@@A@@@AA@DE
  1110. X@@@A@@AD@@@FOK@IFBFOGH@M@@@F@@@@@L@@@@@A@@@AA@CI@@@A@@AJ@@@KLB@IFN
  1111. XFEFGFAGDFIFOFN@MFN@@@F@@@@@L@@@@@A@@@AA@AE@@@A@@BB@@ACLI@IFEFLFIG@
  1112. XGCFEGCB@BHCCB@FDFOGDGCBI@M@@@@@F@@@@@L@@@@@A@@@AA@AE@@@A@@BB@@ADKN
  1113. X@IFLFOGGFEGBB@FAFEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@OA@@@A
  1114. X@@AL@@@NKM@IGEG@G@FEGBB@FOFMFEFGFA@M@@@F@@@@@L@@@@@A@@@AA@OA@@@A@@
  1115. XAH@@@ILE@IFAG@G@GBFOGH@MGH@@@F@@@@@L@@@@@A@@@AA@LM@@@A@@B@@@AAHM@I
  1116. XFCB@GGFIGDFHB@FCFEFDFIFLFLFA@M@@@@@F@@@@@L@@@@@A@@@AA@LM@@@A@@BJ@@
  1117. XALLC@IGCGAGEFAGBFEB@GBFOFOGDB@FOGBB@FCFHFEFCFKB@FMFAGBFK@M@@@F@@@@
  1118. X@L@@@@@A@@@AA@LM@@@A@@AN@@A@KJ@IFIFNGDFEFGGBFAFLB@GCFIFGFN@M@@@F@@
  1119. X@@@L@@@@@A@@@AA@JI@@@A@@BB@@ADGN@IFCFIGBFCGEFMFFFLFEGHB@FAFCFCFEFN
  1120. XGD@M@@@F@@@@@L@@@@@A@@@AA@JI@@@A@@AJ@@@KKE@IFLFOGGFEGBB@FMGE@M@@@@
  1121. X@F@@@@@L@@@@@A@@@AA@II@@@A@@AD@@@EKB@ICLCM@MCM@@@F@@@@@L@@@@@A@@@A
  1122. XA@HI@@@A@@AD@@@EKC@ICNCM@MCM@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@AH@@@IMF
  1123. X@IFDFIGFFIFDFE@MFE@@@F@@@@@L@@@@@A@@@AA@FE@@@A@@BJ@@AKJA@IFDFEFGGB
  1124. XFEFEGCB@BHGCFHFIFFGDB@FOG@GDFIFOFNB@CHBI@MBI@@@F@@@@@L@@@@@A@@@AA@
  1125. XEI@@@A@@BH@@AJMA@IFMB@FDFAGCFHB@BHGCFHFIFFGDB@FOG@GDFIFOFNB@BMBI@M
  1126. X@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@BL@@ANKA@IG@FLGEGCB@FMFIFNGEGCB@BHGC
  1127. XFHFIFFGDB@FOG@GDFIFOFNB@CMBI@M@@@F@@@@@L@@@@@A@@@AA@CE@@@A@@BB@@AD
  1128. XLN@IGEG@G@FEGBB@DODEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@BI@@
  1129. X@A@@AN@@A@JO@IGCFLFAGCFHB@GEG@G@FEGBB@DO@M@@@F@@@@@L@@@@@A@@@AA@@E
  1130. X@@@A@@AJ@@@KKH@IGEG@G@FEGBB@E@DI@MDI@@@F@@@@@L@@@@@A@@@AA@@E@@@A@@
  1131. XBD@@AEMC@IFCFLFOGCFEB@FDFOGEFBFLFEB@GAGEFOGDFE@MFE@@@F@@@@@L@@@@@A
  1132. X@@@AA@H@@@@A@@BD@@AEME@IFCFLFOGCFEB@GCFIFNFGFLFEB@GAGEFOGDFE@MFE@@
  1133. X@F@@@@@L@@@@@A@@@AA@G@@@@A@@BD@@AFLH@IFCFLFOGCFEB@FDFOGEFBFLFEB@FA
  1134. XFNFGFLFEGC@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@BD@@AFHA@IGEG@G@FEGBB@DA
  1135. XB@GGFIGDFHB@FCFIGBFCFLFE@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@BB@@ADJN@I
  1136. XGEG@G@FEGBB@DADEB@FLFIFGFAGDGEGBFE@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@
  1137. XBF@@AGHB@IGEG@G@FEGBB@DCB@GGFIGDFHB@FCFEFDFIFLFLFA@MFA@@@F@@@@@L@@
  1138. X@@@A@@@AA@G@@@@A@@AJ@@@KMG@IFDFIFAFMFOFNFDB@@MB@@@@F@@@@@L@@@@@A@@
  1139. X@AA@G@@@@A@@BB@@ADL@@IGEG@GCFIFDFEB@FDFOGGFNB@COB@BHCOBI@M@@@F@@@@
  1140. X@L@@@@@A@@@AA@G@@@@A@@AB@@@DBNEDDE@M@@@F@@@@@L@@@@@A@@@AA@G@@@@A@@
  1141. X@N@@@@@@@F@@@@@L@@@@@A@@@AA@G@@@@@@@BB@@@J@AN@@@@A@@@@@@@J@AFHAIEB
  1142. X@AL@@@@@@@@@@@HH@AEL@@@@LKOL@@@@LKID@@@@@@@A@@A@@@@A@M@A@@@F@@@@@L
  1143. X@@@@@A@@@AA@@@@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@@N@@@A@@A@@@@A
  1144. X@M@A@@@F@@@@@L@@@@@A@@@AA@@N@@@A@@@N@@@@@@@F@@@@@L@@@@@A@@@AA@@@@@
  1145. X@@@@BB@@@J@AN@@@@A@@@@@@@J@AFHAIEB@@@B@@OO@@@@@@@ADFHN@@@@LL@@@@@@
  1146. XLKIL@A@A@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@@@@@@A@@A@@@@A@M@A@@
  1147. X@F@@@@@L@@@@@A@@@AA@AH@@@A@@A@@@@A@M@A@@@F@@@@@L@@@@@A@@@AA@AJ@@@A
  1148. 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@
  1149. 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
  1150. X@@@@@L@@@@@A@@@AA@AB@@@A@@@N@@@@@@@F@@@@@L@@@@@A@@@AA@@@|@@@EILLG
  1151. EOF
  1152. echo -n '             ' ; ls -l write2troff.dl
  1153.