Path: seismo!harvard!talcott!panda!sources-request From: sources-request@panda.UUCP Newsgroups: mod.sources Subject: Hershey Fonts, Part 1 of 5 Message-ID: <1569@panda.UUCP> Date: 1 Apr 86 04:09:08 GMT Sender: jpn@panda.UUCP Lines: 1161 Approved: jpn@panda.UUCP Mod.sources: Volume 4, Issue 42 Submitted by: pyramid!octopus!pete (Pete Holzmann) This is part 1 of five parts of the first Usenet distribution of the Hershey Fonts. See the README file for more details. Peter Holzmann, Octopus Enterprises USPS: 19611 La Mar Court, Cupertino, CA 95014 UUCP: {hplabs!hpdsd,pyramid}!octopus!pete Phone: 408/996-7746 #!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # README # hershey.doc # hershey.f77 # hershey.c # cyrilc.hmp # gothgbt.hmp # gothgrt.hmp # gothitt.hmp # greekc.hmp # greekcs.hmp # greekp.hmp # greeks.hmp # italicc.hmp # italiccs.hmp # italict.hmp # romanc.hmp # romancs.hmp # romand.hmp # romanp.hmp # romans.hmp # romant.hmp # scriptc.hmp # scripts.hmp # This archive created: Thu Mar 27 17:50:24 1986 export PATH; PATH=/bin:$PATH if test -f 'README' then echo shar: over-writing existing file "'README'" fi cat << \SHAR_EOF > 'README' This distribution is made possible through the collective encouragement of the Usenet Font Consortium, a mailing list that sprang to life to get this accomplished and that will now most likely disappear into the mists of time... Thanks are especially due to Jim Hurt, who provided the packed font data for the distribution, along with a lot of other help. This file describes the Hershey Fonts in general, along with a description of the other files in this distribution and a simple re-distribution restriction. USE RESTRICTION: This distribution of the Hershey Fonts may be used by anyone for any purpose, commercial or otherwise, providing that: 1. The following acknowledgements must be distributed with the font data: - The Hershey Fonts were originally created by Dr. A. V. Hershey while working at the U. S. National Bureau of Standards. - The format of the Font data in this distribution was originally created by James Hurt Cognition, Inc. 900 Technology Park Drive Billerica, MA 01821 (mit-eddie!ci-dandelion!hurt) 2. The font data in this distribution may be converted into any other format *EXCEPT* the format distributed by the U.S. NTIS (which organization holds the rights to the distribution and use of the font data in that particular format). Not that anybody would really *want* to use their format... each point is described in eight bytes as "xxx yyy:", where xxx and yyy are the coordinate values as ASCII numbers. *PLEASE* be reassured: The legal implications of NTIS' attempt to control a particular form of the Hershey Fonts *are* troubling. HOWEVER: We have been endlessly and repeatedly assured by NTIS that they do not care what we do with our version of the font data, they do not want to know about it, they understand that we are distributing this information all over the world, etc etc etc... but because it isn't in their *exact* distribution format, they just don't care!!! So go ahead and use the data with a clear conscience! (If you feel bad about it, take a smaller deduction for something on your taxes next week...) The Hershey Fonts: - are a set of more than 2000 glyph (symbol) descriptions in vector ( point-to-point ) format - can be grouped as almost 20 'occidental' (english, greek, cyrillic) fonts, 3 or more 'oriental' (Kanji, Hiragana, and Katakana) fonts, and a few hundred miscellaneous symbols (mathematical, musical, cartographic, etc etc) - are suitable for typographic quality output on a vector device (such as a plotter) when used at an appropriate scale. - were digitized by Dr. A. V. Hershey while working for the U.S. Government National Bureau of Standards (NBS). - are in the public domain, with a few caveats: - They are available from NTIS (National Technical Info. Service) in a computer-readable from which is *not* in the public domain. This format is described in a hardcopy publication "Tables of Coordinates for Hershey's Repertory of Occidental Type Fonts and Graphic Symbols" available from NTIS for less than $20 US (phone number +1 703 487 4763). - NTIS does not care about and doesn't want to know about what happens to Hershey Font data that is not distributed in their exact format. - This distribution is not in the NTIS format, and thus is only subject to the simple restriction described at the top of this file. Hard Copy samples of the Hershey Fonts are best obtained by purchasing the book described above from NTIS. It contains a sample of all of the Occidental symbols (but none of the Oriental symbols). This distribution: - contains * a complete copy of the Font data using the original glyph-numbering sequence * a set of translation tables that could be used to generate ASCII-sequence fonts in various typestyles * a couple of sample programs in C and Fortran that are capable of parsing the font data and displaying it on a graphic device (we recommend that if you wish to write programs using the fonts, you should hack up one of these until it works on your system) - consists of the following files... hershey.doc - details of the font data format, typestyles and symbols included, etc. hersh.oc[1-4] - The Occidental font data (these files can be catenated into one large database) hersh.or[1-4] - The Oriental font data (likewise here) *.hmp - Occidental font map files. Each file is a translation table from Hershey glyph numbers to ASCII sequence for a particular typestyle. hershey.f77 - A fortran program that reads and displays all of the glyphs in a Hershey font file. hershey.c - The same, in C, using GKS, for MS-DOS and the PC-Color Graphics Adaptor. Additional Work To Be Done (volunteers welcome!): - Integrate this complete set of data with the hershey font typesetting program recently distributed to mod.sources - Come up with an integrated data structure and supporting routines that make use of the ASCII translation tables - Digitize additional characters for the few places where non-ideal symbol substitutions were made in the ASCII translation tables. - Make a version of the demo program (hershey.c or hershey.f77) that uses the standard Un*x plot routines. - Write a banner-style program using Hershey Fonts for input and non-graphic terminals or printers for output. - Anything else you'd like! SHAR_EOF if test -f 'hershey.doc' then echo shar: over-writing existing file "'hershey.doc'" fi cat << \SHAR_EOF > 'hershey.doc' This file provides a brief description of the contents of the Occidental Hershey Font Files. For a complete listing of the fonts in hard copy, order NBS Special Publication 424, "A contribution to computer typesetting techniques: Tables of Coordinates for Hershey's Repertory of Occidental Type Fonts and Graphic Symbols". You can get it from NTIS (phone number is +1 703 487 4763) for less than twenty dollars US. Basic Glyph (symbol) data: hersh.oc1 - numbers 1 to 1199 hersh.oc2 - numbers 1200 to 2499 hersh.oc3 - numbers 2500 to 3199 hersh.oc4 - numbers 3200 to 3999 These four files contain approximately 19 different fonts in the A-Z alphabet plus greek and cyrillic, along with hundreds of special symbols, described generically below. There are also four files of Oriental fonts (hersh.or[1-4]). These files contain symbols from three Japanese alphabets (Kanji, Hiragana, and Katakana). It is unknown what other symbols may be contained therein, nor is it known what order the symbols are in (I don't know Japanese!). Back to the Occidental files: Fonts: Roman: Plain, Simplex, Duplex, Complex Small, Complex, Triplex Italic: Complex Small, Complex, Triplex Script: Simplex, Complex Gothic: German, English, Italian Greek: Plain, Simplex, Complex Small, Complex Cyrillic: Complex Symbols: Mathematical (227-229,232,727-779,732,737-740,1227-1270,2227-2270, 1294-1412,2294-2295,2401-2412) Daggers (for footnotes, etc) (1276-1279, 2276-2279) Astronomical (1281-1293,2281-2293) Astrological (2301-2312) Musical (2317-2382) Typesetting (ffl,fl,fi sorts of things) (miscellaneous places) Miscellaneous (mostly in 741-909, but also elsewhere): - Playing card suits - Meteorology - Graphics (lines, curves) - Electrical - Geometric (shapes) - Cartographic - Naval - Agricultural - Highways - Etc... ASCII sequence translation files: The Hershey glyphs, while in a particular order, are not in an ASCII sequence. I have provided translation files that give the sequence of glyph numbers that will most closely approximate the ASCII printing sequence (from space through ~, with the degree circle tacked on at the end) for each of the above fonts: File names are made up of fffffftt.hmp, where ffffff is the font style, one of: roman Roman greek Greek italic Italic script Script cyril Cyrillic (some characters not placed in the ASCII sequence) gothgr Gothic German gothgb Gothic English gothit Gothic Italian and tt is the font type, one of: p Plain (very small, no lower case) s Simplex (plain, normal size, no serifs) d Duplex (normal size, no serifs, doubled lines) c Complex (normal size, serifs, doubled lines) t Triplex (normal size, serifs, tripled lines) cs Complex Small (Complex, smaller than normal size) The three sizes are coded with particular base line (bottom of a capital letter) and cap line (top of a capital letter) values for 'y': Size Base Line Cap Line Very Small -5 +4 Small -6 +7 Normal -9 +12 (Note: some glyphs in the 'Very Small' fonts are actually 'Small') The top line and bottom line, which are normally used to define vertical spacing, are not given. Maybe somebody can determine appropriate values for these! The left line and right line, which are used to define horizontal spacing, are provided with each character in the database. SHAR_EOF if test -f 'hershey.f77' then echo shar: over-writing existing file "'hershey.f77'" fi cat << \SHAR_EOF > 'hershey.f77' c .. display all of the Hershey font data c c .. By James Hurt when with c .. Deere and Company c .. John Deere Road c .. Moline, IL 61265 c c .. Author now with Cognition, Inc. c .. 900 Technology Park Drive c .. Billerica, MA 01821 c c .. graphics subroutines c .. identy - initialize graphics c .. vwport - set where to display image on screen c .. - full screen is 0.0 to 100.0 in vertical (y) direction c .. - 0.0 to ???.? in horizontal (x) direction c .. - origin is lower left corner of screen c .. window - set window limits in world coordinates c .. newpag - if action left to be take on existing screen, take it c .. - then take actions to start with a blank screen c .. jnumbr - display an integer (code included) c .. move - set current cursor position to (x,y) c .. draw - draw from current cursor position to (x,y) c .. - then set current cursor position to (x,y) c .. - The point (x,y) is always in world coordinates c .. skip - Make the next draw really be a move c .. waitcr - finish all graphics actions then let the user look at c .. - the image. User signals (usually by pressing RETURN) c .. - when it is safe to continue. c .. grstop - finish all graphics routines (no more graphics to follow) c external identy,vwport,window,newpag,jnumbr,move ,draw ,skip, x waitcr,grstop c .. local variables real deltac, deltar, colmax parameter (deltac = 6.25, deltar = 6.25, colmax = 100.0) c .. font data file name character*80 name c .. font data character*1 line(2,256) c .. co-ordinates real x,y,col,row c .. which data point and which character integer ipnt,ich,nch,i intrinsic ichar cexecutable code begins c .. file unit number kfile=1 c .. get hershey file name write(*,'(a)') ' packed hershey font file name' read(*,'(a)') name open(unit=kfile,file=name,status='old') c .. initialize graphics call identy c .. want square picture for each character c .. Note: most but not all Hershey font characters fit inside this window call window(-15.0, 15.0,-15.0, 15.0) c .. loop per screen 5 continue c .. start with a clean sheet call newpag c .. where to display this character col = 0.0 row = 100.0 c .. loop per character 10 continue c .. read character number and data read(unit=kfile,'(i5,i3,64a1/(72a1))',end=90) ich,nch, x (line(1,i),line(2,i),i=1,nch) c .. select view port (place character on screen) call vwport(col,col+deltac,row-deltar,row) c .. identify character call jnumbr(ich,4,-15.0,9.0,5.0) c .. draw character limits c .. Note: this data can be used for proportional spacing x=ichar(line(1,1))-ichar('R') y=ichar(line(2,1))-ichar('R') call move(x,-10.0) call draw(x,10.0) call move(y,-10.0) call draw(y,10.0) c .. first data point is a move call skip c .. loop per line of data do 20 ipnt = 2, nch c .. process vector number ipnt if(line(1,ipnt).eq.' ') then c .. next data point is a move call skip else c .. draw (or move) to this data point x=ichar(line(1,ipnt))-ichar('R') y=ichar(line(2,ipnt))-ichar('R') c .. Note that Hershey Font data is in TV coordinate system call draw(x,-y) endif 20 continue c .. end of this character col = col + deltac if( col .lt. colmax ) go to 10 col = 0.0 row = row - deltar if( row .ge. deltar ) go to 10 call waitcr go to 5 90 continue call waitcr c .. all done call grstop end subroutine jnumbr( number, iwidth, x0, y0, height ) integer number, iwidth real x0, y0, height c .. draw one of the decimal digits c .. number = the integer to be displayed c .. iwidth = the number of characters c .. (x0, y0) = the lower left corner c .. height = height of the characters c c c .. By James Hurt when with c .. Deere and Company c .. John Deere Road c .. Moline, IL 61265 c c .. Author now with Cognition, Inc. c .. 900 Technology Park Drive c .. Billerica, MA 01821 c c .. graphics (graphics) routines called external skip,draw c .. local variables used integer ipnt, ipos, ival, idigit real x, y, scale real xleft, ylower c .. character data for the ten decimal digit characters c .. data extracted from one of the Hershey fonts integer start(0:10), power(0:9) character*1 line(2,104) data power/ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, x 100000000, 1000000000 / data start/0,11,14,22,36,42,55,68,73,91,104/ c 0:poly(4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,7 6,6 8,4 9) c 1:poly(2 7,4 9,4 0) c 2:poly(1 8,3 9,5 9,7 8,7 6,6 4,1 0,7 0) c 3:poly(1 8,3 9,5 9,7 8,7 6,5 5) c poly(4 5,5 5,7 4,7 1,5 0,3 0,1 1) c 4:poly(5 9,5 0) c poly(5 9,0 3,8 3) c 5:poly(2 9,1 5,3 6,4 6,6 5,7 3,6 1,4 0,3 0,1 1) c poly(2 9,6 9) c 6:poly(6 9,4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,6 5,4 6,2 5,1 3) c 7:poly(7 9,3 0) c poly(1 9,7 9) c 8:poly(3 9,1 8,1 6,3 5,5 5,7 6,7 8,5 9,3 9) c poly(3 5,1 4,1 1,3 0,5 0,7 1,7 4,5 5) c 9:poly(7 6,6 4,4 3,2 4,1 6,2 8,4 9,6 8,7 6,7 3,6 1,4 0,2 0) c data line/'R','M','P','N','O','P','O','S','P','U','R','V','T','U', A'U','S','U','P','T','N','R','M','P','O','R','M','R B','V','O','N','Q','M','S','M','U','N','U','P','T','R','O', C'V','U','V','O','N','Q','M','S','M','U','N','U','P','S','Q D',' ','R','R','Q','S','Q','U','R','U','U','S','V','Q','V','O','U', E'S','M','S','V',' ','R','S','M','N','S','V','S','P F','M','O','Q','Q','P','R','P','T','Q','U','S','T','U','R','V','Q', G'V','O','U',' ','R','P','M','T','M','T','M','R','M','P','N H','O','P','O','S','P','U','R','V','T','U','U','S','T','Q','R','P', I'P','Q','O','S','U','M','Q','V',' ','R','O','M','U','M', J'Q','M','O','N','O','P','Q','Q','S','Q','U','P','U','N','S', K'M','Q','M',' ','R','Q','Q','O','R','O','U','Q','V','S','V','U','U L','U','R','S','Q','U','P','T','R','R','S','P','R','O','P', M'P','N','R','M','T','N','U','P','U','S','T','U','R','V','P','V'/ c .. compute scale factor and lower left of first digit scale = height/10.0 xleft = x0 ylower = y0 ival = number c .. loop for each position do 30 ipos = iwidth,1,-1 idigit = mod( ival/power(ipos-1), 10 ) c .. first data point is a move call skip c .. loop over data for this digit do 20 ipnt=start(idigit)+1,start(idigit+1) if(line(1,ipnt).eq.' ') then c .. next data point is a move call skip else c .. draw (or move) to this data point x=ichar(line(1,ipnt))-ichar('N') y=ichar(line(2,ipnt))-ichar('V') call draw(xleft+scale*x,ylower-scale*y) endif 20 continue c .. move for next digit xleft = xleft + height 30 continue end SHAR_EOF if test -f 'hershey.c' then echo shar: over-writing existing file "'hershey.c'" fi cat << \SHAR_EOF > 'hershey.c' #include "cgksincl.h" #include #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif /* * hershey.c Display all of the Hershey font data in a font file * * This sample program is intended more so the user can see how the * font data is read and used in an (admittedly minimal) application, * than as a useable program. * * Its function is to display all of the hershey font characters on-screen, * in a format 8 characters across and 8 vertical. * * usage: * hershey * * where is a supported device ('c' for pc-cga is all * in this version) * is the name of a hershey font file, e.g. * hersh.oc1 * * Translated from Fortran to C and GKS (that's why it looks wierd!) * (PRIOR Data Sciences non-ANSI GKS binding used here. Sorry! * Somebody else is welcome to translate to the ANSI binding) * */ /* Translated by Pete Holzmann Octopus Enterprises 19611 La Mar Court Cupertino, CA 95014 Original... .. By James Hurt when with .. Deere and Company .. John Deere Road .. Moline, IL 61265 .. now with Cognition, Inc. .. 900 Technology Park Drive .. Billerica, MA 01821 */ /* local variables */ /* the next variables set the percent-of-screen used for each character. 'colmax' should be left at 100. */ float deltac = 12.5, deltar = 12.5, colmax = 100.0; FILE *INfile,*OUTfile,*fopen(); /* some files */ /* some variables to record the largest bounding rectangle of the displayed characters. Printed when all finished. */ int minx = 999,miny = 999,maxx=-999,maxy=-999; /* .. font data file name */ char name[80]; /* a forward referenced function */ void jnumbr(); float aspect = 1.2; /* PC graphics screen aspect ratio */ /* GKS local variables */ int cga(); /* device initializer function */ int (*wsinitf)(); /* pointer to the initializer function */ Ws_id wss_xxxx; /* workstation id (an int) */ Int wstyp; /* ws type, and some vars */ Drect maxsurf; /* max device surface rectangle */ Int rastunit[2]; /* device surface in raster units */ Wc p1[2]; /* two world coordinates */ /* world coordinate windows */ Wrect wrect = {-17,-17,17,17}; /* NDC coordinate viewport and windows */ Nrect nrect = {0.0, 0.0, 1.0, 1.0}; /* DC coordinate viewport */ Drect drect = {0.0, 0.0, 319.0, 199.0}; /* work area */ /* * scanint: a function to scan an integer, using n characters of * the input file, ignoring newlines. (scanf won't work * because it also ignores blanks) */ int scanint(file,n) FILE *file; int n; { char buf[20]; int i,c; for (i=0;i] file\n"); exit(1); } switch (*argv[1]) { case 'c': wsinitf = cga; break; default: printf("usage: hershey [c,] file\n"); exit(1); } /* get GKS started */ open_gks((Ercode (*)())NULL,(Erarea *)NULL,(Size)NULL,(String) ""); OUTfile=stdout; INfile = NULL; wss_xxxx = open_ws(INfile, OUTfile, wsinitf); activate(wss_xxxx); nrect.n_ur.n_y /= aspect; /* correct NDC square for pixel aspect ratio */ /* adjust drect to be the biggest square possible, and adjust for aspect ratio */ drect.d_ur.d_x = drect.d_ur.d_y * aspect; /* set up the normalization transformation (number 1) from WC to NDC */ s_window (1, &wrect); s_viewport(1, &nrect); s_clip(FALSE); sel_cntran(1); /* set up the workstation transformation from NDC to DC */ s_w_wind(wss_xxxx, &nrect); s_w_view(wss_xxxx, &drect); update(wss_xxxx,1); /* * GKS is all set up now, so let's get started... */ /* .. get hershey file name */ if (!(kfile = fopen(argv[2],"r"))) { fprintf(stderr,"Can't open font file '%s'\n",argv[1]); exit(1); } /* .. loop per screen */ label5: /* .. start with a clean sheet */ clear(wss_xxxx); /* .. where to display this character */ col = 0.0; row = 100.0; /* .. loop per character */ while (TRUE) { /* .. read character number and data */ if ((ich = scanint(kfile,5)) < 1) { deactivate(wss_xxxx); getchar(); close_ws(wss_xxxx); close_gks(); printf("\nDone\n"); printf("min,max = (%d,%d) (%d,%d)\n",minx,miny,maxx,maxy); exit(0); } nch = scanint(kfile,3); for (i=0; imaxx) maxx = x; if (-y < miny) miny = -y; if (-y >maxy) maxy = -y; /* .. Note that Hershey Font data is in TV coordinate system */ draw(x,-y); } } /* for loop */ /* .. end of this character */ if( (col += deltac) < colmax ) continue; col = 0.0; if( (row -= deltar) >= deltar ) continue; getchar(); /* wait for user to hit a newline */ goto label5; } /* while true */ /* .. all done */ exit(); } long power[] ={ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 }; int start[] ={0,11,14,22,36,42,55,68,73,91,104}; /* 0:poly(4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,7 6,6 8,4 9) */ /* 1:poly(2 7,4 9,4 0) */ /* 2:poly(1 8,3 9,5 9,7 8,7 6,6 4,1 0,7 0) */ /* 3:poly(1 8,3 9,5 9,7 8,7 6,5 5) */ /* poly(4 5,5 5,7 4,7 1,5 0,3 0,1 1) */ /* 4:poly(5 9,5 0) */ /* poly(5 9,0 3,8 3) */ /* 5:poly(2 9,1 5,3 6,4 6,6 5,7 3,6 1,4 0,3 0,1 1) */ /* poly(2 9,6 9) */ /* 6:poly(6 9,4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,6 5,4 6,2 5,1 3) */ /* 7:poly(7 9,3 0) */ /* poly(1 9,7 9) */ /* 8:poly(3 9,1 8,1 6,3 5,5 5,7 6,7 8,5 9,3 9) */ /* poly(3 5,1 4,1 1,3 0,5 0,7 1,7 4,5 5) */ /* 9:poly(7 6,6 4,4 3,2 4,1 6,2 8,4 9,6 8,7 6,7 3,6 1,4 0,2 0) */ /* */ char linedat[]={'R','M','P','N','O','P','O','S','P','U','R','V','T','U', 'U','S','U','P','T','N','R','M','P','O','R','M','R', 'V','O','N','Q','M','S','M','U','N','U','P','T','R','O', 'V','U','V','O','N','Q','M','S','M','U','N','U','P','S','Q', ' ','R','R','Q','S','Q','U','R','U','U','S','V','Q','V','O','U', 'S','M','S','V',' ','R','S','M','N','S','V','S','P', 'M','O','Q','Q','P','R','P','T','Q','U','S','T','U','R','V','Q', 'V','O','U',' ','R','P','M','T','M','T','M','R','M','P','N', 'O','P','O','S','P','U','R','V','T','U','U','S','T','Q','R','P', 'P','Q','O','S','U','M','Q','V',' ','R','O','M','U','M', 'Q','M','O','N','O','P','Q','Q','S','Q','U','P','U','N','S', 'M','Q','M',' ','R','Q','Q','O','R','O','U','Q','V','S','V','U','U', 'U','R','S','Q','U','P','T','R','R','S','P','R','O','P', 'P','N','R','M','T','N','U','P','U','S','T','U','R','V','P','V'}; #define line(a,b) linedat[(b*2+a)] void jnumbr( number, iwidth, x0, y0, height ) int number, iwidth; float x0, y0, height; { /* .. draw one of the decimal digits */ /* .. number = the integer to be displayed */ /* .. iwidth = the number of characters */ /* .. (x0, y0) = the lower left corner */ /* .. height = height of the characters */ /* */ /* */ /* .. By James Hurt when with */ /* .. Deere and Company */ /* .. John Deere Road */ /* .. Moline, IL 61265 */ /* */ /* .. Author now with Cognition, Inc. */ /* .. 900 Technology Park Drive */ /* .. Billerica, MA 01821 */ /* */ /* .. local variables used */ int ipnt, ipos, ival, idigit; float x, y, scale; float xleft, ylower; /* .. character data for the ten decimal digit characters */ /* .. data extracted from one of the Hershey fonts */ /* .. compute scale factor and lower left of first digit */ scale = height/10.0; xleft = x0; ylower = y0; ival = number; /* .. loop for each character */ for (ipos = iwidth;ipos>=1;ipos--) { idigit = (ival/power[ipos-1])% 10; /* .. first data point is a move */ skip(); /* .. loop over data for this digit */ for ( ipnt=start[idigit]; ipnt < start[idigit+1];ipnt++) { if(((char)line(0,ipnt)) == ' ') { skip(); /* next data point is a move */ } else { /* .. draw (or move) to this data point */ x=(int)line(0,ipnt) -(int) 'N'; y=(int)line(1,ipnt) -(int) 'V'; draw((int)(xleft+scale*x),(int)(ylower-scale*y)); } } /* data for this digit */ /* .. move for next digit */ xleft += height; } /* whole string */ } SHAR_EOF if test -f 'cyrilc.hmp' then echo shar: over-writing existing file "'cyrilc.hmp'" fi cat << \SHAR_EOF > 'cyrilc.hmp' 2199 2214 2213 2275 2274 2271 2272 2251 2221 2222 2219 2232 2211 2231 2210 2220 2200-2209 2212 2213 2241 2238 2242 2215 2273 2801-2826 2223 804 2224 2262 999 2252 2901-2926 2225 2229 2226 2246 2218 SHAR_EOF if test -f 'gothgbt.hmp' then echo shar: over-writing existing file "'gothgbt.hmp'" fi cat << \SHAR_EOF > 'gothgbt.hmp' 3699 3714 3728 2275 3719 2271 3718 3717 3721 3722 3723 3725 3711 3724 3710 3720 3700-3709 3712 3713 2241 3726 2242 3715 2273 3501-3526 2223 804 2224 2262 999 3716 3601-3626 2225 2229 2226 2246 3729 SHAR_EOF if test -f 'gothgrt.hmp' then echo shar: over-writing existing file "'gothgrt.hmp'" fi cat << \SHAR_EOF > 'gothgrt.hmp' 3699 3714 3728 2275 3719 2271 3718 3717 3721 3722 3723 3725 3711 3724 3710 3720 3700-3709 3712 3713 2241 3726 2242 3715 2273 3301-3326 2223 804 2224 2262 999 3716 3401-3426 2225 2229 2226 2246 3729 SHAR_EOF if test -f 'gothitt.hmp' then echo shar: over-writing existing file "'gothitt.hmp'" fi cat << \SHAR_EOF > 'gothitt.hmp' 3699 3714 3728 2275 3719 2271 3718 3717 3721 3722 3723 3725 3711 3724 3710 3720 3700-3709 3712 3713 2241 3726 2242 3715 2273 3801-3826 2223 804 2224 2262 999 3716 3901-3926 2225 2229 2226 2246 3729 SHAR_EOF if test -f 'greekc.hmp' then echo shar: over-writing existing file "'greekc.hmp'" fi cat << \SHAR_EOF > 'greekc.hmp' 2199 2214 2213 2275 2274 2271 2272 2251 2221 2222 2219 2232 2211 2231 2210 2220 2200-2209 2212 2213 2241 2238 2242 2215 2273 2027-2050 2199 2199 2223 804 2224 2262 999 2252 2127-2150 2199 2199 2225 2229 2226 2246 2218 SHAR_EOF if test -f 'greekcs.hmp' then echo shar: over-writing existing file "'greekcs.hmp'" fi cat << \SHAR_EOF > 'greekcs.hmp' 1199 1214 1213 1275 1274 1271 1272 1251 1221 1222 1219 1232 1211 1231 1210 1220 1200-1209 1212 1213 1241 1238 1242 1215 1273 1027-1050 1199 1199 1223 804 1224 1262 998 1252 1127-1150 1199 1199 1225 1229 1226 1246 1218 SHAR_EOF if test -f 'greekp.hmp' then echo shar: over-writing existing file "'greekp.hmp'" fi cat << \SHAR_EOF > 'greekp.hmp' 199 214 217 233 219 1271 234 231 221 222 1219 225 211 224 210 220 200-209 212 213 1241 226 1242 215 1273 27-50 199 199 1223 809 1224 1262 997 230 27-50 199 199 1225 223 1226 1246 218 SHAR_EOF if test -f 'greeks.hmp' then echo shar: over-writing existing file "'greeks.hmp'" fi cat << \SHAR_EOF > 'greeks.hmp' 699 714 717 733 719 2271 734 731 721 722 2219 725 711 724 710 720 700-709 712 713 2241 726 2242 715 2273 527-550 699 699 2223 804 2224 2262 999 730 627-650 699 699 2225 723 2226 2246 718 SHAR_EOF if test -f 'italicc.hmp' then echo shar: over-writing existing file "'italicc.hmp'" fi cat << \SHAR_EOF > 'italicc.hmp' 2749 2764 2778 2275 2769 2271 2768 2767 2771 2772 2773 2775 2761 2774 2760 2770 2750-2759 2762 2763 2241 2776 2242 2765 2273 2051-2076 2223 804 2224 2262 999 2766 2151-2176 2225 2229 2226 2246 2779 SHAR_EOF if test -f 'italiccs.hmp' then echo shar: over-writing existing file "'italiccs.hmp'" fi cat << \SHAR_EOF > 'italiccs.hmp' 1199 1214 1213 1275 1274 1271 1272 1251 1221 1222 1219 1232 1211 1231 1210 802 1200-1209 1212 1213 1241 1238 1242 1215 1273 1051-1076 1223 804 1224 1262 998 1252 1151-1176 1225 1229 1226 1246 1218 SHAR_EOF if test -f 'italict.hmp' then echo shar: over-writing existing file "'italict.hmp'" fi cat << \SHAR_EOF > 'italict.hmp' 3249 3264 3278 2275 3269 2271 3268 3267 3271 3272 3273 3275 3261 3274 3260 3270 3250-3259 3262 3263 2241 3276 2242 3265 2273 3051-3076 2223 804 2224 2262 999 3266 3151-3176 2225 2229 2226 2246 3279 SHAR_EOF if test -f 'romanc.hmp' then echo shar: over-writing existing file "'romanc.hmp'" fi cat << \SHAR_EOF > 'romanc.hmp' 2199 2214 2213 2275 2274 2271 2272 2251 2221 2222 2219 2232 2211 2231 2210 2220 2200-2209 2212 2213 2241 2238 2242 2215 2273 2001-2026 2223 804 2224 2262 999 2252 2101-2126 2225 2229 2226 2246 2218 SHAR_EOF if test -f 'romancs.hmp' then echo shar: over-writing existing file "'romancs.hmp'" fi cat << \SHAR_EOF > 'romancs.hmp' 1199 1214 1213 1275 1274 1271 1272 1251 1221 1222 1219 1232 1211 1231 1210 1220 1200-1209 1212 1213 1241 1238 1242 1215 1273 1001-1026 1223 804 1224 1262 998 1252 1101-1126 1225 1229 1226 1246 1218 SHAR_EOF if test -f 'romand.hmp' then echo shar: over-writing existing file "'romand.hmp'" fi cat << \SHAR_EOF > 'romand.hmp' 2699 2714 2728 2275 2719 2271 2718 2717 2721 2722 2723 2725 2711 2724 2710 2720 2700-2709 2712 2713 2241 2726 2242 2715 2273 2501-2526 2223 804 2224 2262 999 2716 2601-2626 2225 2229 2226 2246 2729 SHAR_EOF if test -f 'romanp.hmp' then echo shar: over-writing existing file "'romanp.hmp'" fi cat << \SHAR_EOF > 'romanp.hmp' 199 214 217 233 219 1271 234 231 221 222 1219 225 211 224 210 220 200-209 212 213 1241 226 1242 215 1273 1-26 1223 809 1224 1262 997 230 1-26 1225 223 1226 1246 218 SHAR_EOF if test -f 'romans.hmp' then echo shar: over-writing existing file "'romans.hmp'" fi cat << \SHAR_EOF > 'romans.hmp' 699 714 717 733 719 2271 734 731 721 722 2219 725 711 724 710 720 700-709 712 713 2241 726 2242 715 2273 501-526 2223 804 2224 2262 999 730 601-626 2225 723 2226 2246 718 SHAR_EOF if test -f 'romant.hmp' then echo shar: over-writing existing file "'romant.hmp'" fi cat << \SHAR_EOF > 'romant.hmp' 3199 3214 3228 2275 3219 2271 3218 3217 3221 3222 3223 3225 3211 3224 3210 3220 3200-3209 3212 3213 2241 3226 2242 3215 2273 3001-3026 2223 804 2224 2262 999 3216 3101-3126 2225 2229 2226 2246 3229 SHAR_EOF if test -f 'scriptc.hmp' then echo shar: over-writing existing file "'scriptc.hmp'" fi cat << \SHAR_EOF > 'scriptc.hmp' 2749 2764 2778 2275 2769 2271 2768 2767 2771 2772 2773 2775 2761 2774 2760 2770 2750-2759 2762 2763 2241 2776 2242 2765 2273 2551-2576 2223 804 2224 2262 999 2766 2651-2676 2225 2229 2226 2246 2779 SHAR_EOF if test -f 'scripts.hmp' then echo shar: over-writing existing file "'scripts.hmp'" fi cat << \SHAR_EOF > 'scripts.hmp' 699 2764 2778 733 2769 2271 2768 2767 2771 2772 2773 725 2761 724 710 2770 2750-2759 2762 2763 2241 726 2242 2765 2273 551-576 2223 804 2224 2262 999 2766 651-676 2225 723 2226 2246 718 SHAR_EOF # End of shell archive exit 0