home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cproto.zip / cproto46 / CHANGES < prev    next >
Text File  |  1998-01-21  |  18KB  |  530 lines

  1. Version 4.6
  2.  
  3. - Since cproto is no longer being distributed on USENET in shar file format,
  4.   the patchlev.h and MANIFEST files have been removed.
  5.   The patchlevel number has been removed from the version number.
  6.  
  7. - Moved files out of the porting directory into separate platform specific
  8.   directories.  The emx directory has files used to compile using EMX.
  9.   The os2 directory has files used to compile on OS/2 using Watcom C/C++.
  10.   The win32 directory has files to compile on Windows 95 and Windows NT
  11.   using Watcom C/C++.
  12.  
  13. - correct order of include-path to keep standard include (e.g., /usr/include)
  14.   at the end of the search list.
  15.  
  16. - modified lint-library include-stack recovery to work on OSF/1.
  17.  
  18. - supply default initializer for lint-library const data
  19.  
  20. - corrected reset of __attribute__((noreturn))
  21.  
  22. - added '__volatile', '__const__', '__inline' keywords to grammar to
  23.   accommodate gcc.
  24.  
  25. - modified configure script to add several development/debugging options (i.e.,
  26.   --with-trace, --with-dbmalloc, --with-dmalloc).
  27.  
  28. - modified ifdefs to avoid using predefined 'unix' (not defined on AIX or CLIX)
  29.  
  30. Patchlevel 5 (April 1996)
  31.  
  32. - corrected instance of fclose on a file pointer after pclose was done (found
  33.   with Electric Fence).
  34.  
  35. - corrected script make_bat.sh to prevent expansion of \n in argument-string.
  36.  
  37. - Modified handling of lint library option to allow generation of lint libraries
  38.   for ANSI compilers (set -a -l).
  39.  
  40. - corrected a missing 'void' in parameter list
  41.  
  42. - modified to allow compile/test with 'dmalloc' library in addition to
  43.   'dbmalloc'.
  44.  
  45. - corrected memory leak in yyerror.c, and allocation-size for cpp command.
  46.  
  47. - added keywords to work with gcc 2.7.0
  48.  
  49. - corrected unresolved references to flush_varargs() when OPT_LINTLIBRARY
  50.   is not defined                                                         
  51.  
  52. Patchlevel 4 (August 1995)
  53.  
  54. - Added -S option to only output static declarations.
  55.  
  56. - Fix: The configure script didn't replace @CFLAGS@, @CPPFLAGS@ and @LDFLAGS@
  57.   in the makefile generated from makefile.in.
  58.  
  59. - Fix: The -a option generated incorrect function definitions.
  60.  
  61. - update test-cases for the -f2 fix in patch 3.
  62.  
  63. - remove dependency on GNU-make from makefile.in
  64.  
  65. - corrected configuration script that tests whether yyerror can be extended
  66.   (had cached wrong flag, preventing some configurations from being
  67.   recognized).
  68.  
  69. - added calls for 'flush_varargs()' to correct situation in lint-library output
  70.   where VARARGS comments were not reset properly when a function
  71.   was skipped.
  72.  
  73. - improved the logic of 'strip_name()' (used to compute include-directives for
  74.   the lint-library option) so that it recognizes the conventional include
  75.   directory created by a GCC install.
  76.  
  77. Patchlevel 3 (January 1995)
  78.  
  79. - check for a special case in lint-library generation, i.e., prototype
  80.   arguments of the form "*()", which need more parentheses for SunOS's lint.
  81.  
  82. - modified configure.in, aclocal.m4, makefile.in to work with autoconf 2.1
  83.   (also added install.sh - note that "install-sh" is not an MS-DOS-compatible
  84.   filename).
  85.  
  86. - derive the program name from the argv[0] entry, in case it's installed
  87.   under a different name.
  88.  
  89. - Fix: The -f2 option generated incorrect prototypes for functions that
  90.   take a variable argument list.
  91.  
  92. - use 'sed' rather than 'flip' to apply trailing CR's to MS-DOS scripts.
  93.  
  94. Patchlevel 2 (October 1994)
  95.  
  96. - modified grammar to recognize C++ ref-variables (i.e., '&' as a prefix to
  97.   identifiers at the top lexical level).  Lint libraries are formatted without
  98.   this '&', since lint doesn't grok C++.  This corrects an error in cproto 4.0
  99.   which caused '&' characters to be suppressed altogether, e.g., when filtering
  100.   with the "-t" option.
  101.  
  102. - modified rules that generate MANIFEST to put auto-generated scripts there
  103.   also, if they've been created (e.g., cd testing; make scripts).
  104.  
  105. - modified makefile.in to have shar target for both GNU shar and Rick Salz's
  106.   cshar utility.
  107.  
  108. - use 'const' in yyerror.c, otherwise the error-reporting auto-configuration
  109.   does not work.
  110.  
  111. - don't use "#elif" preprocessor control; not all systems support it.
  112.  
  113. Patchlevel 1 (October 1994)
  114.  
  115. - Added testing scripts for MS-DOS and VMS.
  116.  
  117. - Added makefile for Borland C++ for OS/2.
  118.  
  119. - Fix: When the -a, -t or -b options were used, '&' characters were stripped
  120.   from the output files.
  121.  
  122. - Fix: The system.h file should define EXIT_SUCCESS and EXIT_FAILURE
  123.   regardless of the presence of <stdlib.h>.
  124.  
  125. Patchlevel 0 (dickey, September 1994)
  126.  
  127. - corrected two malloc-defects in lint library generation (one place where
  128.   generated parameter name was copied rather than allocated, and another memory
  129.   leak).
  130.  
  131. - corrected generation of lint library function body, to handle function
  132.   pointers.
  133.  
  134. - changed the implicit lint library function type from "" to "void", to avoid
  135.   special-cases in the function-body generation.
  136.  
  137. - added logic using 'NestedParams' to suppress prototype-arguments in lint
  138.   library function-pointer arguments.
  139.  
  140. - corrected lint-library function parameter derived from prototype "char [2]"
  141.   (parameter name wasn't supplied).
  142.  
  143. - added PRINTFLIKE and SCANFLIKE to the comments interpreted for the lint
  144.   library translation.
  145.  
  146. - modified "LINT_PREPRO" comment to pass-thru all comment text if no count is
  147.   given.
  148.  
  149. - added new comment keyword "LINT_SHADOWED" to generate "#undef symbol" before
  150.   each function template in lint libraries (useful for processing files that
  151.   define both macros and functions with the same names).
  152.  
  153. - interpret GCC's __attribute__ noreturn and format for lint-library text
  154.   (GCC 2.5.8 preprocessor passes these macros through, GCC 2.6 apparently does
  155.   not).
  156.  
  157. - treat carriage-return (^M) as whitespace where appropriate.
  158.  
  159. - added configuration-test to avoid conflict with prototype for 'popen()'
  160.  
  161. - added several function-pointer regression test-cases
  162.  
  163. Version 3
  164.  
  165. Patchlevel 9 (dickey, August 1994)
  166.  
  167. - use 'autoconf' to make a UNIX configure-script.
  168.  
  169. - recognize GCC extensions '__inline' and '__attribute__'
  170.  
  171. - added ifdef OPT_LINTLIBRARY to allow compiling without the lint library
  172.   code (saves about 4kb).
  173.  
  174. - corrected some logic that made incorrect commenting for options -c -f1
  175.   (e.g., "void (*Sigdisp(int sig, void (*func)(int sig)))(int sig)").
  176.  
  177. - corrected logic that macroizes (e.g., with P_) functions like 'Sigdisp'
  178.   (it wasn't doing anything about the trailing "(int sig)").
  179.  
  180. - corrected handling of K&R conversion of mixed-mode functions (K&R style
  181.   with prototypes in arguments) to avoid losing comments.
  182.  
  183. - modified logic for options -c -f2 so that cproto inserts a space before
  184.   the beginning of a comment when it immediately follows an '*'.
  185.  
  186. - enhanced error reporting with new module yyerror.c which (attempts to)
  187.   report the expected token type/name when a syntax error is encountered.
  188.  
  189. - modified the grammar.y file to try to recover from errors at the next
  190.   semicolon (as well as the next right curly bracket).
  191.  
  192. - modified to process lex/yacc files with gcc as C-preprocessor.
  193.  
  194. - Added option "-O" to force redirection of errors without shell operations
  195.   (useful for VAX/VMS and MS-DOS in particular).
  196.  
  197. - added "\s" as a synonym for space in the format options (-P, -F, -C)
  198.  
  199. - tested on Solaris with lex/yacc and flex 2.4.6 / bison 1.22
  200.   (SunOS explorer 5.3 Generic_101318-42 sun4m sparc; gcc 2.6.0)
  201.  
  202. - tested on SunOS 4.1.1 with lex/yacc and flex 2.4.6 / bison 1.22
  203.   (SunOS calvin 4.1.1 1 sun4c)
  204.  
  205. - tested on IRIX with lex/yacc
  206.   (IRIX dbs3 5.2 02282015 IP19 mips)
  207.  
  208. - tested on Linux 0.99.15 with lex/yacc and flex 2.4.6 / bison 1.22 / byacc 1.9
  209.  
  210. - tested on MS-DOS with flex 2.37 / byacc 1.9 (built with turboc.mak).
  211.   (Bison uses too much stack space).
  212.  
  213. - tested on VAX/VMS 6.1 with VAX-C 3.2 and flex 2.4.6 / bison 1.22.
  214.  
  215. - moved non-UNIX files into 'porting' subdirectory.
  216.  
  217. - added 'testing' subdirectory, for simple regression tests.
  218.  
  219. - tested for memory leaks with dbmalloc (on Linux).
  220.  
  221. Patchlevel 8 (internal: dickey/cthuang, June 1993)
  222.  
  223. - added files 'lintlibs.c' and 'strkey.c'
  224.  
  225. - Allow dollar signs in identifiers
  226.  
  227. - Defined FAIL, SUCCESS to use in 'exit()' calls (VMS is approximately the
  228.   reverse of UNIX).
  229.  
  230. - Added option "-o" to force redirection without shell operations (useful for
  231.   VAX/VMS in particular).
  232.  
  233. - Added options "-l" (lintlibrary format), "-T" (typedefs), "-x" (externs
  234.   in include-files).
  235.  
  236. - Added "-C" option to cpp-invocation (to support VARARGS-decoding for -l
  237.   option).
  238.  
  239. - Modified grammar.y so that if -T option is turned on, instances of untagged
  240.   struct, union or enum are shown with the contents of the curly braces.
  241.  
  242. - Modified lex.l so that it sets 'return_val' iff at least one return statement
  243.   within curly braces returns an expression.  Use this to support -l option.
  244.  
  245. - Modified semantic.c (for -l option) to put tabs after short names for better
  246.   readability.  Also (only -l option), put a blank line before function
  247.   definitions and typedefs.
  248.  
  249. - Corrected lex.l so that it recognizes preprocessor lines within curly braces.
  250.  
  251. - Modified 'gen_prototype()' to trim 'extern' and 'auto' keywords from the text
  252.   (so that 'extern' is emitted in this function only if the -e option is
  253.   specified).  Do this to support -l option (and to correct normal usage, which
  254.   implies that -e option is needed to put an 'extern' before declaration).
  255.  
  256. - Corrected test in 'put_decl_spec()' by using 'strkey()' (which tests for a
  257.   name, not simply a substring).
  258.  
  259. - Modified semantic.c to use 'put_string()' and related procedures to simplify
  260.   pretty-printing of lint-library text (mainly to control blank lines).  (See
  261.   'fmt_library()').
  262.  
  263. - linted some xmalloc calls using ALLOC macro.
  264.  
  265. Patchlevel 7
  266.  
  267. - Fix: The processing of string literals is now more robust.
  268.  
  269. - Removed the -f4 option which generated prototypes like
  270.  
  271.     int main P_((int argc, char **argv));
  272.  
  273.   Use the -m option now to put a guard macro around the prototype
  274.   parameter list.  Use the -m option together with -f3 (which is the
  275.   default) to produce the same output as the old -f4 option.  The option
  276.   to set the guard macro name is now -M.
  277.  
  278. - Comments in prototype parameter lists are now disabled by default.
  279.   Use the -c option now to output these comments.
  280.  
  281. - Can now process #include directives in which the file is specified with
  282.   a #define macro.
  283.  
  284. - Now does not convert function definitions that take the formal
  285.   parameter va_alist from <varargs.h>.
  286.  
  287. - Now recognizes the GNU C modifiers __const and __inline__.
  288.  
  289. Patchlevel 6
  290.  
  291. - Fix: A function in lex.l exploited the ANSI C feature of concatenating
  292.   string literals.  This prevented the module from being compiled with
  293.   pre-ANSI C compilers.
  294.  
  295. Patchlevel 5
  296.  
  297. - Fix: The -v option did not output declarations for function pointers.
  298.  
  299. - Fix: String literals continued over more than one line messed up the
  300.   line number count.
  301.  
  302. - Fix: The program generated incorrect prototypes for functions that
  303.   take a variable argument list using <varargs.h>.
  304.  
  305. - Fix: When converting functions from the standard input, cproto
  306.   generated no output if no functions needed to be converted.
  307.  
  308. - Fix: Now does not output a warning if an untagged struct is found in a
  309.   typedef declaration.
  310.  
  311. - Added the -b option which rewrites function definition heads to
  312.   include both old style and new style declarations separated by a
  313.   conditional compilation directive.  For example, the program can
  314.   generate
  315.  
  316.     #ifdef ANSI_FUNC
  317.  
  318.     int
  319.     main (int argc, char *argv[])
  320.     #else
  321.  
  322.     int
  323.     main (argc, argv)
  324.     int argc;
  325.     char *argv[]
  326.     #endif
  327.     {
  328.     }
  329.  
  330.   Added the -B option to set the preprocessor directive that appears at
  331.   the beginning of such definitions.
  332.  
  333. - Added the keyword "interrupt" to the set of type qualifiers when
  334.   compiled on a UNIX system.
  335.  
  336. - The MS-DOS version now recognizes the type modifiers introduced by
  337.   Microsoft C/C++ 7.00.
  338.  
  339. - Now recognizes ANSI C trigraphs (yuck!).
  340.  
  341. - Now use "#if __STDC__" instead of "#if defined(__STDC__)".
  342.  
  343. - GNU bison orders the y.tab.c sections differently than yacc, which
  344.   resulted in references to variables before they were declared.  The
  345.   grammar specification was modified to also be compatible with bison.
  346.  
  347. Patchlevel 4
  348.  
  349. - Fix: A typedef name defined as a pointer to char, short or float was
  350.   incorrectly promoted if it was used to specify a formal parameter.
  351.   For example, for the definition
  352.  
  353.     typedef char *caddr_t;
  354.  
  355.     int strlen (s)
  356.     caddr_t s;
  357.     {
  358.     }
  359.  
  360.   cproto generated the incorrect prototype
  361.  
  362.     int strlen(int s);
  363.  
  364. - Added implementation of the ANSI function tmpfile() for systems that
  365.   don't have it.
  366. - If compiled with Microsoft C, cproto preprocesses its input by running
  367.   the command "cl /E".  To eliminate the error messages when the file
  368.   <malloc.h> is included, the program now recognizes the specifier
  369.   _based(void).
  370.  
  371. Patchlevel 3
  372.  
  373. - Fix: The program didn't generate prototypes for functions defined with
  374.   the extern specifier.
  375. - Fix: The -c option didn't output a space before parameter names in
  376.   generated prototypes.
  377. - Added the -E option to specify a particular C preprocessor to run or
  378.   to stop the program from running the C preprocessor.
  379. - Added the -q option to stop the program from outputting error messages
  380.   when it cannot read the file specified in an #include directive.
  381. - Made the yacc specification compatible with UNIX SYSVR4 yacc.
  382.   
  383. Patchlevel 2
  384.  
  385. - Fix: The function definition conversion may produce a mangled function
  386.   definition if an #include directive appears before the function and
  387.   no comments appear between the directive and the function.
  388. - Fix: The size of the buffer allocated for the C preprocessor command
  389.   string did not include enough space for options set in the environment
  390.   variable CPROTO.
  391. - Replaced the -n option with -c which disables all comments in the
  392.   generated prototypes.
  393. - Replaced the enum's with #define constants to accommodate C compilers
  394.   that don't like enumerators in constant expressions.
  395.  
  396. Patchlevel 1
  397.  
  398. - Fix: The program was calling ftell() on an invalid FILE pointer.
  399.  
  400. Patchlevel 0
  401.  
  402. - Added options to convert function definitions between the old style
  403.   and ANSI C style.
  404. - Options can be specified from the environment variable CPROTO.
  405. - The MS-DOS version recognizes more Microsoft C and Borland C++ type
  406.   modifiers (such as _cdecl, _far, _near).
  407. - Fix: Formal parameters specified with typedef names were not promoted.
  408.   For example, for the definition
  409.  
  410.     typedef unsigned short ushort;
  411.  
  412.     void test (x)
  413.     ushort x;
  414.     {
  415.     }
  416.  
  417.   cproto generated the incorrect prototype
  418.  
  419.     void test(ushort x);
  420.  
  421.   while the correct one is
  422.  
  423.     void test(int x);
  424.  
  425. - Fix: Incorrect prototypes were generated for functions that returned
  426.   function pointers.  For example, cproto generated an incorrect
  427.   prototype for the function definition
  428.  
  429.     void (*signal(int x, void (*func)(int y)))(int z)
  430.     {
  431.     }
  432.  
  433. - Fix: Changed calls to memory allocation functions to abort the program
  434.   if they fail.
  435.  
  436. Version 2
  437.  
  438. Patchlevel 3
  439.  
  440. - Made cproto compatible with GNU flex.
  441. - After compiling with the preprocessor symbol TURBO_CPP defined, on
  442.   MS-DOS systems, cproto will pipe its input through the Turbo C
  443.   preprocessor.
  444. - Fix: Typedef names may now be omitted from typedef declarations.
  445.   For example, every C compiler I tried accepts
  446.  
  447.     typedef int;
  448.  
  449.   and some even give warnings when encountering this statement.
  450.  
  451. Patchlevel 2
  452.  
  453. - Cproto is now able to generate prototypes for functions defined in lex
  454.   and yacc source files named on the command line.  Lex and yacc source
  455.   files are recognized by the .l or .y extension.
  456. - Fix: The memory allocated to the typedef symbol table was not being
  457.   freed after scanning each source file.
  458. - Fix: Failure to reset a variable during error recovery caused
  459.   segmentation faults.
  460.  
  461. Patchlevel 1
  462.  
  463. - Fix: Cproto incorrectly generated the parameter "int ..." in
  464.   prototypes of functions taking variable parameters.
  465. - Fix: Function definitions can now be followed by an optional
  466.   semicolon.  I found this feature in every C compiler I tried.
  467.  
  468. Patchlevel 0
  469.  
  470. - Added formal parameter promotion.
  471. - Added prototype style that surrounds prototypes with a guard macro.
  472. - Handles C++ style comment //.
  473. - Nifty new way to set prototype output format.
  474. - Got rid of the shell wrapper used to pipe the input through the C
  475.   preprocessor (cpp).
  476. - For the port to MS-DOS, I modified cproto to run without cpp, but
  477.   since I didn't want to reimplement cpp, the program processes only the
  478.   #include and #define directives and ignores all others.  Macro names
  479.   defined by the #define directive are treated like typedef names if
  480.   they appear in declaration specifiers.
  481.  
  482. Version 1
  483.  
  484. Patchlevel 3
  485.  
  486. - Fix: identical typedef names and struct tags should be allowed.
  487.   For example:
  488.  
  489.     typedef struct egg_salad egg_salad;
  490.  
  491.     struct egg_salad {
  492.         int mayo;
  493.     };
  494.  
  495.     void dine(egg_salad l)
  496.     {
  497.     }
  498.  
  499. Patchlevel 2
  500.  
  501. - Fix: A typedef statement should allow a list of typedefs to be declared.
  502.   Example:
  503.  
  504.     typedef int a, *b;
  505.  
  506. - Fix: When run with the -v option on this input, cproto did not output
  507.   a declaration for variable "b":
  508.  
  509.     char *a="one"; char *b="two";
  510.  
  511. - The options were renamed.  Added new options that change the output
  512.   format of the prototypes.
  513.  
  514. Patchlevel 1
  515.  
  516. - Fix: Incorrect prototypes were produced for functions that take
  517.   function pointer parameters or return a function pointer.  For example,
  518.   cproto produced an erroneous prototype for this function definition:
  519.  
  520.     void
  521.     (*signal (sig, func))()
  522.     int sig;
  523.     void (*func)();
  524.     {
  525.         /* stuff */
  526.     }
  527.  
  528. - The lexical analyser now uses LEX.  It should still be compatible with
  529.   FLEX.
  530.