Plan 9 from Bell Labs’s /usr/web/sources/contrib/steve/root/sys/src/cmd/tex/web2c/mf/x2b
{This file is concatenated by ./convert to the beginning of the Pascal code that tangle outputs. The idea is to put all these symbols, which can be defined as macros or functions, or as part of standard C, into web2c's symbol table, so that we can access them from a change file . Some are standard Pascal functions, others are simply used in our implementation . web2c.yacc can parse these @define statements.} {The fields in the memory_word structure, defined in `mfware/gftodmem.h' and `common/texmf.h'.} @define @field qqqq; @define @field sc; {These fields are the ones defined by the getopt library.} @define @field name; @define @field hasarg; @define @field flag; @define @field val; {This is used by \TeX--XeT.} {@define @field rh;} @define const false; @define const FOPENRBINMODE; @define const FOPENRMODE; @define const input; @define const kpsebibformat; @define const kpsebstformat; @define const kpsedvipsconfigformat; @define const kpsegfformat; @define const kpsemfformat; @define const kpsemfpoolformat; @define const kpsemftformat; @define const kpsempformat; @define const kpsemppoolformat; @define const kpseocpformat; @define const kpseofmformat; @define const kpseoplformat; @define const kpseotpformat; @define const kpseovfformat; @define const kpseovpformat; @define const kpsepkformat; @define const kpsetexformat; @define const kpsetexpoolformat; @define const kpsetfmformat; @define const kpsevfformat; @define const maxint; @define const nil; @define const output; @define const stderr; @define const stdin; @define const stdout; @define const true; @define const BIBTEXHELP; @define const DVICOPYHELP; @define const DVITOMPHELP; @define const DVITYPEHELP; @define const ETEXHELP; @define const GFTODVIHELP; @define const GFTOPKHELP; @define const GFTYPEHELP; @define const MFTHELP; @define const ODVICOPYHELP; @define const ODVITYPEHELP; @define const OFM2OPLHELP; @define const OMEGAHELP; @define const OPL2OFMHELP; @define const OTANGLEHELP; @define const OVP2OVFHELP; @define const OVF2OVPHELP; @define const PATGENHELP; @define const PDFTEXHELP; @define const PKTOGFHELP; @define const PKTYPEHELP; @define const PLTOTFHELP; @define const POOLTYPEHELP; @define const TANGLEHELP; @define const TFTOPLHELP; @define const VFTOVPHELP; @define const VPTOVFHELP; @define const WEAVEHELP; @define function abs (); @define function addressof (); @define function aopenin (); @define function aopenout (); @define function atof (); @define function atoi (); @define function atou (); @define function basename (); @define function basenamechangesuffix (); @define function casttobytepointer (); @define function chartostring (); @define function chr (); @define function cmdline (); @define function eof (); @define function eoln (); @define function extendfilename (); @define function fabs (); @define function feof (); @define function findsuffix (); @define function ftell (); @define function fopen (); @define function getc (); @define function getoptlongonly (); @define function ISDIRSEP (); @define function kpsefindfile (); @define function kpsefindmf (); @define function kpsefindmft (); @define function kpsefindofm (); @define function kpsefindovf (); @define function kpsefindtex (); @define function kpsefindtfm (); @define function kpsefindvf (); @define function kpseopenfile (); @define function inputint (); @define function isprint (); @define function makebinaryfile (); @define function makesuffix (); @define function odd (); @define function ord (); @define function removesuffix (); @define function round (); @define function strcmp (); @define function strlen (); @define function strtol (); @define function toint (); @define function trunc (); @define function xftell (); @define function xmalloc (); @define function xrealloc (); @define function xstrdup (); @define function XTALLOC (); @define procedure aclose (); @define procedure BIBXRETALLOC (); {For BibTeX.} @define procedure decr (); @define procedure fflush (); {can't keep |break|, since it's a reserved word} @define procedure free (); @define procedure fprintreal (); @define procedure fputs (); @define procedure incr (); @define procedure input2ints (); @define procedure input3ints (); @define procedure kpseinitprog (); @define procedure kpsesetprogname (); @define procedure libcfree (); @define procedure printreal (); @define procedure printversionandexit (); @define procedure putbyte (); @define procedure read (); @define procedure readln (); @define procedure reset (); @define procedure resetbin (); @define procedure rewrite (); @define procedure rewritebin (); @define procedure setpaths (); @define procedure strcat (); @define procedure strcpy (); @define procedure usage (); @define procedure uexit (); @define procedure vgetc (); @define procedure write (); @define procedure writechunk (); @define procedure writeln (); @define procedure xfclose (); @define procedure xfseek (); @define type boolean = 0..1; @define type cinttype; @define type cstring; @define type char = 0..255; @define type getoptstruct; @define type integer; @define type memoryword; {for gftodvi, TeX, and Metafont} @define type pointertobyte; @define type real; @define type text; @define var argc; @define var argv; @define var kpathseaversionstring; @define var versionstring; {These are all set by getopt. optiontable is really _getopt_long_options.} @define var optarg; @define var optind; @define var optiontable; {4:}{9:}{$C-,A+,D-}ifdef('TEXMF_DEBUG'){$C+,D+}endif('TEXMF_DEBUG'){:9} program MF;label{6:}1,9998,9999;{:6}const{11:}maxinternal=300; bufsize=3000;screenwidth=1664;screendepth=1200;stacksize=300; maxstrings=7500;stringvacancies=74000;poolsize=100000;movesize=20000; maxwiggle=1000;poolname='mf.pool';pathsize=1000;bistacksize=1500; headersize=100;ligtablesize=15000;maxkerns=2500;maxfontdimen=60; infmainmemory=2999;supmainmemory=8000000;{:11}type{18:}ASCIIcode=0..255; {:18}{24:}eightbits=0..255;alphafile=packed file of ASCIIcode; bytefile=packed file of eightbits;{:24}{37:}poolpointer=0..poolsize; strnumber=0..maxstrings;packedASCIIcode=0..255;{:37}{101:} scaled=integer;smallnumber=0..63;{:101}{105:}fraction=integer;{:105} {106:}angle=integer;{:106}{156:}quarterword=0..255; halfword=0..268435455;twochoices=1..2;threechoices=1..3; #include "texmfmem.h";wordfile=file of memoryword;{:156}{186:} commandcode=1..85;{: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;{:1151}var{13:}bad:integer; ifdef('INIMF')iniversion:boolean;dumpoption:boolean;dumpline:boolean; endif('INIMF')bounddefault:integer;boundname:^char;mainmemory:integer; memtop:integer;memmax:integer;errorline:integer;halferrorline:integer; maxprintline:integer;gfbufsize:integer;{:13}{20:} xord:array[ASCIIcode]of ASCIIcode;xchr:array[ASCIIcode]of ASCIIcode; {:20}{25:}nameoffile:^ASCIIcode;namelength:0..maxint;{:25}{29:} buffer:array[0..bufsize]of ASCIIcode;first:0..bufsize;last:0..bufsize; maxbufstack:0..bufsize;{:29}{38:} strpool:packed array[poolpointer]of packedASCIIcode; 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:} ifdef('INIMF')poolfile:alphafile;endif('INIMF'){:50}{54:} logfile:alphafile;selector:0..5;dig:array[0..22]of 0..15;tally:integer; termoffset:0..maxprintline;fileoffset:0..maxprintline; trickbuf:array[0..255]of ASCIIcode;trickcount:integer; firstcount:integer;{:54}{68:}interaction:0..3;interactionoption:0..4; {: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}{159:} mem:^memoryword;lomemmax:halfword;himemmin:halfword;{:159}{160:} varused,dynused:integer;{:160}{161:}avail:halfword;memend:halfword; {:161}{166:}rover:halfword;{:166}{178:} ifdef('TEXMF_DEBUG')freearr:packed array[0..1]of boolean; wasfree:packed array[0..1]of boolean; wasmemend,waslomax,washimin:halfword;panicking:boolean; endif('TEXMF_DEBUG'){:178}{190:}internal:array[1..maxinternal]of scaled; intname:array[1..maxinternal]of strnumber;intptr:41..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..9769]of twohalves;eqtb:array[1..9769]of twohalves;{:201} {225:}gpointer:halfword;{:225}{230:}