label 1, 9998, 9999; {:6} {11:} const memmax = 30000; maxinternal = 100; bufsize = 500; errorline = 79; halferrorline = 50; maxprintline = 79; screenwidth = 1024; screendepth = 1024; stacksize = 30; maxstrings = 2000; stringvacancies = 8000; poolsize = 32000; movesize = 5000; maxwiggle = 300; gfbufsize = 800; filenamesize = 256; poolname = 'mf.pool'; pathsize = 300; bistacksize = 785; headersize = 100; ligtablesize = 300; maxfontdimen = 50; {:11} {18:} type ASCIIcode = 0..127; {:18} {24:} eightbits = 0..255; alphafile = text; {------------------} postscript = text; {------------------} UNIXfilename = packed array [1..filenamesize] of char; bytefile = record stdioptr: ^ integer; locptr: ^ integer; filename: UNIXfilename end; {:24} {37:} poolpointer = 0..poolsize; strnumber = 0..maxstrings; {:37} {101:} scaled = integer; smallnumber = 0..63; {:101} {105:} fraction = integer; {:105} {106:} angle = integer; {:106} {156:} quarterword = -128..127; halfword = -32768..32767; twochoices = 1..2; threechoices = 1..3; twohalves = packed record rh: halfword; case twochoices of 1: ( lh: halfword ); 2: ( b0: quarterword; b1: quarterword ) end; fourquarters = packed record b0: quarterword; b1: quarterword; b2: quarterword; b3: quarterword end; memoryword = record case threechoices of 1: ( int: integer ); 2: ( hh: twohalves ); 3: ( qqqq: fourquarters ) end; wordfile = file of memoryword; {:156} {186:} commandcode = 1..82; {:186} {565:} screenrow = 0..screendepth; screencol = 0..screenwidth; transspec = array [screencol] of screencol; pixelcolor = 0..1; {:565} {571:} windownumber = 0..15; {:571} {627:} instaterecord = record indexfield: quarterword; startfield, locfield, limitfield, namefield: halfword end; {:627} {1151:} gfindex = 0..gfbufsize; gfbuftype = array [gfindex] of eightbits; {:1151} {13:} var bad: integer; {:13} {20:} xord: array [char] of ASCIIcode; xchr: array [ASCIIcode] of char; {:20} {25:} nameoffile, realnameoffile: UNIXfilename; namelength: 0..filenamesize; {:25} {29:} buffer: array [0..bufsize] of ASCIIcode; first: 0..bufsize; last: 0..bufsize; maxbufstack: 0..bufsize; {:29} {38:} strpool: packed array [poolpointer] of ASCIIcode; strstart: array [strnumber] of poolpointer; poolptr: poolpointer; strptr: strnumber; initpoolptr: poolpointer; initstrptr: strnumber; maxpoolptr: poolpointer; maxstrptr: strnumber; {:38} {42:} strref: array [strnumber] of 0..127; {:42} {50:} poolfile: alphafile; {:50} {54:} logfile: alphafile; {-------------------------------------------------------------} psfile :postscript; { the PostScript code } g :postscript; { holds the character information after re-arrange} lastx0 , lasty0 :real ; { last point in sunpath } lastx3 , lasty3 :real ; { make optimization on commands } prevtox3 , prevtoy3 :real; lastyearval , { mark entering to macros } lastmonthval :integer; { STROKE , FILL , and ERASE } { in MY plain.mf } my_xx , my_yy :integer; { hold the values of xx & yy } LineSource : integer; { Identifier for sendline source } CurveSource : integer; { Identifier for makemoves source } foundnew : boolean; { true while xchr[s]='[' until ']' } ascval : integer; { holds the ascii of curr. letter } ascii_on : boolean; { reading ascval is 'on' } {-------------------------------------------------------------} selector: 0..5; dig: array [0..22] of 0..15; tally: integer; termoffset: 0..maxprintline; fileoffset: 0..maxprintline; trickbuf: array [0..errorline] of ASCIIcode; trickcount: integer; firstcount: integer; {:54} {68:} interaction: 0..3; {:68} {71:} deletionsallowed: boolean; history: 0..3; errorcount: -1..100; {:71} {74:} helpline: array [0..5] of strnumber; helpptr: 0..6; useerrhelp: boolean; errhelp: strnumber; {:74} {91:} interrupt: integer; OKtointerrupt: boolean; {:91} {97:} aritherror: boolean; {:97} {129:} twotothe: array [0..30] of integer; speclog: array [1..28] of integer; {:129} {137:} specatan: array [1..26] of angle; {:137} {144:} nsin, ncos: fraction; {:144} {148:} randoms: array [0..54] of fraction; jrandom: 0..54; {:148} {158:} tempptr: halfword; {:158} {159:} mem: array [-30000..memmax] of memoryword; lomemmax: halfword; himemmin: halfword; {:159} {160:} varused, dynused: integer; {:160} {161:} avail: halfword; memend: halfword; {:161} {166:} rover: halfword; {:166} {178:} freearr: packed array [-30000..memmax] of boolean; wasfree: packed array [-30000..memmax] of boolean; wasmemend, waslomax, washimin: halfword; panicking: boolean; {:178} {190:} internal: array [1..maxinternal] of scaled; intname: array [1..maxinternal] of strnumber; intptr: 40..maxinternal; {:190} {196:} oldsetting: 0..5; {:196} {198:} charclass: array [ASCIIcode] of 0..20; {:198} {200:} hashused: halfword; stcount: integer; {:200} {201:} hash: array [1..2241] of twohalves; eqtb: array [1..2241] of twohalves; {:201} {225:} gpointer: halfword; {:225} {230:} bignodesize: array [13..14] of smallnumber; {:230} {250:} saveptr: halfword; {:250} {267:} pathtail: halfword; {:267} {279:} deltax, deltay, delta: array [0..pathsize] of scaled; psi: array [1..pathsize] of angle; {:279} {283:} theta: array [0..pathsize] of angle; uu: array [0..pathsize] of fraction; vv: array [0..pathsize] of angle; ww: array [0..pathsize] of fraction; {:283} {298:} st, ct, sf, cf: fraction; {:298} {308:} move: array [0..movesize] of integer; moveptr: 0..movesize; {:308} {309:} bisectstack: array [0..bistacksize] of integer; bisectptr: 0..bistacksize; {:309} {327:} curedges: halfword; curwt: integer; {:327} {371:} tracex: integer; tracey: integer; traceyy: integer; {:371} {379:} octant: 1..8; {:379} {389:} curx, cury: scaled; {:389} {395:} octantdir: array [1..8] of strnumber; {:395} {403:} curspec: halfword; turningnumber: integer; curpen: halfword; curpathtype: 0..2; maxallowed: scaled; {:403} {427:} before, after: array [0..maxwiggle] of scaled; nodetoround: array [0..maxwiggle] of halfword; curroundingptr: 0..maxwiggle; maxroundingptr: 0..maxwiggle; {:427} {430:} curgran: scaled; {:430} {448:} octantnumber: array [1..8] of 1..8; octantcode: array [1..8] of 1..8; {:448} {455:} revturns: boolean; {:455} {461:} ycorr, xycorr, zcorr: array [1..8] of 0..1; xcorr: array [1..8] of -1..1; {:461} {464:} m0, n0, m1, n1: integer; d0, d1: 0..1; {:464} {507:} envmove: array [0..movesize] of integer; {:507} {552:} tolstep: 0..6; {:552} {555:} curt, curtt: integer; timetogo: integer; maxt: integer; {:555} {557:} delx, dely: integer; tol: integer; uv, xy: 0..bistacksize; threel: integer; apprt, apprtt: integer; {:557} {566:} {screenpixel:array[screenrow,screencol]of pixelcolor;} {:566} {569:} screenstarted: boolean; screenOK: boolean; {:569} {572:} windowopen: array [windownumber] of boolean; leftcol: array [windownumber] of screencol; rightcol: array [windownumber] of screencol; toprow: array [windownumber] of screenrow; botrow: array [windownumber] of screenrow; mwindow: array [windownumber] of integer; nwindow: array [windownumber] of integer; windowtime: array [windownumber] of integer; {:572} {579:} rowtransition: transspec; {:579} {585:} serialno: integer; {:585} {592:} fixneeded: boolean; watchcoefs: boolean; depfinal: halfword; {:592} {624:} curcmd: eightbits; curmod: integer; cursym: halfword; {:624} {628:} inputstack: array [0..stacksize] of instaterecord; inputptr: 0..stacksize; maxinstack: 0..stacksize; curinput: instaterecord; {:628} {631:} inopen: 0..6; inputfile: array [1..6] of alphafile; line: integer; linestack: array [1..6] of integer; {:631} {633:} paramstack: array [0..150] of halfword; paramptr: 0..150; maxparamstack: integer; {:633} {634:} fileptr: 0..stacksize; {:634} {659:} scannerstatus: 0..6; warninginfo: integer; {:659} {680:} forceeof: boolean; {:680} {699:} bgloc, egloc: 1..2241; {:699} {738:} condptr: halfword; iflimit: 0..4; curif: smallnumber; ifline: integer; {:738} {752:} loopptr: halfword; {:752} {767:} curname: strnumber; curarea: strnumber; curext: strnumber; {:767} {768:} areadelimiter: poolpointer; extdelimiter: poolpointer; {:768} {775:} MFbasedefault: packed array [1..10] of char; {:775} {782:} jobname: strnumber; logname: strnumber; {:782} {785:} gfext: strnumber; {:785} {791:} gffile: bytefile; outputfilename: strnumber; {:791} {796:} curtype: smallnumber; curexp: integer; {:796} {813:} maxc: array [17..18] of integer; maxptr: array [17..18] of halfword; maxlink: array [17..18] of halfword; {:813} {821:} varflag: 0..82; {:821} {954:} txx, txy, tyx, tyy, tx, ty: scaled; {:954} {1077:} startsym: halfword; {:1077} {1084:} longhelpseen: boolean; {:1084} {1087:} tfmfile: bytefile; metricfilename: strnumber; {:1087} {1096:} bc, ec: eightbits; tfmwidth: array [eightbits] of scaled; tfmheight: array [eightbits] of scaled; tfmdepth: array [eightbits] of scaled; tfmitalcorr: array [eightbits] of scaled; charexists: array [eightbits] of boolean; chartag: array [eightbits] of 0..3; charremainder: array [eightbits] of eightbits; headerbyte: array [1..headersize] of -1..255; ligkern: array [0..ligtablesize] of fourquarters; nl: 0..ligtablesize; kern: array [eightbits] of scaled; nk: 0..256; exten: array [eightbits] of fourquarters; ne: 0..256; param: array [1..maxfontdimen] of scaled; np: 0..maxfontdimen; nw, nh, nd, ni: 0..256; {:1096} {1119:} perturbation: scaled; {:1119} {1125:} dimenhead: array [1..4] of halfword; {:1125} {1130:} maxtfmdimen: scaled; tfmchanged: integer; {:1130} {1149:} gfminm, gfmaxm, gfminn, gfmaxn: integer; gfprevptr: integer; totalchars: integer; charptr: array [eightbits] of integer; gfdx, gfdy: array [eightbits] of integer; {:1149} {1152:} gfbuf: gfbuftype; halfbuf: gfindex; gflimit: gfindex; gfptr: gfindex; gfoffset: integer; {:1152} {1162:} bocc, bocp: integer; {:1162} {1183:} baseident: strnumber; {:1183} {1188:} basefile: wordfile; {:1188} {1203:} readyalready: integer; {:1203} {1214:} editnamestart: poolpointer; editnamelength, editline: integer; {:1214} procedure unskew(x, y: scaled; octant: smallnumber);external; procedure sendcurve(x0,x1,x2,x3,y0,y1,y2,y3,octant:integer);external; procedure sendline(x0,y0,x1,y1,octant,LineSource:integer);external; procedure confusion(s: strnumber);external; function abvscd(a, b, c, d: integer): integer;external; procedure makemoves(xx0, xx1, xx2, xx3, yy0, yy1, yy2, yy3: scaled; xicorr, etacorr: smallnumber;CurveSource:integer;oc:smallnumber);external; procedure print_start(var f:postscript);external; procedure print_end(var f:postscript);external; procedure init_ps(var f:postscript);external; procedure tini_ps(var f:postscript);external; procedure auxslowprint(s: integer);external; procedure auxprintnl(s: strnumber);external; procedure sendascii(asc: integer);external;