Example #1
0
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);
}