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

通讯编程

开发平台:

Visual C++

  1. Changes for CTANGLE for MSDOS and Borland C++ 3.1 using the following
  2. 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 break
  5. the code.  (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 1.
  11. The ``banner line'' defined here should be changed whenever .{CTANGLE}
  12. is modified.
  13. @d banner "This is CTANGLE (Version 3.4)n"
  14. @y
  15. The ``banner line'' defined here should be changed whenever .{CTANGLE}
  16. is modified.
  17. @d banner "This is CTANGLE (Version 3.4pc/big)n"
  18. @z
  19. @x Section 4.
  20. @ The following parameters were sufficient in the original .{TANGLE} to
  21. handle TEX/,
  22. so they should be sufficient for most applications of .{CTANGLE}.
  23. If you change |max_bytes|, |max_names| or |hash_size| you should also
  24. change them in the file |"common.w"|.
  25. @d max_bytes 90000 /* the number of bytes in identifiers,
  26.   index entries, and section names; used in |"common.w"| */
  27. @d max_toks 270000 /* number of bytes in compressed CEE/ code */
  28. @d max_names 4000 /* number of identifiers, strings, section names;
  29.   must be less than 10240; used in |"common.w"| */
  30. @d max_texts 2500 /* number of replacement texts, must be less than 10240 */
  31. @d hash_size 353 /* should be prime; used in |"common.w"| */
  32. @d longest_name 1000 /* section names shouldn't be longer than this */
  33. @d stack_size 50 /* number of simultaneous levels of macro expansion */
  34. @d buf_size 100 /* for .{CWEAVE} and .{CTANGLE} */
  35. @y
  36. @ The following parameters were sufficient in the original .{TANGLE} to
  37. handle TEX/,
  38. so they should be sufficient for most applications of .{CTANGLE}.
  39. If you change |max_bytes|, |max_names| or |hash_size| you should also
  40. change them in the file |"common.w"|.
  41. (This is a modified version of .{CTANGLE}, and in fact one of the parameters
  42. has been reduced in value.  The parameter |max_toks|
  43. has been reduced from 270000 [which
  44. was sufficient to handle TEX/] to
  45. 170000, so that .{CTANGLE}
  46. may be run on {mc MSDOS}
  47. systems that are tight on memory.  Consider, for
  48. instance, an 80286-based machine with several TSRs and drivers, trying
  49. to run .{CTANGLE} from a makefile.)
  50. @d max_bytes 90000 /* the number of bytes in identifiers,
  51.   index entries, and section names; used in |"common.w"| */
  52. @d max_toks 170000 /* number of bytes in compressed CEE/ code */
  53. @d max_names 4000 /* number of identifiers, strings, section names;
  54.   must be less than 10240; used in |"common.w"| */
  55. @d max_texts 2500 /* number of replacement texts, must be less than 10240 */
  56. @d hash_size 353 /* should be prime; used in |"common.w"| */
  57. @d longest_name 1000 /* section names shouldn't be longer than this */
  58. @d stack_size 50 /* number of simultaneous levels of macro expansion */
  59. @d buf_size 100 /* for .{CWEAVE} and .{CTANGLE} */
  60. @z
  61. @x Section 9.
  62. @d chunk_marker 0
  63. @<Common code...@>=
  64. typedef struct name_info {
  65.   char *byte_start; /* beginning of the name in |byte_mem| */
  66.   struct name_info *link;
  67.   union {
  68.     struct name_info *Rlink; /* right link in binary search tree for section
  69.       names */
  70.     char Ilk; /* used by identifiers in .{CWEAVE} only */
  71.   } dummy;
  72.   char *equiv_or_xref; /* info corresponding to names */
  73. } name_info; /* contains information about an identifier or section name */
  74. typedef name_info *name_pointer; /* pointer into array of &{name_info}s */
  75. typedef name_pointer *hash_pointer;
  76. extern char byte_mem[]; /* characters of names */
  77. extern char *byte_mem_end; /* end of |byte_mem| */
  78. extern name_info name_dir[]; /* information about names */
  79. extern name_pointer name_dir_end; /* end of |name_dir| */
  80. extern name_pointer name_ptr; /* first unused position in |byte_start| */
  81. extern char *byte_ptr; /* first unused position in |byte_mem| */
  82. extern name_pointer hash[]; /* heads of hash lists */
  83. extern hash_pointer hash_end; /* end of |hash| */
  84. extern hash_pointer h; /* index into hash-head array */
  85. extern name_pointer id_lookup(); /* looks up a string in the identifier table */
  86. extern name_pointer section_lookup(); /* finds section name */
  87. extern void print_section_name(), sprint_section_name();
  88. @y
  89. @d chunk_marker 0
  90. @f huge extern
  91. @<Common code...@>=
  92. typedef struct name_info {
  93.   char huge* byte_start; /* beginning of the name in |byte_mem| */
  94.   struct name_info *link;
  95.   union {
  96.     struct name_info *Rlink; /* right link in binary search tree for section
  97.       names */
  98.     char Ilk; /* used by identifiers in .{CWEAVE} only */
  99.   } dummy;
  100.   union {
  101.     char *equiv_member;
  102.     char huge* xref_member;
  103.   } ptr_union; /* info corresponding to names */
  104. } name_info; /* contains information about an identifier or section name */
  105. typedef name_info *name_pointer; /* pointer into array of &{name_info}s */
  106. typedef name_pointer *hash_pointer;
  107. extern char huge byte_mem[]; /* characters of names */
  108. extern char huge* byte_mem_end; /* end of |byte_mem| */
  109. extern name_info name_dir[]; /* information about names */
  110. extern name_pointer name_dir_end; /* end of |name_dir| */
  111. extern name_pointer name_ptr; /* first unused position in |byte_start| */
  112. extern char huge* byte_ptr; /* first unused position in |byte_mem| */
  113. extern name_pointer hash[]; /* heads of hash lists */
  114. extern hash_pointer hash_end; /* end of |hash| */
  115. extern hash_pointer h; /* index into hash-head array */
  116. extern name_pointer id_lookup(); /* looks up a string in the identifier table */
  117. extern name_pointer section_lookup(); /* finds section name */
  118. extern void print_section_name(), sprint_section_name();
  119. @z
  120. @x Section 16.
  121.   eight_bits *tok_start; /* pointer into |tok_mem| */
  122.   sixteen_bits text_link; /* relates replacement texts */
  123. } text;
  124. typedef text *text_pointer;
  125. @y
  126.   eight_bits huge* tok_start; /* pointer into |tok_mem| */
  127.   sixteen_bits text_link; /* relates replacement texts */
  128. } text;
  129. typedef text *text_pointer;
  130. @z
  131. @x Section 17.
  132. eight_bits tok_mem[max_toks];
  133. eight_bits *tok_mem_end=tok_mem+max_toks-1;
  134. eight_bits *tok_ptr; /* first unused position in |tok_mem| */
  135. @y
  136. eight_bits huge tok_mem[max_toks];
  137. eight_bits huge* tok_mem_end;
  138. eight_bits huge* tok_ptr; /* first unused position in |tok_mem| */
  139. @z
  140. @x Section 18.
  141. text_info->tok_start=tok_ptr=tok_mem;
  142. text_ptr=text_info+1; text_ptr->tok_start=tok_mem;
  143.   /* this makes replacement text 0 of length zero */
  144. @y
  145. tok_mem_end=tok_mem+max_toks-1;
  146. text_info->tok_start=tok_ptr=tok_mem;
  147. text_ptr=text_info+1; text_ptr->tok_start=tok_mem;
  148.   /* this makes replacement text 0 of length zero */
  149. @z
  150. @x Section 19.
  151. @d equiv equiv_or_xref /* info corresponding to names */
  152. @y
  153. @d equiv ptr_union.equiv_member /* info corresponding to names */
  154. @z
  155. @x Section 27.
  156.   eight_bits *end_field; /* ending location of replacement text */
  157.   eight_bits *byte_field; /* present location within replacement text */
  158. @y
  159.   eight_bits huge* end_field; /* ending location of replacement text */
  160.   eight_bits huge* byte_field; /* present location within replacement text */
  161. @z
  162. @x Section 49.
  163. out_char(cur_char)
  164. eight_bits cur_char;
  165. {
  166.   char *j, *k; /* pointer into |byte_mem| */
  167. @y
  168. out_char(cur_char)
  169. eight_bits cur_char;
  170. {
  171.   char huge* j, huge* k; /* pointer into |byte_mem| */
  172. @z