summaryrefslogtreecommitdiff
path: root/web/c_cpp/c2cweb/cweb/cweave.c
diff options
context:
space:
mode:
Diffstat (limited to 'web/c_cpp/c2cweb/cweb/cweave.c')
-rw-r--r--web/c_cpp/c2cweb/cweb/cweave.c4543
1 files changed, 4543 insertions, 0 deletions
diff --git a/web/c_cpp/c2cweb/cweb/cweave.c b/web/c_cpp/c2cweb/cweb/cweave.c
new file mode 100644
index 0000000000..bff742feb7
--- /dev/null
+++ b/web/c_cpp/c2cweb/cweb/cweave.c
@@ -0,0 +1,4543 @@
+/*1:*/
+#line 66 "cweave.w"
+/*6:*/
+#line 38 "common.h"
+
+#include <stdio.h>
+
+/*:6*//*38:*/
+#line 644 "cweave.w"
+
+#include <ctype.h>
+#include <stdlib.h>
+
+/*:38*/
+#line 66 "cweave.w"
+
+#define banner "This is CWEAVE (Version 3.4) modified by Werner Lemberg (V1.5)\n" \
+
+#define max_bytes 225000 \
+
+#define max_names 10000 \
+
+#define max_sections 2000
+#define hash_size 353
+#define buf_size 400
+#define longest_name 1000
+#define long_buf_size (buf_size+longest_name)
+#define line_length 100 \
+
+#define max_refs 20000
+#define max_toks 65000 \
+
+#define max_texts 10200 \
+
+#define max_scraps 65000
+#define stack_size 10000 \
+
+#define ctangle 0
+#define cweave 1 \
+
+#define and_and 04
+#define lt_lt 020
+#define gt_gt 021
+#define plus_plus 013
+#define minus_minus 01
+#define minus_gt 031
+#define not_eq 032
+#define lt_eq 034
+#define gt_eq 035
+#define eq_eq 036
+#define or_or 037
+#define dot_dot_dot 016
+#define colon_colon 06
+#define period_ast 026
+#define minus_gt_ast 027 \
+
+#define xisalpha(c) (isalpha(c) &&((eight_bits) c<0200) )
+#define xisdigit(c) (isdigit(c) &&((eight_bits) c<0200) )
+#define xisspace(c) (isspace(c) &&((eight_bits) c<0200) )
+#define xislower(c) (islower(c) &&((eight_bits) c<0200) )
+#define xisupper(c) (isupper(c) &&((eight_bits) c<0200) )
+#define xisxdigit(c) (isxdigit(c) &&((eight_bits) c<0200) ) \
+
+#define length(c) (c+1) ->byte_start-(c) ->byte_start
+#define print_id(c) term_write((c) ->byte_start,length((c) ) )
+#define llink link
+#define rlink dummy.Rlink
+#define root name_dir->rlink \
+
+#define chunk_marker 0 \
+
+#define spotless 0
+#define harmless_message 1
+#define error_message 2
+#define fatal_message 3
+#define mark_harmless {if(history==spotless) history= harmless_message;}
+#define mark_error history= error_message
+#define confusion(s) fatal("! This can't happen: ",s) \
+
+#define max_file_name_length 60
+#define cur_file file[include_depth]
+#define cur_file_name file_name[include_depth]
+#define web_file_name file_name[0]
+#define cur_line line[include_depth] \
+
+#define show_banner flags['b']
+#define show_progress flags['p']
+#define show_happiness flags['h'] \
+
+#define update_terminal fflush(stdout)
+#define new_line putchar('\n')
+#define putxchar putchar
+#define term_write(a,b) fflush(stdout) ,fwrite(a,sizeof(char) ,b,stdout)
+#define C_printf(c,a) fprintf(C_file,c,a)
+#define C_putc(c) putc(c,C_file) \
+
+#define ilk dummy.dummy1.Ilk
+#define func_flag dummy.dummy1.Func_flag
+#define normal 0
+#define roman 1
+#define wildcard 2
+#define typewriter 3
+#define abnormal(a) (a->ilk>typewriter)
+#define custom 4
+#define unindexed(a) (a->ilk>custom)
+#define quoted 5
+#define else_like 26
+#define public_like 40
+#define operator_like 41
+#define new_like 42
+#define catch_like 43
+#define for_like 45
+#define do_like 46
+#define if_like 47
+#define raw_rpar 48
+#define raw_unorbin 49
+#define const_like 50
+#define raw_int 51
+#define int_like 52
+#define case_like 53
+#define sizeof_like 54
+#define struct_like 55
+#define typedef_like 56
+#define define_like 57 \
+
+#define file_flag (3*cite_flag)
+#define def_flag (2*cite_flag)
+#define cite_flag 10240
+#define xref equiv_or_xref \
+
+#define append_xref(c) if(xref_ptr==xmem_end) overflow("cross-reference") ; \
+else(++xref_ptr) ->num= c;
+#define no_xref (flags['x']==0)
+#define make_xrefs flags['x']
+#define is_tiny(p) ((p+1) ->byte_start==(p) ->byte_start+1) \
+
+#define ignore 00
+#define verbatim 02
+#define begin_short_comment 03
+#define begin_comment '\t'
+#define underline '\n'
+#define noop 0177
+#define xref_roman 0203
+#define xref_wildcard 0204
+#define xref_typewriter 0205
+#define TeX_string 0206
+#define ord 0207
+#define join 0210
+#define thin_space 0211
+#define math_break 0212
+#define line_break 0213
+#define big_line_break 0214
+#define no_line_break 0215
+#define pseudo_semi 0216
+#define macro_arg_open 0220
+#define macro_arg_close 0221
+#define trace 0222
+#define translit_code 0223
+#define output_defs_code 0224
+#define format_code 0225
+#define definition 0226
+#define begin_C 0227
+#define section_name 0230
+#define new_section 0231
+#define pseudo_lbrace 022
+#define pseudo_rbrace 023 \
+
+#define constant 0200
+#define string 0201
+#define identifier 0202 \
+
+#define isxalpha(c) ((c) =='_'||(c) =='$') \
+
+#define ishigh(c) ((eight_bits) (c) >0177) \
+ \
+
+#define left_preproc ord
+#define right_preproc 0217
+#define preproc_space '\b'
+#define numb_numb '\f' \
+
+#define compress(c) if(loc++<=limit) return(c) \
+
+#define c_line_write(c) fflush(active_file) ,fwrite(out_buf+1,sizeof(char) ,c,active_file)
+#define tex_putc(c) putc(c,active_file)
+#define tex_new_line putc('\n',active_file)
+#define tex_printf(c) fprintf(active_file,c) \
+
+#define app_tok(c) {if(tok_ptr+2>tok_mem_end) overflow("token") ;*(tok_ptr++) = c;} \
+
+#define exp 1
+#define unop 2
+#define binop 3
+#define unorbinop 4 \
+
+#define cast 5
+#define question 6
+#define lbrace 7
+#define rbrace 8
+#define decl_head 9
+#define comma 10
+#define lpar 11
+#define rpar 12
+#define prelangle 13
+#define prerangle 14
+#define langle 15
+#define colcol 18
+#define base 19
+#define decl 20
+#define struct_head 21
+#define stmt 23
+#define function 24
+#define fn_decl 25
+#define semi 27
+#define colon 28
+#define tag 29 \
+
+#define if_head 30
+#define else_head 31
+#define if_clause 32
+#define lproc 35
+#define rproc 36
+#define insert 37
+#define section_scrap 38
+#define dead 39
+#define begin_arg 58
+#define end_arg 59
+#define label 60
+#define do_head 61
+#define pp_space 62 \
+
+#define math_rel 0206
+#define big_cancel 0210
+#define cancel 0211
+#define indent 0212
+#define outdent 0213
+#define opt 0214
+#define backup 0215
+#define break_space 0216
+#define force 0217
+#define big_force 0220
+#define preproc_line 0221 \
+
+#define quoted_char 0222 \
+
+#define end_translation 0223
+#define inserted 0224 \
+
+#define trans trans_plus.Trans \
+
+#define id_flag 10240
+#define res_flag 2*id_flag
+#define section_flag 3*id_flag
+#define tok_flag 4*id_flag
+#define inner_tok_flag 5*id_flag \
+
+#define no_math 2
+#define yes_math 1
+#define maybe_math 0
+#define big_app2(a) big_app1(a) ;big_app1(a+1)
+#define big_app3(a) big_app2(a) ;big_app1(a+2)
+#define big_app4(a) big_app3(a) ;big_app1(a+3)
+#define app(a) *(tok_ptr++) = a
+#define app1(a) *(tok_ptr++) = tok_flag+(int) ((a) ->trans-tok_start) \
+
+#define cat1 (pp+1) ->cat
+#define cat2 (pp+2) ->cat
+#define cat3 (pp+3) ->cat
+#define lhs_not_simple (pp->cat!=semi&&pp->cat!=raw_int&&pp->cat!=raw_unorbin \
+&&pp->cat!=raw_rpar&&pp->cat!=const_like) \
+
+#define no_ident_found 0 \
+
+#define force_lines flags['f']
+#define freeze_text *(++text_ptr) = tok_ptr \
+
+#define safe_tok_incr 20
+#define safe_text_incr 10
+#define safe_scrap_incr 10 \
+
+#define app_scrap(c,b) { \
+(++scrap_ptr) ->cat= (c) ;scrap_ptr->trans= text_ptr; \
+scrap_ptr->mathness= 5*(b) ; \
+freeze_text; \
+} \
+
+#define alternative flags['a']
+#define func_index flags['i'] \
+ \
+
+#define inner 0
+#define outer 1 \
+
+#define cur_end cur_state.end_field
+#define cur_tok cur_state.tok_field
+#define cur_mode cur_state.mode_field
+#define init_stack stack_ptr= stack;cur_mode= outer \
+
+#define res_word 0201
+#define section_code 0200 \
+
+#define save_position save_line= out_line;save_place= out_ptr
+#define emit_space_if_needed if(save_line!=out_line||save_place!=out_ptr) \
+out_str("\\Y") ; \
+space_checked= 1 \
+ \
+
+#define depth cat
+#define head trans_plus.Head
+#define sort_pointer scrap_pointer
+#define sort_ptr scrap_ptr
+#define max_sorts max_scraps \
+
+#define infinity 255 \
+
+
+#line 67 "cweave.w"
+
+/*5:*/
+#line 32 "common.h"
+
+typedef short boolean;
+typedef char unsigned eight_bits;
+extern boolean program;
+extern int phase;
+
+/*:5*//*7:*/
+#line 60 "common.h"
+
+char section_text[longest_name+1];
+char*section_text_end= section_text+longest_name;
+char*id_first;
+char*id_loc;
+
+/*:7*//*8:*/
+#line 75 "common.h"
+
+extern char buffer[];
+extern char*buffer_end;
+extern char*loc;
+extern char*limit;
+
+/*:8*//*9:*/
+#line 90 "common.h"
+
+typedef struct name_info{
+char*byte_start;
+struct name_info*link;
+union{
+struct name_info*Rlink;
+
+struct{
+char Ilk;
+boolean Func_flag;
+}dummy1;
+}dummy;
+char*equiv_or_xref;
+}name_info;
+typedef name_info*name_pointer;
+typedef name_pointer*hash_pointer;
+extern char byte_mem[];
+extern char*byte_mem_end;
+extern name_info name_dir[];
+extern name_pointer name_dir_end;
+extern name_pointer name_ptr;
+extern char*byte_ptr;
+extern name_pointer hash[];
+extern hash_pointer hash_end;
+extern hash_pointer h;
+extern name_pointer id_lookup();
+extern name_pointer section_lookup();
+extern void print_section_name(),sprint_section_name();
+
+/*:9*//*10:*/
+#line 128 "common.h"
+
+extern history;
+extern err_print();
+extern wrap_up();
+extern void fatal();
+extern void overflow();
+
+/*:10*//*11:*/
+#line 143 "common.h"
+
+extern include_depth;
+extern FILE*file[];
+extern FILE*change_file;
+extern char C_file_name[];
+extern char tex_file_name[];
+extern char idx_file_name[];
+extern char scn_file_name[];
+extern char file_name[][max_file_name_length];
+
+extern char change_file_name[];
+extern line[];
+extern change_line;
+extern boolean input_has_ended;
+extern boolean changing;
+extern boolean web_file_open;
+extern reset_input();
+extern get_line();
+extern check_complete();
+
+/*:11*//*12:*/
+#line 164 "common.h"
+
+typedef unsigned short sixteen_bits;
+extern sixteen_bits section_count;
+extern boolean changed_section[];
+extern boolean change_pending;
+extern boolean print_where;
+
+/*:12*//*13:*/
+#line 176 "common.h"
+
+extern int argc;
+extern char**argv;
+extern boolean flags[];
+
+/*:13*//*14:*/
+#line 188 "common.h"
+
+extern FILE*C_file;
+extern FILE*tex_file;
+extern FILE*idx_file;
+extern FILE*scn_file;
+extern FILE*active_file;
+
+/*:14*//*15:*/
+#line 197 "common.h"
+
+extern void common_init();
+
+
+
+#line 140 "cweave.w"
+
+/*:15*/
+#line 68 "cweave.w"
+
+/*18:*/
+#line 222 "cweave.w"
+
+typedef struct xref_info{
+sixteen_bits num;
+struct xref_info*xlink;
+}xref_info;
+typedef xref_info*xref_pointer;
+
+/*:18*//*24:*/
+#line 332 "cweave.w"
+
+typedef sixteen_bits token;
+typedef token*token_pointer;
+typedef token_pointer*text_pointer;
+
+/*:24*//*103:*/
+#line 2012 "cweave.w"
+
+typedef struct{
+eight_bits cat;
+eight_bits mathness;
+union{
+text_pointer Trans;
+/*231:*/
+#line 4257 "cweave.w"
+
+name_pointer Head;
+
+/*:231*/
+#line 2018 "cweave.w"
+
+}trans_plus;
+}scrap;
+typedef scrap*scrap_pointer;
+
+/*:103*//*185:*/
+#line 3412 "cweave.w"
+typedef int mode;
+typedef struct{
+token_pointer end_field;
+token_pointer tok_field;
+boolean mode_field;
+}output_state;
+typedef output_state*stack_pointer;
+
+/*:185*/
+#line 69 "cweave.w"
+
+/*17:*/
+#line 197 "cweave.w"
+
+boolean change_exists;
+
+/*:17*//*19:*/
+#line 229 "cweave.w"
+
+xref_info xmem[max_refs];
+xref_pointer xmem_end= xmem+max_refs-1;
+xref_pointer xref_ptr;
+sixteen_bits xref_switch,section_xref_switch;
+
+/*:19*//*25:*/
+#line 342 "cweave.w"
+
+token tok_mem[max_toks];
+token_pointer tok_mem_end= tok_mem+max_toks-1;
+token_pointer tok_start[max_texts];
+token_pointer tok_ptr;
+text_pointer text_ptr;
+text_pointer tok_start_end= tok_start+max_texts-1;
+token_pointer max_tok_ptr;
+text_pointer max_text_ptr;
+
+/*:25*//*31:*/
+#line 521 "cweave.w"
+
+eight_bits ccode[256];
+
+/*:31*//*37:*/
+#line 640 "cweave.w"
+
+name_pointer cur_section;
+char cur_section_char;
+
+/*:37*//*41:*/
+#line 214 "cweave.ch"
+
+boolean preprocessing= 0;
+int define_pos= 0;
+
+#line 695 "cweave.w"
+
+/*:41*//*43:*/
+#line 706 "cweave.w"
+
+boolean sharp_include_line= 0;
+
+/*:43*//*58:*/
+#line 980 "cweave.w"
+
+eight_bits next_control;
+
+/*:58*//*68:*/
+#line 1136 "cweave.w"
+
+name_pointer lhs,rhs;
+
+/*:68*//*73:*/
+#line 1219 "cweave.w"
+
+xref_pointer cur_xref;
+boolean an_output;
+
+/*:73*//*77:*/
+#line 1261 "cweave.w"
+
+char out_buf[line_length+1];
+char*out_ptr;
+char*out_buf_end= out_buf+line_length;
+#line 268 "cweave.ch"
+int out_line;
+
+boolean in_math= 0;
+boolean escape= 0;
+int math_brace_count= 0;
+#line 1266 "cweave.w"
+
+/*:77*//*97:*/
+#line 1670 "cweave.w"
+
+char cat_name[256][12];
+eight_bits cat_index;
+
+/*:97*//*104:*/
+#line 2025 "cweave.w"
+
+scrap scrap_info[max_scraps];
+scrap_pointer scrap_info_end= scrap_info+max_scraps-1;
+scrap_pointer pp;
+scrap_pointer scrap_base;
+scrap_pointer scrap_ptr;
+scrap_pointer lo_ptr;
+scrap_pointer hi_ptr;
+scrap_pointer max_scr_ptr;
+
+/*:104*//*108:*/
+#line 2184 "cweave.w"
+
+int cur_mathness,init_mathness;
+
+/*:108*//*167:*/
+#line 2962 "cweave.w"
+
+int tracing;
+
+/*:167*//*186:*/
+#line 3425 "cweave.w"
+
+output_state cur_state;
+output_state stack[stack_size];
+stack_pointer stack_ptr;
+stack_pointer stack_end= stack+stack_size-1;
+stack_pointer max_stack_ptr;
+
+/*:186*//*190:*/
+#line 3475 "cweave.w"
+
+name_pointer cur_name;
+
+/*:190*//*206:*/
+#line 3831 "cweave.w"
+
+int save_line;
+char*save_place;
+int sec_depth;
+boolean space_checked;
+boolean format_visible;
+boolean doing_format= 0;
+boolean group_found= 0;
+
+/*:206*//*215:*/
+#line 4014 "cweave.w"
+
+name_pointer this_section;
+
+/*:215*//*226:*/
+#line 4198 "cweave.w"
+
+sixteen_bits k_section;
+
+/*:226*//*228:*/
+#line 4224 "cweave.w"
+
+name_pointer bucket[256];
+name_pointer next_name;
+name_pointer blink[max_names];
+
+/*:228*//*232:*/
+#line 4267 "cweave.w"
+
+eight_bits cur_depth;
+char*cur_byte;
+sixteen_bits cur_val;
+sort_pointer max_sort_ptr;
+
+/*:232*//*234:*/
+#line 4279 "cweave.w"
+
+eight_bits collate[102+128];
+
+
+/*:234*//*243:*/
+#line 4432 "cweave.w"
+
+xref_pointer next_xref,this_xref;
+
+
+/*:243*/
+#line 70 "cweave.w"
+
+/*2:*/
+#line 78 "cweave.w"
+
+extern int strlen();
+extern int strcmp();
+extern char*strcpy();
+extern int strncmp();
+extern char*strncpy();
+
+/*:2*//*34:*/
+#line 562 "cweave.w"
+
+void skip_limbo();
+
+/*:34*//*39:*/
+#line 655 "cweave.w"
+
+eight_bits get_next();
+
+/*:39*//*55:*/
+#line 933 "cweave.w"
+
+void skip_restricted();
+
+/*:55*//*59:*/
+#line 986 "cweave.w"
+
+void phase_one();
+
+/*:59*//*62:*/
+#line 1038 "cweave.w"
+
+void C_xref();
+
+/*:62*//*64:*/
+#line 1066 "cweave.w"
+
+void outer_xref();
+
+/*:64*//*74:*/
+#line 1227 "cweave.w"
+
+void section_check();
+
+/*:74*//*83:*/
+#line 1363 "cweave.w"
+
+void break_out();
+
+/*:83*//*91:*/
+#line 1506 "cweave.w"
+
+int copy_comment();
+
+/*:91*//*114:*/
+#line 2388 "cweave.w"
+
+void underline_xref();
+
+/*:114*//*180:*/
+#line 3289 "cweave.w"
+
+void app_cur_id();
+
+/*:180*//*193:*/
+#line 3544 "cweave.w"
+
+void make_output();
+
+/*:193*//*204:*/
+#line 3804 "cweave.w"
+
+void phase_two();
+
+/*:204*//*211:*/
+#line 3927 "cweave.w"
+
+void finish_C();
+
+/*:211*//*220:*/
+#line 4098 "cweave.w"
+
+void footnote();
+
+/*:220*//*224:*/
+#line 4147 "cweave.w"
+
+void phase_three();
+
+/*:224*//*236:*/
+#line 4327 "cweave.w"
+
+void unbucket();
+
+/*:236*//*245:*/
+#line 4447 "cweave.w"
+
+void section_print();
+
+/*:245*/
+#line 71 "cweave.w"
+
+
+/*:1*//*3:*/
+#line 93 "cweave.w"
+
+int main(ac,av)
+int ac;
+char**av;
+{
+argc= ac;argv= av;
+program= cweave;
+make_xrefs= force_lines= 1;
+common_init();
+/*20:*/
+#line 243 "cweave.w"
+
+xref_ptr= xmem;name_dir->xref= (char*)xmem;xref_switch= 0;section_xref_switch= 0;
+xmem->num= 0;
+
+/*:20*//*26:*/
+#line 352 "cweave.w"
+
+tok_ptr= tok_mem+1;text_ptr= tok_start+1;tok_start[0]= tok_mem+1;
+tok_start[1]= tok_mem+1;
+max_tok_ptr= tok_mem+1;max_text_ptr= tok_start+1;
+
+/*:26*//*32:*/
+#line 524 "cweave.w"
+
+{int c;for(c= 0;c<256;c++)ccode[c]= 0;}
+ccode[' ']= ccode['\t']= ccode['\n']= ccode['\v']= ccode['\r']= ccode['\f']
+= ccode['*']= new_section;
+ccode['@']= '@';
+ccode['=']= verbatim;
+ccode['d']= ccode['D']= definition;
+ccode['f']= ccode['F']= ccode['s']= ccode['S']= format_code;
+ccode['c']= ccode['C']= ccode['p']= ccode['P']= begin_C;
+ccode['t']= ccode['T']= TeX_string;
+ccode['l']= ccode['L']= translit_code;
+ccode['q']= ccode['Q']= noop;
+ccode['h']= ccode['H']= output_defs_code;
+ccode['&']= join;ccode['<']= ccode['(']= section_name;
+ccode['!']= underline;ccode['^']= xref_roman;
+ccode[':']= xref_wildcard;ccode['.']= xref_typewriter;ccode[',']= thin_space;
+ccode['|']= math_break;ccode['/']= line_break;ccode['#']= big_line_break;
+#line 117 "cweave.ch"
+ccode['+']= no_line_break;ccode[';']= pseudo_semi;
+ccode['{']= pseudo_lbrace;ccode['}']= pseudo_rbrace;
+ccode['[']= macro_arg_open;ccode[']']= macro_arg_close;
+#line 543 "cweave.w"
+ccode['\'']= ord;
+/*33:*/
+#line 550 "cweave.w"
+
+ccode['0']= ccode['1']= ccode['2']= trace;
+
+/*:33*/
+#line 544 "cweave.w"
+
+
+/*:32*//*52:*/
+#line 888 "cweave.w"
+section_text[0]= ' ';
+
+/*:52*//*80:*/
+#line 1330 "cweave.w"
+
+#line 281 "cweave.ch"
+out_ptr= out_buf+1;out_line= 1;active_file= tex_file;
+if(alternative){
+*out_ptr= 'a';
+tex_printf("\\input cwebmac");
+}else{
+*out_ptr= 'c';
+tex_printf("\\input cwebma");
+}
+#line 1333 "cweave.w"
+
+/*:80*//*82:*/
+#line 1356 "cweave.w"
+
+out_buf[0]= '\\';
+
+/*:82*//*98:*/
+#line 1674 "cweave.w"
+
+for(cat_index= 0;cat_index<255;cat_index++)
+strcpy(cat_name[cat_index],"UNKNOWN");
+strcpy(cat_name[exp],"exp");
+strcpy(cat_name[unop],"unop");
+strcpy(cat_name[binop],"binop");
+strcpy(cat_name[unorbinop],"unorbinop");
+strcpy(cat_name[cast],"cast");
+strcpy(cat_name[question],"?");
+strcpy(cat_name[lbrace],"{");
+strcpy(cat_name[rbrace],"}");
+strcpy(cat_name[decl_head],"decl_head");
+strcpy(cat_name[comma],",");
+strcpy(cat_name[lpar],"(");
+strcpy(cat_name[rpar],")");
+strcpy(cat_name[prelangle],"<");
+strcpy(cat_name[prerangle],">");
+strcpy(cat_name[langle],"\\<");
+strcpy(cat_name[colcol],"::");
+strcpy(cat_name[base],"\\:");
+strcpy(cat_name[decl],"decl");
+strcpy(cat_name[struct_head],"struct_head");
+strcpy(cat_name[stmt],"stmt");
+strcpy(cat_name[function],"function");
+strcpy(cat_name[fn_decl],"fn_decl");
+strcpy(cat_name[else_like],"else_like");
+strcpy(cat_name[semi],";");
+strcpy(cat_name[colon],":");
+strcpy(cat_name[tag],"tag");
+strcpy(cat_name[if_head],"if_head");
+strcpy(cat_name[else_head],"else_head");
+strcpy(cat_name[if_clause],"if()");
+strcpy(cat_name[lproc],"#{");
+strcpy(cat_name[rproc],"#}");
+strcpy(cat_name[insert],"insert");
+strcpy(cat_name[section_scrap],"section");
+strcpy(cat_name[dead],"@d");
+strcpy(cat_name[public_like],"public");
+strcpy(cat_name[operator_like],"operator");
+strcpy(cat_name[new_like],"new");
+strcpy(cat_name[catch_like],"catch");
+strcpy(cat_name[for_like],"for");
+strcpy(cat_name[do_like],"do");
+strcpy(cat_name[if_like],"if");
+strcpy(cat_name[raw_rpar],")?");
+strcpy(cat_name[raw_unorbin],"unorbinop?");
+strcpy(cat_name[const_like],"const");
+strcpy(cat_name[raw_int],"raw");
+strcpy(cat_name[int_like],"int");
+strcpy(cat_name[case_like],"case");
+strcpy(cat_name[sizeof_like],"sizeof");
+strcpy(cat_name[struct_like],"struct");
+strcpy(cat_name[typedef_like],"typedef");
+strcpy(cat_name[define_like],"define");
+strcpy(cat_name[begin_arg],"@[");
+#line 362 "cweave.ch"
+strcpy(cat_name[end_arg],"@]");
+strcpy(cat_name[label],"label");
+strcpy(cat_name[do_head],"do_head");
+strcpy(cat_name[pp_space],"#_");
+#line 1730 "cweave.w"
+strcpy(cat_name[0],"zero");
+
+/*:98*//*105:*/
+#line 2035 "cweave.w"
+
+scrap_base= scrap_info+1;
+max_scr_ptr= scrap_ptr= scrap_info;
+
+/*:105*//*187:*/
+#line 3432 "cweave.w"
+
+max_stack_ptr= stack;
+
+/*:187*//*233:*/
+#line 4273 "cweave.w"
+
+max_sort_ptr= scrap_info;
+
+/*:233*//*235:*/
+#line 4292 "cweave.w"
+
+collate[0]= 0;
+strcpy(collate+1," \1\2\3\4\5\6\7\10\11\12\13\14\15\16\17");
+
+strcpy(collate+17,"\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37");
+
+strcpy(collate+33,"!\42#$%&'()*+,-./:;<=>?@[\\]^`{|}~_");
+
+strcpy(collate+65,"abcdefghijklmnopqrstuvwxyz0123456789");
+
+strcpy(collate+101,"\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217");
+
+strcpy(collate+117,"\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237");
+
+strcpy(collate+133,"\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257");
+
+strcpy(collate+149,"\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277");
+
+strcpy(collate+165,"\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317");
+
+strcpy(collate+181,"\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337");
+
+strcpy(collate+197,"\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357");
+
+strcpy(collate+213,"\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377");
+
+
+/*:235*/
+#line 102 "cweave.w"
+;
+if(show_banner)printf(banner);
+/*28:*/
+#line 392 "cweave.w"
+
+id_lookup("asm",NULL,sizeof_like);
+id_lookup("auto",NULL,int_like);
+id_lookup("break",NULL,case_like);
+id_lookup("case",NULL,case_like);
+id_lookup("catch",NULL,catch_like);
+id_lookup("char",NULL,raw_int);
+id_lookup("class",NULL,struct_like);
+id_lookup("clock_t",NULL,raw_int);
+id_lookup("const",NULL,const_like);
+id_lookup("continue",NULL,case_like);
+id_lookup("default",NULL,case_like);
+id_lookup("define",NULL,define_like);
+id_lookup("defined",NULL,sizeof_like);
+id_lookup("delete",NULL,sizeof_like);
+id_lookup("div_t",NULL,raw_int);
+id_lookup("do",NULL,do_like);
+id_lookup("double",NULL,raw_int);
+id_lookup("elif",NULL,if_like);
+id_lookup("else",NULL,else_like);
+id_lookup("endif",NULL,if_like);
+id_lookup("enum",NULL,struct_like);
+id_lookup("error",NULL,if_like);
+id_lookup("extern",NULL,int_like);
+id_lookup("FILE",NULL,raw_int);
+id_lookup("float",NULL,raw_int);
+id_lookup("for",NULL,for_like);
+id_lookup("fpos_t",NULL,raw_int);
+id_lookup("friend",NULL,int_like);
+id_lookup("goto",NULL,case_like);
+id_lookup("if",NULL,if_like);
+id_lookup("ifdef",NULL,if_like);
+id_lookup("ifndef",NULL,if_like);
+id_lookup("include",NULL,if_like);
+id_lookup("inline",NULL,int_like);
+id_lookup("int",NULL,raw_int);
+id_lookup("jmp_buf",NULL,raw_int);
+id_lookup("ldiv_t",NULL,raw_int);
+id_lookup("line",NULL,if_like);
+id_lookup("long",NULL,raw_int);
+id_lookup("new",NULL,new_like);
+id_lookup("NULL",NULL,quoted);
+id_lookup("offsetof",NULL,sizeof_like);
+id_lookup("operator",NULL,operator_like);
+id_lookup("pragma",NULL,if_like);
+id_lookup("private",NULL,public_like);
+id_lookup("protected",NULL,public_like);
+id_lookup("ptrdiff_t",NULL,raw_int);
+id_lookup("public",NULL,public_like);
+id_lookup("register",NULL,int_like);
+id_lookup("return",NULL,case_like);
+id_lookup("short",NULL,raw_int);
+id_lookup("sig_atomic_t",NULL,raw_int);
+id_lookup("signed",NULL,raw_int);
+id_lookup("size_t",NULL,raw_int);
+id_lookup("sizeof",NULL,sizeof_like);
+id_lookup("static",NULL,int_like);
+id_lookup("struct",NULL,struct_like);
+id_lookup("switch",NULL,for_like);
+id_lookup("template",NULL,int_like);
+id_lookup("TeX",NULL,custom);
+id_lookup("this",NULL,quoted);
+id_lookup("throw",NULL,case_like);
+id_lookup("time_t",NULL,raw_int);
+id_lookup("try",NULL,else_like);
+id_lookup("typedef",NULL,typedef_like);
+id_lookup("undef",NULL,if_like);
+id_lookup("union",NULL,struct_like);
+id_lookup("unsigned",NULL,raw_int);
+id_lookup("va_dcl",NULL,decl);
+id_lookup("va_list",NULL,raw_int);
+id_lookup("virtual",NULL,int_like);
+id_lookup("void",NULL,raw_int);
+id_lookup("volatile",NULL,const_like);
+id_lookup("wchar_t",NULL,raw_int);
+id_lookup("while",NULL,for_like);
+
+/*:28*/
+#line 104 "cweave.w"
+;
+phase_one();
+phase_two();
+phase_three();
+return wrap_up();
+}
+
+/*:3*//*21:*/
+#line 262 "cweave.w"
+
+void
+new_xref(p)
+name_pointer p;
+{
+xref_pointer q;
+sixteen_bits m,n;
+if(no_xref)return;
+if((unindexed(p)||is_tiny(p))&&xref_switch==0)return;
+m= section_count+xref_switch;xref_switch= 0;q= (xref_pointer)p->xref;
+if(q!=xmem){
+n= q->num;
+if(n==m||n==m+def_flag)return;
+else if(m==n+def_flag){
+q->num= m;return;
+}
+}
+append_xref(m);xref_ptr->xlink= q;p->xref= (char*)xref_ptr;
+}
+
+/*:21*//*22:*/
+#line 293 "cweave.w"
+
+void
+new_section_xref(p)
+name_pointer p;
+{
+xref_pointer q,r;
+q= (xref_pointer)p->xref;r= xmem;
+if(q>xmem)
+while(q->num>section_xref_switch){r= q;q= q->xlink;}
+if(r->num==section_count+section_xref_switch)
+return;
+append_xref(section_count+section_xref_switch);
+xref_ptr->xlink= q;section_xref_switch= 0;
+if(r==xmem)p->xref= (char*)xref_ptr;
+else r->xlink= xref_ptr;
+}
+
+/*:22*//*23:*/
+#line 313 "cweave.w"
+
+void
+set_file_flag(p)
+name_pointer p;
+{
+xref_pointer q;
+q= (xref_pointer)p->xref;
+if(q->num==file_flag)return;
+append_xref(file_flag);
+xref_ptr->xlink= q;
+p->xref= (char*)xref_ptr;
+}
+
+/*:23*//*27:*/
+#line 358 "cweave.w"
+
+int names_match(p,first,l,t)
+name_pointer p;
+char*first;
+int l;
+eight_bits t;
+{
+if(length(p)!=l)return 0;
+if(p->ilk!=t&&!(t==normal&&abnormal(p)))return 0;
+return!strncmp(first,p->byte_start,l);
+}
+
+void
+init_p(p,t)
+name_pointer p;
+eight_bits t;
+{
+p->ilk= t;p->xref= (char*)xmem;
+}
+
+void
+init_node(p)
+name_pointer p;
+{
+p->xref= (char*)xmem;
+}
+
+/*:27*//*35:*/
+#line 565 "cweave.w"
+
+void
+skip_limbo(){
+while(1){
+if(loc>limit&&get_line()==0)return;
+*(limit+1)= '@';
+while(*loc!='@')loc++;
+if(loc++<=limit){int c= ccode[(eight_bits)*loc++];
+if(c==new_section)return;
+if(c==noop)skip_restricted();
+else if(c==format_code)/*71:*/
+#line 1180 "cweave.w"
+
+{
+if(get_next()!=identifier)
+err_print("! Missing left identifier of @s");
+
+else{
+lhs= id_lookup(id_first,id_loc,normal);
+if(get_next()!=identifier)
+err_print("! Missing right identifier of @s");
+
+else{
+rhs= id_lookup(id_first,id_loc,normal);
+lhs->ilk= rhs->ilk;
+}
+}
+}
+
+/*:71*/
+#line 575 "cweave.w"
+;
+}
+}
+}
+
+/*:35*//*36:*/
+#line 587 "cweave.w"
+
+unsigned
+skip_TeX()
+{
+while(1){
+if(loc>limit&&get_line()==0)return(new_section);
+*(limit+1)= '@';
+while(*loc!='@'&&*loc!='|')loc++;
+if(*loc++=='|')return('|');
+if(loc<=limit)return(ccode[(eight_bits)*(loc++)]);
+}
+}
+
+/*:36*//*40:*/
+#line 658 "cweave.w"
+
+#line 155 "cweave.ch"
+eight_bits
+get_next()
+{eight_bits c;
+int blank_count= 0;
+
+if(loc<limit&&preprocessing&&(define_pos==2||define_pos==4)&&
+xisspace(*loc)){
+define_pos= 5;
+return(preproc_space);
+}
+
+while(1){
+/*45:*/
+#line 717 "cweave.w"
+
+while(loc==limit-1&&preprocessing&&*loc=='\\')
+if(get_line()==0)return(new_section);
+#line 228 "cweave.ch"
+if(loc>=limit&&preprocessing){
+preprocessing= sharp_include_line= define_pos= 0;
+return(right_preproc);
+}
+#line 724 "cweave.w"
+
+/*:45*/
+#line 167 "cweave.ch"
+;
+if(loc>limit&&get_line()==0)return(new_section);
+
+if(loc==buffer){
+blank_count= 0;
+while((*loc==' '||*loc=='\t')&&loc<limit){
+blank_count++;loc++;
+}
+}
+
+c= *(loc++);
+if(xisdigit(c)||c=='\\'||c=='.')/*48:*/
+#line 775 "cweave.w"
+{
+id_first= id_loc= section_text+1;
+if(*(loc-1)=='\\'){*id_loc++= '~';
+while(xisdigit(*loc))*id_loc++= *loc++;}
+else if(*(loc-1)=='0'){
+if(*loc=='x'||*loc=='X'){*id_loc++= '^';loc++;
+while(xisxdigit(*loc))*id_loc++= *loc++;}
+else if(xisdigit(*loc)){*id_loc++= '~';
+while(xisdigit(*loc))*id_loc++= *loc++;}
+else goto dec;
+}
+else{
+if(*(loc-1)=='.'&&!xisdigit(*loc))goto mistake;
+dec:*id_loc++= *(loc-1);
+while(xisdigit(*loc)||*loc=='.')*id_loc++= *loc++;
+if(*loc=='e'||*loc=='E'){
+*id_loc++= '_';loc++;
+if(*loc=='+'||*loc=='-')*id_loc++= *loc++;
+while(xisdigit(*loc))*id_loc++= *loc++;
+}
+}
+while(*loc=='u'||*loc=='U'||*loc=='l'||*loc=='L'
+||*loc=='f'||*loc=='F'){
+*id_loc++= '$';*id_loc++= toupper(*loc);loc++;
+}
+return(constant);
+}
+
+/*:48*/
+#line 178 "cweave.ch"
+
+else if(c=='\''||c=='"'||(c=='L'&&(*loc=='\''||*loc=='"'))
+||(c=='<'&&sharp_include_line==1))
+/*49:*/
+#line 808 "cweave.w"
+{
+char delim= c;
+id_first= section_text+1;
+id_loc= section_text;
+if(delim=='\''&&*(loc-2)=='@'){*++id_loc= '@';*++id_loc= '@';}
+*++id_loc= delim;
+if(delim=='L'){
+delim= *loc++;*++id_loc= delim;
+}
+if(delim=='<')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;
+
+}
+}
+if((c= *loc++)==delim){
+if(++id_loc<=section_text_end)*id_loc= c;
+break;
+}
+if(c=='\\')if(loc>=limit)continue;
+else if(++id_loc<=section_text_end){
+*id_loc= '\\';c= *loc++;
+}
+if(++id_loc<=section_text_end)*id_loc= c;
+}
+if(id_loc>=section_text_end){
+printf("\n! String too long: ");
+
+term_write(section_text+1,25);
+printf("...");mark_error;
+}
+id_loc++;
+return(string);
+}
+
+/*:49*/
+#line 181 "cweave.ch"
+
+else if(xisalpha(c)||isxalpha(c)||ishigh(c))
+/*47:*/
+#line 758 "cweave.w"
+{
+#line 250 "cweave.ch"
+id_first= --loc;
+
+if(preprocessing){
+if(define_pos==1)
+define_pos= 2;
+else if(strncmp(loc,"define",6)==0&&xisspace(*(loc+6)))
+define_pos= 1;
+}
+
+while(isalpha(*++loc)||isdigit(*loc)||isxalpha(*loc)||ishigh(*loc));
+id_loc= loc;return(identifier);
+#line 762 "cweave.w"
+}
+
+/*:47*/
+#line 183 "cweave.ch"
+
+else if(c=='@')/*50:*/
+#line 852 "cweave.w"
+{
+c= *loc++;
+switch(ccode[(eight_bits)c]){
+case translit_code:err_print("! Use @l in limbo only");continue;
+
+case underline:xref_switch= def_flag;continue;
+case trace:tracing= c-'0';continue;
+case xref_roman:case xref_wildcard:case xref_typewriter:
+case noop:case TeX_string:c= ccode[c];skip_restricted();return(c);
+case section_name:
+/*51:*/
+#line 872 "cweave.w"
+{
+char*k;
+cur_section_char= *(loc-1);
+/*53:*/
+#line 890 "cweave.w"
+
+k= section_text;
+while(1){
+if(loc>limit&&get_line()==0){
+err_print("! Input ended in section name");
+
+loc= buffer+1;break;
+}
+c= *loc;
+/*54:*/
+#line 914 "cweave.w"
+
+if(c=='@'){
+c= *(loc+1);
+if(c=='>'){
+loc+= 2;break;
+}
+if(ccode[(eight_bits)c]==new_section){
+err_print("! Section name didn't end");break;
+
+}
+if(c!='@'){
+err_print("! Control codes are forbidden in section name");break;
+
+}
+*(++k)= '@';loc++;
+}
+
+/*:54*/
+#line 899 "cweave.w"
+;
+loc++;if(k<section_text_end)k++;
+if(xisspace(c)){
+c= ' ';if(*(k-1)==' ')k--;
+}
+*k= c;
+}
+if(k>=section_text_end){
+printf("\n! Section name too long: ");
+
+term_write(section_text+1,25);
+printf("...");mark_harmless;
+}
+if(*k==' '&&k>section_text)k--;
+
+/*:53*/
+#line 875 "cweave.w"
+;
+if(k-section_text>3&&strncmp(k-2,"...",3)==0)
+cur_section= section_lookup(section_text+1,k-3,1);
+else cur_section= section_lookup(section_text+1,k,0);
+xref_switch= 0;return(section_name);
+}
+
+/*:51*/
+#line 862 "cweave.w"
+;
+case verbatim:/*57:*/
+#line 961 "cweave.w"
+{
+id_first= loc++;*(limit+1)= '@';*(limit+2)= '>';
+while(*loc!='@'||*(loc+1)!='>')loc++;
+if(loc>=limit)err_print("! Verbatim string didn't end");
+
+id_loc= loc;loc+= 2;
+return(verbatim);
+}
+
+/*:57*/
+#line 863 "cweave.w"
+;
+case ord:/*49:*/
+#line 808 "cweave.w"
+{
+char delim= c;
+id_first= section_text+1;
+id_loc= section_text;
+if(delim=='\''&&*(loc-2)=='@'){*++id_loc= '@';*++id_loc= '@';}
+*++id_loc= delim;
+if(delim=='L'){
+delim= *loc++;*++id_loc= delim;
+}
+if(delim=='<')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;
+
+}
+}
+if((c= *loc++)==delim){
+if(++id_loc<=section_text_end)*id_loc= c;
+break;
+}
+if(c=='\\')if(loc>=limit)continue;
+else if(++id_loc<=section_text_end){
+*id_loc= '\\';c= *loc++;
+}
+if(++id_loc<=section_text_end)*id_loc= c;
+}
+if(id_loc>=section_text_end){
+printf("\n! String too long: ");
+
+term_write(section_text+1,25);
+printf("...");mark_error;
+}
+id_loc++;
+return(string);
+}
+
+/*:49*/
+#line 864 "cweave.w"
+;
+default:return(ccode[(eight_bits)c]);
+}
+}
+
+/*:50*/
+#line 184 "cweave.ch"
+
+else if(xisspace(c))continue;
+if(c=='#'&&loc==buffer+1+blank_count&&!preprocessing)
+/*42:*/
+#line 696 "cweave.w"
+{
+preprocessing= 1;
+/*44:*/
+#line 709 "cweave.w"
+
+while(loc<=buffer_end-7&&xisspace(*loc))loc++;
+if(loc<=buffer_end-6&&strncmp(loc,"include",7)==0)sharp_include_line= 1;
+
+/*:44*/
+#line 698 "cweave.w"
+;
+return(left_preproc);
+}
+
+/*:42*/
+#line 187 "cweave.ch"
+;
+mistake:/*46:*/
+#line 734 "cweave.w"
+
+switch(c){
+case'/':if(*loc=='*'){compress(begin_comment);}
+else if(*loc=='/')compress(begin_short_comment);break;
+case'+':if(*loc=='+')compress(plus_plus);break;
+case'-':if(*loc=='-'){compress(minus_minus);}
+else if(*loc=='>')if(*(loc+1)=='*'){loc++;compress(minus_gt_ast);}
+else compress(minus_gt);break;
+case'.':if(*loc=='*'){compress(period_ast);}
+else if(*loc=='.'&&*(loc+1)=='.'){
+loc++;compress(dot_dot_dot);
+}
+break;
+case':':if(*loc==':')compress(colon_colon);break;
+case'=':if(*loc=='=')compress(eq_eq);break;
+case'>':if(*loc=='='){compress(gt_eq);}
+else if(*loc=='>')compress(gt_gt);break;
+case'<':if(*loc=='='){compress(lt_eq);}
+else if(*loc=='<')compress(lt_lt);break;
+case'&':if(*loc=='&')compress(and_and);break;
+case'|':if(*loc=='|')compress(or_or);break;
+#line 239 "cweave.ch"
+case'!':if(*loc=='=')compress(not_eq);break;
+case'#':if(*loc=='#')compress(numb_numb);break;
+#line 756 "cweave.w"
+}
+
+/*:46*/
+#line 188 "cweave.ch"
+
+if(preprocessing){
+if(c=='('&&define_pos==2&&!xisspace(*(loc-2)))
+define_pos= 3;
+else if(c==')'&&define_pos==3)
+define_pos= 4;
+}
+return(c);
+}
+}
+#line 679 "cweave.w"
+
+/*:40*//*56:*/
+#line 936 "cweave.w"
+
+void
+skip_restricted()
+{
+id_first= loc;*(limit+1)= '@';
+false_alarm:
+while(*loc!='@')loc++;
+id_loc= loc;
+if(loc++>limit){
+err_print("! Control text didn't end");loc= limit;
+
+}
+else{
+if(*loc=='@'&&loc<=limit){loc++;goto false_alarm;}
+if(*loc++!='>')
+err_print("! Control codes are forbidden in control text");
+
+}
+}
+
+/*:56*//*60:*/
+#line 989 "cweave.w"
+
+void
+phase_one(){
+phase= 1;reset_input();section_count= 0;
+skip_limbo();change_exists= 0;
+while(!input_has_ended)
+/*61:*/
+#line 1002 "cweave.w"
+
+{
+if(++section_count==max_sections)overflow("section number");
+changed_section[section_count]= changing;
+
+if(*(loc-1)=='*'&&show_progress){
+printf("*%d",section_count);
+update_terminal;
+}
+/*66:*/
+#line 1093 "cweave.w"
+
+while(1){
+switch(next_control= skip_TeX()){
+case translit_code:err_print("! Use @l in limbo only");continue;
+
+case underline:xref_switch= def_flag;continue;
+case trace:tracing= *(loc-1)-'0';continue;
+case'|':C_xref(section_name);break;
+case xref_roman:case xref_wildcard:case xref_typewriter:
+case noop:case section_name:
+loc-= 2;next_control= get_next();
+if(next_control>=xref_roman&&next_control<=xref_typewriter){
+/*67:*/
+#line 1113 "cweave.w"
+
+{
+char*src= id_first,*dst= id_first;
+while(src<id_loc){
+if(*src=='@')src++;
+*dst++= *src++;
+}
+id_loc= dst;
+while(dst<src)*dst++= ' ';
+}
+
+/*:67*/
+#line 1105 "cweave.w"
+
+new_xref(id_lookup(id_first,id_loc,next_control-identifier));
+}
+break;
+}
+if(next_control>=format_code)break;
+}
+
+/*:66*/
+#line 1011 "cweave.w"
+;
+/*69:*/
+#line 1141 "cweave.w"
+
+while(next_control<=definition){
+if(next_control==definition){
+xref_switch= def_flag;
+next_control= get_next();
+}else/*70:*/
+#line 1155 "cweave.w"
+{
+next_control= get_next();
+if(next_control==identifier){
+lhs= id_lookup(id_first,id_loc,normal);lhs->ilk= normal;
+if(xref_switch)new_xref(lhs);
+next_control= get_next();
+if(next_control==identifier){
+rhs= id_lookup(id_first,id_loc,normal);
+lhs->ilk= rhs->ilk;
+if(unindexed(lhs)){
+xref_pointer q,r= NULL;
+for(q= (xref_pointer)lhs->xref;q>xmem;q= q->xlink)
+if(q->num<def_flag)
+if(r)r->xlink= q->xlink;
+else lhs->xref= (char*)q->xlink;
+else r= q;
+}
+next_control= get_next();
+}
+}
+}
+
+/*:70*/
+#line 1146 "cweave.w"
+;
+outer_xref();
+}
+
+/*:69*/
+#line 1012 "cweave.w"
+;
+/*72:*/
+#line 1200 "cweave.w"
+
+if(next_control<=section_name){
+if(next_control==begin_C)section_xref_switch= 0;
+else{
+section_xref_switch= def_flag;
+if(cur_section_char=='('&&cur_section!=name_dir)
+set_file_flag(cur_section);
+}
+do{
+if(next_control==section_name&&cur_section!=name_dir)
+new_section_xref(cur_section);
+next_control= get_next();outer_xref();
+}while(next_control<=section_name);
+}
+
+/*:72*/
+#line 1013 "cweave.w"
+;
+if(changed_section[section_count])change_exists= 1;
+}
+
+/*:61*/
+#line 995 "cweave.w"
+;
+changed_section[section_count]= change_exists;
+
+phase= 2;
+/*76:*/
+#line 1253 "cweave.w"
+section_check(root)
+
+/*:76*/
+#line 999 "cweave.w"
+;
+}
+
+/*:60*//*63:*/
+#line 1041 "cweave.w"
+
+void
+C_xref(spec_ctrl)
+eight_bits spec_ctrl;
+{
+name_pointer p;
+while(next_control<format_code||next_control==spec_ctrl){
+if(next_control>=identifier&&next_control<=xref_typewriter){
+if(next_control>identifier)/*67:*/
+#line 1113 "cweave.w"
+
+{
+char*src= id_first,*dst= id_first;
+while(src<id_loc){
+if(*src=='@')src++;
+*dst++= *src++;
+}
+id_loc= dst;
+while(dst<src)*dst++= ' ';
+}
+
+/*:67*/
+#line 1049 "cweave.w"
+
+p= id_lookup(id_first,id_loc,next_control-identifier);new_xref(p);
+}
+if(next_control==section_name){
+section_xref_switch= cite_flag;
+new_section_xref(cur_section);
+}
+next_control= get_next();
+if(next_control=='|'||next_control==begin_comment||
+next_control==begin_short_comment)return;
+}
+}
+
+/*:63*//*65:*/
+#line 1069 "cweave.w"
+
+void
+outer_xref()
+{
+int bal;
+while(next_control<format_code)
+if(next_control!=begin_comment&&next_control!=begin_short_comment)
+C_xref(ignore);
+else{
+boolean is_long_comment= (next_control==begin_comment);
+bal= copy_comment(is_long_comment,1);next_control= '|';
+while(bal>0){
+C_xref(section_name);
+if(next_control=='|')bal= copy_comment(is_long_comment,bal);
+else bal= 0;
+}
+}
+}
+
+/*:65*//*75:*/
+#line 1230 "cweave.w"
+
+void
+section_check(p)
+name_pointer p;
+{
+if(p){
+section_check(p->llink);
+cur_xref= (xref_pointer)p->xref;
+if(cur_xref->num==file_flag){an_output= 1;cur_xref= cur_xref->xlink;}
+else an_output= 0;
+if(cur_xref->num<def_flag){
+printf("\n! Never defined: <");print_section_name(p);putchar('>');mark_harmless;
+
+}
+while(cur_xref->num>=cite_flag)cur_xref= cur_xref->xlink;
+if(cur_xref==xmem&&!an_output){
+printf("\n! Never used: <");print_section_name(p);putchar('>');mark_harmless;
+
+}
+section_check(p->rlink);
+}
+}
+
+/*:75*//*78:*/
+#line 1283 "cweave.w"
+
+void
+flush_buffer(b,per_cent,carryover)
+char*b;
+boolean per_cent,carryover;
+{
+char*j;j= b;
+if(!per_cent)
+while(j>out_buf&&*j==' ')j--;
+c_line_write(j-out_buf);
+if(per_cent)tex_putc('%');
+tex_new_line;out_line++;
+if(carryover)
+while(j>out_buf)
+if(*j--=='%'&&(j==out_buf||*j!='\\')){
+*b--= '%';break;
+}
+if(b<out_ptr)strncpy(out_buf+1,b+1,out_ptr-b);
+out_ptr-= b-out_buf;
+}
+
+/*:78*//*79:*/
+#line 1312 "cweave.w"
+
+void
+finish_line()
+{
+char*k;
+if(out_ptr>out_buf)flush_buffer(out_ptr,0,0);
+else{
+for(k= buffer;k<=limit;k++)
+if(!(xisspace(*k)))return;
+flush_buffer(out_buf,0,0);
+}
+}
+
+/*:79*//*81:*/
+#line 298 "cweave.ch"
+
+void
+out(c)
+char c;
+{
+if(out_ptr>=out_buf_end)
+break_out();
+
+if(!escape){
+if(in_math){
+if(c=='{')
+math_brace_count++;
+else if(c=='}'){
+math_brace_count--;
+if(math_brace_count<0){
+math_brace_count= 0;
+return;
+}
+}
+}
+if(c=='$'){
+while(math_brace_count>0){
+*(++out_ptr)= '}';
+math_brace_count--;
+}
+in_math= 1-in_math;
+}
+}
+
+if(c=='\\'&&!escape)
+escape= 1;
+else
+escape= 0;
+
+*(++out_ptr)= c;
+return;
+}
+#line 1345 "cweave.w"
+void
+out_str(s)
+char*s;
+{
+while(*s)out(*s++);
+}
+
+/*:81*//*84:*/
+#line 1366 "cweave.w"
+
+void
+break_out()
+{
+char*k= out_ptr;
+while(1){
+if(k==out_buf)/*85:*/
+#line 1387 "cweave.w"
+
+{
+printf("\n! Line had to be broken (output l. %d):\n",out_line);
+
+term_write(out_buf+1,out_ptr-out_buf-1);
+new_line;mark_harmless;
+flush_buffer(out_ptr-1,1,1);return;
+}
+
+/*:85*/
+#line 1372 "cweave.w"
+;
+if(*k==' '){
+flush_buffer(k,0,1);return;
+}
+if(*(k--)=='\\'&&*k!='\\'){
+flush_buffer(k,1,1);return;
+}
+}
+}
+
+/*:84*//*86:*/
+#line 1401 "cweave.w"
+
+void
+out_section(n)
+sixteen_bits n;
+{
+char s[6];
+sprintf(s,"%d",n);out_str(s);
+if(changed_section[n])out_str("\\*");
+
+}
+
+/*:86*//*87:*/
+#line 1415 "cweave.w"
+
+void
+out_name(p)
+name_pointer p;
+{
+char*k,*k_end= (p+1)->byte_start;
+out('{');
+for(k= p->byte_start;k<k_end;k++){
+if(isxalpha(*k))out('\\');
+out(*k);
+}
+out('}');
+}
+
+/*:87*//*88:*/
+#line 1442 "cweave.w"
+
+void
+copy_limbo()
+{
+char c;
+while(1){
+if(loc>limit&&(finish_line(),get_line()==0))return;
+*(limit+1)= '@';
+while(*loc!='@')out(*(loc++));
+if(loc++<=limit){
+c= *loc++;
+if(ccode[(eight_bits)c]==new_section)break;
+switch(ccode[(eight_bits)c]){
+case translit_code:out_str("\\ATL");break;
+
+case'@':out('@');break;
+case noop:skip_restricted();break;
+case format_code:if(get_next()==identifier)get_next();
+if(loc>=limit)get_line();
+break;
+default:err_print("! Double @ should be used in limbo");
+
+out('@');
+}
+}
+}
+}
+
+/*:88*//*90:*/
+#line 1477 "cweave.w"
+
+eight_bits
+copy_TeX()
+{
+char c;
+while(1){
+if(loc>limit&&(finish_line(),get_line()==0))return(new_section);
+*(limit+1)= '@';
+while((c= *(loc++))!='|'&&c!='@'){
+out(c);
+if(out_ptr==out_buf+1&&(xisspace(c)))out_ptr--;
+}
+if(c=='|')return('|');
+if(loc<=limit)return(ccode[(eight_bits)*(loc++)]);
+}
+}
+
+/*:90*//*92:*/
+#line 1509 "cweave.w"
+
+int copy_comment(is_long_comment,bal)
+boolean is_long_comment;
+int bal;
+{
+char c;
+while(1){
+if(loc>limit){
+if(is_long_comment){
+if(get_line()==0){
+err_print("! Input ended in mid-comment");
+
+loc= buffer+1;goto done;
+}
+}
+else{
+if(bal>1)err_print("! Missing } in comment");
+
+goto done;
+}
+}
+c= *(loc++);
+if(c=='|')return(bal);
+if(is_long_comment)/*93:*/
+#line 1550 "cweave.w"
+
+if(c=='*'&&*loc=='/'){
+loc++;
+if(bal>1)err_print("! Missing } in comment");
+
+goto done;
+}
+
+/*:93*/
+#line 1532 "cweave.w"
+;
+if(phase==2){
+if(ishigh(c))app_tok(quoted_char);
+app_tok(c);
+}
+/*94:*/
+#line 1558 "cweave.w"
+
+if(c=='@'){
+if(*(loc++)!='@'){
+err_print("! Illegal use of @ in comment");
+
+loc-= 2;if(phase==2)*(tok_ptr-1)= ' ';goto done;
+}
+}
+else if(c=='\\'&&*loc!='@')
+if(phase==2)app_tok(*(loc++))else loc++;
+
+/*:94*/
+#line 1537 "cweave.w"
+;
+if(c=='{')bal++;
+else if(c=='}'){
+if(bal>1)bal--;
+else{err_print("! Extra } in comment");
+
+if(phase==2)tok_ptr--;
+}
+}
+}
+done:/*95:*/
+#line 1572 "cweave.w"
+
+if(phase==2)while(bal-->0)app_tok('}');
+return(0);
+
+/*:95*/
+#line 1547 "cweave.w"
+;
+}
+
+/*:92*//*99:*/
+#line 1734 "cweave.w"
+
+void
+print_cat(c)
+eight_bits c;
+{
+printf(cat_name[c]);
+}
+
+/*:99*//*106:*/
+#line 2062 "cweave.w"
+
+void
+print_text(p)
+text_pointer p;
+{
+token_pointer j;
+sixteen_bits r;
+if(p>=text_ptr)printf("BAD");
+else for(j= *p;j<*(p+1);j++){
+r= *j%id_flag;
+switch(*j/id_flag){
+case 1:printf("\\\\{");print_id((name_dir+r));printf("}");
+break;
+case 2:printf("\\&{");print_id((name_dir+r));printf("}");
+break;
+case 3:printf("<");print_section_name((name_dir+r));printf(">");
+break;
+case 4:printf("[[%d]]",r);break;
+case 5:printf("|[[%d]]|",r);break;
+default:/*107:*/
+#line 2087 "cweave.w"
+
+switch(r){
+case math_rel:printf("\\mathrel{");break;
+case big_cancel:printf("[ccancel]");break;
+case cancel:printf("[cancel]");break;
+case indent:printf("[indent]");break;
+case outdent:printf("[outdent]");break;
+case backup:printf("[backup]");break;
+case opt:printf("[opt]");break;
+case break_space:printf("[break]");break;
+case force:printf("[force]");break;
+case big_force:printf("[fforce]");break;
+case preproc_line:printf("[preproc]");break;
+case quoted_char:j++;printf("[%o]",(unsigned)*j);break;
+case end_translation:printf("[quit]");break;
+case inserted:printf("[inserted]");break;
+default:putxchar(r);
+}
+
+/*:107*/
+#line 2081 "cweave.w"
+;
+}
+}
+fflush(stdout);
+}
+
+/*:106*//*109:*/
+#line 2187 "cweave.w"
+
+void
+app_str(s)
+char*s;
+{
+while(*s)app_tok(*(s++));
+}
+
+void
+big_app(a)
+token a;
+{
+if(a==' '||(a>=big_cancel&&a<=big_force)){
+if(cur_mathness==maybe_math)init_mathness= no_math;
+else if(cur_mathness==yes_math)app_str("{}$");
+cur_mathness= no_math;
+}
+else{
+if(cur_mathness==maybe_math)init_mathness= yes_math;
+else if(cur_mathness==no_math)app_str("${}");
+cur_mathness= yes_math;
+}
+app(a);
+}
+
+void
+big_app1(a)
+scrap_pointer a;
+{
+switch(a->mathness%4){
+case(no_math):
+if(cur_mathness==maybe_math)init_mathness= no_math;
+else if(cur_mathness==yes_math)app_str("{}$");
+cur_mathness= a->mathness/4;
+break;
+case(yes_math):
+if(cur_mathness==maybe_math)init_mathness= yes_math;
+else if(cur_mathness==no_math)app_str("${}");
+cur_mathness= a->mathness/4;
+break;
+case(maybe_math):break;
+}
+app(tok_flag+(int)((a)->trans-tok_start));
+}
+
+/*:109*//*111:*/
+#line 2312 "cweave.w"
+
+token_pointer
+find_first_ident(p)
+text_pointer p;
+{
+token_pointer q;
+token_pointer j;
+sixteen_bits r;
+if(p>=text_ptr)confusion("find_first_ident");
+for(j= *p;j<*(p+1);j++){
+r= *j%id_flag;
+switch(*j/id_flag){
+case 1:case 2:return j;
+case 4:case 5:
+if((q= find_first_ident(tok_start+r))!=no_ident_found)
+return q;
+default:;
+if(*j==inserted)return no_ident_found;
+}
+}
+return no_ident_found;
+}
+
+/*:111*//*112:*/
+#line 2339 "cweave.w"
+
+#line 421 "cweave.ch"
+void
+make_reserved(p,cat)
+scrap_pointer p;
+eight_bits cat;
+{
+sixteen_bits tok_value;
+token_pointer tok_loc;
+if((tok_loc= find_first_ident(p->trans))==no_ident_found)
+return;
+tok_value= *tok_loc;
+for(;p<=scrap_ptr;p==lo_ptr?p= hi_ptr:p++){
+if(p->cat==exp||p->cat==int_like||p->cat==const_like){
+if(**(p->trans)==tok_value){
+p->cat= cat;
+**(p->trans)= tok_value%id_flag+res_flag;
+}
+}
+}
+(name_dir+(sixteen_bits)(tok_value%id_flag))->ilk= cat;
+*tok_loc= tok_value%id_flag+res_flag;
+}
+#line 2360 "cweave.w"
+
+/*:112*//*113:*/
+#line 2370 "cweave.w"
+
+void
+make_underlined(p)
+
+scrap_pointer p;
+{
+token_pointer tok_loc;
+if((tok_loc= find_first_ident(p->trans))==no_ident_found)
+return;
+xref_switch= def_flag;
+underline_xref(*tok_loc%id_flag+name_dir);
+}
+
+/*:113*//*115:*/
+#line 2391 "cweave.w"
+
+void
+underline_xref(p)
+name_pointer p;
+{
+xref_pointer q= (xref_pointer)p->xref;
+xref_pointer r;
+sixteen_bits m;
+sixteen_bits n;
+if(no_xref)return;
+m= section_count+xref_switch;
+while(q!=xmem){
+n= q->num;
+if(n==m)return;
+else if(m==n+def_flag){
+q->num= m;return;
+}
+else if(n>=def_flag&&n<m)break;
+q= q->xlink;
+}
+/*116:*/
+#line 2421 "cweave.w"
+
+append_xref(0);
+xref_ptr->xlink= (xref_pointer)p->xref;r= xref_ptr;
+p->xref= (char*)xref_ptr;
+while(r->xlink!=q){r->num= r->xlink->num;r= r->xlink;}
+r->num= m;
+
+/*:116*/
+#line 2411 "cweave.w"
+;
+}
+
+/*:115*//*162:*/
+#line 2868 "cweave.w"
+
+void
+reduce(j,k,c,d,n)
+scrap_pointer j;
+eight_bits c;
+short k,d,n;
+{
+scrap_pointer i,i1;
+j->cat= c;j->trans= text_ptr;
+j->mathness= 4*cur_mathness+init_mathness;
+freeze_text;
+if(k>1){
+for(i= j+k,i1= j+1;i<=lo_ptr;i++,i1++){
+i1->cat= i->cat;i1->trans= i->trans;
+i1->mathness= i->mathness;
+}
+lo_ptr= lo_ptr-k+1;
+}
+/*163:*/
+#line 2891 "cweave.w"
+
+if(pp+d>=scrap_base)pp= pp+d;
+else pp= scrap_base;
+
+/*:163*/
+#line 2886 "cweave.w"
+;
+/*168:*/
+#line 2965 "cweave.w"
+
+{scrap_pointer k;
+#line 806 "cweave.ch"
+if(tracing==2){
+printf("\n%3d:",n);
+#line 2969 "cweave.w"
+for(k= scrap_base;k<=lo_ptr;k++){
+if(k==pp)putxchar('*');else putxchar(' ');
+if(k->mathness%4==yes_math)putchar('+');
+else if(k->mathness%4==no_math)putchar('-');
+print_cat(k->cat);
+if(k->mathness/4==yes_math)putchar('+');
+else if(k->mathness/4==no_math)putchar('-');
+}
+if(hi_ptr<=scrap_ptr)printf("...");
+}
+}
+
+/*:168*/
+#line 2887 "cweave.w"
+;
+pp--;
+}
+
+/*:162*//*164:*/
+#line 2898 "cweave.w"
+
+void
+squash(j,k,c,d,n)
+scrap_pointer j;
+eight_bits c;
+short k,d,n;
+{
+scrap_pointer i;
+if(k==1){
+j->cat= c;/*163:*/
+#line 2891 "cweave.w"
+
+if(pp+d>=scrap_base)pp= pp+d;
+else pp= scrap_base;
+
+/*:163*/
+#line 2907 "cweave.w"
+;
+/*168:*/
+#line 2965 "cweave.w"
+
+{scrap_pointer k;
+#line 806 "cweave.ch"
+if(tracing==2){
+printf("\n%3d:",n);
+#line 2969 "cweave.w"
+for(k= scrap_base;k<=lo_ptr;k++){
+if(k==pp)putxchar('*');else putxchar(' ');
+if(k->mathness%4==yes_math)putchar('+');
+else if(k->mathness%4==no_math)putchar('-');
+print_cat(k->cat);
+if(k->mathness/4==yes_math)putchar('+');
+else if(k->mathness/4==no_math)putchar('-');
+}
+if(hi_ptr<=scrap_ptr)printf("...");
+}
+}
+
+/*:168*/
+#line 2908 "cweave.w"
+;
+pp--;
+return;
+}
+for(i= j;i<j+k;i++)big_app1(i);
+reduce(j,k,c,d,n);
+}
+
+/*:164*//*169:*/
+#line 2994 "cweave.w"
+
+text_pointer
+translate()
+{
+scrap_pointer i,
+j;
+pp= scrap_base;lo_ptr= pp-1;hi_ptr= pp;
+/*172:*/
+#line 3033 "cweave.w"
+
+if(tracing==2){
+printf("\nTracing after l. %d:\n",cur_line);mark_harmless;
+
+if(loc>buffer+50){
+printf("...");
+term_write(loc-51,51);
+}
+else term_write(buffer,loc-buffer);
+}
+
+/*:172*/
+#line 3001 "cweave.w"
+;
+/*165:*/
+#line 2929 "cweave.w"
+
+while(1){
+/*166:*/
+#line 2948 "cweave.w"
+
+if(lo_ptr<pp+3){
+while(hi_ptr<=scrap_ptr&&lo_ptr!=pp+3){
+(++lo_ptr)->cat= hi_ptr->cat;lo_ptr->mathness= (hi_ptr)->mathness;
+lo_ptr->trans= (hi_ptr++)->trans;
+}
+for(i= lo_ptr+1;i<=pp+3;i++)i->cat= 0;
+}
+
+/*:166*/
+#line 2931 "cweave.w"
+;
+if(tok_ptr+safe_tok_incr>tok_mem_end){
+if(tok_ptr>max_tok_ptr)max_tok_ptr= tok_ptr;
+overflow("token");
+}
+if(text_ptr+safe_text_incr>tok_start_end){
+if(text_ptr>max_text_ptr)max_text_ptr= text_ptr;
+overflow("text");
+}
+if(pp>lo_ptr)break;
+init_mathness= cur_mathness= maybe_math;
+/*110:*/
+#line 2243 "cweave.w"
+{
+if(cat1==end_arg&&lhs_not_simple)
+if(pp->cat==begin_arg)squash(pp,2,exp,-2,110);
+else squash(pp,2,end_arg,-1,111);
+else if(cat1==insert)squash(pp,2,pp->cat,-2,0);
+else if(cat2==insert)squash(pp+1,2,(pp+1)->cat,-1,0);
+else if(cat3==insert)squash(pp+2,2,(pp+2)->cat,0,0);
+else
+switch(pp->cat){
+case exp:/*117:*/
+#line 2433 "cweave.w"
+
+if(cat1==lbrace||cat1==int_like||cat1==decl){
+make_underlined(pp);big_app1(pp);big_app(indent);app(indent);
+reduce(pp,1,fn_decl,0,1);
+}
+else if(cat1==unop)squash(pp,2,exp,-2,2);
+else if((cat1==binop||cat1==unorbinop)&&cat2==exp)
+squash(pp,3,exp,-2,3);
+else if(cat1==comma&&cat2==exp){
+big_app2(pp);
+app(opt);app('9');big_app1(pp+2);reduce(pp,3,exp,-2,4);
+}
+else if(cat1==exp||cat1==cast)squash(pp,2,exp,-2,5);
+else if(cat1==semi)squash(pp,2,stmt,-1,6);
+else if(cat1==colon){
+#line 449 "cweave.ch"
+make_underlined(pp);
+if(alternative)
+squash(pp,2,label,0,7);
+else
+squash(pp,2,tag,0,7);
+#line 2449 "cweave.w"
+}
+else if(cat1==base){
+if(cat2==int_like&&cat3==comma){
+big_app1(pp+1);big_app(' ');big_app2(pp+2);
+app(opt);app('9');reduce(pp+1,3,base,0,8);
+}
+else if(cat2==int_like&&cat3==lbrace){
+big_app1(pp);big_app(' ');big_app1(pp+1);big_app(' ');big_app1(pp+2);
+reduce(pp,3,exp,-1,9);
+}
+}
+else if(cat1==rbrace)squash(pp,1,stmt,-1,10);
+
+/*:117*/
+#line 2252 "cweave.w"
+;break;
+case lpar:/*118:*/
+#line 2462 "cweave.w"
+
+if((cat1==exp||cat1==unorbinop)&&cat2==rpar)squash(pp,3,exp,-2,11);
+else if(cat1==rpar){
+big_app1(pp);app('\\');app(',');big_app1(pp+1);
+
+reduce(pp,2,exp,-2,12);
+}
+else if(cat1==decl_head||cat1==int_like||cat1==exp){
+if(cat2==rpar)squash(pp,3,cast,-2,13);
+else if(cat2==comma){
+big_app3(pp);app(opt);app('9');reduce(pp,3,lpar,0,14);
+}
+}
+else if(cat1==stmt||cat1==decl){
+big_app2(pp);big_app(' ');reduce(pp,2,lpar,0,15);
+}
+
+/*:118*/
+#line 2253 "cweave.w"
+;break;
+case question:/*119:*/
+#line 2479 "cweave.w"
+
+if(cat1==exp&&cat2==colon)squash(pp,3,binop,-2,16);
+
+/*:119*/
+#line 2254 "cweave.w"
+;break;
+case unop:/*120:*/
+#line 2482 "cweave.w"
+
+if(cat1==exp||cat1==int_like)squash(pp,2,cat1,-2,17);
+
+/*:120*/
+#line 2255 "cweave.w"
+;break;
+case unorbinop:/*121:*/
+#line 2485 "cweave.w"
+
+if(cat1==exp||cat1==int_like){
+big_app('{');big_app1(pp);big_app('}');big_app1(pp+1);
+reduce(pp,2,cat1,-2,18);
+}
+else if(cat1==binop){
+big_app(math_rel);big_app1(pp);big_app('{');big_app1(pp+1);big_app('}');
+big_app('}');reduce(pp,2,binop,-1,19);
+}
+
+/*:121*/
+#line 2256 "cweave.w"
+;break;
+case binop:/*122:*/
+#line 2495 "cweave.w"
+
+if(cat1==binop){
+big_app(math_rel);big_app('{');big_app1(pp);big_app('}');
+big_app('{');big_app1(pp+1);big_app('}');
+big_app('}');reduce(pp,2,binop,-1,20);
+}
+
+/*:122*/
+#line 2257 "cweave.w"
+;break;
+case cast:/*123:*/
+#line 2502 "cweave.w"
+
+if(cat1==exp){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,exp,-2,21);
+}
+else if(cat1==semi)squash(pp,1,exp,-2,22);
+
+/*:123*/
+#line 2258 "cweave.w"
+;break;
+case sizeof_like:/*124:*/
+#line 2508 "cweave.w"
+
+if(cat1==cast)squash(pp,2,exp,-2,23);
+else if(cat1==exp){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,exp,-2,24);
+}
+
+/*:124*/
+#line 2259 "cweave.w"
+;break;
+case int_like:/*125:*/
+#line 2514 "cweave.w"
+
+if(cat1==int_like||cat1==struct_like){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,cat1,-2,25);
+}
+else if(cat1==exp&&(cat2==raw_int||cat2==struct_like))
+squash(pp,2,int_like,-2,26);
+else if(cat1==exp||cat1==unorbinop||cat1==semi){
+big_app1(pp);
+if(cat1!=semi)big_app(' ');
+reduce(pp,1,decl_head,-1,27);
+}
+else if(cat1==colon){
+big_app1(pp);big_app(' ');reduce(pp,1,decl_head,0,28);
+}
+else if(cat1==prelangle)squash(pp+1,1,langle,1,29);
+else if(cat1==colcol&&(cat2==exp||cat2==int_like))squash(pp,3,cat2,-2,30);
+else if(cat1==cast){
+if(cat2==lbrace){
+big_app2(pp);big_app(indent);big_app(indent);
+reduce(pp,2,fn_decl,1,31);
+}
+#line 462 "cweave.ch"
+else squash(pp,2,int_like,-2,32);
+}
+else if(cat1==binop&&cat2==exp)squash(pp,3,int_like,-2,117);
+#line 2537 "cweave.w"
+
+/*:125*/
+#line 2260 "cweave.w"
+;break;
+case decl_head:/*126:*/
+#line 2538 "cweave.w"
+
+if(cat1==comma){
+big_app2(pp);big_app(' ');reduce(pp,2,decl_head,-1,33);
+}
+else if(cat1==unorbinop){
+big_app1(pp);big_app('{');big_app1(pp+1);big_app('}');
+reduce(pp,2,decl_head,-1,34);
+}
+else if(cat1==exp&&cat2!=lpar&&cat2!=exp){
+make_underlined(pp+1);squash(pp,2,decl_head,-1,35);
+}
+else if((cat1==binop||cat1==colon)&&cat2==exp&&(cat3==comma||
+cat3==semi||cat3==rpar))
+squash(pp,3,decl_head,-1,36);
+else if(cat1==cast)squash(pp,2,decl_head,-1,37);
+else if(cat1==lbrace||(cat1==int_like&&cat2!=colcol)||cat1==decl){
+big_app1(pp);big_app(indent);app(indent);reduce(pp,1,fn_decl,0,38);
+}
+else if(cat1==semi)squash(pp,2,decl,-1,39);
+
+/*:126*/
+#line 2261 "cweave.w"
+;break;
+case decl:/*127:*/
+#line 2558 "cweave.w"
+
+if(cat1==decl){
+big_app1(pp);big_app(force);big_app1(pp+1);
+reduce(pp,2,decl,-1,40);
+}
+else if(cat1==stmt||cat1==function){
+big_app1(pp);big_app(big_force);
+big_app1(pp+1);reduce(pp,2,cat1,-1,41);
+}
+
+/*:127*/
+#line 2262 "cweave.w"
+;break;
+case typedef_like:/*128:*/
+#line 2568 "cweave.w"
+
+#line 479 "cweave.ch"
+if(cat1==decl_head){
+if((cat2==exp&&cat3!=lpar&&cat3!=exp)||cat2==int_like){
+make_underlined(pp+2);make_reserved(pp+2,raw_int);
+big_app2(pp+1);reduce(pp+1,2,decl_head,0,42);
+}
+else if(cat2==semi){
+big_app1(pp);big_app(' ');big_app2(pp+1);reduce(pp,3,decl,-1,43);
+}
+}
+else if(cat1==exp&&!preprocessing&&cat2!=lpar){
+make_reserved(pp+1,raw_int);
+squash(pp+1,1,raw_int,-2,116);
+}
+#line 2577 "cweave.w"
+
+/*:128*/
+#line 2263 "cweave.w"
+;break;
+case struct_like:/*129:*/
+#line 2578 "cweave.w"
+
+#line 515 "cweave.ch"
+if(cat1==lbrace){
+if(alternative){
+big_app1(pp);big_app(indent);big_app(force);big_app(backup);
+big_app1(pp+1);reduce(pp,2,struct_head,0,44);
+}else{
+big_app1(pp);big_app(' ');big_app1(pp+1);
+reduce(pp,2,struct_head,0,44);
+}
+}
+else if(cat1==exp||cat1==int_like){
+if(cat2==lbrace||cat2==semi){
+make_underlined(pp+1);make_reserved(pp+1,raw_int);
+big_app1(pp);big_app(' ');big_app1(pp+1);
+if(cat2==semi)reduce(pp,2,decl_head,-1,45);
+else{
+if(alternative){
+big_app(indent);big_app(force);big_app(backup);big_app1(pp+2);
+reduce(pp,3,struct_head,0,46);
+}else{
+big_app(' ');big_app1(pp+2);reduce(pp,3,struct_head,0,46);
+}
+}
+}
+else if(cat2==colon)squash(pp+2,1,base,-1,47);
+else if(!(cat2==base||cat2==raw_int||
+cat2==int_like||cat2==const_like)){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,int_like,-2,48);
+}
+}
+#line 2596 "cweave.w"
+
+/*:129*/
+#line 2264 "cweave.w"
+;break;
+case struct_head:/*130:*/
+#line 2597 "cweave.w"
+
+if((cat1==decl||cat1==stmt||cat1==function)&&cat2==rbrace){
+#line 553 "cweave.ch"
+if(alternative){
+big_app1(pp);big_app1(pp+1);
+big_app(force);big_app(backup);big_app1(pp+2);big_app(' ');
+big_app(outdent);reduce(pp,3,int_like,-2,49);
+}else{
+big_app1(pp);big_app(indent);big_app(force);big_app1(pp+1);
+big_app(outdent);big_app(force);big_app1(pp+2);
+reduce(pp,3,int_like,-2,49);
+}
+#line 2602 "cweave.w"
+}
+else if(cat1==rbrace){
+big_app1(pp);app_str("\\,");big_app1(pp+1);
+
+reduce(pp,2,int_like,-2,50);
+}
+
+/*:130*/
+#line 2265 "cweave.w"
+;break;
+case fn_decl:/*131:*/
+#line 2609 "cweave.w"
+
+if(cat1==decl){
+big_app1(pp);big_app(force);big_app1(pp+1);reduce(pp,2,fn_decl,0,51);
+}
+else if(cat1==stmt){
+big_app1(pp);app(outdent);app(outdent);big_app(force);
+big_app1(pp+1);reduce(pp,2,function,-1,52);
+}
+
+/*:131*/
+#line 2266 "cweave.w"
+;break;
+case function:/*132:*/
+#line 2618 "cweave.w"
+
+if(cat1==function||cat1==decl||cat1==stmt){
+big_app1(pp);big_app(big_force);big_app1(pp+1);reduce(pp,2,cat1,-1,53);
+}
+
+/*:132*/
+#line 2267 "cweave.w"
+;break;
+case lbrace:/*133:*/
+#line 2623 "cweave.w"
+
+if(cat1==rbrace){
+big_app1(pp);app('\\');app(',');big_app1(pp+1);
+
+reduce(pp,2,stmt,-1,54);
+}
+else if((cat1==stmt||cat1==decl||cat1==function)&&cat2==rbrace){
+#line 571 "cweave.ch"
+if(alternative){
+big_app(indent);big_app(force);big_app(backup);big_app1(pp);
+app(noop);big_app(cancel);big_app1(pp+1);big_app(force);big_app(backup);
+big_app1(pp+2);big_app(outdent);big_app(force);reduce(pp,3,stmt,-2,55);
+}else{
+big_app(force);big_app1(pp);big_app(indent);big_app(force);
+big_app1(pp+1);big_app(force);big_app(backup);big_app1(pp+2);
+big_app(outdent);big_app(force);reduce(pp,3,stmt,-1,55);
+}
+#line 2633 "cweave.w"
+}
+else if(cat1==exp){
+if(cat2==rbrace)squash(pp,3,exp,-2,56);
+else if(cat2==comma&&cat3==rbrace)squash(pp,4,exp,-2,56);
+}
+
+/*:133*/
+#line 2268 "cweave.w"
+;break;
+case do_like:/*140:*/
+#line 2689 "cweave.w"
+
+#line 669 "cweave.ch"
+if(alternative){
+if(cat1==lbrace)squash(pp,1,do_head,0,114);
+else if(cat1==stmt&&cat2==else_like&&cat3==semi){
+big_app(force);big_app1(pp);big_app(indent);big_app(force);
+big_app1(pp+1);big_app(cancel);app(noop);
+big_app(break_space);big_app2(pp+2);big_app(outdent);big_app(force);
+reduce(pp,4,stmt,-1,69);
+}
+}else{
+if(cat1==stmt&&cat2==else_like&&cat3==semi){
+big_app1(pp);big_app(break_space);app(noop);big_app(cancel);
+big_app1(pp+1);big_app(cancel);app(noop);big_app(break_space);
+big_app2(pp+2);reduce(pp,4,stmt,-1,69);
+}
+}
+#line 2695 "cweave.w"
+
+/*:140*/
+#line 2269 "cweave.w"
+;break;
+case if_like:/*134:*/
+#line 2639 "cweave.w"
+
+if(cat1==exp){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,if_clause,0,57);
+}
+
+/*:134*/
+#line 2270 "cweave.w"
+;break;
+case for_like:/*135:*/
+#line 2644 "cweave.w"
+
+if(cat1==exp){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,else_like,-2,58);
+}
+
+/*:135*/
+#line 2271 "cweave.w"
+;break;
+case else_like:/*136:*/
+#line 2649 "cweave.w"
+
+if(cat1==lbrace)squash(pp,1,else_head,0,59);
+else if(cat1==stmt){
+#line 589 "cweave.ch"
+if(alternative){
+big_app(force);big_app1(pp);big_app(indent);big_app(force);
+big_app1(pp+1);big_app(outdent);big_app(force);
+reduce(pp,2,stmt,-1,60);
+}else{
+big_app(force);big_app1(pp);big_app(indent);big_app(break_space);
+big_app1(pp+1);big_app(outdent);big_app(force);
+reduce(pp,2,stmt,-1,60);
+}
+#line 2655 "cweave.w"
+}
+
+/*:136*/
+#line 2272 "cweave.w"
+;break;
+case if_clause:/*138:*/
+#line 2664 "cweave.w"
+
+if(cat1==lbrace)squash(pp,1,if_head,0,62);
+else if(cat1==stmt){
+if(cat2==else_like){
+#line 627 "cweave.ch"
+if(alternative){
+big_app(force);big_app1(pp);big_app(indent);big_app(force);
+big_app1(pp+1);big_app(outdent);big_app(force);big_app1(pp+2);
+}else{
+big_app(force);big_app1(pp);big_app(indent);big_app(break_space);
+big_app1(pp+1);big_app(outdent);big_app(force);big_app1(pp+2);
+}
+if(cat3==if_like){
+big_app(' ');big_app1(pp+3);reduce(pp,4,if_like,0,63);
+}else reduce(pp,3,else_like,0,64);
+#line 2673 "cweave.w"
+}
+else squash(pp,1,else_like,0,65);
+}
+
+/*:138*/
+#line 2273 "cweave.w"
+;break;
+case if_head:/*139:*/
+#line 2677 "cweave.w"
+
+if(cat1==stmt||cat1==exp){
+if(cat2==else_like){
+#line 648 "cweave.ch"
+if(alternative){
+big_app(force);big_app1(pp);big_app(break_space);
+big_app1(pp+1);big_app(force);big_app1(pp+2);
+}else{
+big_app(force);big_app1(pp);big_app(break_space);app(noop);
+big_app(cancel);big_app1(pp+1);big_app(force);big_app1(pp+2);
+}
+if(cat3==if_like){
+big_app(' ');big_app1(pp+3);reduce(pp,4,if_like,0,66);
+}else reduce(pp,3,else_like,0,67);
+#line 2685 "cweave.w"
+}
+else squash(pp,1,else_head,0,68);
+}
+
+/*:139*/
+#line 2274 "cweave.w"
+;break;
+case else_head:/*137:*/
+#line 2657 "cweave.w"
+
+if(cat1==stmt||cat1==exp){
+#line 607 "cweave.ch"
+if(alternative){
+big_app(force);big_app1(pp);big_app(break_space);
+big_app1(pp+1);big_app(force);
+reduce(pp,2,stmt,-1,61);
+}else{
+big_app(force);big_app1(pp);big_app(break_space);app(noop);
+big_app(cancel);big_app1(pp+1);big_app(force);
+reduce(pp,2,stmt,-1,61);
+}
+#line 2662 "cweave.w"
+}
+
+/*:137*/
+#line 2275 "cweave.w"
+;break;
+case case_like:/*141:*/
+#line 2696 "cweave.w"
+
+#line 692 "cweave.ch"
+if(cat1==semi)squash(pp,2,stmt,-3,70);
+else if(cat1==colon)squash(pp,2,tag,-2,71);
+#line 2699 "cweave.w"
+else if(cat1==exp){
+if(cat2==semi){
+big_app1(pp);big_app(' ');big_app1(pp+1);big_app1(pp+2);
+reduce(pp,3,stmt,-1,72);
+}
+else if(cat2==colon){
+big_app1(pp);big_app(' ');big_app1(pp+1);big_app1(pp+2);
+#line 701 "cweave.ch"
+reduce(pp,3,tag,-2,73);
+#line 2707 "cweave.w"
+}
+}
+
+/*:141*/
+#line 2276 "cweave.w"
+;break;
+case stmt:/*143:*/
+#line 2723 "cweave.w"
+
+if(cat1==stmt||cat1==decl||cat1==function){
+big_app1(pp);
+if(cat1==function)big_app(big_force);
+else if(cat1==decl)big_app(big_force);
+else if(force_lines)big_app(force);
+else big_app(break_space);
+big_app1(pp+1);reduce(pp,2,cat1,-1,76);
+}
+
+/*:143*/
+#line 2277 "cweave.w"
+;break;
+case tag:/*142:*/
+#line 2710 "cweave.w"
+
+#line 715 "cweave.ch"
+if(alternative){
+if(cat1==tag){
+big_app1(pp);big_app(force);big_app1(pp+1);reduce(pp,2,tag,-1,74);
+}
+else if((cat1==stmt||cat1==decl||cat1==function)&&
+(cat2==rbrace||cat2==tag)){
+big_app(force);big_app1(pp);big_app(indent);big_app(force);
+big_app1(pp+1);big_app(outdent);reduce(pp,2,cat1,-1,75);
+}
+}else{
+if(cat1==tag){
+big_app1(pp);big_app(break_space);big_app1(pp+1);reduce(pp,2,tag,-1,74);
+}
+else if(cat1==stmt||cat1==decl||cat1==function){
+big_app(force);big_app(backup);big_app1(pp);big_app(break_space);
+big_app1(pp+1);reduce(pp,2,cat1,-1,75);
+}
+}
+#line 2718 "cweave.w"
+
+/*:142*/
+#line 2278 "cweave.w"
+;break;
+case semi:/*144:*/
+#line 2733 "cweave.w"
+
+big_app(' ');big_app1(pp);reduce(pp,1,stmt,-1,77);
+
+/*:144*/
+#line 2279 "cweave.w"
+;break;
+case lproc:/*145:*/
+#line 2736 "cweave.w"
+
+if(cat1==define_like)make_underlined(pp+2);
+if(cat1==else_like||cat1==if_like||cat1==define_like)
+squash(pp,2,lproc,0,78);
+else if(cat1==rproc){
+app(inserted);big_app2(pp);reduce(pp,2,insert,-1,79);
+#line 750 "cweave.ch"
+}else if((cat1==exp||cat1==function||cat1==int_like)&&cat2==rproc){
+app(inserted);big_app1(pp);big_app(' ');big_app2(pp+1);
+reduce(pp,3,insert,-1,80);
+}else if((cat1==exp||cat1==int_like||cat1==const_like)&&
+cat2==pp_space){
+if(cat3==int_like||cat3==const_like||cat3==raw_int)
+make_reserved(pp+1,(pp+3)->cat);
+big_app1(pp);big_app(' ');big_app1(pp+1);app_str(" \\5");
+
+reduce(pp,3,lproc,-1,119);
+}else if(cat1==exp&&cat2==exp&&cat3==pp_space){
+big_app1(pp);big_app(' ');big_app2(pp+1);app_str(" \\5");
+reduce(pp,4,lproc,-1,120);
+}
+#line 2753 "cweave.w"
+
+/*:145*/
+#line 2280 "cweave.w"
+;break;
+case section_scrap:/*146:*/
+#line 2754 "cweave.w"
+
+if(cat1==semi){
+big_app2(pp);big_app(force);reduce(pp,2,stmt,-2,81);
+}
+else squash(pp,1,exp,-2,82);
+
+/*:146*/
+#line 2281 "cweave.w"
+;break;
+case insert:/*147:*/
+#line 2760 "cweave.w"
+
+if(cat1)
+squash(pp,2,cat1,0,83);
+
+/*:147*/
+#line 2282 "cweave.w"
+;break;
+case prelangle:/*148:*/
+#line 2764 "cweave.w"
+
+init_mathness= cur_mathness= yes_math;
+app('<');reduce(pp,1,binop,-2,84);
+
+/*:148*/
+#line 2283 "cweave.w"
+;break;
+case prerangle:/*149:*/
+#line 2768 "cweave.w"
+
+init_mathness= cur_mathness= yes_math;
+app('>');reduce(pp,1,binop,-2,85);
+
+/*:149*/
+#line 2284 "cweave.w"
+;break;
+case langle:/*150:*/
+#line 2772 "cweave.w"
+
+if(cat1==exp&&cat2==prerangle)squash(pp,3,cast,-1,86);
+else if(cat1==prerangle){
+big_app1(pp);app('\\');app(',');big_app1(pp+1);
+
+reduce(pp,2,cast,-1,87);
+}
+else if(cat1==decl_head||cat1==int_like){
+if(cat2==prerangle)squash(pp,3,cast,-1,88);
+else if(cat2==comma){
+big_app3(pp);app(opt);app('9');reduce(pp,3,langle,0,89);
+}
+}
+
+/*:150*/
+#line 2285 "cweave.w"
+;break;
+case public_like:/*151:*/
+#line 2786 "cweave.w"
+
+#line 771 "cweave.ch"
+if(cat1==colon)squash(pp,2,tag,-2,90);
+#line 2788 "cweave.w"
+else squash(pp,1,int_like,-2,91);
+
+/*:151*/
+#line 2286 "cweave.w"
+;break;
+case colcol:/*152:*/
+#line 2790 "cweave.w"
+
+if(cat1==exp||cat1==int_like)squash(pp,2,cat1,-2,92);
+
+/*:152*/
+#line 2287 "cweave.w"
+;break;
+case new_like:/*153:*/
+#line 2793 "cweave.w"
+
+if(cat1==exp||(cat1==raw_int&&cat2!=prelangle&&cat2!=langle)){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,new_like,0,93);
+}
+else if(cat1==raw_unorbin||cat1==colcol)
+squash(pp,2,new_like,0,94);
+else if(cat1==cast)squash(pp,2,exp,-2,95);
+else if(cat1!=lpar&&cat1!=raw_int&&cat1!=struct_like)
+squash(pp,1,exp,-2,96);
+
+/*:153*/
+#line 2288 "cweave.w"
+;break;
+case operator_like:/*154:*/
+#line 2803 "cweave.w"
+
+#line 786 "cweave.ch"
+if(cat1==binop||cat1==unop||cat1==unorbinop||cat1==raw_unorbin){
+if(cat2==binop)break;
+big_app1(pp);big_app('{');big_app1(pp+1);big_app('}');
+reduce(pp,2,exp,-2,97);
+}
+else if(cat1==new_like||cat1==sizeof_like){
+big_app1(pp);big_app(' ');big_app1(pp+1);reduce(pp,2,exp,-2,98);
+}
+else if(cat1==raw_int||cat1==int_like||cat1==const_like){
+big_app1(pp);big_app(' ');big_app1(pp+1);
+reduce(pp,2,operator_like,-2,118);
+}
+#line 2812 "cweave.w"
+else squash(pp,1,new_like,0,99);
+
+/*:154*/
+#line 2289 "cweave.w"
+;break;
+case catch_like:/*155:*/
+#line 2814 "cweave.w"
+
+if(cat1==cast||cat1==exp){
+big_app2(pp);big_app(indent);big_app(indent);
+reduce(pp,2,fn_decl,0,100);
+}
+
+/*:155*/
+#line 2290 "cweave.w"
+;break;
+case base:/*156:*/
+#line 2820 "cweave.w"
+
+if(cat1==public_like&&cat2==exp){
+if(cat3==comma){
+big_app2(pp);big_app(' ');big_app2(pp+2);
+reduce(pp,4,base,0,101);
+}else{
+big_app1(pp+1);big_app(' ');big_app1(pp+2);
+reduce(pp+1,2,int_like,-1,102);
+}
+}
+
+/*:156*/
+#line 2291 "cweave.w"
+;break;
+case raw_rpar:/*157:*/
+#line 2831 "cweave.w"
+
+if(cat1==const_like&&
+(cat2==semi||cat2==lbrace||cat2==comma||cat2==binop
+||cat2==const_like)){
+big_app1(pp);big_app(' ');
+big_app1(pp+1);reduce(pp,2,raw_rpar,0,103);
+}else squash(pp,1,rpar,-3,104);
+
+/*:157*/
+#line 2292 "cweave.w"
+;break;
+case raw_unorbin:/*158:*/
+#line 2839 "cweave.w"
+
+if(cat1==const_like){
+big_app2(pp);app_str("\\ ");reduce(pp,2,raw_unorbin,0,105);
+
+}else squash(pp,1,unorbinop,-2,106);
+
+/*:158*/
+#line 2293 "cweave.w"
+;break;
+case const_like:/*159:*/
+#line 2845 "cweave.w"
+
+squash(pp,1,int_like,-2,107);
+
+/*:159*/
+#line 2294 "cweave.w"
+;break;
+#line 392 "cweave.ch"
+case raw_int:/*160:*/
+#line 2848 "cweave.w"
+
+if(cat1==lpar)squash(pp,1,exp,-2,108);
+else squash(pp,1,int_like,-3,109);
+
+/*:160*/
+#line 392 "cweave.ch"
+;break;
+case label:/*249:*/
+#line 1075 "cweave.ch"
+
+if(cat1==label){
+big_app1(pp);big_app(force);big_app1(pp+1);reduce(pp,2,label,-1,112);
+}
+else if(cat1==stmt||cat1==decl||cat1==function){
+big_app(cancel);app(noop);
+big_app(outdent);big_app(outdent);big_app(force);
+big_app1(pp);big_app(indent);big_app(indent);big_app(force);
+big_app1(pp+1);reduce(pp,2,cat1,-1,113);
+}
+
+/*:249*/
+#line 393 "cweave.ch"
+;break;
+case do_head:/*250:*/
+#line 1086 "cweave.ch"
+
+if(cat1==stmt&&cat2==else_like&&cat3==semi){
+big_app1(pp);big_app(break_space);big_app1(pp+1);big_app(cancel);
+app(noop);big_app(break_space);big_app2(pp+2);reduce(pp,4,stmt,-1,115);
+}
+
+/*:250*/
+#line 394 "cweave.ch"
+;break;
+#line 2296 "cweave.w"
+}
+pp++;
+}
+
+/*:110*/
+#line 2942 "cweave.w"
+;
+}
+
+/*:165*/
+#line 3002 "cweave.w"
+;
+/*170:*/
+#line 3011 "cweave.w"
+{
+/*171:*/
+#line 3023 "cweave.w"
+
+if(lo_ptr>scrap_base&&tracing==1){
+printf("\nIrreducible scrap sequence in section %d:",section_count);
+
+mark_harmless;
+for(j= scrap_base;j<=lo_ptr;j++){
+printf(" ");print_cat(j->cat);
+}
+}
+
+/*:171*/
+#line 3012 "cweave.w"
+;
+for(j= scrap_base;j<=lo_ptr;j++){
+if(j!=scrap_base)app(' ');
+if(j->mathness%4==yes_math)app('$');
+app1(j);
+if(j->mathness/4==yes_math)app('$');
+if(tok_ptr+6>tok_mem_end)overflow("token");
+}
+freeze_text;return(text_ptr-1);
+}
+
+/*:170*/
+#line 3003 "cweave.w"
+;
+}
+
+/*:169*//*173:*/
+#line 3059 "cweave.w"
+
+void
+C_parse(spec_ctrl)
+eight_bits spec_ctrl;
+{
+int count;
+while(next_control<format_code||next_control==spec_ctrl){
+/*175:*/
+#line 821 "cweave.ch"
+
+/*176:*/
+#line 3156 "cweave.w"
+
+if(scrap_ptr+safe_scrap_incr>scrap_info_end||
+tok_ptr+safe_tok_incr>tok_mem_end||
+text_ptr+safe_text_incr>tok_start_end){
+if(scrap_ptr>max_scr_ptr)max_scr_ptr= scrap_ptr;
+if(tok_ptr>max_tok_ptr)max_tok_ptr= tok_ptr;
+if(text_ptr>max_text_ptr)max_text_ptr= text_ptr;
+overflow("scrap/token/text");
+}
+
+/*:176*/
+#line 822 "cweave.ch"
+;
+#line 3084 "cweave.w"
+switch(next_control){
+case section_name:
+app(section_flag+(int)(cur_section-name_dir));
+app_scrap(section_scrap,maybe_math);
+app_scrap(exp,yes_math);break;
+case string:case constant:case verbatim:/*178:*/
+#line 3211 "cweave.w"
+
+count= -1;
+if(next_control==constant)app_str("\\T{");
+
+else if(next_control==string){
+count= 20;app_str("\\.{");
+}
+
+else app_str("\\vb{");
+
+while(id_first<id_loc){
+if(count==0){
+app_str("}\\)\\.{");count= 20;
+
+}
+
+if((eight_bits)(*id_first)>0177){
+app_tok(quoted_char);
+app_tok((eight_bits)(*id_first++));
+}
+else{
+switch(*id_first){
+case' ':case'\\':case'#':case'%':case'$':case'^':
+case'{':case'}':case'~':case'&':case'_':app('\\');break;
+
+
+
+#line 913 "cweave.ch"
+
+
+
+#line 3241 "cweave.w"
+
+
+
+
+
+case'@':if(*(id_first+1)=='@')id_first++;
+else err_print("! Double @ should be used in strings");
+
+}
+app_tok(*id_first++);
+}
+count--;
+}
+app('}');
+app_scrap(exp,maybe_math);
+
+/*:178*/
+#line 3089 "cweave.w"
+;
+break;
+case identifier:app_cur_id(1);break;
+case TeX_string:/*179:*/
+#line 3272 "cweave.w"
+
+app_str("\\hbox{");
+
+while(id_first<id_loc)
+if((eight_bits)(*id_first)>0177){
+app_tok(quoted_char);
+app_tok((eight_bits)(*id_first++));
+}
+else{
+if(*id_first=='@')id_first++;
+app_tok(*id_first++);
+}
+app('}');
+
+/*:179*/
+#line 3092 "cweave.w"
+;break;
+case'/':case'.':
+app(next_control);app_scrap(binop,yes_math);break;
+case'<':app_str("\\langle");app_scrap(prelangle,yes_math);break;
+
+case'>':app_str("\\rangle");app_scrap(prerangle,yes_math);break;
+
+case'=':app_str("\\K");app_scrap(binop,yes_math);break;
+
+case'|':app_str("\\OR");app_scrap(binop,yes_math);break;
+
+case'^':app_str("\\XOR");app_scrap(binop,yes_math);break;
+
+case'%':app_str("\\MOD");app_scrap(binop,yes_math);break;
+
+case'!':app_str("\\R");app_scrap(unop,yes_math);break;
+
+case'~':app_str("\\CM");app_scrap(unop,yes_math);break;
+
+case'+':case'-':app(next_control);app_scrap(unorbinop,yes_math);break;
+case'*':app(next_control);app_scrap(raw_unorbin,yes_math);break;
+case'&':app_str("\\AND");app_scrap(raw_unorbin,yes_math);break;
+
+case'?':app_str("\\?");app_scrap(question,yes_math);break;
+
+case'#':app_str("\\#");app_scrap(unorbinop,yes_math);break;
+
+case ignore:case xref_roman:case xref_wildcard:
+case xref_typewriter:case noop:break;
+#line 835 "cweave.ch"
+case'(':if(func_index)
+if(*(tok_ptr-1)>=id_flag&&*(tok_ptr-1)<res_flag)
+
+(name_dir+*(tok_ptr-1)%10240)->func_flag= 1;
+case'[':app(next_control);app_scrap(lpar,maybe_math);break;
+case')':case']':app(next_control);app_scrap(raw_rpar,maybe_math);break;
+case'{':if(alternative)
+app_str("\\LBR");
+else
+app_str("\\{");
+app_scrap(lbrace,yes_math);break;
+
+case'}':if(alternative)
+app_str("\\RBR");
+else
+app_str("\\}");
+app_scrap(rbrace,yes_math);break;
+
+#line 3127 "cweave.w"
+case',':app(',');app_scrap(comma,yes_math);break;
+case';':app(';');app_scrap(semi,maybe_math);break;
+case':':app(':');app_scrap(colon,maybe_math);break;
+/*177:*/
+#line 3170 "cweave.w"
+
+case not_eq:app_str("\\I");app_scrap(binop,yes_math);break;
+
+case lt_eq:app_str("\\Z");app_scrap(binop,yes_math);break;
+
+case gt_eq:app_str("\\G");app_scrap(binop,yes_math);break;
+
+case eq_eq:app_str("\\E");app_scrap(binop,yes_math);break;
+
+case and_and:app_str("\\W");app_scrap(binop,yes_math);break;
+
+case or_or:app_str("\\V");app_scrap(binop,yes_math);break;
+
+case plus_plus:app_str("\\PP");app_scrap(unop,yes_math);break;
+
+case minus_minus:app_str("\\MM");app_scrap(unop,yes_math);break;
+
+case minus_gt:app_str("\\MG");app_scrap(binop,yes_math);break;
+
+case gt_gt:app_str("\\GG");app_scrap(binop,yes_math);break;
+
+case lt_lt:app_str("\\LL");app_scrap(binop,yes_math);break;
+
+case dot_dot_dot:app_str("\\,\\ldots\\,");app_scrap(exp,yes_math);break;
+
+
+case colon_colon:app_str("\\DC");app_scrap(colcol,maybe_math);break;
+
+case period_ast:app_str("\\PA");app_scrap(binop,yes_math);break;
+
+#line 900 "cweave.ch"
+case minus_gt_ast:app_str("\\MGA");app_scrap(binop,yes_math);break;
+
+case numb_numb:app_str("\\NN");app_scrap(binop,yes_math);break;
+
+#line 3202 "cweave.w"
+
+/*:177*/
+#line 3130 "cweave.w"
+
+case thin_space:app_str("\\,");app_scrap(insert,maybe_math);break;
+
+case math_break:app(opt);app_str("0");
+app_scrap(insert,maybe_math);break;
+case line_break:app(force);app_scrap(insert,no_math);break;
+#line 863 "cweave.ch"
+case left_preproc:app(force);app(preproc_line);
+app_str("\\#");app_scrap(lproc,no_math);break;
+
+case preproc_space:app(' ');app_scrap(pp_space,maybe_math);break;
+case right_preproc:app(force);app_scrap(rproc,no_math);break;
+#line 3140 "cweave.w"
+case big_line_break:app(big_force);app_scrap(insert,no_math);break;
+case no_line_break:app(big_cancel);app(noop);app(break_space);
+app(noop);app(big_cancel);
+app_scrap(insert,no_math);break;
+#line 875 "cweave.ch"
+case pseudo_semi:app_scrap(semi,maybe_math);break;
+case pseudo_lbrace:app_str("\\phantom{");
+if(alternative)
+app_str("\\LBR");
+else
+app_str("\\{");
+app_str("}");
+app_scrap(lbrace,yes_math);
+break;
+case pseudo_rbrace:app_str("\\phantom{");
+if(alternative)
+app_str("\\RBR");
+else
+app_str("\\}");
+app_str("}");
+app_scrap(rbrace,yes_math);
+break;
+#line 3145 "cweave.w"
+case macro_arg_open:app_scrap(begin_arg,maybe_math);break;
+case macro_arg_close:app_scrap(end_arg,maybe_math);break;
+case join:app_str("\\J");app_scrap(insert,no_math);break;
+
+case output_defs_code:app(force);app_str("\\ATH");app(force);
+app_scrap(insert,no_math);break;
+
+default:app(inserted);app(next_control);
+app_scrap(insert,maybe_math);break;
+}
+
+/*:175*/
+#line 3066 "cweave.w"
+;
+next_control= get_next();
+if(next_control=='|'||next_control==begin_comment||
+next_control==begin_short_comment)return;
+}
+}
+
+/*:173*//*181:*/
+#line 3292 "cweave.w"
+
+void
+app_cur_id(scrapping)
+boolean scrapping;
+{
+name_pointer p= id_lookup(id_first,id_loc,normal);
+if(p->ilk<=quoted){
+app(id_flag+(int)(p-name_dir));
+if(scrapping)app_scrap(exp,p->ilk>=custom?yes_math:maybe_math);
+
+}else{
+app(res_flag+(int)(p-name_dir));
+if(scrapping)app_scrap(p->ilk,maybe_math);
+}
+}
+
+/*:181*//*182:*/
+#line 3313 "cweave.w"
+
+text_pointer
+C_translate()
+{
+text_pointer p;
+scrap_pointer save_base;
+save_base= scrap_base;scrap_base= scrap_ptr+1;
+C_parse(section_name);
+if(next_control!='|')err_print("! Missing '|' after C text");
+
+app_tok(cancel);app_scrap(insert,maybe_math);
+
+p= translate();
+if(scrap_ptr>max_scr_ptr)max_scr_ptr= scrap_ptr;
+scrap_ptr= scrap_base-1;scrap_base= save_base;
+return(p);
+}
+
+/*:182*//*183:*/
+#line 3335 "cweave.w"
+
+void
+outer_parse()
+{
+int bal;
+text_pointer p,q;
+while(next_control<format_code)
+if(next_control!=begin_comment&&next_control!=begin_short_comment)
+C_parse(ignore);
+else{
+boolean is_long_comment= (next_control==begin_comment);
+/*176:*/
+#line 3156 "cweave.w"
+
+if(scrap_ptr+safe_scrap_incr>scrap_info_end||
+tok_ptr+safe_tok_incr>tok_mem_end||
+text_ptr+safe_text_incr>tok_start_end){
+if(scrap_ptr>max_scr_ptr)max_scr_ptr= scrap_ptr;
+if(tok_ptr>max_tok_ptr)max_tok_ptr= tok_ptr;
+if(text_ptr>max_text_ptr)max_text_ptr= text_ptr;
+overflow("scrap/token/text");
+}
+
+/*:176*/
+#line 3346 "cweave.w"
+;
+app(cancel);app(inserted);
+if(is_long_comment)app_str("\\C{");
+
+else app_str("\\SHC{");
+
+bal= copy_comment(is_long_comment,1);next_control= ignore;
+while(bal>0){
+p= text_ptr;freeze_text;q= C_translate();
+
+app(tok_flag+(int)(p-tok_start));
+app_str("\\PB{");app(inner_tok_flag+(int)(q-tok_start));app_tok('}');
+
+if(next_control=='|'){
+bal= copy_comment(is_long_comment,bal);
+next_control= ignore;
+}
+else bal= 0;
+}
+app(force);app_scrap(insert,no_math);
+
+}
+}
+
+/*:183*//*188:*/
+#line 3439 "cweave.w"
+
+void
+push_level(p)
+text_pointer p;
+{
+if(stack_ptr==stack_end)overflow("stack");
+if(stack_ptr>stack){
+stack_ptr->end_field= cur_end;
+stack_ptr->tok_field= cur_tok;
+stack_ptr->mode_field= cur_mode;
+}
+stack_ptr++;
+if(stack_ptr>max_stack_ptr)max_stack_ptr= stack_ptr;
+cur_tok= *p;cur_end= *(p+1);
+}
+
+/*:188*//*189:*/
+#line 3459 "cweave.w"
+
+void
+pop_level()
+{
+cur_end= (--stack_ptr)->end_field;
+cur_tok= stack_ptr->tok_field;cur_mode= stack_ptr->mode_field;
+}
+
+/*:189*//*191:*/
+#line 3481 "cweave.w"
+
+eight_bits
+get_output()
+{
+sixteen_bits a;
+restart:while(cur_tok==cur_end)pop_level();
+a= *(cur_tok++);
+if(a>=0400){
+cur_name= a%id_flag+name_dir;
+switch(a/id_flag){
+case 2:return(res_word);
+case 3:return(section_code);
+case 4:push_level(a%id_flag+tok_start);goto restart;
+
+case 5:push_level(a%id_flag+tok_start);cur_mode= inner;goto restart;
+
+default:return(identifier);
+}
+}
+return(a);
+}
+
+/*:191*//*192:*/
+#line 3523 "cweave.w"
+
+void
+output_C()
+{
+token_pointer save_tok_ptr;
+text_pointer save_text_ptr;
+sixteen_bits save_next_control;
+text_pointer p;
+save_tok_ptr= tok_ptr;save_text_ptr= text_ptr;
+save_next_control= next_control;next_control= ignore;p= C_translate();
+app(inner_tok_flag+(int)(p-tok_start));
+out_str("\\PB{");make_output();out('}');
+
+if(text_ptr>max_text_ptr)max_text_ptr= text_ptr;
+if(tok_ptr>max_tok_ptr)max_tok_ptr= tok_ptr;
+text_ptr= save_text_ptr;tok_ptr= save_tok_ptr;
+next_control= save_next_control;
+}
+
+/*:192*//*194:*/
+#line 3547 "cweave.w"
+
+void
+make_output()
+{
+eight_bits a,
+b;
+int c;
+char scratch[longest_name];
+char*k,*k_limit;
+char*j;
+char*p;
+char delim;
+char*save_loc,*save_limit;
+name_pointer cur_section_name;
+boolean save_mode;
+app(end_translation);
+freeze_text;push_level(text_ptr-1);
+while(1){
+a= get_output();
+reswitch:switch(a){
+case end_translation:return;
+case identifier:case res_word:/*195:*/
+#line 3597 "cweave.w"
+
+out('\\');
+if(a==identifier){
+if(cur_name->ilk>=custom&&cur_name->ilk<=quoted&&!doing_format){
+for(p= cur_name->byte_start;p<(cur_name+1)->byte_start;p++)
+out(isxalpha(*p)?'x':*p);
+break;
+#line 923 "cweave.ch"
+}else if(is_tiny(cur_name))out('|');
+#line 3605 "cweave.w"
+
+else{delim= '.';
+for(p= cur_name->byte_start;p<(cur_name+1)->byte_start;p++)
+if(xislower(*p)){
+delim= '\\';break;
+}
+out(delim);
+}
+
+
+}
+#line 931 "cweave.ch"
+else out('&');
+#line 3617 "cweave.w"
+
+if(is_tiny(cur_name)){
+if(isxalpha((cur_name->byte_start)[0]))
+out('\\');
+out((cur_name->byte_start)[0]);
+}
+else out_name(cur_name);
+
+/*:195*/
+#line 3568 "cweave.w"
+;break;
+case section_code:/*199:*/
+#line 3695 "cweave.w"
+{
+out_str("\\X");
+
+cur_xref= (xref_pointer)cur_name->xref;
+if(cur_xref->num==file_flag){an_output= 1;cur_xref= cur_xref->xlink;}
+else an_output= 0;
+if(cur_xref->num>=def_flag){
+out_section(cur_xref->num-def_flag);
+if(phase==3){
+cur_xref= cur_xref->xlink;
+while(cur_xref->num>=def_flag){
+out_str(", ");
+out_section(cur_xref->num-def_flag);
+cur_xref= cur_xref->xlink;
+}
+}
+}
+else out('0');
+out(':');
+if(an_output)out_str("\\.{");
+
+/*200:*/
+#line 3721 "cweave.w"
+
+sprint_section_name(scratch,cur_name);
+k= scratch;
+k_limit= scratch+strlen(scratch);
+cur_section_name= cur_name;
+while(k<k_limit){
+b= *(k++);
+if(b=='@')/*201:*/
+#line 3756 "cweave.w"
+
+if(*k++!='@'){
+printf("\n! Illegal control code in section name: <");
+
+print_section_name(cur_section_name);printf("> ");mark_error;
+}
+
+/*:201*/
+#line 3728 "cweave.w"
+;
+if(an_output)
+switch(b){
+case' ':case'\\':case'#':case'%':case'$':case'^':
+case'{':case'}':case'~':case'&':case'_':
+out('\\');
+
+
+
+#line 949 "cweave.ch"
+
+
+
+#line 3740 "cweave.w"
+
+
+
+
+
+default:out(b);
+}
+#line 959 "cweave.ch"
+else if(b!='|')out(b);
+#line 3748 "cweave.w"
+else{
+/*202:*/
+#line 3769 "cweave.w"
+
+j= limit+1;*j= '|';delim= 0;
+while(1){
+if(k>=k_limit){
+printf("\n! C text in section name didn't end: <");
+
+print_section_name(cur_section_name);printf("> ");mark_error;break;
+}
+b= *(k++);
+if(b=='@'||(b=='\\'&&delim!=0))
+/*203:*/
+#line 3792 "cweave.w"
+{
+if(j>buffer+long_buf_size-4)overflow("buffer");
+*(++j)= b;*(++j)= *(k++);
+}
+
+/*:203*/
+#line 3779 "cweave.w"
+
+else{
+if(b=='\''||b=='"')
+if(delim==0)delim= b;
+else if(delim==b)delim= 0;
+if(b!='|'||delim!=0){
+if(j>buffer+long_buf_size-3)overflow("buffer");
+*(++j)= b;
+}
+else break;
+}
+}
+
+/*:202*/
+#line 3749 "cweave.w"
+;
+save_loc= loc;save_limit= limit;loc= limit+2;limit= j+1;
+*limit= '|';output_C();
+loc= save_loc;limit= save_limit;
+}
+}
+
+/*:200*/
+#line 3716 "cweave.w"
+;
+if(an_output)out_str(" }");
+out_str("\\X");
+}
+
+/*:199*/
+#line 3569 "cweave.w"
+;break;
+case math_rel:out_str("\\MRL{");
+
+case noop:case inserted:break;
+case cancel:case big_cancel:c= 0;b= a;
+while(1){
+a= get_output();
+if(a==inserted)continue;
+if((a<indent&&!(b==big_cancel&&a==' '))||a>big_force)break;
+if(a==indent)c++;else if(a==outdent)c--;
+else if(a==opt)a= get_output();
+}
+/*198:*/
+#line 3682 "cweave.w"
+
+for(;c>0;c--)out_str("\\1");
+
+for(;c<0;c++)out_str("\\2");
+
+
+/*:198*/
+#line 3581 "cweave.w"
+;
+goto reswitch;
+case indent:case outdent:case opt:case backup:case break_space:
+case force:case big_force:case preproc_line:/*196:*/
+#line 3628 "cweave.w"
+
+if(a<break_space||a==preproc_line){
+if(cur_mode==outer){
+out('\\');out(a-cancel+'0');
+
+
+
+
+
+if(a==opt){
+b= get_output();
+#line 939 "cweave.ch"
+if(b!='0'||force_lines==0)out(b);
+#line 3640 "cweave.w"
+else out_str("{-1}");
+}
+}else if(a==opt)b= get_output();
+}
+else/*197:*/
+#line 3652 "cweave.w"
+{
+b= a;save_mode= cur_mode;c= 0;
+while(1){
+a= get_output();
+if(a==inserted)continue;
+if(a==cancel||a==big_cancel){
+/*198:*/
+#line 3682 "cweave.w"
+
+for(;c>0;c--)out_str("\\1");
+
+for(;c<0;c++)out_str("\\2");
+
+
+/*:198*/
+#line 3658 "cweave.w"
+;
+goto reswitch;
+}
+if((a!=' '&&a<indent)||a==backup||a>big_force){
+if(save_mode==outer){
+if(out_ptr>out_buf+3&&strncmp(out_ptr-3,"\\Y\\B",4)==0)
+goto reswitch;
+/*198:*/
+#line 3682 "cweave.w"
+
+for(;c>0;c--)out_str("\\1");
+
+for(;c<0;c++)out_str("\\2");
+
+
+/*:198*/
+#line 3665 "cweave.w"
+;
+out('\\');out(b-cancel+'0');
+
+
+
+if(a!=end_translation)finish_line();
+}
+else if(a!=end_translation&&cur_mode==inner)out(' ');
+goto reswitch;
+}
+if(a==indent)c++;
+else if(a==outdent)c--;
+else if(a==opt)a= get_output();
+else if(a>b)b= a;
+}
+}
+
+/*:197*/
+#line 3644 "cweave.w"
+
+
+/*:196*/
+#line 3585 "cweave.w"
+;break;
+case quoted_char:out(*(cur_tok++));break;
+default:out(a);
+}
+}
+}
+
+/*:194*//*205:*/
+#line 3807 "cweave.w"
+
+void
+phase_two(){
+reset_input();if(show_progress)printf("\nWriting the output file...");
+
+section_count= 0;format_visible= 1;copy_limbo();
+finish_line();flush_buffer(out_buf,0,0);
+while(!input_has_ended)/*207:*/
+#line 3840 "cweave.w"
+{
+section_count++;
+/*208:*/
+#line 3858 "cweave.w"
+
+if(*(loc-1)!='*')out_str("\\M");
+
+else{
+while(*loc==' ')loc++;
+if(*loc=='*'){
+sec_depth= -1;
+loc++;
+}
+else{
+for(sec_depth= 0;xisdigit(*loc);loc++)
+sec_depth= sec_depth*10+(*loc)-'0';
+}
+while(*loc==' ')loc++;
+group_found= 1;
+out_str("\\N");
+
+{char s[32];sprintf(s,"{%d}",sec_depth+1);out_str(s);}
+if(show_progress)
+printf("*%d",section_count);update_terminal;
+}
+out_str("{");out_section(section_count);out_str("}");
+
+/*:208*/
+#line 3842 "cweave.w"
+;
+save_position;
+/*209:*/
+#line 3884 "cweave.w"
+do{
+next_control= copy_TeX();
+switch(next_control){
+case'|':init_stack;output_C();break;
+case'@':out('@');break;
+case TeX_string:case noop:
+case xref_roman:case xref_wildcard:case xref_typewriter:
+case section_name:loc-= 2;next_control= get_next();
+if(next_control==TeX_string)
+err_print("! TeX string should be in C text only");break;
+
+#line 972 "cweave.ch"
+case thin_space:case math_break:case ord:
+case line_break:case big_line_break:case no_line_break:case join:
+case pseudo_semi:case macro_arg_open:case macro_arg_close:
+case pseudo_lbrace:case pseudo_rbrace:
+case output_defs_code:
+err_print("! You can't do that in TeX text");break;
+
+#line 3901 "cweave.w"
+}
+}while(next_control<format_code);
+
+/*:209*/
+#line 3844 "cweave.w"
+;
+/*210:*/
+#line 3907 "cweave.w"
+
+space_checked= 0;
+while(next_control<=definition){
+init_stack;
+if(next_control==definition)/*213:*/
+#line 3965 "cweave.w"
+{
+if(save_line!=out_line||save_place!=out_ptr||space_checked)app(backup);
+if(!space_checked){emit_space_if_needed;save_position;}
+app_str("\\D");
+
+if((next_control= get_next())!=identifier)
+err_print("! Improper macro definition");
+
+else{
+app('$');app_cur_id(0);
+#line 992 "cweave.ch"
+if(*loc=='('){
+if(func_index)
+(name_dir+*(tok_ptr-1)%10240)->func_flag= 1;
+reswitch:switch(next_control= get_next()){
+case'(':case',':app(next_control);goto reswitch;
+case identifier:app_cur_id(0);goto reswitch;
+case')':app(next_control);next_control= get_next();break;
+default:err_print("! Improper macro definition");break;
+}
+}
+#line 3982 "cweave.w"
+else next_control= get_next();
+app_str("$ ");app(break_space);
+app_scrap(dead,no_math);
+}
+}
+
+/*:213*/
+#line 3911 "cweave.w"
+
+else/*214:*/
+#line 3988 "cweave.w"
+{
+doing_format= 1;
+if(*(loc-1)=='s'||*(loc-1)=='S')format_visible= 0;
+if(!space_checked){emit_space_if_needed;save_position;}
+app_str("\\F");
+
+next_control= get_next();
+if(next_control==identifier){
+app(id_flag+(int)(id_lookup(id_first,id_loc,normal)-name_dir));
+app(' ');
+app(break_space);
+next_control= get_next();
+if(next_control==identifier){
+app(id_flag+(int)(id_lookup(id_first,id_loc,normal)-name_dir));
+app_scrap(exp,maybe_math);app_scrap(semi,maybe_math);
+next_control= get_next();
+}
+}
+if(scrap_ptr!=scrap_info+2)err_print("! Improper format definition");
+
+}
+
+/*:214*/
+#line 3912 "cweave.w"
+;
+outer_parse();finish_C(format_visible);format_visible= 1;
+doing_format= 0;
+}
+
+/*:210*/
+#line 3845 "cweave.w"
+;
+/*216:*/
+#line 4017 "cweave.w"
+
+this_section= name_dir;
+if(next_control<=section_name){
+emit_space_if_needed;init_stack;
+if(next_control==begin_C)next_control= get_next();
+else{
+this_section= cur_section;
+/*217:*/
+#line 4037 "cweave.w"
+
+do next_control= get_next();
+while(next_control=='+');
+if(next_control!='='&&next_control!=eq_eq)
+err_print("! You need an = sign after the section name");
+
+else next_control= get_next();
+if(out_ptr>out_buf+1&&*out_ptr=='Y'&&*(out_ptr-1)=='\\')app(backup);
+
+
+app(section_flag+(int)(this_section-name_dir));
+cur_xref= (xref_pointer)this_section->xref;
+if(cur_xref->num==file_flag)cur_xref= cur_xref->xlink;
+app_str("${}");
+if(cur_xref->num!=section_count+def_flag){
+app_str("\\mathrel+");
+this_section= name_dir;
+}
+app_str("\\E");
+
+app_str("{}$");
+app(force);app_scrap(dead,no_math);
+
+
+/*:217*/
+#line 4025 "cweave.w"
+;
+}
+while(next_control<=section_name){
+outer_parse();
+/*218:*/
+#line 4061 "cweave.w"
+
+if(next_control<section_name){
+err_print("! You can't do that in C text");
+
+next_control= get_next();
+}
+else if(next_control==section_name){
+app(section_flag+(int)(cur_section-name_dir));
+app_scrap(section_scrap,maybe_math);
+next_control= get_next();
+}
+
+/*:218*/
+#line 4029 "cweave.w"
+;
+}
+finish_C(1);
+}
+
+/*:216*/
+#line 3846 "cweave.w"
+;
+/*219:*/
+#line 4076 "cweave.w"
+
+if(this_section>name_dir){
+cur_xref= (xref_pointer)this_section->xref;
+if(cur_xref->num==file_flag){an_output= 1;cur_xref= cur_xref->xlink;}
+else an_output= 0;
+if(cur_xref->num>def_flag)
+cur_xref= cur_xref->xlink;
+footnote(def_flag);footnote(cite_flag);footnote(0);
+}
+
+/*:219*/
+#line 3847 "cweave.w"
+;
+/*223:*/
+#line 4134 "cweave.w"
+
+out_str("\\fi");finish_line();
+
+flush_buffer(out_buf,0,0);
+
+/*:223*/
+#line 3848 "cweave.w"
+;
+}
+
+/*:207*/
+#line 3814 "cweave.w"
+;
+}
+
+/*:205*//*212:*/
+#line 3930 "cweave.w"
+
+void
+finish_C(visible)
+boolean visible;
+{
+text_pointer p;
+if(visible){
+out_str("\\B");app_tok(force);app_scrap(insert,no_math);
+p= translate();
+
+app(tok_flag+(int)(p-tok_start));make_output();
+if(out_ptr>out_buf+1)
+if(*(out_ptr-1)=='\\')
+
+
+
+if(*out_ptr=='6')out_ptr-= 2;
+else if(*out_ptr=='7')*out_ptr= 'Y';
+out_str("\\par");finish_line();
+}
+if(text_ptr>max_text_ptr)max_text_ptr= text_ptr;
+if(tok_ptr>max_tok_ptr)max_tok_ptr= tok_ptr;
+if(scrap_ptr>max_scr_ptr)max_scr_ptr= scrap_ptr;
+tok_ptr= tok_mem+1;text_ptr= tok_start+1;scrap_ptr= scrap_info;
+
+}
+
+/*:212*//*221:*/
+#line 4101 "cweave.w"
+
+void
+footnote(flag)
+sixteen_bits flag;
+{
+xref_pointer q;
+if(cur_xref->num<=flag)return;
+finish_line();out('\\');
+
+
+
+out(flag==0?'U':flag==cite_flag?'Q':'A');
+/*222:*/
+#line 4121 "cweave.w"
+
+q= cur_xref;if(q->xlink->num>flag)out('s');
+while(1){
+out_section(cur_xref->num-flag);
+cur_xref= cur_xref->xlink;
+if(cur_xref->num<=flag)break;
+if(cur_xref->xlink->num>flag)out_str(", ");
+else{out_str("\\ET");
+
+if(cur_xref!=q->xlink)out('s');
+}
+}
+
+/*:222*/
+#line 4113 "cweave.w"
+;
+out('.');
+}
+
+/*:221*//*225:*/
+#line 4150 "cweave.w"
+
+void
+phase_three(){
+if(no_xref){
+finish_line();
+out_str("\\end");
+
+finish_line();
+}
+else{
+phase= 3;if(show_progress)printf("\nWriting the index...");
+
+finish_line();
+if((idx_file= fopen(idx_file_name,"w"))==NULL)
+fatal("! Cannot open index file ",idx_file_name);
+
+if(change_exists){
+/*227:*/
+#line 4201 "cweave.w"
+{
+
+k_section= 0;
+while(!changed_section[++k_section]);
+out_str("\\ch ");
+
+out_section(k_section);
+while(k_section<section_count){
+while(!changed_section[++k_section]);
+out_str(", ");out_section(k_section);
+}
+out('.');
+}
+
+/*:227*/
+#line 4167 "cweave.w"
+;finish_line();finish_line();
+}
+out_str("\\inx");finish_line();
+
+active_file= idx_file;
+/*229:*/
+#line 4232 "cweave.w"
+{
+int c;
+for(c= 0;c<=255;c++)bucket[c]= NULL;
+for(h= hash;h<=hash_end;h++){
+next_name= *h;
+while(next_name){
+cur_name= next_name;next_name= cur_name->link;
+if(cur_name->xref!=(char*)xmem){
+c= (eight_bits)((cur_name->byte_start)[0]);
+if(xisupper(c))c= tolower(c);
+blink[cur_name-name_dir]= bucket[c];bucket[c]= cur_name;
+}
+}
+}
+}
+
+/*:229*/
+#line 4172 "cweave.w"
+;
+/*238:*/
+#line 4348 "cweave.w"
+
+sort_ptr= scrap_info;unbucket(1);
+while(sort_ptr>scrap_info){
+cur_depth= sort_ptr->depth;
+if(blink[sort_ptr->head-name_dir]==0||cur_depth==infinity)
+/*240:*/
+#line 4373 "cweave.w"
+{
+cur_name= sort_ptr->head;
+do{
+out_str("\\I");
+
+/*241:*/
+#line 4385 "cweave.w"
+
+#line 1036 "cweave.ch"
+switch(cur_name->ilk){
+case normal:
+if(is_tiny(cur_name)&&!cur_name->func_flag)
+out_str("\\|");
+else{char*j;
+for(j= cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
+if(xislower(*j))goto lowcase;
+out_str("\\.");break;
+lowcase:out_str("\\\\");
+}
+break;
+
+
+
+case roman:break;
+case wildcard:out_str("\\9");break;
+
+case typewriter:out_str("\\.");break;
+
+case custom:case quoted:{char*j;out_str("$\\");
+for(j= cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
+out(isxalpha(*j)?'x':*j);
+out('$');
+goto name_done;
+}
+default:out_str("\\&");
+
+}
+out_name(cur_name);
+name_done:
+if(cur_name->func_flag)
+out_str("(\\,)");
+#line 4414 "cweave.w"
+
+/*:241*/
+#line 4378 "cweave.w"
+;
+/*242:*/
+#line 4418 "cweave.w"
+
+/*244:*/
+#line 4436 "cweave.w"
+
+this_xref= (xref_pointer)cur_name->xref;cur_xref= xmem;
+do{
+next_xref= this_xref->xlink;this_xref->xlink= cur_xref;
+cur_xref= this_xref;this_xref= next_xref;
+}while(this_xref!=xmem);
+
+/*:244*/
+#line 4419 "cweave.w"
+;
+do{
+out_str(", ");cur_val= cur_xref->num;
+if(cur_val<def_flag)out_section(cur_val);
+else{out_str("\\[");out_section(cur_val-def_flag);out(']');}
+
+cur_xref= cur_xref->xlink;
+}while(cur_xref!=xmem);
+out('.');finish_line();
+
+/*:242*/
+#line 4379 "cweave.w"
+;
+cur_name= blink[cur_name-name_dir];
+}while(cur_name);
+--sort_ptr;
+}
+
+/*:240*/
+#line 4353 "cweave.w"
+
+else/*239:*/
+#line 4357 "cweave.w"
+{
+eight_bits c;
+next_name= sort_ptr->head;
+do{
+cur_name= next_name;next_name= blink[cur_name-name_dir];
+cur_byte= cur_name->byte_start+cur_depth;
+if(cur_byte==(cur_name+1)->byte_start)c= 0;
+else{
+c= (eight_bits)*cur_byte;
+if(xisupper(c))c= tolower(c);
+}
+blink[cur_name-name_dir]= bucket[c];bucket[c]= cur_name;
+}while(next_name);
+--sort_ptr;unbucket(cur_depth+1);
+}
+
+/*:239*/
+#line 4354 "cweave.w"
+;
+}
+
+/*:238*/
+#line 4173 "cweave.w"
+;
+finish_line();fclose(active_file);
+active_file= tex_file;
+out_str("\\fin");finish_line();
+
+if((scn_file= fopen(scn_file_name,"w"))==NULL)
+fatal("! Cannot open section file ",scn_file_name);
+
+active_file= scn_file;
+/*247:*/
+#line 4467 "cweave.w"
+section_print(root)
+
+/*:247*/
+#line 4182 "cweave.w"
+;
+finish_line();fclose(active_file);
+active_file= tex_file;
+if(group_found)out_str("\\con");else out_str("\\end");
+
+
+finish_line();
+fclose(active_file);
+}
+if(show_happiness)printf("\nDone.");
+check_complete();
+}
+
+/*:225*//*237:*/
+#line 4330 "cweave.w"
+
+void
+unbucket(d)
+eight_bits d;
+{
+int c;
+
+for(c= 100+128;c>=0;c--)if(bucket[collate[c]]){
+
+if(sort_ptr>=scrap_info_end)overflow("sorting");
+sort_ptr++;
+if(sort_ptr>max_sort_ptr)max_sort_ptr= sort_ptr;
+if(c==0)sort_ptr->depth= infinity;
+else sort_ptr->depth= d;
+sort_ptr->head= bucket[collate[c]];bucket[collate[c]]= NULL;
+}
+}
+
+/*:237*//*246:*/
+#line 4450 "cweave.w"
+
+void
+section_print(p)
+name_pointer p;
+{
+if(p){
+section_print(p->llink);out_str("\\I");
+
+tok_ptr= tok_mem+1;text_ptr= tok_start+1;scrap_ptr= scrap_info;init_stack;
+app(p-name_dir+section_flag);make_output();
+footnote(cite_flag);
+footnote(0);
+finish_line();
+section_print(p->rlink);
+}
+}
+
+/*:246*//*248:*/
+#line 4472 "cweave.w"
+
+void
+print_stats(){
+printf("\nMemory usage statistics:\n");
+
+printf("%ld names (out of %ld)\n",
+(long)(name_ptr-name_dir),(long)max_names);
+printf("%ld cross-references (out of %ld)\n",
+(long)(xref_ptr-xmem),(long)max_refs);
+printf("%ld bytes (out of %ld)\n",
+(long)(byte_ptr-byte_mem),(long)max_bytes);
+printf("Parsing:\n");
+printf("%ld scraps (out of %ld)\n",
+(long)(max_scr_ptr-scrap_info),(long)max_scraps);
+printf("%ld texts (out of %ld)\n",
+(long)(max_text_ptr-tok_start),(long)max_texts);
+printf("%ld tokens (out of %ld)\n",
+(long)(max_tok_ptr-tok_mem),(long)max_toks);
+printf("%ld levels (out of %ld)\n",
+(long)(max_stack_ptr-stack),(long)stack_size);
+printf("Sorting:\n");
+printf("%ld levels (out of %ld)\n",
+(long)(max_sort_ptr-scrap_info),(long)max_scraps);
+}
+
+#line 1075 "cweave.ch"
+/*:248*/