diff options
author | Karl Berry <karl@freefriends.org> | 2019-01-06 23:19:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-01-06 23:19:16 +0000 |
commit | 976f2b9b61a086f8594f6bfe6dbea42faa56edb2 (patch) | |
tree | 9e620153df80a27b0304ae9827fa0f69a02191e0 /Build/source/texk/web2c/ctangleboot.cin | |
parent | b109e3c47399f4fdfc7805b8f9168c7452f78e96 (diff) |
cwebbin for cweb, from Andreas Scherer https://github.com/ascherer/cwebbin)
git-svn-id: svn://tug.org/texlive/trunk@49626 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/ctangleboot.cin')
-rw-r--r-- | Build/source/texk/web2c/ctangleboot.cin | 830 |
1 files changed, 548 insertions, 282 deletions
diff --git a/Build/source/texk/web2c/ctangleboot.cin b/Build/source/texk/web2c/ctangleboot.cin index 0a4e286176a..ed118418a3f 100644 --- a/Build/source/texk/web2c/ctangleboot.cin +++ b/Build/source/texk/web2c/ctangleboot.cin @@ -1,24 +1,40 @@ /*1:*/ #line 64 "cwebdir/ctangle.w" -/*5:*/ -#line 35 "cwebdir/common.h" +/*2:*/ +#line 60 "cwebdir/ctang-w2c.ch" + +#include <string.h> +#line 83 "cwebdir/ctangle.w" + +/*:2*//*6:*/ +#line 44 "cwebdir/comm-w2c.h" + +#ifndef HAVE_GETTEXT +#define HAVE_GETTEXT 0 +#endif + +#if HAVE_GETTEXT +#include <libintl.h> +#else +#define gettext(A) A +#endif -#line 120 "cwebdir/ctang-w2c.ch" -#include <kpathsea/kpathsea.h> +#include <stdbool.h> +#include <stdint.h> #include <stdio.h> -#line 37 "cwebdir/common.h" -/*:5*//*61:*/ +/*:6*//*62:*/ #line 888 "cwebdir/ctangle.w" -#line 890 "cwebdir/ctangle.w" +#include <ctype.h> #include <stdlib.h> -/*:61*/ +/*:62*/ #line 65 "cwebdir/ctangle.w" -#define banner "This is CTANGLE, Version 3.64" \ +#define banner _("This is CTANGLE, Version 3.64") \ + \ #define max_bytes 1000000 \ @@ -32,7 +48,8 @@ #define buf_size 1000 \ #define ctangle 0 -#define cweave 1 \ +#define cweave 1 +#define ctwill 2 \ #define and_and 04 #define lt_lt 020 @@ -40,7 +57,7 @@ #define plus_plus 013 #define minus_minus 01 #define minus_gt 031 -#define not_eq 032 +#define non_eq 032 #define lt_eq 034 #define gt_eq 035 #define eq_eq 036 @@ -57,7 +74,7 @@ #define xisupper(c) (isupper((eight_bits) c) &&((eight_bits) c<0200) ) #define xisxdigit(c) (isxdigit((eight_bits) c) &&((eight_bits) c<0200) ) \ -#define length(c) (c+1) ->byte_start-(c) ->byte_start +#define length(c) (size_t) ((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 @@ -71,7 +88,8 @@ #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 _(STRING) gettext(STRING) +#define confusion(s) fatal(_("! This can't happen: ") ,s) \ #define max_file_name_length 1024 #define cur_file file[include_depth] @@ -81,7 +99,8 @@ #define show_banner flags['b'] #define show_progress flags['p'] -#define show_happiness flags['h'] \ +#define show_happiness flags['h'] +#define make_xrefs flags['x'] \ #define update_terminal fflush(stdout) #define new_line putchar('\n') @@ -137,37 +156,40 @@ #define compress(c) if(loc++<=limit) return(c) \ #define macro 0 -#define app_repl(c) {if(tok_ptr==tok_mem_end) overflow("token") ;*tok_ptr++= c;} \ +#define app_repl(c) {if(tok_ptr==tok_mem_end) overflow(_("token") ) ;*tok_ptr++= c;} \ + +#define max_banner 50 \ #line 66 "cwebdir/ctangle.w" -/*4:*/ -#line 29 "cwebdir/common.h" +/*5:*/ +#line 37 "cwebdir/comm-w2c.h" -#line 31 "cwebdir/common.h" -typedef char unsigned eight_bits; -extern boolean program; +typedef bool boolean; +typedef uint8_t eight_bits; +typedef uint16_t sixteen_bits; +extern int program; extern int phase; -/*:4*//*6:*/ -#line 57 "cwebdir/common.h" +/*:5*//*7:*/ +#line 78 "cwebdir/comm-w2c.h" char section_text[longest_name+1]; char*section_text_end= section_text+longest_name; char*id_first; char*id_loc; -/*:6*//*7:*/ -#line 72 "cwebdir/common.h" +/*:7*//*8:*/ +#line 93 "cwebdir/comm-w2c.h" extern char buffer[]; extern char*buffer_end; extern char*loc; extern char*limit; -/*:7*//*8:*/ -#line 87 "cwebdir/common.h" +/*:8*//*9:*/ +#line 108 "cwebdir/comm-w2c.h" typedef struct name_info{ char*byte_start; @@ -177,7 +199,7 @@ struct name_info*Rlink; char Ilk; }dummy; -char*equiv_or_xref; +void*equiv_or_xref; }name_info; typedef name_info*name_pointer; typedef name_pointer*hash_pointer; @@ -190,76 +212,91 @@ extern char*byte_ptr; extern name_pointer hash[]; extern hash_pointer hash_end; extern hash_pointer h; -#line 147 "cwebdir/ctang-w2c.ch" -#include "cwebboot.h" -#line 112 "cwebdir/common.h" +extern boolean names_match(name_pointer,const char*,size_t,eight_bits); +extern name_pointer id_lookup(const char*,const char*,char); -/*:8*//*9:*/ -#line 122 "cwebdir/common.h" +extern name_pointer section_lookup(char*,char*,int); +extern void init_node(name_pointer); +extern void init_p(name_pointer,eight_bits); +extern void print_prefix_name(name_pointer); +extern void print_section_name(name_pointer); +extern void sprint_section_name(char*,name_pointer); + +/*:9*//*10:*/ +#line 150 "cwebdir/comm-w2c.h" -#line 159 "cwebdir/ctang-w2c.ch" extern int history; -#line 128 "cwebdir/common.h" +extern int wrap_up(void); +extern void err_print(const char*); +extern void fatal(const char*,const char*); +extern void overflow(const char*); -/*:9*//*10:*/ -#line 137 "cwebdir/common.h" +/*:10*//*11:*/ +#line 165 "cwebdir/comm-w2c.h" -#line 173 "cwebdir/ctang-w2c.ch" extern int include_depth; -#line 139 "cwebdir/common.h" 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 check_file_name[]; extern char file_name[][max_file_name_length]; extern char change_file_name[]; -#line 181 "cwebdir/ctang-w2c.ch" extern int line[]; extern int change_line; extern int change_depth; -#line 151 "cwebdir/common.h" extern boolean input_has_ended; extern boolean changing; extern boolean web_file_open; -#line 157 "cwebdir/common.h" +extern boolean get_line(void); +extern void check_complete(void); +extern void reset_input(void); -/*:10*//*11:*/ -#line 159 "cwebdir/common.h" +/*:11*//*12:*/ +#line 188 "cwebdir/comm-w2c.h" -typedef unsigned short sixteen_bits; extern sixteen_bits section_count; extern boolean changed_section[]; extern boolean change_pending; extern boolean print_where; -/*:11*//*12:*/ -#line 171 "cwebdir/common.h" +/*:12*//*13:*/ +#line 200 "cwebdir/comm-w2c.h" extern int argc; extern char**argv; extern boolean flags[]; -/*:12*//*13:*/ -#line 183 "cwebdir/common.h" +/*:13*//*14:*/ +#line 212 "cwebdir/comm-w2c.h" extern FILE*C_file; extern FILE*tex_file; extern FILE*idx_file; extern FILE*scn_file; +extern FILE*check_file; extern FILE*active_file; -/*:13*//*14:*/ -#line 192 "cwebdir/common.h" +/*:14*//*15:*/ +#line 222 "cwebdir/comm-w2c.h" +extern void common_init(void); +extern void print_stats(void); +extern void cb_show_banner(void); #line 128 "cwebdir/ctangle.w" -/*:14*/ +/*:15*//*104:*/ +#line 836 "cwebdir/ctang-w2c.ch" + +extern char cb_banner[]; + +/*:104*/ #line 67 "cwebdir/ctangle.w" -/*15:*/ +/*16:*/ #line 152 "cwebdir/ctangle.w" typedef struct{ @@ -268,7 +305,7 @@ sixteen_bits text_link; }text; typedef text*text_pointer; -/*:15*//*26:*/ +/*:16*//*27:*/ #line 296 "cwebdir/ctangle.w" typedef struct{ @@ -280,10 +317,10 @@ sixteen_bits section_field; }output_state; typedef output_state*stack_pointer; -/*:26*/ +/*:27*/ #line 68 "cwebdir/ctangle.w" -/*16:*/ +/*17:*/ #line 159 "cwebdir/ctangle.w" text text_info[max_texts]; @@ -293,12 +330,12 @@ eight_bits tok_mem[max_toks]; eight_bits*tok_mem_end= tok_mem+max_toks-1; eight_bits*tok_ptr; -/*:16*//*22:*/ +/*:17*//*23:*/ #line 227 "cwebdir/ctangle.w" text_pointer last_unnamed; -/*:22*//*27:*/ +/*:23*//*28:*/ #line 312 "cwebdir/ctangle.w" output_state cur_state; @@ -307,18 +344,18 @@ output_state stack[stack_size+1]; stack_pointer stack_ptr; stack_pointer stack_end= stack+stack_size; -/*:27*//*31:*/ +/*:28*//*32:*/ #line 384 "cwebdir/ctangle.w" int cur_val; -/*:31*//*35:*/ +/*:32*//*36:*/ #line 473 "cwebdir/ctangle.w" eight_bits out_state; boolean protect; -/*:35*//*37:*/ +/*:36*//*38:*/ #line 502 "cwebdir/ctangle.w" name_pointer output_files[max_files]; @@ -326,118 +363,135 @@ name_pointer*cur_out_file,*end_output_files,*an_output_file; char cur_section_name_char; char output_file_name[longest_name]; -/*:37*//*44:*/ +/*:38*//*45:*/ #line 599 "cwebdir/ctangle.w" boolean output_defs_seen= 0; -/*:44*//*50:*/ +/*:45*//*51:*/ #line 710 "cwebdir/ctangle.w" char translit[128][translit_length]; -/*:50*//*55:*/ +/*:51*//*56:*/ #line 789 "cwebdir/ctangle.w" eight_bits ccode[256]; -/*:55*//*58:*/ +/*:56*//*59:*/ #line 845 "cwebdir/ctangle.w" boolean comment_continues= 0; -/*:58*//*60:*/ +/*:59*//*61:*/ #line 884 "cwebdir/ctangle.w" name_pointer cur_section_name; int no_where; -/*:60*//*74:*/ +/*:61*//*75:*/ #line 1195 "cwebdir/ctangle.w" text_pointer cur_text; eight_bits next_control; -/*:74*//*81:*/ +/*:75*//*82:*/ #line 1353 "cwebdir/ctangle.w" extern sixteen_bits section_count; -/*:81*/ +/*:82*/ #line 69 "cwebdir/ctangle.w" -/*40:*/ +/*41:*/ #line 533 "cwebdir/ctangle.w" -#line 284 "cwebdir/ctang-w2c.ch" +#line 251 "cwebdir/ctang-w2c.ch" static void phase_two(void); #line 535 "cwebdir/ctangle.w" -/*:40*//*45:*/ +/*:41*//*46:*/ #line 602 "cwebdir/ctangle.w" -#line 310 "cwebdir/ctang-w2c.ch" +#line 335 "cwebdir/ctang-w2c.ch" static void output_defs(void); #line 604 "cwebdir/ctangle.w" -/*:45*//*47:*/ +/*:46*//*48:*/ #line 648 "cwebdir/ctangle.w" -#line 328 "cwebdir/ctang-w2c.ch" +#line 355 "cwebdir/ctang-w2c.ch" static void out_char(eight_bits); #line 650 "cwebdir/ctangle.w" -/*:47*//*89:*/ +/*:48*//*90:*/ #line 1460 "cwebdir/ctangle.w" -#line 442 "cwebdir/ctang-w2c.ch" +#line 651 "cwebdir/ctang-w2c.ch" static void phase_one(void); #line 1462 "cwebdir/ctangle.w" -/*:89*//*91:*/ +/*:90*//*92:*/ #line 1478 "cwebdir/ctangle.w" -#line 460 "cwebdir/ctang-w2c.ch" +#line 665 "cwebdir/ctang-w2c.ch" static void skip_limbo(void); #line 1480 "cwebdir/ctangle.w" -/*:91*/ +/*:92*//*97:*/ +#line 752 "cwebdir/ctang-w2c.ch" + +static eight_bits get_next(void); +static eight_bits skip_ahead(void); +static boolean skip_comment(boolean); +static void flush_buffer(void); +static void get_output(void); +static void pop_level(int); +static void push_level(name_pointer); +static void scan_repl(eight_bits); +static void scan_section(void); +static void store_two_bytes(sixteen_bits); + +/*:97*/ #line 70 "cwebdir/ctangle.w" -#line 83 "cwebdir/ctangle.w" - -/*:1*//*2:*/ +#line 55 "cwebdir/ctang-w2c.ch" +/*:1*//*3:*/ #line 91 "cwebdir/ctangle.w" #line 69 "cwebdir/ctang-w2c.ch" -int main(int ac,char**av) +int main( +int ac, +char**av) #line 95 "cwebdir/ctangle.w" { argc= ac;argv= av; program= ctangle; -/*17:*/ +/*18:*/ #line 167 "cwebdir/ctangle.w" text_info->tok_start= tok_ptr= tok_mem; text_ptr= text_info+1;text_ptr->tok_start= tok_mem; -/*:17*//*19:*/ +/*:18*//*20:*/ #line 177 "cwebdir/ctangle.w" -name_dir->equiv= (char*)text_info; +#line 130 "cwebdir/ctang-w2c.ch" +init_node(name_dir); +#line 179 "cwebdir/ctangle.w" -/*:19*//*23:*/ +/*:20*//*24:*/ #line 230 "cwebdir/ctangle.w" last_unnamed= text_info;text_info->text_link= 0; -/*:23*//*38:*/ +/*:24*//*39:*/ #line 512 "cwebdir/ctangle.w" cur_out_file= end_output_files= output_files+max_files; -/*:38*//*51:*/ +/*:39*//*52:*/ #line 713 "cwebdir/ctangle.w" { @@ -445,7 +499,7 @@ int i; for(i= 0;i<128;i++)sprintf(translit[i],"X%02X",(unsigned)(128+i)); } -/*:51*//*56:*/ +/*:52*//*57:*/ #line 792 "cwebdir/ctangle.w" { int c; @@ -465,72 +519,88 @@ ccode['<']= ccode['(']= section_name; ccode['\'']= ord; } -/*:56*//*70:*/ +/*:57*//*71:*/ #line 1116 "cwebdir/ctangle.w" section_text[0]= ' '; -/*:70*/ +/*:71*//*105:*/ +#line 839 "cwebdir/ctang-w2c.ch" + +strncpy(cb_banner,banner,max_banner-1); + +/*:105*/ #line 98 "cwebdir/ctangle.w" ; common_init(); -#line 75 "cwebdir/ctang-w2c.ch" -if(show_banner){ -printf("%s%s\n",banner,versionstring); -} +#line 77 "cwebdir/ctang-w2c.ch" +if(show_banner)cb_show_banner(); #line 101 "cwebdir/ctangle.w" phase_one(); phase_two(); return wrap_up(); } -/*:2*//*20:*/ +/*:3*//*21:*/ #line 183 "cwebdir/ctangle.w" -#line 208 "cwebdir/ctang-w2c.ch" -int names_match(name_pointer p,const char*first,int l,char t) -#line 188 "cwebdir/ctangle.w" -{ +#line 140 "cwebdir/ctang-w2c.ch" +boolean names_match( +name_pointer p, +const char*first, +size_t l, +eight_bits t) +{(void)t; +#line 189 "cwebdir/ctangle.w" if(length(p)!=l)return 0; return!strncmp(first,p->byte_start,l); } -/*:20*//*21:*/ +/*:21*//*22:*/ #line 198 "cwebdir/ctangle.w" +#line 153 "cwebdir/ctang-w2c.ch" void -#line 217 "cwebdir/ctang-w2c.ch" - init_node(name_pointer node) +init_node( +name_pointer node) #line 202 "cwebdir/ctangle.w" { -node->equiv= (char*)text_info; +#line 161 "cwebdir/ctang-w2c.ch" +node->equiv= (void*)text_info; +#line 204 "cwebdir/ctangle.w" } +#line 168 "cwebdir/ctang-w2c.ch" void -#line 223 "cwebdir/ctang-w2c.ch" - init_p(name_pointer p,char t){} +init_p(name_pointer p,eight_bits t){(void)p;(void)t;} #line 207 "cwebdir/ctangle.w" -/*:21*//*25:*/ +/*:22*//*26:*/ #line 260 "cwebdir/ctangle.w" -#line 233 "cwebdir/ctang-w2c.ch" +#line 177 "cwebdir/ctang-w2c.ch" static void -store_two_bytes(sixteen_bits x) +store_two_bytes( +sixteen_bits x) #line 264 "cwebdir/ctangle.w" { -if(tok_ptr+2> tok_mem_end)overflow("token"); +#line 185 "cwebdir/ctang-w2c.ch" +if(tok_ptr+2> tok_mem_end)overflow(_("token")); +#line 266 "cwebdir/ctangle.w" *tok_ptr++= x>>8; *tok_ptr++= x&0377; } -/*:25*//*29:*/ +/*:26*//*30:*/ #line 336 "cwebdir/ctangle.w" -#line 244 "cwebdir/ctang-w2c.ch" +#line 193 "cwebdir/ctang-w2c.ch" static void -push_level(name_pointer p) +push_level( +name_pointer p) #line 340 "cwebdir/ctangle.w" { -if(stack_ptr==stack_end)overflow("stack"); +#line 201 "cwebdir/ctang-w2c.ch" +if(stack_ptr==stack_end)overflow(_("stack")); +#line 342 "cwebdir/ctangle.w" *stack_ptr= cur_state; stack_ptr++; if(p!=NULL){ @@ -540,12 +610,13 @@ cur_section= 0; } } -/*:29*//*30:*/ +/*:30*//*31:*/ #line 355 "cwebdir/ctangle.w" -#line 255 "cwebdir/ctang-w2c.ch" +#line 209 "cwebdir/ctang-w2c.ch" static void -pop_level(int flag) +pop_level( +int flag) #line 359 "cwebdir/ctangle.w" { if(flag&&cur_repl->text_link<section_flag){ @@ -557,10 +628,10 @@ stack_ptr--; if(stack_ptr> stack)cur_state= *stack_ptr; } -/*:30*//*32:*/ +/*:31*//*33:*/ #line 391 "cwebdir/ctangle.w" -#line 265 "cwebdir/ctang-w2c.ch" +#line 218 "cwebdir/ctang-w2c.ch" static void get_output(void) #line 394 "cwebdir/ctangle.w" @@ -582,21 +653,25 @@ a= (a-0200)*0400+*cur_byte++; switch(a/024000){ case 0:cur_val= a;out_char(identifier);break; case 1:if(a==output_defs_flag)output_defs(); -else/*33:*/ +else/*34:*/ #line 423 "cwebdir/ctangle.w" { a-= 024000; -if((a+name_dir)->equiv!=(char*)text_info)push_level(a+name_dir); +#line 225 "cwebdir/ctang-w2c.ch" +if((a+name_dir)->equiv!=(void*)text_info)push_level(a+name_dir); +#line 427 "cwebdir/ctangle.w" else if(a!=0){ -printf("\n! Not present: <"); +#line 231 "cwebdir/ctang-w2c.ch" +fputs(_("\n! Not present: <"),stdout); +#line 429 "cwebdir/ctangle.w" print_section_name(a+name_dir);err_print(">"); } goto restart; } -/*:33*/ +/*:34*/ #line 412 "cwebdir/ctangle.w" ; break; @@ -606,10 +681,10 @@ out_char(section_number); } } -/*:32*//*36:*/ +/*:33*//*37:*/ #line 481 "cwebdir/ctangle.w" -#line 275 "cwebdir/ctang-w2c.ch" +#line 238 "cwebdir/ctang-w2c.ch" static void flush_buffer(void) #line 484 "cwebdir/ctangle.w" @@ -623,45 +698,51 @@ update_terminal; cur_line++; } -/*:36*//*41:*/ +/*:37*//*42:*/ #line 536 "cwebdir/ctangle.w" -#line 293 "cwebdir/ctang-w2c.ch" +#line 258 "cwebdir/ctang-w2c.ch" static void phase_two(void){ #line 539 "cwebdir/ctangle.w" web_file_open= 0; cur_line= 1; -/*28:*/ +/*29:*/ #line 325 "cwebdir/ctangle.w" stack_ptr= stack+1;cur_name= name_dir;cur_repl= text_info->text_link+text_info; cur_byte= cur_repl->tok_start;cur_end= (cur_repl+1)->tok_start;cur_section= 0; -/*:28*/ +/*:29*/ #line 541 "cwebdir/ctangle.w" ; -/*43:*/ +/*44:*/ #line 595 "cwebdir/ctangle.w" if(!output_defs_seen) output_defs(); -/*:43*/ +/*:44*/ #line 542 "cwebdir/ctangle.w" ; if(text_info->text_link==0&&cur_out_file==end_output_files){ -printf("\n! No program text was specified.");mark_harmless; +#line 265 "cwebdir/ctang-w2c.ch" +fputs(_("\n! No program text was specified."),stdout);mark_harmless; +#line 545 "cwebdir/ctangle.w" } else{ if(cur_out_file==end_output_files){ if(show_progress) -printf("\nWriting the output file (%s):",C_file_name); +#line 271 "cwebdir/ctang-w2c.ch" +printf(_("\nWriting the output file (%s):"),C_file_name); +#line 551 "cwebdir/ctangle.w" } else{ if(show_progress){ -printf("\nWriting the output files:"); +#line 277 "cwebdir/ctang-w2c.ch" +fputs(_("\nWriting the output files:"),stdout); +#line 555 "cwebdir/ctangle.w" printf(" (%s)",C_file_name); update_terminal; @@ -670,17 +751,68 @@ if(text_info->text_link==0)goto writeloop; } while(stack_ptr> stack)get_output(); flush_buffer(); -writeloop:/*42:*/ -#line 572 "cwebdir/ctangle.w" +writeloop:/*43:*/ +#line 309 "cwebdir/ctang-w2c.ch" + +fclose(C_file);C_file= NULL; +/*98:*/ +#line 772 "cwebdir/ctang-w2c.ch" + +if((C_file= fopen(C_file_name,"r"))!=NULL){ +/*99:*/ +#line 779 "cwebdir/ctang-w2c.ch" + +char x[BUFSIZ],y[BUFSIZ]; +int x_size,y_size,comparison; + +if((check_file= fopen(check_file_name,"r"))==NULL) +fatal(_("! Cannot open output file "),check_file_name); + + +/*100:*/ +#line 794 "cwebdir/ctang-w2c.ch" + +do{ +x_size= fread(x,1,BUFSIZ,C_file); +y_size= fread(y,1,BUFSIZ,check_file); +comparison= (x_size==y_size); +if(comparison)comparison= !memcmp(x,y,x_size); +}while(comparison&&!feof(C_file)&&!feof(check_file)); + +/*:100*/ +#line 787 "cwebdir/ctang-w2c.ch" + + +fclose(C_file);C_file= NULL; +fclose(check_file);check_file= NULL; + +/*:99*/ +#line 774 "cwebdir/ctang-w2c.ch" + +/*101:*/ +#line 805 "cwebdir/ctang-w2c.ch" + +if(comparison) +remove(check_file_name); +else{ +remove(C_file_name); +rename(check_file_name,C_file_name); +} + +/*:101*/ +#line 775 "cwebdir/ctang-w2c.ch" + +}else +rename(check_file_name,C_file_name); + +/*:98*/ +#line 311 "cwebdir/ctang-w2c.ch" for(an_output_file= end_output_files;an_output_file> cur_out_file;){ an_output_file--; sprint_section_name(output_file_name,*an_output_file); -fclose(C_file); -#line 302 "cwebdir/ctang-w2c.ch" -C_file= fopen(output_file_name,"wb"); -#line 578 "cwebdir/ctangle.w" -if(C_file==0)fatal("! Cannot open output file:",output_file_name); +if((C_file= fopen(check_file_name,"wb"))==NULL) +fatal(_("! Cannot open output file "),check_file_name); printf("\n(%s)",output_file_name);update_terminal; cur_line= 1; @@ -690,20 +822,80 @@ cur_repl= (text_pointer)cur_name->equiv; cur_byte= cur_repl->tok_start; cur_end= (cur_repl+1)->tok_start; while(stack_ptr> stack)get_output(); -flush_buffer(); +flush_buffer();fclose(C_file);C_file= NULL; +/*102:*/ +#line 813 "cwebdir/ctang-w2c.ch" + +if((C_file= fopen(output_file_name,"r"))!=NULL){ +/*99:*/ +#line 779 "cwebdir/ctang-w2c.ch" + +char x[BUFSIZ],y[BUFSIZ]; +int x_size,y_size,comparison; + +if((check_file= fopen(check_file_name,"r"))==NULL) +fatal(_("! Cannot open output file "),check_file_name); + + +/*100:*/ +#line 794 "cwebdir/ctang-w2c.ch" + +do{ +x_size= fread(x,1,BUFSIZ,C_file); +y_size= fread(y,1,BUFSIZ,check_file); +comparison= (x_size==y_size); +if(comparison)comparison= !memcmp(x,y,x_size); +}while(comparison&&!feof(C_file)&&!feof(check_file)); + +/*:100*/ +#line 787 "cwebdir/ctang-w2c.ch" + + +fclose(C_file);C_file= NULL; +fclose(check_file);check_file= NULL; + +/*:99*/ +#line 815 "cwebdir/ctang-w2c.ch" + +/*103:*/ +#line 822 "cwebdir/ctang-w2c.ch" + +if(comparison) +remove(check_file_name); +else{ +remove(output_file_name); +rename(check_file_name,output_file_name); +} + +/*:103*/ +#line 816 "cwebdir/ctang-w2c.ch" + +}else +rename(check_file_name,output_file_name); + +/*:102*/ +#line 327 "cwebdir/ctang-w2c.ch" + } +strcpy(check_file_name,""); +#line 590 "cwebdir/ctangle.w" -/*:42*/ +/*:43*/ #line 563 "cwebdir/ctangle.w" ; -if(show_happiness)printf("\nDone."); +#line 283 "cwebdir/ctang-w2c.ch" +if(show_happiness){ +if(show_progress)new_line; +fputs(_("Done."),stdout); +} +#line 565 "cwebdir/ctangle.w" } } -/*:41*//*46:*/ +/*:42*//*47:*/ #line 605 "cwebdir/ctangle.w" -#line 319 "cwebdir/ctang-w2c.ch" +#line 342 "cwebdir/ctang-w2c.ch" static void output_defs(void) #line 608 "cwebdir/ctangle.w" @@ -729,7 +921,9 @@ a= (a-0200)*0400+*cur_byte++; if(a<024000){ cur_val= a;out_char(identifier); } -else if(a<050000){confusion("macro defs have strange char");} +#line 349 "cwebdir/ctang-w2c.ch" +else if(a<050000){confusion(_("macro defs have strange char"));} +#line 631 "cwebdir/ctangle.w" else{ cur_val= a-050000;cur_section= cur_val;out_char(section_number); } @@ -742,12 +936,13 @@ flush_buffer(); pop_level(0); } -/*:46*//*48:*/ +/*:47*//*49:*/ #line 651 "cwebdir/ctangle.w" +#line 363 "cwebdir/ctang-w2c.ch" static void -#line 337 "cwebdir/ctang-w2c.ch" - out_char(eight_bits cur_char) +out_char( +eight_bits cur_char) #line 655 "cwebdir/ctangle.w" { char*j,*k; @@ -756,7 +951,7 @@ switch(cur_char){ case'\n':if(protect&&out_state!=verbatim)C_putc(' '); if(protect||out_state==verbatim)C_putc('\\'); flush_buffer();if(out_state!=verbatim)out_state= normal;break; -/*52:*/ +/*53:*/ #line 719 "cwebdir/ctangle.w" case identifier: @@ -771,10 +966,10 @@ j++; } out_state= num_or_id;break; -/*:52*/ +/*:53*/ #line 662 "cwebdir/ctangle.w" ; -/*53:*/ +/*54:*/ #line 732 "cwebdir/ctangle.w" case section_number: @@ -801,11 +996,11 @@ C_printf("%s","\"\n"); } break; -/*:53*/ +/*:54*/ #line 663 "cwebdir/ctangle.w" ; -/*49:*/ -#line 681 "cwebdir/ctangle.w" +/*50:*/ +#line 388 "cwebdir/ctang-w2c.ch" case plus_plus:C_putc('+');C_putc('+');out_state= normal;break; case minus_minus:C_putc('-');C_putc('-');out_state= normal;break; @@ -815,7 +1010,7 @@ case eq_eq:C_putc('=');C_putc('=');out_state= normal;break; case lt_lt:C_putc('<');C_putc('<');out_state= normal;break; case gt_eq:C_putc('>');C_putc('=');out_state= normal;break; case lt_eq:C_putc('<');C_putc('=');out_state= normal;break; -case not_eq:C_putc('!');C_putc('=');out_state= normal;break; +case non_eq:C_putc('!');C_putc('=');out_state= normal;break; case and_and:C_putc('&');C_putc('&');out_state= normal;break; case or_or:C_putc('|');C_putc('|');out_state= normal;break; case dot_dot_dot:C_putc('.');C_putc('.');C_putc('.');out_state= normal; @@ -824,8 +1019,9 @@ case colon_colon:C_putc(':');C_putc(':');out_state= normal;break; case period_ast:C_putc('.');C_putc('*');out_state= normal;break; case minus_gt_ast:C_putc('-');C_putc('>');C_putc('*');out_state= normal; break; +#line 699 "cwebdir/ctangle.w" -/*:49*/ +/*:50*/ #line 664 "cwebdir/ctangle.w" ; case'=':case'>':C_putc(cur_char);C_putc(' '); @@ -844,10 +1040,11 @@ default:C_putc(cur_char);out_state= normal;break; } } -/*:48*//*57:*/ +#line 388 "cwebdir/ctang-w2c.ch" +/*:49*//*58:*/ #line 813 "cwebdir/ctangle.w" -#line 346 "cwebdir/ctang-w2c.ch" +#line 412 "cwebdir/ctang-w2c.ch" static eight_bits skip_ahead(void) #line 816 "cwebdir/ctangle.w" @@ -864,12 +1061,12 @@ if(c!=ignore||*(loc-1)=='>')return(c); } } -/*:57*//*59:*/ +/*:58*//*60:*/ #line 848 "cwebdir/ctangle.w" -#line 356 "cwebdir/ctang-w2c.ch" -static int -skip_comment(boolean is_long_comment) +#line 420 "cwebdir/ctang-w2c.ch" +static boolean skip_comment( +boolean is_long_comment) #line 851 "cwebdir/ctangle.w" { char c; @@ -878,7 +1075,9 @@ if(loc> limit){ if(is_long_comment){ if(get_line())return(comment_continues= 1); else{ -err_print("! Input ended in mid-comment"); +#line 427 "cwebdir/ctang-w2c.ch" +err_print(_("! Input ended in mid-comment")); +#line 859 "cwebdir/ctangle.w" return(comment_continues= 0); } @@ -891,7 +1090,9 @@ loc++;return(comment_continues= 0); } if(c=='@'){ if(ccode[(eight_bits)*loc]==new_section){ -err_print("! Section name ended in mid-comment");loc--; +#line 433 "cwebdir/ctang-w2c.ch" +err_print(_("! Section name ended in mid-comment"));loc--; +#line 872 "cwebdir/ctangle.w" return(comment_continues= 0); } @@ -900,10 +1101,10 @@ else loc++; } } -/*:59*//*62:*/ +/*:60*//*63:*/ #line 900 "cwebdir/ctangle.w" -#line 373 "cwebdir/ctang-w2c.ch" +#line 440 "cwebdir/ctang-w2c.ch" static eight_bits get_next(void) #line 903 "cwebdir/ctangle.w" @@ -916,7 +1117,7 @@ if(preprocessing&&*(limit-1)!='\\')preprocessing= 0; if(get_line()==0)return(new_section); else if(print_where&&!no_where){ print_where= 0; -/*76:*/ +/*77:*/ #line 1225 "cwebdir/ctangle.w" store_two_bytes(0150000); @@ -928,12 +1129,12 @@ id_first= cur_file_name; store_two_bytes((sixteen_bits)cur_line); } id_loc= id_first+strlen(id_first); -#line 410 "cwebdir/ctang-w2c.ch" +#line 582 "cwebdir/ctang-w2c.ch" {int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200); app_repl(a_l%0400);} #line 1237 "cwebdir/ctangle.w" -/*:76*/ +/*:77*/ #line 912 "cwebdir/ctangle.w" ; } @@ -947,7 +1148,7 @@ if(comment_continues)return('\n'); else continue; } loc++; -if(xisdigit(c)||c=='.')/*65:*/ +if(xisdigit(c)||c=='.')/*66:*/ #line 978 "cwebdir/ctangle.w" { id_first= loc-1; @@ -972,27 +1173,38 @@ id_loc= loc; return(constant); } -/*:65*/ +/*:66*/ #line 924 "cwebdir/ctangle.w" -else if(c=='\''||c=='"'||(c=='L'&&(*loc=='\''||*loc=='"'))) -/*66:*/ +#line 447 "cwebdir/ctang-w2c.ch" +else if(c=='\''||c=='"' +||((c=='L'||c=='u'||c=='U')&&(*loc=='\''||*loc=='"')) +||((c=='u'&&*loc=='8')&&(*(loc+1)=='\''||*(loc+1)=='"'))) +#line 926 "cwebdir/ctangle.w" +/*67:*/ #line 1006 "cwebdir/ctangle.w" { char delim= c; id_first= section_text+1; id_loc= section_text;*++id_loc= delim; -if(delim=='L'){ +#line 478 "cwebdir/ctang-w2c.ch" +if(delim=='L'||delim=='u'||delim=='U'){ +if(delim=='u'&&*loc=='8'){*++id_loc= *loc++;} delim= *loc++;*++id_loc= delim; } +#line 1013 "cwebdir/ctangle.w" while(1){ if(loc>=limit){ if(*(limit-1)!='\\'){ -err_print("! String didn't end");loc= limit;break; +#line 487 "cwebdir/ctang-w2c.ch" +err_print(_("! String didn't end"));loc= limit;break; +#line 1017 "cwebdir/ctangle.w" } if(get_line()==0){ -err_print("! Input ended in middle of string");loc= buffer;break; +#line 493 "cwebdir/ctang-w2c.ch" +err_print(_("! Input ended in middle of string"));loc= buffer;break; +#line 1021 "cwebdir/ctangle.w" } else if(++id_loc<=section_text_end)*id_loc= '\n'; @@ -1010,7 +1222,9 @@ c= *loc++; if(++id_loc<=section_text_end)*id_loc= c; } if(id_loc>=section_text_end){ -printf("\n! String too long: "); +#line 499 "cwebdir/ctang-w2c.ch" +fputs(_("\n! String too long: "),stdout); +#line 1039 "cwebdir/ctangle.w" term_write(section_text+1,25); err_print("..."); @@ -1019,55 +1233,62 @@ id_loc++; return(string); } -/*:66*/ +/*:67*/ #line 926 "cwebdir/ctangle.w" else if(isalpha(c)||isxalpha(c)||ishigh(c)) -/*64:*/ +/*65:*/ #line 972 "cwebdir/ctangle.w" { id_first= --loc; -#line 390 "cwebdir/ctang-w2c.ch" -while(isalpha((unsigned char)*++loc)||isdigit((unsigned char)*loc)||isxalpha(*loc)||ishigh(*loc)); +#line 469 "cwebdir/ctang-w2c.ch" +while(isalpha((eight_bits)*++loc)||isdigit((eight_bits)*loc) +||isxalpha((eight_bits)*loc)||ishigh((eight_bits)*loc)); #line 975 "cwebdir/ctangle.w" id_loc= loc;return(identifier); } -/*:64*/ +/*:65*/ #line 928 "cwebdir/ctangle.w" -else if(c=='@')/*67:*/ +else if(c=='@')/*68:*/ #line 1050 "cwebdir/ctangle.w" { c= ccode[(eight_bits)*loc++]; switch(c){ case ignore:continue; -case translit_code:err_print("! Use @l in limbo only");continue; +#line 505 "cwebdir/ctang-w2c.ch" +case translit_code:err_print(_("! Use @l in limbo only"));continue; +#line 1055 "cwebdir/ctangle.w" case control_text:while((c= skip_ahead())=='@'); if(*(loc-1)!='>') -err_print("! Double @ should be used in control text"); +#line 511 "cwebdir/ctang-w2c.ch" +err_print(_("! Double @ should be used in control text")); +#line 1060 "cwebdir/ctangle.w" continue; case section_name: cur_section_name_char= *(loc-1); -/*69:*/ +/*70:*/ #line 1098 "cwebdir/ctangle.w" { char*k; -/*71:*/ +/*72:*/ #line 1118 "cwebdir/ctangle.w" k= section_text; while(1){ if(loc> limit&&get_line()==0){ -err_print("! Input ended in section name"); +#line 529 "cwebdir/ctang-w2c.ch" +err_print(_("! Input ended in section name")); +#line 1123 "cwebdir/ctangle.w" loc= buffer+1;break; } c= *loc; -/*72:*/ +/*73:*/ #line 1142 "cwebdir/ctangle.w" if(c=='@'){ @@ -1076,17 +1297,21 @@ if(c=='>'){ loc+= 2;break; } if(ccode[(eight_bits)c]==new_section){ -err_print("! Section name didn't end");break; +#line 541 "cwebdir/ctang-w2c.ch" +err_print(_("! Section name didn't end"));break; +#line 1150 "cwebdir/ctangle.w" } if(ccode[(eight_bits)c]==section_name){ -err_print("! Nesting of section names not allowed");break; +#line 547 "cwebdir/ctang-w2c.ch" +err_print(_("! Nesting of section names not allowed"));break; +#line 1154 "cwebdir/ctangle.w" } *(++k)= '@';loc++; } -/*:72*/ +/*:73*/ #line 1127 "cwebdir/ctangle.w" ; loc++;if(k<section_text_end)k++; @@ -1096,21 +1321,23 @@ c= ' ';if(*(k-1)==' ')k--; *k= c; } if(k>=section_text_end){ -printf("\n! Section name too long: "); +#line 535 "cwebdir/ctang-w2c.ch" +fputs(_("\n! Section name too long: "),stdout); +#line 1136 "cwebdir/ctangle.w" term_write(section_text+1,25); printf("...");mark_harmless; } if(*k==' '&&k> section_text)k--; -/*:71*/ +/*:72*/ #line 1100 "cwebdir/ctangle.w" ; if(k-section_text> 3&&strncmp(k-2,"...",3)==0) cur_section_name= section_lookup(section_text+1,k-3,1); else cur_section_name= section_lookup(section_text+1,k,0); if(cur_section_name_char=='(') -/*39:*/ +/*40:*/ #line 516 "cwebdir/ctangle.w" { @@ -1121,35 +1348,39 @@ if(an_output_file==end_output_files){ if(cur_out_file> output_files) *--cur_out_file= cur_section_name; else{ -overflow("output files"); +#line 245 "cwebdir/ctang-w2c.ch" +overflow(_("output files")); +#line 526 "cwebdir/ctangle.w" } } } -/*:39*/ +/*:40*/ #line 1106 "cwebdir/ctangle.w" ; return(section_name); } -/*:69*/ +/*:70*/ #line 1064 "cwebdir/ctangle.w" ; -case string:/*73:*/ +case string:/*74:*/ #line 1164 "cwebdir/ctangle.w" { id_first= loc++;*(limit+1)= '@';*(limit+2)= '>'; while(*loc!='@'||*(loc+1)!='>')loc++; -if(loc>=limit)err_print("! Verbatim string didn't end"); +#line 553 "cwebdir/ctang-w2c.ch" +if(loc>=limit)err_print(_("! Verbatim string didn't end")); +#line 1168 "cwebdir/ctangle.w" id_loc= loc;loc+= 2; return(string); } -/*:73*/ +/*:74*/ #line 1065 "cwebdir/ctangle.w" ; -case ord:/*68:*/ +case ord:/*69:*/ #line 1077 "cwebdir/ctangle.w" id_first= loc; @@ -1159,27 +1390,31 @@ if(*++loc=='\'')loc++; while(*loc!='\''){ if(*loc=='@'){ if(*(loc+1)!='@') -err_print("! Double @ should be used in ASCII constant"); +#line 517 "cwebdir/ctang-w2c.ch" +err_print(_("! Double @ should be used in ASCII constant")); +#line 1086 "cwebdir/ctangle.w" else loc++; } loc++; if(loc> limit){ -err_print("! String didn't end");loc= limit-1;break; +#line 523 "cwebdir/ctang-w2c.ch" +err_print(_("! String didn't end"));loc= limit-1;break; +#line 1092 "cwebdir/ctangle.w" } } loc++; return(ord); -/*:68*/ +/*:69*/ #line 1066 "cwebdir/ctangle.w" ; default:return(c); } } -/*:67*/ +/*:68*/ #line 929 "cwebdir/ctangle.w" else if(xisspace(c)){ @@ -1188,15 +1423,15 @@ if(!preprocessing||loc> limit)continue; else return(' '); } else if(c=='#'&&loc==buffer+1)preprocessing= 1; -mistake:/*63:*/ +mistake:/*64:*/ #line 950 "cwebdir/ctangle.w" switch(c){ case'+':if(*loc=='+')compress(plus_plus);break; case'-':if(*loc=='-'){compress(minus_minus);} -#line 383 "cwebdir/ctang-w2c.ch" -else if(*loc=='>'){if(*(loc+1)=='*'){loc++;compress(minus_gt_ast);} -else compress(minus_gt);}break; +#line 456 "cwebdir/ctang-w2c.ch" +else{if(*loc=='>'){if(*(loc+1)=='*'){loc++;compress(minus_gt_ast);} +else compress(minus_gt);}}break; #line 956 "cwebdir/ctangle.w" case'.':if(*loc=='*'){compress(period_ast);} else if(*loc=='.'&&*(loc+1)=='.'){ @@ -1211,26 +1446,29 @@ 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; -case'!':if(*loc=='=')compress(not_eq);break; +#line 463 "cwebdir/ctang-w2c.ch" +case'!':if(*loc=='=')compress(non_eq);break; +#line 970 "cwebdir/ctangle.w" } -/*:63*/ +/*:64*/ #line 936 "cwebdir/ctangle.w" return(c); } } -/*:62*//*75:*/ +/*:63*//*76:*/ #line 1199 "cwebdir/ctangle.w" -#line 400 "cwebdir/ctang-w2c.ch" +#line 567 "cwebdir/ctang-w2c.ch" static void -scan_repl(eight_bits t) +scan_repl( +eight_bits t) #line 1203 "cwebdir/ctangle.w" { sixteen_bits a; -if(t==section_name){/*76:*/ +if(t==section_name){/*77:*/ #line 1225 "cwebdir/ctangle.w" store_two_bytes(0150000); @@ -1242,16 +1480,16 @@ id_first= cur_file_name; store_two_bytes((sixteen_bits)cur_line); } id_loc= id_first+strlen(id_first); -#line 410 "cwebdir/ctang-w2c.ch" +#line 582 "cwebdir/ctang-w2c.ch" {int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200); app_repl(a_l%0400);} #line 1237 "cwebdir/ctangle.w" -/*:76*/ +/*:77*/ #line 1205 "cwebdir/ctangle.w" ;} while(1)switch(a= get_next()){ -/*77:*/ +/*78:*/ #line 1238 "cwebdir/ctangle.w" case identifier:a= id_lookup(id_first,id_loc,0)-name_dir; @@ -1259,26 +1497,28 @@ app_repl((a/0400)+0200); app_repl(a%0400);break; case section_name:if(t!=section_name)goto done; else{ -/*78:*/ +/*79:*/ #line 1271 "cwebdir/ctangle.w" { char*try_loc= loc; while(*try_loc==' '&&try_loc<limit)try_loc++; if(*try_loc=='+'&&try_loc<limit)try_loc++; while(*try_loc==' '&&try_loc<limit)try_loc++; -if(*try_loc=='=')err_print("! Missing `@ ' before a named section"); +#line 601 "cwebdir/ctang-w2c.ch" +if(*try_loc=='=')err_print(_("! Missing `@ ' before a named section")); +#line 1277 "cwebdir/ctangle.w" } -/*:78*/ +/*:79*/ #line 1244 "cwebdir/ctangle.w" ; a= cur_section_name-name_dir; app_repl((a/0400)+0250); app_repl(a%0400); -/*76:*/ +/*77:*/ #line 1225 "cwebdir/ctangle.w" store_two_bytes(0150000); @@ -1290,23 +1530,25 @@ id_first= cur_file_name; store_two_bytes((sixteen_bits)cur_line); } id_loc= id_first+strlen(id_first); -#line 410 "cwebdir/ctang-w2c.ch" +#line 582 "cwebdir/ctang-w2c.ch" {int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200); app_repl(a_l%0400);} #line 1237 "cwebdir/ctangle.w" -/*:76*/ +/*:77*/ #line 1248 "cwebdir/ctangle.w" ;break; } -case output_defs_code:if(t!=section_name)err_print("! Misplaced @h"); +#line 589 "cwebdir/ctang-w2c.ch" +case output_defs_code:if(t!=section_name)err_print(_("! Misplaced @h")); +#line 1251 "cwebdir/ctangle.w" else{ output_defs_seen= 1; a= output_defs_flag; app_repl((a/0400)+0200); app_repl(a%0400); -/*76:*/ +/*77:*/ #line 1225 "cwebdir/ctangle.w" store_two_bytes(0150000); @@ -1318,36 +1560,38 @@ id_first= cur_file_name; store_two_bytes((sixteen_bits)cur_line); } id_loc= id_first+strlen(id_first); -#line 410 "cwebdir/ctang-w2c.ch" +#line 582 "cwebdir/ctang-w2c.ch" {int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200); app_repl(a_l%0400);} #line 1237 "cwebdir/ctangle.w" -/*:76*/ +/*:77*/ #line 1257 "cwebdir/ctangle.w" ; } break; case constant:case string: -/*79:*/ +/*80:*/ #line 1282 "cwebdir/ctangle.w" app_repl(a); while(id_first<id_loc){ if(*id_first=='@'){ if(*(id_first+1)=='@')id_first++; -else err_print("! Double @ should be used in string"); +#line 607 "cwebdir/ctang-w2c.ch" +else err_print(_("! Double @ should be used in string")); +#line 1288 "cwebdir/ctangle.w" } app_repl(*id_first++); } app_repl(a);break; -/*:79*/ +/*:80*/ #line 1261 "cwebdir/ctangle.w" ; case ord: -/*80:*/ +/*81:*/ #line 1298 "cwebdir/ctangle.w" { int c= (eight_bits)*id_first; @@ -1374,22 +1618,24 @@ case'x': if(xisdigit(*(id_first+1)))c= *(++id_first)-'0'; else if(xisxdigit(*(id_first+1))){ ++id_first; -#line 419 "cwebdir/ctang-w2c.ch" -c= toupper((unsigned char)*id_first)-'A'+10; +#line 613 "cwebdir/ctang-w2c.ch" +c= toupper((eight_bits)*id_first)-'A'+10; #line 1324 "cwebdir/ctangle.w" } if(xisdigit(*(id_first+1)))c= 16*c+*(++id_first)-'0'; else if(xisxdigit(*(id_first+1))){ ++id_first; -#line 424 "cwebdir/ctang-w2c.ch" -c= 16*c+toupper((unsigned char)*id_first)-'A'+10; +#line 619 "cwebdir/ctang-w2c.ch" +c= 16*c+toupper((eight_bits)*id_first)-'A'+10; #line 1329 "cwebdir/ctangle.w" } break; case'\\':c= '\\';break; case'\'':c= '\'';break; case'\"':c= '\"';break; -default:err_print("! Unrecognized escape sequence"); +#line 625 "cwebdir/ctang-w2c.ch" +default:err_print(_("! Unrecognized escape sequence")); +#line 1335 "cwebdir/ctangle.w" } } @@ -1402,17 +1648,19 @@ app_repl(constant); } break; -/*:80*/ +/*:81*/ #line 1263 "cwebdir/ctangle.w" ; case definition:case format_code:case begin_C:if(t!=section_name)goto done; else{ -err_print("! @d, @f and @c are ignored in C text");continue; +#line 595 "cwebdir/ctang-w2c.ch" +err_print(_("! @d, @f and @c are ignored in C text"));continue; +#line 1267 "cwebdir/ctangle.w" } case new_section:goto done; -/*:77*/ +/*:78*/ #line 1210 "cwebdir/ctangle.w" case')':app_repl(a); @@ -1421,14 +1669,16 @@ break; default:app_repl(a); } done:next_control= (eight_bits)a; -if(text_ptr> text_info_end)overflow("text"); +#line 575 "cwebdir/ctang-w2c.ch" +if(text_ptr> text_info_end)overflow(_("text")); +#line 1218 "cwebdir/ctangle.w" cur_text= text_ptr;(++text_ptr)->tok_start= tok_ptr; } -/*:75*//*82:*/ +/*:76*//*83:*/ #line 1360 "cwebdir/ctangle.w" -#line 433 "cwebdir/ctang-w2c.ch" +#line 632 "cwebdir/ctang-w2c.ch" static void scan_section(void) #line 1363 "cwebdir/ctangle.w" @@ -1442,7 +1692,7 @@ printf("*%d",section_count);update_terminal; } next_control= 0; while(1){ -/*83:*/ +/*84:*/ #line 1399 "cwebdir/ctangle.w" while(next_control<definition) @@ -1451,16 +1701,18 @@ if((next_control= skip_ahead())==section_name){ loc-= 2;next_control= get_next(); } -/*:83*/ +/*:84*/ #line 1374 "cwebdir/ctangle.w" ; if(next_control==definition){ -/*84:*/ +/*85:*/ #line 1406 "cwebdir/ctangle.w" { while((next_control= get_next())=='\n'); if(next_control!=identifier){ -err_print("! Definition flushed, must start with identifier"); +#line 639 "cwebdir/ctang-w2c.ch" +err_print(_("! Definition flushed, must start with identifier")); +#line 1410 "cwebdir/ctangle.w" continue; } @@ -1474,7 +1726,7 @@ scan_repl(macro); cur_text->text_link= 0; } -/*:84*/ +/*:85*/ #line 1376 "cwebdir/ctangle.w" continue; @@ -1484,14 +1736,14 @@ p= name_dir;break; } if(next_control==section_name){ p= cur_section_name; -/*85:*/ +/*86:*/ #line 1431 "cwebdir/ctangle.w" while((next_control= get_next())=='+'); if(next_control!='='&&next_control!=eq_eq) continue; -/*:85*/ +/*:86*/ #line 1384 "cwebdir/ctangle.w" ; break; @@ -1499,26 +1751,28 @@ break; return; } no_where= print_where= 0; -/*86:*/ +/*87:*/ #line 1436 "cwebdir/ctangle.w" -/*87:*/ +/*88:*/ #line 1441 "cwebdir/ctangle.w" store_two_bytes((sixteen_bits)(0150000+section_count)); -/*:87*/ +/*:88*/ #line 1437 "cwebdir/ctangle.w" ; scan_repl(section_name); -/*88:*/ +/*89:*/ #line 1445 "cwebdir/ctangle.w" if(p==name_dir||p==0){ (last_unnamed)->text_link= cur_text-text_info;last_unnamed= cur_text; } -else if(p->equiv==(char*)text_info)p->equiv= (char*)cur_text; +#line 645 "cwebdir/ctang-w2c.ch" +else if(p->equiv==(void*)text_info)p->equiv= (void*)cur_text; +#line 1450 "cwebdir/ctangle.w" else{ q= (text_pointer)p->equiv; @@ -1529,19 +1783,19 @@ q->text_link= cur_text-text_info; cur_text->text_link= section_flag; -/*:88*/ +/*:89*/ #line 1439 "cwebdir/ctangle.w" ; -/*:86*/ +/*:87*/ #line 1390 "cwebdir/ctangle.w" ; } -/*:82*//*90:*/ +/*:83*//*91:*/ #line 1463 "cwebdir/ctangle.w" -#line 451 "cwebdir/ctang-w2c.ch" +#line 658 "cwebdir/ctang-w2c.ch" static void phase_one(void){ #line 1466 "cwebdir/ctangle.w" @@ -1554,10 +1808,10 @@ check_complete(); phase= 2; } -/*:90*//*92:*/ +/*:91*//*93:*/ #line 1481 "cwebdir/ctangle.w" -#line 469 "cwebdir/ctang-w2c.ch" +#line 672 "cwebdir/ctang-w2c.ch" static void skip_limbo(void) #line 1484 "cwebdir/ctangle.w" @@ -1571,14 +1825,16 @@ if(loc++<=limit){ c= *loc++; if(ccode[(eight_bits)c]==new_section)break; switch(ccode[(eight_bits)c]){ -case translit_code:/*93:*/ +case translit_code:/*94:*/ #line 1510 "cwebdir/ctangle.w" while(xisspace(*loc)&&loc<limit)loc++; loc+= 3; if(loc> limit||!xisxdigit(*(loc-3))||!xisxdigit(*(loc-2)) ||(*(loc-3)>='0'&&*(loc-3)<='7')||!xisspace(*(loc-1))) -err_print("! Improper hex number following @l"); +#line 691 "cwebdir/ctang-w2c.ch" +err_print(_("! Improper hex number following @l")); +#line 1516 "cwebdir/ctangle.w" else{ unsigned i; @@ -1588,48 +1844,58 @@ while(xisspace(*loc)&&loc<limit)loc++; beg= loc; while(loc<limit&&(xisalpha(*loc)||xisdigit(*loc)||*loc=='_'))loc++; if(loc-beg>=translit_length) -err_print("! Replacement string in @l too long"); +#line 697 "cwebdir/ctang-w2c.ch" +err_print(_("! Replacement string in @l too long")); +#line 1526 "cwebdir/ctangle.w" else{ -strncpy(translit[i-0200],beg,loc-beg); +#line 703 "cwebdir/ctang-w2c.ch" +strncpy(translit[i-0200],beg,(size_t)(loc-beg)); +#line 1529 "cwebdir/ctangle.w" translit[i-0200][loc-beg]= '\0'; } } -/*:93*/ +/*:94*/ #line 1494 "cwebdir/ctangle.w" ;break; case format_code:case'@':break; case control_text:if(c=='q'||c=='Q'){ while((c= skip_ahead())=='@'); if(*(loc-1)!='>') -err_print("! Double @ should be used in control text"); +#line 679 "cwebdir/ctang-w2c.ch" +err_print(_("! Double @ should be used in control text")); +#line 1500 "cwebdir/ctangle.w" break; } -default:err_print("! Double @ should be used in limbo"); +#line 685 "cwebdir/ctang-w2c.ch" +default:err_print(_("! Double @ should be used in limbo")); +#line 1504 "cwebdir/ctangle.w" } } } } -/*:92*//*94:*/ +/*:93*//*95:*/ #line 1536 "cwebdir/ctangle.w" +#line 710 "cwebdir/ctang-w2c.ch" void -#line 478 "cwebdir/ctang-w2c.ch" - print_stats(void){ -#line 1539 "cwebdir/ctangle.w" -printf("\nMemory usage statistics:\n"); -printf("%ld names (out of %ld)\n", +print_stats(void){ +#line 724 "cwebdir/ctang-w2c.ch" +puts(_("\nMemory usage statistics:")); +printf(_("%ld names (out of %ld)\n"), (long)(name_ptr-name_dir),(long)max_names); -printf("%ld replacement texts (out of %ld)\n", +printf(_("%ld replacement texts (out of %ld)\n"), (long)(text_ptr-text_info),(long)max_texts); -printf("%ld bytes (out of %ld)\n", +printf(_("%ld bytes (out of %ld)\n"), (long)(byte_ptr-byte_mem),(long)max_bytes); -printf("%ld tokens (out of %ld)\n", +printf(_("%ld tokens (out of %ld)\n"), +#line 1547 "cwebdir/ctangle.w" (long)(tok_ptr-tok_mem),(long)max_toks); } -/*:94*/ +#line 737 "cwebdir/ctang-w2c.ch" +/*:95*/ |