Plan 9 from Bell Labs’s /usr/web/sources/contrib/steve/root/sys/src/cmd/tex/web2c/mp/mpini.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#define EXTERN extern
#include "mpd.h"

#ifdef INIMP
boolean 
#ifdef HAVE_PROTOTYPES
getstringsstarted ( void ) 
#else
getstringsstarted ( ) 
#endif
{
  /* 30 10 */ register boolean Result; unsigned char k, l  ;
  ASCIIcode m, n  ;
  strnumber g  ;
  integer a  ;
  boolean c  ;
  poolptr = 0 ;
  strptr = 0 ;
  maxpoolptr = 0 ;
  maxstrptr = 0 ;
  strstart [0 ]= 0 ;
  nextstr [0 ]= 1 ;
  stroverflowed = false ;
	;
#ifdef STAT
  poolinuse = 0 ;
  strsinuse = 0 ;
  maxplused = 0 ;
  maxstrsused = 0 ;
  pactcount = 0 ;
  pactchars = 0 ;
  pactstrs = 0 ;
#endif /* STAT */
  strsusedup = 0 ;
  {register integer for_end; k = 0 ;for_end = 255 ; if ( k <= for_end) do 
    {
      {
	strpool [poolptr ]= k ;
	incr ( poolptr ) ;
      } 
      g = makestring () ;
      strref [g ]= 127 ;
    } 
  while ( k++ < for_end ) ;} 
  namelength = strlen ( poolname ) ;
  nameoffile = xmalloc ( 1 + namelength + 1 ) ;
  strcpy ( (char*) nameoffile + 1 , poolname ) ;
  if ( aopenin ( poolfile , kpsemppoolformat ) ) 
  {
    c = false ;
    do {
	{ 
	if ( eof ( poolfile ) ) 
	{
	  ;
	  fprintf( stdout , "%s\n",  "! mp.pool has no check sum." ) ;
	  aclose ( poolfile ) ;
	  Result = false ;
	  goto lab10 ;
	} 
	read ( poolfile , m ) ;
	read ( poolfile , n ) ;
	if ( m == '*' ) 
	{
	  a = 0 ;
	  k = 1 ;
	  while ( true ) {
	      
	    if ( ( xord [n ]< 48 ) || ( xord [n ]> 57 ) ) 
	    {
	      ;
	      fprintf( stdout , "%s\n",                "! mp.pool check sum doesn't have nine digits." ) ;
	      aclose ( poolfile ) ;
	      Result = false ;
	      goto lab10 ;
	    } 
	    a = 10 * a + xord [n ]- 48 ;
	    if ( k == 9 ) 
	    goto lab30 ;
	    incr ( k ) ;
	    read ( poolfile , n ) ;
	  } 
	  lab30: if ( a != 136687108L ) 
	  {
	    ;
	    fprintf( stdout , "%s\n",              "! mp.pool doesn't match; tangle me again (or fix the path)." ) ;
	    aclose ( poolfile ) ;
	    Result = false ;
	    goto lab10 ;
	  } 
	  c = true ;
	} 
	else {
	    
	  if ( ( xord [m ]< 48 ) || ( xord [m ]> 57 ) || ( xord [n ]< 48 
	  ) || ( xord [n ]> 57 ) ) 
	  {
	    ;
	    fprintf( stdout , "%s\n",  "! mp.pool line doesn't begin with two digits."             ) ;
	    aclose ( poolfile ) ;
	    Result = false ;
	    goto lab10 ;
	  } 
	  l = xord [m ]* 10 + xord [n ]- 48 * 11 ;
	  if ( poolptr + l + stringvacancies > poolsize ) 
	  {
	    ;
	    fprintf( stdout , "%s\n",  "! You have to increase POOLSIZE." ) ;
	    aclose ( poolfile ) ;
	    Result = false ;
	    goto lab10 ;
	  } 
	  if ( strptr + stringsvacant >= maxstrings ) 
	  {
	    ;
	    fprintf( stdout , "%s\n",  "! You have to increase MAXSTRINGS." ) ;
	    aclose ( poolfile ) ;
	    Result = false ;
	    goto lab10 ;
	  } 
	  {register integer for_end; k = 1 ;for_end = l ; if ( k <= for_end) 
	  do 
	    {
	      if ( eoln ( poolfile ) ) 
	      m = ' ' ;
	      else read ( poolfile , m ) ;
	      {
		strpool [poolptr ]= xord [m ];
		incr ( poolptr ) ;
	      } 
	    } 
	  while ( k++ < for_end ) ;} 
	  readln ( poolfile ) ;
	  g = makestring () ;
	  strref [g ]= 127 ;
	} 
      } 
    } while ( ! ( c ) ) ;
    aclose ( poolfile ) ;
    Result = true ;
  } 
  else {
      
    ;
    fprintf( stdout , "%s\n",  "! I can't read mp.pool; bad path?" ) ;
    aclose ( poolfile ) ;
    Result = false ;
    goto lab10 ;
  } 
  lastfixedstr = strptr - 1 ;
  fixedstruse = strptr ;
  lab10: ;
  return Result ;
} 
#endif /* INIMP */
#ifdef INIMP
void 
#ifdef HAVE_PROTOTYPES
sortavail ( void ) 
#else
sortavail ( ) 
#endif
{
  halfword p, q, r  ;
  halfword oldrover  ;
  p = getnode ( 1073741824L ) ;
  p = mem [rover + 1 ].hhfield .v.RH ;
  mem [rover + 1 ].hhfield .v.RH = 268435455L ;
  oldrover = rover ;
  while ( p != oldrover ) if ( p < rover ) 
  {
    q = p ;
    p = mem [q + 1 ].hhfield .v.RH ;
    mem [q + 1 ].hhfield .v.RH = rover ;
    rover = q ;
  } 
  else {
      
    q = rover ;
    while ( mem [q + 1 ].hhfield .v.RH < p ) q = mem [q + 1 ].hhfield 
    .v.RH ;
    r = mem [p + 1 ].hhfield .v.RH ;
    mem [p + 1 ].hhfield .v.RH = mem [q + 1 ].hhfield .v.RH ;
    mem [q + 1 ].hhfield .v.RH = p ;
    p = r ;
  } 
  p = rover ;
  while ( mem [p + 1 ].hhfield .v.RH != 268435455L ) {
      
    mem [mem [p + 1 ].hhfield .v.RH + 1 ].hhfield .lhfield = p ;
    p = mem [p + 1 ].hhfield .v.RH ;
  } 
  mem [p + 1 ].hhfield .v.RH = rover ;
  mem [rover + 1 ].hhfield .lhfield = p ;
} 
#endif /* INIMP */
#ifdef INIMP
void 
#ifdef HAVE_PROTOTYPES
zprimitive ( strnumber s , halfword c , halfword o ) 
#else
zprimitive ( s , c , o ) 
  strnumber s ;
  halfword c ;
  halfword o ;
