summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/ctangleboot.cin
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-01-06 23:19:16 +0000
committerKarl Berry <karl@freefriends.org>2019-01-06 23:19:16 +0000
commit976f2b9b61a086f8594f6bfe6dbea42faa56edb2 (patch)
tree9e620153df80a27b0304ae9827fa0f69a02191e0 /Build/source/texk/web2c/ctangleboot.cin
parentb109e3c47399f4fdfc7805b8f9168c7452f78e96 (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.cin830
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*/