comm-bs.ch
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. Changes for code common to CTANGLE and CWEAVE, for MSDOS
  2. and Borland C++ 3.1 using the following options (and perhaps others):
  3.     -mc -w-pro -Ff=5000 -Z- -O-p
  4. The options -Z- and -O-p explicitly turn off optimizations that seem to be
  5. dangerous for the style of code in the CWEB sources.  (See makefile.bs.)
  6. The main purpose of these changes is to support MSDOS with full-size arrays
  7. by using "huge" pointers.
  8. (This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94;
  9.  revised 24 Jul 94.)
  10. @x Section 23.
  11.     cur_file_name[l]='/'; /* UNIX/ pathname separator */
  12. @y
  13.     cur_file_name[l]='/'; /* A valid {mc MSDOS} pathname separator */
  14. @z
  15. @x Section 27.
  16. @d max_names 4000 /* number of identifiers, strings, section names;
  17.   must be less than 10240 */
  18. @<Definitions that...@>=
  19. typedef struct name_info {
  20.   char *byte_start; /* beginning of the name in |byte_mem| */
  21.   @<More elements of |name_info| structure@>@;
  22. } name_info; /* contains information about an identifier or section name */
  23. typedef name_info *name_pointer; /* pointer into array of |name_info|s */
  24. char byte_mem[max_bytes]; /* characters of names */
  25. char *byte_mem_end = byte_mem+max_bytes-1; /* end of |byte_mem| */
  26. name_info name_dir[max_names]; /* information about names */
  27. name_pointer name_dir_end = name_dir+max_names-1; /* end of |name_dir| */
  28. @y
  29. @d max_names 4000 /* number of identifiers, strings, section names;
  30.   must be less than 10240 */
  31. @f huge extern
  32. @<Definitions that...@>=
  33. typedef struct name_info {
  34.   char huge* byte_start; /* beginning of the name in |byte_mem| */
  35.   @<More elements of |name_info| structure@>@;
  36. } name_info; /* contains information about an identifier or section name */
  37. typedef name_info *name_pointer; /* pointer into array of |name_info|s */
  38. char huge byte_mem[max_bytes]; /* characters of names */
  39. char huge* byte_mem_end; /* end of |byte_mem| */
  40. name_info name_dir[max_names]; /* information about names */
  41. name_pointer name_dir_end = name_dir+max_names-1;
  42. @z
  43. @x Section 29.
  44. char *byte_ptr; /* first unused position in |byte_mem| */
  45. @y
  46. char huge* byte_ptr; /* first unused position in |byte_mem| */
  47. @z
  48. @x Section 30.
  49. @ @<Init...@>=
  50. name_dir->byte_start=byte_ptr=byte_mem; /* position zero in both arrays */
  51. name_ptr=name_dir+1; /* |name_dir[0]| will be used only for error recovery */
  52. name_ptr->byte_start=byte_mem; /* this makes name 0 of length zero */
  53. @y
  54. @ @<Init...@>=
  55. name_dir->byte_start=byte_ptr=byte_mem; /* position zero in both arrays */
  56. name_ptr=name_dir+1; /* |name_dir[0]| will be used only for error recovery */
  57. name_ptr->byte_start=byte_mem; /* this makes name 0 of length zero */
  58. byte_mem_end = byte_mem+max_bytes-1;
  59. @z
  60. @x Section 42.
  61. void
  62. print_section_name(p)
  63. name_pointer p;
  64. {
  65.   char *ss, *s = first_chunk(p);
  66. @y
  67. void
  68. print_section_name(p)
  69. name_pointer p;
  70. {
  71.   char huge* ss, huge* s = first_chunk(p);
  72. @z
  73. @x Section 43.
  74. void
  75. sprint_section_name(dest,p)
  76.   char*dest;
  77.   name_pointer p;
  78. {
  79.   char *ss, *s = first_chunk(p);
  80. @y
  81. void
  82. sprint_section_name(dest,p)
  83.   char*dest;
  84.   name_pointer p;
  85. {
  86.   char huge* ss, huge* s = first_chunk(p);
  87. @z
  88. @x Section 44.
  89. void
  90. print_prefix_name(p)
  91. name_pointer p;
  92. {
  93.   char *s = first_chunk(p);
  94. @y
  95. void
  96. print_prefix_name(p)
  97. name_pointer p;
  98. {
  99.   char huge* s = first_chunk(p);
  100. @z
  101. @x Section 47.
  102. name_pointer
  103. add_section_name(par,c,first,last,ispref) /* install a new node in the tree */
  104. name_pointer par; /* parent of new node */
  105. int c; /* right or left? */
  106. char *first; /* first character of section name */
  107. char *last; /* last character of section name, plus one */
  108. int ispref; /* are we adding a prefix or a full name? */
  109. {
  110.   name_pointer p=name_ptr; /* new node */
  111.   char *s=first_chunk(p);
  112. @y
  113. name_pointer
  114. add_section_name(par,c,first,last,ispref) /* install a new node in the tree */
  115. name_pointer par; /* parent of new node */
  116. int c; /* right or left? */
  117. char *first; /* first character of section name */
  118. char *last; /* last character of section name, plus one */
  119. int ispref; /* are we adding a prefix or a full name? */
  120. {
  121.   name_pointer p=name_ptr; /* new node */
  122.   char huge* s=first_chunk(p);
  123. @z
  124. @x Section 48.
  125. void
  126. extend_section_name(p,first,last,ispref)
  127. name_pointer p; /* name to be extended */
  128. char *first; /* beginning of extension text */
  129. char *last; /* one beyond end of extension text */
  130. int ispref; /* are we adding a prefix or a full name? */
  131. {
  132.   char *s;
  133. @y
  134. void
  135. extend_section_name(p,first,last,ispref)
  136. name_pointer p; /* name to be extended */
  137. char *first; /* beginning of extension text */
  138. char *last; /* one beyond end of extension text */
  139. int ispref; /* are we adding a prefix or a full name? */
  140. {
  141.   char huge* s;
  142. @z
  143. @x Section 54.
  144. int section_name_cmp(pfirst,len,r)
  145. char **pfirst; /* pointer to beginning of comparison string */
  146. int len; /* length of string */
  147. name_pointer r; /* section name being compared */
  148. {
  149.   char *first=*pfirst; /* beginning of comparison string */
  150.   name_pointer q=r+1; /* access to subsequent chunks */
  151.   char *ss, *s=first_chunk(r);
  152. @y
  153. int section_name_cmp(pfirst,len,r)
  154. char **pfirst; /* pointer to beginning of comparison string */
  155. int len; /* length of string */
  156. name_pointer r; /* section name being compared */
  157. {
  158.   char *first=*pfirst; /* beginning of comparison string */
  159.   name_pointer q=r+1; /* access to subsequent chunks */
  160.   char huge* ss, huge* s=first_chunk(r);
  161. @z
  162. @x Section 55.
  163. source files, respectively; here we just declare a common field
  164. |equiv_or_xref| as a pointer to a |char|.
  165. @<More elements of |name...@>=
  166. char *equiv_or_xref; /* info corresponding to names */
  167. @y
  168. source files, respectively.  Here we just declare a common field
  169. |ptr_union| as a union of pointers to |char|, which happen to have
  170. different addressing attributes.
  171. @<More elements of |name...@>=
  172. union {
  173.   char *equiv_member;
  174.   char huge* xref_member;
  175. } ptr_union;  /* info corresponding to names */
  176. @z
  177. @x Section 69.
  178. An omitted change file argument means that |"/dev/null"| should be used,
  179. @y
  180. An omitted change file argument means that |"NUL"| should be used,
  181. @z
  182. @x Section 70.
  183.         else if (*s=='/') dot_pos=NULL,name_pos=++s;
  184. @y
  185.         else if (*s == ':' || *s == '\' || *s == '/')
  186.   dot_pos=NULL,name_pos=++s;
  187. @z
  188. @x Section 70.
  189.   if (found_change<=0) strcpy(change_file_name,"/dev/null");
  190. @y
  191.   if (found_change<=0) strcpy(change_file_name,"NUL");
  192. @z