#endif
{
  poolpointer k  ;
  smallnumber j  ;
  smallnumber l  ;
  k = strstart [s ];
  l = strstart [nextstr [s ]]- k ;
  {register integer for_end; j = 0 ;for_end = l - 1 ; if ( j <= for_end) do 
    buffer [j ]= strpool [k + j ];
  while ( j++ < for_end ) ;} 
  cursym = idlookup ( 0 , l ) ;
  if ( s >= 256 ) 
  {
    flushstring ( hash [cursym ].v.RH ) ;
    hash [cursym ].v.RH = s ;
  } 
  eqtb [cursym ].lhfield = c ;
  eqtb [cursym ].v.RH = o ;
} 
#endif /* INIMP */
void 
#ifdef HAVE_PROTOTYPES
startinput ( void ) 
#else
startinput ( ) 
#endif
{
  /* 30 */ integer j  ;
  while ( ( curinput .indexfield > 15 ) && ( curinput .locfield == 0 ) ) 
  endtokenlist () ;
  if ( ( curinput .indexfield > 15 ) ) 
  {
    {
      if ( interaction == 3 ) 
      ;
      printnl ( 262 ) ;
      print ( 799 ) ;
    } 
    {
      helpptr = 3 ;
      helpline [2 ]= 800 ;
      helpline [1 ]= 801 ;
      helpline [0 ]= 802 ;
    } 
    error () ;
  } 
  if ( ( curinput .indexfield <= 15 ) ) 
  scanfilename () ;
  else {
      
    curname = 284 ;
    curext = 284 ;
    curarea = 284 ;
  } 
  while ( true ) {
      
    beginfilereading () ;
    if ( tryextension ( 798 ) ) 
    goto lab30 ;
    else if ( tryextension ( 797 ) ) 
    goto lab30 ;
    else ;
    endfilereading () ;
    promptfilename ( 785 , 284 ) ;
  } 
  lab30: curinput .namefield = amakenamestring ( inputfile [curinput 
  .indexfield ]) ;
  if ( inamestack [curinput .indexfield ]== curname ) 
  {
    if ( strref [curname ]< 127 ) 
    incr ( strref [curname ]) ;
  } 
  if ( iareastack [curinput .indexfield ]== curarea ) 
  {
    if ( strref [curarea ]< 127 ) 
    incr ( strref [curarea ]) ;
  } 
  if ( jobname == 0 ) 
  {
    j = 1 ;
    beginname () ;
    while ( ( j <= namelength ) && ( morename ( (char*) nameoffile [j ]) ) ) incr ( 
    j ) ;
    endname () ;
    jobname = curname ;
    strref [jobname ]= 127 ;
	;
#ifdef INIMP
    if ( iniversion && dumpoption ) 
    {
      {
	if ( poolptr + memdefaultlength > maxpoolptr ) 
	if ( poolptr + memdefaultlength > poolsize ) 
	docompaction ( memdefaultlength ) ;
	else maxpoolptr = poolptr + memdefaultlength ;
      } 
      {register integer for_end; j = 1 ;for_end = memdefaultlength - 4 
      ; if ( j <= for_end) do 
	{
	  strpool [poolptr ]= xord [MPmemdefault [j ]];
	  incr ( poolptr ) ;
	} 
      while ( j++ < for_end ) ;} 
      jobname = makestring () ;
      strref [jobname ]= 127 ;
    } 
#endif /* INIMP */
    openlogfile () ;
  } 
  if ( termoffset + ( strstart [nextstr [curinput .namefield ]]- strstart 
  [curinput .namefield ]) > maxprintline - 2 ) 
  println () ;
  else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) ) 
  printchar ( 32 ) ;
  printchar ( 40 ) ;
  incr ( openparens ) ;
  print ( curinput .namefield ) ;
  fflush ( stdout ) ;
  {
    linestack [curinput .indexfield ]= 1 ;
    if ( inputln ( inputfile [curinput .indexfield ], false ) ) 
    ;
    firmuptheline () ;
    buffer [curinput .limitfield ]= 37 ;
    first = curinput .limitfield + 1 ;
    curinput .locfield = curinput .startfield ;
  } 
} 
#ifdef INIMP
void 
#ifdef HAVE_PROTOTYPES
storememfile ( void ) 
#else
storememfile ( ) 
#endif
{
  /* 30 */ integer k  ;
  halfword p, q  ;
  integer x  ;
  fourquarters w  ;
  strnumber s  ;
  selector = 4 ;
  print ( 1178 ) ;
  print ( jobname ) ;
  printchar ( 32 ) ;
  printint ( roundunscaled ( internal [13 ]) ) ;
  printchar ( 46 ) ;
  printint ( roundunscaled ( internal [14 ]) ) ;
  printchar ( 46 ) ;
  printint ( roundunscaled ( internal [15 ]) ) ;
  printchar ( 41 ) ;
  if ( interaction == 0 ) 
  selector = 9 ;
  else selector = 10 ;
  {
    if ( poolptr + 1 > maxpoolptr ) 
    if ( poolptr + 1 > poolsize ) 
    docompaction ( 1 ) ;
    else maxpoolptr = poolptr + 1 ;
  } 
  memident = makestring () ;
  strref [memident ]= 127 ;
  packjobname ( 784 ) ;
  while ( ! wopenout ( memfile ) ) promptfilename ( 1179 , 784 ) ;
  printnl ( 1180 ) ;
  s = wmakenamestring ( memfile ) ;
  print ( s ) ;
  flushstring ( s ) ;
  printnl ( memident ) ;
  dumpint ( 136687108L ) ;
  dumpint ( 0 ) ;
  dumpint ( memtop ) ;
  dumpint ( 9500 ) ;
  dumpint ( 7919 ) ;
  dumpint ( 15 ) ;
  docompaction ( poolsize ) ;
  dumpint ( poolptr ) ;
  dumpint ( maxstrptr ) ;
  dumpint ( strptr ) ;
  k = 0 ;
  while ( ( nextstr [k ]== k + 1 ) && ( k <= maxstrptr ) ) incr ( k ) ;
  dumpint ( k ) ;
  while ( k <= maxstrptr ) {
      
    dumpint ( nextstr [k ]) ;
    incr ( k ) ;
  } 
  k = 0 ;
  while ( true ) {
      
    dumpint ( strstart [k ]) ;
    if ( k == strptr ) 
    goto lab30 ;
    else k = nextstr [k ];
  } 
  lab30: k = 0 ;
  while ( k + 4 < poolptr ) {
      
    w .b0 = strpool [k ];
    w .b1 = strpool [k + 1 ];
    w .b2 = strpool [k + 2 ];
    w .b3 = strpool [k + 3 ];
    dumpqqqq ( w ) ;
    k = k + 4 ;
  } 
  k = poolptr - 4 ;
  w .b0 = strpool [k ];
  w .b1 = strpool [k + 1 ];
  w .b2 = strpool [k + 2 ];
  w .b3 = strpool [k + 3 ];
  dumpqqqq ( w ) ;
  println () ;
  print ( 1174 ) ;
  printint ( maxstrptr ) ;
  print ( 1175 ) ;
  printint ( poolptr ) ;
  sortavail () ;
  varused = 0 ;
  dumpint ( lomemmax ) ;
  dumpint ( rover ) ;
  p = 0 ;
  q = rover ;
  x = 0 ;
  do {
      { register integer for_end; k = p ;for_end = q + 1 ; if ( k <= 
    for_end) do 
      dumpwd ( mem [k ]) ;
    while ( k++ < for_end ) ;} 
    x = x + q + 2 - p ;
    varused = varused + q - p ;
    p = q + mem [q ].hhfield .lhfield ;
    q = mem [q + 1 ].hhfield .v.RH ;
  } while ( ! ( q == rover ) ) ;
  varused = varused + lomemmax - p ;
  dynused = memend + 1 - himemmin ;
  {register integer for_end; k = p ;for_end = lomemmax ; if ( k <= for_end) 
  do 
    dumpwd ( mem [k ]) ;
  while ( k++ < for_end ) ;} 
  x = x + lomemmax + 1 - p ;
  dumpint ( himemmin ) ;
  dumpint ( avail ) ;
  {register integer for_end; k = himemmin ;for_end = memend ; if ( k <= 
  for_end) do 
    dumpwd ( mem [k ]) ;
  while ( k++ < for_end ) ;} 
  x = x + memend + 1 - himemmin ;
  p = avail ;
  while ( p != 0 ) {
      
    decr ( dynused ) ;
    p = mem [p ].hhfield .v.RH ;
  } 
  dumpint ( varused ) ;
  dumpint ( dynused ) ;
  println () ;
  printint ( x ) ;
  print ( 1176 ) ;
  printint ( varused ) ;
  printchar ( 38 ) ;
  printint ( dynused ) ;
  dumpint ( hashused ) ;
  stcount = 9756 - hashused ;
  {register integer for_end; p = 1 ;for_end = hashused ; if ( p <= for_end) 
  do 
    if ( hash [p ].v.RH != 0 ) 
    {
      dumpint ( p ) ;
      dumphh ( hash [p ]) ;
      dumphh ( eqtb [p ]) ;
      incr ( stcount ) ;
    } 
  while ( p++ < for_end ) ;} 
  {register integer for_end; p = hashused + 1 ;for_end = 9771 ; if ( p <= 
  for_end) do 
    {
      dumphh ( hash [p ]) ;
      dumphh ( eqtb [p ]) ;
    } 
  while ( p++ < for_end ) ;} 
  dumpint ( stcount ) ;
  println () ;
  printint ( stcount ) ;
  print ( 1177 ) ;
  dumpint ( intptr ) ;
  {register integer for_end; k = 1 ;for_end = intptr ; if ( k <= for_end) do 
    {
      dumpint ( internal [k ]) ;
      dumpint ( intname [k ]) ;
    } 
  while ( k++ < for_end ) ;} 
  dumpint ( startsym ) ;
  dumpint ( interaction ) ;
  dumpint ( memident ) ;
  dumpint ( bgloc ) ;
  dumpint ( egloc ) ;
  dumpint ( serialno ) ;
  dumpint ( 69073L ) ;
  internal [10 ]= 0 ;
  wclose ( memfile ) ;
} 
#endif /* INIMP */
boolean 
#ifdef HAVE_PROTOTYPES
loadmemfile ( void ) 
#else
loadmemfile ( ) 
#endif
{
  /* 30 6666 10 */ register boolean Result; integer k  ;
  halfword p, q  ;
  integer x  ;
  strnumber s  ;
  fourquarters w  ;
  undumpint ( x ) ;
  if ( x != 136687108L ) 
  goto lab6666 ;
  undumpint ( x ) ;
  if ( x != 0 ) 
  goto lab6666 ;
	;
#ifdef INIMP
  if ( iniversion ) 
  {
    libcfree ( mem ) ;
    libcfree ( strref ) ;
    libcfree ( nextstr ) ;
    libcfree ( strstart ) ;
    libcfree ( strpool ) ;
  } 
#endif /* INIMP */
  undumpint ( memtop ) ;
  if ( memmax < memtop ) 
  memmax = memtop ;
  if ( 1100 > memtop ) 
  goto lab6666 ;
  xmallocarray ( mem , memmax - 0 ) ;
  undumpint ( x ) ;
  if ( x != 9500 ) 
  goto lab6666 ;
  undumpint ( x ) ;
  if ( x != 7919 ) 
  goto lab6666 ;
  undumpint ( x ) ;
  if ( x != 15 ) 
  goto lab6666 ;
  {
    undumpint ( x ) ;
    if ( x < 0 ) 
    goto lab6666 ;
    if ( x > suppoolsize - poolfree ) 
    {
      ;
      fprintf( stdout , "%s%s\n",  "---! Must increase the " , "string pool size" ) ;
      goto lab6666 ;
    } 
    else poolptr = x ;
  } 
  if ( poolsize < poolptr + poolfree ) 
  poolsize = poolptr + poolfree ;
  {
    undumpint ( x ) ;
    if ( x < 0 ) 
    goto lab6666 ;
    if ( x > supmaxstrings ) 
    {
      ;
      fprintf( stdout , "%s%s\n",  "---! Must increase the " , "max strings" ) ;
      goto lab6666 ;
    } 
    else maxstrptr = x ;
  } 
  xmallocarray ( strref , maxstrings ) ;
  xmallocarray ( nextstr , maxstrings ) ;
  xmallocarray ( strstart , maxstrings ) ;
  xmallocarray ( strpool , poolsize ) ;
  {
    undumpint ( x ) ;
    if ( ( x < 0 ) || ( x > maxstrptr ) ) 
    goto lab6666 ;
    else strptr = x ;
  } 
  {
    undumpint ( x ) ;
    if ( ( x < 0 ) || ( x > maxstrptr + 1 ) ) 
    goto lab6666 ;
    else s = x ;
  } 
  {register integer for_end; k = 0 ;for_end = s - 1 ; if ( k <= for_end) do 
    nextstr [k ]= k + 1 ;
  while ( k++ < for_end ) ;} 
  {register integer for_end; k = s ;for_end = maxstrptr ; if ( k <= for_end) 
  do 
    {
      undumpint ( x ) ;
      if ( ( x < s + 1 ) || ( x > maxstrptr + 1 ) ) 
      goto lab6666 ;
      else nextstr [k ]= x ;
    } 
  while ( k++ < for_end ) ;} 
  fixedstruse = 0 ;
  k = 0 ;
  while ( true ) {
      
    {
      undumpint ( x ) ;
      if ( ( x < 0 ) || ( x > poolptr ) ) 
      goto lab6666 ;
      else strstart [k ]= x ;
    } 
    if ( k == strptr ) 
    goto lab30 ;
    strref [k ]= 127 ;
    incr ( fixedstruse ) ;
    lastfixedstr = k ;
    k = nextstr [k ];
  } 
  lab30: k = 0 ;
  while ( k + 4 < poolptr ) {
      
    undumpqqqq ( w ) ;
    strpool [k ]= w .b0 ;
    strpool [k + 1 ]= w .b1 ;
    strpool [k + 2 ]= w .b2 ;
    strpool [k + 3 ]= w .b3 ;
    k = k + 4 ;
  } 
  k = poolptr - 4 ;
  undumpqqqq ( w ) ;
  strpool [k ]= w .b0 ;
  strpool [k + 1 ]= w .b1 ;
  strpool [k + 2 ]= w .b2 ;
  strpool [k + 3 ]= w .b3 ;
  initstruse = fixedstruse ;
  initpoolptr = poolptr ;
  maxpoolptr = poolptr ;
  strsusedup = fixedstruse ;
	;
#ifdef STAT
  poolinuse = strstart [strptr ];
  strsinuse = fixedstruse ;
  maxplused = poolinuse ;
  maxstrsused = strsinuse ;
  pactcount = 0 ;
  pactchars = 0 ;
  pactstrs = 0 ;
#endif /* STAT */
  {
    undumpint ( x ) ;
    if ( ( x < 1023 ) || ( x > memtop - 4 ) ) 
    goto lab6666 ;
    else lomemmax = x ;
  } 
  {
    undumpint ( x ) ;
    if ( ( x < 24 ) || ( x > lomemmax ) ) 
    goto lab6666 ;
    else rover = x ;
  } 
  p = 0 ;
  q = rover ;
  do {
      { register integer for_end; k = p ;for_end = q + 1 ; if ( k <= 
    for_end) do 
      undumpwd ( mem [k ]) ;
    while ( k++ < for_end ) ;} 
    p = q + mem [q ].hhfield .lhfield ;
    if ( ( p > lomemmax ) || ( ( q >= mem [q + 1 ].hhfield .v.RH ) && ( mem 
    [q + 1 ].hhfield .v.RH != rover ) ) ) 
    goto lab6666 ;
    q = mem [q + 1 ].hhfield .v.RH ;
  } while ( ! ( q == rover ) ) ;
  {register integer for_end; k = p ;for_end = lomemmax ; if ( k <= for_end) 
  do 
    undumpwd ( mem [k ]) ;
  while ( k++ < for_end ) ;} 
  {
    undumpint ( x ) ;
    if ( ( x < lomemmax + 1 ) || ( x > memtop - 3 ) ) 
    goto lab6666 ;
    else himemmin = x ;
  } 
  {
    undumpint ( x ) ;
    if ( ( x < 0 ) || ( x > memtop ) ) 
    goto lab6666 ;
    else avail = x ;
  } 
  memend = memtop ;
  {register integer for_end; k = himemmin ;for_end = memend ; if ( k <= 
  for_end) do 
    undumpwd ( mem [k ]) ;
  while ( k++ < for_end ) ;} 
  undumpint ( varused ) ;
  undumpint ( dynused ) ;
  {
    undumpint ( x ) ;
    if ( ( x < 1 ) || ( x > 9757 ) ) 
    goto lab6666 ;
    else hashused = x ;
  } 
  p = 0 ;
  do {
      { 
      undumpint ( x ) ;
      if ( ( x < p + 1 ) || ( x > hashused ) ) 
      goto lab6666 ;
      else p = x ;
    } 
    undumphh ( hash [p ]) ;
    undumphh ( eqtb [p ]) ;
  } while ( ! ( p == hashused ) ) ;
  {register integer for_end; p = hashused + 1 ;for_end = 9771 ; if ( p <= 
  for_end) do 
    {
      undumphh ( hash [p ]) ;
      undumphh ( eqtb [p ]) ;
    } 
  while ( p++ < for_end ) ;} 
  undumpint ( stcount ) ;
  {
    undumpint ( x ) ;
    if ( ( x < 33 ) || ( x > maxinternal ) ) 
    goto lab6666 ;
    else intptr = x ;
  } 
  {register integer for_end; k = 1 ;for_end = intptr ; if ( k <= for_end) do 
    {
      undumpint ( internal [k ]) ;
      {
	undumpint ( x ) ;
	if ( ( x < 0 ) || ( x > strptr ) ) 
	goto lab6666 ;
	else intname [k ]= x ;
      } 
    } 
  while ( k++ < for_end ) ;} 
  {
    undumpint ( x ) ;
    if ( ( x < 0 ) || ( x > 9757 ) ) 
    goto lab6666 ;
    else startsym = x ;
  } 
  {
    undumpint ( x ) ;
    if ( ( x < 0 ) || ( x > 3 ) ) 
    goto lab6666 ;
    else interaction = x ;
  } 
  if ( interactionoption != 4 ) 
  interaction = interactionoption ;
  {
    undumpint ( x ) ;
    if ( ( x < 0 ) || ( x > strptr ) ) 
    goto lab6666 ;
    else memident = x ;
  } 
  {
    undumpint ( x ) ;
    if ( ( x < 1 ) || ( x > 9771 ) ) 
    goto lab6666 ;
    else bgloc = x ;
  } 
  {
    undumpint ( x ) ;
    if ( ( x < 1 ) || ( x > 9771 ) ) 
    goto lab6666 ;
    else egloc = x ;
  } 
  undumpint ( serialno ) ;
  undumpint ( x ) ;
  if ( ( x != 69073L ) || feof ( memfile ) ) 
  goto lab6666 ;
  Result = true ;
  goto lab10 ;
  lab6666: ;
  fprintf( stdout , "%s\n",  "(Fatal mem file error; I'm stymied)" ) ;
  Result = false ;
  lab10: ;
  return Result ;
} 
void 
#ifdef HAVE_PROTOTYPES
finalcleanup ( void ) 
#else
finalcleanup ( ) 
#endif
{
  /* 10 */ smallnumber c  ;
  c = curmod ;
  if ( jobname == 0 ) 
  openlogfile () ;
  while ( inputptr > 0 ) if ( ( curinput .indexfield > 15 ) ) 
  endtokenlist () ;
  else endfilereading () ;
  while ( loopptr != 0 ) stopiteration () ;
  while ( openparens > 0 ) {
      
    print ( 1182 ) ;
    decr ( openparens ) ;
  } 
  while ( condptr != 0 ) {
      
    printnl ( 1183 ) ;
    printcmdmod ( 5 , curif ) ;
    if ( ifline != 0 ) 
    {
      print ( 1184 ) ;
      printint ( ifline ) ;
    } 
    print ( 1185 ) ;
    ifline = mem [condptr + 1 ].cint ;
    curif = mem [condptr ].hhfield .b1 ;
    condptr = mem [condptr ].hhfield .v.RH ;
  } 
  if ( history != 0 ) 
  if ( ( ( history == 1 ) || ( interaction < 3 ) ) ) 
  if ( selector == 10 ) 
  {
    selector = 8 ;
    printnl ( 1186 ) ;
    selector = 10 ;
  } 
  if ( c == 1 ) 
  {
	;
#ifdef INIMP
    if ( iniversion ) 
    {
      storememfile () ;
      goto lab10 ;
    } 
#endif /* INIMP */
    printnl ( 1187 ) ;
    goto lab10 ;
  } 
  lab10: ;
} 
#ifdef INIMP
void 
#ifdef HAVE_PROTOTYPES
initprim ( void ) 
#else
initprim ( ) 
#endif
{
  primitive ( 430 , 42 , 1 ) ;
  primitive ( 431 , 42 , 2 ) ;
  primitive ( 432 , 42 , 3 ) ;
  primitive ( 433 , 42 , 4 ) ;
  primitive ( 434 , 42 , 5 ) ;
  primitive ( 435 , 42 , 6 ) ;
  primitive ( 436 , 42 , 7 ) ;
  primitive ( 437 , 42 , 8 ) ;
  primitive ( 438 , 42 , 9 ) ;
  primitive ( 439 , 42 , 10 ) ;
  primitive ( 440 , 42 , 11 ) ;
  primitive ( 441 , 42 , 12 ) ;
  primitive ( 442 , 42 , 13 ) ;
  primitive ( 443 , 42 , 14 ) ;
  primitive ( 444 , 42 , 15 ) ;
  primitive ( 445 , 42 , 16 ) ;
  primitive ( 446 , 42 , 17 ) ;
  primitive ( 447 , 42 , 18 ) ;
  primitive ( 448 , 42 , 19 ) ;
  primitive ( 449 , 42 , 20 ) ;
  primitive ( 450 , 42 , 21 ) ;
  primitive ( 451 , 42 , 22 ) ;
  primitive ( 452 , 42 , 23 ) ;
  primitive ( 453 , 42 , 24 ) ;
  primitive ( 454 , 42 , 25 ) ;
  primitive ( 455 , 42 , 26 ) ;
  primitive ( 456 , 42 , 27 ) ;
  primitive ( 457 , 42 , 28 ) ;
  primitive ( 458 , 42 , 29 ) ;
  primitive ( 459 , 42 , 30 ) ;
  primitive ( 460 , 42 , 31 ) ;
  primitive ( 461 , 42 , 32 ) ;
  primitive ( 462 , 42 , 33 ) ;
  primitive ( 321 , 49 , 0 ) ;
  primitive ( 91 , 65 , 0 ) ;
  eqtb [9760 ]= eqtb [cursym ];
  primitive ( 93 , 66 , 0 ) ;
  primitive ( 125 , 67 , 0 ) ;
  primitive ( 123 , 48 , 0 ) ;
  primitive ( 58 , 80 , 0 ) ;
  eqtb [9762 ]= eqtb [cursym ];
  primitive ( 474 , 79 , 0 ) ;
  primitive ( 475 , 78 , 0 ) ;
  primitive ( 476 , 76 , 0 ) ;
  primitive ( 44 , 81 , 0 ) ;
  primitive ( 59 , 82 , 0 ) ;
  eqtb [9763 ]= eqtb [cursym ];
  primitive ( 92 , 10 , 0 ) ;
  primitive ( 477 , 20 , 0 ) ;
  primitive ( 478 , 61 , 0 ) ;
  primitive ( 479 , 34 , 0 ) ;
  bgloc = cursym ;
  primitive ( 480 , 59 , 0 ) ;
  primitive ( 481 , 62 , 0 ) ;
  primitive ( 482 , 29 , 0 ) ;
  primitive ( 468 , 83 , 0 ) ;
  eqtb [9767 ]= eqtb [cursym ];
  egloc = cursym ;
  primitive ( 483 , 28 , 0 ) ;
  primitive ( 484 , 9 , 0 ) ;
  primitive ( 485 , 12 , 0 ) ;
  primitive ( 486 , 15 , 0 ) ;
  primitive ( 487 , 16 , 0 ) ;
  primitive ( 488 , 17 , 0 ) ;
  primitive ( 489 , 70 , 0 ) ;
  primitive ( 490 , 26 , 0 ) ;
  primitive ( 491 , 14 , 0 ) ;
  primitive ( 492 , 11 , 0 ) ;
  primitive ( 493 , 19 , 0 ) ;
  primitive ( 494 , 77 , 0 ) ;
  primitive ( 495 , 30 , 0 ) ;
  primitive ( 496 , 72 , 0 ) ;
  primitive ( 497 , 37 , 0 ) ;
  primitive ( 498 , 60 , 0 ) ;
  primitive ( 499 , 71 , 0 ) ;
  primitive ( 500 , 73 , 0 ) ;
  primitive ( 501 , 74 , 0 ) ;
  primitive ( 502 , 31 , 0 ) ;
  primitive ( 681 , 1 , 0 ) ;
  primitive ( 682 , 1 , 1 ) ;
  primitive ( 465 , 2 , 0 ) ;
  eqtb [9768 ]= eqtb [cursym ];
  primitive ( 466 , 3 , 0 ) ;
  eqtb [9769 ]= eqtb [cursym ];
  primitive ( 695 , 18 , 1 ) ;
  primitive ( 696 , 18 , 2 ) ;
  primitive ( 697 , 18 , 55 ) ;
  primitive ( 698 , 18 , 46 ) ;
  primitive ( 699 , 18 , 51 ) ;
  primitive ( 469 , 18 , 0 ) ;
  eqtb [9765 ]= eqtb [cursym ];
  primitive ( 700 , 7 , 9772 ) ;
  primitive ( 701 , 7 , 9922 ) ;
  primitive ( 702 , 7 , 1 ) ;
  primitive ( 470 , 7 , 0 ) ;
  eqtb [9764 ]= eqtb [cursym ];
  primitive ( 703 , 63 , 0 ) ;
  primitive ( 704 , 63 , 1 ) ;
  primitive ( 64 , 63 , 2 ) ;
  primitive ( 705 , 63 , 3 ) ;
  primitive ( 716 , 58 , 9772 ) ;
  primitive ( 717 , 58 , 9922 ) ;
  primitive ( 718 , 58 , 10072 ) ;
  primitive ( 719 , 58 , 1 ) ;
  primitive ( 720 , 58 , 2 ) ;
  primitive ( 721 , 58 , 3 ) ;
  primitive ( 731 , 6 , 0 ) ;
  primitive ( 628 , 6 , 1 ) ;
  primitive ( 758 , 4 , 1 ) ;
  primitive ( 467 , 5 , 2 ) ;
  eqtb [9766 ]= eqtb [cursym ];
  primitive ( 759 , 5 , 3 ) ;
  primitive ( 760 , 5 , 4 ) ;
  primitive ( 347 , 35 , 30 ) ;
  primitive ( 348 , 35 , 31 ) ;
  primitive ( 349 , 35 , 32 ) ;
  primitive ( 350 , 35 , 33 ) ;
  primitive ( 351 , 35 , 34 ) ;
  primitive ( 352 , 35 , 35 ) ;
  primitive ( 353 , 35 , 36 ) ;
  primitive ( 354 , 35 , 37 ) ;
  primitive ( 355 , 36 , 38 ) ;
  primitive ( 356 , 36 , 39 ) ;
  primitive ( 357 , 36 , 40 ) ;
  primitive ( 358 , 36 , 41 ) ;
  primitive ( 359 , 36 , 42 ) ;
  primitive ( 360 , 36 , 43 ) ;
  primitive ( 361 , 36 , 44 ) ;
  primitive ( 362 , 36 , 45 ) ;
  primitive ( 363 , 36 , 46 ) ;
  primitive ( 364 , 36 , 47 ) ;
  primitive ( 365 , 36 , 48 ) ;
  primitive ( 366 , 36 , 49 ) ;
  primitive ( 367 , 36 , 50 ) ;
  primitive ( 368 , 36 , 51 ) ;
  primitive ( 369 , 36 , 52 ) ;
  primitive ( 370 , 36 , 53 ) ;
  primitive ( 371 , 36 , 54 ) ;
  primitive ( 372 , 36 , 55 ) ;
  primitive ( 373 , 36 , 56 ) ;
  primitive ( 374 , 36 , 57 ) ;
  primitive ( 375 , 36 , 58 ) ;
  primitive ( 376 , 36 , 59 ) ;
  primitive ( 377 , 36 , 60 ) ;
  primitive ( 378 , 36 , 61 ) ;
  primitive ( 379 , 36 , 62 ) ;
  primitive ( 380 , 36 , 63 ) ;
  primitive ( 381 , 36 , 64 ) ;
  primitive ( 382 , 36 , 65 ) ;
  primitive ( 383 , 36 , 66 ) ;
  primitive ( 384 , 36 , 67 ) ;
  primitive ( 385 , 36 , 68 ) ;
  primitive ( 386 , 36 , 69 ) ;
  primitive ( 387 , 36 , 70 ) ;
  primitive ( 388 , 36 , 71 ) ;
  primitive ( 389 , 36 , 72 ) ;
  primitive ( 390 , 36 , 73 ) ;
  primitive ( 391 , 36 , 74 ) ;
  primitive ( 392 , 36 , 75 ) ;
  primitive ( 393 , 36 , 76 ) ;
  primitive ( 394 , 36 , 77 ) ;
  primitive ( 395 , 36 , 78 ) ;
  primitive ( 396 , 36 , 79 ) ;
  primitive ( 397 , 36 , 80 ) ;
  primitive ( 398 , 36 , 81 ) ;
  primitive ( 399 , 36 , 82 ) ;
  primitive ( 400 , 38 , 83 ) ;
  primitive ( 402 , 36 , 85 ) ;
  primitive ( 401 , 36 , 84 ) ;
  primitive ( 403 , 36 , 86 ) ;
  primitive ( 404 , 36 , 87 ) ;
  primitive ( 405 , 36 , 88 ) ;
  primitive ( 43 , 45 , 89 ) ;
  primitive ( 45 , 45 , 90 ) ;
  primitive ( 42 , 57 , 91 ) ;
  primitive ( 47 , 56 , 92 ) ;
  eqtb [9761 ]= eqtb [cursym ];
  primitive ( 406 , 47 , 93 ) ;
  primitive ( 310 , 47 , 94 ) ;
  primitive ( 407 , 47 , 95 ) ;
  primitive ( 408 , 54 , 96 ) ;
  primitive ( 60 , 52 , 97 ) ;
  primitive ( 409 , 52 , 98 ) ;
  primitive ( 62 , 52 , 99 ) ;
  primitive ( 410 , 52 , 100 ) ;
  primitive ( 61 , 53 , 101 ) ;
  primitive ( 411 , 52 , 102 ) ;
  primitive ( 422 , 39 , 115 ) ;
  primitive ( 423 , 39 , 116 ) ;
  primitive ( 424 , 39 , 117 ) ;
  primitive ( 425 , 39 , 118 ) ;
  primitive ( 426 , 39 , 119 ) ;
  primitive ( 427 , 39 , 120 ) ;
  primitive ( 428 , 39 , 121 ) ;
  primitive ( 429 , 39 , 122 ) ;
  primitive ( 38 , 50 , 103 ) ;
  primitive ( 412 , 57 , 104 ) ;
  primitive ( 413 , 57 , 105 ) ;
  primitive ( 414 , 57 , 106 ) ;
  primitive ( 415 , 57 , 107 ) ;
  primitive ( 416 , 57 , 108 ) ;
  primitive ( 417 , 57 , 109 ) ;
  primitive ( 418 , 57 , 110 ) ;
  primitive ( 419 , 57 , 111 ) ;
  primitive ( 420 , 57 , 112 ) ;
  primitive ( 421 , 47 , 113 ) ;
  primitive ( 340 , 32 , 15 ) ;
  primitive ( 259 , 32 , 4 ) ;
  primitive ( 325 , 32 , 2 ) ;
  primitive ( 330 , 32 , 8 ) ;
  primitive ( 328 , 32 , 6 ) ;
  primitive ( 332 , 32 , 10 ) ;
  primitive ( 334 , 32 , 12 ) ;
  primitive ( 335 , 32 , 13 ) ;
  primitive ( 336 , 32 , 14 ) ;
  primitive ( 960 , 84 , 0 ) ;
  primitive ( 961 , 84 , 1 ) ;
  primitive ( 272 , 25 , 0 ) ;
  primitive ( 273 , 25 , 1 ) ;
  primitive ( 274 , 25 , 2 ) ;
  primitive ( 967 , 25 , 3 ) ;
  primitive ( 968 , 23 , 0 ) ;
  primitive ( 969 , 23 , 1 ) ;
  primitive ( 983 , 24 , 0 ) ;
  primitive ( 984 , 24 , 1 ) ;
  primitive ( 985 , 24 , 2 ) ;
  primitive ( 986 , 24 , 3 ) ;
  primitive ( 987 , 24 , 4 ) ;
  primitive ( 1006 , 69 , 0 ) ;
  primitive ( 1007 , 69 , 1 ) ;
  primitive ( 1008 , 69 , 2 ) ;
  primitive ( 1009 , 68 , 6 ) ;
  primitive ( 1010 , 68 , 10 ) ;
  primitive ( 1011 , 68 , 13 ) ;
  primitive ( 1020 , 21 , 4 ) ;
  primitive ( 1021 , 21 , 5 ) ;
  primitive ( 1034 , 27 , 0 ) ;
  primitive ( 1035 , 27 , 1 ) ;
  primitive ( 1036 , 27 , 2 ) ;
  primitive ( 1051 , 22 , 0 ) ;
  primitive ( 1052 , 22 , 1 ) ;
  primitive ( 1053 , 22 , 2 ) ;
  primitive ( 1054 , 22 , 3 ) ;
  primitive ( 1055 , 22 , 4 ) ;
  primitive ( 1073 , 75 , 0 ) ;
  primitive ( 1074 , 75 , 1 ) ;
  primitive ( 1075 , 75 , 5 ) ;
  primitive ( 1076 , 75 , 2 ) ;
  primitive ( 1077 , 75 , 6 ) ;
  primitive ( 1078 , 75 , 3 ) ;
  primitive ( 1079 , 75 , 7 ) ;
  primitive ( 1080 , 75 , 11 ) ;
  primitive ( 1081 , 75 , 128 ) ;
} 
void 
#ifdef HAVE_PROTOTYPES
inittab ( void ) 
#else
inittab ( ) 
#endif
{
  integer k  ;
  rover = 24 ;
  mem [rover ].hhfield .v.RH = 268435455L ;
  mem [rover ].hhfield .lhfield = 1000 ;
  mem [rover + 1 ].hhfield .lhfield = rover ;
  mem [rover + 1 ].hhfield .v.RH = rover ;
  lomemmax = rover + 1000 ;
  mem [lomemmax ].hhfield .v.RH = 0 ;
  mem [lomemmax ].hhfield .lhfield = 0 ;
  {register integer for_end; k = memtop - 3 ;for_end = memtop ; if ( k <= 
  for_end) do 
    mem [k ]= mem [lomemmax ];
  while ( k++ < for_end ) ;} 
  avail = 0 ;
  memend = memtop ;
  himemmin = memtop - 3 ;
  varused = 24 ;
  dynused = memtop + 1 - ( memtop - 3 ) ;
  mem [14 ].cint = -32768L ;
  mem [15 ].cint = 0 ;
  mem [17 ].cint = 32768L ;
  mem [18 ].cint = 0 ;
  mem [20 ].cint = 0 ;
  mem [21 ].cint = 65536L ;
  mem [13 ].hhfield .v.RH = 16 ;
  mem [16 ].hhfield .v.RH = 19 ;
  mem [19 ].hhfield .v.RH = 13 ;
  mem [13 ].hhfield .lhfield = 19 ;
  mem [16 ].hhfield .lhfield = 13 ;
  mem [19 ].hhfield .lhfield = 16 ;
  intname [1 ]= 430 ;
  intname [2 ]= 431 ;
  intname [3 ]= 432 ;
  intname [4 ]= 433 ;
  intname [5 ]= 434 ;
  intname [6 ]= 435 ;
  intname [7 ]= 436 ;
  intname [8 ]= 437 ;
  intname [9 ]= 438 ;
  intname [10 ]= 439 ;
  intname [11 ]= 440 ;
  intname [12 ]= 441 ;
  intname [13 ]= 442 ;
  intname [14 ]= 443 ;
  intname [15 ]= 444 ;
  intname [16 ]= 445 ;
  intname [17 ]= 446 ;
  intname [18 ]= 447 ;
  intname [19 ]= 448 ;
  intname [20 ]= 449 ;
  intname [21 ]= 450 ;
  intname [22 ]= 451 ;
  intname [23 ]= 452 ;
  intname [24 ]= 453 ;
  intname [25 ]= 454 ;
  intname [26 ]= 455 ;
  intname [27 ]= 456 ;
  intname [28 ]= 457 ;
  intname [29 ]= 458 ;
  intname [30 ]= 459 ;
  intname [31 ]= 460 ;
  intname [32 ]= 461 ;
  intname [33 ]= 462 ;
  hashused = 9757 ;
  stcount = 0 ;
  hash [9770 ].v.RH = 464 ;
  hash [9768 ].v.RH = 465 ;
  hash [9769 ].v.RH = 466 ;
  hash [9766 ].v.RH = 467 ;
  hash [9767 ].v.RH = 468 ;
  hash [9765 ].v.RH = 469 ;
  hash [9764 ].v.RH = 470 ;
  hash [9763 ].v.RH = 59 ;
  hash [9762 ].v.RH = 58 ;
  hash [9761 ].v.RH = 47 ;
  hash [9760 ].v.RH = 91 ;
  hash [9759 ].v.RH = 41 ;
  hash [9757 ].v.RH = 471 ;
  eqtb [9759 ].lhfield = 64 ;
  mem [0 ].hhfield .v.RH = 0 ;
  mem [1 ].cint = 0 ;
  mem [11 ].hhfield .lhfield = 9772 ;
  mem [11 ].hhfield .v.RH = 0 ;
  serialno = 0 ;
  mem [5 ].hhfield .v.RH = 5 ;
  mem [6 ].hhfield .lhfield = 5 ;
  mem [5 ].hhfield .lhfield = 0 ;
  mem [6 ].hhfield .v.RH = 0 ;
  mem [22 ].hhfield .b1 = 0 ;
  mem [22 ].hhfield .v.RH = 9770 ;
  eqtb [9770 ].v.RH = 22 ;
  eqtb [9770 ].lhfield = 43 ;
  eqtb [9758 ].lhfield = 93 ;
  hash [9758 ].v.RH = 775 ;
  mem [9 ].hhfield .b1 = 14 ;
  mem [12 ].cint = 1073741824L ;
  mem [8 ].cint = 0 ;
  mem [7 ].hhfield .lhfield = 0 ;
  fontdsize [0 ]= 0 ;
  fontname [0 ]= 284 ;
  fontpsname [0 ]= 284 ;
  fontbc [0 ]= 1 ;
  fontec [0 ]= 0 ;
  charbase [0 ]= 0 ;
  widthbase [0 ]= 0 ;
  heightbase [0 ]= 0 ;
  depthbase [0 ]= 0 ;
  nextfmem = 0 ;
  lastfnum = 0 ;
  lastpsfnum = 0 ;
  if ( iniversion ) 
  memident = 1173 ;
} 
#endif /* INIMP */
void mainbody() {
    
  bounddefault = 250000L ;
  boundname = "main_memory" ;
  setupboundvariable ( addressof ( mainmemory ) , boundname , bounddefault ) ;
  bounddefault = 100000L ;
  boundname = "pool_size" ;
  setupboundvariable ( addressof ( poolsize ) , boundname , bounddefault ) ;
  bounddefault = 75000L ;
  boundname = "string_vacancies" ;
  setupboundvariable ( addressof ( stringvacancies ) , boundname , 
  bounddefault ) ;
  bounddefault = 5000 ;
  boundname = "pool_free" ;
  setupboundvariable ( addressof ( poolfree ) , boundname , bounddefault ) ;
  bounddefault = 15000 ;
  boundname = "max_strings" ;
  setupboundvariable ( addressof ( maxstrings ) , boundname , bounddefault ) ;
  bounddefault = 79 ;
  boundname = "error_line" ;
  setupboundvariable ( addressof ( errorline ) , boundname , bounddefault ) ;
  bounddefault = 50 ;
  boundname = "half_error_line" ;
  setupboundvariable ( addressof ( halferrorline ) , boundname , bounddefault 
  ) ;
  bounddefault = 79 ;
  boundname = "max_print_line" ;
  setupboundvariable ( addressof ( maxprintline ) , boundname , bounddefault ) 
  ;
  if ( errorline > 255 ) 
  errorline = 255 ;
  {
    if ( mainmemory < infmainmemory ) 
    mainmemory = infmainmemory ;
    else if ( mainmemory > supmainmemory ) 
    mainmemory = supmainmemory ;
  } 
  memtop = 0 + mainmemory ;
  memmax = memtop ;
  {
    if ( poolsize < infpoolsize ) 
    poolsize = infpoolsize ;
    else if ( poolsize > suppoolsize ) 
    poolsize = suppoolsize ;
  } 
  {
    if ( stringvacancies < infstringvacancies ) 
    stringvacancies = infstringvacancies ;
    else if ( stringvacancies > supstringvacancies ) 
    stringvacancies = supstringvacancies ;
  } 
  {
    if ( poolfree < infpoolfree ) 
    poolfree = infpoolfree ;
    else if ( poolfree > suppoolfree ) 
    poolfree = suppoolfree ;
  } 
  {
    if ( maxstrings < infmaxstrings ) 
    maxstrings = infmaxstrings ;
    else if ( maxstrings > supmaxstrings ) 
    maxstrings = supmaxstrings ;
  } 
#ifdef INIMP
  if ( iniversion ) 
  {
    xmallocarray ( mem , memtop - 0 ) ;
    xmallocarray ( strref , maxstrings ) ;
    xmallocarray ( nextstr , maxstrings ) ;
    xmallocarray ( strstart , maxstrings ) ;
    xmallocarray ( strpool , poolsize ) ;
  } 
#endif /* INIMP */
  history = 3 ;
  if ( readyalready == 314159L ) 
  goto lab1 ;
  bad = 0 ;
  if ( ( halferrorline < 30 ) || ( halferrorline > errorline - 15 ) ) 
  bad = 1 ;
  if ( maxprintline < 60 ) 
  bad = 2 ;
  if ( emergencylinelength < maxprintline ) 
  bad = 3 ;
  if ( 1100 > memtop ) 
  bad = 4 ;
  if ( 7919 > 9500 ) 
  bad = 5 ;
  if ( headersize % 4 != 0 ) 
  bad = 6 ;
  if ( ( ligtablesize < 255 ) || ( ligtablesize > 32510 ) ) 
  bad = 7 ;
#ifdef INIMP
  if ( memmax != memtop ) 
  bad = 8 ;
#endif /* INIMP */
  if ( memmax < memtop ) 
  bad = 8 ;
  if ( ( 0 > 0 ) || ( 255 < 127 ) ) 
  bad = 9 ;
  if ( ( 0 > 0 ) || ( 268435455L < 32767 ) ) 
  bad = 10 ;
  if ( ( 0 < 0 ) || ( 255 > 268435455L ) ) 
  bad = 11 ;
  if ( ( 0 < 0 ) || ( memmax >= 268435455L ) ) 
  bad = 12 ;
  if ( maxstrings > 268435455L ) 
  bad = 13 ;
  if ( bufsize > 268435455L ) 
  bad = 14 ;
  if ( fontmax > 268435455L ) 
  bad = 15 ;
  if ( ( 255 < 255 ) || ( 268435455L < 65535L ) ) 
  bad = 16 ;
  if ( 9771 + maxinternal > 268435455L ) 
  bad = 17 ;
  if ( 10222 > 268435455L ) 
  bad = 18 ;
  if ( 20 + 17 * 45 > bistacksize ) 
  bad = 19 ;
  if ( memdefaultlength > maxint ) 
  bad = 20 ;
  if ( bad > 0 ) 
  {
    fprintf( stdout , "%s%s%ld\n",  "Ouch---my internal constants have been clobbered!" ,     "---case " , (long)bad ) ;
    goto lab9999 ;
  } 
  initialize () ;
#ifdef INIMP
  if ( iniversion ) 
  {
    if ( ! getstringsstarted () ) 
    goto lab9999 ;
    inittab () ;
    initprim () ;
    initstruse = strptr ;
    initpoolptr = poolptr ;
    maxstrptr = strptr ;
    maxpoolptr = poolptr ;
    fixdateandtime () ;
  } 
#endif /* INIMP */
  readyalready = 314159L ;
  lab1: selector = 8 ;
  tally = 0 ;
  termoffset = 0 ;
  fileoffset = 0 ;
  psoffset = 0 ;
  Fputs( stdout ,  "This is MetaPost, Version 0.641" ) ;
  Fputs( stdout ,  versionstring ) ;
  if ( memident > 0 ) 
  print ( memident ) ;
  println () ;
  fflush ( stdout ) ;
  jobname = 0 ;
  logopened = false ;
  {
    {
      inputptr = 0 ;
      maxinstack = 0 ;
      inopen = 0 ;
      openparens = 0 ;
      maxbufstack = 0 ;
      paramptr = 0 ;
      maxparamstack = 0 ;
      first = 1 ;
      curinput .startfield = 1 ;
      curinput .indexfield = 0 ;
      linestack [curinput .indexfield ]= 0 ;
      curinput .namefield = 0 ;
      mpxname [0 ]= 1 ;
      forceeof = false ;
      if ( ! initterminal () ) 
      goto lab9999 ;
      curinput .limitfield = last ;
      first = last + 1 ;
    } 
    scannerstatus = 0 ;
    if ( ( memident == 0 ) || ( buffer [curinput .locfield ]== 38 ) || 
    dumpline ) 
    {
      if ( memident != 0 ) 
      initialize () ;
      if ( ! openmemfile () ) 
      goto lab9999 ;
      if ( ! loadmemfile () ) 
      {
	wclose ( memfile ) ;
	goto lab9999 ;
      } 
      wclose ( memfile ) ;
      while ( ( curinput .locfield < curinput .limitfield ) && ( buffer [
      curinput .locfield ]== 32 ) ) incr ( curinput .locfield ) ;
    } 
    buffer [curinput .limitfield ]= 37 ;
    fixdateandtime () ;
    initrandoms ( ( internal [16 ]/ 65536L ) + internal [15 ]) ;
    if ( interaction == 0 ) 
    selector = 7 ;
    else selector = 8 ;
    if ( curinput .locfield < curinput .limitfield ) 
    if ( buffer [curinput .locfield ]!= 92 ) 
    startinput () ;
  } 
  history = 0 ;
  if ( troffmode ) 
  internal [32 ]= 65536L ;
  if ( startsym > 0 ) 
  {
    cursym = startsym ;
    backinput () ;
  } 
  maincontrol () ;
  finalcleanup () ;
  closefilesandterminate () ;
  lab9999: {
      
    fflush ( stdout ) ;
    readyalready = 0 ;
    if ( ( history != 0 ) && ( history != 1 ) ) 
    uexit ( 1 ) ;
    else uexit ( 0 ) ;
  } 
} 

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].