diff options
Diffstat (limited to 'web/c_cpp/cweb/comm-bs.ch')
-rw-r--r-- | web/c_cpp/cweb/comm-bs.ch | 210 |
1 files changed, 102 insertions, 108 deletions
diff --git a/web/c_cpp/cweb/comm-bs.ch b/web/c_cpp/cweb/comm-bs.ch index 26f79b160d..b01b86799d 100644 --- a/web/c_cpp/cweb/comm-bs.ch +++ b/web/c_cpp/cweb/comm-bs.ch @@ -12,55 +12,68 @@ by using "huge" pointers. (This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94; revised 24 Jul 94.) +(Update attempt by Andreas Scherer, 31 Jan 2021. Good luck!) -@x Section 23. - cur_file_name[l]='/'; /* \UNIX/ pathname separator */ -@y - cur_file_name[l]='/'; /* A valid {\mc MSDOS} pathname separator */ -@z +@x Section 6. + for section names */ -@x Section 27. -@d max_names 4000 /* number of identifiers, strings, section names; - must be less than 10240 */ - -@<Definitions that...@>= +@<Common code...@>= typedef struct name_info { char *byte_start; /* beginning of the name in |byte_mem| */ - @<More elements of |name_info| structure@>@; + struct name_info *link; + union { + struct name_info *Rlink; /* right link in binary search tree for section + names */ + char Ilk; /* used by identifiers in \.{CWEAVE} only */ + } dummy; + void *equiv_or_xref; /* info corresponding to names */ } name_info; /* contains information about an identifier or section name */ -typedef name_info *name_pointer; /* pointer into array of |name_info|s */ -char byte_mem[max_bytes]; /* characters of names */ -char *byte_mem_end = byte_mem+max_bytes-1; /* end of |byte_mem| */ -name_info name_dir[max_names]; /* information about names */ -name_pointer name_dir_end = name_dir+max_names-1; /* end of |name_dir| */ +typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */ +typedef name_pointer *hash_pointer; +extern char byte_mem[]; /* characters of names */ +extern char *byte_mem_end; /* end of |byte_mem| */ @y -@d max_names 4000 /* number of identifiers, strings, section names; - must be less than 10240 */ + for section names */ @f huge extern -@<Definitions that...@>= +@<Common code...@>= typedef struct name_info { char huge* byte_start; /* beginning of the name in |byte_mem| */ - @<More elements of |name_info| structure@>@; + struct name_info *link; + union { + struct name_info *Rlink; /* right link in binary search tree for section + names */ + char Ilk; /* used by identifiers in \.{CWEAVE} only */ + } dummy; + union { + void huge* equiv_member; + void huge* xref_member; + } ptr_union; /* info corresponding to names */ } name_info; /* contains information about an identifier or section name */ -typedef name_info *name_pointer; /* pointer into array of |name_info|s */ -char huge byte_mem[max_bytes]; /* characters of names */ -char huge* byte_mem_end; /* end of |byte_mem| */ -name_info name_dir[max_names]; /* information about names */ -name_pointer name_dir_end = name_dir+max_names-1; +typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */ +typedef name_pointer *hash_pointer; +extern char huge byte_mem[]; /* characters of names */ +extern char huge* byte_mem_end; /* end of |byte_mem| */ +@z + + +@x Section 39. + cur_file_name[l]='/'; /* \UNIX/ pathname separator */ +@y + cur_file_name[l]='/'; /* A valid {\mc MSDOS} pathname separator */ @z -@x Section 29. +@x Section 44. char *byte_ptr; /* first unused position in |byte_mem| */ @y char huge* byte_ptr; /* first unused position in |byte_mem| */ @z -@x Section 30. +@x Section 45. @ @<Init...@>= name_dir->byte_start=byte_ptr=byte_mem; /* position zero in both arrays */ name_ptr=name_dir+1; /* |name_dir[0]| will be used only for error recovery */ @@ -74,156 +87,137 @@ byte_mem_end = byte_mem+max_bytes-1; @z -@x Section 42. +@x Section 52. void -print_section_name(p) -name_pointer p; +print_section_name( +name_pointer p) { char *ss, *s = first_chunk(p); @y void -print_section_name(p) -name_pointer p; +print_section_name( +name_pointer p) { char huge* ss, huge* s = first_chunk(p); @z -@x Section 43. +@x Section 53. void -sprint_section_name(dest,p) - char*dest; - name_pointer p; +sprint_section_name( + char *dest, + name_pointer p) { char *ss, *s = first_chunk(p); @y void -sprint_section_name(dest,p) - char*dest; - name_pointer p; +sprint_section_name( + char huge* dest, + name_pointer p) { char huge* ss, huge* s = first_chunk(p); @z -@x Section 44. +@x Section 54. void -print_prefix_name(p) -name_pointer p; +print_prefix_name( +name_pointer p) { char *s = first_chunk(p); @y void -print_prefix_name(p) -name_pointer p; +print_prefix_name( +name_pointer p) { char huge* s = first_chunk(p); @z -@x Section 47. -name_pointer -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? */ +@x Section 57. +static name_pointer +add_section_name(@t\1\1@> /* 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@t\2\2@>) /* are we adding a prefix or a full name? */ { name_pointer p=name_ptr; /* new node */ char *s=first_chunk(p); @y -name_pointer -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? */ +static name_pointer +add_section_name(@t\1\1@> /* install a new node in the tree */ +name_pointer par, /* parent of new node */ +int c, /* right or left? */ +char huge* first, /* first character of section name */ +char huge* last, /* last character of section name, plus one */ +int ispref@t\2\2@>) /* are we adding a prefix or a full name? */ { name_pointer p=name_ptr; /* new node */ char huge* s=first_chunk(p); @z -@x Section 48. -void -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? */ +@x Section 58. +static void +extend_section_name(@t\1\1@> +name_pointer p, /* name to be extended */ +char *first, /* beginning of extension text */ +char *last, /* one beyond end of extension text */ +int ispref@t\2\2@>) /* are we adding a prefix or a full name? */ { char *s; @y -void -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? */ +static void +extend_section_name(@t\1\1@> +name_pointer p, /* name to be extended */ +char huge* first, /* beginning of extension text */ +char huge* last, /* one beyond end of extension text */ +int ispref@t\2\2@>) /* are we adding a prefix or a full name? */ { char huge* s; @z -@x Section 54. -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 */ +@x Section 64. +static int section_name_cmp(@t\1\1@> +char **pfirst, /* pointer to beginning of comparison string */ +int len, /* length of string */ +name_pointer r@t\2\2@>) /* section name being compared */ { char *first=*pfirst; /* beginning of comparison string */ name_pointer q=r+1; /* access to subsequent chunks */ char *ss, *s=first_chunk(r); @y -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 */ +static int section_name_cmp(@t\1\1@> +char huge** pfirst, /* pointer to beginning of comparison string */ +int len, /* length of string */ +name_pointer r@t\2\2@>) /* section name being compared */ { - char *first=*pfirst; /* beginning of comparison string */ + char huge* first=*pfirst; /* beginning of comparison string */ name_pointer q=r+1; /* access to subsequent chunks */ char huge* ss, huge* s=first_chunk(r); @z -@x Section 55. -source files, respectively; here we just declare a common field -|equiv_or_xref| as a pointer to a |char|. - -@<More elements of |name...@>= -char *equiv_or_xref; /* info corresponding to names */ +@x Section 75. +An omitted change file argument means that |"/dev/null"| should be used, @y -source files, respectively. Here we just declare a common field -|ptr_union| as a union of pointers to |char|, which happen to have -different addressing attributes. - -@<More elements of |name...@>= -union { - char *equiv_member; - char huge* xref_member; -} ptr_union; /* info corresponding to names */ +An omitted change file argument means that |"NUL"| should be used, @z -@x Section 69. -An omitted change file argument means that |"/dev/null"| should be used, +@x Section 76. + strcpy(change_file_name,"/dev/null"); @y -An omitted change file argument means that |"NUL"| should be used, + strcpy(change_file_name,"NUL"); @z -@x Section 70. +@x Section 76. else if (*s=='/') dot_pos=NULL,name_pos=++s; @y else if (*s == ':' || *s == '\\' || *s == '/') dot_pos=NULL,name_pos=++s; @z - - -@x Section 70. - if (found_change<=0) strcpy(change_file_name,"/dev/null"); -@y - if (found_change<=0) strcpy(change_file_name,"NUL"); -@z |