home *** CD-ROM | disk | FTP | other *** search
- Subject: v12i043: Hershey font manipulation tools and data, Part04/05
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rs@uunet.UU.NET
-
- Submitted-by: lee@uhccux.UUCP (Greg Lee)
- Posting-number: Volume 12, Issue 43
- Archive-name: hershtools/part04
-
- # This is a shell archive. Remove anything before this line
- # then unpack it by saving it in a file and typing "sh file"
- # (Files unpacked will be owned by you and have default permissions).
- # This archive contains the following files:
- # ./Makefile
- # ./README
- # ./eplot.c
- #
- if `test ! -s ./Makefile`
- then
- echo "writing ./Makefile"
- sed 's/^X//' > ./Makefile << '\Rogue\Monster\'
- X# Makefile 1.0 6/5/87
- X#
- X# make file for font programs
- X#
- X#
- X
- XCFLAGS= -O -s
- XOBJS= termio.o
- XSOURCES= termio.c eplot.c hplot.c
- X
- Xall: eplot hplot htrans
- X
- Xhtrans: htrans.c
- X ${CC} ${CFLAGS} -o htrans htrans.c
- X
- Xeplot: ${OBJS} eplot.o
- X ${CC} ${CFLAGS} -o eplot ${OBJS} eplot.o -ltermlib
- X
- Xhplot: ${OBJS} hplot.o
- X ${CC} ${CFLAGS} -o hplot ${OBJS} hplot.o -ltermlib
- X
- Xeplot.o: eplot.c
- X ${CC} ${CFLAGS} -c eplot.c
- X
- Xhplot.o: hplot.c vfont.c
- X ${CC} ${CFLAGS} -c hplot.c
- X
- X${OBJS}: termio.h
- X
- Xclean:
- X rm -f *.o
- X
- \Rogue\Monster\
- else
- echo "will not over write ./Makefile"
- fi
- if [ `wc -c ./Makefile | awk '{printf $1}'` -ne 492 ]
- then
- echo `wc -c ./Makefile | awk '{print "Got " $1 ", Expected " 492}'`
- fi
- if `test ! -s ./README`
- then
- echo "writing ./README"
- sed 's/^X//' > ./README << '\Rogue\Monster\'
- XHere are some programs for making use of the Hershey character data. Eplot
- Xand hplot allow the editing of vector fonts and the creation of other fonts
- Xfrom them -- vfont format raster fonts, PostScript analytic fonts -- as
- Xwell as tfm files for TeX. The file format for vector fonts is idiosyncratic,
- XI'm sorry to say. I have not had access to the Hershey data in the usual
- Xformats. I have included two sets of four files each containing the Hershey
- Xsimplex and triplex Roman characters in the format required for these
- Xprograms -- these are sr?.chr and tr?.chr, where the ? is c for capital
- Xletters, s for small letters, d for digits, or p for punctuation. Just
- Xin case anyone has the Hershey data in the compressed form I have it in
- X(similar the National Bureau of Standards form) I included the utility
- Xhtrans, which converts from the compressed form to my form. (By the way,
- XI would really like to have the Hershey data for oriental characters.)
- X
- XThese programs have compiled ok in the Ultrix 1.2 and Sun 3.0 versions of
- XBSD 4.2.
- X
- XParts of the source (termio.c, termio.h) were taken from the Xum package
- Xdistributed in net.sources by John Paul O'Brien, Nova University, Fort
- XLauderdale, Florida, {allegra, ucf-cs, usfvax2}!novavax!john, and (vfont.c) from
- Xthe Hfont package by William LeFebvre, Department of Computer Science,
- XRice University, <phil@Rice.edu>. These appear to be in the public domain.
- XI am grateful to the above for the use of their code, and I hereby place
- Xthe rest of the code and documents for these programs in the public domain.
- X
- XGreg Lee, Sept 12, 1987.
- XU.S.mail: 562 Moore Hall, Dept. of Linguistics, Univ. of Hawaii, HONO, HI 96822
- XINTERNET: lee@uhccux.uhcc.hawaii.edu
- XUUCP: {ihnp4,dcdwest,ucbvax}!sdcsvax!nosc!uhccux!lee
- XBITNET: lee%uhccux.uhcc.hawaii.edu@rutgers.edu
- \Rogue\Monster\
- else
- echo "will not over write ./README"
- fi
- if [ `wc -c ./README | awk '{printf $1}'` -ne 1811 ]
- then
- echo `wc -c ./README | awk '{print "Got " $1 ", Expected " 1811}'`
- fi
- if `test ! -s ./eplot.c`
- then
- echo "writing ./eplot.c"
- sed 's/^X//' > ./eplot.c << '\Rogue\Monster\'
- X
- X#include <stdio.h>
- X#define TRUE 1
- X#define FALSE 0
- X
- Xextern char *term_name;
- Xchar w300 = FALSE;
- X
- X#define STSIZE 32000
- X#define KEEPSIZE 80
- X
- X#define getnam(nm) cook_tty(tty_fid);scanf("%s",nm);uncook_tty(tty_fid);
- X
- Xint tty_fid;
- X
- Xchar penstate, debug, /*ibuf[BUFSIZ],*/ ins[90];
- XFILE *ibuf;
- Xint cnum;
- X
- Xint itempt, co1, co2, co3, lebear, ribear, x, y;
- Xint deltax, deltay, xinc, yinc;
- Xint lx,llx,ly,lly, cx,ccx,cy,ccy, x1,x2,y1,y2, a1,a2,d1,d2, i1,i2;
- Xint minx, miny, maxx, maxy, base, obase, xheight, ytop, ybot, serifs;
- Xint begy,begx;
- Xchar itemtype, letter, linelet, retrace, openflag, lighten, hairflag;
- X
- Xint xheavy, xlight, yheavy, ylight, penwidth, pxangle, pyangle,
- X squarepen, shading, xshade, yshade;
- X
- X
- X#define ESC 27
- X#define RIGHTCOL 79
- X#define LEFTCOL 0
- X#define BOTROW 23
- X
- X#define PRPTNL 2
- X
- X#define BLACK '1'
- X#define BLUE '2'
- X#define GREEN '3'
- X#define CYAN '4'
- X#define RED '5'
- X#define MAGENTA '6'
- X#define YELLOW '7'
- X#define WHITE '8'
- X
- X#define UPPRDOT ','
- X#define LOWRDOT '-'
- X#define BOTHDOT '7'
- X#define NODOT ' '
- Xchar upperdot=UPPRDOT, lowerdot=LOWRDOT, bothdot=BOTHDOT;
- X
- Xchar currlet, reallet;
- Xunsigned currlines[96];
- Xunsigned xpt, penplace,oldpplace, lastplace;
- X
- X
- Xchar cmd, currch, cch, cbyte, cbyteo, mxflag;
- Xint col, row, xpos, ypos, currlen;
- Xchar erow,ecol, pxc,pyc, penchar;
- X
- Xchar ckeep[6][KEEPSIZE], gxoff, gyoff, ib;
- X
- Xint i, fd;
- Xchar ftname[30];
- Xchar duplflag;
- X
- X/******************/
- X
- X
- X/* char obuf[BUFSIZ];*/
- XFILE *obuf;
- Xint cocnt;
- Xunsigned char sletter;
- Xunsigned svpt;
- X
- X/***************/
- X
- Xchar gr[100][100];
- X
- Xchar *_stsz;
- Xunsigned stsize, cindex[128], storept;
- Xunsigned char psxoff[128], pswidth[128];
- Xchar store[STSIZE];
- X
- X/*****************/
- X
- Xsavechr()
- X{ char fname[30];
- X
- X if (storept< 2) {printf("nothing to save\r\n"); return; }
- X
- X strcpy(fname,ftname);
- X strcat(fname,".chr");
- X if ((obuf = fopen(fname, "w")) == NULL) exit(1);
- X
- X fprintf(obuf, "Height(%d)\n", ytop);
- X if (xheight) fprintf(obuf, "x Height(%d)\n", xheight);
- X if (base) fprintf(obuf, "Base(%d)\n", base);
- X
- X
- X cocnt = 0;
- X
- X for (sletter = 0; sletter < 128 ; sletter++)
- X {
- X if (!(svpt = cindex[sletter])) continue;
- X /*if (kbhit()) return;*/
- X
- X if (sletter < ' ') fprintf(obuf, "^%c': ", sletter);
- X else fprintf(obuf, "'%c': ", sletter);
- X
- X while (!(dspc(store[svpt], store[svpt+1]))) svpt +=2;
- X
- X }
- X
- X fprintf(obuf, "\n");
- X fclose(obuf);
- X
- X}
- X
- Xdspc(b1, b2)
- Xchar b1, b2;
- X{
- X co1 = b1 - 64; co2 = b2 - 64;
- X
- X if (co1 == -64 && co2 == -64)
- X { fprintf(obuf," End Char\n");
- X cocnt = 0;
- X return(TRUE);
- X }
- X
- X
- X if (co1 == -64)
- X { if (!co2) fprintf(obuf," Pen Up\n ");
- X else if (b2 == 'H') fprintf(obuf,"\n Hair ");
- X cocnt = 0;
- X }
- X else
- X { if (cocnt >8) {cocnt = 0; fprintf(obuf,"\n ");}
- X
- X fprintf(obuf,"(%d,%d)", co1,co2);
- X cocnt++;
- X }
- X
- X return(FALSE);
- X}
- X
- X
- X
- Xsaveasm()
- X{ char fname[30];
- X
- X if (storept< 2) {printf("nothing to save\r\n"); return; }
- X
- X strcpy(fname,ftname);
- X strcat(fname,".a");
- X if ((obuf = fopen(fname, "w")) == NULL) exit(1);
- X
- X fprintf(obuf, "\n\tsection font,data\n");
- X fprintf(obuf, "\tdc.w %d,%d\n", ytop, base);
- X fprintf(obuf, "\txdef\t%s\n%s\n\n", ftname, ftname);
- X fprintf(obuf, "\tinclude\t\"chrdir\"\n\n");
- X fprintf(obuf, ".h20\n\tdc.b -6,6\n endchar\n");
- X
- X
- X
- X for (sletter = 33; sletter < 128 ; sletter++)
- X {
- X
- X if ( (sletter >= 'A' && sletter <= 'Z')
- X || (sletter >= 'a' && sletter <= 'z') )
- X fprintf(obuf, ".%c\n", sletter);
- X else if (sletter >= '0' && sletter <= '9')
- X fprintf(obuf, ".d%c\n", sletter);
- X else fprintf(obuf, ".h%02.2x\n", sletter);
- X
- X if (!(svpt = cindex[sletter]))
- X { fprintf(obuf, "\tdc.b 0,0\n endchar\n");
- X continue;
- X }
- X
- X
- X minx = 63; maxx = -63;
- X while ( (x=store[svpt]) + (y=store[svpt+1]) )
- X { svpt += 2;
- X if (!(x)) continue;
- X minx = min(minx, x-64);
- X maxx = max(maxx, x-64);
- X }
- X fprintf(obuf, "\tdc.b %d,%d\n", minx-lebear, maxx+ribear);
- X
- X svpt = cindex[sletter];
- X
- X while (!(dspca(store[svpt], store[svpt+1]))) svpt +=2;
- X
- X }
- X
- X fprintf(obuf, "\n\tend\n");
- X fclose(obuf);
- X
- X}
- X
- Xdspca(b1, b2)
- Xchar b1, b2;
- X{
- X co1 = b1 - 64; co2 = b2 - 64;
- X
- X if (co1 == -64 && co2 == -64)
- X { fprintf(obuf," endchar\n");
- X return(TRUE);
- X }
- X
- X
- X if (co1 == -64)
- X { if (!co2) fprintf(obuf," penup\n");
- X /* else if (b2 != 'H')
- X fprintf(obuf,"\tdc.b -%d,%d\n", co2,co2); */
- X }
- X else
- X {
- X fprintf(obuf,"\tdc.b %d,%d\n", co1,co2);
- X }
- X
- X return(FALSE);
- X}
- X
- X
- X
- Xsaveps()
- X{ char fname[30];
- X char *nameoflet();
- X int letcount;
- X int fbb[4];
- X
- X if (storept< 2) {printf("nothing to save\r\n"); return; }
- X
- X strcpy(fname,ftname);
- X strcat(fname,".ps");
- X if ((obuf = fopen(fname, "w")) == NULL) exit(1);
- X
- X fprintf(obuf, "10 dict dup begin\n");
- X fprintf(obuf, "/FontType 3 def\n");
- X fprintf(obuf, "/FontMatrix [.03 0 0 .03 0 0] def\n");
- X fprintf(obuf, "/Encoding 256 array def\n");
- X fprintf(obuf, "0 1 255 {Encoding exch/.notdef put} for\n");
- X fprintf(obuf, "Encoding\n");
- X for (sletter = 0; sletter < 128 ; sletter++)
- X { if (!(svpt = cindex[sletter])) continue;
- X fprintf(obuf, "dup %d /%s put\n", sletter, nameoflet(sletter));
- X }
- X fprintf(obuf, "pop\n");
- X
- X#define HLWIDTH 1
- X letcount = 0;
- X for (sletter = 0; sletter < 128 ; sletter++)
- X { if (!(svpt = cindex[sletter])) continue;
- X letcount++;
- X }
- X
- X fprintf(obuf, "/BBox %d dict def\nBBox begin\n", letcount+1);
- X fprintf(obuf, " /.notdef [0 0 0 0] def\n");
- X fbb[0] = fbb[1] = 63; fbb[2] = fbb[3] = -63;
- X for (sletter = 0; sletter < 128 ; sletter++)
- X { if (!(svpt = cindex[sletter])) continue;
- X co2 = minx = miny = 63; co3 = maxx = maxy = -63;
- X while ( (x=store[svpt]) + (y=store[svpt+1]) )
- X { svpt += 2;
- X if (!(co1=x)) continue;
- X if (i1 && i2) co1 += fadjust(-base+y-64,i1,i2)-50;
- X co2 = min(co2, co1-64);
- X minx = min(minx, x-64);
- X miny = min(miny, y-64);
- X co3 = max(co3, co1-64);
- X maxx = max(maxx, x-64);
- X maxy = max(maxy, y-64);
- X }
- X psxoff[sletter] = lebear - minx;
- X pswidth[sletter] = lebear + maxx - minx + 1 + ribear;
- X fprintf(obuf, " /%s [%d %d %d %d] def\n", nameoflet(sletter),
- X co2 + psxoff[sletter] - HLWIDTH,
- X -maxy + base - HLWIDTH,
- X co3 + psxoff[sletter] + HLWIDTH,
- X -miny + base + HLWIDTH);
- X fbb[0] = min(fbb[0], co2 + psxoff[sletter] - HLWIDTH);
- X fbb[1] = min(fbb[1], -maxy + base - HLWIDTH);
- X fbb[2] = max(fbb[2], co3 + psxoff[sletter] + HLWIDTH);
- X fbb[3] = max(fbb[3], -miny + base + HLWIDTH);
- X }
- X fprintf(obuf, "end\n");
- X fprintf(obuf, "/FontBBox [%d %d %d %d] def\n",fbb[0],fbb[1],
- X fbb[2],fbb[3]);
- X
- X fprintf(obuf, "/Metrics %d dict def\nMetrics begin\n", letcount+1);
- X fprintf(obuf, " /.notdef 0 def\n");
- X for (sletter = 0; sletter < 128 ; sletter++)
- X { if (!(svpt = cindex[sletter])) continue;
- X fprintf(obuf, " /%s %d def\n", nameoflet(sletter),
- X pswidth[sletter]);
- X }
- X fprintf(obuf, "end\n");
- X
- X
- X fprintf(obuf, "/CharacterDefs %d dict def\nCharacterDefs begin\n",
- X letcount+1);
- X fprintf(obuf, "/.notdef {} def\n");
- X cocnt = 0;
- X for (sletter = 0; sletter < 128 ; sletter++)
- X { if (!(svpt = cindex[sletter])) continue;
- X fprintf(obuf, "/%s\n { newpath\n ", nameoflet(sletter));
- X penstate = 0;
- X while (!(dsps(store[svpt], store[svpt+1]))) svpt +=2;
- X }
- X fprintf(obuf, "end\n");
- X
- X pbuildchar();
- X
- X fprintf(obuf, "/UniqueID %d def\n\nend\n", ftname[0]);
- X
- X fprintf(obuf, "/%s exch definefont pop\n", ftname);
- X
- X fclose(obuf);
- X
- X}
- X
- X
- Xdsps(b1, b2)
- Xchar b1, b2;
- X{
- X co1 = b1 - 64; co2 = b2 - 64;
- X
- X if (co1 == -64 && co2 == -64)
- X {
- X fprintf(obuf, " stroke } def\n");
- X cocnt = 0;
- X return(TRUE);
- X }
- X
- X
- X if (co1 == -64)
- X { if (!co2) penstate = 0;
- X /*else if (b2 == 'H') fprintf(obuf,"\n Hair ");*/
- X }
- X else
- X { if (cocnt >3) {cocnt = 0; fprintf(obuf,"\n ");}
- X
- X if (i1 && i2) co1 += fadjust(-base+co2,i1,i2) - 50;
- X
- X fprintf(obuf," %d %d ", co1+psxoff[sletter],base-co2);
- X if (penstate) fprintf(obuf,"lineto");
- X else fprintf(obuf,"moveto");
- X penstate = 1;
- X cocnt++;
- X }
- X
- X return(FALSE);
- X}
- X
- Xchar *nameoflet(c)
- Xchar c;
- X{ static char *npc[] = {
- X "A", "ctl@",
- X "esc", "fs", "gs", "rs", "us",
- X "space", "exclam", "quotedbl", "numbersign", "dollar",
- X "percent", "ampersand", "quoteright", "parenleft",
- X "parenright", "asterisk", "plus", "comma", "hyphen",
- X "period", "slash",
- X "zero", "one", "two", "three", "four", "five", "six", "seven",
- X "eight", "nine", "colon", "semicolon", "less", "equal",
- X "greater", "question", "at",
- X "bracketleft", "backslash", "bracketright", "asciicircum",
- X "underscore", "quoteleft",
- X "braceleft", "bar", "braceright", "asciitilde", "del"
- X };
- X
- X if (c < 0x1B) { npc[1][3] = c + 0x40; return(npc[1]); }
- X if (c < 'A') return(npc[c - 0x19]);
- X if (c <= 'Z') { npc[0][0] = c; return(npc[0]); }
- X if (c < 'a') { return(npc[c + 39 - 'Z']); }
- X if (c <= 'z') { npc[0][0] = c; return(npc[0]); }
- X return(npc[c + 45 - 'z']);
- X}
- X
- Xpbuildchar()
- X{
- X fprintf(obuf,"/BuildChar\n");
- X fprintf(obuf,"{ 0 begin\n");
- X fprintf(obuf," /char exch def\n /fontdict exch def\n");
- X fprintf(obuf," /charname fontdict /Encoding get char get def\n");
- X fprintf(obuf," fontdict begin\n");
- X fprintf(obuf," Metrics charname get 0\n");
- X fprintf(obuf," BBox charname get aload pop\n");
- X fprintf(obuf," setcachedevice\n");
- X fprintf(obuf," %1.1f setlinewidth\n", 2.0*HLWIDTH);
- X fprintf(obuf," CharacterDefs charname get exec\n");
- X fprintf(obuf," end\nend\n} def\n");
- X fprintf(obuf,"/BuildChar load 0 3 dict put\n");
- X}
- X
- X
- Xsavetfm()
- X{ char fname[30];
- X char *nameoflet();
- X
- X if (storept< 2) {printf("nothing to save\r\n"); return; }
- X
- X strcpy(fname,ftname);
- X strcat(fname,".pl");
- X if ((obuf = fopen(fname, "w")) == NULL) exit(1);
- X
- X fprintf(obuf, "\n");
- X
- X fprintf(obuf,"(DESIGNSIZE R 10.0)\n");
- X fprintf(obuf,"(COMMENT DESIGNSIZE IS IN POINTS)\n");
- X fprintf(obuf,"(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)\n");
- X fprintf(obuf,"(FONTDIMEN\n");
- X if (i1 && i2)
- X fprintf(obuf," (SLANT R %1.6f)\n", (float)-i1/i2);
- X fprintf(obuf," (SPACE R 0.357776)\n");
- X fprintf(obuf," (STRETCH R 0.153333)\n");
- X fprintf(obuf," (SHRINK R 0.1022215)\n");
- X if (xheight)
- X fprintf(obuf," (XHEIGHT R %1.6f)\n", (float)xheight/33.33);
- X else
- X fprintf(obuf," (XHEIGHT R 0.430555)\n");
- X fprintf(obuf," (QUAD R 1.022217)\n");
- X fprintf(obuf," (EXTRASPACE R 0.1022215)\n");
- X fprintf(obuf," )\n");
- X
- X for (sletter = 0; sletter < 128 ; sletter++)
- X { if (!(svpt = cindex[sletter])) continue;
- X fprintf(obuf,"(CHARACTER O %o\n", sletter);
- X minx = miny = 63; co2 = maxx = maxy = -63;
- X while ( (x=store[svpt]) + (y=store[svpt+1]) )
- X { svpt += 2;
- X if (!(co1=x)) continue;
- X if (i1 && i2) co1 += fadjust(-base+y-64,i1,i2)-50;
- X minx = min(minx, x-64);
- X miny = min(miny, y-64);
- X maxx = max(maxx, x-64);
- X maxy = max(maxy, y-64);
- X co2 = max(co2, co1-64);
- X }
- X if ((x = lebear + maxx - minx + 1 + ribear) > 0)
- X fprintf(obuf, " (CHARWD R %1.6f)\n", (float)x/33.33);
- X if ((x = -miny + base + 1 + HLWIDTH) > 0)
- X fprintf(obuf, " (CHARHT R %1.6f)\n", (float)x/33.33);
- X if ((x = maxy - base ) > 0)
- X fprintf(obuf, " (CHARDP R %1.6f)\n", (float)x/33.33);
- X if ((x = co2 - maxx ) > 0)
- X fprintf(obuf, " (CHARIC R %1.6f)\n", (float)x/33.33);
- X fprintf(obuf, " )\n");
- X }
- X
- X fclose(obuf);
- X
- X}
- X
- X/******************/
- X
- Xmain()
- X{ char sp;
- X char key(), conin();
- X/* stuff from xum */
- X
- X if (term_setup() != 0)
- X {
- X printf("Warning: This program needs to have the\n");
- X printf("TERM environment variable setup before\n");
- X printf("being run. Make sure this is done before\n");
- X printf("executing eplot again (set yourself up like\n");
- X printf("you were going to use vi).\n");
- X exit(1);
- X }
- X
- X printf("Terminal is a %s.\n", term_name);
- X if (!strcmp(term_name, "w300")) w300 = TRUE;
- X if (!w300)
- X { upperdot='^'; lowerdot='j'; bothdot='g';
- X }
- X
- X tty_fid = raw_tty("/dev/tty");
- X if (tty_fid == -1)
- X {
- X printf("Error opening terminal for raw i/o\n");
- X exit(1);
- X }
- X
- X
- X debug = 0;
- X
- X stsize = STSIZE;
- X
- X printf("\r\nEplot - (c) Greg Lee, Oct. 1984\r\n\n");
- X
- X base = 9;
- X ytop = 22;
- X lebear = ribear = 2;
- X strcpy(ftname,"Work");
- X letter = currch = duplflag = 0;
- X
- X storept = x1 = x2 = y1 = y2 = a2 = d2 = 1;
- X serifs = 2;
- X
- X begy = 50-12; begx = 50-39;
- X
- X do
- X { printf("\r\n");
- X if (currlet > ' ') printf("%c* ",currlet);
- X else printf("^%c* ",currlet+64);
- X cmd = key();
- X switch (cmd)
- X {
- X case 'e': edit(); break;
- X case 'c': printf("Create letter? : ");
- X /*scanf("%c",&letter);*/ letter = conin(); putchar(letter);
- X cindex[letter] = storept;
- X sto2(0,0);
- X break;
- X case 'r': rdchr(); break;
- X case 'z': /* setmem(cindex, 128*2+2+stsize, 0);*/
- X bzero(cindex, 128*sizeof(int));
- X bzero(store, STSIZE);
- X storept = 1;
- X printf("zapped");
- X break;
- X case 'p': plotlet(); break;
- X case 'v': showgr(); showbits(); break;
- X case 'b': gvar("Base",&base); break;
- X case 'h': gvar("Height",&ytop); break;
- X case 'd': gvar("Depth",&ybot); break;
- X case 'f': printf("FACTORS:\r\n");
- X gvar("X1",&x1);
- X gvar("X2",&x2);
- X gvar("Y1",&y1);
- X gvar("Y2",&y2);
- X break;
- X case 't': duplflag = !duplflag;
- X chkdupl();
- X if (!duplflag) printf("not "); printf("tall");
- X break;
- X case 'L': printf("LINE STYLE:\r\n");
- X gvar("X Heavy",&xheavy);
- X gvar("X Light",&xlight);
- X gvar("Y Heavy",&yheavy);
- X gvar("Y Light",&ylight);
- X break;
- X case 'I': printf("ITALIC:\r\n");
- X gvar("I1",&i1);
- X gvar("I2",&i2);
- X break;
- X case 'B': printf("BEARINGS:\r\n");
- X gvar("Left",&lebear);
- X gvar("Right",&ribear);
- X break;
- X case 'S': gvar("serifs",&serifs);
- X break;
- X case 'n': printf(".chr name(%s) = ",ftname);
- X getnam(ftname);
- X /*strcat(ftname,".chr");*/
- X break;
- X case 's': savechr(); break;
- X case 'a': saveasm(); break;
- X case 'P': saveps(); break;
- X case 'T': savetfm(); break;
- X case '?': cmdinfo();
- X printf("\r\nstore room %d",
- X stsize-storept);
- X break;
- X case '\\': printf("debug");
- X if (debug) printf(" off");
- X debug = !debug;
- X case 'q':
- X case 'x': break;
- X default: conout('?'); printf("%c cmd %d?",cmd,cmd); break;
- X }
- X }
- X while (cmd != 'x' && cmd != 'q');
- X
- X reset_tty(tty_fid);
- X
- X}
- X
- Xcmdinfo()
- X{
- X printf("\r\nRead Plot Name .chr mag.Factors\r\n");
- X printf("Zap Edit Save .chr ^Line style\r\n");
- X printf("Base Vdisplay ^Serifs ^Ps file\r\n");
- X printf("Height eXit/Quit Tall ^Tfm file\r\n");
- X printf("Depth ^Italic ^Bearings Asm file\r\n");
- X}
- X
- X
- Xgvar(s,v)
- Xchar *s; int *v;
- X{ char is[80];
- X
- X printf(s);
- X printf("(%d) = ", *v);
- X cook_tty(tty_fid);
- X gets(is);
- X if (is[0] >= '0' && is[0] <= '9') sscanf(is,"%d",v);
- X uncook_tty(tty_fid);
- X}
- X
- Xplotlet()
- X{
- X printf("Plot a letter? : ");
- X /*scanf("%c", &letter);*/
- X letter = 0x7f & getchar(); putchar(letter);
- X currlet = letter;
- X lplot(letter);
- X}
- X
- X
- Xedit()
- X{ /*if (!currlet) plotlet();
- X else*/ lplot(currlet);
- X
- X penplace = 0;
- X
- X edscr();
- X
- X gxy(0,22);
- X}
- X
- Xdispline(row)
- Xchar row;
- X{
- X y = begy + row;
- X
- X for (x = begx; x <= begx+79; x++)
- X if (gr[x][y])
- X { at(x,y);
- X gxy(ecol, erow);
- X putchar(gr[x][y]);
- X }
- X}
- X
- X
- Xat(x,y)
- Xint x,y;
- X{ x -= begx; y -= begy;
- X if (x >= 0 && x <= 79 && y >= 0 && y <= 23)
- X { ecol = x; erow = y; return(TRUE); }
- X return(FALSE);
- X
- X}
- X
- Xrdchr()
- X{ char fname[20];
- X
- X
- X printf(".chr file? : ");
- X getnam(fname);
- X if (!fname[0]) return;
- X strcat(fname, ".chr");
- X if ((ibuf = fopen(fname, "r")) == NULL) return;
- X
- X while (fgets(ins, 90, ibuf))
- X { itempt = 0;
- X while (itemtype = scnitem())
- X switch(itemtype)
- X {
- X case 1: if (debug) printf("\r\nCnum %d: ", cnum);
- X letter = 0;
- X break;
- X case 2: if (debug) printf("\r\nChar '%c': ", letter);
- X cindex[letter] = storept;
- X break;
- X case 3: if (debug) printf("(%d,%d)", co1, co2);
- X
- X if (i1 && i2) co1 += fadjust(co2,i1,i2)-50;
- X
- X co1 = fadjust(co1,x1,x2) - 50;
- X co2 = fadjust(co2,y1,y2) - 50;
- X sto2(co1 + 64, co2 + 64);
- X break;
- X case 4: if (debug) printf(" Pen Up\r\n ");
- X sto2(0, 64);
- X break;
- X case 5: if (debug) printf(" End Char");
- X sto2(0, 0);
- X break;
- X case 6: if (debug) printf(" Hair");
- X sto2(0, 'H');
- X break;
- X case 65:/* if (debug) printf(" Bounds (-%d,%d)", co1, co2);
- X co2 = fadjust(co2,x1,x2) - 50;
- X sto2(0, co2 + 64);
- X break; */
- X case 66:if (debug) printf("(ignored)");
- X break;
- X }
- X }
- X
- X
- X fclose(ibuf);
- X
- X printf("\r\nUsed %u of buffer (%d remaining).", storept,stsize-storept);
- X}
- X
- Xsto2(x,y)
- Xchar x, y;
- X{
- X if (letter < 0 || letter > 127) return;
- X if (storept > stsize - 2) return;
- X
- X store[storept++] = x;
- X store[storept++] = y;
- X
- X}
- X
- Xscnitem()
- X{ char dc;
- X
- X while (ins[itempt] == ' ' || ins[itempt] == '\t') itempt++;
- X
- X if (!ins[itempt]) return(0);
- X if (ins[itempt] == '\n') return(0);
- X
- X if (sscanf(ins + itempt, "%d:", &cnum))
- X { match(':'); return(1); }
- X
- X if (sscanf(ins + itempt, "'%c':", &letter))
- X { match(':'); return(2); }
- X
- X if (sscanf(ins + itempt, "^%c':", &letter))
- X { match(':'); letter &= 0x1F; return(2); }
- X
- X if (sscanf(ins + itempt, "Bounds(%d,%d)", &co1, &co2))
- X { match(')'); return(65); }
- X
- X if (sscanf(ins + itempt, "s(%d,%d)", &co1, &co2))
- X { match(')'); if (serifs) return(3); return(66); }
- X
- X if (sscanf(ins + itempt, "S(%d,%d)", &co1, &co2))
- X { match(')'); if (serifs>1) return(3); return(66); }
- X
- X if (sscanf(ins + itempt, "(%d,%d)", &co1, &co2))
- X { match(')'); return(3); }
- X
- X if (sscanf(ins + itempt, "Pen Up%c", &dc))
- X { match('p'); return(4); }
- X
- X if (sscanf(ins + itempt, "End Char%c", &dc))
- X { match('r'); return(5); }
- X
- X if (sscanf(ins + itempt, "Hair%c", &dc))
- X { match('r'); return(6); }
- X
- X if (sscanf(ins + itempt, "Base(%d)", &base))
- X { match(')'); obase = base; return(66); }
- X
- X if (sscanf(ins + itempt, "x Height(%d)", &xheight))
- X { match(')'); return(66); }
- X
- X if (sscanf(ins + itempt, "Height(%d)", &ytop))
- X { match(')'); return(66); }
- X
- X if (sscanf(ins + itempt, "Depth(%d)", &ybot))
- X { match(')'); return(66); }
- X
- X return(0);
- X
- X}
- X
- Xmatch(c)
- Xchar c;
- X{ while (ins[itempt++] != c);
- X}
- X
- Xlplot(let)
- Xchar let;
- X{ char c1, c2, penstate;
- X
- X currch = let;
- X chkdupl();
- X
- X /*if (let <= 1 || let > 127) return;*/
- X if (let < 0 || let > 127) return;
- X
- X if (!(xpt = cindex[let])) return;
- X /*if (kbhit()) return;*/
- X
- X cleargr();
- X
- X for (penstate = 0 ; (c1 = store[xpt++])
- X + (c2 = store[xpt++]) ; )
- X if (!c1)
- X { penstate = 0;
- X if (c2 == 'H') hairflag = TRUE;
- X }
- X
- X else
- X { lx = cx; ly = cy;
- X cx = c1 - 64; cy = c2 - 64;
- X
- X if (penstate) drawline();
- X
- X penstate = 1;
- X
- X }
- X
- X lastplace = xpt - 2;
- X
- X
- X/* showgr(); */
- X
- X}
- X
- Xgoline(here)
- Xunsigned here;
- X{ char c1, c2;
- X
- X if (!here) return(0);
- X
- X c1 = store[here];
- X c2 = store[here + 1];
- X if (!c1) return(0);
- X
- X penplace = here;
- X
- X
- X if (at(fadjust(c1-64,x1,x2), fadjust(c2-64,y1,y2)))
- X { xpos = c1-64;
- X ypos = c2-64;
- X return(TRUE);
- X }
- X return(0);
- X}
- X
- Xchangeit()
- X{
- X if (!penplace) return;
- X
- X if (!store[penplace]) return;
- X
- X store[penplace] = xpos + 64;
- X store[penplace+1] = ypos + 64;
- X}
- X
- Xdelline()
- X{ if (!penplace) return;
- X if (!store[penplace-2] || !store[penplace+2]) delpoint();
- X else
- X { store[penplace] = 0;
- X store[penplace+1] = 64;
- X penplace = 0;
- X penchar = 0;
- X }
- X}
- X
- X
- Xdelpoint()
- X{
- X if (!penplace || !store[penplace]) return;
- X
- X/* movmem(store+penplace+2, store+penplace, storept-penplace-2);*/
- X bcopy(store+penplace+2, store+penplace, storept-penplace-2);
- X storept -= 2;
- X
- X for (letter = 0; letter < 128; letter++)
- X if (cindex[letter] > penplace)
- X cindex[letter] -= 2;
- X
- X lastplace -= 2;
- X}
- X
- Xmakeroom(r)
- Xint r;
- X{
- X bcopy(store+penplace, store+penplace+r, storept-penplace);
- X storept += r;
- X
- X for (letter = 0; letter < 128; letter++)
- X if (cindex[letter] > penplace)
- X cindex[letter] += r;
- X lastplace += r;
- X}
- X
- Xnewpoint()
- X{ char puflag;
- X
- X
- X if (!penplace)
- X {
- X penplace = lastplace;
- X makeroom(6);
- X
- X store[penplace] = 0;
- X store[penplace+1] = 64;
- X store[penplace+2] = xpos + 64;
- X store[penplace+3] = ypos + 64;
- X store[penplace+4] = xpos + 64;
- X store[penplace+5] = ypos + 64;
- X
- X penplace += 4;
- X }
- X else
- X {
- X if (store[penplace]) penplace += 2;
- X makeroom(2);
- X store[penplace] = xpos + 64;
- X store[penplace+1] = ypos + 64;
- X
- X }
- X}
- X
- X
- Xmakehair()
- X{ char prev;
- X
- X
- X if (!penplace || !store[penplace] || !store[penplace+2]) return;
- X
- X if (store[penplace-2]) prev = 2; else prev = 0;
- X
- X penplace += prev;
- X makeroom(prev + 2);
- X
- X store[penplace] = 0;
- X store[penplace+1] = 'H';
- X
- X if (prev)
- X { store[penplace+2] = store[penplace-2];
- X store[penplace+3] = store[penplace-1];
- X }
- X
- X penplace += 2;
- X}
- X
- Xxcontract()
- X{ unsigned pt;
- X char key();
- X
- X key();
- X
- X for (pt = currlines['1'-' ']; store[pt] || store[pt+1]; pt += 2)
- X if (store[pt])
- X switch (reallet)
- X {
- X case 'r': if (store[pt] > xpos + 64) store[pt]--;
- X break;
- X case 'R': if (store[pt] > xpos + 64) store[pt]++;
- X break;
- X case 'l': if (store[pt] < xpos + 64) store[pt]++;
- X break;
- X case 'L': if (store[pt] < xpos + 64) store[pt]--;
- X break;
- X case 'u': if (store[pt+1] < ypos + 64) store[pt+1]++;
- X break;
- X case 'U': if (store[pt+1] < ypos + 64) store[pt+1]--;
- X break;
- X case 'd': if (store[pt+1] > ypos + 64) store[pt+1]--;
- X break;
- X case 'D': if (store[pt+1] > ypos + 64) store[pt+1]++;
- X break;
- X default: break;
- X }
- X}
- X
- X
- Xsetpos()
- X{
- X return(at(fadjust(xpos,x1,x2), fadjust(ypos,y1,y2)));
- X}
- X
- X
- Xcleargr()
- X{
- X clrscrn();
- X bzero(gr, 100 * 100);
- X bzero(currlines, 96*2);
- X linelet = '0';
- X penwidth = abs(penwidth);
- X}
- X
- X
- Xdrawline()
- X{
- X if (debug) printf("\r\nDrawing from (%d,%d) to (%d,%d).", lx,ly,cx,cy);
- X
- X linelet++;
- X if (linelet > '9' && linelet < 'A') linelet = 'A';
- X else if (linelet > 'Z' && linelet < 'a') linelet = 'a';
- X else if (linelet > 'z') linelet = '!'+1;
- X
- X currlines[linelet-' '] = xpt-4;
- X
- X
- X if (abs(cy) <= abs(ly))
- X { llx = lx;
- X lly = ly;
- X ccx = cx;
- X ccy = cy;
- X }
- X else
- X { llx = cx;
- X lly = cy;
- X ccx = lx;
- X ccy = ly;
- X }
- X
- X
- X x = fadjust(llx,x1,x2);
- X ccx = fadjust(ccx,x1,x2);
- X deltax = abs(ccx - x);
- X if (ccx >= x) xinc = 1; else xinc = -1;
- X
- X y = fadjust(lly,y1,y2);
- X ccy = fadjust(ccy,y1,y2);
- X deltay = abs(ccy - y);
- X if (ccy >= y) yinc = 1; else yinc = -1;
- X
- X drawdot();
- X
- X if (deltax >= deltay) doforx();
- X else dofory();
- X
- X hairflag = 0;
- X}
- X
- Xfadjust(u,f1,f2)
- Xint u,f1,f2;
- X{
- X return( (u * f1 + f2-1)/f2 + 50);
- X}
- X
- X
- X
- Xdrawdot()
- X{
- X if (x<0 || x>99 || y<0 || y>99) return;
- X if (gr[x][y]) return;
- X gr[x][y] = linelet;
- X if (at(x,y))
- X { gxy(ecol,erow);
- X putchar(linelet);
- X }
- X}
- X
- X
- X
- Xdoforx()
- X{ int err, i;
- X
- X err = deltax / 2;
- X i = deltax;
- X
- X while (i--)
- X { err += deltay;
- X if (err >= deltax)
- X { err -= deltax;
- X y += yinc;
- X if (xheavy) drawdot();
- X if (xlight) {x += xinc; continue;}
- X }
- X x += xinc;
- X if (hairflag && (i&1)) continue;
- X drawdot();
- X if (debug) printf("\r\n @(%d,%d) [%d,%d]", x-50, y-50, x,y);
- X }
- X
- X}
- X
- Xdofory()
- X{ int err, i;
- X
- X gr[x][y] = linelet;
- X
- X err = deltay / 2;
- X i = deltay;
- X
- X while (i--)
- X { err += deltax;
- X if (err >= deltay)
- X { err -= deltay;
- X x += xinc;
- X if (yheavy) drawdot();
- X if (ylight) { y+= yinc; continue; }
- X }
- X y += yinc;
- X if (hairflag && (i&1)) continue;
- X drawdot();
- X if (debug) printf("\r\n @(%d,%d) [%d,%d]", x-50, y-50, x,y);
- X }
- X
- X}
- X
- Xshowgr()
- X{ int x, y;
- X
- X minx = miny = 99;
- X maxx = maxy = 0;
- X
- X for (y = 0; y < 100; y++)
- X { for (x = 0; x < 100; x++)
- X if (gr[x][y])
- X { if (x < minx) minx = x;
- X if (y < miny) miny = y;
- X if (x > maxx) maxx = x;
- X if (y > maxy) maxy = y;
- X }
- X }
- X
- X if (maxx - minx > KEEPSIZE-1) maxx = minx + KEEPSIZE-1;
- X rdedf();
- X}
- X
- X
- X
- X
- Xchar conin()
- X{ return (0x7f & getchar());
- X}
- X
- Xconout(c)
- Xchar c;
- X{ putchar(c);
- X}
- X
- X
- X
- Xchar key()
- X{ char c;
- X
- X reallet = c = 0x7f & getchar();
- X if (c < ' ') c += '@';
- X else if (c >='A' && c <= 'Z')
- X c += ' ';
- X if (c == 'J') return(key());
- X return(c);
- X}
- X
- X
- Xdtrans(c, upper)
- Xchar c, upper;
- X{ if (c == 0x20 || c == 0x5F) return(c);
- X
- X if (c >= 0x60) c -= 0x20;
- X else if (c < 0x20) c += 0x20;
- X
- X if (upper) return(c);
- X
- X if (c < 0x40) c -= 0x20;
- X else c += 0x20;
- X
- X return(c);
- X}
- X
- Xchkdupl()
- X{
- X/* duplflag = fix[0] & PRPTNL; */
- X if (duplflag) currch = dtrans(currch, TRUE);
- X}
- X
- Xrdedf()
- X{ char c;
- X int lbear, rbear;
- X int i, y, lasty, dcurrlen;
- X
- X if (duplflag) currch = dtrans(currch, TRUE);
- X
- X lbear = rbear = 0;
- X
- X bzero(ckeep, 6*KEEPSIZE);
- X row = currlen = 0; dcurrlen = 10000;
- X
- X y = base + 51 - ytop;
- X lasty = y + (duplflag ? 47 : 23);
- X if (lasty >= 100) lasty = 99;
- X
- X for ( ; y <= lasty; row++,y++)
- X {
- X for (i = minx, col = lbear; i <= maxx; col++,i++)
- X if (gr[i][y]) chngbit(TRUE);
- X
- X if (currlen < col + rbear)
- X currlen = col + rbear;
- X }
- X}
- X
- Xchngbit(biton)
- Xchar biton;
- X{ if (duplflag && row > 23) cchngbit(3, row - 24, biton);
- X else cchngbit(0, row, biton);
- X}
- X
- Xcchngbit(ib, row, biton)
- Xchar ib, row;
- Xchar biton;
- X{ unsigned char bit, mask;
- X
- X bit = row / 3;
- X mask = 128 >> bit;
- X cbyte = ckeep[ib + (row % 3)][col];
- X if (biton) cbyte |= mask;
- X else cbyte &= ~mask;
- X ckeep[ib + (row % 3)][col] = cbyte;
- X}
- X
- Xgxy(x,y)
- Xchar x,y;
- X{ if (w300)
- X { conout(ESC); conout('=');
- X conout(y+' '); conout(x+' ');
- X } else mov_cur(x,y);
- X}
- X
- Xclrscrn()
- X{
- X if (w300) conout(0x1A); else cls();
- X penchar = 0;
- X sleep(1);
- X}
- X
- Xshowbits()
- X{
- X clrscrn();
- X graph(TRUE);
- X gxoff = 4;
- X
- X if (duplflag) gyoff = 0; else gyoff = 6;
- X sshowbits(0);
- X if (duplflag)
- X { gyoff = 12;
- X sshowbits(3);
- X gyoff = 0;
- X }
- X graph(FALSE);
- X gxy(0,22);
- X}
- X
- Xsshowbits(ib)
- Xchar ib;
- X{ unsigned char i, j, bit, mask, r;
- X
- X if (currlen > 0)
- X {
- X color(RED,WHITE);
- X if (gyoff == 6)
- X { gxy(gxoff-1,gyoff-1);
- X conout(w300 ? '2':'+');
- X for (i = 0; i < currlen; i++)
- X conout(w300 ? ':':'-');
- X conout(w300 ? '3':'+');
- X }
- X for (i = gyoff; i < (gyoff+12); i++)
- X {
- X gxy(gxoff-1,i); conout(w300 ? '6':'|');
- X gxy(currlen+gxoff,i); conout(w300 ? '6':'|');
- X }
- X if (gyoff == 6)
- X { gxy(gxoff-1,gyoff+12);
- X conout(w300 ? '1':'+');
- X for (i = 0; i < currlen; i++)
- X conout(w300 ? ':':'-');
- X conout(w300 ? '5':'+');
- X }
- X color(BLACK,WHITE);
- X }
- X
- X for (i = 0; i < 3; i++)
- X for (j = 0; j < currlen; j++)
- X { cbyte = ckeep[ib+i][j];
- X cbyteo = ckeep[ib + ((i+1) % 3)][j];
- X mask = 0x80;
- X for (bit = 0; bit < 8; bit++, mask >>= 1)
- X if (
- X /* if row is even */
- X !((r = i + bit*3) & 1)
- X /* and there is a dot in this row or the next */
- X && ((mask & cbyte) | ((i==2 ? mask>>1: mask) & cbyteo))
- X )
- X { gxy(j+gxoff, r/2+gyoff);
- X /* both dots? */
- X if ((mask & cbyte)&& ((i==2 ? mask>>1: mask) & cbyteo))
- X conout(bothdot);
- X /* dot in this row only? */
- X else if (mask & cbyte)
- X conout(upperdot);
- X else conout(lowerdot); /* must be dot in next row */
- X }
- X }
- X}
- X
- X
- Xgraph(yes)
- Xchar yes;
- X{ if (!w300) return;
- X
- X conout(ESC); conout('H');
- X if (yes) conout(2); else conout(3);
- X conout(ESC); conout('`'); /* cursor off/on */
- X if (yes) conout('0'); else conout('1');
- X if (!yes) color(BLACK, WHITE);
- X}
- X
- Xcolor(fc, bc)
- Xchar fc, bc;
- X{ if (!w300) return;
- X
- X conout(ESC); conout('g');
- X conout(fc); conout(bc);
- X}
- X
- Xcheckpoint()
- X{ int sx, sy;
- X
- X if (!penplace) return;
- X sx = xpos; sy = ypos;
- X if (!goline(penplace)) return;
- X penchar = gr[begx+(pxc=ecol)][begy+(pyc=erow)];
- X xpos = sx; ypos = sy;
- X gxy(pxc,pyc);
- X conout(penchar);
- X}
- X
- X
- Xedscr()
- X{ char key();
- X
- X oldpplace = 0;
- X xpos = 0; ypos = 1;
- X cmd = 'E';
- X while (cmd != 'M')
- X { if (cmd >= 'A' && cmd <= 'Z')
- X switch (cmd)
- X {
- X case 'S': xpos--; break;
- X case 'D': xpos++; break;
- X case 'E': ypos--; break;
- X case 'X': ypos++; break;
- X case 'R': ypos -= 8; break;
- X case 'C': ypos += 8; break;
- X case 'A': xpos -= 8; break;
- X case 'F': xpos += 8; break;
- X case 'L': key(); currlet = reallet; penplace = 0;
- X case 'N': lplot(currlet); break;
- X case 'W': begy--;
- X gxy(0,0); printf(" ");
- X conout(ESC); conout('E');
- X displine(0);
- X break;
- X case 'Z': begy++;
- X gxy(0,0); conout(ESC); conout('R');
- X displine(23);
- X break;
- X case 'B': if (penplace) goline(penplace-2); break;
- X case 'P': changeit();
- X lplot(currlet); break;
- X case 'I': newpoint();
- X lplot(currlet); break;
- X case 'U': penplace = 0; break;
- X case 'G': delpoint();
- X lplot(currlet); break;
- X case 'Y': delline();
- X lplot(currlet); break;
- X case 'T': xcontract();
- X lplot(currlet); break;
- X case 'Q': begy = 50-12; begx = 50-39;
- X lplot(currlet); break;
- X case 'H': makehair();
- X lplot(currlet); break;
- X default: conout(7);
- X }
- X else switch(cmd)
- X {
- X case ' ': if (penplace) goline(penplace+2); break;
- X default: goline(currlines[reallet-' ']);
- X }
- X
- X if (penplace != oldpplace && penchar)
- X { gxy(pxc,pyc);
- X conout(penchar);
- X penchar = pxc = pyc = 0;
- X }
- X
- X if (penplace)
- X {
- X color(WHITE,BLUE);
- X checkpoint();
- X }
- X else color(RED,YELLOW);
- X gxy(0,0);
- X printf(" (%3d,%3d) ", xpos, ypos);
- X color(BLACK,WHITE);
- X oldpplace = penplace;
- X
- X if (!setpos()) { xpos = 0; ypos = 0; setpos(); }
- X
- X gxy(ecol, erow);
- X
- X cmd = key();
- X }
- X}
- X
- X
- X
- Xmax(x,y)
- Xint x,y;
- X{ if (x >= y) return(x);
- X return(y);
- X}
- X
- Xmin(x,y)
- Xint x,y;
- X{ if (x >= y) return(y);
- X return(x);
- X}
- X
- \Rogue\Monster\
- else
- echo "will not over write ./eplot.c"
- fi
- if [ `wc -c ./eplot.c | awk '{printf $1}'` -ne 28121 ]
- then
- echo `wc -c ./eplot.c | awk '{print "Got " $1 ", Expected " 28121}'`
- fi
- echo "Finished archive 4 of 4"
- # if you want to concatenate archives, remove anything after this line
- exit
-
-