📄 comm-bs.ch
字号:
Changes for code common to CTANGLE and CWEAVE, for MSDOSand Borland C++ 3.1 using the following options (and perhaps others): -mc -w-pro -Ff=5000 -Z- -O-pThe options -Z- and -O-p explicitly turn off optimizations that seem to bedangerous for the style of code in the CWEB sources. (See makefile.bs.)The main purpose of these changes is to support MSDOS with full-size arraysby using "huge" pointers.(This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94; revised 24 Jul 94.)@x Section 23. cur_file_name[l]='/'; /* \UNIX/ pathname separator */@y cur_file_name[l]='/'; /* A valid {\mc MSDOS} pathname separator */@z@x Section 27.@d max_names 4000 /* number of identifiers, strings, section names; must be less than 10240 */@<Definitions that...@>=typedef struct name_info { char *byte_start; /* beginning of the name in |byte_mem| */ @<More elements of |name_info| structure@>@;} 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| */@y@d max_names 4000 /* number of identifiers, strings, section names; must be less than 10240 */@f huge extern@<Definitions that...@>=typedef struct name_info { char huge* byte_start; /* beginning of the name in |byte_mem| */ @<More elements of |name_info| structure@>@;} 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;@z@x Section 29.char *byte_ptr; /* first unused position in |byte_mem| */@ychar huge* byte_ptr; /* first unused position in |byte_mem| */@z@x Section 30.@ @<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 */name_ptr->byte_start=byte_mem; /* this makes name 0 of length zero */@y@ @<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 */name_ptr->byte_start=byte_mem; /* this makes name 0 of length zero */byte_mem_end = byte_mem+max_bytes-1;@z@x Section 42.voidprint_section_name(p)name_pointer p;{ char *ss, *s = first_chunk(p);@yvoidprint_section_name(p)name_pointer p;{ char huge* ss, huge* s = first_chunk(p);@z@x Section 43.voidsprint_section_name(dest,p) char*dest; name_pointer p;{ char *ss, *s = first_chunk(p);@yvoidsprint_section_name(dest,p) char*dest; name_pointer p;{ char huge* ss, huge* s = first_chunk(p);@z@x Section 44.voidprint_prefix_name(p)name_pointer p;{ char *s = first_chunk(p);@yvoidprint_prefix_name(p)name_pointer p;{ char huge* s = first_chunk(p);@z@x Section 47.name_pointeradd_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? */{ name_pointer p=name_ptr; /* new node */ char *s=first_chunk(p);@yname_pointeradd_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? */{ name_pointer p=name_ptr; /* new node */ char huge* s=first_chunk(p);@z@x Section 48.voidextend_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? */{ char *s;@yvoidextend_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? */{ 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 */{ char *first=*pfirst; /* beginning of comparison string */ name_pointer q=r+1; /* access to subsequent chunks */ char *ss, *s=first_chunk(r);@yint 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 */{ char *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 */@ysource files, respectively. Here we just declare a common field|ptr_union| as a union of pointers to |char|, which happen to havedifferent addressing attributes.@<More elements of |name...@>=union { char *equiv_member; char huge* xref_member;} ptr_union; /* info corresponding to names */@z@x Section 69.An omitted change file argument means that |"/dev/null"| should be used,@yAn omitted change file argument means that |"NUL"| should be used,@z@x Section 70. 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -