summaryrefslogtreecommitdiff
path: root/web/spiderweb/src/c/tangle.c
diff options
context:
space:
mode:
Diffstat (limited to 'web/spiderweb/src/c/tangle.c')
-rw-r--r--web/spiderweb/src/c/tangle.c2214
1 files changed, 2214 insertions, 0 deletions
diff --git a/web/spiderweb/src/c/tangle.c b/web/spiderweb/src/c/tangle.c
new file mode 100644
index 0000000000..49add84999
--- /dev/null
+++ b/web/spiderweb/src/c/tangle.c
@@ -0,0 +1,2214 @@
+/*1:*/
+#line 44 "tangle.web"
+
+/*4:*/
+#line 15 "common.h"
+
+#line 16 "common.h"
+#include<stdio.h>
+
+/*:4*//*94:*/
+#line 1046 "tangle.web"
+
+#line 1047 "tangle.web"
+#include"ctype.h"
+
+/*:94*/
+#line 45 "tangle.web"
+
+/*3:*/
+#line 9 "common.h"
+
+typedef short boolean;
+typedef char unsigned eight_bits;
+extern boolean program;
+extern int phase;
+
+/*:3*//*5:*/
+#line 24 "common.h"
+
+typedef char ASCII;
+typedef char outer_char;
+extern ASCII xord[];
+extern outer_char xchr[];
+ASCII mod_text[400+1];
+ASCII *mod_text_end= mod_text+400;
+ASCII *id_first;
+ASCII *id_loc;
+
+/*:5*//*6:*/
+#line 37 "common.h"
+
+#line 38 "common.h"
+extern ASCII buffer[];
+extern ASCII *buffer_end;
+extern ASCII *loc;
+extern ASCII *limit;
+
+/*:6*//*7:*/
+#line 55 "common.h"
+
+typedef struct name_info{
+ASCII *byte_start;
+struct name_info *link;
+union{
+struct name_info *Rlink;
+
+eight_bits Ilk;
+
+}dummy;
+ASCII *equiv_or_xref;
+}name_info;
+typedef name_info *name_pointer;
+typedef name_pointer *hash_pointer;
+extern ASCII byte_mem[];
+extern ASCII *byte_mem_end;
+extern name_info name_dir[];
+extern name_pointer name_dir_end;
+extern name_pointer name_ptr;
+extern ASCII *byte_ptr;
+extern name_pointer hash[];
+extern hash_pointer hash_end;
+extern hash_pointer h;
+extern name_pointer id_lookup();
+extern name_pointer mod_lookup();
+extern name_pointer prefix_lookup();
+
+/*:7*//*8:*/
+#line 98 "common.h"
+
+extern history;
+
+/*:8*//*9:*/
+#line 109 "common.h"
+
+extern include_depth;
+extern FILE *file[];
+extern FILE *change_file;
+extern char C_file_name[];
+extern char tex_file_name[];
+extern char file_name[][60];
+
+extern char change_file_name[];
+extern line[];
+extern change_line;
+extern boolean input_has_ended;
+extern boolean changing;
+
+/*:9*//*10:*/
+#line 124 "common.h"
+
+#line 125 "common.h"
+typedef unsigned short sixteen_bits;
+extern sixteen_bits module_count;
+extern boolean changed_module[];
+extern boolean print_where;
+
+/*:10*//*11:*/
+#line 131 "common.h"
+
+#line 132 "common.h"
+extern int argc;
+extern char * *argv;
+extern no_xref;
+
+/*:11*//*12:*/
+#line 144 "common.h"
+
+FILE *C_file;
+FILE *tex_file;
+#line 81 "tangle.web"
+
+/*:12*/
+#line 46 "tangle.web"
+
+/*14:*/
+#line 107 "tangle.web"
+
+#line 108 "tangle.web"
+typedef struct{
+eight_bits *tok_start;
+sixteen_bits text_link;
+}text;
+typedef text *text_pointer;
+
+/*:14*//*25:*/
+#line 254 "tangle.web"
+
+typedef struct{
+eight_bits *end_field;
+eight_bits *byte_field;
+name_pointer name_field;
+text_pointer repl_field;
+sixteen_bits mod_field;
+}output_state;
+typedef output_state *stack_pointer;
+
+/*:25*/
+#line 47 "tangle.web"
+
+/*15:*/
+#line 114 "tangle.web"
+
+#line 115 "tangle.web"
+text text_info[2000];
+text_pointer text_info_end= text_info+2000-1;
+text_pointer text_ptr;
+eight_bits tok_mem[150000];
+eight_bits *tok_mem_end= tok_mem+150000-1;
+eight_bits *tok_ptr;
+
+/*:15*//*21:*/
+#line 185 "tangle.web"
+
+text_pointer last_unnamed;
+
+/*:21*//*26:*/
+#line 270 "tangle.web"
+
+output_state cur_state;
+
+output_state stack[50+1];
+stack_pointer stack_ptr;
+stack_pointer stack_end= stack+50;
+
+/*:26*//*37:*/
+#line 413 "tangle.web"
+
+int cur_val;
+
+
+/*:37*//*46:*/
+#line 520 "tangle.web"
+
+#line 521 "tangle.web"
+short balances[128];
+/*:46*//*50:*/
+#line 583 "tangle.web"
+
+#line 584 "tangle.web"
+name_pointer parm_ptr;
+
+/*:50*//*62:*/
+#line 706 "tangle.web"
+
+eight_bits out_state;
+boolean protect;
+
+/*:62*//*64:*/
+#line 735 "tangle.web"
+
+name_pointer output_files[256];
+name_pointer *cur_out_file, *end_output_files, *an_output_file;
+char cur_module_char;
+char output_file_name[400];
+
+/*:64*//*78:*/
+#line 143 "outtoks.web"
+char C_file_extension[]= "c";
+/*:78*//*80:*/
+#line 148 "outtoks.web"
+char the_at_sign= 64;
+
+/*:80*//*86:*/
+#line 943 "tangle.web"
+
+eight_bits ccode[128];
+
+/*:86*//*88:*/
+#line 975 "tangle.web"
+short tracing;
+#line 976 "tangle.web"
+/*:88*//*91:*/
+#line 1009 "tangle.web"
+
+#line 1010 "tangle.web"
+boolean comment_continues= 0;
+
+/*:91*//*93:*/
+#line 1043 "tangle.web"
+
+name_pointer cur_module;
+
+/*:93*//*108:*/
+#line 1310 "tangle.web"
+
+text_pointer cur_text;
+eight_bits next_control;
+
+/*:108*//*111:*/
+#line 1373 "tangle.web"
+
+ASCII param_name_texts[256];
+ASCII *param_name_texts_end= param_name_texts+256;
+ASCII *param_names[32];
+short next_param_name;
+ASCII *next_param_name_text;
+
+/*:111*//*132:*/
+#line 1693 "tangle.web"
+
+#line 1694 "tangle.web"
+extern sixteen_bits module_count;
+
+/*:132*/
+#line 48 "tangle.web"
+
+
+main(ac,av)
+char * *av;
+{
+argc= ac;argv= av;
+program= 0;
+/*16:*/
+#line 122 "tangle.web"
+
+#line 123 "tangle.web"
+text_info->tok_start= tok_ptr= tok_mem;
+text_ptr= text_info+1;text_ptr->tok_start= tok_mem;
+
+
+/*:16*//*18:*/
+#line 132 "tangle.web"
+
+name_dir->equiv_or_xref= (ASCII *)text_info;
+
+/*:18*//*22:*/
+#line 188 "tangle.web"
+last_unnamed= text_info;text_info->text_link= 0;
+#line 189 "tangle.web"
+
+/*:22*//*47:*/
+#line 522 "tangle.web"
+
+#line 523 "tangle.web"
+{int i;
+for(i= 0;i<128;i++)balances[i]= 0;
+/*48:*/
+#line 529 "tangle.web"
+
+#line 530 "tangle.web"
+balances[40]= 1;
+balances[41]= -1;
+balances[91]= 1;
+balances[93]= -1;
+balances[123]= 1;
+balances[125]= -1;
+
+/*:48*/
+#line 525 "tangle.web"
+;
+}
+/*:47*//*65:*/
+#line 745 "tangle.web"
+
+#line 746 "tangle.web"
+cur_out_file= end_output_files= output_files+256;
+
+/*:65*//*87:*/
+#line 946 "tangle.web"
+{
+#line 947 "tangle.web"
+int c;
+for(c= 0;c<=127;c++)ccode[c]= 0;
+ccode[' ']= ccode[011]= ccode['*']= 255;
+ccode['@']= '@';
+ccode['=']= 2;
+ccode['d']= ccode['D']= 252;
+ccode['f']= ccode['F']= 251;
+ccode['c']= ccode['C']= 253;
+ccode['u']= ccode['U']= 253;
+ccode['^']= ccode[':']= ccode['.']= ccode['t']= ccode['T']= 250;
+ccode['&']= 127;
+ccode['<']= ccode['(']= 254;
+ccode['`']= 249;
+ccode['\'']= 5;
+ccode['"']= 6;
+
+
+
+ccode['@']= ccode[64];
+ccode[64]= 64;
+
+#ifdef DEBUG
+ccode['0']= ccode['1']= ccode['2']= ccode['3']= ccode['4']= 248;
+#endif DEBUG
+
+}
+
+/*:87*//*89:*/
+#line 976 "tangle.web"
+tracing= 0;
+#line 977 "tangle.web"
+
+/*:89*//*104:*/
+#line 1239 "tangle.web"
+mod_text[0]= ' ';
+#line 1240 "tangle.web"
+
+/*:104*//*113:*/
+#line 1385 "tangle.web"
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1385 "tangle.web"
+;
+#line 1386 "tangle.web"
+
+/*:113*/
+#line 55 "tangle.web"
+;
+common_init();
+printf("This is C TANGLE (generated at 5:29 PM on April 5, 1993)\n");
+phase_one();
+phase_two();
+wrap_up();
+}
+
+/*:1*//*19:*/
+#line 138 "tangle.web"
+
+#line 139 "tangle.web"
+names_match(p,first,l)
+name_pointer p;
+ASCII *first;
+int l;
+{
+if(((p+1)->byte_start-(p)->byte_start)!=l)return 0;
+return!strncmp(first,p->byte_start,l);
+}
+
+/*:19*//*20:*/
+#line 149 "tangle.web"
+
+#line 150 "tangle.web"
+init_node(node)
+name_pointer node;
+{
+node->equiv_or_xref= (ASCII *)text_info;
+
+}
+init_p(p,t)
+name_pointer p;
+eight_bits t;
+{
+p->dummy.Ilk= t;
+}
+
+
+
+/*:20*//*24:*/
+#line 219 "tangle.web"
+store_two_bytes(x)
+sixteen_bits x;
+{
+if(tok_ptr+2>tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};};
+ *tok_ptr++= x>>8;
+ *tok_ptr++= x&255;
+}
+
+
+/*:24*//*28:*/
+#line 294 "tangle.web"
+push_level(p)
+#line 295 "tangle.web"
+name_pointer p;
+{
+/*29:*/
+#line 306 "tangle.web"
+
+#line 307 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>0){
+printf("\nPushing ");fflush(stdout),write(1,(p)->byte_start,(((p)+1)->byte_start-((p))->byte_start));
+printf(" =nd[%d]",p-name_dir);
+}
+#endif TRACE_MACROS
+
+/*:29*/
+#line 297 "tangle.web"
+;
+if(stack_ptr==stack_end){{printf("\n! Sorry, capacity exceeded: ");err_print("stack");history= 3;wrap_up();};};
+ *stack_ptr= cur_state;
+stack_ptr++;
+cur_state.name_field= p;cur_state.repl_field= (text_pointer)p->equiv_or_xref;
+cur_state.byte_field= cur_state.repl_field->tok_start;cur_state.end_field= (cur_state.repl_field+1)->tok_start;
+cur_state.mod_field= 0;
+}
+
+/*:28*//*30:*/
+#line 321 "tangle.web"
+pop_level()
+#line 322 "tangle.web"
+{int number_of_parameters;
+/*33:*/
+#line 363 "tangle.web"
+
+#line 364 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>0){
+printf("\nPopping ");fflush(stdout),write(1,(cur_state.name_field)->byte_start,(((cur_state.name_field)+1)->byte_start-((cur_state.name_field))->byte_start));
+printf(" =nd[%d]",cur_state.name_field-name_dir);
+}
+
+#endif TRACE_MACROS
+
+
+
+/*:33*/
+#line 323 "tangle.web"
+;
+if(cur_state.repl_field->text_link==0){
+if(cur_state.name_field->dummy.Ilk==1){
+/*31:*/
+#line 338 "tangle.web"
+
+#line 339 "tangle.web"
+number_of_parameters= *(cur_state.repl_field->tok_start);
+/*32:*/
+#line 357 "tangle.web"
+
+#line 358 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>1){
+printf("\nUnstacking %d parameters",number_of_parameters);
+}
+#endif TRACE_MACROS
+/*:32*/
+#line 340 "tangle.web"
+;
+while(number_of_parameters-->0){
+name_ptr--;text_ptr--;
+#ifdef TRACE_MACROS
+byte_ptr-= 2;
+#endif TRACE_MACROS
+}
+#ifdef STAT
+#ifdef STAT_HAS_BEEN_FIXED
+if(tok_ptr>max_tok_ptr)max_tok_ptr= tok_ptr;
+
+
+#endif STAT_HAS_BEEN_FIXED
+#endif STAT
+tok_ptr= text_ptr->tok_start;
+
+
+/*:31*/
+#line 326 "tangle.web"
+;
+}
+}else if(cur_state.repl_field->text_link<2000){
+cur_state.repl_field= cur_state.repl_field->text_link+text_info;
+cur_state.byte_field= cur_state.repl_field->tok_start;cur_state.end_field= (cur_state.repl_field+1)->tok_start;
+return;
+}
+stack_ptr--;
+if(stack_ptr>stack)cur_state= *stack_ptr;
+}
+
+
+/*:30*//*38:*/
+#line 418 "tangle.web"
+sixteen_bits
+#line 419 "tangle.web"
+ get_output()
+{
+sixteen_bits a;
+restart:if(stack_ptr==stack)return 0;
+if(cur_state.byte_field==cur_state.end_field){
+cur_val= -((int)cur_state.mod_field);
+pop_level();
+if(cur_val==0)goto restart;
+out_char(129);return;
+}
+a= *cur_state.byte_field++;
+if(a<128)
+if(a==7){
+/*40:*/
+#line 454 "tangle.web"
+
+#line 455 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf(" [#%d]", *cur_state.byte_field);
+}
+#endif TRACE_MACROS
+
+/*:40*/
+#line 432 "tangle.web"
+;
+/*39:*/
+#line 452 "tangle.web"
+
+#line 453 "tangle.web"
+push_level(name_ptr- *cur_state.byte_field++);goto restart;
+/*:39*/
+#line 434 "tangle.web"
+;
+}else
+out_char(a);
+else{
+a= (a-128) *256+ *cur_state.byte_field++;
+switch(a/10240){
+case 0:
+/*41:*/
+#line 461 "tangle.web"
+
+#line 462 "tangle.web"
+if(name_dir[a].dummy.Ilk==1){
+/*42:*/
+#line 475 "tangle.web"
+
+#line 476 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf("\nExpanding macro (");fflush(stdout),write(1,(name_dir+a)->byte_start,(((name_dir+a)+1)->byte_start-((name_dir+a))->byte_start));
+printf("=nd[%d])",a);
+}
+#endif TRACE_MACROS
+
+/*:42*/
+#line 463 "tangle.web"
+;
+/*44:*/
+#line 492 "tangle.web"
+
+#line 493 "tangle.web"
+{int number_of_parameters;
+while(cur_state.byte_field==cur_state.end_field&&stack_ptr>stack)pop_level();
+number_of_parameters= *(((text_pointer)name_dir[a].equiv_or_xref)->tok_start);
+if(number_of_parameters>0){
+if(stack_ptr==stack|| *cur_state.byte_field!=40){
+printf("\n! No parameters given for ");
+fflush(stdout),write(1,(a+name_dir)->byte_start,(((a+name_dir)+1)->byte_start-((a+name_dir))->byte_start));
+err_print("");
+goto restart;
+}
+cur_state.byte_field++;
+parm_ptr= name_ptr;
+while(number_of_parameters-->0){
+/*49:*/
+#line 537 "tangle.web"
+
+#line 538 "tangle.web"
+{int bal;
+eight_bits b,oldb;
+sixteen_bits c;
+bal= 0;
+/*59:*/
+#line 647 "tangle.web"
+
+#line 648 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf("\nScanning #%d...",number_of_parameters+1);
+}
+#endif TRACE_MACROS
+/*:59*/
+#line 542 "tangle.web"
+;
+while(1){
+b= *cur_state.byte_field++;
+if(b==7){
+b= *cur_state.byte_field++;
+/*56:*/
+#line 613 "tangle.web"
+
+#line 614 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf(" <#%d=",b);fflush(stdout),write(1,(name_ptr-b)->byte_start,(((name_ptr-b)+1)->byte_start-((name_ptr-b))->byte_start));printf("=nd[%d]>",
+name_ptr-b-name_dir);
+}
+#endif TRACE_MACROS
+
+/*:56*/
+#line 547 "tangle.web"
+;
+c= name_ptr-name_dir-b;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 128+(c/256);};
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= c%256;};
+}else{
+if(b>=128){
+/*57:*/
+#line 621 "tangle.web"
+
+#line 622 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+int c;
+printf(" <");
+c= (b-128) *256+ *cur_state.byte_field;
+switch(c/10240){
+case 0:fflush(stdout),write(1,(name_dir+c)->byte_start,(((name_dir+c)+1)->byte_start-((name_dir+c))->byte_start));
+printf(" =nd[%d]",c);
+break;
+case 1:printf("MODULE");break;
+default:printf("CONTEXT");break;
+}
+printf(">");
+}
+#endif TRACE_MACROS
+
+/*:57*/
+#line 553 "tangle.web"
+;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= b;};
+b= *cur_state.byte_field++;
+}else if(bal==0&&((number_of_parameters==0&&b==41)
+||(number_of_parameters>0&&b==44))){
+goto done;
+}else if(/*51:*/
+#line 586 "tangle.web"
+(b==2||b==3)
+#line 587 "tangle.web"
+/*:51*/
+#line 559 "tangle.web"
+){
+/*52:*/
+#line 587 "tangle.web"
+
+#line 588 "tangle.web"
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= b;};
+oldb= b;
+/*53:*/
+#line 601 "tangle.web"
+
+#line 602 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2)printf(" <");
+#endif TRACE_MACROS
+/*:53*/
+#line 590 "tangle.web"
+;
+while((b= *cur_state.byte_field++)!=oldb){
+/*54:*/
+#line 605 "tangle.web"
+
+#line 606 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2)printf("%c",b);
+#endif TRACE_MACROS
+/*:54*/
+#line 592 "tangle.web"
+;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= b;};
+if(cur_state.byte_field>=cur_state.end_field)
+{printf("\n! This can't happen: ");err_print("string or constant didn't end in token list");history= 3;wrap_up();};
+}
+/*55:*/
+#line 609 "tangle.web"
+
+#line 610 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2)printf(">");
+#endif TRACE_MACROS
+/*:55*/
+#line 597 "tangle.web"
+;
+
+
+
+/*:52*/
+#line 560 "tangle.web"
+;
+}else{
+/*58:*/
+#line 638 "tangle.web"
+
+#line 639 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf(" <");
+if(31<b&&b<127)printf("%c",b);
+printf(">");
+}
+#endif TRACE_MACROS
+
+/*:58*/
+#line 562 "tangle.web"
+;
+bal+= balances[b];
+}
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= b;};
+}
+}
+done:
+parm_ptr->equiv_or_xref= (ASCII *)text_ptr;
+text_ptr->text_link= 0;
+parm_ptr->dummy.Ilk= 2;
+#ifdef TRACE_MACROS
+if(byte_ptr+2>=byte_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("byte memory");history= 3;wrap_up();};};
+ *byte_ptr++= 35; *byte_ptr++= number_of_parameters+1+48;
+#endif TRACE_MACROS
+if(parm_ptr>=name_dir_end){{printf("\n! Sorry, capacity exceeded: ");err_print("name");history= 3;wrap_up();};};
+(++parm_ptr)->byte_start= byte_ptr;
+if(text_ptr>=text_info_end){{printf("\n! Sorry, capacity exceeded: ");err_print("text");history= 3;wrap_up();};};
+(++text_ptr)->tok_start= tok_ptr;
+/*60:*/
+#line 653 "tangle.web"
+
+#line 654 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>1){
+printf("\nStacked ");fflush(stdout),write(1,(parm_ptr-1)->byte_start,(((parm_ptr-1)+1)->byte_start-((parm_ptr-1))->byte_start));
+printf("=nd[%d]",parm_ptr-1-name_dir);
+}
+#endif TRACE_MACROS
+
+/*:60*/
+#line 580 "tangle.web"
+;
+}
+
+/*:49*/
+#line 507 "tangle.web"
+;
+}
+name_ptr= parm_ptr;
+
+}
+}
+
+/*:44*/
+#line 465 "tangle.web"
+;
+push_level(name_dir+a);
+cur_state.byte_field++;
+goto restart;
+}else if(name_dir[a].dummy.Ilk==2){
+/*43:*/
+#line 483 "tangle.web"
+
+#line 484 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf("\nExpanding parameter (");fflush(stdout),write(1,(name_dir+a)->byte_start,(((name_dir+a)+1)->byte_start-((name_dir+a))->byte_start));
+printf("=nd[%d])",a);
+}
+#endif TRACE_MACROS
+
+
+/*:43*/
+#line 470 "tangle.web"
+;
+push_level(name_dir+a);
+goto restart;
+}
+
+/*:41*/
+#line 441 "tangle.web"
+;
+cur_val= a;out_char(130);break;
+case 1:/*61:*/
+#line 664 "tangle.web"
+
+#line 665 "tangle.web"
+a-= 10240;
+if((a+name_dir)->equiv_or_xref!=(ASCII *)text_info)push_level(a+name_dir);
+else if(a!=0){
+printf("\n! Not present: <");fflush(stdout),write(1,(a+name_dir)->byte_start,(((a+name_dir)+1)->byte_start-((a+name_dir))->byte_start));err_print(">");
+
+}
+goto restart;
+
+/*:61*/
+#line 443 "tangle.web"
+;
+default:cur_val= a-20480;if(cur_val>0)cur_state.mod_field= cur_val;
+out_char(129);
+}
+}
+return 1;
+}
+
+
+/*:38*//*63:*/
+#line 714 "tangle.web"
+flush_buffer()
+#line 715 "tangle.web"
+{
+putc('\n',C_file);
+if(line[include_depth]%100==0){
+printf(".");
+if(line[include_depth]%500==0)printf("%d",line[include_depth]);
+fflush(stdout);
+}
+line[include_depth]++;
+}
+
+/*:63*//*67:*/
+#line 764 "tangle.web"
+
+#line 765 "tangle.web"
+phase_two(){
+line[include_depth]= 1;
+if(text_info->text_link==0){
+if(end_output_files==cur_out_file){
+printf("\n! No program text was specified.");{if(history==0)history= 1;};
+
+}
+}else{
+printf("\nWriting the output files: (%s)",C_file_name);fflush(stdout);
+/*27:*/
+#line 283 "tangle.web"
+
+#line 284 "tangle.web"
+stack_ptr= stack+1;cur_state.name_field= name_dir;cur_state.repl_field= text_info->text_link+text_info;
+cur_state.byte_field= cur_state.repl_field->tok_start;cur_state.end_field= (cur_state.repl_field+1)->tok_start;cur_state.mod_field= 0;
+
+/*:27*/
+#line 774 "tangle.web"
+;
+while(stack_ptr>stack)get_output();
+flush_buffer();
+}
+if(end_output_files>cur_out_file){
+if(text_info->text_link==0){
+printf("\nWriting the output files: ");fflush(stdout);
+}
+/*68:*/
+#line 790 "tangle.web"
+
+#line 791 "tangle.web"
+for(an_output_file= end_output_files;an_output_file>cur_out_file;){
+an_output_file--;
+strncpy(output_file_name,( *an_output_file)->byte_start,400);
+output_file_name[(( *an_output_file+1)->byte_start-( *an_output_file)->byte_start)]= '\0';
+fclose(C_file);
+C_file= fopen(output_file_name,"w");
+if(C_file==NULL){
+{printf("! Cannot open output file:");err_print(output_file_name);history= 3;wrap_up();}
+}else{
+printf(" (%s)",output_file_name);fflush(stdout);
+}
+stack_ptr= stack+1;
+cur_state.name_field= ( *an_output_file);
+cur_state.repl_field= (text_pointer)cur_state.name_field->equiv_or_xref;
+cur_state.byte_field= cur_state.repl_field->tok_start;
+cur_state.end_field= (cur_state.repl_field+1)->tok_start;
+cur_state.mod_field= 0;
+while(stack_ptr>stack)get_output();
+flush_buffer();
+}
+
+
+
+/*:68*/
+#line 782 "tangle.web"
+
+}
+printf("\nDone.");
+}
+
+/*:67*//*69:*/
+#line 816 "tangle.web"
+out_char(cur_char)
+#line 817 "tangle.web"
+eight_bits cur_char;
+{
+ASCII *j;
+/*70:*/
+#line 841 "tangle.web"
+
+#line 842 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+switch(cur_char){
+case 10:printf(" [\\n]");break;
+case 2:
+printf("[STRING]");break;
+case 127:
+printf("[JOIN]");break;
+case 3:
+printf("[CONSTANT]");break;
+case 130:
+printf(" [");fflush(stdout),write(1,(cur_val+name_dir)->byte_start,(((cur_val+name_dir)+1)->byte_start-((cur_val+name_dir))->byte_start));printf("]");
+break;
+case 129:
+if(cur_val>0){
+printf(" [%d:]",cur_val);
+}else if(cur_val<0){
+printf(" [:%d]",-cur_val);
+}else{
+printf("[LINE NUMBER]");
+}
+break;
+
+default:
+if(31<cur_char&&cur_char<127){
+printf(" [%c]",cur_char);
+}else{
+printf(" [\\%3o]",cur_char);
+}
+}
+}
+#endif TRACE_MACROS
+
+
+
+
+/*:70*/
+#line 820 "tangle.web"
+;
+switch(cur_char){
+case 10:if(protect)putc(' ',C_file);
+if(protect||out_state==4)putc('\\',C_file);
+
+flush_buffer();if(out_state!=4)out_state= 0;break;
+/*71:*/
+#line 878 "tangle.web"
+
+#line 879 "tangle.web"
+case 130:
+if(out_state==1)putc(' ',C_file);
+for(j= (cur_val+name_dir)->byte_start;j<(name_dir+cur_val+1)->byte_start;
+j++)putc( *j,C_file);
+out_state= 1;break;
+
+/*:71*/
+#line 826 "tangle.web"
+;
+/*72:*/
+#line 885 "tangle.web"
+
+#line 886 "tangle.web"
+case 129:
+if(cur_val>0){
+fprintf(C_file,"%s","/*");
+fprintf(C_file,"%d:",cur_val);
+fprintf(C_file,"%s","*/");
+}else if(cur_val<0){
+fprintf(C_file,"%s","/*");
+fprintf(C_file,":%d",-cur_val);
+fprintf(C_file,"%s","*/");
+}else{
+sixteen_bits a;
+a= 256 * *cur_state.byte_field++;
+a+= *cur_state.byte_field++;
+fprintf(C_file,"\n%s","#line");
+fprintf(C_file," %d \"",a);
+cur_val= *cur_state.byte_field++;
+cur_val= 256 *(cur_val-128)+ *cur_state.byte_field++;
+for(j= (cur_val+name_dir)->byte_start;j<(name_dir+cur_val+1)->byte_start;
+j++)putc( *j,C_file);
+fprintf(C_file,"\"%s\n",""
+#line 910 "tangle.web"
+);
+}
+break;
+
+#line 1 "outtoks.web"
+/*:72*/
+#line 827 "tangle.web"
+;
+/*75:*/
+#line 58 "outtoks.web"
+
+#line 59 "outtoks.web"
+case 26:
+fprintf(C_file,"%s","==");
+if(out_state!=4)out_state= 0;
+break;
+case 23:
+fprintf(C_file,"%s","->");
+if(out_state!=4)out_state= 0;
+break;
+case 25:
+fprintf(C_file,"%s","&&");
+if(out_state!=4)out_state= 0;
+break;
+case 24:
+fprintf(C_file,"%s","||");
+if(out_state!=4)out_state= 0;
+break;
+case 21:
+fprintf(C_file,"%s","<<");
+if(out_state!=4)out_state= 0;
+break;
+case 28:
+fprintf(C_file,"%s","<=");
+if(out_state!=4)out_state= 0;
+break;
+case 20:
+if(out_state==4){
+fprintf(C_file,"%s","===>");
+}else{
+fprintf(C_file,"%s"," ");
+}
+if(out_state!=4)out_state= 0;
+break;
+case 31:
+fprintf(C_file,"%s","++");
+if(out_state!=4)out_state= 0;
+break;
+case 27:
+fprintf(C_file,"%s",">=");
+if(out_state!=4)out_state= 0;
+break;
+case 22:
+fprintf(C_file,"%s",">>");
+if(out_state!=4)out_state= 0;
+break;
+case 29:
+fprintf(C_file,"%s","!=");
+if(out_state!=4)out_state= 0;
+break;
+case 30:
+fprintf(C_file,"%s","--");
+if(out_state!=4)out_state= 0;
+break;
+/*:75*//*76:*/
+#line 111 "outtoks.web"
+
+#line 112 "outtoks.web"
+case'=':
+if(out_state==4){
+fprintf(C_file,"%s","=");
+}else{
+fprintf(C_file,"%s","= ");
+}
+if(out_state!=4)out_state= 0;
+break;
+case'*':
+if(out_state==4){
+fprintf(C_file,"%s","*");
+}else{
+fprintf(C_file,"%s"," *");
+}
+if(out_state!=4)out_state= 0;
+break;
+/*:76*/
+#line 828 "tangle.web"
+
+case 127:out_state= 3;break;
+case 3:if(out_state==4){
+out_state= 1;break;
+}
+if(out_state==1)putc(' ',C_file);out_state= 4;break;
+case 2:if(out_state==4)out_state= 0;
+else out_state= 4;break;
+default:putc(cur_char,C_file);if(out_state!=4)out_state= 0;
+break;
+}
+}
+
+/*:69*//*90:*/
+#line 981 "tangle.web"
+eight_bits skip_ahead()
+#line 982 "tangle.web"
+{
+eight_bits c;
+while(1){
+if(loc>limit&&(get_line()==0))return(255);
+ *(limit+1)= 64;
+while( *loc!=64)loc++;
+if(loc<=limit){
+loc++;c= ccode[ *loc];
+#ifdef DEBUG
+if(c==248){
+tracing= *loc-48;c= 0;
+}
+#endif DEBUG
+loc++;
+if(c!=0|| *(loc-1)=='>')return(c);
+}
+}
+}
+
+/*:90*//*92:*/
+#line 1012 "tangle.web"
+
+#line 1013 "tangle.web"
+skip_comment()
+{
+ASCII c;
+if(0){
+get_line();
+return(comment_continues= 0);
+}else{
+while(1){
+if(loc>limit)
+if(get_line())return(comment_continues= 1);
+else{
+err_print("! Input ended in mid-comment");
+
+return(comment_continues= 0);
+}
+c= *(loc++);
+/*82:*/
+#line 163 "outtoks.web"
+
+{int len;len= strlen("*/");
+if(loc+len-1<=limit&&!strncmp(loc-1,"*/",len)){
+loc+= len-1;return(comment_continues= 0);}}
+/*:82*/
+#line 1029 "tangle.web"
+
+if(c==64){
+if(ccode[ *loc]==255){
+err_print("! Section name ended in mid-comment");loc--;
+
+return(comment_continues= 0);
+}
+else loc++;
+}
+}
+}
+}
+/*:92*//*95:*/
+#line 1052 "tangle.web"
+eight_bits get_next()
+#line 1053 "tangle.web"
+{
+eight_bits c;
+while(1){
+if(loc>limit){
+if(get_line()==0)return(255);
+else if(print_where){
+print_where= 0;
+/*125:*/
+#line 1586 "tangle.web"
+
+#line 1587 "tangle.web"
+store_two_bytes(53248);
+if(changing)id_first= change_file_name;
+else id_first= file_name[include_depth];
+id_loc= id_first+strlen(id_first);
+if(changing)store_two_bytes((sixteen_bits)change_line);
+else store_two_bytes((sixteen_bits)line[include_depth]);
+{int a= id_lookup(id_first,id_loc,0)-name_dir;{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= (a/256)+128;};
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a%256;};}
+
+/*:125*/
+#line 1060 "tangle.web"
+;
+}
+else return(10);
+}
+c= *loc;
+if(comment_continues){
+skip_comment();
+if(comment_continues||0)return(10);
+else continue;
+}
+/*81:*/
+#line 151 "outtoks.web"
+
+#line 152 "outtoks.web"
+{int len;len= strlen("/*");
+if(loc+len<=limit&&!strncmp(loc,"/*",len)){
+loc+= len;
+skip_comment();
+if(comment_continues||0)
+return('\n');
+else continue;
+}
+}
+/*:81*/
+#line 1070 "tangle.web"
+
+loc++;
+if(isdigit(c)||c=='\\'||c=='.')/*97:*/
+#line 1092 "tangle.web"
+{
+#line 1093 "tangle.web"
+id_first= loc-1;
+if( *id_first=='.'&&!isdigit( *loc))goto mistake;
+if( *id_first=='\\')while(isdigit( *loc))loc++;
+else{
+if( *id_first=='0'){
+if( *loc=='x'|| *loc=='X'){
+loc++;while(isxdigit( *loc))loc++;goto found;
+}
+}
+while(isdigit( *loc))loc++;
+if( *loc=='.'){
+loc++;
+while(isdigit( *loc))loc++;
+}
+if( *loc=='e'|| *loc=='E'){
+if( *++loc=='+'|| *loc=='-')loc++;
+while(isdigit( *loc))loc++;
+}
+}
+found:
+id_loc= loc;
+return(3);
+}
+
+/*:97*/
+#line 1072 "tangle.web"
+
+else if(isalpha(c)||c=='_'||c=='$')/*96:*/
+#line 1084 "tangle.web"
+{
+#line 1085 "tangle.web"
+id_first= --loc;
+while(isalpha( *++loc)||isdigit( *loc)|| *loc=='_');
+if( *loc=='$')while(isdigit( *++loc)|| *loc=='$');
+
+id_loc= loc;return(130);
+}
+
+/*:96*/
+#line 1073 "tangle.web"
+
+else if(c=='\''||c=='\"')/*98:*/
+#line 1122 "tangle.web"
+{
+#line 1123 "tangle.web"
+ASCII delim= c;
+
+
+if(delim=='\''&&(loc+1>=limit||
+( *loc!='\\'&& *loc!=64&&loc[1]!='\'')||
+( *loc=='\\'&&(loc+2>=limit||loc[2]!='\''))||
+( *loc==64&&
+(loc+2>=limit||loc[1]!=64||loc[2]!='\''))
+))goto mistake;
+id_first= mod_text+1;
+id_loc= mod_text; *++id_loc= delim;
+while(1){
+if(loc>=limit){
+if( *(limit-1)!='\\'){
+err_print("! String didn't end");loc= limit;break;
+
+}
+if(get_line()==0){
+err_print("! Input ended in middle of string");loc= buffer;break;
+
+}
+else if(++id_loc<=mod_text_end) *id_loc= 10;
+
+}
+if((c= *loc++)==delim){
+if(++id_loc<=mod_text_end) *id_loc= c;
+break;
+}
+if(c=='\\'){
+if(loc>=limit)continue;
+if(++id_loc<=mod_text_end) *id_loc= '\\';
+c= *loc++;
+}
+if(++id_loc<=mod_text_end) *id_loc= c;
+}
+if(id_loc>=mod_text_end){
+printf("\n! String too long: ");
+
+fflush(stdout),write(1,mod_text+1,25);
+printf("...");history= 2;
+}
+id_loc++;
+return(2);
+}
+
+/*:98*/
+#line 1074 "tangle.web"
+
+else if(c==64)/*99:*/
+#line 1171 "tangle.web"
+{
+#line 1172 "tangle.web"
+c= ccode[ *loc++];
+switch(c){
+case 0:continue;
+case 250:while((c= skip_ahead())==64);
+
+if( *(loc-1)!='>')err_print("! Improper @ within control text");
+
+continue;
+case 254:
+cur_module_char= *(loc-1);
+/*103:*/
+#line 1221 "tangle.web"
+{
+#line 1222 "tangle.web"
+ASCII *k;
+/*105:*/
+#line 1241 "tangle.web"
+
+#line 1242 "tangle.web"
+k= mod_text;
+while(1){
+if(loc>limit&&get_line()==0){
+err_print("! Input ended in section name");
+
+loc= buffer+1;break;
+}
+c= *loc;
+/*106:*/
+#line 1265 "tangle.web"
+
+#line 1266 "tangle.web"
+if(c==64){
+c= *(loc+1);
+if(c=='>'){
+loc+= 2;break;
+}
+if(ccode[c]==255){
+err_print("! Section name didn't end");break;
+
+}
+ *(++k)= 64;loc++;
+}
+
+/*:106*/
+#line 1250 "tangle.web"
+;
+loc++;if(k<mod_text_end)k++;
+if(c==' '||c==011){
+c= ' ';if( *(k-1)==' ')k--;
+}
+ *k= c;
+}
+if(k>=mod_text_end){
+printf("\n! Section name too long: ");
+
+fflush(stdout),write(1,mod_text+1,25);
+printf("...");{if(history==0)history= 1;};
+}
+if( *k==' '&&k>mod_text)k--;
+
+/*:105*/
+#line 1223 "tangle.web"
+;
+if(k-mod_text>3&&strncmp(k-2,"...",3)==0)cur_module= prefix_lookup(mod_text+1,k-3);
+else cur_module= mod_lookup(mod_text+1,k);
+if(cur_module_char=='('){
+/*66:*/
+#line 749 "tangle.web"
+
+#line 750 "tangle.web"
+{
+if(cur_out_file>output_files){
+for(an_output_file= cur_out_file;
+an_output_file<end_output_files;an_output_file++)
+if( *an_output_file==cur_module)break;
+if(an_output_file==end_output_files)
+ *--cur_out_file= cur_module;
+}else{
+{{printf("\n! Sorry, capacity exceeded: ");err_print("output files");history= 3;wrap_up();};};
+}
+}
+
+/*:66*/
+#line 1228 "tangle.web"
+
+}
+return(254);
+}
+
+/*:103*/
+#line 1182 "tangle.web"
+;
+case 2:/*107:*/
+#line 1283 "tangle.web"
+{
+#line 1284 "tangle.web"
+id_first= loc++; *(limit+1)= 64; *(limit+2)= '>';
+while( *loc!=64|| *(loc+1)!='>')loc++;
+if(loc>=limit)err_print("! Verbatim string didn't end");
+
+id_loc= loc;loc+= 2;
+return(2);
+}
+
+/*:107*/
+#line 1183 "tangle.web"
+;
+#ifdef DEBUG
+case 248:tracing= *(loc-1)-'0';continue;
+#endif DEBUG
+case 249:/*100:*/
+#line 1194 "tangle.web"
+
+#line 1195 "tangle.web"
+id_first= loc;
+if( *loc=='\\')loc++;
+while( *loc!='\''){
+loc++;
+if(loc>limit){
+err_print("! String didn't end");loc= limit-1;break;
+}
+}
+loc++;
+return(249);
+
+/*:100*/
+#line 1187 "tangle.web"
+;
+case 5:/*101:*/
+#line 1206 "tangle.web"
+{
+#line 1207 "tangle.web"
+id_first= loc;
+while('0'<= *loc&& *loc<'8')loc++;
+id_loc= loc;
+return(5);
+}
+
+/*:101*/
+#line 1188 "tangle.web"
+;
+case 6:/*102:*/
+#line 1213 "tangle.web"
+{
+#line 1214 "tangle.web"
+id_first= loc;
+while(isxdigit( *loc))loc++;
+id_loc= loc;
+return(6);
+}
+
+
+/*:102*/
+#line 1189 "tangle.web"
+;
+default:return(c);
+}
+}
+
+/*:99*/
+#line 1075 "tangle.web"
+
+else if(c==' '||c==011){
+continue;
+}
+mistake:/*74:*/
+#line 3 "outtoks.web"
+
+#line 4 "outtoks.web"
+if(loc+3<=limit){
+if(strncmp("===>",loc-1,4)==0){
+loc+= 3;
+return 20;
+}
+}
+if(loc+2<=limit){
+}
+if(loc+1<=limit){
+if(strncmp("==",loc-1,2)==0){
+loc+= 1;
+return 26;
+}
+else if(strncmp("->",loc-1,2)==0){
+loc+= 1;
+return 23;
+}
+else if(strncmp("&&",loc-1,2)==0){
+loc+= 1;
+return 25;
+}
+else if(strncmp("||",loc-1,2)==0){
+loc+= 1;
+return 24;
+}
+else if(strncmp("<<",loc-1,2)==0){
+loc+= 1;
+return 21;
+}
+else if(strncmp("<=",loc-1,2)==0){
+loc+= 1;
+return 28;
+}
+else if(strncmp("++",loc-1,2)==0){
+loc+= 1;
+return 31;
+}
+else if(strncmp(">=",loc-1,2)==0){
+loc+= 1;
+return 27;
+}
+else if(strncmp(">>",loc-1,2)==0){
+loc+= 1;
+return 22;
+}
+else if(strncmp("!=",loc-1,2)==0){
+loc+= 1;
+return 29;
+}
+else if(strncmp("--",loc-1,2)==0){
+loc+= 1;
+return 30;
+}
+}
+/*:74*/
+#line 1079 "tangle.web"
+
+return(c);
+}
+}
+
+/*:95*//*109:*/
+#line 1314 "tangle.web"
+scan_repl(t)
+#line 1315 "tangle.web"
+eight_bits t;
+{
+sixteen_bits a;
+int set_print_where;
+if(t==254){/*125:*/
+#line 1586 "tangle.web"
+
+#line 1587 "tangle.web"
+store_two_bytes(53248);
+if(changing)id_first= change_file_name;
+else id_first= file_name[include_depth];
+id_loc= id_first+strlen(id_first);
+if(changing)store_two_bytes((sixteen_bits)change_line);
+else store_two_bytes((sixteen_bits)line[include_depth]);
+{int a= id_lookup(id_first,id_loc,0)-name_dir;{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= (a/256)+128;};
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a%256;};}
+
+/*:125*/
+#line 1319 "tangle.web"
+;}
+
+
+while(1){
+if(t==1){
+print_where= 0;
+}
+a= get_next();
+if(t==1){
+set_print_where= print_where;
+}
+switch(a){
+/*124:*/
+#line 1529 "tangle.web"
+
+#line 1530 "tangle.web"
+case 130:
+{short n;
+if((n= parameter_number(id_first,id_loc))!=0){
+#ifdef TRACE_MACROS
+if(tracing>1){
+printf("\nIdentified ");fflush(stdout),write(1,id_first,id_loc-id_first);
+printf(" as parameter number %d (%d from back)",n,next_param_name-n+1);
+}
+#endif TRACE_MACROS
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 7;};
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= next_param_name-n+1;};
+}else{
+a= id_lookup(id_first,id_loc,0)-name_dir;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= (a/256)+128;};{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a%256;};
+}
+}
+break;
+case 254:if(t!=254)goto done;
+else{
+/*126:*/
+#line 1596 "tangle.web"
+{
+#line 1597 "tangle.web"
+ASCII *try_loc= loc;
+while( *try_loc==' '&&try_loc<limit)try_loc++;
+if( *try_loc=='+'&&try_loc<limit)try_loc++;
+while( *try_loc==' '&&try_loc<limit)try_loc++;
+if( *try_loc=='=')err_print("! Nested named modules. Missing @?");
+
+}
+
+/*:126*/
+#line 1549 "tangle.web"
+;
+a= cur_module-name_dir;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= (a/256)+168;};
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a%256;};
+/*125:*/
+#line 1586 "tangle.web"
+
+#line 1587 "tangle.web"
+store_two_bytes(53248);
+if(changing)id_first= change_file_name;
+else id_first= file_name[include_depth];
+id_loc= id_first+strlen(id_first);
+if(changing)store_two_bytes((sixteen_bits)change_line);
+else store_two_bytes((sixteen_bits)line[include_depth]);
+{int a= id_lookup(id_first,id_loc,0)-name_dir;{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= (a/256)+128;};
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a%256;};}
+
+/*:125*/
+#line 1553 "tangle.web"
+;break;
+}
+case 3:case 2:
+/*127:*/
+#line 1605 "tangle.web"
+
+#line 1606 "tangle.web"
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a;};
+while(id_first<id_loc){
+if( *id_first==64)id_first++;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= *id_first++;};
+}
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a;};break;
+
+/*:127*/
+#line 1556 "tangle.web"
+;
+case 249:
+/*128:*/
+#line 1613 "tangle.web"
+{
+#line 1614 "tangle.web"
+int c;
+if( *id_first==64){
+c= xchr[ *id_first++];
+if( *id_first!=64)err_print("! Double @ within string");
+}
+else if( *id_first=='\\'){
+id_first++;
+switch( *id_first){
+case't':c= 9;break;
+case'n':c= 10;break;
+case'b':c= 8;break;
+case'0':c= 0;break;
+case'\\':c= 92;break;
+default:err_print("! Unrecognized escape sequence");
+}
+}
+else c= xchr[ *id_first];
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 3;};
+
+
+app_decimal((long)c);
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 3;};
+}
+break;
+
+/*:128*/
+#line 1558 "tangle.web"
+;
+case 5:
+/*129:*/
+#line 1640 "tangle.web"
+{
+#line 1641 "tangle.web"
+long sum= 0;
+while(id_first<id_loc){
+sum= 8 *sum+ *id_first++-'0';
+if(sum>67108864)err_print("! Octal constant exceeds @\"04000000");
+}
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 3;};
+app_decimal(sum);
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 3;};
+}
+
+/*:129*/
+#line 1560 "tangle.web"
+;break;
+case 6:
+/*130:*/
+#line 1651 "tangle.web"
+{
+#line 1652 "tangle.web"
+long sum= 0;
+while(id_first<id_loc){
+sum= 16 *sum+
+(isdigit( *id_first)
+? *id_first-'0'
+:isupper( *id_first)
+? *id_first-'A'+10
+: *id_first-'a'+10
+);
+id_first++;
+if(sum>67108864)err_print("! Hex constant exceeds @\"04000000");
+}
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 3;};
+app_decimal(sum);
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= 3;};
+}
+
+/*:130*/
+#line 1562 "tangle.web"
+;break;
+case 10:
+#ifdef NEWLINES_IN_MACROS
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a;};
+#else
+if(t==1)continue;
+else{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a;};
+#endif NEWLINES_IN_MACROS
+break;
+case 252:case 251:case 253:
+if(t!=254)goto done;
+else{
+err_print("! @d, @f and @u are ignored in C text");continue;
+
+}
+case 255:goto done;
+
+/*:124*/
+#line 1334 "tangle.web"
+
+default:{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= a;};
+}
+}
+done:next_control= (eight_bits)a;
+if(text_ptr>text_info_end){{printf("\n! Sorry, capacity exceeded: ");err_print("text");history= 3;wrap_up();};};
+if(t==1){
+/*110:*/
+#line 1358 "tangle.web"
+
+#line 1359 "tangle.web"
+tok_ptr-= 2;
+while( *tok_ptr<128&& *(tok_ptr+1)==10)tok_ptr--;
+tok_ptr+= 2;
+
+/*:110*/
+#line 1341 "tangle.web"
+;
+}
+cur_text= text_ptr;(++text_ptr)->tok_start= tok_ptr;
+print_where= set_print_where;
+}
+
+/*:109*//*116:*/
+#line 1408 "tangle.web"
+
+#line 1409 "tangle.web"
+int parameter_number(first,loc)
+ASCII *first, *loc;
+{
+ASCII *f, *p;
+int n;
+for(n= 0;n<next_param_name;n++){
+if(loc-first==param_names[n+1]-param_names[n]){
+
+for(f= first,p= param_names[n];f<loc;)
+if( *f++!= *p++)goto nomatch;
+return n+1;
+}
+nomatch:continue;
+}
+return 0;
+}
+
+
+/*:116*//*131:*/
+#line 1670 "tangle.web"
+
+#line 1671 "tangle.web"
+app_decimal(c)
+long c;
+{long power;
+if(c==0){{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= '0';};return;}
+if(c<0){{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= '-';};c= -c;}
+for(power= 1;c>=power;power *= 10);
+
+for(power/= 10;power>=1;power/= 10){
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= '0'+c/power;};
+c%= power;
+
+}
+}
+
+
+
+/*:131*//*133:*/
+#line 1697 "tangle.web"
+scan_module()
+#line 1698 "tangle.web"
+{
+name_pointer p;
+text_pointer q;
+sixteen_bits a;
+module_count++;
+if( *(loc-1)=='*')
+printf("*%d",module_count);fflush(stdout);
+/*134:*/
+#line 1714 "tangle.web"
+
+next_control= 0;
+while(1){
+done_scanning:
+while(next_control<=251)
+if((next_control= skip_ahead())==254){
+
+loc-= 2;next_control= get_next();
+}
+if(next_control!=252)break;
+/*117:*/
+#line 1433 "tangle.web"
+
+#line 1434 "tangle.web"
+/*123:*/
+#line 1521 "tangle.web"
+
+#line 1522 "tangle.web"
+while((next_control= get_next())==10);
+
+/*:123*/
+#line 1434 "tangle.web"
+
+/*121:*/
+#line 1484 "tangle.web"
+
+#line 1485 "tangle.web"
+if(next_control!=130){
+err_print("! Macro name must be an identifier");
+
+/*135:*/
+#line 1732 "tangle.web"
+
+#line 1733 "tangle.web"
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1733 "tangle.web"
+;
+p->dummy.Ilk= 0;
+goto done_scanning;
+
+
+/*:135*/
+#line 1488 "tangle.web"
+;
+}else{
+p= id_lookup(id_first,id_loc,1);
+if(p->dummy.Ilk!=1){
+#ifdef WARN_USE_BEFORE_DEF
+printf("\n! Warning: macro name ");
+fflush(stdout),write(1,(p)->byte_start,(((p)+1)->byte_start-((p))->byte_start));
+printf(" was used before it was defined");
+{if(history==0)history= 1;};
+#endif WARN_USE_BEFORE_DEF
+p->dummy.Ilk= 1;
+}else if(p+1!=name_ptr){
+err_print("! Macro name is multiply defined: ");
+}
+}
+
+/*:121*/
+#line 1436 "tangle.web"
+;
+/*120:*/
+#line 1469 "tangle.web"
+
+#line 1470 "tangle.web"
+/*123:*/
+#line 1521 "tangle.web"
+
+#line 1522 "tangle.web"
+while((next_control= get_next())==10);
+
+/*:123*/
+#line 1470 "tangle.web"
+
+if(next_control==40){
+do{
+/*122:*/
+#line 1504 "tangle.web"
+
+#line 1505 "tangle.web"
+/*123:*/
+#line 1521 "tangle.web"
+
+#line 1522 "tangle.web"
+while((next_control= get_next())==10);
+
+/*:123*/
+#line 1505 "tangle.web"
+;
+if(next_control!=130){
+err_print("! Macro parameter name not an identifier");
+
+/*135:*/
+#line 1732 "tangle.web"
+
+#line 1733 "tangle.web"
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1733 "tangle.web"
+;
+p->dummy.Ilk= 0;
+goto done_scanning;
+
+
+/*:135*/
+#line 1509 "tangle.web"
+;
+}else{
+if(parameter_number(id_first,id_loc)!=0){
+err_print("! Duplicate parameters in macro definition");
+
+/*135:*/
+#line 1732 "tangle.web"
+
+#line 1733 "tangle.web"
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1733 "tangle.web"
+;
+p->dummy.Ilk= 0;
+goto done_scanning;
+
+
+/*:135*/
+#line 1514 "tangle.web"
+;
+}else{
+/*114:*/
+#line 1387 "tangle.web"
+
+#line 1388 "tangle.web"
+/*115:*/
+#line 1393 "tangle.web"
+
+#line 1394 "tangle.web"
+if(next_param_name==32)
+{{printf("\n! Sorry, capacity exceeded: ");err_print("parameter names");history= 3;wrap_up();};};
+if(id_loc-id_first>
+param_name_texts_end-next_param_name_text)
+{{printf("\n! Sorry, capacity exceeded: ");err_print("parameter name texts");history= 3;wrap_up();};};
+
+
+/*:115*/
+#line 1388 "tangle.web"
+;
+while(id_first<id_loc)
+ *next_param_name_text++= *id_first++;
+param_names[++next_param_name]= next_param_name_text;
+
+/*:114*/
+#line 1516 "tangle.web"
+;
+}
+}
+
+
+/*:122*/
+#line 1473 "tangle.web"
+;
+/*123:*/
+#line 1521 "tangle.web"
+
+#line 1522 "tangle.web"
+while((next_control= get_next())==10);
+
+/*:123*/
+#line 1474 "tangle.web"
+
+}while(next_control==44);
+if(next_control!=41){
+err_print("! Macro parameter list must end with )");
+/*135:*/
+#line 1732 "tangle.web"
+
+#line 1733 "tangle.web"
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1733 "tangle.web"
+;
+p->dummy.Ilk= 0;
+goto done_scanning;
+
+
+/*:135*/
+#line 1478 "tangle.web"
+;
+}
+next_control= get_next();
+}
+
+
+/*:120*/
+#line 1439 "tangle.web"
+;
+if(next_control!=61){
+err_print("! You must put an = sign before the macro replacement text");
+/*135:*/
+#line 1732 "tangle.web"
+
+#line 1733 "tangle.web"
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1733 "tangle.web"
+;
+p->dummy.Ilk= 0;
+goto done_scanning;
+
+
+/*:135*/
+#line 1442 "tangle.web"
+;
+}
+/*118:*/
+#line 1451 "tangle.web"
+
+#line 1452 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>1){
+printf("\nScanning definition of macro ");fflush(stdout),write(1,(p)->byte_start,(((p)+1)->byte_start-((p))->byte_start));
+}
+#endif TRACE_MACROS
+
+/*:118*/
+#line 1444 "tangle.web"
+;
+{if(tok_ptr==tok_mem_end){{printf("\n! Sorry, capacity exceeded: ");err_print("token");history= 3;wrap_up();};}; *tok_ptr++= next_param_name;};
+scan_repl(1);
+p->equiv_or_xref= (ASCII *)cur_text;
+/*119:*/
+#line 1458 "tangle.web"
+
+#line 1459 "tangle.web"
+#ifdef TRACE_MACROS
+if(tracing>2){
+printf("\nMacro ");fflush(stdout),write(1,(p)->byte_start,(((p)+1)->byte_start-((p))->byte_start));
+printf("'s replacement text is in text_info[%d]",cur_text-text_info);
+}
+#endif TRACE_MACROS
+
+
+/*:119*/
+#line 1448 "tangle.web"
+;
+/*112:*/
+#line 1380 "tangle.web"
+
+#line 1381 "tangle.web"
+next_param_name= 0;
+next_param_name_text= param_name_texts;
+param_names[next_param_name]= next_param_name_text;
+
+/*:112*/
+#line 1449 "tangle.web"
+;
+
+/*:117*/
+#line 1724 "tangle.web"
+;
+cur_text->text_link= 0;
+}
+
+/*:134*/
+#line 1705 "tangle.web"
+;
+/*136:*/
+#line 1738 "tangle.web"
+
+#line 1739 "tangle.web"
+switch(next_control){
+case 253:p= name_dir;break;
+case 254:p= cur_module;
+/*137:*/
+#line 1750 "tangle.web"
+
+#line 1751 "tangle.web"
+while((next_control= get_next())=='+');
+if(next_control!='='){
+err_print("! C text flushed, = sign is missing");
+
+while((next_control= skip_ahead())!=255);
+return;
+}
+
+/*:137*/
+#line 1742 "tangle.web"
+;
+break;
+default:return;
+}
+/*138:*/
+#line 1759 "tangle.web"
+
+#line 1760 "tangle.web"
+store_two_bytes((sixteen_bits)(53248+module_count));
+
+/*:138*/
+#line 1746 "tangle.web"
+;
+scan_repl(254);
+/*139:*/
+#line 1762 "tangle.web"
+
+#line 1763 "tangle.web"
+if(p==name_dir||p==0){
+(last_unnamed)->text_link= cur_text-text_info;last_unnamed= cur_text;
+}
+else if(p->equiv_or_xref==(ASCII *)text_info)p->equiv_or_xref= (ASCII *)cur_text;
+
+else{
+q= (text_pointer)p->equiv_or_xref;
+while(q->text_link<2000)q= q->text_link+text_info;
+q->text_link= cur_text-text_info;
+}
+cur_text->text_link= 2000;
+
+/*:139*/
+#line 1748 "tangle.web"
+;
+
+/*:136*/
+#line 1706 "tangle.web"
+;
+}
+
+/*:133*//*140:*/
+#line 1775 "tangle.web"
+phase_one(){
+#line 1776 "tangle.web"
+phase= 1;
+module_count= 0;
+reset_input();
+while((next_control= skip_ahead())!=255);
+while(!input_has_ended)scan_module();
+check_complete();
+phase= 2;
+}
+
+/*:140*//*141:*/
+#line 1785 "tangle.web"
+print_stats(){
+#line 1786 "tangle.web"
+printf("\nMemory usage statistics:\n");
+printf("%d names (out of %d)\n",name_ptr-name_dir,4000);
+printf("%d replacement texts (out of %d)\n",text_ptr-text_info,2000);
+printf("%d bytes (out of %d)\n",byte_ptr-byte_mem,90000);
+printf("%d tokens (out of %d)\n",tok_ptr-tok_mem,150000);
+}
+
+/*:141*/