INDENT.9
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:10k
源码类别:

操作系统开发

开发平台:

C/C++

  1. .CD "indent (en reformat the layout of a program"
  2. .SX "indent fIin_filefR [fIout_filefR] [fIoptionsfR]
  3. .FL "fR(many)"
  4. .EX "indent (enbr (enc25 prog.c " "Indent fIprog.cfR
  5. .EX "indent (ennpcs prog.c newprog.c" "Put output on fInewprog.c"
  6. .PP
  7. fIIndentfR reads a C program in, rearranges the layout, and outputs a
  8. new C program that will compile to the same executable binary as the original
  9. one.
  10. The difference between the input and output is that the output is in a standard
  11. layout determined by a large number of options.
  12. For most of the options there are two choices, one that enables it and one
  13. that disables it.
  14. .PP
  15. If fIindentfR is called with no file files, it operates as a filter.
  16. If called with one file name, that file is reformatted and the result
  17. replaces the original file.
  18. A backup is created, however, with the suffix fI.BAKfR.
  19. If it is called with two file names, the first one is the input file and
  20. the second one is the output file.
  21. Only one file can be reformatted at a time (e.g., one cannot call fIindentfR
  22. with *.c as argument; this is an error and will not work.).
  23. .SS "Options"
  24. .PP
  25. Many options are available.
  26. If you want to format a program to the *(OQofficial*(CQ MINIX format, use 
  27. fIprettyfR, which calls fIindentfR with the proper options and then
  28. postprocesses the output.
  29. The options listed below control the formatting style.
  30. OPTION: fB(enbadfR, fB(ennbadfR
  31. .PP
  32. If fB(enbadfR is specified, a blank line is forced
  33. after every block of declarations.  Default: fB(ennbadfR.
  34. OPTION: fB(enbapfR, fB(ennbapfR
  35. .PP
  36. If fB(enbapfR is specified, a blank line is forced
  37. after every procedure body.  Default: fB(ennbapfR.
  38. OPTION: fB(enbbbfR, fB(ennbbbfR
  39. .PP
  40. If fB(enbbbfR is specified, a blank line is forced
  41. before every block comment.  Default: fB(ennbbbfR.
  42. OPTION: fB(enbcfR, fB(ennbcfR
  43. .PP
  44. If fB(enbcfR is specified, then a newline is forced
  45. after each comma in a declaration. fB(ennbcfR turns
  46. off this option.  The default is fB(ennbcfR.
  47. OPTION: fB(enblfR, fB(enbrfR
  48. .PP
  49. Specifying fB(enblfR lines up compound statements
  50. like this:
  51. .HS
  52.    if (...)
  53.    {
  54.        code
  55.    }
  56. .HS
  57. Specifying fB(enbrfR (the default) makes them look
  58. like this:
  59. .HS
  60.    if (...) {
  61.        code
  62.    }
  63. .HS
  64. OPTION: fB(encfInfR
  65. .PP
  66. The column in which comments on code start.
  67. The default is 33.
  68. OPTION: fB(encdfInfR
  69. .PP
  70. The column in which comments on declarations
  71. start.  The default is for these comments to
  72. start in the same column as those on code.
  73. OPTION: fB(encdbfR, fB(enncdbfR
  74. .PP
  75. Enables (disables) the placement of comment
  76. delimiters on blank lines.  With this option
  77. enabled, comments look like this:
  78. .HS
  79.     /*
  80.      * this is a comment
  81.      */
  82. .HS
  83. Rather than like this:
  84. .HS
  85.     /* this is a comment */
  86. .HS
  87. This only affects block comments, not comments to the 
  88. right of code. The default is fB(encdbfR.
  89. OPTION: fB(encefR, fB(enncefR
  90. .PP
  91. Enables (disables) forcing *(OQelse*(CQs to cuddle
  92. up to the immediately preceding *(OQ}*(CQ.  The
  93. default is fB(encefR.
  94. OPTION: fB(encifInfR
  95. .PP
  96. Sets the continuation indent to be fInfR.  Continuation lines will be indented 
  97. that far from the beginning of the first line of the
  98. statement.  Parenthesized expressions have
  99. extra indentation added to indicate the nesting, unless fB(enlpfR 
  100. is in effect.  fB(encifR defaults
  101. to the same value as fB(enifR.
  102. OPTION: fB(enclifInfR
  103. .PP
  104. Causes case labels to be indented fInfR tab stops
  105. to the right of the containing switch statement.  fB(enclifR0.5 causes 
  106. case labels to be
  107. indented half a tab stop.  The default is fB(enclifR0.  
  108. (This is the only option that takes a fractional argument.)
  109. OPTION: fB(endfIs+2ns0fR
  110. .PP
  111. Controls the placement of comments which are
  112. not to the right of code.  Specifying fB(endfR1
  113. means that such comments are placed one
  114. indentation level to the left of code.  The
  115. default fB(endfR0 lines up these comments with the
  116. code.  See the section on comment indentation
  117. below.
  118. OPTION: fB(endifIs+2ns0fR
  119. .PP
  120. Specifies the indentation, in character positions, from a declaration keyword 
  121. to the following identifier.  The default is fB(endifR16.
  122. OPTION: fB(endjfR, fB(enndjfR
  123. .PP
  124. fB(endjfR left justifies declarations.  fB(enndjfR
  125. indents declarations the same as code.  The
  126. default is fB(enndjfR.
  127. OPTION: fB(eneifR, fB(enneifR
  128. .PP
  129. Enables (disables) special elsefB(eniffR processing.  
  130. If enabled, ifs following elses will
  131. have the same indentation as the preceding if
  132. statement.  The default is fB(eneifR.
  133. OPTION: fB(enfcfR1, fB(ennfcfR1
  134. .PP
  135. Enables (disables) the formatting of comments
  136. that start in column 1.  Often, comments
  137. whose leading *(OQ/*(CQ is in column 1 have been
  138. carefully hand formatted by the programmer.
  139. In such cases, fB(ennfcfR1 should be used.  The
  140. default is fB(enfcfR1.
  141. OPTION: fB(enifIs+1ns0fR
  142. .PP
  143. The number of spaces for one indentation
  144. level.  The default is 8.
  145. OPTION: fB(enipfR, fB(ennipfR
  146. .PP
  147. Enables (disables) the indentation of parameter declarations from the 
  148. left margin.  The default is fB(enipfR.
  149. OPTION: fB(enlnfR
  150. .PP
  151. Maximum length of an output line.  The default is 78.
  152. OPTION: fB(enlpfR, fB(ennlpfR
  153. .PP
  154. Lines up code surrounded by parenthesis in
  155. continuation lines.  If a line has a left
  156. paren which is not closed on that line, then
  157. continuation lines will be lined up to start
  158. at the character position just after the left
  159. paren. 
  160. OPTION: fB(ennprofR
  161. .PP
  162. Causes the profile files, fI.indent.profR in both the current directory
  163. and the user's home directory to be ignored.
  164. OPTION: fB(enpcsfR, fB(ennpcsfR
  165. .PP
  166. If true (fB(enpcsfR) all procedure calls will have
  167. a space inserted between the name and the *(OQ(*(CQ.  
  168. The default is fB(ennpcsfR.
  169. OPTION: fB(enpsfR, fB(ennpsfR
  170. .PP
  171. If true (fB(enpsfR) the pointer following operator *(OQ(en>*(CQ will be surrounded by 
  172. spaces on either side.  The default is fB(ennpsfR.
  173. OPTION: fB(enpslfR, fB(ennpslfR
  174. .PP
  175. If true (fB(enpslfR) the names of procedures being
  176. defined are placed in column 1 (en their types,
  177. if any, will be left on the previous lines.
  178. The default is fB(enpslfR.
  179. OPTION: fB(enscfR, fB(ennscfR
  180. .PP
  181. Enables (disables) the placement of asterisks
  182. (*) at the left edge of all comments.  The default is fB(enscfR.
  183. OPTION: fB(ensobfR, fB(ennsobfR
  184. .PP
  185. If fB(ensobfR is specified, fIindentfR will swallow
  186. optional blank lines.  You can use this to
  187. get rid of blank lines after declarations. The default is fB(ennsobfR.
  188. OPTION: fB(enstfR
  189. .PP
  190. Causes fIindentfR to take its input from fIstdinfR, and put its output 
  191. to fIstdoutfR.
  192. OPTION: fB(enTfItypenamefR
  193. .PP
  194. Adds typename to the list of type keywords.
  195. Names accumulate: fB(enTfR can be specified more
  196. than once.  You need to specify all the
  197. typenames that appear in your program that
  198. are defined by #typedefs. Nothing will be
  199. harmed if you miss a few, but the program
  200. will not be formatted as nicely as it should.
  201. This sounds like a painful thing to have to
  202. do, but it is really a symptom of a problem in
  203. C: typedef causes a syntactic change in the
  204. language and fIindentfR cannot find all typedefs.
  205. OPTION: fB(entrofffR
  206. .PP
  207. Causes fIindentfR to format the program for processing by fItrofffR.  
  208. It will produce a fancy listing in much the same spirit as fIvgrindfR.
  209. If the output file is not specified, the
  210. default is standard output, rather than formatting in place.
  211. OPTION: fB(envfR, fB(ennvfR
  212. .PP
  213. The fB(envfR flag turns on verbose mode; fB(ennvfR turns it off.
  214. When in verbose mode, fIindentfR reports when it
  215. splits one line of input into two or more
  216. lines of output, and gives some size statistics at completion. The 
  217. default is fB(ennvfR.
  218. .SS "User Profiles"
  219. .PP
  220. You may set up your own profile of defaults to fIindentfR by
  221. creating a file called fI.indent.profR in either your login
  222. directory and/or the current directory and including whatever switches 
  223. you like.  Switches in fI.indent.profR in the
  224. current directory override those in your login directory
  225. (with the exception of fB(enTfR type definitions, which just accumulate).  
  226. If fIindentfR is run and a profile file exists, then
  227. it is read to set up the program's defaults.  The switches
  228. should be separated by spaces, tabs or newlines.  Switches
  229. on the command line, however, override profile switches.
  230. .SS "Comments"
  231. .PP
  232. fIIndentfR assumes that any comment with a dash
  233. or star immediately after the start of comment (that is, *(OQ/*(en*(CQ 
  234. or *(OQ/***(CQ) is a 
  235. comment surrounded by a box of stars.
  236. Each line of such a comment is left unchanged, except that
  237. its indentation may be adjusted to account for the change in
  238. indentation of the first line of the comment.
  239. .PP
  240. All other comments are treated as straight
  241. text.  Indent fits as many words (separated by blanks, tabs,
  242. or newlines) on a line as possible.  Blank lines break paragraphs.
  243. .PP
  244. If a comment is on a line with code it is started in the
  245. comment column, which is set by the fB(encnfR command line
  246. parameter.  Otherwise, the comment is started at fInfR indentation levels 
  247. less than where code is currently being placed,
  248. where n is specified by the fB(endnfR command line parameter.  If
  249. the code on a line extends past the comment column, the comment starts 
  250. further to the right, and the right margin may
  251. be automatically extended in extreme cases.
  252. .SS "Preprocessor Lines"
  253. .PP
  254. In general, fIindentfR leaves preprocessor lines alone.  The
  255. only reformatting that it will do is to straighten up trailing comments.  
  256. It leaves embedded comments alone.  Conditional compilation 
  257. (#ifdef...#endif) is recognized and
  258. fIindentfR attempts to correctly compensate for the syntactic
  259. peculiarities introduced.
  260. .SS "C Syntax"
  261. .PP
  262. Indent understands a substantial amount about the syntax of
  263. C, but it has a forgiving parser.  It attempts to cope
  264. with the usual sorts of incomplete and misformed syntax.  In
  265. particular, the use of macros like:
  266. .HS
  267.         #define forever for(;;)
  268. .HS
  269. is handled properly.