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

📄 common.c

📁 著名算法大师高爷爷设计的语言。此语言结合了Tex和C
💻 C
📖 第 1 页 / 共 2 页
字号:
{char temp_file_name[max_file_name_length];char*cur_file_name_end= cur_file_name+max_file_name_length-1;char*k= cur_file_name,*kk;int l;if(*loc=='"'){loc++;while(*loc!='"'&&k<=cur_file_name_end)*k++= *loc++;if(loc==limit)k= cur_file_name_end+1;}elsewhile(*loc!=' '&&*loc!='\t'&&*loc!='"'&&k<=cur_file_name_end)*k++= *loc++;if(k> cur_file_name_end)too_long();*k= '\0';if((cur_file= fopen(cur_file_name,"r"))!=NULL){cur_line= 0;print_where= 1;goto restart;}kk= getenv("CWEBINPUTS");if(kk!=NULL){if((l= strlen(kk))> max_file_name_length-2)too_long();strcpy(temp_file_name,kk);}else{#ifdef CWEBINPUTSif((l= strlen(CWEBINPUTS))> max_file_name_length-2)too_long();strcpy(temp_file_name,CWEBINPUTS);#elsel= 0;#endif }if(l> 0){if(k+l+2>=cur_file_name_end)too_long();for(;k>=cur_file_name;k--)*(k+l+1)= *k;strcpy(cur_file_name,temp_file_name);cur_file_name[l]= '/';if((cur_file= fopen(cur_file_name,"r"))!=NULL){cur_line= 0;print_where= 1;goto restart;}}include_depth--;err_print("! Cannot open include file");goto restart;}/*:23*/#line 452 "common.w";}return 1;}/*:21*//*26:*/#line 569 "common.w"voidcheck_complete(){if(change_limit!=change_buffer){strncpy(buffer,change_buffer,change_limit-change_buffer+1);limit= buffer+(int)(change_limit-change_buffer);changing= 1;change_depth= include_depth;loc= buffer;err_print("! Change file entry did not match");}}/*:26*//*35:*/#line 660 "common.w"name_pointerid_lookup(first,last,t)char*first;char*last;char t;{char*i= first;int h;int l;name_pointer p;if(last==NULL)for(last= first;*last!='\0';last++);l= last-first;/*36:*/#line 683 "common.w"h= (unsigned char)*i;while(++i<last)h= (h+h+(int)((unsigned char)*i))%hash_size;/*:36*/#line 673 "common.w";/*37:*/#line 691 "common.w"p= hash[h];while(p&&!names_match(p,first,l,t))p= p->link;if(p==NULL){p= name_ptr;p->link= hash[h];hash[h]= p;}/*:37*/#line 674 "common.w";if(p==name_ptr)/*39:*/#line 706 "common.w"{if(byte_ptr+l> byte_mem_end)overflow("byte memory");if(name_ptr>=name_dir_end)overflow("name");strncpy(byte_ptr,first,l);(++name_ptr)->byte_start= byte_ptr+= l;if(program==cweave)init_p(p,t);}/*:39*/#line 675 "common.w";return(p);}/*:35*//*42:*/#line 764 "common.w"voidprint_section_name(p)name_pointer p;{char*ss,*s= first_chunk(p);name_pointer q= p+1;while(p!=name_dir){ss= (p+1)->byte_start-1;if(*ss==' '&&ss>=s){term_write(s,ss-s);p= q->link;q= p;}else{term_write(s,ss+1-s);p= name_dir;q= NULL;}s= p->byte_start;}if(q)term_write("...",3);}/*:42*//*43:*/#line 783 "common.w"voidsprint_section_name(dest,p)char*dest;name_pointer p;{char*ss,*s= first_chunk(p);name_pointer q= p+1;while(p!=name_dir){ss= (p+1)->byte_start-1;if(*ss==' '&&ss>=s){p= q->link;q= p;}else{ss++;p= name_dir;}strncpy(dest,s,ss-s),dest+= ss-s;s= p->byte_start;}*dest= '\0';}/*:43*//*44:*/#line 804 "common.w"voidprint_prefix_name(p)name_pointer p;{char*s= first_chunk(p);int l= prefix_length(p);term_write(s,l);if(s+l<(p+1)->byte_start)term_write("...",3);}/*:44*//*45:*/#line 825 "common.w"int web_strcmp(j,j_len,k,k_len)char*j,*k;int j_len,k_len;{char*j1= j+j_len,*k1= k+k_len;while(k<k1&&j<j1&&*j==*k)k++,j++;if(k==k1)if(j==j1)return equal;else return extension;else if(j==j1)return prefix;else if(*j<*k)return less;else return greater;}/*:45*//*47:*/#line 855 "common.w"name_pointeradd_section_name(par,c,first,last,ispref)name_pointer par;int c;char*first;char*last;int ispref;{name_pointer p= name_ptr;char*s= first_chunk(p);int name_len= last-first+ispref;if(s+name_len> byte_mem_end)overflow("byte memory");if(name_ptr+1>=name_dir_end)overflow("name");(++name_ptr)->byte_start= byte_ptr= s+name_len;if(ispref){*(byte_ptr-1)= ' ';name_len--;name_ptr->link= name_dir;(++name_ptr)->byte_start= byte_ptr;}set_prefix_length(p,name_len);strncpy(s,first,name_len);p->llink= NULL;p->rlink= NULL;init_node(p);return par==NULL?(root= p):c==less?(par->llink= p):(par->rlink= p);}/*:47*//*48:*/#line 884 "common.w"voidextend_section_name(p,first,last,ispref)name_pointer p;char*first;char*last;int ispref;{char*s;name_pointer q= p+1;int name_len= last-first+ispref;if(name_ptr>=name_dir_end)overflow("name");while(q->link!=name_dir)q= q->link;q->link= name_ptr;s= name_ptr->byte_start;name_ptr->link= name_dir;if(s+name_len> byte_mem_end)overflow("byte memory");(++name_ptr)->byte_start= byte_ptr= s+name_len;strncpy(s,first,name_len);if(ispref)*(byte_ptr-1)= ' ';}/*:48*//*49:*/#line 912 "common.w"name_pointersection_lookup(first,last,ispref)char*first,*last;int ispref;{int c= 0;name_pointer p= root;name_pointer q= NULL;name_pointer r= NULL;name_pointer par= NULL;int name_len= last-first+1;/*50:*/#line 936 "common.w"while(p){c= web_strcmp(first,name_len,first_chunk(p),prefix_length(p));if(c==less||c==greater){if(r==NULL)par= p;p= (c==less?p->llink:p->rlink);}else{if(r!=NULL){printf("\n! Ambiguous prefix: matches <");print_prefix_name(p);printf(">\n and <");print_prefix_name(r);err_print(">");return name_dir;}r= p;p= p->llink;q= r->rlink;}if(p==NULL)p= q,q= NULL;}/*:50*/#line 926 "common.w";/*51:*/#line 961 "common.w"if(r==NULL)return add_section_name(par,c,first,last+1,ispref);/*:51*/#line 927 "common.w";/*52:*/#line 969 "common.w"switch(section_name_cmp(&first,name_len,r)){case prefix:if(!ispref){printf("\n! New name is a prefix of <");print_section_name(r);err_print(">");}else if(name_len<prefix_length(r))set_prefix_length(r,name_len);case equal:return r;case extension:if(!ispref||first<=last)extend_section_name(r,first,last+1,ispref);return r;case bad_extension:printf("\n! New name extends <");print_section_name(r);err_print(">");return r;default:printf("\n! Section name incompatible with <");print_prefix_name(r);printf(">,\n which abbreviates <");print_section_name(r);err_print(">");return r;}/*:52*/#line 928 "common.w";}/*:49*//*54:*/#line 1020 "common.w"int section_name_cmp(pfirst,len,r)char**pfirst;int len;name_pointer r;{char*first= *pfirst;name_pointer q= r+1;char*ss,*s= first_chunk(r);int c;int ispref;while(1){ss= (r+1)->byte_start-1;if(*ss==' '&&ss>=r->byte_start)ispref= 1,q= q->link;else ispref= 0,ss++,q= name_dir;switch(c= web_strcmp(first,len,s,ss-s)){case equal:if(q==name_dir)if(ispref){*pfirst= first+(ss-s);return extension;}else return equal;else return(q->byte_start==(q+1)->byte_start)?equal:prefix;case extension:if(!ispref)return bad_extension;first+= ss-s;if(q!=name_dir){len-= ss-s;s= q->byte_start;r= q;continue;}*pfirst= first;return extension;default:return c;}}}/*:54*//*58:*/#line 1095 "common.w"voiderr_print(s)char*s;{char*k,*l;printf(*s=='!'?"\n%s":"%s",s);if(web_file_open)/*59:*/#line 1115 "common.w"{if(changing&&include_depth==change_depth)printf(". (l. %d of change file)\n",change_line);else if(include_depth==0)printf(". (l. %d)\n",cur_line);else printf(". (l. %d of include file %s)\n",cur_line,cur_file_name);l= (loc>=limit?limit:loc);if(l> buffer){for(k= buffer;k<l;k++)if(*k=='\t')putchar(' ');else putchar(*k);putchar('\n');for(k= buffer;k<l;k++)putchar(' ');}for(k= l;k<limit;k++)putchar(*k);if(*limit=='|')putchar('|');putchar(' ');}/*:59*/#line 1102 "common.w";update_terminal;mark_error;}/*:58*//*61:*/#line 1150 "common.w"int wrap_up(){putchar('\n');if(show_stats)print_stats();/*62:*/#line 1160 "common.w"switch(history){case spotless:if(show_happiness)printf("(No errors were found.)\n");break;case harmless_message:printf("(Did you see the warning message above?)\n");break;case error_message:printf("(Pardon me, but I think I spotted something wrong.)\n");break;case fatal_message:printf("(That was a fatal error, my friend.)\n");}/*:62*/#line 1155 "common.w";if(history> harmless_message)return(1);else return(0);}/*:61*//*64:*/#line 1179 "common.w"voidfatal(s,t)char*s,*t;{if(*s)printf(s);err_print(t);history= fatal_message;exit(wrap_up());}/*:64*//*65:*/#line 1190 "common.w"voidoverflow(t)char*t;{printf("\n! Sorry, %s capacity exceeded",t);fatal("","");}/*:65*//*70:*/#line 1254 "common.w"voidscan_args(){char*dot_pos;char*name_pos;register char*s;boolean found_web= 0,found_change= 0,found_out= 0;boolean flag_change;while(--argc> 0){if((**(++argv)=='-'||**argv=='+')&&*(*argv+1))/*74:*/#line 1344 "common.w"{if(**argv=='-')flag_change= 0;else flag_change= 1;for(dot_pos= *argv+1;*dot_pos> '\0';dot_pos++)flags[*dot_pos]= flag_change;}/*:74*/#line 1266 "common.w"else{s= name_pos= *argv;dot_pos= NULL;while(*s){if(*s=='.')dot_pos= s++;else if(*s=='/')dot_pos= NULL,name_pos= ++s;else s++;}if(!found_web)/*71:*/#line 1292 "common.w"{if(s-*argv> max_file_name_length-5)/*76:*/#line 1364 "common.w"fatal("! Filename too long\n",*argv);/*:76*/#line 1295 "common.w";if(dot_pos==NULL)sprintf(web_file_name,"%s.w",*argv);else{strcpy(web_file_name,*argv);*dot_pos= 0;}sprintf(alt_web_file_name,"%s.web",*argv);sprintf(tex_file_name,"%s.tex",name_pos);sprintf(idx_file_name,"%s.idx",name_pos);sprintf(scn_file_name,"%s.scn",name_pos);sprintf(C_file_name,"%s.c",name_pos);found_web= 1;}/*:71*/#line 1275 "common.w"else if(!found_change)/*72:*/#line 1310 "common.w"{if(strcmp(*argv,"-")==0)found_change= -1;else{if(s-*argv> max_file_name_length-4)/*76:*/#line 1364 "common.w"fatal("! Filename too long\n",*argv);/*:76*/#line 1315 "common.w";if(dot_pos==NULL)sprintf(change_file_name,"%s.ch",*argv);else strcpy(change_file_name,*argv);found_change= 1;}}/*:72*/#line 1276 "common.w"else if(!found_out)/*73:*/#line 1323 "common.w"{if(s-*argv> max_file_name_length-5)/*76:*/#line 1364 "common.w"fatal("! Filename too long\n",*argv);/*:76*/#line 1326 "common.w";if(dot_pos==NULL){sprintf(tex_file_name,"%s.tex",*argv);sprintf(idx_file_name,"%s.idx",*argv);sprintf(scn_file_name,"%s.scn",*argv);sprintf(C_file_name,"%s.c",*argv);}else{strcpy(tex_file_name,*argv);strcpy(C_file_name,*argv);if(flags['x']){*dot_pos= 0;sprintf(idx_file_name,"%s.idx",*argv);sprintf(scn_file_name,"%s.scn",*argv);}}found_out= 1;}/*:73*/#line 1277 "common.w"else/*75:*/#line 1352 "common.w"{if(program==ctangle)fatal("! Usage: ctangle [options] webfile[.w] [{changefile[.ch]|-} [outfile[.c]]]\n","");else fatal("! Usage: cweave [options] webfile[.w] [{changefile[.ch]|-} [outfile[.tex]]]\n","");}/*:75*/#line 1278 "common.w";}}if(!found_web)/*75:*/#line 1352 "common.w"{if(program==ctangle)fatal("! Usage: ctangle [options] webfile[.w] [{changefile[.ch]|-} [outfile[.c]]]\n","");else fatal("! Usage: cweave [options] webfile[.w] [{changefile[.ch]|-} [outfile[.tex]]]\n","");}/*:75*/#line 1281 "common.w";if(found_change<=0)strcpy(change_file_name,"/dev/null");}/*:70*/

⌨️ 快捷键说明

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