Article View: comp.text.tex
Article #11574SRC: Convert fig(1) figures to Metafont code
From: Warren Toomey
Date: Mon, 11 May 1992 01:23
Date: Mon, 11 May 1992 01:23
928 lines
28077 bytes
28077 bytes
Here is some source to convert Fig2.1 polygons into Metafont code. I wrote
this on the weekend so that I could try drawing outline fonts with Fig and
then process them with Metafont. A manual and example input/outputs
(Perpetua lowercase b and g) are included.
I also have a nasty pbmtofig converter, so I can scan in fonts and use
them as templates for my outlines, and can post this too if anybody
wants it.
Are there any other outline font to Metafont converters???
Cheers,
Warren Toomey
echo x - figtomf.1
sed '/^X/s///' > figtomf.1 << '/'
X.TH FIGTOMF 1L
X.SH NAME
Xfigtomf - convert fig drawings to MetaFont code
X.SH SYNOPSIS
X.B figtomf
X[
X.B -charcode
X] [fig file]
X.SH DESCRIPTION
X.B figtomf
Xtakes as input an input file generated by fig(1) or xfig(1), and converts
Xthe boxes and closed polylines into a set of MetaFont fill commands contained
Xinside a MetaFont character definition.
X.PP
XThe input
X.B fig file
Xmust use the Fig 2.1 file format. Input files that use
Xanother format will be rejected. If no fig files is named as an argument,
Xstandard input is used.
X.PP
XThe
X.B charcode
Xdescribes the charcode used in the output MetaFont code. If this is a single
Xcharacter, then the charcode used will be the ASCII value of that character.
XIf the charcode has two or more characters, this will be interpreted as the
Xdecimal value of the charcode to be used.
X.PP
X.SH INPUT REQUIREMENTS
XThe first four objects in the input fig file must be four or five lines, two
Xvertical and two or three horizontal. These form the MetaFont bounding box of
Xthe output character. They may be of any length, and be placed in any order.
XHowever, any diagonal lines in the input file will terminate
X.B figtomf
Xabruptly.
X.PP
XIf there are two horizontal lines, the lower one is the baseline of the
Xcharacter; the character is assumed not to go below the baseline. If there
Xare three horizontal lines, the middle one is the baseline.
X.PP
XThe remaining objects in the input file must be boxes or closed polylines.
XOther objects, such as arcs, circles, ovals, text, splines etc. will cause
X.B figtomf
Xto terminate abruptly.
X.PP
XIf the filled colour of an object is white, the MetaFont code produced will
Xbe a
X.B unfill
Xcommand. All other colours will be represented by a
X.B fill
Xcommand. This allows you to draw the outline of a `D', for example, with
Xone closed polyline, and omit the inside of the `D' with another polyline. No
Xother attributes (such as depth etc.) are used.
X.PP
XEach input object is limited to 100 points.
X.PP
X.SH OUTPUT CONSIDERATIONS
XFor its input file,
X.B figtomf
Xgenerates MetaFont code for one character. Because
X.B figtomf
Xhas no idea of the intended size of the character, the output code
Xis written using sizes given in `fig's and `fig#'s. You will have to manually
Xdefine the values of these units in order to generate characters at the
Xappropriate size.
X.PP
XFor example, the output code from the command
X.nf
X
Xfigtomf -D D.fig
X
X.fi
Xmight look like:
X.nf
X
Xbeginchar("D", 541fig#, 549fig#, 0fig#); "The letter D";
Xfill
X (191fig, 503fig) --
X (189fig, 507fig) --
X ...
X (215fig, 537fig) --
X (233fig, 539fig) --
X (271fig, 540fig) --
Xcycle;
Xunfill
X (195fig, 525fig) --
X (104fig, 79fig) --
X (177fig, 79fig) --
X (268fig, 540fig) --
Xcycle;
X ...
X (305fig, -5fig) --
X (294fig, 28fig) --
Xcycle;
Xendchar;
X
X.fi
XTo use this code to actually produce fonts with MetaFont, you should create
Xa main file that defines the values for `fig' and `fig#', and inputs all
Xthe individual outputs from
X.B figtomf.
XThis might look the following file, `perpi10.mf':
X.nf
X
X\mode=localfont;
Xmode_setup;
X
Xfont_identifier:="PERPI10";
Xfig#= pt#/108;
Xfig:=pt/108;
X
Xinput A;
Xinput B;
Xinput C;
Xinput D;
X ...
Xbye;
X
X.fi
X.SH FATAL ERRORS
XCould not open file - The named input file does not exist or
Xcould not be opened for reading.
X.PP
XIncorrect Fig version - The input file is not formatted according
Xto Fig file format 2.1.
X.PP
XCan't parse line staring with number - The number beginning this
Xline in the input file is unknown. The file is corrupt?
X.PP
XAll lines must occur at the beginning of input -
XA line occurred after the bounding box had been shipped,
Xso why did you put this line in for?
X.PP
XOnly need 2 vertical lines in input - There can only be 2 vertical
Xlines in the input file.
X.PP
XOnly need 3 horizontal lines in input - There can only be 2 or 3
Xhorizontal lines in the input file.
X.PP
XLine not horz or vert - A diagonal line occurred.
X.PP
XNo bounding box before first fill - A polygon occurred before a
Xbounding box was created for the character; move all of the
Xlines in your input file to the top.
X.PP
XCan't cope with this object type yet - This object is currently not
Xrecognised. Don't use it!
X.SH SEE ALSO
Xmf(1), fig(1), xfig(1).
X.SH BUGS
XThe program was hastily written, so there may be some bugs.
X.SH AUTHOR
XWarren Toomey, wkt@csadfa.cs.adfa.oz.au
/
echo x - figtomf.c
sed '/^X/s///' > figtomf.c << '/'
X/* Figtomf: Convert polygons from Fig2.1 format to Metafont format.
X *
X * Author: Warren Toomey. wkt@csadfa.cs.adfa.oz.au
X *
X * Currently it only copes with boxes and closed polylines - no splines.
X */
X
X#include <stdio.h>
X#define EOS '\0';
X
Xint leftx, rightx; /* Left and right bounds on the character */
Xint topy, basey, boty; /* Top and bottom bounds on the character */
Xint numx=0, numy=0; /* Number of x,y lines we've read in */
Xint polx[100]; /* Up to 100 points in the filled polygon */
Xint poly[100];
Xint points; /* Number of points in the polygon */
Xchar buffer[1024]; /* Buffer used to parse input */
Xchar code[4]= "\"A\""; /* Used when given single char charnames */
Xchar *chname; /* The name of the character */
Xchar *chcode; /* The character's charcode */
Xint fill; /* True if we must fill, else unfill */
X
X
X/* Print out the usage of
X * this program
X */
Xusage()
X {
X fprintf(stderr,"Usage: pbmtopk [-char] [fig_file]\n");
X fprintf(stderr," If no fig_file, stdin is used\n");
X fprintf(stderr," char is a single char e.g a or A or Z or 1, or\n");
X fprintf(stderr," char is a decimal number e.g 07, 25, 127\n");
X exit(1);
X }
X
X/* Get the character's name and charcode
X */
Xint getcharname(a)
X char *a;
X {
X if (*a!='-') return(-1);
X a++;
X chname= a;
X if (strlen(a)==1) /* It's a single character */
X { code[1]= *a; chcode= code; }
X else
X chcode= a;
X return(0);
X }
X
X/* Get an integer from stdin, using buffer.
X * Returns -1 on EOF
X */
Xint getint()
X {
X int out;
X int ch;
X char *p;
X
X p=buffer;
X
X /* Skip spaces, tabs & newlines */
X while ((ch=getchar())!=EOF && (ch==' ' || ch=='\t' || ch=='\n'));
X if (ch==EOF) return(-1);
X
X /* Add the characters to the buffer */
X while(ch!=' ' && ch!='\t' && ch!='\n' && ch!=EOF)
X { *(p++)= ch; ch=getchar(); }
X *p= EOS;
X out= atoi(buffer);
X return(out);
X }
X
X/* Begin the details of this character */
Xbeginchar()
X {
X if (numy==2) boty= basey;
X printf("beginchar(%s, %dfig#, %dfig#, %dfig#); \"The letter %s\";\n",
X chcode, rightx-leftx, basey-topy, boty-basey, chname);
X }
X
X/* End the details of this character */
Xendchar()
X {
X printf("endchar;\n");
X }
X
X/* Print one closed filled polygon */
Xprintobject()
X {
X int i;
X
X if (fill) printf("fill\n");
X else printf("unfill\n");
X for (i=0;i<points-1;i++)
X printf(" (%dfig, %dfig) --\n",polx[i]-leftx,basey-poly[i]);
X printf("cycle;\n");
X }
X
X
X/* The whole box & dice.
X *
X * First parse the arguments, getting the character's name
X * and opening the input file.
X * Next, check the file is valid, and begin reading it in.
X * Get the bounding box, or exit abruptly.
X * Then loop reading in polygon details, and writing out
X * the MetaFont code.
X * Finally, terminate the character.
X */
Xmain(argc, argv)
X int argc;
X char *argv[];
X {
X int donebegin=0; /* True if we've called beginchar() */
X int ch;
X int oldx,oldy,x,y;
X char *chp;
X FILE *dummy;
X
X /* Get the arguments */
X chname= "A";
X chcode= code;
X chp= argv[1];
X switch(argc)
X {
X case 3: chp= argv[2];
X if (getcharname(argv[1])== -1) usage();
X case 2:
X dummy= freopen(chp,"r",stdin);
X if (dummy==NULL) { fprintf(stderr,"Could not open %s\n",chp); exit(1); }
X break;
X case 1:
X break;
X default: usage();
X }
X
X /* Get the 1st line */
X chp= buffer;
X while ((ch=getchar())!=-EOF && ch!='\n') *(chp++)= ch;
X *(++chp)= EOS;
X if (strncmp(buffer,"#FIG 2.1",8))
X { fprintf(stderr,"Incorrect Fig version\n"); exit(1); }
X if (ch==EOF) exit(0);
X
X /* Get the 2nd line */
X chp= buffer;
X while ((ch=getchar())!=-EOF && ch!='\n') *(chp++)= ch;
X *(++chp)= EOS;
X if (strncmp(buffer,"80 2",4))
X { fprintf(stderr,"Incorrect Fig version\n"); exit(1); }
X if (ch==EOF) exit(0);
X
X while(1) /* Loop getting things from the input file */
X {
X points= 0; fill=1;
X ch= getint();
X if (ch==-1) { endchar(); exit(0); }
X if (ch!=2) { fprintf(stderr,"Can't parse line staring with %d\n",ch); exit(1); }
X
X x= getint(); /* Get the object type */
X ch= getint();
X ch= getint();
X ch= getint(); /* Get the objects color */
X ch= getint();
X ch= getint(); /* If white, we unfill */
X ch= getint();
X if (ch==1) fill=0;
X
X /* Skip to end of line */
X while ((ch=getchar())!=-EOF && ch!='\n');
X switch(x)
X {
X case 1: /* Lines */
X if (donebegin)
X { fprintf(stderr,"All lines must occur at the beginning of input\n");
X exit(1);
X }
X oldx= getint();
X oldy= getint(); /* Get the begin/end of the line */
X x= getint();
X y= getint();
X if (oldx==x) /* A vertical line */
X {
X switch(numx)
X {
X case 0:
X leftx= x;
X break;
X case 1:
X if (x > leftx)
X rightx= x;
X else { rightx= leftx; leftx= x; }
X break;
X default:
X fprintf(stderr,"Only need 2 vertical lines in input\n");
X exit(1);
X }
X numx++;
X }
X else if (oldy==y) /* A horizontal line */
X {
X switch(numy)
X {
X case 0:
X topy= y;
X break;
X case 1:
X if (y > topy)
X basey= y;
X else { basey= topy; topy= y; }
X break;
X case 2:
X if (y > basey)
X boty= y;
X else if (y > topy)
X { boty= basey; basey= y; }
X else
X { boty= basey; basey= topy; topy=y; }
X break;
X default:
X fprintf(stderr,"Only need 3 horizontal lines in input\n");
X exit(1);
X }
X numy++;
X }
X else { fprintf(stderr, "Line not horz or vert\n"); exit(1); }
X while ((ch=getchar())!=-EOF && ch!='\n');
X if (ch==EOF) exit(0);
X break;
X case 2: /* Polygons */
X case 3:
X if (numx<2 || numy<2)
X { fprintf(stderr, "No bounding box before first fill\n"); exit(1); }
X if (!donebegin) { beginchar(); donebegin=1; }
X while(1)
X {
X x= getint();
X y= getint();
X if (x==9999 || y==9999) { printobject(); break; }
X else { polx[points]=x; poly[points++]=y; }
X }
X break;
X default: fprintf(stderr,"Can't cope with object type %d yet\n",ch);
X exit(1);
X }
X }
X }
/
echo x - b.fig
sed '/^X/s///' > b.fig << '/'
X#FIG 2.1
X80 2
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 4 59 4 519 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 579 379 579 619 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 19 4 259 4 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 74 839 539 839 9999 9999
X2 2 0 1 -1 0 0 11 0.000 7 0 0
X 99 629 99 79 189 79 189 629 99 629 9999 9999
X2 2 0 1 -1 0 0 11 0.000 0 0 0
X 189 624 189 819 99 819 99 624 189 624 9999 9999
X2 3 0 1 -1 0 0 1 0.000 -1 0 0
X 189 499 198 481 206 469 213 458 223 447 234 439 244 432 255 427 266 422 278 420 302 419 317 421 334 425 345 428 362 437 372 443 379 450 389 460 397 469 406 480 414 493 424 512 428 527 434 547 437 565 439 587 439 603 439 625 437 648 435 669 431 685 426 706 420 724 412 741 403 753 392 768 382 778 372 788 363 795 351 803 333 811 322 815 309 819 299 822 285 824 267 823 250 821 235 817 223 809 213 801 204 791 197 776 192 754 189 734 189 499 9999 9999
X2 3 0 1 -1 1 2 11 0.000 -1 0 0
X 189 449 203 432 223 413 248 396 275 384 301 377 332 374 365 375 390 378 406 383 421 389 436 398 446 405 461 415 476 428 491 445 502 458 511 472 523 492 531 507 537 522 541 543 544 560 544 584 544 616 543 643 539 669 536 682 530 698 522 716 514 729 504 741 492 754 480 766 463 781 448 793 433 804 418 814 405 822 389 828 376 833 363 837 350 840 333 844 317 845 292 847 271 847 253 847 235 845 216 844 191 841 159 837 132 833 108 826 91 819 88 818 90 789 96 740 99 680 189 449 9999 9999
X2 3 0 1 -1 0 0 11 0.000 7 0 0
X 194 29 29 54 24 59 24 69 38 70 54 74 62 77 73 85 81 93 91 106 95 122 100 141 189 79 191 59 194 29 9999 9999
/
echo x - b.mf
sed '/^X/s///' > b.mf << '/'
Xbeginchar("b", 575fig#, 835fig#, 0fig#); "The letter b";
Xfill
X (95fig, 210fig) --
X (95fig, 760fig) --
X (185fig, 760fig) --
X (185fig, 210fig) --
Xcycle;
Xfill
X (185fig, 215fig) --
X (185fig, 20fig) --
X (95fig, 20fig) --
X (95fig, 215fig) --
Xcycle;
Xunfill
X (185fig, 340fig) --
X (194fig, 358fig) --
X (202fig, 370fig) --
X (209fig, 381fig) --
X (219fig, 392fig) --
X (230fig, 400fig) --
X (240fig, 407fig) --
X (251fig, 412fig) --
X (262fig, 417fig) --
X (274fig, 419fig) --
X (298fig, 420fig) --
X (313fig, 418fig) --
X (330fig, 414fig) --
X (341fig, 411fig) --
X (358fig, 402fig) --
X (368fig, 396fig) --
X (375fig, 389fig) --
X (385fig, 379fig) --
X (393fig, 370fig) --
X (402fig, 359fig) --
X (410fig, 346fig) --
X (420fig, 327fig) --
X (424fig, 312fig) --
X (430fig, 292fig) --
X (433fig, 274fig) --
X (435fig, 252fig) --
X (435fig, 236fig) --
X (435fig, 214fig) --
X (433fig, 191fig) --
X (431fig, 170fig) --
X (427fig, 154fig) --
X (422fig, 133fig) --
X (416fig, 115fig) --
X (408fig, 98fig) --
X (399fig, 86fig) --
X (388fig, 71fig) --
X (378fig, 61fig) --
X (368fig, 51fig) --
X (359fig, 44fig) --
X (347fig, 36fig) --
X (329fig, 28fig) --
X (318fig, 24fig) --
X (305fig, 20fig) --
X (295fig, 17fig) --
X (281fig, 15fig) --
X (263fig, 16fig) --
X (246fig, 18fig) --
X (231fig, 22fig) --
X (219fig, 30fig) --
X (209fig, 38fig) --
X (200fig, 48fig) --
X (193fig, 63fig) --
X (188fig, 85fig) --
X (185fig, 105fig) --
Xcycle;
Xfill
X (185fig, 390fig) --
X (199fig, 407fig) --
X (219fig, 426fig) --
X (244fig, 443fig) --
X (271fig, 455fig) --
X (297fig, 462fig) --
X (328fig, 465fig) --
X (361fig, 464fig) --
X (386fig, 461fig) --
X (402fig, 456fig) --
X (417fig, 450fig) --
X (432fig, 441fig) --
X (442fig, 434fig) --
X (457fig, 424fig) --
X (472fig, 411fig) --
X (487fig, 394fig) --
X (498fig, 381fig) --
X (507fig, 367fig) --
X (519fig, 347fig) --
X (527fig, 332fig) --
X (533fig, 317fig) --
X (537fig, 296fig) --
X (540fig, 279fig) --
X (540fig, 255fig) --
X (540fig, 223fig) --
X (539fig, 196fig) --
X (535fig, 170fig) --
X (532fig, 157fig) --
X (526fig, 141fig) --
X (518fig, 123fig) --
X (510fig, 110fig) --
X (500fig, 98fig) --
X (488fig, 85fig) --
X (476fig, 73fig) --
X (459fig, 58fig) --
X (444fig, 46fig) --
X (429fig, 35fig) --
X (414fig, 25fig) --
X (401fig, 17fig) --
X (385fig, 11fig) --
X (372fig, 6fig) --
X (359fig, 2fig) --
X (346fig, -1fig) --
X (329fig, -5fig) --
X (313fig, -6fig) --
X (288fig, -8fig) --
X (267fig, -8fig) --
X (249fig, -8fig) --
X (231fig, -6fig) --
X (212fig, -5fig) --
X (187fig, -2fig) --
X (155fig, 2fig) --
X (128fig, 6fig) --
X (104fig, 13fig) --
X (87fig, 20fig) --
X (84fig, 21fig) --
X (86fig, 50fig) --
X (92fig, 99fig) --
X (95fig, 159fig) --
Xcycle;
Xfill
X (190fig, 810fig) --
X (25fig, 785fig) --
X (20fig, 780fig) --
X (20fig, 770fig) --
X (34fig, 769fig) --
X (50fig, 765fig) --
X (58fig, 762fig) --
X (69fig, 754fig) --
X (77fig, 746fig) --
X (87fig, 733fig) --
X (91fig, 717fig) --
X (96fig, 698fig) --
X (185fig, 760fig) --
X (187fig, 780fig) --
Xcycle;
Xendchar;
/
echo x - g.fig
sed '/^X/s///' > g.fig << '/'
X#FIG 2.1
X80 2
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 19 479 539 479 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 19 4 559 4 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 19 119 19 344 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 599 119 599 404 9999 9999
X2 1 0 1 -1 0 0 0 0.000 -1 0 0
X 39 839 514 839 9999 9999
X2 3 0 1 -1 0 0 1 0.000 -1 0 0
X 207 118 216 98 227 84 240 72 252 63 265 57 278 53 297 50 317 52 333 58 344 63 356 75 366 87 374 101 382 118 389 133 394 154 398 174 400 194 400 211 399 236 396 260 394 275 389 293 383 311 377 323 367 336 350 347 331 355 317 359 301 361 280 360 261 355 245 347 233 340 223 327 211 308 202 289 195 268 192 248 189 220 191 192 194 169 198 149 203 133 207 118 9999 9999
X2 3 0 1 -1 2 0 11 0.000 -1 0 0
X 232 29 261 27 291 25 326 25 348 27 367 30 388 33 409 37 424 41 444 43 542 39 554 40 558 45 562 57 564 70 562 83 557 91 550 93 494 91 465 89 458 90 453 95 455 99 461 104 469 115 478 126 492 152 499 170 502 192 504 221 502 250 497 266 489 289 478 309 465 324 451 336 432 349 412 362 390 371 367 378 343 385 323 389 299 392 273 392 249 388 231 381 206 373 179 360 163 348 137 328 118 309 105 290 94 269 89 250 86 233 84 210 86 189 88 172 97 148 105 128 116 111 125 97 135 84 146 72 157 62 171 53 185 46 198 40 2
08 36 228 30 232 29 9999 9999
X2 3 0 1 -1 0 0 11 0.000 -1 0 0
X 219 376 205 382 187 388 167 397 154 405 141 413 129 423 119 434 113 443 107 456 103 467 100 479 100 493 102 504 106 516 110 526 116 534 123 543 130 549 140 556 152 562 161 566 171 571 181 575 191 580 202 582 411 537 388 531 368 527 346 522 328 518 311 514 291 510 273 505 253 500 238 496 225 490 213 484 201 477 196 470 192 463 192 456 192 451 196 443 202 435 208 428 216 422 222 417 232 411 243 405 251 401 262 397 273 395 287 392 219 376 9999 9999
X2 3 0 1 -1 0 0 1 0.000 -1 0 0
X 181 625 200 614 216 607 235 603 257 604 288 608 320 614 360 624 389 633 411 641 431 650 450 661 462 670 473 684 481 700 485 716 484 734 479 747 470 761 459 771 443 781 424 788 407 793 385 797 358 801 330 803 301 804 282 802 259 798 233 790 209 780 191 768 175 755 159 739 150 720 145 708 143 695 143 679 146 667 154 652 166 637 181 625 9999 9999
X2 3 0 1 -1 2 0 11 0.000 -1 0 0
X 409 536 436 543 457 550 474 557 491 566 507 576 522 588 530 597 538 608 546 621 554 637 556 651 558 663 557 682 555 701 551 715 546 728 542 739 533 751 524 761 515 771 503 783 488 796 473 807 453 818 435 827 416 834 397 840 375 844 355 848 335 851 318 853 298 854 273 854 252 852 234 850 211 847 189 843 163 836 144 829 129 822 117 814 101 803 90 792 76 777 65 761 58 749 54 735 52 719 53 704 58 687 64 672 75 656 89 640 102 627 117 615 129 608 144 600 159 594 177 590 188 585 190 579 409 536 9999 9999
/
echo x - g.mf
sed '/^X/s///' > g.mf << '/'
Xbeginchar("g", 580fig#, 475fig#, 360fig#); "The letter g";
Xunfill
X (188fig, 361fig) --
X (197fig, 381fig) --
X (208fig, 395fig) --
X (221fig, 407fig) --
X (233fig, 416fig) --
X (246fig, 422fig) --
X (259fig, 426fig) --
X (278fig, 429fig) --
X (298fig, 427fig) --
X (314fig, 421fig) --
X (325fig, 416fig) --
X (337fig, 404fig) --
X (347fig, 392fig) --
X (355fig, 378fig) --
X (363fig, 361fig) --
X (370fig, 346fig) --
X (375fig, 325fig) --
X (379fig, 305fig) --
X (381fig, 285fig) --
X (381fig, 268fig) --
X (380fig, 243fig) --
X (377fig, 219fig) --
X (375fig, 204fig) --
X (370fig, 186fig) --
X (364fig, 168fig) --
X (358fig, 156fig) --
X (348fig, 143fig) --
X (331fig, 132fig) --
X (312fig, 124fig) --
X (298fig, 120fig) --
X (282fig, 118fig) --
X (261fig, 119fig) --
X (242fig, 124fig) --
X (226fig, 132fig) --
X (214fig, 139fig) --
X (204fig, 152fig) --
X (192fig, 171fig) --
X (183fig, 190fig) --
X (176fig, 211fig) --
X (173fig, 231fig) --
X (170fig, 259fig) --
X (172fig, 287fig) --
X (175fig, 310fig) --
X (179fig, 330fig) --
X (184fig, 346fig) --
Xcycle;
Xfill
X (213fig, 450fig) --
X (242fig, 452fig) --
X (272fig, 454fig) --
X (307fig, 454fig) --
X (329fig, 452fig) --
X (348fig, 449fig) --
X (369fig, 446fig) --
X (390fig, 442fig) --
X (405fig, 438fig) --
X (425fig, 436fig) --
X (523fig, 440fig) --
X (535fig, 439fig) --
X (539fig, 434fig) --
X (543fig, 422fig) --
X (545fig, 409fig) --
X (543fig, 396fig) --
X (538fig, 388fig) --
X (531fig, 386fig) --
X (475fig, 388fig) --
X (446fig, 390fig) --
X (439fig, 389fig) --
X (434fig, 384fig) --
X (436fig, 380fig) --
X (442fig, 375fig) --
X (450fig, 364fig) --
X (459fig, 353fig) --
X (473fig, 327fig) --
X (480fig, 309fig) --
X (483fig, 287fig) --
X (485fig, 258fig) --
X (483fig, 229fig) --
X (478fig, 213fig) --
X (470fig, 190fig) --
X (459fig, 170fig) --
X (446fig, 155fig) --
X (432fig, 143fig) --
X (413fig, 130fig) --
X (393fig, 117fig) --
X (371fig, 108fig) --
X (348fig, 101fig) --
X (324fig, 94fig) --
X (304fig, 90fig) --
X (280fig, 87fig) --
X (254fig, 87fig) --
X (230fig, 91fig) --
X (212fig, 98fig) --
X (187fig, 106fig) --
X (160fig, 119fig) --
X (144fig, 131fig) --
X (118fig, 151fig) --
X (99fig, 170fig) --
X (86fig, 189fig) --
X (75fig, 210fig) --
X (70fig, 229fig) --
X (67fig, 246fig) --
X (65fig, 269fig) --
X (67fig, 290fig) --
X (69fig, 307fig) --
X (78fig, 331fig) --
X (86fig, 351fig) --
X (97fig, 368fig) --
X (106fig, 382fig) --
X (116fig, 395fig) --
X (127fig, 407fig) --
X (138fig, 417fig) --
X (152fig, 426fig) --
X (166fig, 433fig) --
X (179fig, 439fig) --
X (189fig, 443fig) --
X (209fig, 449fig) --
Xcycle;
Xfill
X (200fig, 103fig) --
X (186fig, 97fig) --
X (168fig, 91fig) --
X (148fig, 82fig) --
X (135fig, 74fig) --
X (122fig, 66fig) --
X (110fig, 56fig) --
X (100fig, 45fig) --
X (94fig, 36fig) --
X (88fig, 23fig) --
X (84fig, 12fig) --
X (81fig, 0fig) --
X (81fig, -14fig) --
X (83fig, -25fig) --
X (87fig, -37fig) --
X (91fig, -47fig) --
X (97fig, -55fig) --
X (104fig, -64fig) --
X (111fig, -70fig) --
X (121fig, -77fig) --
X (133fig, -83fig) --
X (142fig, -87fig) --
X (152fig, -92fig) --
X (162fig, -96fig) --
X (172fig, -101fig) --
X (183fig, -103fig) --
X (392fig, -58fig) --
X (369fig, -52fig) --
X (349fig, -48fig) --
X (327fig, -43fig) --
X (309fig, -39fig) --
X (292fig, -35fig) --
X (272fig, -31fig) --
X (254fig, -26fig) --
X (234fig, -21fig) --
X (219fig, -17fig) --
X (206fig, -11fig) --
X (194fig, -5fig) --
X (182fig, 2fig) --
X (177fig, 9fig) --
X (173fig, 16fig) --
X (173fig, 23fig) --
X (173fig, 28fig) --
X (177fig, 36fig) --
X (183fig, 44fig) --
X (189fig, 51fig) --
X (197fig, 57fig) --
X (203fig, 62fig) --
X (213fig, 68fig) --
X (224fig, 74fig) --
X (232fig, 78fig) --
X (243fig, 82fig) --
X (254fig, 84fig) --
X (268fig, 87fig) --
Xcycle;
Xunfill
X (162fig, -146fig) --
X (181fig, -135fig) --
X (197fig, -128fig) --
X (216fig, -124fig) --
X (238fig, -125fig) --
X (269fig, -129fig) --
X (301fig, -135fig) --
X (341fig, -145fig) --
X (370fig, -154fig) --
X (392fig, -162fig) --
X (412fig, -171fig) --
X (431fig, -182fig) --
X (443fig, -191fig) --
X (454fig, -205fig) --
X (462fig, -221fig) --
X (466fig, -237fig) --
X (465fig, -255fig) --
X (460fig, -268fig) --
X (451fig, -282fig) --
X (440fig, -292fig) --
X (424fig, -302fig) --
X (405fig, -309fig) --
X (388fig, -314fig) --
X (366fig, -318fig) --
X (339fig, -322fig) --
X (311fig, -324fig) --
X (282fig, -325fig) --
X (263fig, -323fig) --
X (240fig, -319fig) --
X (214fig, -311fig) --
X (190fig, -301fig) --
X (172fig, -289fig) --
X (156fig, -276fig) --
X (140fig, -260fig) --
X (131fig, -241fig) --
X (126fig, -229fig) --
X (124fig, -216fig) --
X (124fig, -200fig) --
X (127fig, -188fig) --
X (135fig, -173fig) --
X (147fig, -158fig) --
Xcycle;
Xfill
X (390fig, -57fig) --
X (417fig, -64fig) --
X (438fig, -71fig) --
X (455fig, -78fig) --
X (472fig, -87fig) --
X (488fig, -97fig) --
X (503fig, -109fig) --
X (511fig, -118fig) --
X (519fig, -129fig) --
X (527fig, -142fig) --
X (535fig, -158fig) --
X (537fig, -172fig) --
X (539fig, -184fig) --
X (538fig, -203fig) --
X (536fig, -222fig) --
X (532fig, -236fig) --
X (527fig, -249fig) --
X (523fig, -260fig) --
X (514fig, -272fig) --
X (505fig, -282fig) --
X (496fig, -292fig) --
X (484fig, -304fig) --
X (469fig, -317fig) --
X (454fig, -328fig) --
X (434fig, -339fig) --
X (416fig, -348fig) --
X (397fig, -355fig) --
X (378fig, -361fig) --
X (356fig, -365fig) --
X (336fig, -369fig) --
X (316fig, -372fig) --
X (299fig, -374fig) --
X (279fig, -375fig) --
X (254fig, -375fig) --
X (233fig, -373fig) --
X (215fig, -371fig) --
X (192fig, -368fig) --
X (170fig, -364fig) --
X (144fig, -357fig) --
X (125fig, -350fig) --
X (110fig, -343fig) --
X (98fig, -335fig) --
X (82fig, -324fig) --
X (71fig, -313fig) --
X (57fig, -298fig) --
X (46fig, -282fig) --
X (39fig, -270fig) --
X (35fig, -256fig) --
X (33fig, -240fig) --
X (34fig, -225fig) --
X (39fig, -208fig) --
X (45fig, -193fig) --
X (56fig, -177fig) --
X (70fig, -161fig) --
X (83fig, -148fig) --
X (98fig, -136fig) --
X (110fig, -129fig) --
X (125fig, -121fig) --
X (140fig, -115fig) --
X (158fig, -111fig) --
X (169fig, -106fig) --
X (171fig, -100fig) --
Xcycle;
Xendchar;
/
echo x - perpn10.mf
sed '/^X/s///' > perpn10.mf << '/'
X% \mode=localfont; %mag=\magstep 6;
Xmode_setup;
Xscreenstrokes;
X
Xfont_identifier:="PERPN10";
Xfig#= pt#/108;
Xfig:=pt/108;
X
Xinput b;
Xreadstring;
Xinput g;
Xreadstring;
Xbye;
/
Warren Toomey VK1XWT, on the path to insanity
No longer in the bowels of ADFA Comp Science.
`Version 7 Job Control: just use ptrace(2).'
Technical Details
Message-ID:
<1992May11.012359.20864@sserve.cc.adfa.oz.au>Path:
arc1-ca.pugleaf.net!sparky!uunet!munnari.oz.au!manuel!sserve!rodos1!wktShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: f9e16,d502e9c0b0880322,start X-Google-Attributes: gidf9e16,public X-Google-Thread: f4a99,d502e9c0b0880322,start X-Google-Attributes: gidf4a99,public X-Google-ArrivalTime: 1992-05-10 18:23:59 PST Newsgroups: comp.text.tex,aus.tex Path: arc1-ca.pugleaf.net!sparky!uunet!munnari.oz.au!manuel!sserve!rodos1!wkt From: wkt@rodos1.cs.adfa.oz.au (Warren Toomey) Subject: SRC: Convert fig(1) figures to Metafont code Message-ID: <1992May11.012359.20864@sserve.cc.adfa.oz.au> Keywords: fig metafont outline character Sender: news@sserve.cc.adfa.oz.au Organization: Australian Defence Force Academy, Canberra, Australia Date: Mon, 11 May 1992 01:23:59 GMT Lines: 927