home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / dev / misc / cweb / examples / wc-p.ch < prev    next >
Text File  |  1993-12-21  |  5KB  |  151 lines

  1.                                 -*-Web-*-
  2. This file, WC-P.CH, is part of CWEB-p.  It is a changefile written by
  3. Andreas Scherer, Abt-Wolf-Straße 17, 96215 Lichtenfels, Germany, for
  4. WC.W that provides changes appropriate for ANSI-C compilers.
  5.  
  6. This program is distributed WITHOUT ANY WARRANTY, express or implied.
  7.  
  8. The following copyright notice extends to this changefile only, not to the
  9. masterfile.
  10.  
  11. Copyright (c) 1993 Andreas Scherer
  12.  
  13. Permission is granted to make and distribute verbatim copies of this
  14. document provided that the copyright notice and this permission notice
  15. are preserved on all copies.
  16.  
  17. Permission is granted to copy and distribute modified versions of this
  18. document under the conditions for verbatim copying, provided that the
  19. entire resulting derived work is distributed under the terms of a
  20. permission notice identical to this one.
  21.  
  22. Version history:
  23.  
  24. Version    Date        Author    Comment
  25. p1    1 Sep 1993    AS    First hack.
  26. p2    29 Sep 1993    AS    File descriptor fd replaced by FILE pointer fp
  27. p3    25 Oct 1993    AS    Updated to CWEB 3.0
  28. ------------------------------------------------------------------------------
  29. @x l.5 Save paper.
  30. \def\SPARC{SPARC\-\kern.1em station}
  31. @y
  32. \def\SPARC{SPARC\-\kern.1em station}
  33. \def\fin{\par\vfill\eject % this is done when we are ending the index
  34.   \message{Section names:}
  35.   \def\note##1##2.{\quad{\eightrm##1~##2.}}
  36.   \def\U{\note{Used in section}} % crossref for use of a section
  37.   \def\Us{\note{Used in sections}} % crossref for uses of a section
  38.   \def\I{\par\hangindent 2em}\let\*=*
  39.   \readsections}
  40. @z
  41. ------------------------------------------------------------------------------
  42. An extra module will contain the local prototypes.
  43. @x l.30
  44. @c
  45. @<Header files to include@>@/
  46. @<Global variables@>@/
  47. @<Functions@>@/
  48. @<The main program@>
  49. @y
  50. @c
  51. @<Header files to include@>@/
  52. @<Global variables@>@/
  53. @<Prototypes@>@/
  54. @<Functions@>@/
  55. @<The main program@>
  56. @z
  57. ------------------------------------------------------------------------------
  58. Also some global prototypes are needed.
  59. @x l.39
  60. @<Header files...@>=
  61. #include <stdio.h>
  62. @y
  63. @<Header files...@>=
  64. #include <stdio.h>
  65. #include <stdlib.h>
  66. @z
  67. ------------------------------------------------------------------------------
  68. Just for completeness.
  69. @x l.57
  70. main (argc,argv)
  71. @y
  72. void main(argc,argv)
  73. @z
  74. ------------------------------------------------------------------------------
  75. We want *all* programs in this directory to be fully ANSI compatible.
  76. @x l.104
  77. @ Here's the code to open the file.  A special trick allows us to
  78. handle input from |stdin| when no name is given.
  79. Recall that the file descriptor to |stdin| is~0; that's what we
  80. use as the default initial value.
  81.  
  82. @<Variabl...@>=
  83. int fd=0; /* file descriptor, initialized to |stdin| */
  84. @y
  85. @ Here's the code to open the file.  A special trick allows us to
  86. handle input from |stdin| when no name is given.
  87.  
  88. @<Variabl...@>=
  89. FILE *fp=stdin; /* file pointer, initialized to the console */
  90. @z
  91. ------------------------------------------------------------------------------
  92. @x l.112
  93. @ @d READ_ONLY 0 /* read access code for system |open| routine */
  94. @y
  95. @ @d READ_ONLY "r" /* read access code for system |fopen| routine */
  96. @z
  97. ------------------------------------------------------------------------------
  98. @x l.116
  99. if (file_count>0 && (fd=open(*(++argv),READ_ONLY))<0) {
  100. @y
  101. if (file_count>0 && (fp=fopen(*(++argv),READ_ONLY))==0) {
  102. @z
  103. ------------------------------------------------------------------------------
  104. @x l.123
  105. @ @<Close file@>=
  106. close(fd);
  107. @y
  108. @ @<Close file@>=
  109. fclose(fp);
  110. @z
  111. ------------------------------------------------------------------------------
  112. @x l.174
  113. if (ptr>=buf_end) {
  114.   ptr=buffer; c=read(fd,ptr,buf_size);
  115.   if (c<=0) break;
  116.   char_count+=c; buf_end=buffer+c;
  117. }
  118. @y
  119. if (ptr>=buf_end) {
  120.   ptr=buffer; c=fread(ptr,1,buf_size,fp);
  121.   if (c<=0) break;
  122.   char_count+=c; buf_end=buffer+c;
  123. }
  124. @z
  125. ------------------------------------------------------------------------------
  126. |wc_print| does not return a value, so make it |void|.
  127. @x l.213
  128. wc_print(which, char_count, word_count, line_count)
  129. char *which; /* which counts to print */
  130. long char_count, word_count, line_count; /* given totals */
  131. @y
  132. void wc_print(which, char_count, word_count, line_count)
  133. char *which; /* which counts to print */
  134. long char_count, word_count, line_count; /* given totals */
  135. @z
  136. ------------------------------------------------------------------------------
  137. The additional module for the function prototypes must not disturb the
  138. numbering of the original documentation.
  139. @x l.237
  140. @* Index.
  141. @y
  142. @ We declare the prototypes of the internal functions.
  143.  
  144. @<Prototypes@>=
  145. void wc_print(char*,long,long,long);
  146. void main(int,char**);
  147.  
  148. @* Index and section names.
  149. @z
  150. ------------------------------------------------------------------------------
  151.