summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/cwebdir/ctangle.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/cwebdir/ctangle.c')
-rw-r--r--Build/source/texk/web2c/cwebdir/ctangle.c384
1 files changed, 202 insertions, 182 deletions
diff --git a/Build/source/texk/web2c/cwebdir/ctangle.c b/Build/source/texk/web2c/cwebdir/ctangle.c
index d955da9d573..5f3f9e1b76d 100644
--- a/Build/source/texk/web2c/cwebdir/ctangle.c
+++ b/Build/source/texk/web2c/cwebdir/ctangle.c
@@ -2,7 +2,7 @@
#line 66 "ctangle.w"
/*4:*/
-#line 46 "common.h"
+#line 44 "common.h"
#include <ctype.h>
#include <stdbool.h>
@@ -15,7 +15,7 @@
/*:4*/
#line 67 "ctangle.w"
-#define banner "This is CTANGLE (Version 4.2)" \
+#define banner "This is CTANGLE (Version 4.3)" \
#define ctangle false
#define cweave true \
@@ -36,12 +36,18 @@
#define period_ast 026
#define minus_gt_ast 027 \
-#define xisalpha(c) (isalpha((eight_bits) c) &&((eight_bits) c<0200) )
-#define xisdigit(c) (isdigit((eight_bits) c) &&((eight_bits) c<0200) )
-#define xisspace(c) (isspace((eight_bits) c) &&((eight_bits) c<0200) )
-#define xislower(c) (islower((eight_bits) c) &&((eight_bits) c<0200) )
-#define xisupper(c) (isupper((eight_bits) c) &&((eight_bits) c<0200) )
-#define xisxdigit(c) (isxdigit((eight_bits) c) &&((eight_bits) c<0200) ) \
+#define compress(c) if(loc++<=limit) return c \
+
+#define xisalpha(c) (isalpha((eight_bits) (c) ) &&((eight_bits) (c) <0200) )
+#define xisdigit(c) (isdigit((eight_bits) (c) ) &&((eight_bits) (c) <0200) )
+#define xisspace(c) (isspace((eight_bits) (c) ) &&((eight_bits) (c) <0200) )
+#define xislower(c) (islower((eight_bits) (c) ) &&((eight_bits) (c) <0200) )
+#define xisupper(c) (isupper((eight_bits) (c) ) &&((eight_bits) (c) <0200) )
+#define xisxdigit(c) (isxdigit((eight_bits) (c) ) &&((eight_bits) (c) <0200) )
+#define isxalpha(c) ((c) =='_'||(c) =='$') \
+
+#define ishigh(c) ((eight_bits) (c) > 0177) \
+ \
#define max_include_depth 10 \
@@ -76,10 +82,7 @@
#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 term_write(a,b) fflush(stdout) ,fwrite(a,sizeof(char) ,b,stdout) \
#define max_bytes 1000000 \
@@ -95,9 +98,11 @@
#define equiv equiv_or_xref \
+#define macro 0
#define section_flag max_texts \
#define string 02
+#define constant 03
#define join 0177
#define output_defs_flag (2*024000-1) \
@@ -117,9 +122,12 @@
#define verbatim 4 \
#define max_files 256
+#define C_printf(c,a) fprintf(C_file,c,a)
+#define C_putc(c) putc(c,C_file) \
+
#define translit_length 10 \
-#define ignore 0
+#define ignore 00
#define ord 0302
#define control_text 0303
#define translit_code 0304
@@ -130,23 +138,15 @@
#define section_name 0311
#define new_section 0312 \
-#define constant 03 \
-
-#define isxalpha(c) ((c) =='_'||(c) =='$') \
-
-#define ishigh(c) ((eight_bits) (c) > 0177) \
- \
-
-#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 keep_digit_separators flags['k'] \
+
#line 68 "ctangle.w"
/*3:*/
-#line 37 "common.h"
+#line 35 "common.h"
typedef bool boolean;
typedef uint8_t eight_bits;
@@ -163,7 +163,7 @@ extern char*id_first;
extern char*id_loc;
/*:5*//*6:*/
-#line 88 "common.h"
+#line 92 "common.h"
extern char buffer[];
extern char*buffer_end;
@@ -171,7 +171,7 @@ extern char*loc;
extern char*limit;
/*:6*//*7:*/
-#line 105 "common.h"
+#line 109 "common.h"
extern int include_depth;
extern FILE*file[];
@@ -187,7 +187,7 @@ extern boolean changing;
extern boolean web_file_open;
/*:7*//*9:*/
-#line 125 "common.h"
+#line 129 "common.h"
extern sixteen_bits section_count;
extern boolean changed_section[];
@@ -195,7 +195,7 @@ extern boolean change_pending;
extern boolean print_where;
/*:9*//*10:*/
-#line 139 "common.h"
+#line 143 "common.h"
typedef struct name_info{
char*byte_start;
@@ -220,12 +220,12 @@ extern hash_pointer hash_end;
extern hash_pointer h;
/*:10*//*12:*/
-#line 183 "common.h"
+#line 187 "common.h"
extern int history;
/*:12*//*14:*/
-#line 199 "common.h"
+#line 203 "common.h"
extern int argc;
extern char**argv;
@@ -236,7 +236,7 @@ extern char scn_file_name[];
extern boolean flags[];
/*:14*//*15:*/
-#line 215 "common.h"
+#line 217 "common.h"
extern FILE*C_file;
extern FILE*tex_file;
@@ -257,7 +257,7 @@ sixteen_bits text_link;
typedef text*text_pointer;
/*:19*//*31:*/
-#line 269 "ctangle.w"
+#line 273 "ctangle.w"
typedef struct{
eight_bits*end_field;
@@ -282,12 +282,12 @@ static eight_bits*tok_mem_end= tok_mem+max_toks-1;
static eight_bits*tok_ptr;
/*:20*//*26:*/
-#line 198 "ctangle.w"
+#line 199 "ctangle.w"
static text_pointer last_unnamed;
/*:26*//*32:*/
-#line 285 "ctangle.w"
+#line 289 "ctangle.w"
static output_state cur_state;
@@ -296,18 +296,18 @@ static stack_pointer stack_end= stack+stack_size;
static stack_pointer stack_ptr;
/*:32*//*37:*/
-#line 361 "ctangle.w"
+#line 365 "ctangle.w"
static int cur_val;
/*:37*//*42:*/
-#line 452 "ctangle.w"
+#line 456 "ctangle.w"
static eight_bits out_state;
static boolean protect;
/*:42*//*45:*/
-#line 483 "ctangle.w"
+#line 487 "ctangle.w"
static name_pointer output_files[max_files];
static name_pointer*cur_out_file,*end_output_files,*an_output_file;
@@ -315,33 +315,33 @@ static char cur_section_name_char;
static char output_file_name[longest_name+1];
/*:45*//*52:*/
-#line 582 "ctangle.w"
+#line 584 "ctangle.w"
static boolean output_defs_seen= false;
/*:52*//*57:*/
-#line 691 "ctangle.w"
+#line 696 "ctangle.w"
static char translit[128][translit_length];
/*:57*//*62:*/
-#line 770 "ctangle.w"
+#line 775 "ctangle.w"
static eight_bits ccode[256];
/*:62*//*66:*/
-#line 830 "ctangle.w"
+#line 835 "ctangle.w"
static boolean comment_continues= false;
/*:66*//*68:*/
-#line 869 "ctangle.w"
+#line 872 "ctangle.w"
static name_pointer cur_section_name;
static boolean no_where;
/*:68*//*82:*/
-#line 1182 "ctangle.w"
+#line 1189 "ctangle.w"
static text_pointer cur_text;
static eight_bits next_control;
@@ -350,19 +350,19 @@ static eight_bits next_control;
#line 71 "ctangle.w"
/*8:*/
-#line 119 "common.h"
+#line 123 "common.h"
extern boolean get_line(void);
extern void check_complete(void);
extern void reset_input(void);
/*:8*//*11:*/
-#line 162 "common.h"
+#line 166 "common.h"
extern boolean names_match(name_pointer,const char*,size_t,eight_bits);
extern name_pointer id_lookup(const char*,const char*,char);
-extern name_pointer section_lookup(char*,char*,int);
+extern name_pointer section_lookup(char*,char*,boolean);
extern void init_node(name_pointer);
extern void init_p(name_pointer,eight_bits);
extern void print_prefix_name(name_pointer);
@@ -370,7 +370,7 @@ extern void print_section_name(name_pointer);
extern void sprint_section_name(char*,name_pointer);
/*:11*//*13:*/
-#line 186 "common.h"
+#line 190 "common.h"
extern int wrap_up(void);
extern void err_print(const char*);
@@ -378,63 +378,63 @@ extern void fatal(const char*,const char*);
extern void overflow(const char*);
/*:13*//*16:*/
-#line 223 "common.h"
+#line 225 "common.h"
extern void common_init(void);
extern void print_stats(void);
/*:16*//*30:*/
-#line 241 "ctangle.w"
+#line 245 "ctangle.w"
static void store_two_bytes(sixteen_bits);
/*:30*//*35:*/
-#line 324 "ctangle.w"
+#line 328 "ctangle.w"
static void push_level(name_pointer);
static void pop_level(boolean);
/*:35*//*39:*/
-#line 397 "ctangle.w"
+#line 401 "ctangle.w"
static void get_output(void);
/*:39*//*44:*/
-#line 473 "ctangle.w"
+#line 477 "ctangle.w"
static void flush_buffer(void);
/*:44*//*49:*/
-#line 549 "ctangle.w"
+#line 551 "ctangle.w"
static void phase_two(void);
/*:49*//*53:*/
-#line 585 "ctangle.w"
+#line 587 "ctangle.w"
static void output_defs(void);
static void out_char(eight_bits);
/*:53*//*65:*/
-#line 810 "ctangle.w"
+#line 815 "ctangle.w"
static eight_bits skip_ahead(void);
static boolean skip_comment(boolean);
/*:65*//*70:*/
-#line 924 "ctangle.w"
+#line 922 "ctangle.w"
static eight_bits get_next(void);
/*:70*//*84:*/
-#line 1208 "ctangle.w"
+#line 1215 "ctangle.w"
static void scan_repl(eight_bits);
/*:84*//*91:*/
-#line 1379 "ctangle.w"
+#line 1396 "ctangle.w"
static void scan_section(void);
/*:91*//*99:*/
-#line 1460 "ctangle.w"
+#line 1477 "ctangle.w"
static void phase_one(void);
/*:99*//*101:*/
-#line 1494 "ctangle.w"
+#line 1511 "ctangle.w"
static void skip_limbo(void);
/*:101*/
@@ -463,16 +463,16 @@ text_ptr= text_info+1;text_ptr->tok_start= tok_mem;
init_node(name_dir);
/*:23*//*27:*/
-#line 201 "ctangle.w"
-last_unnamed= text_info;text_info->text_link= 0;
+#line 202 "ctangle.w"
+last_unnamed= text_info;text_info->text_link= macro;
/*:27*//*46:*/
-#line 493 "ctangle.w"
+#line 497 "ctangle.w"
cur_out_file= end_output_files= output_files+max_files;
/*:46*//*58:*/
-#line 694 "ctangle.w"
+#line 699 "ctangle.w"
{
int i;
@@ -480,7 +480,7 @@ for(i= 0;i<128;i++)sprintf(translit[i],"X%02X",(unsigned int)(128+i));
}
/*:58*//*63:*/
-#line 773 "ctangle.w"
+#line 778 "ctangle.w"
{
int c;
for(c= 0;c<256;c++)ccode[c]= ignore;
@@ -500,7 +500,7 @@ ccode['\'']= ord;
}
/*:63*//*78:*/
-#line 1103 "ctangle.w"
+#line 1111 "ctangle.w"
section_text[0]= ' ';
/*:78*/
@@ -539,7 +539,7 @@ void
init_p(name_pointer p,eight_bits t){(void)p;(void)t;}
/*:25*//*29:*/
-#line 231 "ctangle.w"
+#line 235 "ctangle.w"
static void
store_two_bytes(
@@ -551,7 +551,7 @@ if(tok_ptr+2> tok_mem_end)overflow("token");
}
/*:29*//*34:*/
-#line 309 "ctangle.w"
+#line 313 "ctangle.w"
static void
push_level(
@@ -568,7 +568,7 @@ cur_section= 0;
}
/*:34*//*36:*/
-#line 332 "ctangle.w"
+#line 336 "ctangle.w"
static void
pop_level(
@@ -584,7 +584,7 @@ if(stack_ptr> stack)cur_state= *stack_ptr;
}
/*:36*//*38:*/
-#line 368 "ctangle.w"
+#line 372 "ctangle.w"
static void
get_output(void)
@@ -607,7 +607,7 @@ switch(a/024000){
case 0:cur_val= a;out_char(identifier);break;
case 1:if(a==output_defs_flag)output_defs();
else/*40:*/
-#line 402 "ctangle.w"
+#line 406 "ctangle.w"
{
a-= 024000;
@@ -621,7 +621,7 @@ goto restart;
}
/*:40*/
-#line 389 "ctangle.w"
+#line 393 "ctangle.w"
break;
default:cur_val= a-050000;if(cur_val> 0)cur_section= cur_val;
@@ -631,14 +631,14 @@ out_char(section_number);
}
/*:38*//*43:*/
-#line 460 "ctangle.w"
+#line 464 "ctangle.w"
static void
flush_buffer(void)
{
C_putc('\n');
if(cur_line%100==0&&show_progress){
-printf(".");
+putchar('.');
if(cur_line%500==0)printf("%d",cur_line);
update_terminal;
}
@@ -646,31 +646,31 @@ cur_line++;
}
/*:43*//*48:*/
-#line 514 "ctangle.w"
+#line 516 "ctangle.w"
static void
phase_two(void){
web_file_open= false;
cur_line= 1;
/*33:*/
-#line 298 "ctangle.w"
+#line 302 "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;
/*:33*/
-#line 519 "ctangle.w"
+#line 521 "ctangle.w"
/*51:*/
-#line 578 "ctangle.w"
+#line 580 "ctangle.w"
if(!output_defs_seen)
output_defs();
/*:51*/
-#line 520 "ctangle.w"
+#line 522 "ctangle.w"
-if(text_info->text_link==0&&cur_out_file==end_output_files){
+if(text_info->text_link==macro&&cur_out_file==end_output_files){
fputs("\n! No program text was specified.",stdout);mark_harmless;
}
@@ -686,19 +686,19 @@ fputs("\nWriting the output files:",stdout);
printf(" (%s)",C_file_name);
update_terminal;
}
-if(text_info->text_link==0)goto writeloop;
+if(text_info->text_link==macro)goto writeloop;
}
while(stack_ptr> stack)get_output();
flush_buffer();
writeloop:/*50:*/
-#line 555 "ctangle.w"
+#line 557 "ctangle.w"
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);
-C_file= fopen(output_file_name,"wb");
-if(C_file==0)fatal("! Cannot open output file ",output_file_name);
+if((C_file= fopen(output_file_name,"wb"))==NULL)
+fatal("! Cannot open output file ",output_file_name);
if(show_progress){printf("\n(%s)",output_file_name);update_terminal;}
cur_line= 1;
@@ -712,7 +712,7 @@ flush_buffer();
}
/*:50*/
-#line 541 "ctangle.w"
+#line 543 "ctangle.w"
if(show_happiness){
if(show_progress)new_line;
@@ -722,7 +722,7 @@ fputs("Done.",stdout);
}
/*:48*//*54:*/
-#line 589 "ctangle.w"
+#line 594 "ctangle.w"
static void
output_defs(void)
@@ -730,7 +730,7 @@ output_defs(void)
sixteen_bits a;
push_level(NULL);
for(cur_text= text_info+1;cur_text<text_ptr;cur_text++)
-if(cur_text->text_link==0){
+if(cur_text->text_link==macro){
cur_byte= cur_text->tok_start;
cur_end= (cur_text+1)->tok_start;
C_printf("%s","#define ");
@@ -748,7 +748,7 @@ 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");}
+else if(a<050000)confusion("macro defs have strange char");
else{
cur_val= a-050000;cur_section= cur_val;out_char(section_number);
}
@@ -762,7 +762,7 @@ pop_level(false);
}
/*:54*//*55:*/
-#line 632 "ctangle.w"
+#line 637 "ctangle.w"
static void
out_char(
@@ -775,7 +775,7 @@ 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;
/*59:*/
-#line 700 "ctangle.w"
+#line 705 "ctangle.w"
case identifier:
if(out_state==num_or_id)C_putc(' ');
@@ -790,10 +790,10 @@ j++;
out_state= num_or_id;break;
/*:59*/
-#line 643 "ctangle.w"
+#line 648 "ctangle.w"
/*60:*/
-#line 713 "ctangle.w"
+#line 718 "ctangle.w"
case section_number:
if(cur_val> 0)C_printf("/*%d:*/",cur_val);
@@ -815,15 +815,15 @@ j<k;j++){
if(*j=='\\'||*j=='"')C_putc('\\');
C_putc(*j);
}
-C_printf("%s","\"\n");
+C_putc('"');C_putc('\n');
}
break;
/*:60*/
-#line 644 "ctangle.w"
+#line 649 "ctangle.w"
/*56:*/
-#line 662 "ctangle.w"
+#line 667 "ctangle.w"
case plus_plus:C_putc('+');C_putc('+');out_state= normal;break;
case minus_minus:C_putc('-');C_putc('-');out_state= normal;break;
@@ -844,7 +844,7 @@ case minus_gt_ast:C_putc('-');C_putc('>');C_putc('*');out_state= normal;
break;
/*:56*/
-#line 645 "ctangle.w"
+#line 650 "ctangle.w"
case'=':case'>':C_putc(cur_char);C_putc(' ');
out_state= normal;break;
@@ -863,7 +863,7 @@ default:C_putc(cur_char);out_state= normal;break;
}
/*:55*//*64:*/
-#line 794 "ctangle.w"
+#line 799 "ctangle.w"
static eight_bits
skip_ahead(void)
@@ -881,7 +881,7 @@ if(c!=ignore||*(loc-1)=='>')return c;
}
/*:64*//*67:*/
-#line 833 "ctangle.w"
+#line 838 "ctangle.w"
static boolean skip_comment(
boolean is_long_comment)
@@ -915,22 +915,23 @@ else loc++;
}
/*:67*//*69:*/
-#line 881 "ctangle.w"
+#line 879 "ctangle.w"
static eight_bits
get_next(void)
{
-static int preprocessing= 0;
+static boolean preprocessing= false;
eight_bits c;
while(true){
if(loc> limit){
-if(preprocessing&&*(limit-1)!='\\')preprocessing= 0;
+if(preprocessing&&*(limit-1)!='\\')preprocessing= false;
if(get_line()==false)return new_section;
else if(print_where&&!no_where){
print_where= false;
/*85:*/
-#line 1214 "ctangle.w"
+#line 1221 "ctangle.w"
+{
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -942,9 +943,10 @@ store_two_bytes((sixteen_bits)cur_line);
id_loc= id_first+strlen(id_first);
{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
app_repl(a_l%0400);}
+}
/*:85*/
-#line 893 "ctangle.w"
+#line 891 "ctangle.w"
}
else return'\n';
@@ -958,23 +960,32 @@ else continue;
}
loc++;
if(xisdigit(c)||c=='.')/*73:*/
-#line 964 "ctangle.w"
+#line 963 "ctangle.w"
{
+boolean hex_flag= false;
id_first= loc-1;
if(*id_first=='.'&&!xisdigit(*loc))goto mistake;
if(*id_first=='0'){
if(*loc=='x'||*loc=='X'){
-loc++;while(xisxdigit(*loc))loc++;goto found;
+hex_flag= true;
+loc++;while(xisxdigit(*loc)||*loc=='\'')loc++;
}
+else if(*loc=='b'||*loc=='B'){
+loc++;while(*loc=='0'||*loc=='1'||*loc=='\'')loc++;goto found;
}
-while(xisdigit(*loc))loc++;
+}
+while(xisdigit(*loc)||*loc=='\'')loc++;
if(*loc=='.'){
loc++;
-while(xisdigit(*loc))loc++;
+while((hex_flag&&xisxdigit(*loc))||xisdigit(*loc)||*loc=='\'')loc++;
}
if(*loc=='e'||*loc=='E'){
if(*++loc=='+'||*loc=='-')loc++;
-while(xisdigit(*loc))loc++;
+while(xisdigit(*loc)||*loc=='\'')loc++;
+}
+else if(hex_flag&&(*loc=='p'||*loc=='P')){
+if(*++loc=='+'||*loc=='-')loc++;
+while(xisxdigit(*loc)||*loc=='\'')loc++;
}
found:while(*loc=='u'||*loc=='U'||*loc=='l'||*loc=='L'
||*loc=='f'||*loc=='F')loc++;
@@ -983,19 +994,19 @@ return constant;
}
/*:73*/
-#line 905 "ctangle.w"
+#line 903 "ctangle.w"
else if(c=='\''||c=='"'
||((c=='L'||c=='u'||c=='U')&&(*loc=='\''||*loc=='"'))
||((c=='u'&&*loc=='8')&&(*(loc+1)=='\''||*(loc+1)=='"')))
/*74:*/
-#line 992 "ctangle.w"
+#line 1000 "ctangle.w"
{
char delim= c;
id_first= section_text+1;
id_loc= section_text;*++id_loc= delim;
if(delim=='L'||delim=='u'||delim=='U'){
-if(delim=='u'&&*loc=='8'){*++id_loc= *loc++;}
+if(delim=='u'&&*loc=='8')*++id_loc= *loc++;
delim= *loc++;*++id_loc= delim;
}
while(true){
@@ -1033,26 +1044,27 @@ return string;
}
/*:74*/
-#line 909 "ctangle.w"
+#line 907 "ctangle.w"
else if(isalpha(c)||isxalpha(c)||ishigh(c))
/*72:*/
-#line 957 "ctangle.w"
+#line 954 "ctangle.w"
{
id_first= --loc;
-while(isalpha((eight_bits)*++loc)||isdigit((eight_bits)*loc)
+do{
+++loc;
+}while(isalpha((eight_bits)*loc)||isdigit((eight_bits)*loc)
||isxalpha((eight_bits)*loc)||ishigh((eight_bits)*loc));
id_loc= loc;return identifier;
}
/*:72*/
-#line 911 "ctangle.w"
+#line 909 "ctangle.w"
else if(c=='@')/*75:*/
-#line 1037 "ctangle.w"
+#line 1045 "ctangle.w"
{
-c= ccode[(eight_bits)*loc++];
-switch(c){
+switch(c= ccode[(eight_bits)*loc++]){
case ignore:continue;
case translit_code:err_print("! Use @l in limbo only");continue;
@@ -1065,11 +1077,11 @@ continue;
case section_name:
cur_section_name_char= *(loc-1);
/*77:*/
-#line 1085 "ctangle.w"
+#line 1091 "ctangle.w"
{
char*k;
/*79:*/
-#line 1105 "ctangle.w"
+#line 1113 "ctangle.w"
k= section_text;
while(true){
@@ -1080,7 +1092,7 @@ loc= buffer+1;break;
}
c= *loc;
/*80:*/
-#line 1129 "ctangle.w"
+#line 1137 "ctangle.w"
if(c=='@'){
c= *(loc+1);
@@ -1099,7 +1111,7 @@ err_print("! Nesting of section names not allowed");break;
}
/*:80*/
-#line 1114 "ctangle.w"
+#line 1122 "ctangle.w"
loc++;if(k<section_text_end)k++;
if(xisspace(c)){
@@ -1116,14 +1128,16 @@ printf("...");mark_harmless;
if(*k==' '&&k> section_text)k--;
/*:79*/
-#line 1087 "ctangle.w"
+#line 1093 "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);
+cur_section_name= section_lookup(section_text+1,k-3,true);
+
+else cur_section_name= section_lookup(section_text+1,k,false);
+
if(cur_section_name_char=='(')
/*47:*/
-#line 497 "ctangle.w"
+#line 501 "ctangle.w"
{
for(an_output_file= cur_out_file;
@@ -1132,23 +1146,21 @@ if(*an_output_file==cur_section_name)break;
if(an_output_file==end_output_files){
if(cur_out_file> output_files)
*--cur_out_file= cur_section_name;
-else{
-overflow("output files");
-}
+else overflow("output files");
}
}
/*:47*/
-#line 1093 "ctangle.w"
+#line 1101 "ctangle.w"
return section_name;
}
/*:77*/
-#line 1051 "ctangle.w"
+#line 1058 "ctangle.w"
case string:/*81:*/
-#line 1151 "ctangle.w"
+#line 1159 "ctangle.w"
{
id_first= loc++;*(limit+1)= '@';*(limit+2)= '>';
while(*loc!='@'||*(loc+1)!='>')loc++;
@@ -1159,15 +1171,14 @@ return string;
}
/*:81*/
-#line 1052 "ctangle.w"
+#line 1059 "ctangle.w"
case ord:/*76:*/
-#line 1064 "ctangle.w"
+#line 1071 "ctangle.w"
id_first= loc;
-if(*loc=='\\'){
+if(*loc=='\\')
if(*++loc=='\'')loc++;
-}
while(*loc!='\''){
if(*loc=='@'){
if(*(loc+1)!='@')
@@ -1185,34 +1196,35 @@ loc++;
return ord;
/*:76*/
-#line 1053 "ctangle.w"
+#line 1060 "ctangle.w"
default:return c;
}
}
/*:75*/
-#line 912 "ctangle.w"
+#line 910 "ctangle.w"
else if(xisspace(c)){
if(!preprocessing||loc> limit)continue;
else return' ';
}
-else if(c=='#'&&loc==buffer+1)preprocessing= 1;
+else if(c=='#'&&loc==buffer+1)preprocessing= true;
mistake:/*71:*/
-#line 935 "ctangle.w"
+#line 931 "ctangle.w"
switch(c){
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;
+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;
+}break;
case':':if(*loc==':')compress(colon_colon);break;
case'=':if(*loc=='=')compress(eq_eq);break;
case'>':if(*loc=='='){compress(gt_eq);}
@@ -1225,23 +1237,24 @@ case'!':if(*loc=='=')compress(non_eq);break;
}
/*:71*/
-#line 919 "ctangle.w"
+#line 917 "ctangle.w"
return c;
}
}
/*:69*//*83:*/
-#line 1186 "ctangle.w"
+#line 1193 "ctangle.w"
static void
scan_repl(
eight_bits t)
{
sixteen_bits a;
-if(t==section_name){/*85:*/
-#line 1214 "ctangle.w"
+if(t==section_name)/*85:*/
+#line 1221 "ctangle.w"
+{
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -1253,13 +1266,14 @@ store_two_bytes((sixteen_bits)cur_line);
id_loc= id_first+strlen(id_first);
{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
app_repl(a_l%0400);}
+}
/*:85*/
-#line 1192 "ctangle.w"
-}
+#line 1199 "ctangle.w"
+
while(true)switch(a= get_next()){
/*86:*/
-#line 1227 "ctangle.w"
+#line 1236 "ctangle.w"
case identifier:a= id_lookup(id_first,id_loc,0)-name_dir;
app_repl((a/0400)+0200);
@@ -1267,7 +1281,7 @@ app_repl(a%0400);break;
case section_name:if(t!=section_name)goto done;
else{
/*87:*/
-#line 1260 "ctangle.w"
+#line 1269 "ctangle.w"
{
char*try_loc= loc;
while(*try_loc==' '&&try_loc<limit)try_loc++;
@@ -1280,14 +1294,15 @@ if(*try_loc=='=')err_print("! Missing `@ ' before a named section");
}
/*:87*/
-#line 1233 "ctangle.w"
+#line 1242 "ctangle.w"
a= cur_section_name-name_dir;
app_repl((a/0400)+0250);
app_repl(a%0400);
/*85:*/
-#line 1214 "ctangle.w"
+#line 1221 "ctangle.w"
+{
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -1299,9 +1314,10 @@ store_two_bytes((sixteen_bits)cur_line);
id_loc= id_first+strlen(id_first);
{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
app_repl(a_l%0400);}
+}
/*:85*/
-#line 1237 "ctangle.w"
+#line 1246 "ctangle.w"
break;
}
case output_defs_code:if(t!=section_name)err_print("! Misplaced @h");
@@ -1312,8 +1328,9 @@ a= output_defs_flag;
app_repl((a/0400)+0200);
app_repl(a%0400);
/*85:*/
-#line 1214 "ctangle.w"
+#line 1221 "ctangle.w"
+{
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -1325,15 +1342,16 @@ store_two_bytes((sixteen_bits)cur_line);
id_loc= id_first+strlen(id_first);
{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
app_repl(a_l%0400);}
+}
/*:85*/
-#line 1246 "ctangle.w"
+#line 1255 "ctangle.w"
}
break;
case constant:case string:
/*88:*/
-#line 1271 "ctangle.w"
+#line 1286 "ctangle.w"
app_repl(a);
while(id_first<id_loc){
@@ -1342,16 +1360,18 @@ if(*(id_first+1)=='@')id_first++;
else err_print("! Double @ should be used in string");
}
+else if(a==constant&&*id_first=='\''&&!keep_digit_separators)
+id_first++;
app_repl(*id_first++);
}
app_repl(a);break;
/*:88*/
-#line 1250 "ctangle.w"
+#line 1259 "ctangle.w"
case ord:
/*89:*/
-#line 1287 "ctangle.w"
+#line 1304 "ctangle.w"
{
int c= (eight_bits)*id_first;
if(c=='\\'){
@@ -1402,7 +1422,7 @@ app_repl(constant);
break;
/*:89*/
-#line 1252 "ctangle.w"
+#line 1261 "ctangle.w"
case definition:case format_code:case begin_C:if(t!=section_name)goto done;
else{
@@ -1412,7 +1432,7 @@ err_print("! @d, @f and @c are ignored in C text");continue;
case new_section:goto done;
/*:86*/
-#line 1197 "ctangle.w"
+#line 1204 "ctangle.w"
case')':app_repl(a);
if(t==macro)app_repl(' ');
@@ -1425,7 +1445,7 @@ cur_text= text_ptr;(++text_ptr)->tok_start= tok_ptr;
}
/*:83*//*90:*/
-#line 1346 "ctangle.w"
+#line 1363 "ctangle.w"
static void
scan_section(void)
@@ -1437,10 +1457,10 @@ section_count++;no_where= true;
if(*(loc-1)=='*'&&show_progress){
printf("*%d",section_count);update_terminal;
}
-next_control= 0;
+next_control= ignore;
while(true){
/*92:*/
-#line 1387 "ctangle.w"
+#line 1404 "ctangle.w"
while(next_control<definition)
@@ -1449,11 +1469,11 @@ loc-= 2;next_control= get_next();
}
/*:92*/
-#line 1360 "ctangle.w"
+#line 1377 "ctangle.w"
if(next_control==definition){
/*93:*/
-#line 1394 "ctangle.w"
+#line 1411 "ctangle.w"
{
while((next_control= get_next())=='\n');
if(next_control!=identifier){
@@ -1472,7 +1492,7 @@ cur_text->text_link= macro;
}
/*:93*/
-#line 1362 "ctangle.w"
+#line 1379 "ctangle.w"
continue;
}
@@ -1482,14 +1502,14 @@ p= name_dir;break;
if(next_control==section_name){
p= cur_section_name;
/*94:*/
-#line 1419 "ctangle.w"
+#line 1436 "ctangle.w"
while((next_control= get_next())=='+');
if(next_control!='='&&next_control!=eq_eq)
continue;
/*:94*/
-#line 1370 "ctangle.w"
+#line 1387 "ctangle.w"
break;
}
@@ -1497,22 +1517,22 @@ return;
}
no_where= print_where= false;
/*95:*/
-#line 1424 "ctangle.w"
+#line 1441 "ctangle.w"
/*96:*/
-#line 1429 "ctangle.w"
+#line 1446 "ctangle.w"
store_two_bytes((sixteen_bits)(0150000+section_count));
/*:96*/
-#line 1425 "ctangle.w"
+#line 1442 "ctangle.w"
scan_repl(section_name);
/*97:*/
-#line 1433 "ctangle.w"
+#line 1450 "ctangle.w"
-if(p==name_dir||p==0){
+if(p==name_dir||p==NULL){
(last_unnamed)->text_link= cur_text-text_info;last_unnamed= cur_text;
}
else if(p->equiv==(void*)text_info)p->equiv= (void*)cur_text;
@@ -1527,16 +1547,16 @@ cur_text->text_link= section_flag;
/*:97*/
-#line 1427 "ctangle.w"
+#line 1444 "ctangle.w"
/*:95*/
-#line 1376 "ctangle.w"
+#line 1393 "ctangle.w"
}
/*:90*//*98:*/
-#line 1448 "ctangle.w"
+#line 1465 "ctangle.w"
static void
phase_one(void){
@@ -1550,7 +1570,7 @@ phase= 2;
}
/*:98*//*100:*/
-#line 1465 "ctangle.w"
+#line 1482 "ctangle.w"
static void
skip_limbo(void)
@@ -1565,7 +1585,7 @@ c= *loc++;
if(ccode[(eight_bits)c]==new_section)break;
switch(ccode[(eight_bits)c]){
case translit_code:/*102:*/
-#line 1496 "ctangle.w"
+#line 1513 "ctangle.w"
while(xisspace(*loc)&&loc<limit)loc++;
loc+= 3;
@@ -1590,7 +1610,7 @@ translit[i-0200][loc-beg]= '\0';
}
/*:102*/
-#line 1478 "ctangle.w"
+#line 1495 "ctangle.w"
break;
case format_code:case'@':break;
case control_text:if(c=='q'||c=='Q'){
@@ -1608,7 +1628,7 @@ default:err_print("! Double @ should be used in limbo");
}
/*:100*//*103:*/
-#line 1522 "ctangle.w"
+#line 1539 "ctangle.w"
void
print_stats(void){