#define EXTERN extern
#include "texd.h"

void giveerrhelp ( ) 
{giveerrhelp_regmem 
  tokenshow ( eqtb [ 10821 ] .hh .v.RH ) ; 
} 
boolean openfmtfile ( ) 
{/* 40 10 */ register boolean Result; openfmtfile_regmem 
  integer j  ; 
  j = curinput .locfield ; 
  if ( buffer [ curinput .locfield ] == 38 ) 
  {
    incr ( curinput .locfield ) ; 
    j = curinput .locfield ; 
    buffer [ last ] = 32 ; 
    while ( buffer [ j ] != 32 ) incr ( j ) ; 
    packbufferedname ( 0 , curinput .locfield , j - 1 ) ; 
    if ( wopenin ( fmtfile ) ) 
    goto lab40 ; 
    (void) fprintf( stdout , "%s%s\n",  "Sorry, I can't find that format;" ,     " will try the default." ) ; 
    flush ( stdout ) ; 
  } 
  packbufferedname ( formatdefaultlength - 4 , 1 , 0 ) ; 
  if ( ! wopenin ( fmtfile ) ) 
  {
    ; 
    (void) fprintf( stdout , "%s\n",  "I can't find the default format file!" ) ; 
    Result = false ; 
    return(Result) ; 
  } 
  lab40: curinput .locfield = j ; 
  Result = true ; 
  return(Result) ; 
} 
void closefilesandterminate ( ) 
{closefilesandterminate_regmem 
  integer k  ; 
  {register integer for_end; k = 0 ; for_end = 15 ; if ( k <= for_end) do 
    if ( writeopen [ k ] ) 
    aclose ( writefile [ k ] ) ; 
  while ( k++ < for_end ) ; } 
  {register integer for_end; hsii = 1 ; for_end = FILENAMESIZE ; if ( hsii <= 
  for_end) do 
    {
      nameoffile [ hsii ] = ' ' ; 
    } 
  while ( hsii++ < for_end ) ; } 
  hsij = strstart [ jobname ] ; 
  hsii = 1 ; 
  while ( hsij < strstart [ jobname + 1 ] ) {
      
    nameoffile [ hsii ] = xchr [ strpool [ hsij ] ] ; 
    hsij = hsij + 1 ; 
    hsii = hsii + 1 ; 
  } 
  nameoffile [ hsii ] = '.' ; 
  nameoffile [ hsii + 1 ] = 'm' ; 
  nameoffile [ hsii + 2 ] = 'e' ; 
  nameoffile [ hsii + 3 ] = 'm' ; 
  if ( ! aopenout ( hsmem ) ) 
  {
    (void) fprintf( stdout , "%s\n",  " =iSi=> cant a_open_out " ) ; 
    wjob () ; 
    (void) Fputs( stdout ,  ".mem " ) ; 
    (void) putc('\n',  stdout );
  } 
  else {
      
    while ( mdm != nil ) {
	
      if ( inuse ( mdm ->w12 , mdm ->l1 , mdb ) ) 
      {
	if ( isidebug == 1 ) 
	{
	  (void) Fputs( stdout ,  " =iSi=> writing to " ) ; 
	  wjob () ; 
	  (void) Fputs( stdout ,  ".mem: " ) ; 
	  writewt ( mdm ->w12 , mdm ->l1 , mdm ->tr1 ) ; 
	  (void) putc('\n',  stdout );
	} 
	(void) fprintf( hsmem , " %ld\n",  (long)mdm ->l1 ) ; 
	{register integer for_end; k = 1 ; for_end = mdm ->l1 ; if ( k <= 
	for_end) do 
	  {
	    (void) fprintf( hsmem , " %ld",  (long)mdm ->w12 [ k ] ) ; 
	  } 
	while ( k++ < for_end ) ; } 
	(void) putc('\n',  hsmem );
	{register integer for_end; k = 1 ; for_end = mdm ->l1 ; if ( k <= 
	for_end) do 
	  {
	    (void) fprintf( hsmem , " %ld",  (long)mdm ->tr1 [ k ] ) ; 
	  } 
	while ( k++ < for_end ) ; } 
	(void) putc('\n',  hsmem );
	if ( mdm ->neu1 ) 
	{
	  (void) putc( Xchr ( 116 ) ,  hsmem );
	  (void) putc('\n',  hsmem );
	  mdleintragen ( mdm ->w12 , mdm ->l1 , mdl ) ; 
	} 
	else {
	    
	  (void) putc( Xchr ( 102 ) ,  hsmem );
	  (void) putc('\n',  hsmem );
	} 
      } 
      else {
	  
	if ( isidebug == 1 ) 
	{
	  (void) Fputs( stdout ,  " =iSi=> " ) ; 
	  wwort ( mdm ->w12 , mdm ->l1 ) ; 
	  (void) Fputs( stdout ,  " not in use" ) ; 
	  (void) putc('\n',  stdout );
	} 
      } 
      mdm = mdm ->li ; 
    } 
    aclose ( hsmem ) ; 
  } 
  {register integer for_end; hsii = 1 ; for_end = FILENAMESIZE ; if ( hsii <= 
  for_end) do 
    {
      nameoffile [ hsii ] = ' ' ; 
    } 
  while ( hsii++ < for_end ) ; } 
  hsij = strstart [ jobname ] ; 
  hsii = 1 ; 
  while ( hsij < strstart [ jobname + 1 ] ) {
      
    nameoffile [ hsii ] = xchr [ strpool [ hsij ] ] ; 
    hsij = hsij + 1 ; 
    hsii = hsii + 1 ; 
  } 
  nameoffile [ hsii ] = '.' ; 
  nameoffile [ hsii + 1 ] = 'l' ; 
  nameoffile [ hsii + 2 ] = 'e' ; 
  nameoffile [ hsii + 3 ] = 'x' ; 
  if ( ! aopenout ( hslex ) ) 
  (void) fprintf( stdout , "%s\n",  " =iSi=> cant open hslex" ) ; 
  else {
      
    while ( mdl != nil ) {
	
      if ( isidebug == 1 ) 
      {
	(void) Fputs( stdout ,  " =iSi=> writing to " ) ; 
	wjob () ; 
	(void) Fputs( stdout ,  ".lex: " ) ; 
	wwort ( mdl ->w12 , mdl ->l1 ) ; 
	(void) putc('\n',  stdout );
      } 
      (void) putc( Xchr ( mdl ->l1 ) ,  hslex );
      {register integer for_end; k = 1 ; for_end = mdl ->l1 ; if ( k <= 
      for_end) do 
	{
	  if ( mdl ->w12 [ k ] <= 26 ) 
	  {
	    (void) putc( Xchr ( mdl ->w12 [ k ] + 96 ) ,  hslex );
	  } 
	  else {
	      
	    if ( mdl ->w12 [ k ] == 27 ) 
	    {
	      (void) Fputs( hslex ,  "\"a" ) ; 
	    } 
	    else if ( mdl ->w12 [ k ] == 28 ) 
	    {
	      (void) Fputs( hslex ,  "\"o" ) ; 
	    } 
	    else if ( mdl ->w12 [ k ] == 29 ) 
	    {
	      (void) Fputs( hslex ,  "\"u" ) ; 
	    } 
	    else if ( mdl ->w12 [ k ] == 30 ) 
	    {
	      (void) Fputs( hslex ,  "\"s" ) ; 
	    } 
	    else {
		
	      (void) putc( '-' ,  hslex );
	    } 
	  } 
	} 
      while ( k++ < for_end ) ; } 
      (void) putc('\n',  hslex );
      mdl = mdl ->li ; 
    } 
    aclose ( hslex ) ; 
  } 
  {register integer for_end; hsii = 1 ; for_end = FILENAMESIZE ; if ( hsii <= 
  for_end) do 
    {
      nameoffile [ hsii ] = ' ' ; 
    } 
  while ( hsii++ < for_end ) ; } 
  hsij = strstart [ jobname ] ; 
  hsii = 1 ; 
  while ( hsij < strstart [ jobname + 1 ] ) {
      
    nameoffile [ hsii ] = xchr [ strpool [ hsij ] ] ; 
    hsij = hsij + 1 ; 
    hsii = hsii + 1 ; 
  } 
  nameoffile [ hsii ] = '.' ; 
  nameoffile [ hsii + 1 ] = 'e' ; 
  nameoffile [ hsii + 2 ] = 'd' ; 
  nameoffile [ hsii + 3 ] = 't' ; 
  if ( ! aopenout ( hsedt ) ) 
  (void) fprintf( stdout , "%s\n",  " =iSi=> cant open hsedt" ) ; 
  else {
      
    while ( mde != nil ) {
	
      if ( isidebug == 1 ) 
      {
	(void) Fputs( stdout ,  " =iSi=> writing to " ) ; 
	wjob () ; 
	(void) Fputs( stdout ,  ".edt: " ) ; 
	wwort ( mde ->w12 , mde ->l1 ) ; 
	(void) putc('\n',  stdout );
      } 
      {register integer for_end; k = 1 ; for_end = mde ->l1 ; if ( k <= 
      for_end) do 
	{
	  if ( mde ->w12 [ k ] <= 26 ) 
	  {
	    (void) putc( Xchr ( mde ->w12 [ k ] + 96 ) ,  hsedt );
	  } 
	  else {
	      
	    if ( mde ->w12 [ k ] == 27 ) 
	    {
	      (void) Fputs( hsedt ,  "\"a" ) ; 
	    } 
	    else if ( mde ->w12 [ k ] == 28 ) 
	    {
	      (void) Fputs( hsedt ,  "\"o" ) ; 
	    } 
	    else if ( mde ->w12 [ k ] == 29 ) 
	    {
	      (void) Fputs( hsedt ,  "\"u" ) ; 
	    } 
	    else if ( mde ->w12 [ k ] == 30 ) 
	    {
	      (void) Fputs( hsedt ,  "\"s" ) ; 
	    } 
	    else {
		
	      (void) Fputs( hsedt ,  "--" ) ; 
	    } 
	  } 
	} 
      while ( k++ < for_end ) ; } 
      (void) putc('\n',  hsedt );
      mde = mde ->li ; 
    } 
    aclose ( hsedt ) ; 
  } 
	;
#ifdef STAT
  if ( eqtb [ 12694 ] .cint > 0 ) 
  if ( logopened ) 
  {
    (void) fprintf( logfile , "%c\n",  ' ' ) ; 
    (void) fprintf( logfile , "%s%s\n",  "Here is how much of TeX's memory" , " you used:" ) ; 
    (void) fprintf( logfile , "%c%ld%s",  ' ' , (long)strptr - initstrptr , " string" ) ; 
    if ( strptr != initstrptr + 1 ) 
    (void) putc( 's' ,  logfile );
    (void) fprintf( logfile , "%s%ld\n",  " out of " , (long)maxstrings - initstrptr ) ; 
    (void) fprintf( logfile , "%c%ld%s%ld\n",  ' ' , (long)poolptr - initpoolptr ,     " string characters out of " , (long)poolsize - initpoolptr ) ; 
    (void) fprintf( logfile , "%c%ld%s%ld\n",  ' ' , (long)lomemmax - memmin + memend - himemmin + 2 ,     " words of memory out of " , (long)memend + 1 - memmin ) ; 
    (void) fprintf( logfile , "%c%ld%s%ld\n",  ' ' , (long)cscount ,     " multiletter control sequences out of " , (long)9500 ) ; 
    (void) fprintf( logfile , "%c%ld%s%ld%s",  ' ' , (long)fmemptr , " words of font info for " , (long)fontptr - 0     , " font" ) ; 
    if ( fontptr != 1 ) 
    (void) putc( 's' ,  logfile );
    (void) fprintf( logfile , "%s%ld%s%ld\n",  ", out of " , (long)fontmemsize , " for " , (long)fontmax - 0 ) ; 
    (void) fprintf( logfile , "%c%ld%s",  ' ' , (long)hyphcount , " hyphenation exception" ) ; 
    if ( hyphcount != 1 ) 
    (void) putc( 's' ,  logfile );
    (void) fprintf( logfile , "%s%ld\n",  " out of " , (long)607 ) ; 
    (void) fprintf( logfile , "%c%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%c\n",  ' ' , (long)maxinstack , "i," , (long)maxneststack , "n," ,     (long)maxparamstack , "p," , (long)maxbufstack + 1 , "b," , (long)maxsavestack + 6 ,     "s stack positions out of " , (long)stacksize , "i," , (long)nestsize , "n," ,     (long)paramsize , "p," , (long)bufsize , "b," , (long)savesize , 's' ) ; 
  } 
#endif /* STAT */
  while ( curs > -1 ) {
      
    if ( curs > 0 ) 
    {
      dvibuf [ dviptr ] = 142 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    else {
	
      {
	dvibuf [ dviptr ] = 140 ; 
	incr ( dviptr ) ; 
	if ( dviptr == dvilimit ) 
	dviswap () ; 
      } 
      incr ( totalpages ) ; 
    } 
    decr ( curs ) ; 
  } 
  if ( totalpages == 0 ) 
  printnl ( 833 ) ; 
  else {
      
    {
      dvibuf [ dviptr ] = 248 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    dvifour ( lastbop ) ; 
    lastbop = dvioffset + dviptr - 5 ; 
    dvifour ( 25400000L ) ; 
    dvifour ( 473628672L ) ; 
    preparemag () ; 
    dvifour ( eqtb [ 12680 ] .cint ) ; 
    dvifour ( maxv ) ; 
    dvifour ( maxh ) ; 
    {
      dvibuf [ dviptr ] = maxpush / 256 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    {
      dvibuf [ dviptr ] = maxpush % 256 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    {
      dvibuf [ dviptr ] = ( totalpages / 256 ) % 256 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    {
      dvibuf [ dviptr ] = totalpages % 256 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    while ( fontptr > 0 ) {
	
      if ( fontused [ fontptr ] ) 
      dvifontdef ( fontptr ) ; 
      decr ( fontptr ) ; 
    } 
    {
      dvibuf [ dviptr ] = 249 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    dvifour ( lastbop ) ; 
    {
      dvibuf [ dviptr ] = 2 ; 
      incr ( dviptr ) ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    k = 4 + ( ( dvibufsize - dviptr ) % 4 ) ; 
    while ( k > 0 ) {
	
      {
	dvibuf [ dviptr ] = 223 ; 
	incr ( dviptr ) ; 
	if ( dviptr == dvilimit ) 
	dviswap () ; 
      } 
      decr ( k ) ; 
    } 
    if ( dvilimit == halfbuf ) 
    writedvi ( halfbuf , dvibufsize - 1 ) ; 
    if ( dviptr > 0 ) 
    writedvi ( 0 , dviptr - 1 ) ; 
    printnl ( 834 ) ; 
    print ( outputfilename ) ; 
    print ( 284 ) ; 
    printint ( totalpages ) ; 
    print ( 835 ) ; 
    if ( totalpages != 1 ) 
    printchar ( 115 ) ; 
    print ( 836 ) ; 
    printint ( dvioffset + dviptr ) ; 
    print ( 837 ) ; 
    bclose ( dvifile ) ; 
  } 
  if ( logopened ) 
  {
    (void) putc('\n',  logfile );
    aclose ( logfile ) ; 
    selector = selector - 2 ; 
    if ( selector == 17 ) 
    {
      printnl ( 1268 ) ; 
      print ( logname ) ; 
      printchar ( 46 ) ; 
    } 
  } 
  println () ; 
  if ( ( editnamestart != 0 ) && ( interaction > 0 ) ) 
  calledit ( strpool , editnamestart , editnamelength , editline ) ; 
} 
#ifdef DEBUG
void debughelp ( ) 
{/* 888 10 */ debughelp_regmem 
  integer k, l, m, n  ; 
  while ( true ) {
      
    ; 
    printnl ( 1277 ) ; 
    flush ( stdout ) ; 
    read ( stdin , m ) ; 
    if ( m < 0 ) 
    return ; 
    else if ( m == 0 ) 
    dumpcore () ; 
    else {
	
      read ( stdin , n ) ; 
      switch ( m ) 
      {case 1 : 
	printword ( mem [ n ] ) ; 
	break ; 
      case 2 : 
	printint ( mem [ n ] .hh .v.LH ) ; 
	break ; 
      case 3 : 
	printint ( mem [ n ] .hh .v.RH ) ; 
	break ; 
      case 4 : 
	printword ( eqtb [ n ] ) ; 
	break ; 
      case 5 : 
	printword ( fontinfo [ n ] ) ; 
	break ; 
      case 6 : 
	printword ( savestack [ n ] ) ; 
	break ; 
      case 7 : 
	showbox ( n ) ; 
	break ; 
      case 8 : 
	{
	  breadthmax = 10000 ; 
	  depththreshold = poolsize - poolptr - 10 ; 
	  shownodelist ( n ) ; 
	} 
	break ; 
      case 9 : 
	showtokenlist ( n , 0 , 1000 ) ; 
	break ; 
      case 10 : 
	print ( n ) ; 
	break ; 
      case 11 : 
	checkmem ( n > 0 ) ; 
	break ; 
      case 12 : 
	searchmem ( n ) ; 
	break ; 
      case 13 : 
	{
	  read ( stdin , l ) ; 
	  printcmdchr ( n , l ) ; 
	} 
	break ; 
      case 14 : 
	{register integer for_end; k = 0 ; for_end = n ; if ( k <= for_end) 
	do 
	  print ( buffer [ k ] ) ; 
	while ( k++ < for_end ) ; } 
	break ; 
      case 15 : 
	{
	  fontinshortdisplay = 0 ; 
	  shortdisplay ( n ) ; 
	} 
	break ; 
      case 16 : 
	panicking = ! panicking ; 
	break ; 
	default: 
	print ( 63 ) ; 
	break ; 
      } 
    } 
  } 
} 
#endif /* DEBUG */
