void GOL_sysabort(UCHAR termcode) { static const UCHAR *termmsg[] = { "", "[TERM_WORKOVER]\n", "[TERM_OUTOVER]\n", "[TERM_ERROVER]\n", "[TERM_BUGTRAP]\n", "[TERM_SYSRESOVER]\n", "[TERM_ABORT]\n" }; GO_stderr.p1 += 128; /* 予備に取っておいた分を復活 */ /* バッファを出力 */ if (GO_stdout.p - GO_stdout.p0) { if (GOLD_write_t(GOL_outname, GO_stdout.p - GO_stdout.p0, GO_stdout.p0)) { GO_fputs("GOL_sysabort:output error!\n", &GO_stderr); termcode = 6; } } if (termcode <= 6) GO_fputs(termmsg[termcode], &GO_stderr); if (GO_stderr.p - GO_stderr.p0) GOLD_write_t(NULL, GO_stderr.p - GO_stderr.p0, GO_stderr.p0); GOLD_exit((termcode == 0) ? GOL_retcode : 1); }
/* 系统退出函数 */ void GOL_sysabort(UCHAR termcode) { static const UCHAR *termmsg[] = { "", "[TERM_WORKOVER]\n", "[TERM_OUTOVER]\n", "[TERM_ERROVER]\n", "[TERM_BUGTRAP]\n", "[TERM_SYSRESOVER]\n", "[TERM_ABORT]\n" }; GO_stderr.p1 += 128; /* Resurrect minute that was set aside in reserve */ /* The output buffer */ /* 将p0到p的数据写入GOL_outname指定的文件 */ if (writefile(GOL_outname, GO_stdout.p0, GO_stdout.p)) { GO_fputs("GOL_sysabort:output error!\n", &GO_stderr); termcode = 6; } /* 将termcode指定的termmsg字符串数组中的信息字符串输出 */ if (termcode <= 6) GO_fputs(termmsg[termcode], &GO_stderr); /* 如果还有数据没写完,将其写入标准输出(stdout) */ if (GO_stderr.p > GO_stderr.p0) writefile(NULL, GO_stderr.p0, GO_stderr.p); /* 退出 */ GOLD_exit((termcode == 0) ? GOL_retcode : 1); }