ch.c
上传用户:urdevil
上传日期:2007-01-07
资源大小:2k
文件大小:4k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

WINDOWS

  1. /*
  2.  * CH.C
  3.  *
  4.  * Usage: ch input.htm > output.txt
  5.  * CH wraps text and indents tags, the better to SEE inside HTML files.
  6.  * The output file will be corrupt, but easier to read in a text editer.
  7.  *
  8.  * Copyright (C) 1998 Glenn Scheper. This program is free software;
  9.  * you can redistribute it and/or modify it under the terms of the GNU
  10.  * General Public License as published by the Free Software Foundation;
  11.  * either version 2 of the License, or any later version.
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15.  * GNU General Public License for more details. You should have
  16.  * received a copy of the GNU General Public License along with
  17.  * this program; if not, write to the Free Software Foundation,
  18.  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19.  *
  20.  * Contact CH's author Glenn Scheper at <URL:mailto:scheper@hughes.net>.
  21.  * Download CH.C and CH.EXE at <URL:http://hughes.net/~scheper/>.
  22.  * GNU General Public License: <URL:http://www.fsf.org/copyleft/gpl.html>.
  23.  *
  24.  * Compiled under Microsoft Developer Studio and
  25.  * Microsoft Visual C++ 5.0 compiler as follows:
  26.  * 
  27.  * Go where you make new VC++ projects. ( I use C:IVC. )
  28.  * Make a new directory ch.
  29.  * Copy ch.c to directory ch.
  30.  * Execute MS VC++.
  31.  * Do: File | New...
  32.  * Make sure or fix so Location says "C:IVC" or whatever.
  33.  * Scroll down to "Win32 Console Application".
  34.  * Tab to "Project Name". Type in "ch". Click OK.
  35.  * A new workspace for ch will appear.
  36.  * Click on the "File View" tab.
  37.  * Right-Click on "ch Files".
  38.  * Select "Add Files to Project...".
  39.  * Select the file "ch.c". Click OK.
  40.  * Do: Build | "Set Active Configuration..."
  41.  * Select "ch - Win32 release". Click OK.
  42.  * Do: Build, Rebuild all.
  43.  * Copy ./release/ch.exe to a directory in the path.
  44.  */
  45. char CHVersionAndDate [] = "CH version 1.0, Dec 1, 1998.";
  46. #include <stdio.h>
  47. #include <stdlib.h>
  48. #include <io.h>
  49. #include <fcntl.h>
  50. void GiveUsageMessage( )
  51. {
  52. fprintf( stderr,
  53. " Usage: ch input.htm > output.txtn"
  54. " CH wraps text and indents tags, the better to SEE inside HTML files.n"
  55. " The output file will be corrupt, but easier to read in a text editer.n"
  56. "n"
  57. " %s Copyright (C) 1998 Glenn Scheper.n" // ...CHVersionAndDate here
  58. " CH comes with ABSOLUTELY NO WARRANTY; See source code for details.n"
  59. " This is free software, and you are welcome to redistribute it undern"
  60. " certain conditions; See source code for details. <scheper@hughes.net>.n"
  61. " Download source and executable from <URL:http://www.hughes.net/~scheper/>.n",
  62. CHVersionAndDate );
  63. return;
  64. }
  65. char space[256];
  66. int column = 0;
  67. int InTag = 0;
  68. int CanSpace = 0;
  69. int OweSpace = 0;
  70. void StartTag()
  71. {
  72. InTag = 1;
  73. if (column != 0)
  74. {
  75. putchar('r');
  76. putchar('n');
  77. }
  78. putchar('t');
  79. column = 8;
  80. CanSpace=0;
  81. OweSpace=0;
  82. }
  83. void StopTag()
  84. {
  85. InTag = 0;
  86. putchar('r');
  87. putchar('n');
  88. column = 0;
  89. CanSpace=0;
  90. OweSpace=0;
  91. }
  92. void CharOut(int c)
  93. {
  94. if(OweSpace) {
  95. putc(' ', stdout);
  96. column ++;
  97. }
  98. OweSpace=0;
  99. if(InTag) {
  100. putc(c, stdout);
  101. column ++;
  102. } else {
  103. putc(c, stdout);
  104. column ++;
  105. }
  106. CanSpace=1;
  107. }
  108. void SpaceOut()
  109. {
  110. if(CanSpace) {
  111. if(InTag) {
  112. if(column > 60) {
  113. putchar('r');
  114. putchar('n');
  115. putchar('t');
  116. putchar('t');
  117. CanSpace=0;
  118. column = 16;
  119. } else {
  120. OweSpace=1;
  121. }
  122. } else {
  123. if(column > 60) {
  124. putchar('r');
  125. putchar('n');
  126. CanSpace=0;
  127. column = 0;
  128. } else {
  129. OweSpace=1;
  130. }
  131. }
  132. }
  133. CanSpace=0;
  134. }
  135. void main( int argc, char ** argv )
  136. {
  137. int c;
  138. FILE * fp;
  139. if( argc != 2 )
  140. {
  141. GiveUsageMessage( );
  142. exit( 1 );
  143. }
  144. fp = freopen( argv[1], "r", stdin );
  145. if( fp == ( FILE* )0 )
  146. {
  147. fprintf( stderr, "Error: CH cannot open %s.rn", argv[1] );
  148. exit ( 1 );
  149. }
  150. if( setmode( 0, O_BINARY )==-1 )
  151. {
  152. fprintf( stderr, "Error: CH cannot change input file mode to O_BINARY" );
  153. exit( 1 );
  154. }
  155. if( setmode( 1, O_BINARY )==-1 )
  156. {
  157. fprintf( stderr, "Error: CH cannot change stdout file mode to O_BINARY" );
  158. exit( 1 );
  159. }
  160. space[' '] = 1;
  161. space['t'] = 1;
  162. space['r'] = 1;
  163. space['n'] = 1;
  164. space['f'] = 1;
  165. while( ( c=getchar( ) ) != -1 )
  166. {
  167. if(space[c]) {
  168. SpaceOut();
  169. } else if(c == '<') {
  170. StartTag();
  171. CharOut(c);
  172. } else if(c == '>') {
  173. CharOut(c);
  174. StopTag();
  175. } else {
  176. CharOut(c);
  177. }
  178. }
  179. exit( 0 );
  180. }