home *** CD-ROM | disk | FTP | other *** search
- #! /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
-