diff options
Diffstat (limited to 'Build/source/texk/web2c/cwebdir/comm-w2c.ch')
-rw-r--r-- | Build/source/texk/web2c/cwebdir/comm-w2c.ch | 620 |
1 files changed, 620 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.ch b/Build/source/texk/web2c/cwebdir/comm-w2c.ch new file mode 100644 index 00000000000..2a80aca53c6 --- /dev/null +++ b/Build/source/texk/web2c/cwebdir/comm-w2c.ch @@ -0,0 +1,620 @@ +% Kpathsea changes for CWEB by Wlodek Bzyl and Olaf Weber +% Copyright 2002 Wlodek Bzyl and Olaf Weber +% This file is in the Public Domain. + +@x l.20 +\def\title{Common code for CTANGLE and CWEAVE (Version 3.64)} +\def\topofcontents{\null\vfill + \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and + {\ttitlefont CWEAVE}} + \vskip 15pt + \centerline{(Version 3.64)} + \vfill} +@y +\def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} +\def\title{Common code for CTANGLE and CWEAVE (Version 3.64k)} +\def\topofcontents{\null\vfill + \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and + {\ttitlefont CWEAVE}} + \vskip 15pt + \centerline{(Version 3.64k)} + \vfill} +@z + +This change can not be applied when `tie' is used +(TOC file can not be typeset). + +%@x l.42 +%\let\maybe=\iftrue +%@y +%\let\maybe=\iffalse % print only changed modules +%@z + + +Section 2. +We use the definition from `kpathsea/types.h': + + typedef enum { false = 0, true = 1 } boolean; + +Note that this definition also occurs in common.h. +@x l.74 +typedef short boolean; +@y +@z + + +Section 4. + +@x l.91 +common_init() +@y +common_init P1H(void) +@z + +@x l.93 + @<Initialize pointers@>; +@y + @<Initialize pointers@>; + @<Set up |PROGNAME| feature and initialize the search path mechanism@>; +@z + +Section 9. + +@x l.173 +int input_ln(fp) /* copies a line into |buffer| or returns 0 */ +FILE *fp; /* what file to read from */ +@y +int input_ln P1C(FILE *, fp) /* copies a line into |buffer| or returns 0 */ +@z + +Section 10. + +@x l.207 - max_file_name_length is way too small. +@d max_file_name_length 60 +@y +@d max_file_name_length 1024 +@z + +@x l.221 - no alt_web_file_name needed. +char alt_web_file_name[max_file_name_length]; /* alternate name to try */ +@y +@z + +Section 12. + +@x l.254 +prime_the_change_buffer() +@y +prime_the_change_buffer P1H(void) +@z + +Section 16. + +@x l.322 +check_change() /* switches to |change_file| if the buffers match */ +@y +check_change P1H(void) /* switches to |change_file| if the buffers match */ +@z + +Section 18. + +@x l.380 +reset_input() +@y +reset_input P1H(void) +@z + +Section 19. + +@x l.394 +if ((web_file=fopen(web_file_name,"r"))==NULL) { + strcpy(web_file_name,alt_web_file_name); + if ((web_file=fopen(web_file_name,"r"))==NULL) + fatal("! Cannot open input file ", web_file_name); +} +@y +if ((found_filename=kpse_find_cweb(web_file_name))==NULL || + (web_file=fopen(found_filename,"r"))==NULL) { + fatal("! Cannot open input file ", web_file_name); +} else if (strlen(found_filename) < max_file_name_length) { + strcpy(web_file_name, found_filename); + free(found_filename); +} +@z + +@x l.402 +if ((change_file=fopen(change_file_name,"r"))==NULL) + fatal("! Cannot open change file ", change_file_name); +@y +if ((found_filename=kpse_find_cweb(change_file_name))==NULL || + (change_file=fopen(found_filename,"r"))==NULL) { + fatal("! Cannot open change file ", change_file_name); +} else if (strlen(found_filename) < max_file_name_length) { + strcpy(change_file_name, found_filename); + free(found_filename); +} +@z + +Section 21. + +@x l.427 +int get_line() /* inputs the next line */ +@y +int get_line P1H(void) /* inputs the next line */ +@z + +Section 22. + +@x l.472 +#include <stdlib.h> /* declaration of |getenv| and |exit| */ +@y +#include <stdlib.h> /* declaration of |getenv| and |exit| */ +#define CWEB +#include "cpascal.h" +#include <kpathsea/kpathsea.h> /* include every \Kpathsea/ header */ +#include "help.h" + +@ The \.{ctangle} and \.{cweave} programs from the original \.{CWEB} +package use the compile-time default directory or the value of the +environment variable \.{CWEBINPUTS} as an alternative place to be +searched for files, if they could not be found in the current +directory. + +This version uses the \Kpathsea/ mechanism for searching files. +The directories to be searched for come from three sources: + + (a)~a user-set environment variable \.{CWEBINPUTS} + (overriden by \.{CWEBINPUTS\_cweb});\par + (b)~a line in \Kpathsea/ configuration file \.{texmf.cnf},\hfil\break + e.g. \.{CWEBINPUTS=.:$TEXMF/texmf/cweb//} + or \.{CWEBINPUTS.cweb=.:$TEXMF/texmf/cweb//};\hangindent=2\parindent\par + (c)~compile-time default directories \.{.:$TEXMF/texmf/cweb//} + (specified in \.{texmf.in}). + + +@d kpse_find_cweb(name) kpse_find_file(name,kpse_cweb_format,true) + +@ The simple file searching is replaced by `path searching' mechanism +that \Kpathsea/ library provides. + +We set |kpse_program_name| to a |"cweb"|. This means if the +variable |CWEBINPUTS.cweb| is present in \.{texmf.cnf} (or |CWEBINPUTS_cweb| +in the environment) its value will be used as the search path for +filenames. This allows different flawors of \.{CWEB} to have +different search paths. + +FIXME: Not sure this is the best way to go about this. + +@<Set up |PROGNAME| feature and initialize the search path mechanism@>= +kpse_set_program_name(argv[0], "cweb"); +@z + + +Section 23. + +@x l.475 + char temp_file_name[max_file_name_length]; + char *cur_file_name_end=cur_file_name+max_file_name_length-1; + char *k=cur_file_name, *kk; + int l; /* length of file name */ +@y + char *cur_file_name_end=cur_file_name+max_file_name_length-1; + char *k=cur_file_name; +@z + +@x l.489 + if ((cur_file=fopen(cur_file_name,"r"))!=NULL) { +@y + if ((found_filename=kpse_find_cweb(cur_file_name))!=NULL && + (cur_file=fopen(found_filename,"r"))!=NULL) { + /* Copy name for #line directives. */ + if (strlen(found_filename) < max_file_name_length) { + strcpy(cur_file_name, found_filename); + free(found_filename); + } +@z + +Replaced by Kpathsea `kpse_find_file' + +@x l.493 + kk=getenv("CWEBINPUTS"); + if (kk!=NULL) { + if ((l=strlen(kk))>max_file_name_length-2) too_long(); + strcpy(temp_file_name,kk); + } + else { +#ifdef CWEBINPUTS + if ((l=strlen(CWEBINPUTS))>max_file_name_length-2) too_long(); + strcpy(temp_file_name,CWEBINPUTS); +#else + l=0; +#endif /* |CWEBINPUTS| */ + } + if (l>0) { + if (k+l+2>=cur_file_name_end) too_long(); +@.Include file name ...@> + for (; k>= cur_file_name; k--) *(k+l+1)=*k; + strcpy(cur_file_name,temp_file_name); + cur_file_name[l]='/'; /* \UNIX/ pathname separator */ + if ((cur_file=fopen(cur_file_name,"r"))!=NULL) { + cur_line=0; print_where=1; + goto restart; /* success */ + } + } +@y +@z + +Section 26. + +@x l.571 +check_complete(){ +@y +check_complete P1H(void) { +@z + +Section 33. + +@x l.651 +extern int names_match(); +@y +extern int names_match P4H(name_pointer, char*, int, char); +@z + +Section 35. + +@x l.661 +id_lookup(first,last,t) /* looks up a string in the identifier table */ +char *first; /* first character of string */ +char *last; /* last character of string plus one */ +char t; /* the |ilk|; used by \.{CWEAVE} only */ +@y +/* looks up a string in the identifier table */ +id_lookup P3C(char*,first, char*,last, char,t) +@z + +Section 38. + +@x l.704 +void init_p(); +@y +extern void init_p P2C(name_pointer,p, char,t); +@z + +Section 42. + +@x l.766 +print_section_name(p) +name_pointer p; +@y +print_section_name P1C(name_pointer, p) +@z + +Section 43. + +@x l.785 +sprint_section_name(dest,p) + char*dest; + name_pointer p; +@y +sprint_section_name P2C(char*,dest, name_pointer,p) +@z + +Section 44. + +@x l.806 +print_prefix_name(p) +name_pointer p; +@y +print_prefix_name P1C(name_pointer,p) +@z + +Section 45. + +@x l.826 +int web_strcmp(j,j_len,k,k_len) /* fuller comparison than |strcmp| */ + char *j, *k; /* beginning of first and second strings */ + int j_len, k_len; /* length of strings */ +@y +/* fuller comparison than |strcmp| */ +int web_strcmp P4C(char*,j, int,j_len, char*,k, int,k_len) +@z + +Section 46. + +@x l.853 +extern void init_node(); +@y +extern void init_node P1C(name_pointer,node); +@z + +Section 47. + +@x l.857 +add_section_name(par,c,first,last,ispref) /* install a new node in the tree */ +name_pointer par; /* parent of new node */ +int c; /* right or left? */ +char *first; /* first character of section name */ +char *last; /* last character of section name, plus one */ +int ispref; /* are we adding a prefix or a full name? */ +@y +/* install a new node in the tree */ +add_section_name P5C(name_pointer,par, int,c, char*,first, char*,last, + int,ispref) +@z + +Section 48. + +@x l.886 +extend_section_name(p,first,last,ispref) +name_pointer p; /* name to be extended */ +char *first; /* beginning of extension text */ +char *last; /* one beyond end of extension text */ +int ispref; /* are we adding a prefix or a full name? */ +@y +extend_section_name P4C(name_pointer,p, char*,first, char*,last, int,ispref) +@z + +Section 49. + +@x l.914 +section_lookup(first,last,ispref) /* find or install section name in tree */ +char *first, *last; /* first and last characters of new name */ +int ispref; /* is the new name a prefix or a full name? */ +@y +/* find or install section name in tree */ +section_lookup P3C(char*,first, char*,last, int,ispref) +@z + +Section 53. + +@x l.1018 +int section_name_cmp(); +@y +int section_name_cmp P3H(char**, int, name_pointer); +@z + +Section 54. + +@x l.1021 +int section_name_cmp(pfirst,len,r) +char **pfirst; /* pointer to beginning of comparison string */ +int len; /* length of string */ +name_pointer r; /* section name being compared */ +@y +int section_name_cmp P3C(char**,pfirst, int,len, name_pointer,r) +@z + +Section 57. + +@x l.1093 +void err_print(); +@y +void err_print P1H(char*); +@z + +Section 58. + +@x l.1098 +err_print(s) /* prints `\..' and location of error message */ +char *s; +@y +err_print P1C(char*,s) /* prints `\..' and location of error message */ +@z + +Section 60. + +@x l.1141 +int wrap_up(); +extern void print_stats(); +@y +int wrap_up P1H(void); +extern void print_stats P1H(void); +@z + +Section 61. + +@x l.1151 +int wrap_up() { +@y +int wrap_up P1H(void) { +@z + +Section 63. + +@x l.1174 +void fatal(), overflow(); +@y +void fatal P2H(char*,char*); +void overflow(char*); +@z + +Section 64. + +@x l.1180 +fatal(s,t) + char *s,*t; +@y +fatal P2C(char*,s, char*,t) +@z + +Section 65. + +@x l.1191 +overflow(t) + char *t; +@y +overflow P1C(char*,t) +@z + +Section 67. + +@x l.1212 +the names of those files. Most of the 128 flags are undefined but available +for future extensions. +@y +the names of those files. Most of the 128 flags are undefined but available +for future extensions. + +We use `kpathsea' library functions to find literate sources and +NLS configuration files. When the files you expect are not +being found, the thing to do is to enable `kpathsea' runtime +debugging by assigning to |kpathsea_debug| variable a small number +via `\.{-d}' option. The meaning of number is shown below. To set +more than one debugging options sum the corresponding numbers. +$$\halign{\hskip5em\tt\hfil#&&\qquad\tt#\cr + 1&report `\.{stat}' calls\cr + 2&report lookups in all hash tables\cr + 4&report file openings and closings\cr + 8&report path information\cr +16&report directory list\cr +32&report on each file search\cr +64&report values of variables being looked up\cr}$$ +Debugging output is always written to |stderr|, and begins with the string +`\.{kdebug:}'. +@z + +@x l.1218 +@d show_happiness flags['h'] /* should lack of errors be announced? */ +@y +@d show_happiness flags['h'] /* should lack of errors be announced? */ +@d show_kpathsea_debug flags['d'] + /* should results of file searching be shown? */ +@z + +@x l.1234 +show_banner=show_happiness=show_progress=1; +@y +show_banner=show_happiness=show_progress=1; +@z + +Section 69. + +@x l.1252 +void scan_args(); +@y +void scan_args P1H(void); +@z + + +Section 70. + +@x l.1257 +scan_args() +@y +scan_args P1H(void) +@z + + +Section 71. + +@x l.1282 - use a define for /dev/null + if (found_change<=0) strcpy(change_file_name,"/dev/null"); +@y + if (found_change<=0) strcpy(change_file_name,DEV_NULL); +@z + +@x l.1302 - no alt_web_file_name + sprintf(alt_web_file_name,"%s.web",*argv); +@y +@z + + +Section 74. + +@x l.1344 +@ @<Handle flag...@>= +{ +@y +@ @<Handle flag...@>= +{ + if (strcmp("-help",*argv)==0 || strcmp("--help",*argv)==0) + @<Display help message and exit@>; + if (strcmp("-version",*argv)==0 || strcmp("--version",*argv)==0) + @<Display version information and exit@>; +@z + +@x l.1347 + else flag_change=1; +@y + else flag_change=1; + if (*(*argv+1)=='d') + if (sscanf(*argv+2,"%u",&kpathsea_debug)!=1) @<Print usage error...@>; +@z + +@x l.1349 + flags[*dot_pos]=flag_change; +@y + flags[(unsigned char)*dot_pos]=flag_change; +@z + +Section 75. + +@x l.1354 +if (program==ctangle) + fatal( +"! Usage: ctangle [options] webfile[.w] [{changefile[.ch]|-} [outfile[.c]]]\n" + ,""); +@.Usage:@> +else fatal( +"! Usage: cweave [options] webfile[.w] [{changefile[.ch]|-} [outfile[.tex]]]\n" + ,""); +@y +if (program==ctangle) { + fprintf(stderr, "ctangle: Need one to three file arguments.\n"); + usage("ctangle"); +} else { + fprintf(stderr, "cweave: Need one to three file arguments.\n"); + usage("cweave"); +} +@z + +Section 77. + +@x l.1375 +FILE *active_file; /* currently active file for \.{CWEAVE} output */ +@y +FILE *active_file; /* currently active file for \.{CWEAVE} output */ +char *found_filename; /* filename found by |kpse_find_file| */ +@z + + +Section 81. (removed) + +@x l.1403 +@ We predeclare several standard system functions here instead of including +their system header files, because the names of the header files are not as +standard as the names of the functions. (For example, some \CEE/ environments +have \.{<string.h>} where others have \.{<strings.h>}.) + +@<Predecl...@>= +extern int strlen(); /* length of string */ +extern int strcmp(); /* compare strings lexicographically */ +extern char* strcpy(); /* copy one string to another */ +extern int strncmp(); /* compare up to $n$ string characters */ +extern char* strncpy(); /* copy up to $n$ string characters */ +@y +@z + +@x +@** Index. +@y +@** System dependent changes. + +@ Modules for dealing with help messages and version info. + +@<Display help message and exit@>= +usagehelp(program==ctangle ? CTANGLEHELP : CWEAVEHELP, NULL); +@.--help@> + +@ Will have to change these if the version numbers change (ouch). + +@d ctangle_banner "This is CTANGLE, Version 3.64" +@d cweave_banner "This is CWEAVE, Version 3.64" + +@<Display version information and exit@>= +printversionandexit((program==ctangle ? ctangle_banner : cweave_banner), + "Silvio Levy and Donald E. Knuth", NULL); +@.--version@> + +@** Index. +@z |