⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup.c

📁 操作系统源代码
💻 C
字号:
/**	program SETUP.C  					* *	execution will read the four adventure text files	* *	files; "advent1.txt", "advent2.txt", "advent3.txt" &	* *	"advent4.txt".  it will create the file "advtext.h"	* *	which is an Index Sequential Access Method (ISAM)	* *	header to be #included into "advent.c" before the	* *	header "advdec.h" is #included.				*/#include	<stdio.h>#include	<stdlib.h>#include	"advent.h"_PROTOTYPE(int main, (void));_PROTOTYPE(void file_error, (char *));_PROTOTYPE(void wheel, (void));_PROTOTYPE(void encode, (unsigned char *));int main(){    FILE *isam, *src, *dest;    char itxt[255];    int cnt, i;    long llen;    char filename[12];    static char *headername[] = {       "idx1[MAXLOC]", "idx2[MAXLOC]", "idx3[MAXOBJ]", "idx4[MAXMSG]",    };    long x29 = (1L << 29), x30 = (1L << 30);    if (!(x30 / 2 == x29 && 0L < x30 && x29 < x30)) {	fprintf(stderr, "Sorry, advent needs 32-bit `long int's.\n");	exit(EXIT_FAILURE);    }    isam = fopen("advtext.h", "w");    if (!isam) {	fprintf(stderr, "Sorry, I can't open advtext.h...\n");	exit(EXIT_FAILURE);    }    fprintf(isam, "\n/*\theader: ADVTEXT.H\t\t\t\t\t*/\n\n\n");    for (i = 1; i <= 4; i++) {	cnt = -1;	llen = 0L;	sprintf(filename, "advent%d.txt", i);	printf("Processing file %s  ", filename);	fflush(stdout);	src = fopen(filename, "r");	if (!src)	    file_error(filename);	sprintf(filename, "advent%d.dat", i);	dest = fopen(filename, "w");	if (!dest)	    file_error(filename);	fprintf(isam, "long\t%s = {\n\t", headername[i - 1]);	while (fgets(itxt, 255, src)) {	    wheel();	    encode((unsigned char *) itxt);	    if (fprintf(dest, "%s\n", itxt) == EOF)		file_error(filename);	    if (itxt[0] == '#') {		if (llen)		    fprintf(isam, "%ld,%s\t", llen,			    &"\0\0\0\0\0\0\0\n"[++cnt & 7]);		llen = ftell(dest);		if (llen <= 0) {		    fprintf(stderr, "ftell err in %s\n", filename);		    exit(EXIT_FAILURE);		}			/* if (!llen)	 */	    }				/* if (itxt[0])	 */	}				/* while fgets	 */	if (fprintf(isam, "%ld\n\t};\n\n", llen) == EOF)	    file_error("advtext.h");	fclose(src);	if (fclose(dest) == EOF)	    file_error(filename);	printf("\b completed\n");    }    if (fclose(isam) == EOF)	file_error("advtext.h");    return EXIT_SUCCESS;}					/* main		 */void file_error(filename)char *filename;{    perror(filename);    exit(EXIT_FAILURE);}_CONST unsigned char key[4] = {'c' | 0x80, 'L' | 0x80, 'y' | 0x80, 'D' | 0x80};void encode(msg)unsigned char *msg;{    register int i;    for (i = 1; msg[i]; i++)	msg[i] ^= key[i & 3];    msg[--i] = '\0';    return;}void wheel(){    static int wheel_idx = 0, wheel_wait = 0;    if (wheel_wait++ & 15)	return;    putchar('\b');    putchar("|/-\\"[wheel_idx++ & 3]);    fflush(stdout);    return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -