summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/tiedir/tie.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/tiedir/tie.c')
-rw-r--r--Build/source/texk/web2c/tiedir/tie.c920
1 files changed, 920 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/tiedir/tie.c b/Build/source/texk/web2c/tiedir/tie.c
new file mode 100644
index 00000000000..ccf39c03c63
--- /dev/null
+++ b/Build/source/texk/web2c/tiedir/tie.c
@@ -0,0 +1,920 @@
+#define banner "This is TIE, CWEB Version 2.4."
+#define copyright \
+"Copyright (c) 1989,1992 by THD/ITI. All rights reserved." \
+ \
+
+#define incr(v)v+= 1
+#define decr(v)v-= 1
+#define loop while(1)
+#define do_nothing
+#define false 0
+#define true 1
+#define spotless 0
+#define troublesome 1
+#define fatal 2 \
+
+#define first_text_char 0
+#define last_text_char 255 \
+
+#define map_xchr(c)(text_char)(c) \
+
+#define map_xord(c)(ASCII_Code)(c) \
+ \
+
+#define tab_mark 9
+#define nl_mark 10
+#define form_feed 12 \
+ \
+
+#define term_out stdout
+#define print(a)fprintf(term_out,a)
+#define print2(a,b)fprintf(term_out,a,b)
+#define print3(a,b,c)fprintf(term_out,a,b,c)
+#define print_c(v)fputc(v,term_out);
+#define new_line(v)fputc('\n',v)
+#define term_new_line new_line(term_out) \
+
+#define print_ln(v){fprintf(term_out,v);term_new_line;} \
+
+#define print2_ln(a,b){print2(a,b);term_new_line;}
+#define print3_ln(a,b,c){print3(a,b,c);term_new_line;} \
+
+#define print_nl(v){term_new_line;print(v);} \
+
+#define print2_nl(a,b){term_new_line;print2(a,b);} \
+ \
+
+#define update_terminal fflush(term_out) \
+ \
+ \
+ \
+ \
+
+#define error_loc(m)err_loc(m);history= troublesome;}
+#define err_print(m){print_nl(m);error_loc \
+
+#define fatal_error(m){ \
+print(m);print_c('.');history= fatal; \
+term_new_line;jump_out(); \
+} \
+ \
+
+#define jump_out()exit(1) \
+ \
+ \
+ \
+ \
+
+#define none (max_file_index+1) \
+
+/*2:*/
+#line 112 "tie.w"
+
+/*15:*/
+#line 478 "tie.w"
+
+#include <stdio.h>
+
+
+/*:15*//*16:*/
+#line 486 "tie.w"
+
+#ifdef __STDC__
+#include <stdlib.h>
+#else
+#include <malloc.h>
+#endif
+
+/*:16*/
+#line 113 "tie.w"
+
+/*5:*/
+#line 142 "tie.w"
+
+#define buf_size 512
+#define max_file_index 9
+
+
+
+
+/*:5*/
+#line 114 "tie.w"
+
+/*4:*/
+#line 133 "tie.w"
+
+typedef int boolean;
+typedef char*string;
+
+
+/*:4*//*7:*/
+#line 224 "tie.w"
+
+#define max_ASCII (126+1)
+typedef unsigned char ASCII_Code;
+
+
+
+/*:7*//*8:*/
+#line 250 "tie.w"
+
+typedef unsigned char text_char;
+typedef FILE*text_file;
+
+
+/*:8*//*18:*/
+#line 529 "tie.w"
+
+#define search 0
+#define test 1
+#define reading 2
+#define ignore 3
+typedef int in_file_modes;
+#define unknown 0
+#define master 1
+#define chf 2
+typedef int file_types;
+
+
+/*:18*//*19:*/
+#line 547 "tie.w"
+
+#define normal 0
+#define pre 1
+#define post 2
+typedef int out_md_type;
+
+
+/*:19*//*20:*/
+#line 557 "tie.w"
+
+typedef int buffer_index;
+typedef int file_index;
+
+
+/*:20*//*21:*/
+#line 566 "tie.w"
+
+typedef struct _idsc{
+string name_of_file;
+ASCII_Code buffer[buf_size];
+in_file_modes mode;
+long line;
+file_types type_of_file;
+buffer_index limit;
+text_file the_file;
+}input_description;
+
+
+/*:21*/
+#line 115 "tie.w"
+
+/*6:*/
+#line 159 "tie.w"
+
+static int history= spotless;
+
+
+
+/*:6*//*9:*/
+#line 270 "tie.w"
+
+static ASCII_Code xord[last_text_char+1];
+
+static text_char xchr[max_ASCII+1];
+
+
+
+/*:9*//*22:*/
+#line 582 "tie.w"
+
+static file_index actual_input,test_input,no_ch;
+static file_types prod_chf= unknown;
+static out_md_type out_mode;
+
+
+/*:22*//*23:*/
+#line 594 "tie.w"
+
+static input_description*input_organization[max_file_index+1];
+
+
+
+
+
+/*:23*//*26:*/
+#line 641 "tie.w"
+
+static boolean input_has_ended= false;
+
+
+/*:26*//*35:*/
+#line 801 "tie.w"
+
+static text_file out_file;
+static string out_name;
+
+
+/*:35*/
+#line 116 "tie.w"
+
+/*31:*/
+#line 744 "tie.w"
+
+void err_loc(i)
+int i;
+{
+print3_ln(" (file %s, l.%ld).",
+input_organization[i]->name_of_file,
+input_organization[i]->line);
+}
+
+
+/*:31*/
+#line 117 "tie.w"
+
+/*24:*/
+#line 616 "tie.w"
+
+void get_line(i)
+file_index i;
+{register input_description*inp_desc= input_organization[i];
+if(inp_desc->mode==ignore)return;
+if(feof(inp_desc->the_file))
+/*25:*/
+#line 630 "tie.w"
+
+{
+inp_desc->mode= ignore;
+inp_desc->limit= -1;
+if(inp_desc->type_of_file==master)input_has_ended= true;
+return;
+}
+
+
+/*:25*/
+#line 622 "tie.w"
+
+/*27:*/
+#line 655 "tie.w"
+
+{int final_limit;
+int c;
+/*28:*/
+#line 679 "tie.w"
+
+incr(inp_desc->line);
+if(inp_desc->type_of_file==master&&inp_desc->line%100==0){
+if(inp_desc->line%500==0)print2("%ld",inp_desc->line);
+else print_c('.');
+update_terminal;
+}
+
+
+/*:28*/
+#line 659 "tie.w"
+
+inp_desc->limit= final_limit= 0;
+while(inp_desc->limit<buf_size){
+c= fgetc(inp_desc->the_file);
+/*29:*/
+#line 696 "tie.w"
+
+if(c==EOF){
+if(inp_desc->limit<=0){
+inp_desc->mode= ignore;
+inp_desc->limit= -1;
+if(inp_desc->type_of_file==master)input_has_ended= true;
+return;
+}else{
+c= nl_mark;
+break;
+}
+}
+
+
+/*:29*/
+#line 664 "tie.w"
+
+inp_desc->buffer[inp_desc->limit++]= c= map_xord(c);
+if(c==nl_mark)break;
+if(c!=32&&c!=tab_mark)
+final_limit= inp_desc->limit;
+}
+/*30:*/
+#line 712 "tie.w"
+
+if(c!=nl_mark){
+err_print("! Input line too long")(i);
+
+while((c= fgetc(inp_desc->the_file))!=EOF&&map_xord(c)!=nl_mark)
+do_nothing;
+}
+
+
+
+
+
+/*:30*/
+#line 670 "tie.w"
+
+inp_desc->limit= final_limit;
+}
+
+
+/*:27*/
+#line 623 "tie.w"
+
+}
+
+
+/*:24*//*38:*/
+#line 850 "tie.w"
+
+boolean lines_dont_match(i,j)
+file_index i,j;
+{
+buffer_index k,lmt;
+if(input_organization[i]->limit!=input_organization[j]->limit)
+return(true);
+lmt= input_organization[i]->limit;
+for(k= 0;k<lmt;k++)
+if(input_organization[i]->buffer[k]!=input_organization[j]->buffer[k])
+return(true);
+return(false);
+}
+
+
+/*:38*//*39:*/
+#line 871 "tie.w"
+
+void init_change_file(i,b)
+file_index i;boolean b;
+{register input_description*inp_desc= input_organization[i];
+/*40:*/
+#line 885 "tie.w"
+
+loop{ASCII_Code c;
+get_line(i);
+if(inp_desc->mode==ignore)return;
+if(inp_desc->limit<2)continue;
+if(inp_desc->buffer[0]!=64)continue;
+c= inp_desc->buffer[1];
+if(c>=88&&c<=90)
+c+= 122-90;
+if(c==120)break;
+if(c==121||c==122)
+if(b)
+err_print("! Where is the matching @x?")(i);
+
+}
+
+
+/*:40*/
+#line 875 "tie.w"
+
+/*41:*/
+#line 904 "tie.w"
+
+do{
+get_line(i);
+if(inp_desc->mode==ignore){
+err_print("! Change file ended after @x")(i);
+
+return;
+}
+}while(inp_desc->limit<=0);
+
+
+/*:41*/
+#line 876 "tie.w"
+
+}
+
+
+/*:39*//*42:*/
+#line 918 "tie.w"
+
+void put_line(j)
+file_index j;
+{buffer_index i;
+buffer_index lmt;
+ASCII_Code*p;
+lmt= input_organization[j]->limit;
+p= input_organization[j]->buffer;
+for(i= 0;i<lmt;i++)fputc(map_xchr(*p++),out_file);
+new_line(out_file);
+}
+
+
+/*:42*//*43:*/
+#line 934 "tie.w"
+
+boolean e_of_ch_module(i)
+file_index i;
+{register input_description*inp_desc= input_organization[i];
+if(inp_desc->limit<0){
+print_nl("! At the end of change file missing @z ");
+
+print2("%s",input_organization[i]->name_of_file);
+term_new_line;
+return(true);
+}else if(inp_desc->limit>=2)if(inp_desc->buffer[0]==64&&
+(inp_desc->buffer[1]==90||inp_desc->buffer[1]==122))
+return(true);
+return(false);
+}
+
+
+/*:43*//*44:*/
+#line 954 "tie.w"
+
+boolean e_of_ch_preamble(i)
+file_index i;
+{register input_description*inp_desc= input_organization[i];
+if(inp_desc->limit>=2&&inp_desc->buffer[0]==64)
+if(inp_desc->buffer[1]==89||inp_desc->buffer[1]==121)return(true);
+return(false);
+}
+
+
+
+/*:44*//*55:*/
+#line 1157 "tie.w"
+
+void usage()
+{
+print("Usage: tie -[mc] outfile master changefile(s)");
+term_new_line;
+jump_out();
+}
+
+
+/*:55*/
+#line 118 "tie.w"
+
+/*59:*/
+#line 1235 "tie.w"
+
+main(argc,argv)
+int argc;string*argv;
+{{/*12:*/
+#line 408 "tie.w"
+
+int i;
+
+
+/*:12*/
+#line 1238 "tie.w"
+
+/*10:*/
+#line 296 "tie.w"
+
+xchr[32]= ' ';
+xchr[33]= '!';
+xchr[34]= '\"';
+xchr[35]= '#';
+xchr[36]= '$';
+xchr[37]= '%';
+xchr[38]= '&';
+xchr[39]= '\'';
+xchr[40]= '(';
+xchr[41]= ')';
+xchr[42]= '*';
+xchr[43]= '+';
+xchr[44]= ',';
+xchr[45]= '-';
+xchr[46]= '.';
+xchr[47]= '/';
+xchr[48]= '0';
+xchr[49]= '1';
+xchr[50]= '2';
+xchr[51]= '3';
+xchr[52]= '4';
+xchr[53]= '5';
+xchr[54]= '6';
+xchr[55]= '7';
+xchr[56]= '8';
+xchr[57]= '9';
+xchr[58]= ':';
+xchr[59]= ';';
+xchr[60]= '<';
+xchr[61]= '=';
+xchr[62]= '>';
+xchr[63]= '?';
+xchr[64]= '@';
+xchr[65]= 'A';
+xchr[66]= 'B';
+xchr[67]= 'C';
+xchr[68]= 'D';
+xchr[69]= 'E';
+xchr[70]= 'F';
+xchr[71]= 'G';
+xchr[72]= 'H';
+xchr[73]= 'I';
+xchr[74]= 'J';
+xchr[75]= 'K';
+xchr[76]= 'L';
+xchr[77]= 'M';
+xchr[78]= 'N';
+xchr[79]= 'O';
+xchr[80]= 'P';
+xchr[81]= 'Q';
+xchr[82]= 'R';
+xchr[83]= 'S';
+xchr[84]= 'T';
+xchr[85]= 'U';
+xchr[86]= 'V';
+xchr[87]= 'W';
+xchr[88]= 'X';
+xchr[89]= 'Y';
+xchr[90]= 'Z';
+xchr[91]= '[';
+xchr[92]= '\\';
+xchr[93]= ']';
+xchr[94]= '^';
+xchr[95]= '_';
+xchr[96]= '`';
+xchr[97]= 'a';
+xchr[98]= 'b';
+xchr[99]= 'c';
+xchr[100]= 'd';
+xchr[101]= 'e';
+xchr[102]= 'f';
+xchr[103]= 'g';
+xchr[104]= 'h';
+xchr[105]= 'i';
+xchr[106]= 'j';
+xchr[107]= 'k';
+xchr[108]= 'l';
+xchr[109]= 'm';
+xchr[110]= 'n';
+xchr[111]= 'o';
+xchr[112]= 'p';
+xchr[113]= 'q';
+xchr[114]= 'r';
+xchr[115]= 's';
+xchr[116]= 't';
+xchr[117]= 'u';
+xchr[118]= 'v';
+xchr[119]= 'w';
+xchr[120]= 'x';
+xchr[121]= 'y';
+xchr[122]= 'z';
+xchr[123]= '{';
+xchr[124]= '|';
+xchr[125]= '}';
+xchr[126]= '~';
+xchr[0]= ' ';xchr[0x7F]= ' ';
+
+
+/*:10*//*13:*/
+#line 429 "tie.w"
+
+for(i= 1;i<32;xchr[i++]= ' ');
+xchr[tab_mark]= '\t';
+xchr[form_feed]= '\f';
+xchr[nl_mark]= '\n';
+
+
+/*:13*//*14:*/
+#line 440 "tie.w"
+
+for(i= first_text_char;i<=last_text_char;xord[i++]= 32)do_nothing;
+for(i= 1;i<=126;i++)xord[xchr[i]]= i;
+
+
+
+
+
+/*:14*/
+#line 1239 "tie.w"
+
+}
+print_ln(banner);
+print_ln(copyright);
+actual_input= 0;
+out_mode= normal;
+/*56:*/
+#line 1177 "tie.w"
+
+{int act_arg;
+if(argc<5||argc>max_file_index+4-1)usage();
+no_ch= -1;
+for(act_arg= 1;act_arg<argc;act_arg++){
+if(argv[act_arg][0]=='-')/*57:*/
+#line 1195 "tie.w"
+
+if(prod_chf!=unknown)usage();
+else
+switch(argv[act_arg][1]){
+case'c':
+case'C':prod_chf= chf;break;
+case'm':
+case'M':prod_chf= master;break;
+default:usage();
+}
+
+
+/*:57*/
+#line 1182 "tie.w"
+
+else/*58:*/
+#line 1211 "tie.w"
+
+{if(no_ch==(-1)){
+out_name= argv[act_arg];
+}else{register input_description*inp_desc;
+inp_desc= (input_description*)
+malloc(sizeof(input_description));
+if(inp_desc==NULL)
+fatal_error("! No memory for descriptor");
+
+inp_desc->mode= search;
+inp_desc->line= 0;
+inp_desc->type_of_file= chf;
+inp_desc->limit= 0;
+inp_desc->name_of_file= argv[act_arg];
+input_organization[no_ch]= inp_desc;
+}
+incr(no_ch);
+}
+
+
+/*:58*/
+#line 1183 "tie.w"
+
+}
+if(no_ch<=0||prod_chf==unknown)usage();
+}
+
+
+/*:56*/
+#line 1245 "tie.w"
+
+/*34:*/
+#line 788 "tie.w"
+
+{
+out_file= fopen(out_name,"w");
+if(out_file==NULL){
+fatal_error("! Could not open/create output file");
+
+}
+}
+
+
+/*:34*/
+#line 1246 "tie.w"
+
+/*36:*/
+#line 809 "tie.w"
+
+{input_organization[0]->the_file=
+fopen(input_organization[0]->name_of_file,"r");
+if(input_organization[0]->the_file==NULL)
+fatal_error("! Could not open master file");
+
+print2("(%s)",input_organization[0]->name_of_file);
+term_new_line;
+input_organization[0]->type_of_file= master;
+get_line(0);
+}
+
+/*:36*/
+#line 1247 "tie.w"
+
+/*37:*/
+#line 825 "tie.w"
+
+{file_index i;
+i= 1;
+while(i<no_ch){
+input_organization[i]->the_file=
+fopen(input_organization[i]->name_of_file,"r");
+if(input_organization[i]->the_file==NULL)
+fatal_error("!Could not open change file");
+
+print2("(%s)",input_organization[i]->name_of_file);
+term_new_line;
+init_change_file(i,true);
+incr(i);
+}
+}
+
+
+
+
+
+/*:37*/
+#line 1248 "tie.w"
+
+/*53:*/
+#line 1128 "tie.w"
+
+actual_input= 0;
+input_has_ended= false;
+while(input_has_ended==false||actual_input!=0)
+/*45:*/
+#line 970 "tie.w"
+
+{file_index test_file;
+/*46:*/
+#line 985 "tie.w"
+
+{register input_description*inp_desc;
+while(actual_input>0&&e_of_ch_module(actual_input)){
+inp_desc= input_organization[actual_input];
+if(inp_desc->type_of_file==master){
+
+fatal_error("! This can't happen: change file is master file");
+
+}
+inp_desc->mode= search;
+init_change_file(actual_input,true);
+while((input_organization[actual_input]->mode!=reading
+&&actual_input>0))decr(actual_input);
+}
+}
+
+
+/*:46*/
+#line 972 "tie.w"
+
+if(input_has_ended&&actual_input==0)break;
+/*47:*/
+#line 1009 "tie.w"
+
+test_input= none;
+test_file= actual_input;
+while(test_input==none&&test_file<no_ch-1){
+incr(test_file);
+switch(input_organization[test_file]->mode){
+case search:if(lines_dont_match(actual_input,test_file)==false){
+input_organization[test_file]->mode= test;
+test_input= test_file;
+}
+break;
+case test:if(lines_dont_match(actual_input,test_file)==true){
+
+input_organization[test_file]->mode= search;
+err_print("! Sections do not match")(actual_input);
+
+err_loc(test_file);
+init_change_file(test_file,false);
+}else test_input= test_file;
+break;
+case reading:do_nothing;
+break;
+case ignore:do_nothing;
+break;
+}
+}
+
+
+/*:47*/
+#line 974 "tie.w"
+
+/*48:*/
+#line 1043 "tie.w"
+
+if(prod_chf==chf){
+loop{
+/*49:*/
+#line 1057 "tie.w"
+
+if(out_mode==normal){
+if(test_input!=none){
+fputc(map_xchr(64),out_file);fputc(map_xchr(120),out_file);
+new_line(out_file);
+out_mode= pre;
+}else break;
+}
+
+
+/*:49*/
+#line 1046 "tie.w"
+
+/*50:*/
+#line 1071 "tie.w"
+
+
+if(out_mode==pre){
+if(test_input==none){
+fputc(map_xchr(64),out_file);fputc(map_xchr(121),out_file);
+new_line(out_file);
+out_mode= post;
+}else{
+if(input_organization[actual_input]->type_of_file==master)
+put_line(actual_input);
+break;
+}
+}
+
+
+/*:50*/
+#line 1047 "tie.w"
+
+/*51:*/
+#line 1092 "tie.w"
+
+if(out_mode==post){
+if(input_organization[actual_input]->type_of_file==chf){
+if(test_input==none)put_line(actual_input);
+break;
+}else{
+fputc(map_xchr(64),out_file);fputc(map_xchr(122),out_file);
+new_line(out_file);
+new_line(out_file);
+out_mode= normal;
+}
+}
+
+
+/*:51*/
+#line 1048 "tie.w"
+
+}
+}else
+if(test_input==none)put_line(actual_input);
+
+
+/*:48*/
+#line 975 "tie.w"
+
+/*52:*/
+#line 1109 "tie.w"
+
+get_line(actual_input);
+if(test_input!=none){
+get_line(test_input);
+if(e_of_ch_preamble(test_input)==true){
+get_line(test_input);
+input_organization[test_input]->mode= reading;
+actual_input= test_input;
+test_input= none;
+}
+}
+
+
+/*:52*/
+#line 976 "tie.w"
+
+}
+
+
+/*:45*/
+#line 1132 "tie.w"
+
+if(out_mode==post){
+fputc(map_xchr(64),out_file);fputc(map_xchr(122),out_file);
+new_line(out_file);
+}
+
+
+/*:53*/
+#line 1249 "tie.w"
+
+/*54:*/
+#line 1143 "tie.w"
+
+{file_index i;
+for(i= 1;i<no_ch;i++){
+if(input_organization[i]->mode!=ignore)
+err_print("! Change file entry did not match")(i);
+
+}
+}
+
+
+/*:54*/
+#line 1250 "tie.w"
+
+/*60:*/
+#line 1261 "tie.w"
+
+{string msg;
+switch(history){
+case spotless:msg= "No errors were found";break;
+case troublesome:msg= "Pardon me, but I think I spotted something wrong.";
+break;
+case fatal:msg= "That was a fatal error, my friend";break;
+}
+print2_nl("(%s.)",msg);term_new_line;
+exit(history==spotless?0:1);
+}
+
+
+
+
+
+/*:60*/
+#line 1251 "tie.w"
+
+}
+
+/*:59*/
+#line 119 "tie.w"
+
+
+/*:2*/