/* -*-C-*- fatal.h */ /*-->fatal*/ /**********************************************************************/ /******************************* fatal ********************************/ /**********************************************************************/ void fatal(msg) /* issue a fatal error message */ char *msg; /* message string */ { if (g_dolog && (g_logfp == (FILE *)NULL) && g_logname[0]) { g_logfp = fopen(g_logname,"w+"); DEBUG_OPEN(g_logfp,g_logname,"w+"); if (g_logfp == (FILE *)NULL) { (void)fprintf(stderr,"Cannot open log file [%s]",g_logname); NEWLINE(stderr); } else { (void)fprintf(stderr,"[Log file [%s] created]",g_logname); NEWLINE(stderr); #if OS_TOPS20 #if PCC_20 /* Because of the PCC-20 arithmetic (instead of */ /* logical) shift bug wherein a constant expression */ /* (1<<35) evaluates to 0 instead of 400000,,000000, */ /* we must set CF_nud using a variable, instead of */ /* just using a constant "ac1 = makefield(CF_nud,1);" */ ac1 = 1; ac1 = makefield(CF_nud,ac1); setfield(ac1,CF_jfn,jfnof(fileno(g_logfp))); /* jfn */ setfield(ac1,CF_dsp,FBbyv); /* generation number index in fdb */ ac2 = makefield(FB_ret,-1); ac3 = makefield(FB_ret,0);/* set generation count to 0 (infinite) */ (void)jsys(JSchfdb,acs); /* ignore any errors */ #endif /* PCC_20 */ #endif } } if (g_dolog && (g_logfp != (FILE *)NULL) && g_logname[0]) { NEWLINE(g_logfp); #if (OS_TOPS20 | OS_VAXVMS) (void)putc('?',g_logfp); /* query at start of line */ #endif (void)fputs(g_progname,g_logfp); (void)fputs(": FATAL--",g_logfp); (void)fputs(msg,g_logfp); NEWLINE(g_logfp); (void)fprintf(g_logfp,"Current TeX page counters: [%s]",tctos()); NEWLINE(g_logfp); } #if BBNBITGRAPH rsetterm(); #endif NEWLINE(stderr); #if (OS_TOPS20 | OS_VAXVMS) (void)putc('?',stderr); /* query at start of line */ #endif (void)fputs(g_progname,stderr); (void)fputs(": FATAL--",stderr); (void)fputs(msg,stderr); NEWLINE(stderr); (void)fprintf(stderr,"Current TeX page counters: [%s]",tctos()); NEWLINE(stderr); NEWLINE(stderr); g_errenc = 1; /* set global fatal exit code */ alldone(); }