Annotation of gcc/proto-man, revision 1.1.1.1

1.1       root        1: #ifndef UNPRO
                      2: #define THISPROG PROTOIZE
                      3: #define thisprog protoize
                      4: #define Thisprog Protoize
                      5: #define otherprog unprotoize
                      6: #define from_convention varargs
                      7: #define to_convention stdarg
                      8: #else
                      9: #define THISPROG UNPROTOIZE
                     10: #define thisprog unprotoize
                     11: #define Thisprog Unprotoize
                     12: #define otherprog protoize
                     13: #define from_convention stdarg
                     14: #define to_convention varargs
                     15: #endif
                     16: .\"     Man page file for the thisprog program.
                     17: .\"     This is badly out of date, especially concerning
                     18: .\"     the way of deciding which files to convert.
                     19: .\"     Really all this information should be updated and put in gcc.texinfo.
                     20: .\"  
                     21: .\"     Written by Ron Guilmette ([email protected]).
                     22: .\"  
                     23: .\"     Copyright (C) 1989, 1990 Free Software Foundation, Inc.
                     24: .\"  
                     25: .\"  This file is part of GNU CC.
                     26: .\"  
                     27: .\"  GNU CC is free software; you can redistribute it and/or modify
                     28: .\"  it under the terms of the GNU General Public License as published by
                     29: .\"  the Free Software Foundation; either version 1, or (at your option)
                     30: .\"  any later version.
                     31: .\"  
                     32: .\"  GNU CC is distributed in the hope that it will be useful,
                     33: .\"  but WITHOUT ANY WARRANTY; without even the implied warranty of
                     34: .\"  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     35: .\"  GNU General Public License for more details.
                     36: .\"  
                     37: .\"  You should have received a copy of the GNU General Public License
                     38: .\"  along with GNU CC; see the file COPYING.  If not, write to
                     39: .\"  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     40: .\"
                     41: .TH THISPROG 1 "21 January 1990" ""
                     42: .SH NAME
                     43: #ifndef UNPRO
                     44: thisprog \- convert K&R C source code to ANSI C prototype format
                     45: #else
                     46: thisprog \- convert ANSI C source code to K&R C (unprototyped) format
                     47: #endif
                     48: .SH SYNOPSIS
                     49: .B thisprog
                     50: [
                     51: #ifndef UNPRO
                     52: .B -VqfnkNlgC
                     53: ] [
                     54: .B -B
                     55: .I <dir>
                     56: #else
                     57: .B -VqfnkN
                     58: ] [
                     59: .B -i
                     60: .I <str>
                     61: #endif
                     62: ] [
                     63: .B -c
                     64: .I <cc opts>
                     65: ] [
                     66: .I file\c
                     67: \&... ]
                     68: .SH DESCRIPTION
                     69: .fi
                     70: .ad b
                     71: .I Thisprog
                     72: aids in the conversion of 
                     73: #ifndef UNPRO
                     74: K&R C source code files to ANSI C source code files with function prototypes.
                     75: This conversion is useful for eliciting more complete
                     76: interface checking from ANSI C compilers, or as
                     77: a preliminary step in the conversion of C programs to C++.
                     78: #else
                     79: ANSI C source code files to K&R C source code files without function prototypes
                     80: .
                     81: This conversion is useful for porting ANSI C programs to
                     82: machines for which no ANSI C compiler is available.
                     83: #endif
                     84: .PP
                     85: .I Thisprog
                     86: is designed to be used in conjunction
                     87: with the GNU C compiler.  The GNU C compiler does preliminary
                     88: .I "information gathering"
                     89: about functions by analyzing the files to be converted.
                     90: The GNU C compiler may be invoked automatically as a result of
                     91: running
                     92: .I thisprog
                     93: so it is important to have it properly installed before attempting
                     94: to convert source files via
                     95: .I thisprog.
                     96: #ifndef UNPRO
                     97: .PP
                     98: .I Thisprog
                     99: actually has two primary functions.  First, It converts
                    100: existing function declarations and definitions
                    101: to prototype form.
                    102: Second, for cases in which functions
                    103: are called before they have been declared
                    104: (i.e. points of
                    105: .I implicit
                    106: function declarations),
                    107: .I thisprog
                    108: can be instructed to
                    109: insert new prototype style function declarations
                    110: into the source code.
                    111: For implicit function declarations,
                    112: .I thisprog
                    113: can either
                    114: insert the new (explicit) function declaration
                    115: at the very beginning of the block which contains
                    116: the implicit declaration, or (at the user\'s option)
                    117: these explicit declarations can be inserted near the tops of the
                    118: source files where the implicit declarations occurred.
                    119: The insertion of these new (explicit) function
                    120: declarations (by thisprog) assures that
                    121: .B all
                    122: function calls in your source files will be 
                    123: checked for the correct
                    124: number and types of parameters
                    125: during subsequent compilations.
                    126: #endif
                    127: .PP
                    128: .I Thisprog
                    129: supports the conversion of both large and small systems of C source
                    130: code to
                    131: #ifndef UNPRO
                    132: prototype
                    133: #else
                    134: unprototyped
                    135: #endif
                    136: form.
                    137: .I Thisprog
                    138: can perform the conversion of an
                    139: entire program in one (batch) step.
                    140: #ifndef UNPRO
                    141: .PP
                    142: .I Thisprog
                    143: is able to convert entire systems of C source code because
                    144: it knows how to use information (gleaned by the C compiler) from one
                    145: source file to convert
                    146: function definitions and declarations in that same source file or in
                    147: other source files (as required).
                    148: #endif
                    149: .PP
                    150: Each conversion of a system of source code to
                    151: #ifndef UNPRO
                    152: prototyped
                    153: #else
                    154: unprototyped
                    155: #endif
                    156: format consists of two major steps.  First, there is an
                    157: .I "information gathering"
                    158: step.  In this step,
                    159: all of the source files that make up a given
                    160: executable program are recompiled using the GNU C compiler and using the
                    161: .B -fgen-aux-info
                    162: option.
                    163: These recompilations will be performed automatically by
                    164: .I thisprog
                    165: on an
                    166: .I as needed
                    167: basis.
                    168: .PP
                    169: As individual compilation steps are performed, you may notice
                    170: that a side-effect of these compilations is to create files with a
                    171: .B .X
                    172: suffix in the same directory with the original
                    173: .I base
                    174: source files being compiled.
                    175: During compilation with
                    176: .B -fgen-aux-info,
                    177: one such
                    178: .B .X
                    179: file is created for
                    180: each
                    181: .I base
                    182: source file compiled.  These files contain
                    183: information above function definitions and declarations and
                    184: additional coded information which can be used by
                    185: .I thisprog
                    186: to convert your source code
                    187: automatically to
                    188: #ifndef UNPRO
                    189: prototyped
                    190: #else
                    191: unprototyped
                    192: #endif
                    193: format.
                    194: .PP
                    195: After a full set of
                    196: .B .X
                    197: files corresponding to all of the
                    198: .B .c
                    199: (i.e.
                    200: .I base
                    201: source) files for an individual
                    202: program
                    203: have been created,
                    204: .I thisprog
                    205: performs the actual conversion step.
                    206: .PP
                    207: Execution of the
                    208: .I thisprog
                    209: program causes your original source files to be converted such that both
                    210: their function declarations and their function definitions are in
                    211: #ifndef UNPRO
                    212: prototyped
                    213: #else
                    214: unprototyped
                    215: #endif
                    216: format.
                    217: After the conversion of your system, you will be
                    218: left with a set of similar (but converted) source files
                    219: with the same names as your original files.
                    220: .PP
                    221: Before it writes each converted file back to disk,
                    222: .I thisprog
                    223: attempts to rename the original file, giving it a
                    224: .B .save
                    225: suffix.
                    226: It then creates a new output file
                    227: with the same name that the original file had.
                    228: This ensures that if there were any hard links to the original
                    229: input files, these will not be altered by the conversion process.
                    230: .PP
                    231: WARNING!  If for any given original file, a save file already exists,
                    232: .I thisprog
                    233: will assume that the existing save file contains a backup of the
                    234: original file as it existed before any conversions were applied.
                    235: Thus, if there is an existing save file,
                    236: .I thisprog
                    237: will not overwrite this existing save file, and no new backup of
                    238: that particular original file will be made during that run of
                    239: .I thisprog.
                    240: .PP
                    241: An important safety feature of
                    242: .I thisprog
                    243: is that it normally only tries to convert files for which you have both
                    244: read and write permissions.  Also,
                    245: .I thisprog
                    246: will normally only convert files located in directories that you
                    247: have both search and write permissions for.
                    248: .PP
                    249: Another safety feature is that
                    250: .I thisprog
                    251: will not normally convert files which
                    252: are located in
                    253: .I system
                    254: include directories.
                    255: A
                    256: .I system
                    257: include directory is defined by
                    258: .I thisprog
                    259: as either
                    260: .B /usr/include
                    261: (or any of its subdirectories)
                    262: or a directory whose full absolute pathname includes
                    263: either
                    264: .B gcc-include
                    265: or
                    266: .B g++-include.
                    267: .PP
                    268: Most of the above safety features can be overridden by using the
                    269: .B \-f
                    270: (force) option (see below),
                    271: but even when
                    272: .B \-f
                    273: is used, you cannot force the conversion of files for which you
                    274: do not at least have read permission, or files in directories that you do not
                    275: at least have write permission for.
                    276: .PP
                    277: Note that
                    278: .I thisprog
                    279: will make no attempt to convert definitions
                    280: #ifndef UNPRO
                    281: or declarations
                    282: #endif
                    283: of functions which accept a variable number of arguments
                    284: and which are written using the
                    285: .I from_convention
                    286: conventions.
                    287: All such function definitions
                    288: #ifndef UNPRO
                    289: and declarations
                    290: #endif
                    291: must be converted manually to the
                    292: .I to_convention
                    293: conventions.
                    294: Warnings are automatically issued for
                    295: .I from_convention
                    296: function definitions
                    297: #ifndef UNPRO
                    298: and declarations
                    299: #endif
                    300: which are left unconverted by
                    301: .I thisprog.
                    302: .SH OPTIONS
                    303: .I Thisprog
                    304: recognizes the following options:
                    305: .TP
                    306: .B \-V
                    307: Version number.  Causes the current version number to be
                    308: printed on stderr.
                    309: .TP
                    310: .B \-q
                    311: Quiet mode.
                    312: Normally,
                    313: .I thisprog
                    314: may issue many verbose warnings concerning noteworthy conditions.
                    315: These warnings can often be helpful to the overall conversion effort.
                    316: Users who prefer not to see such messages can use the
                    317: .B \-q
                    318: option which suppresses most such warnings.
                    319: .TP
                    320: .B \-f
                    321: Force mode.
                    322: Use of this option overrides the normal safety
                    323: features of
                    324: .I thisprog.
                    325: It allows for attempts to convert system include files,
                    326: and files not writable by you.
                    327: These conversions are still subject to all normal
                    328: file protections provided by the operating system.
                    329: This option should be used only with extreme caution.
                    330: It can be especially dangerous to use this option when logged on as
                    331: .I root.
                    332: Note that when this option is used, you are allowed to convert even files
                    333: that you do not have write access to.  So long as you have write access
                    334: to the containing directory, conversion may occur.
                    335: .TP
                    336: .B \-n
                    337: No convert mode.  Do not actually perform any conversions on base source files
                    338: or on include files.  Rather, simply do all steps leading up to conversion
                    339: and then print a list (to stdout) of the names of all files which would
                    340: actually be modified if the conversions were actually performed.  This option
                    341: may be useful to you if you are converting a system of source files
                    342: that you are unfamiliar with.  In such cases, you may need to verify
                    343: ahead of time that include files which belong to other people or to
                    344: other projects will not be modified by running
                    345: .I thisprog.
                    346: Use of this option also implicitly enables
                    347: .I keep mode.
                    348: (See the
                    349: .B \-k
                    350: option below.)
                    351: .TP
                    352: .B \-k
                    353: Keep mode.  Normally,
                    354: .I thisprog
                    355: reads the information in the
                    356: .B .X
                    357: files created by the GNU C compiler, and then
                    358: immediately deletes these files (since they will no longer be
                    359: valid or useful after conversion).  When the
                    360: .B \-k
                    361: option is used however, the
                    362: .B .X
                    363: files are not deleted during conversion.
                    364: .TP
                    365: .B -N
                    366: No save mode.  When this option is used, no attempt is made to
                    367: make backups of original files (by renaming them such that they have
                    368: an added
                    369: .B .save
                    370: suffix).
                    371: Use this option with extreme caution, and
                    372: only when you have previously backed up
                    373: all of the files that might be converted
                    374: by running
                    375: .I thisprog.
                    376: (See the
                    377: .B -n
                    378: option above.)
                    379: .TP
                    380: .B \-c <cc opts>
                    381: Specify compile options.  The
                    382: .B \-c
                    383: option can be used as a means of passing on important compilation
                    384: options to the C compiler.  It may often be necessary to use this option
                    385: to pass command line preprocessor definitions on to the compilation step.
                    386: Note that The compile options must be given as a single argument to
                    387: .I thisprog.
                    388: If you have more than one
                    389: compilation option, you will have to quote the entire set of
                    390: compilation options in order to keep the shell from treating
                    391: them as separate arguments to
                    392: .I thisprog.
                    393: Note also that certain options are automatically suppressed by
                    394: .I thisprog
                    395: and cannot be passed on to the compiler (i.e.
                    396: .B "-g, -O, -c, -S,"
                    397: and
                    398: .B "-o"
                    399: are suppressed).
                    400: #ifndef UNPRO
                    401: .TP
                    402: .B \-C
                    403: C++ conversion mode.
                    404: Normally,
                    405: .I thisprog
                    406: writes its (converted) output files back to files of the same names
                    407: as the original (unconverted) input files.
                    408: In C++ conversion mode,
                    409: after each output file is written,
                    410: a check is made to see if the given output file has a
                    411: .B .c
                    412: suffix.  If it does, then the given file is renamed, and its suffix
                    413: is changed to
                    414: .B .C.
                    415: This makes the output file
                    416: acceptable as a C++ input file for either the GNU C++ compiler or
                    417: for the Cfront translator.
                    418: .TP
                    419: .B \-l
                    420: Add explicit local declarations.  This option causes
                    421: .I thisprog
                    422: to insert
                    423: explicit declarations for functions that were only implicitly declared
                    424: in the original source code.  When the
                    425: .B \-l
                    426: option is used, lists of additional new
                    427: explicit function declarations are inserted near the
                    428: starts of blocks where explicit function declarations took place.
                    429: (See also the
                    430: .B \-g
                    431: option below.)
                    432: .TP
                    433: .B \-g
                    434: Add explicit global declarations.  This option causes
                    435: .I thisprog
                    436: to insert
                    437: explicit declarations for functions that were only implicitly declared
                    438: in your original source code.  When the
                    439: .B \-g
                    440: option is used, a list of additional new
                    441: explicit function declarations is inserted just before the
                    442: first function definition in each individual source file that previously
                    443: contained implicit declarations.
                    444: (See also the
                    445: .B \-l
                    446: option above.)
                    447: .TP
                    448: .B \-B <dir>
                    449: Alternate library directory option.  Use this option to specify that
                    450: .I thisprog
                    451: should attempt to find the file
                    452: .B SYSCALLS.c.X
                    453: in the alternate directory indicated in the option.
                    454: #else
                    455: .TP
                    456: .B \-i <str>
                    457: Indent string option.
                    458: This option can be used to specify a string to use when indenting
                    459: lines containing declarations for formal parameter variables.
                    460: The default indentation string for such lines is a sequence of five spaces
                    461: (i.e.\ GNU style indentation) but you may use this option to specify
                    462: any other string that you like (e.g.\ a tab character).
                    463: Note that
                    464: the shell has its own interpretations for blanks and tabs, so you
                    465: will generally have to quotes the argument given in the
                    466: .B -i
                    467: option.
                    468: #endif
                    469: .SH EXAMPLES
                    470: Assume that you have
                    471: a directory with
                    472: all of the files for your system in it.  Also
                    473: assume that your system consists of two
                    474: executable programs, one built from the files
                    475: .B s1.c, s2.c,
                    476: and
                    477: .B s3.c,
                    478: and the other built from the files
                    479: .B s4.c
                    480: and
                    481: .B s5.c.
                    482: Finally, assume that these source files share some common include files.
                    483: .PP
                    484: In order to properly convert such a system of programs, you
                    485: would need to perform the steps shown below.
                    486: .sp 1
                    487: .in +0.5i
                    488: .ft B
                    489: thisprog s1.c s2.c s3.c
                    490: .br
                    491: thisprog s4.c s5.c
                    492: .sp 1
                    493: .ft R
                    494: .in -0.5i
                    495: .PP
                    496: In the example above, the first invocation of
                    497: .I thisprog
                    498: causes three
                    499: .B .X
                    500: files (called
                    501: .B s1.c.X, s2.c.X,
                    502: and
                    503: .B s3.c.X)
                    504: to be created.
                    505: These files are generated automatically by
                    506: .I thisprog
                    507: (which invokes the GNU C compiler to create them).
                    508: These files contain information about function definitions and declarations
                    509: .I both
                    510: for their corresponding
                    511: .B .c
                    512: files and for any files
                    513: which are included by these
                    514: .I base
                    515: .B .c
                    516: files.
                    517: .PP
                    518: After
                    519: .I thisprog
                    520: has invoked the compiler for each of the files which make up
                    521: .I prog1,
                    522: it performs the actual conversion of these base files (and
                    523: may perform some conversion of their include files
                    524: depending upon the information available in the
                    525: .B .X
                    526: files).
                    527: Finally, after performing all necessary conversions,
                    528: .I thisprog
                    529: automatically deletes the files
                    530: .B s1.c.X, s2.c.X,
                    531: and
                    532: .B s3.c.X.
                    533: .PP
                    534: After performing the conversion for
                    535: .I prog1,
                    536: (as illustrated above)
                    537: you would then
                    538: request
                    539: .I thisprog
                    540: to convert all of the files which make up
                    541: .I prog2
                    542: in a similar fashion.
                    543: This step would create two more
                    544: .B .X
                    545: files (called
                    546: .B s4.c.X
                    547: and
                    548: .B s5.c.X).
                    549: As with the conversion of
                    550: .I prog1,
                    551: .I thisprog
                    552: will automatically generate any needed
                    553: .B .X
                    554: files (by invoking the GNU C compiler),
                    555: will perform the conversion of all of the given
                    556: .I base
                    557: source files (and possibly do some conversion on include files),
                    558: and will finish up by
                    559: automatically deleting the
                    560: .B .X
                    561: files that were generated during this run.
                    562: .PP
                    563: You may occasionally find that you need to convert a
                    564: particular program which
                    565: consists of several
                    566: .I base
                    567: source files, some of which must be compiled
                    568: with unusual options.
                    569: In such cases, you can still convert the program via
                    570: a special mechanism.
                    571: For each
                    572: .I base
                    573: source file which requires special compilation options,
                    574: you can create a corresponding
                    575: .B .X
                    576: file for the
                    577: .I base
                    578: file
                    579: .I (before
                    580: invoking
                    581: .I thisprog).
                    582: You would do this by invoking the GNU C compiler directly
                    583: with the required special options, and with the
                    584: .B -fgen-aux-info
                    585: option.
                    586: .I Thisprog
                    587: is smart enough to use existing
                    588: .B .X
                    589: files (when they are available and when they are up to date) so creating
                    590: .B .X
                    591: files ahead of time with the GNU C compiler
                    592: is an easy way to accommodate unusual compilation options for individual
                    593: .I base
                    594: files.
                    595: .PP
                    596: Note that
                    597: .I thisprog
                    598: checks each preexisting
                    599: .B .X
                    600: file before it tries to use it in order
                    601: to insure that it is up-to-date
                    602: with respect to all of the source files
                    603: that it contains information about.
                    604: If this check fails,
                    605: .I thisprog
                    606: will automatically
                    607: invoke the GNU C compiler (with default options) to recreate the needed
                    608: .B .X file.
                    609: .SH CAVEATS
                    610: #ifndef UNPRO
                    611: The
                    612: .I thisprog
                    613: program doesn\'t just get information from your own
                    614: .B .X
                    615: files.  Every time
                    616: .I thisprog
                    617: executes, it also reads a file
                    618: .B SYSCALLS.c.X
                    619: from some standard installation directory
                    620: (if it exists) to obtain a pre-written set of function prototypes for
                    621: various standard system-supplied functions.  These prototypes are effectively
                    622: added to the set of prototypes which 
                    623: .I thisprog
                    624: can use to perform prototype substitutions on your source files.
                    625: If the source code for any individual programs that you are converting
                    626: contains its own definitions
                    627: for functions with the same names as standard system-supplied functions,
                    628: .I thisprog
                    629: is intelligent enough to allow the parameter typing from your own
                    630: function definitions to take precedence over the information
                    631: contained in the
                    632: .B SYSCALLS.c.X
                    633: file.
                    634: .PP
                    635: .I Thisprog
                    636: changes
                    637: #ifndef UNPRO
                    638: (and possibly adds to)
                    639: #endif
                    640: your original source code
                    641: in ways which may require you to rearrange the placement of other
                    642: items in your code.  Specifically, it is often necessary to move
                    643: around type definitions or declarations for
                    644: .B "enum, struct,"
                    645: and
                    646: .B union
                    647: types.
                    648: #ifndef UNPRO
                    649: .PP
                    650: Usage of
                    651: .I thisprog
                    652: may cause source lines to grow quite long and thereby become difficult
                    653: to read and to edit.  Fortunately,
                    654: .I thisprog
                    655: is intelligent enough to automatically break up very long lines containing
                    656: newly inserted function prototypes whenever the length of
                    657: any given output line would otherwise exceed 79 columns (including tabs
                    658: to standard UNIX tab stops).
                    659: .PP
                    660: Note that in traditional (K&R) C, it was not possible to declare
                    661: parameter types for
                    662: .B "function pointer"
                    663: parameters and variables.
                    664: Such function pointer variables could only be
                    665: declared with empty parameter lists in traditional C.  Unfortunately,
                    666: this means that
                    667: .I thisprog
                    668: typically
                    669: has no adequate source of information from which to manufacture
                    670: appropriate (prototyped) formal argument lists for such function pointer
                    671: variables.  Thus, declarations of function pointer variables and
                    672: parameters will not be properly converted by
                    673: .I thisprog.
                    674: In the case of function pointer variables,
                    675: .I thisprog
                    676: currently  performs no conversion whatsoever.
                    677: In the case of function pointer parameters however,
                    678: .I thisprog
                    679: will attempt to do half-hearted conversions by 
                    680: manufacturing formal parameter lists for such parameters.
                    681: These manufactured formal parameter lists will look
                    682: like \`\.\.\.\'.
                    683: #endif
                    684: .PP
                    685: #endif
                    686: It is naive to assume that the conversions performed by
                    687: .I thisprog
                    688: are sufficient to make your source code completely compatible with
                    689: #ifndef UNPRO
                    690: ANSI C or C++.
                    691: #else
                    692: K&R C.
                    693: #endif
                    694: The automatic conversion of your source files via
                    695: .I thisprog
                    696: is only one step (albeit a big one) towards
                    697: full conversion.  A full conversion may also require
                    698: lots of editing "by hand".
                    699: .PP
                    700: .I Thisprog
                    701: only converts function declarations and definitions.  No conversion of
                    702: .I types
                    703: (such as function types and pointer-to-function types)
                    704: contained in
                    705: .B typedef
                    706: statements is attempted.  These must be converted manually.
                    707: #ifdef UNPRO
                    708: .PP
                    709: Naive conversion of source code via
                    710: .I thisprog
                    711: may introduce bugs into the resulting (converted) code unless you are very
                    712: careful.  The reason for this is rather subtle.
                    713: Basically, when a call is made to a prototyped function, the types of
                    714: some of the parameter values in the call may be implicitly converted
                    715: to the types of the corresponding formal parameters (as declared in the
                    716: function prototype).  These implicit conversions can (occasionally) involve
                    717: changes of representation for the passed values (for instance from int
                    718: to float).  Unfortunately, once your code has been converted via
                    719: .I thisprog,
                    720: these implicit conversions will no longer take place within the function
                    721: calls which require them.
                    722: .PP
                    723: The only remedy for this problem (currently) is for users of
                    724: .I thisprog
                    725: to make sure that explicit casts are inserted into calls which will force
                    726: these type conversions to occur even in the absence of function
                    727: prototypes.  Users can determine the exact set of places where such explicit
                    728: casts may be required by compiling all code to be converted using the
                    729: .B -Wconversion
                    730: option to GCC prior to conversion.  The warnings produced by
                    731: .B -Wconversion
                    732: will indicate those places in the original source code where explicit
                    733: casts must be inserted.  Once these explicit casts have been manually
                    734: inserted (and the warnings from
                    735: .B -Wconversion
                    736: eliminated), conversion may be performed without any possibility of
                    737: generating code which is incorrect due to missed type conversions.
                    738: #else
                    739: .PP
                    740: When converting to full prototype format, it may often be the case that
                    741: complete information regarding the types of function parameters is not
                    742: actually avaiable in the original (K&R) code.
                    743: This will almost always be the case for parameters whose types are
                    744: pointer-to-function types.
                    745: For pointer-to-function parameters, it it customary (in K&R C) to
                    746: omit the types of the arguments which the pointed-to function expects
                    747: to receive.
                    748: In cases where the argument types for function pointer parameters are
                    749: not present in the original source code,
                    750: .I thisprog
                    751: notes this lack of complete information in a useful (but harmless)
                    752: way.  After conversion, the (prototyped) parameter lists for 
                    753: pointer-to-function parameters are represented in the converted
                    754: files as comments which contain the string "???".  You can easily
                    755: locate all such strings after conversion (using your favorite editor)
                    756: and replace them with more complete information regarding the
                    757: true parameter profile of the pointed-to functions.
                    758: #endif
                    759: .SH WARNINGS
                    760: There are numerous possible warning and error messages which
                    761: .I thisprog
                    762: may issue for strange circumstances (e.g.\ missing input
                    763: files, etc.) or for noteworthy conditions in the source code being converted.
                    764: These should all be self-explanatory.
                    765: If any message is not self-explanatory, it\'s a bug.  Please report it.
                    766: .SH FILES
                    767: .ta 3.0i
                    768: /usr/local/bin/gcc     GNU C compiler
                    769: .br
                    770: /usr/local/bin/thisprog        the thisprog program
                    771: #ifndef UNPRO
                    772: .br
                    773: /usr/local/lib/SYSCALLS.c.X    aux info file for system functions
                    774: #endif
                    775: .SH "SEE ALSO"
                    776: gcc(1), g++(1), otherprog(1)
                    777: .SH BUGS
                    778: .I Thisprog
                    779: can easily be confused by
                    780: source code which has
                    781: macro calls in the
                    782: vicinity of something which it has to convert.
                    783: Fortunately, such cases seem to be rare in practice.
                    784: This is an inherent problem with the compiler
                    785: based approach to information gathering and will likely never be fixed.
                    786: When it does become confused,
                    787: .I thisprog
                    788: will still proceed to convert the file it is working on as much as
                    789: possible.  Only the particularly confusing function definitions and
                    790: declarations will fail to be converted.  These can subsequently be converted
                    791: manually.
                    792: .PP
                    793: Due to the method currently used to gather information,
                    794: .I thisprog
                    795: will fail to convert function declarations and definitions which
                    796: are located in conditional compilation sections which were
                    797: .I "preprocessed out"
                    798: during the creation of the
                    799: .B .X
                    800: files used for conversion.
                    801: You can generally work around this problem by doing
                    802: repeated conversion steps using
                    803: .I thisprog,
                    804: each with a different set of compilation options (i.e.\ preprocessor
                    805: symbol definitions) but assuring complete conversion can
                    806: currently only be done by visual inspection.
                    807: Currently,
                    808: .I thisprog
                    809: attempts to find function definitions which were
                    810: .I "preprocessed out"
                    811: and to issues warnings for such cases.
                    812: A later revision of
                    813: .I thisprog
                    814: #ifndef UNPRO
                    815: may also be able to detect cases where function declarations
                    816: have been
                    817: .I "preprocessed out"
                    818: and to issue appropriate warnings for those cases also.
                    819: #else
                    820: may be able to convert both function declarations and function
                    821: definitions which have been
                    822: .I "preprocessed out."
                    823: #endif
                    824: .PP
                    825: Currently,
                    826: .I thisprog
                    827: makes no attempt to convert declarations of
                    828: .I "pointer to function"
                    829: types, variables, or fields.
                    830: #ifdef UNPRO
                    831: A later version of
                    832: .I thisprog
                    833: may attempt to perform conversions of these 
                    834: declarative items also.
                    835: #endif
                    836: .PP
                    837: Currently,
                    838: .I from_convention
                    839: functions definitions
                    840: #ifndef UNPRO
                    841: and declarations
                    842: #endif
                    843: must be converted by hand to use the
                    844: .I to_convention
                    845: convention.
                    846: It is possible that a subsequent version of
                    847: .I thisprog
                    848: will make some attempt to do these conversions automatically.
                    849: .PP
                    850: .I Thisprog
                    851: may get confused if it finds that it has to convert a function
                    852: declaration or definition in a region of source code where
                    853: there is more than one formal parameter list present.
                    854: Thus, attempts to convert code containing
                    855: multiple (conditionally compiled) versions of a single
                    856: function header (in the same vicinity) may not produce
                    857: the desired (or expected) results.
                    858: If you plan on converting source files which contain
                    859: such code, it is recommended that you first make sure
                    860: that each conditionally compiled region of source
                    861: code which contains an alternative function header
                    862: also contains at least one additional follower token
                    863: (past the final right parenthesis of the function header).
                    864: This should circumvent the problem.
                    865: #ifdef UNPRO
                    866: .PP
                    867: .I Thisprog
                    868: can become confused when trying to convert a function
                    869: definition or declaration
                    870: which contains a declaration for a
                    871: .I pointer-to-function
                    872: formal argument
                    873: which has the same name as the function being defined or
                    874: declared.
                    875: Such unfortunate choices of formal parameter names are discouraged.
                    876: #endif
                    877: .PP
                    878: Bugs (and requests for reasonable enhancements) should be reported to
                    879: [email protected].  Bugs may actually be fixed if they can be easily
                    880: reproduced, so it is in your interest to report them
                    881: in such a way that reproduction is easy.
                    882: .SH COPYING
                    883: Copyright (c) 1989, 1990 Free Software Foundation, Inc.
                    884: .sp 1
                    885: Permission is granted to make and distribute verbatim copies of
                    886: this manual provided the copyright notice and this permission notice
                    887: are preserved on all copies.
                    888: .sp 1
                    889: Permission is granted to copy and distribute modified versions of this
                    890: manual under the conditions for verbatim copying, provided that the
                    891: entire resulting derived work is distributed under the terms of a
                    892: permission notice identical to this one.
                    893: .sp 1
                    894: Permission is granted to copy and distribute translations of this
                    895: manual into another language, under the above conditions for modified
                    896: versions, except that this permission notice may be included in
                    897: translations approved by the Free Software Foundation instead of in
                    898: the original English.
                    899: .SH AUTHORS
                    900: Written by Ronald F.\ Guilmette at the Microelectronics and Computer Technology
                    901: Corporation (MCC).  Generously donated by MCC to the Free Software
                    902: Foundation.
                    903: .sp 1
                    904: See the GNU C Compiler Manual for a list of contributors to GNU C.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.