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

📄 build_in.c

📁 linux下阅读源码的好工具
💻 C
📖 第 1 页 / 共 5 页
字号:
				    onechar[1] = (x&0x0000ff00)>>8;				    onechar[2] = x&0x000000ff;				    write(f_out, onechar, 3);#endif				}				x = ip->index[j];	/* for next round */#if	0				printf("#######x=%d ", x);#endif	/*0*/				y = 0;			    }			    diff = ip->offset[j] - y;			    y = ip->offset[j];			    if (diff < MaxNum1BPartition) {				temp = encode8b(diff);#if	!CRAZYSEGV				putc(temp, f_out);#else			        onechar[0] = temp;			        write(f_out, onechar, 1);#endif			    }			    else if (diff < MaxNum2BPartition) {				temp = encode8b((diff/MaxNum8bPartition) | 0x40);#if	!CRAZYSEGV				putc(temp, f_out);#else			        onechar[0] = temp;			        write(f_out, onechar, 1);#endif				temp = encode8b(diff % MaxNum8bPartition);#if	!CRAZYSEGV				putc(temp, f_out);#else			        onechar[0] = temp;			        write(f_out, onechar, 1);#endif			    }			    else if (diff < MaxNum3BPartition) {				temp = encode8b((diff/MaxNum16bPartition) | 0x80);#if	!CRAZYSEGV				putc(temp, f_out);#else			        onechar[0] = temp;			        write(f_out, onechar, 1);#endif				temp = encode16b(diff % MaxNum16bPartition);#if	!CRAZYSEGV				putc((temp & 0x0000ff00) >> 8, f_out);				putc(temp & 0x000000ff, f_out);#else			        onechar[0] = (temp & 0x0000ff00) >> 8;			        onechar[1] = temp & 0x000000ff;			        write(f_out, onechar, 2);#endif			    }			    else {				temp = encode8b((diff/MaxNum24bPartition) | 0xc0);#if	!CRAZYSEGV				putc(temp, f_out);#else				onechar[0] = temp;				write(f_out, onechar, 1);#endif				temp = encode24b(diff % MaxNum24bPartition);#if	!CRAZYSEGV				putc((temp & 0x00ff0000) >> 16, f_out);				putc((temp & 0x0000ff00) >> 8, f_out);				putc(temp & 0x000000ff, f_out);#else			        onechar[0] = (temp & 0x00ff0000) >> 16;				onechar[1] = (temp & 0x0000ff00) >> 8;				onechar[2] = temp & 0x000000ff;			        write(f_out, onechar, 3);#endif			    }			    numonline ++;			}		    } /* ByteLevelIndex */		    else if (OneFilePerBlock) {			if (file_num <= MaxNum8bPartition) {			    for(j=0; j < INDEX_SET_SIZE; j++) {				if (ip->index[j] == INDEX_ELEM_FREE) continue;#if	!CRAZYSEGV				putc(encode8b(ip->index[j]), f_out);#else			        onechar[0] = encode8b(ip->index[j]);			        write(f_out, onechar, 1);#endif			    }			}			else if (file_num <= MaxNum12bPartition) {			  for(j=0; j < INDEX_SET_SIZE; j++) {			    if (ip->index[j] == INDEX_ELEM_FREE) continue;			    x = encode12b(ip->index[j]);			    if (even_words) {#if	!CRAZYSEGV				putc(x & 0x000000ff, f_out);	/* lsb */#else			        onechar[0] = x & 0x000000ff;			        write(f_out, onechar, 1);#endif				y = (x & 0x00000f00)>>8;	/* msb */				even_words = 0;			    }			    else {	/* odd number of words so far */			        y |= (x&0x00000f00)>>4; /* msb of x into msb of y */#if	!CRAZYSEGV				putc(y, f_out);				putc(x&0x000000ff, f_out);#else			        onechar[0] = y;			        onechar[1] = x&0x000000ff;			        write(f_out, onechar, 2);#endif				even_words = 1;			    }			  }			}			else if (file_num <= MaxNum16bPartition) {			    for(j=0; j < INDEX_SET_SIZE; j++) {				if (ip->index[j] == INDEX_ELEM_FREE) continue;				x = encode16b(ip->index[j]);#if	!CRAZYSEGV				putc((x&0x0000ff00)>>8, f_out);				putc(x&0x000000ff, f_out);#else				onechar[0] = (x&0x0000ff00)>>8;				onechar[1] = x&0x000000ff;			        write(f_out, onechar, 2);#endif			    }			}			else {			    for(j=0; j < INDEX_SET_SIZE; j++) {				if (ip->index[j] == INDEX_ELEM_FREE) continue;				x = encode24b(ip->index[j]);#if	!CRAZYSEGV				putc((x&0x00ff0000)>>16, f_out);				putc((x&0x0000ff00)>>8, f_out);				putc(x&0x000000ff, f_out);#else				onechar[0] = (x&0x00ff0000)>>16;				onechar[1] = (x&0x0000ff00)>>8;				onechar[2] = x&0x000000ff;			        write(f_out, onechar, 3);#endif			    }			}		    } /* OneFilePerBlock */		    else {	/* normal partitions */			for(j=0; j < INDEX_SET_SIZE; j++) {			    if (ip->index[j] == INDEX_ELEM_FREE) continue;#if	!CRAZYSEGV			    putc(ip->index[j], f_out);#else			    onechar[0] = ip->index[j];			    write(f_out, onechar, 1);#endif			}		    }		}                ip = ip->next_i;   /* go to next indices */                indicesfree(ip_old, sizeof(struct indices));                ip_old = ip;            }	    if (!ByteLevelIndex && OneFilePerBlock && !even_words && (file_num > MaxNum8bPartition) && (file_num <= MaxNum12bPartition)) {#if	!CRAZYSEGV		putc(y, f_out);#else		onechar[0] = y;		write(f_out, onechar, 1);#endif	    }next_token:#if	!CRAZYSEGV	    if (putc('\n', f_out) == EOF) {#else	    onechar[0] = '\n';	    if (write(f_out, onechar, 1) <= 0) {#endif		fprintf(stderr, "Error: write failed at %s:%d\n", __FILE__, __LINE__); 		exit(2);	    }            tp = tp->next_t;    /* go to next token */#if	0	    fprintf(stderr, "numelements=%d\n", numelements);#endif	/*0*/#if	BG_DEBUG	    memory_usage -= (strlen(tp_old->word) + 1);#endif	/*BG_DEBUG*/	    wordfree(tp_old->word, 0);            tokenfree(tp_old, sizeof(struct token));            tp_old = tp;	    numseencount ++;        }    }    tokenallfree();    indicesallfree();    wordallfree();#if	BG_DEBUG    fprintf(stderr, "out of traverse(): saved/freed %d tokens: new usage: %d\n", numseencount, memory_usage);#endif#if	!CRAZYSEGV    fflush(f_out);    fclose(f_out);#else    close(f_out);#endif}traverse1(){    FILE *i1, *i2, *i3;    int ret;    char s[MAX_LINE_LEN], es1[MAX_LINE_LEN], es2[MAX_LINE_LEN], es3[MAX_LINE_LEN];    char s1[MAX_LINE_LEN];    extern int errno;    static int maxsortlinelen = 0;    int	i;    if (maxsortlinelen <= 0) {	if (file_num < MaxNum8bPartition)	    maxsortlinelen = round((MaxNum8bPartition * sizeof(int) + MAX_NAME_SIZE), MAX_LINE_LEN) * MAX_LINE_LEN;	else if (file_num < MaxNum12bPartition)	    maxsortlinelen = round((MaxNum12bPartition * sizeof(int) + MAX_NAME_SIZE), MAX_LINE_LEN) * MAX_LINE_LEN;	else maxsortlinelen = MAX_SORTLINE_LEN;    }    traverse();	/* will produce .i2 and my_free allocated memory */#if	USESORT_Z_OPTION#if	DONTUSESORT_T_OPTION || SFS_COMPAT    sprintf(s, "exec %s -z %d '%s/%s' > '%s/%s'\n", SYSTEM_SORT, maxsortlinelen, escapesinglequote(INDEX_DIR, es1), I2, escapesinglequote(INDEX_DIR, es2), O2);#else    sprintf(s, "exec %s -T '%s' -z %d '%s/%s' > '%s/%s'\n", SYSTEM_SORT, escapesinglequote(INDEX_DIR, es1), maxsortlinelen, escapesinglequote(INDEX_DIR, es2), I2, escapesinglequote(INDEX_DIR, es3), O2);#endif#else#if	DONTUSESORT_T_OPTION || SFS_COMPAT    sprintf(s, "exec %s '%s/%s' > '%s/%s'\n", SYSTEM_SORT, escapesinglequote(INDEX_DIR, es1), I2, escapesinglequote(INDEX_DIR, es2), O2);#else    sprintf(s, "exec %s -T '%s' '%s/%s' > '%s/%s'\n", SYSTEM_SORT, escapesinglequote(INDEX_DIR, es1), escapesinglequote(INDEX_DIR, es2), I2, escapesinglequote(INDEX_DIR, es3), O2);#endif#endif#ifdef SW_DEBUG    printf("%s", s);#endif    if((ret=system(s)) != 0) {	sprintf(s1, "system('%s') failed at:\n\t File=%s, Line=%d, Errno=%d", s, __FILE__, __LINE__, errno);	perror(s1);	fprintf(stderr, "Please try to run the program again\n(If there's no memory, increase the swap area / don't use -M and -B options)\n");	exit(2);    }#ifdef SW_DEBUG    printf("mv .o2 .i2\n"); fflush(stdout);#endif#if SFS_COMPAT    sprintf(s, "%s/%s", INDEX_DIR, O2);    sprintf(s1, "%s/%s", INDEX_DIR, I2);    rename(s, s1);#else    sprintf(s, "exec %s '%s/%s' '%s/%s'\n", SYSTEM_MV, escapesinglequote(INDEX_DIR, es1), O2, escapesinglequote(INDEX_DIR, es2), I2);    system(s);#endif    system(sync_path);	/* sync() has a bug */#if	0    printf("traversed\n");    sprintf(s, "exec %s -10 '%s/%s'\n", SYSTEM_HEAD, escapesinglequote(INDEX_DIR, es1), I2);    system(s);#endif	/*0*/    /*     * This flag is set from outside iff build-fast | build-addto option is set.     */    if(FirstTraverse1) {	/* Mention whether numbers are indexed */	if(IndexNumber) sprintf(s, "exec %s %%1234567890 > '%s/%s'\n", SYSTEM_ECHO, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);	else sprintf(s, "exec %s %% > '%s/%s'\n", SYSTEM_ECHO, escapesinglequote(INDEX_DIR,es1), INDEX_FILE);	system(s);	/* Put the magic number: 0 if not 1file/blk, numfiles otherwise */	if (OneFilePerBlock) {		if (ByteLevelIndex) sprintf(s, "exec %s %%-%d >> '%s/%s'\n", SYSTEM_ECHO, file_num, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);		else sprintf(s, "exec %s %%%d >> '%s/%s'\n", SYSTEM_ECHO, file_num, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);	}	else sprintf(s, "exec %s %%0 >> '%s/%s'\n", SYSTEM_ECHO, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);	system(s);	/* Put the magic number: 0 if not structured index, 1 if so */	if (StructuredIndex) sprintf(s, "exec %s %%%d >> '%s/%s'\n", SYSTEM_ECHO, attr_num, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);	else if (RecordLevelIndex) sprintf(s, "exec %s %%-2 %s >> '%s/%s'\n", SYSTEM_ECHO, old_rdelim, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);	else sprintf(s, "exec %s %%0 >> '%s/%s'\n", SYSTEM_ECHO, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);	system(s);#ifdef	SW_DEBUG	sprintf(s, "exec %s -l %s/.glimpse*\n", SYSTEM_LS, escapesinglequote(INDEX_DIR, es1));	system(s);#endif        sprintf(s, "exec %s '%s/%s' >> '%s/%s'\n", SYSTEM_CAT, escapesinglequote(INDEX_DIR, es1), I2, escapesinglequote(INDEX_DIR, es2), INDEX_FILE);        system(s);#if	SFS_COMPAT	sprintf(s, "%s/%s", INDEX_DIR, I2);	unlink(s);#else	sprintf(s, "exec %s '%s/%s'\n", SYSTEM_RM, escapesinglequote(INDEX_DIR, es1), I2);	system(s);#endif#ifdef	SW_DEBUG	sprintf(s, "exec %s -l %s/.glimpse*\n", SYSTEM_LS, escapesinglequote(INDEX_DIR, es1));	system(s);#endif#if	0    printf("catted\n");    sprintf(s, "exec %s -10 '%s/%s'\n", SYSTEM_HEAD, escapesinglequote(INDEX_DIR, es1), INDEX_FILE);    system(s);#endif	/*0*/        FirstTraverse1 = 0;	system(sync_path);	/* sync() has a bug */        return;    }    /* else not first-traverse */    sprintf(s, "%s/%s", INDEX_DIR, INDEX_FILE);    if((i1 = fopen(s, "r")) == NULL) {	/* new stuff */        fprintf(stderr, "can't open %s for reading\n", s);        exit(2);    }    sprintf(s, "%s/%s", INDEX_DIR, I2);    if((i2 = fopen(s, "r")) == NULL) {	/* old stuff */        fprintf(stderr, "can't open %s for reading\n", s);        exit(2);    }    sprintf(s, "%s/%s", INDEX_DIR, I3);    if((i3 = fopen(s, "w")) == NULL) {	/* result */        fprintf(stderr, "can't open %s for writing\n", s);        exit(2);    }    /* Copy the 3 option fields (indexnumber, onefileperblock, structuredqueries) */    fgets(s, 256, i1);    s[255] = '\0';    fputs(s, i3);    fgets(s, 256, i1);    s[255] = '\0';    fputs(s, i3);    fgets(s, 256, i1);    s[255] = '\0';    fputs(s, i3);    merge_in(i2, i1, i3);    /* merge_in(i1, i2, i3); */#ifdef	BG_DEBUG    fprintf(stderr, "out of merge_in()\n");#endif	/*BG_DEBUG*/    fclose(i1);    fflush(i2);    fclose(i2);    fflush(i3);    fclose(i3);    system(sync_path);	/* sync() has a bug */#ifdef SW_DEBUG    printf("mv .i3 %s\n", INDEX_FILE); fflush(stdout);#endif#if	SFS_COMPAT    sprintf(s, "%s/%s", INDEX_DIR, I3);    sprintf(s1, "%s/%s", INDEX_DIR, INDEX_FILE);    rename(s, s1);#else    sprintf(s, "exec %s '%s/%s' '%s/%s'", SYSTEM_MV, escapesinglequote(INDEX_DIR, es1), I3, escapesinglequote(INDEX_DIR, es2), INDEX_FILE);    system(s);#endif/* #ifdef SW_DEBUG */#if 0    printf("ls -l .i2 %s\n", INDEX_FILE); fflush(stdout);    sprintf(s, "exec %s -l %s/.glimpse*", SYSTEM_LS, escapesinglequote(INDEX_DIR, es1));    printf("%d\n", system(s));

⌨️ 快捷键说明

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