Update NEWS
[ACE_TAO.git] / ACE / ChangeLogs / ChangeLog-gperf
blobf02fc22500c02d13e5b8add5f6507f44cb662e54
1 Wed Aug  4 16:24:42 UTC 2010  Johnny Willemsen  <jwillemsen@remedy.nl>
3         * src/Bool_Array.h:
4         * src/Gen_Perf.h:
5         * src/Key_List.h:
6         * src/Options.h:
7         * src/gperf.mpc:
8           Don't use a seperate library, we can't embed gperf as shared library
9           because it has a GPL license
11         * src/gperf_export.h:
12           Removed this file.
14 Mon Jul 13 15:32:00 UTC 2008  Johnny Willemsen  <jwillemsen@remedy.nl>
16         * src/Bool_Array.h:
17         * src/Vectors.h:
18           Doxygen changes
20 Sun Jun 28 03:20:00 UTC 2008  Johnny Willemsen  <jwillemsen@remedy.nl>
22         * src/*.{h,cpp}:
23           Use doxygen comment tags, small code improvements
25         * src/gperf.mpc:
26           Build a shared library that can later be used by gperf
28         * src/gperf_export.h:
29           New file
31 Wed Jul 02 11:30:00 UTC 2008  Simon Massey  <sma at prismtech dot com>
33         * src/Key_List.cpp:
35           Update some missed ACE_OS:: in generated code. This was hi-lighted
36           by test code built with cygwin build which produced:
37           cpp.cpp: In function `const char* in_word_set(const char*, unsigned int)':
38           cpp.cpp:179: error: `strcmp' undeclared (first use this function)
40           Original modification done with "ace" changelog entry:
41           Sat Jun 30 05:11:43 UTC 2007  Abdullah Sowayan  <abdullah.sowayan@lmco.com>
42           Changed code generated by gperf for usage by the IDL compiler to use functions
43           in ACE_OS instead of raw OS calls.
45 Wed Sep 20 23:26:33 UTC 2007  Ossama Othman  <ossama_othman at symantec dot com>
47         * src/Key_List.cpp (output_switch):
49           No need to use the ACE_AUTO_PTR_RESET macro.  The
50           ACE_Auto_Base_Array_Ptr<> class template provides the reset
51           method.
53 Mon Oct 24 02:36:08 UTC 2006  Ossama Othman  <ossama_othman at symantec dot com>
55         * apps/gperf/src/Key_List.cpp:
57           Addressed Coverity RESOURCE_LEAK errors.
59 Thu Sep 21 11:54:54 UTC 2006  Douglas C. Schmidt  <schmidt@dre.vanderbilt.edu>
61         * src/Key_List.cpp (output_hash_function): Fixed a bug where the
62           wrong type is chosen if max_hash_value was == UCHAR_MAX or
63           _USHRT_MAX.  Thanks to Jody Hagins <jody at atdesk dot com> for
64           this fix.  This fixes bug id 2655.
66 Tue Mar 14 21:08:12 UTC 2006  jiang,shanshan <shanshan.jiang@vanderbilt.edu>
68         * apps/gperf/src/Gen_Perf.cpp
69         * apps/gperf/src/Key_List.cpp
70         * apps/gperf/src/List_Node.cpp
71         * apps/gperf/src/Options.cpp
72           Updated these files to solve the warnings when setting up "VC level 4 warnings"
73           on Windows. These warnings include "unreachable code", "assignment within
74           conditional expression", "conversion from some type to another type, possible
75           loss of data", "local variable may be used without having been initialized" and
76           so on.
77           Thanks to Lukas Gruetzmacher <gruetzmacher at ais-dresden dot de> for
78           motivating the fix to these "VC level 4 warnings".
80 Wed Jan  4 22:55:24 UTC 2006  J.T. Conklin  <jtc@acorntoolworks.com>
82          * ChangeLog:
84           Untabify.
85           Delete-trailing-whitespace.
87           Added "Local Variables" section defining "add-log-time-format"
88           to a really ugly lambda expression that formats changelog
89           timestamps in UTC and works with both GNU Emacs and XEmacs.
91 Mon Oct  3 13:52:12 UTC 2005  Johnny Willemsen  <jwillemsen@remedy.nl>
93         * src/Key_List.cpp:
94           Fixed might be unitialized warning in Cygwin build
96 Thu Jun  9 18:34:12 UTC 2005  Johnny Willemsen  <jwillemsen@remedy.nl>
98         * src/Key_List.cpp:
99           Only generate the base pointer when it is used. Fixes bugzilla 2099.
100           Thanks to Frank Pilhofer <fp@mc.com>
102 Sat Apr 30 10:56:12 UTC 2005  Johnny Willemsen  <jwillemsen@remedy.nl>
104         * src/Key_List.cpp:
105           Use option.key_name() instead of opname_, the key name is passed
106           as -K on the commandline. Thanks to Frank Pilhofer <fp@mc.com>
108 Fri Apr 29 09:08:39 2005  Douglas C. Schmidt  <schmidt@cs.wustl.edu>
110         * src/Key_List.cpp (output_binary_search_function): Added a
112           do {/* null */} while (&base == 0);
114           to silence warnings on some compilers.  Thanks to Frank Pilhofer
115           <fp@mc.com>.
117 Fri Aug  5 15:30:00 UTC 2004  Simon Massey  <simon.massey@prismtechnologies.com>
119         * apps/gperf/tests/gperf_test.mpb
120         * apps/gperf/tests/tests.mpc
122           gperf is not built on cross compiled targets, thus tests will not run!
123           Therefore added the dependancy to the build of these test.
125 Fri Apr 23 21:18:17 2004  Ossama Othman  <ossama@dre.vanderbilt.edu>
127         * src/Options.h (operator !=):
128         * src/Options.cpp (operator !=):
130           Changed return type to bool, as is the norm in modern C++.
132 Tue Jan 20 17:13:29 2004  Steve Huston  <shuston@riverace.com>
134         * version.texi: Something in the autoconf build thought it wise to
135           update the date in this file. It matches the last modification
136           date of gperf.texi.
138 Thu Jun 19 14:52:05 UTC 2003  Don Hinton  <dhinton@dresystems.com>
140         * tests/test-1.exp:
141         * tests/test-2.exp:
142         * tests/test-3.exp:
143         * tests/test-4.exp:
144         * tests/test-5.exp:
145           Added (int) casts to expected results to match the new output.
147 Tue Jun 17 11:38:36 2003  Douglas C. Schmidt  <schmidt@macarena.cs.wustl.edu>
149         * src/Key_List.cpp (output_lookup_array):
150         * src/Gen_Perf.cpp (run):
151         * src/Key_List.cpp (already_determined):
152         * src/List_Node.cpp (List_Node): Added casts to prevent GCC 3.3
153           from complaining about stupid stuff...  Thanks to Bala for
154           reporting this.
156 Sun Jul 28 17:04:54 2002  Douglas C. Schmidt  <schmidt@ace.cs.wustl.edu>
158         * src/gperf.cpp (main): Only generate the timestamps if the
159           DEBUGGING option ('-d') is enabled.  Thanks to Kier Schmitt
160           <SchmittKC@kpt.nuwc.navy.mil> for this suggestion.
162 Tue Feb 26 23:15:47 2002  Ossama Othman  <ossama@uci.edu>
164         * gperf.texi:
166           Added missing "@dircategory" entry.  It is required for proper
167           installation when using `install-info'.
169           Use "@direntry" instead of "{START,END}-INFO-DIR-ENTRY"
170           directly.
172         * gperf.info:
174           Regenerated this file.
176 Mon Jan 14 14:43:53 2002  Carlos O'Ryan  <coryan@uci.edu>
178         * tests/Makefile:
179           Re-generate dependencies.
181 Mon Dec 24 12:47:27 2001  Carlos O'Ryan  <coryan@uci.edu>
183         * src/Options.cpp:
184           Add temporary fix until something better shows up, at least it
185           compiles this way!
187 Sat Sep 22 09:06:10 2001  Douglas C. Schmidt  <schmidt@macarena.cs.wustl.edu>
189         * src/Makefile: Removed the rules.lib.GNU file since it didn't
190           seem to be needed and was causing problems for MinGW.  Thanks to
191           Jeff McNiel <JMcNiel@datacrit.com> for reporting this.
193 Wed Sep 19 02:29:37 2001  Carlos O'Ryan  <coryan@uci.edu>
195         * tests/Makefile:
196           Another minor problem in the generated Makefile, i.e. the script
197           continues to break for filenames that contain a '+' sign in them.
199 Wed Sep 12 16:06:46 2001  Krishnakumar B  <kitty@cs.wustl.edu>
201         * tests/Makefile:
203           Added missing dependency in runtests and entry in realclean for
204           taoout. This fixes a long standing nagging problem.
206 Sat Sep  8 22:40:21 2001  Krishnakumar B  <kitty@cs.wustl.edu>
208         * src/Key_List.cpp (output_lookup_array):
210           Removed a compilation warning on 64-bit Linux.
212 Sun Jul 29 12:17:55 2001  Douglas C. Schmidt  <schmidt@ace.cs.wustl.edu>
214         * The following changes fix a bug reported by Karl Proese
215           <karl.proese@mchp.siemens.de> and Jeff Parsons.
217         * tests: Patched the *.exp files to include the new WORDLIST_SIZE
218           macro.
220         * src/Key_List.cpp: Generate a new const/enum that defines the
221           size of the wordlist array.  This is now used to fix a nasty bug
222           where MAX_HASH_VALUE was used instead of WORDLIST_SIZE.
224         * src/Key_List.cpp (output_lookup_array): Reformatted the
225           debugging output to make it easier to tell what's going on.
227         * tests/tao.exp: Updated this file based on the expected output of
228           the new test example.
230         * tests/tao.gperf: Updated this to use a different set of keys since
231           they exercise the range of screwy inputs better than the earlier
232           contents of this file.  In particular, this should detect
233           certain nasty bugs that were plaguing GPERF earlier for keyword
234           sets with a large number of duplicates.
236         * src/Key_List.cpp (read_keys): Clarified the debugging message
237           to indicate the key links are *static*.
239         * src/Options.cpp (parse_args): Fixed a stupid typo...
241 Sun Jul  1 08:33:56 2001  Douglas C. Schmidt  <schmidt@tango.doc.wustl.edu>
243         * tests/Makefile: For some strange reason there was a BIN2 macro
244           but no BIN macro, which caused problems...
246         * tests: Added support to check for the condition that caused
247           TAO's IDL compiler to break on keylists that have a large number
248           of duplicates!
250         * src/Key_List.cpp (output_lookup_function): Fixed a tiny mistake
251           where "slot < MAX_HASH_VALUE" should have been "slot <=
252           MAX_HASH_VALUE".  Thanks to Vsevolod Novikov
253           <novikov@df.nnov.rfnet.ru> and Jeff Parsons
254           <parsons@cs.wustl.edu> for helping to track this down.
256 Sat Jun  2 13:30:30 2001  Douglas C. Schmidt  <schmidt@tango.doc.wustl.edu>
258         * src/Makefile (INSTALL): Fixed several minor problems with the
259           Makefile so that this will build correctly on mingw.  Thanks to
260           Cristian Ferretti <cristian_ferretti@yahoo.com> for pointing
261           this out.
263 Fri Mar 30 11:30:54 2001  Carlos O'Ryan  <coryan@uci.edu>
265         * tests/Makefile:
266           And we need to patch dependencies yet another time.
268 Wed Jan 24 13:44:53 2001  Carlos O'Ryan  <coryan@uci.edu>
270         * tests/Makefile:
271           And I got nailed by the same problem again:
272           Just doing 'make depend' generates invalid dependencies for some
273           reason, had to manually patch them.
275 Mon Oct 16 10:34:06 2000  Carlos O'Ryan  <coryan@uci.edu>
277         * tests/Makefile:
278           Just doing 'make depend' generates invalid dependencies for some
279           reason, had to manually patch them.
281 Fri Apr 21 20:33:11 2000  Carlos O'Ryan  <coryan@uci.edu>
283         * tests/Makefile:
284           Add dependencies for the runtest rule, otherwise parallel builds
285           fail.
287 Thu Apr 20 09:04:27 2000  Carlos O'Ryan  <coryan@uci.edu>
289         * tests/Makefile:
290           Just running 'make depend' on this file introduces an spurious
291           'c++' string in the middle of the dependencies.  Have no time to
292           figure out why.
294 Wed Mar  8 17:26:22 2000  Ossama Othman  <ossama@uci.edu>
296         * src/Key_List.cpp (Key_List, ~Key_List, output_types):
298           Fixed memory leaks related to lack of deallocation of variables
299           that were initialized with static strings, and then
300           reinitialized with strings that were dynamically allocated.
301           [Bug 334]
303 Tue Feb 22 18:25:02 2000  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
305         * src/Key_List.cpp,
306           src/Bool_Array.cpp,
307           src/Gen_Perf.cpp,
308           src/Hash_Table.cpp,
309           src/Options.h,
310           src/Options.cpp: Renamed the DEBUG enum to DEBUGGING enum
311           to avoid problems with -DDEBUG is enabled.  Thanks to
312           Tobin Bergen-Hill <tbhill@dctd.saic.com> for reporting this.
314 Sat Nov 13 18:43:53 1999  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
316         * src/Key_List.cpp: The code for output_lookup_function() was
317           not being called if option[GLOBAL] was set.  Thanks to Eugene
318           Surovegin <ebs@glasnet.ru> for reporting the bug and the fix.
320 Tue Aug 31 14:47:06 1999  Pradeep Gore  <pradeep@flamenco.cs.wustl.edu>
322         * Makefile:
323           Fix for Bug#:250 - The Makefile now uses ACE's build commands.
324           This also gets rid of the build warning on egcs when compiling
325           with repo=1. Thanks to David, Ossama, Bala and Yamuna.
327 Thu Jul  1 09:31:32 1999  Carlos O'Ryan  <coryan@cs.wustl.edu>
329         * Makefile:
330           If we are cross compiling we shouldn't compile gperf, it is not
331           going to help anyway, because we could not run it.
333 Sun Jun 27 20:40:30 1999  Douglas C. Schmidt  <schmidt@ace.cs.wustl.edu>
335         * src/Key_List.cpp: Added some initializers to keep EGCS from
336           complaining.
338 Wed Jun 23 07:24:58 1999  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
340         * src/Key_List.cpp (output_hash_function): Use conditional
341           compilation rather than a runtime check to test if
342           ACE_STANDARD_CHARACTER_SET_SIZE == ACE_EBCDIC_SIZE.  This
343           suppresses a warning on DEC UNIX.  Thanks to David Levine for
344           reporting this.
346 Fri Jun 18 16:54:43 1999  Irfan Pyarali  <irfan@cs.wustl.edu>
348         * apps/gperf/src/Key_List.cpp (output_lookup_array): Prefixed
349           debug message with "GPERF".
351 Thu Jun 17 18:04:30 1999  Douglas C. Schmidt  <schmidt@mambo.cs.wustl.edu>
353         * tests/test-[1-5].exp: Fixed all the tests to account for the new
354           EBCDIC output.
356 Thu Jun 17 17:25:00 1999  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
358         * src/Key_List.cpp (output_hash_function): Generate an asso_values
359           table that will have the appropriate values for both EBCDIC or
360           ASCII, depending on the platform.
362         * src/Key_List.cpp (output_hash_function),
363           src/Gen_Perf.cpp (Gen_Perf),
364           src/Vectors.h: Replaced the use of ALPHA_SIZE with
365           ACE_STANDARD_CHARACTER_SET_SIZE, which works correctly for
366           EBCDIC platforms, as well as ASCII ones.  Thanks to
367           Jim Rogers  <jrogers@viasoft.com> for this suggestion.
369 Wed Jun 16 19:08:01 1999  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
371         * src/Key_List.cpp: Fixed the key_word table generation so that it
372           generates the "default fill" string for the null entries in the
373           table. Thanks to Irfan and Naga for helping in this.
375 Sun Jun  6 15:47:23 1999  Douglas C. Schmidt  <schmidt@danzon.cs.wustl.edu>
377         * src/Key_List.cpp (output_switch): Make sure to generate "const
378           char *resword;" rather than "char *resword" since otherwise C++
379           compilers correctly complain.
381         * tests: Fixed a bunch of warnings related to misuses of "const
382           char *".
384 Sun Jun  6 10:30:09 1999  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
386         * tests/test-4.exp: Fixed another use of "index".  Thanks to David
387           Levine for reporting this.
389 Sat Jun  5 23:17:39 1999  Douglas C. Schmidt  <schmidt@danzon.cs.wustl.edu>
391         * Replaced all uses of "index" with "slot" to avoid problems with
392           broken C++ compilers that define a macro called "index".
394 Tue May  4 14:24:27 1999  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
396         * src/Options.cpp (parse_args): Removed %a flag from -v option and
397           used ACE_OS::exit (0) instead.
399 Mon Apr 26 15:42:54 1999  Ossama Othman  <othman@cs.wustl.edu>
401         * tests/test-{1,2,3,4,5}.exp: Forgot to update the expected test
402           output to reflect the version string update listed below.
404 Mon Apr 26 10:42:08 1999  Ossama Othman  <othman@cs.wustl.edu>
406         * src/Version.cpp (version_string): Updated version string to "2.8
407           (ACE version)" since 2.7 is used by the old Cygnus maintained
408           gperf.
410         * src/*.{h,cpp}: Updated copyright/distribution information to GPL
411           v2 style notice.
413 Sun Apr 25 16:16:12 1999  Ossama Othman  <othman@cs.wustl.edu>
415         * mdate-sh: Added this file to the CVS repository.  It will be
416           used once the auto{conf,make} integrations are in place.
418 Sun Apr 25 16:13:40 1999  Ossama Othman  <othman@cs.wustl.edu>
420         * COPYING: Updated to GPL version 2.
422 Sat Apr 24 18:18:35 1999  Ossama Othman  <othman@cs.wustl.edu>
424         * gperf.1:
425         * gperf.info:
426         * gperf.texi: Added missing quote, cosmetic fix, regenerated
427           gperf.info.
429         * src/Key_List.cpp
430         * src/Options.h:
431         * src/Options.cpp: Merged Cygnus patch that allows the user to
432           specify a default fill expression/value in the keyword table.
433           Updated help message with new `-F' option.  Made some cosmetic
434           fixes to the help message, too.
436         * tests/test.cpp: Minor spelling correction in comment
438         * tests/test-6.exp: Updated with new expected gperf output.
440 Mon Nov  9 23:37:09 1998  Vishal Kachroo <vishal@cs.wustl.edu>
442         * src/Key_List.cpp: Fixed the problem with Binary and Linear
443           Search code.
445 Sat Oct 10 18:40:56 1998  Vishal Kachroo  <vishal@merengue.cs.wustl.edu>
447         * tests/test-6.exp (Usage): copied the output of gperf -h option
448           into test-6.exp. This test was failing because it didn't have
449           the -b option previously. Thanks to David for reporting the
450           failure of tests.
452         * src/Options.cpp : Changed the option case 'h' to include the
453           following line " -b/t Code for Linear Search".
455 Fri Oct  9 01:06:56 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
457         * src/Options.cpp :
458         * src/Key_List.cpp (output_linear_search_function): Changed option
459           -z to -b for generating linear search. Removed <len> parameter
460           from the lookup code. We dont need <len> in the generated code
461           in the case of linear/binary search options.
463 Thu Oct  8 17:40:19 1998  Vishal Kachroo  <vishal@merengue.cs.wustl.edu>
465         * src/Gen_Perf.cpp (run): added the linear search changes.
466         * src/Gen_Perf.h        : added the linear search changes.
467         * src/Options.cpp       : added the linear search changes.
468         * src/Options.h         : added the linear search changes.
469         * src/Key_List.cpp      : added the linear search changes.
470         * src/Key_List.h        : added the linear search changes.
473 Wed Oct  7 01:20:35 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
475         * tests/test-6.exp:
476           Updated thif file to the current help message. Thanks to Hans
477           for reporting this.
479 Tue Oct  6 11:51:47 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
481         * src/Key_List.cpp (Key_List): Fixed g++ warnings.
483 Tue Oct  6 02:48:37 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
485         Thanks to Vishal the following things have been done to get Binary
486         Search code generated from GPERF.
488         * src/Options.cpp (parse_args): Added the -B option for the binary
489           search.
491         * src/Options.h (enum Option_Type): Added the BINARYSEARCH in the
492           enumeration.
494         * src/Key_List.cpp : Added the function
495           output_binary_search_function(void). Changed the output function
496           to include the Binary Search option.  Used option[BINARYSEARCH]
497           to distinguish the binary search case from the hashing case.
499         * src/Key_List.h : Added the prototype for
500           output_binary_search_function.  Also added the key_sort variable
501           to enable sorting based on key values.
503 Mon Oct  5 18:24:15 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
505         * src/Gen_Perf: Created a new function that allows us to split the
506           binary search and perfect hash logic apart.  Thanks to Vishal
507           and Alex for reporting this.
509         * src/Key_List.cpp (dump): Fixed the unsigned problems with line
510           1502 YET again...  Thanks to David/Darrell for reporting this.
512 Sun Oct  4 20:42:56 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
514         * src: Fixed yet another problem with switching from array-based
515           lookups to switch-based lookups.  Thanks to Carlos for reporting
516           this.
518 Sat Oct  3 19:36:52 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
520         * src/Options.h:
521         * src/Options.cpp:
522         * src/Key_List.h:
523         * src/Key_List.cpp: Reverted all the changes done for Binary
524           Search.
526 Sat Oct  3 17:51:10 1998  Carlos O'Ryan  <coryan@cs.wustl.edu>
528         * tests/test-6.exp: Added the new -B option.
530 Sat Oct  3 13:47:40 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
532         * src/Key_List.cpp (output_binary_search_function): Added a new
533           line after binary search code.
535 Sat Oct  3 10:11:15 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
537         * src/Options.cpp (parse_args): Changed the option for binary
538           search to '-B'
540 Fri Oct  2 21:38:54 1998  Vishal Kachroo  <vishal@merengue.cs.wustl.edu>
542         * src/Options.cpp (parse_args): Added the -b option for the binary
543           search.
545         * src/Options.h (enum Option_Type): Added the BINARYSEARCH in the
546           enumeration.
548         * src/Key_List.cpp : Added the function
549           output_binary_search_function (void). Changed the output
550           function to include the Binary Search option.  Used
551           option[BINARYSEARCH] to distinguish the binary search case from
552           the hashing case.
554         * src/Key_List.h : Added the prototype for
555           output_binary_search_function.  Also added the key_sort variable
556           to enable sorting based on key values.
558 Thu Oct  1 12:40:59 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
560         * src/Options.cpp (parse_args): Comments for Vishal to incorporate
561           Binary Seach on to GPERF.
563 Wed Sep 30 16:55:53 1998  Carlos O'Ryan  <coryan@cs.wustl.edu>
565         * tests/Makefile: Updated dependencies, added a realclean target
566           to remove the output from the tests.
568 Wed Sep 30 12:41:29 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
570         * src/Key_List.cpp (dump): Fixed another signed/unsigned int
571           mismatch.  Thanks to David Levine for reporting this.
573 Mon Sep 28 13:18:05 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
575         * tests: Updated all the test-*.exp files to reflect the latest
576           "unsigned" changes.
578         * src/Key_List.cpp (output_hash_function): Fixed another use of
579           int to be unsigned int.
581         * tests/test.cpp: Fixed the signature of in_word_set() to be
582           consistent with the new gperf.  Thanks to David Levine and
583           Carlos O'Ryan for this fix.
585 Sun Sep 27 00:04:18 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
587         * src/Key_List.cpp (dump): Reverted back to using int for
588           keyword_width to keep certain compilers happy.  Thanks to David
589           Levine for reporting this.
591         * src/Key_List: MAke sure that we don't generate the lookup table
592           twice if we're forced to change to the switch format.
594         * src/Key_List: Replaced the use of "int" with "unsigned int" for
595           parameters and hash values.
597         * src/Key_List: Fixed the code so that if we change over to using
598           the switch statement then we use the already generated keyword
599           table appropriately.  This prevents unnecessary warnings from
600           some C++ compilers.  Thanks to David Levine for reporting this.
602         * src/Key_List.cpp (output): If it's not possible to use the
603           lookup_array implementation of -D (e.g., because there aren't
604           enough empty slots in the lookup_array), then default to using
605           -S1 option...  This fixes a nasty bug that's been in gperf for
606           years....
608         * src/Key_List.cpp: (output_lookup_array): Added a "return 0" to
609           make the C++ compiler happy.  Thanks to David for noticing this.
611         * tests/c++-res.exp: Added a new test for C++ keywords.
613         * tests/corba.gperf: Added a proper test for CORBA keywords.
615 Sat Sep 26 15:32:56 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
617         * src/Hash_Table.cpp (find): Fixed a bug in the increment
618           computation that arose if the -n option was given.
620         * src: Removed all set_ and get_ prefixes to be more consistent
621           with ACE programming guidelines.
623         * src: GPERF now Purifies cleanly.
625         * src/Gen_Perf: Cleaned up the code so that if errors occur they
626           get handled properly.
628         * src/List_Node: Added a destructor to remove the memory when
629           we're done.
631         * src: Continued to tidy up the source code so that it is better
632           designed and Purifies cleanly on shutdown.
634         * src/Makefile: Removed the need for libGperf.{a,so}.
636         * src/Key_List: Changed read_keys() to return a value so that we
637           can check for errors.
639 Fri Sep 25 08:54:41 1998  David L. Levine  <levine@cs.wustl.edu>
641         * src/Key_List.cpp (Key_List ctor): reordered initializers to
642           match declaration order.
644 Thu Sep 24 18:20:36 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
646         * src/Key_List: Changed char_set field to keysig to be consistent
647           with the paper.
649         * src/Hash_Table: Renamed operator() to find().  What the heck was
650           I thinking in '92?!
652         * src/gperf.cpp (main): Removed the LARGE_STACK_ARRAYS option.
653           This was annoying...
655 Tue Sep 22 21:30:59 1998  David L. Levine  <levine@cs.wustl.edu>
657         * tests/corba.exp: added this file, it hadn't been checked in.
659 Tue Sep 22 18:02:01 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
661         * tests/Makefile: Added a new test for CORBA keywords.
663         * tests: Added a new test for the type of input that is causing
664           problems with TAO's IDL compiler.
666         * src/Key_List.cpp (output_lookup_array): Changed the assertion
667           from assert (i != 0) to assert (i >= 0) since I think that's
668           correct... (ah, so THAT's why comments are important thinks the
669           '92 Doug... ;-)).
671         * src/Options: Improved the comments for the '-h' option to
672           reflect current reality...
674 Thu Sep 17 11:42:53 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
676         * src/Key_List.cpp (output_lookup_array): Put 'signed' keyword
677           before 'char lookup' to avoid problems on platforms where char
678           is defined as unsigned.  Thanks to Margherita Vittone Wiersma
679           <vittone@fndaub.fnal.gov> for reporting this.
681 Wed Sep 16 19:08:13 1998  David L. Levine  <levine@cs.wustl.edu>
683         * Makefile: don't run build/run tests on CROSS-COMPILE platforms.
684           Thanks to Raja Ati <rati@montereynets.com> for reporting this
685           problem.
687 Wed Sep 16 18:18:41 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
689         * tests/Makefile: Changed CFLAGS to CCFLAGS to make aCC happy on
690           HP/UX.  Thanks to John Mulhern for reporting this.
692 Tue Sep 15 18:14:08 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
694         * tests/test-6.exp (Usage): Fixed the usage so diff should no
695           longer complain...  Thanks to David for reporting this.
697 Tue Sep 15 21:54:07 1998  David L. Levine  <levine@cs.wustl.edu>
699         * tests/Makefile: filter timestamps from test output so that
700           diffs will pass.
702 Tue Sep 15 18:14:08 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
704         * tests: Updated the expected output to look for 2.7 vs 2.6
705           of gperf.
707 Thu Sep 10 16:50:21 1998  Carlos O'Ryan  <coryan@cs.wustl.edu>
709         * tests/Makefile:
710           The test programs were not linking against ACE.
712 Tue Sep  8 12:45:53 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
714         * tests/test.cpp: Added #include "ace/OS.h" so that the ACE_RCSID
715           macro is defined.  Thanks to Arturo Montes
716           <mitosys@colomsat.net.co> for reporting this.
718 Sat Aug 22 08:44:15 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
720         * src/Options.cpp : Fixed the typo (-V instead of -v) under 'case
721           h' print string.
723 Fri Aug 21 11:57:57 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
725         * src/Key_List.cpp (set_output_types): Make sure that we leave an
726           extra space between the struct tag and the wordlist so the
727           compiler doesn't complain.  Thanks to Andy Gokhale for reporting
728           this.
730         * src/gperf.cpp: Modified the main() program so that it doesn't
731           print the starting time until AFTER we've parsed the arguments.
733         * src/Version.cpp: Updated the version to 2.7 to reflect the
734           new changes.
736         * src/Options.cpp (operator): Added a new -V option, which just
737           exits with a value of 0.  This is useful for checking if gperf
738           exists in the search path.  We use the feature in TAO.
740         * src: Removed the globally overloaded new operator.  This was a
741           portability pain and didn't really improve performance very
742           much.
744         * src/Options.cpp (operator): Fixed '%e' to be '%r' to come up to
745           speed with ACE changes.
747 Sat Aug 15 07:59:58 1998  David L. Levine  <levine@cs.wustl.edu>
749         * src/gperf.cpp (main): added ACE_UNUSED_ARGS for argc and
750           argv if ! ACE_HAS_GPERF.
752 Fri Aug 14 13:47:00 1998  David L. Levine  <levine@cs.wustl.edu>
754         * src/new.cpp (delete): aded ACE_UNUSED_ARG (ptr).
756 Fri Jul 31 18:28:45 1998  Gonzalo Diethelm  <gonzo@tango.cs.wustl.edu>
758         * src/Bool_Array.cpp:
759         * src/Gen_Perf.cpp:
760         * src/Hash_Table.cpp:
761         * src/Iterator.cpp:
762         * src/Key_List.cpp:
763         * src/List_Node.cpp:
764         * src/Options.cpp:
765         * src/Vectors.cpp:
766         * src/Version.cpp:
767         * src/gperf.cpp:
768         * src/new.cpp:
769         * tests/test.cpp:
770         Added ACE_RCSID to these files.
772 Tue Jul 21 09:30:51 1998  David L. Levine  <levine@cs.wustl.edu>
774         * src/gperf.cpp (main): added a trivial main () if ! ACE_HAS_GPERF,
775           so that the link succeeds.
777 Mon Jul 20 16:02:18 1998  David L. Levine  <levine@cs.wustl.edu>
779         * src/Makefile: fixed INSTALL.  It works with the latest
780           $ACE_ROOT/include/makeinclude/rules.lib.GNU.
782 Mon Jul 20 15:35:59 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
784         * Wrapped all the files with "#if defined (ACE_HAS_GPERF)" so that
785         it compiles on appropriate platforms.
787 Sun Jul 19 22:21:17 1998  David L. Levine  <levine@cs.wustl.edu>
789         * src/new.cpp (new): wrapped assignment with parens where used
790           as a conditional.
792         * src/Iterator.cpp (Iterator), List_Node.cpp (List_Node),
793           Hash_Table.cpp (Hash_Table):
794           reordered initializers to match declaration order.
796         * src/Hash_Table.cpp (~Hash_Table),
797         * src/Bool_Array.cpp (init): cast sizeof
798           to int to avoid compiler (g++/Linux alpha) warning about
799           mismatch with %d format specifier.
801         * src/new.cpp (new): use ACE_THROW_SPEC instead of
802           _RWSTD_THROW_SPEC.
804 Sun Jul 19 13:11:59 1998  Douglas C. Schmidt  <schmidt@tango.cs.wustl.edu>
806         * src/new.cpp: Added support for the _RWSTD_THROW_SPEC macro for
807           DEC UNIX.  Thanks to David Levine for reporting this.
809         * src/Key_List.cpp: Fixed one of those nasty "for loop counter
810           scoping glitches.  Again, thanks to David Levine and DEC C++ for
811           catching this.  * src/Key_List.cpp (reorder): Clarified the code
812           so that we don't write horrible C-style hacks.  Thanks to David
813           Levine and the DEC C++ compiler for finding this one!
815 Tue Jun 30 15:43:16 1998  Alexander Babu Arulanthu  <alex@cs.wustl.edu>
817         * src/Options.h         :
818         * src/Options.cpp       :
819         * src/Key_List.cpp      : Added the following options to gperf.
820                 -       "-m" To mute warnings. (If -D option is enabled,
821                         gperf doesnt say anything about duplicate hash
822                         values etc.
823                 -       "-M" To skip class definition while in C++ mode.
824                 -       "-J" To skip the line "#include <string.h>" in the
825                         output.
827 Thu May 14 16:37:39 1998  Douglas C. Schmidt  <schmidt@flamenco.cs.wustl.edu>
829         * src: ACE'ifed most of the gperf source code, yow!
831 Sun Apr 14 14:31:10 1996  Douglas C. Schmidt  (schmidt@tango.cs.wustl.edu)
833         * src: Changed things so that there's no longer any use of the
834           Read_Line and Std_Err code.  All of this has been pushed into
835           the ACE components, which is where it belongs...
837         * src: Changed things so that there's no longer any use of the
838           pointless inheritance in the code.  This was a result of my not
839           understanding inheritance back in 1989... ;-)
841         * Began to integrate GNU gperf into the ACE release.  Started off
842           by bringing the standard GNU version up to date wrt to the
843           changes I made back in 1991!
845 Tue Oct 10 16:37:28 1995  Mike Stump  <mrs@cygnus.com>
847         * src/new.cc: Since malloc/delete are not paired, we cannot call
848         free.
850 Wed Jan  4 12:40:14 1995  Per Bothner  <bothner@kalessin.cygnus.com>
852         * src/Makefile.in ($(TARGETPROG)):  Link with $(LDFLAGS).
853         Patch from John Interrante <interran@uluru.stanford.edu>.
855 Sat Nov  5 19:12:48 1994  Jason Merrill  (jason@phydeaux.cygnus.com)
857         * src/Makefile.in (LIBS): Remove.
859 Tue Oct 18 17:51:14 1994  Per Bothner  <bothner@kalessin.cygnus.com>
861         * src/std-err.cc:  Use stderror, instead of the non-standard
862         sys_nerr and sys_errlist.
864 Sat Sep 17 22:02:13 1994  Per Bothner  (bothner@kalessin.cygnus.com)
866         * src/key-list.cc (output_hash_function):
867         Patch from William Bader <wbader@CSEE.Lehigh.Edu>.
869 Fri Jul 15 09:38:11 1994  Per Bothner  (bothner@cygnus.com)
871         * src/std-err.cc:  #include <errno.h>, and only declare
872         extern int errno if errno is not a macro.
874 Mon May 30 17:29:34 1994  Per Bothner  (bothner@kalessin.cygnus.com)
876         * Makefile.in (src_all, install):  Make sure to add '/' after
877         `pwd` in $rootme, as expected by FLAGS_TO_PASS.
879 Wed May 11 00:47:22 1994  Jason Merrill  (jason@deneb.cygnus.com)
881         Make libg++ build with gcc -ansi -pedantic-errors
882         * src/options.h: Lose commas at end of enumerator lists.
884 Sun Dec  5 19:16:40 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)
886         * src/hash-table.cc (Hash_Table::~Hash_Table): Don't pass an
887         argument to fprintf, since it's not expecting one.
889 Fri Nov 26 19:03:18 1993  Per Bothner  (bothner@kalessin.cygnus.com)
891         * src/list-node.cc:  #undef index, for the sake of broken NeXT,
893 Thu Nov  4 11:16:03 1993  Per Bothner  (bothner@kalessin.cygnus.com)
895         * Makefile.in (install):  Use INSTALL_DATA for gperf.1.
897 Mon Oct 25 18:40:51 1993  Per Bothner  (bothner@kalessin.cygnus.com)
899         * src/key-list.cc (Key_List::read_keys):  Use POW macro
900         to increase hash table size to power of 2.
902         * options.h (LARGE_STACK_ARRAYS):  New flag.  Defaults to zero.
903         * gen-perf.cc, key-list.cc, read-line.cc:
904         Only stack-allocate large arrays if LARGE_STACK_ARRAYS is set.
905         * main.cc (main):  Only call setrlimit (RLIMIT_STACK, ...)
906         if LARGE_STACK_ARRAYS.
908 Mon Oct  4 17:45:08 1993  Per Bothner  (bothner@kalessin.cygnus.com)
910         * src/gen-perf.cc:  Always use ANSI rand/srand instead of BSDisms.
912 Wed Aug 18 12:19:53 1993  Per Bothner  (bothner@kalessin.cygnus.com)
914         * Makefile.in (src_all):  Make less verbose output.
916 Fri May 28 14:01:18 1993  Per Bothner  (bothner@rtl.cygnus.com)
918         * src/gen-perf.cc (Gen_Perf::change):  Don't use gcc-specific
919         2-operand conditional expression.
920         * src/key-list.cc (Key_List::output_lookup_array):
921         Don't use variable-size stack arrays, unless compiled by g++.
923 Tue May  4 14:08:44 1993  Per Bothner  (bothner@cygnus.com)
925         Changes (mostly from Peter Schauer) to permit compilation
926         using cfront 3.0 and otherwise be ARM-conforming.
927         * src/key-list.h:  class Key_List must use public derivation
928         of base class Std_Err (because Gen_Perf::operator() in gen-perf.cc
929         calls Std_Err::report_error).
930         * src/gen-perf.cc (Gen_Perf::affects_prev), src/hash-table.cc
931         (Hash_Table::operator()):  Don't use gcc-specific 2-operand
932         conditional expression.
933         * src/iterator.cc (Iterator::operator()):  Don't use gcc-specific
934         range construct in case label.
935         * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys),
936         src/gen-perf.cc (Gen_Perf::operator(), src/read-line.cc
937         (Read_Line::readln_aux):  If not gcc, don't allocate
938         variable-sized arrays on stack.
939         * src/new.cc (operator new):  Argument type should be size_t.
940         * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys),
941         new/cc (::operator new): Don't use non-standard >?= operator.
943 Tue Apr 27 20:11:30 1993  Per Bothner  (bothner@cygnus.com)
945         * src/Makefile.in:  Define TARGETPROG, and use it.
947 Mon Apr 19 00:29:18 1993  Per Bothner  (bothner@cygnus.com)
949         * Makefile.in, configure.in:  Re-vamped configure scheme.
950         * gperf.texinfo:  Renamed to gperf.texi.
951         * src/bool-array.{h,cc}:  ANSIfy bzero->memset.
953 Sat Jan 30 20:21:28 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)
955         * tests/Makefile.in (mostlyclean): Also delete aout, cout, m3out,
956         pout, and preout.
958 Tue Dec 29 08:58:17 1992  Ian Lance Taylor  (ian@cygnus.com)
960         * Makefile.in: pass $(FLAGS_TO_PASS) to all calls to make.
961         (FLAGS_TO_PASS): added INSTALL, INSTALL_DATA, INSTALL_PROGRAM.
963 Mon Dec 21 18:46:46 1992  Per Bothner  (bothner@rtl.cygnus.com)
965         * tests/expected.* renamed to *.exp to fit in 14 chars.
966         * tests/Makefile.in:  Update accordingly.
967         Also rename output.* to *.out.
968         * src/Makefile.in (clean):  Remove gperf program.
970 Wed Dec  9 14:33:34 1992  Per Bothner  (bothner@cygnus.com)
972         * src/hash-table.cc, src/bool-array.h: ANSIfy bzero->memset.
974 Thu Dec  3 19:34:12 1992  Per Bothner  (bothner@cygnus.com)
976         * Makefile.in (distclean, realclean): Don't delete
977         Makefile before recursing.
979 Fri Nov  6 13:41:49 1992  Per Bothner  (bothner@rtl.cygnus.com)
981         * key-list.{h,cc}:  Remove MAX_INT (and similar) constant
982         fields from Key_List class, and use INT_MAX (etc) from limits.h.
983         * key-list.{h,cc}, options.{h,cc}, vectors.h:  Removed all
984         uses of initialized const fields, as they are non-standard
985         - and their use was easy to do away with.  Mostly, just
986         made the constants static non-fields in the .cc file.
988 Mon Nov  2 13:10:11 1992  Per Bothner  (bothner@cygnus.com)
990         * tests/Makefile.in:  When generating cinset.c, don't pass -C,
991         since -C assumes an ANSI compiler.  Add the -C flag (with -a)
992         when generating test.out.3 instead.
993         * tests/expected.out.3:  Update accordingly.
995 Wed Aug 12 11:47:54 1992  Per Bothner  (bothner@cygnus.com)
997         * Makefile.in:  Factor out common flags into $(FLAGS_TO_PASS).
998         * Makefile.in:  'install-info' depends on gperf.info.
1000 Mon Aug 10 11:39:52 1992  Ian Lance Taylor  (ian@dumbest.cygnus.com)
1002         * Makefile.in, src/Makefile.in: always create installation
1003         directories.
1005 Mon Jul 20 15:33:21 1992  Mike Stump  (mrs@cygnus.com)
1007         * src/new.cc (operator new):  Add cast from void * to char *,
1008         since it is not a standard conversion.
1010 Wed Jun 17 16:25:30 1992  Per Bothner  (bothner@rtl.cygnus.com)
1012         * src/gen-perf.cc:  #include <_G_config.h> for _G_SYSV.
1013         * src/key-list.cc:  alloca() hair.
1014         * src/main.cc (main):  Only call getrlimit if _G_HAVE_SYS_RESOURCE.
1015         * Makefile,in, {src,test}/Makefile.in:  Fix *clean rules.
1017 Fri May 29 13:21:13 1992  Per Bothner  (bothner@rtl.cygnus.com)
1019         * src/gen-perf.cc:  Replace USG -> _G_SYSV.
1021 Thu May 14 13:58:36 1992  Per Bothner  (bothner@rtl.cygnus.com)
1023         * src/Makefile.in:  Don't pass obsolete flag -DUNLIMIT_STACK.
1024         * tests/Makefile.in (clean): Fix.
1026 Sat Mar  7 00:03:56 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
1028         * gperf.texinfo: added menu item hook.
1030 Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)
1032         * Makefile.in, configure.in: removed traces of namesubdir,
1033           -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
1034           copyrights to '92, changed some from Cygnus to FSF.
1036 Sun Jan 26 19:21:58 1992  Per Bothner  (bothner at cygnus.com)
1038         * tests/Makefile.in:  Use re-directed stdin instead of file
1039         name in argv.  This allows us to remove the filename
1040         from the output, the expected output, and hence the diffs.
1041         (Note that the input file is in $(srcdir), which we cannot
1042         place in the expected out files.)
1043         * tests/expected.out.[1235]:  Edit out input filename,
1044         to match new output.
1046 Mon Nov  4 15:04:41 1991  Douglas C. Schmidt  (schmidt at bastille.ics.uci.edu)
1048         * Need to do something about the end-of-line marker being
1049           hard-coded to '\n'...
1051         * Need to do something about the comment character being
1052           hard-coded to '#'...
1054 Fri Sep 27 09:30:15 1991  Douglas C. Schmidt  (schmidt at net4.ics.uci.edu)
1056         * Fixed a stupid problem with printout out a local enum with the
1057           -E option (I forgot to check for the case of 0 duplicates, so it
1058           was saying 1 duplicate instead!).
1060 Mon Aug 19 00:39:40 1991  Douglas C. Schmidt  (schmidt at javel.ics.uci.edu)
1062         * Yow, all finished making gperf run with cfront/Saber C++.  Not
1063           really all that hard, actually, though did need to remove some
1064           GNU specific hacks, like dynamically sized arrays and
1065           initializing class data members in their declarations, etc.
1067         * Bumped up the version # to reflect the recent changes.
1069 Sun Aug 18 22:25:32 1991  Douglas C. Schmidt  (schmidt at javel.ics.uci.edu)
1071         * Changed passage of Options::usage function in Options.C to have
1072           a leading `&' so that Saber C++ wouldn't complain...
1074         * Added a new header file called gperf.h that includes system-wide
1075           info.
1077         * Hacked up the release to work with Saber C++!  Changed all *.cc
1078           files to *.C.
1080 Mon Aug  5 21:18:47 1991  Douglas C. Schmidt  (schmidt at net1.ics.uci.edu)
1082         * Yow, hacked in the nifty changes to the Std_Err error handling
1083           abstraction.  This now adds format string support for printing
1084           out signals and the name of the function when things go wrong.
1085           Make changes throughout the source to make use of the new
1086           facilities and also to make sure all previous uses of
1087           Std_Err::report_error are now prefixed by the name of the class.
1089 Tue Jul 30 00:02:39 1991  Douglas C. Schmidt  (schmidt at net4.ics.uci.edu)
1091         * Make sure to add 1 to the Key_List::total_duplicates value when
1092           printing it out since any time we have more than zero duplicates
1093           we really have two or more duplicates!
1095         * Added support for the -O (optimize option).  This option
1096           optimizes the generated lookup function by assuming that all
1097           input keywords are members of the keyset from the keyfile.
1099         * Added #define DUPLICATES and #define HASH_VALUE_RANGE (and of
1100           course the enum equivalent) to the generated output.  Don't know
1101           how useful this will be, but it allows us to determine at a
1102           glance whether we've got a minimal perfect hash function (in
1103           which case TOTAL_KEYWORDS = HASH_VALUE_RANGE, and DUPLICATES =
1104           0).
1106         * Fixed a small bug in the Key_List::output_keyword_table routine
1107           that caused an extra newline to be printed if there where no
1108           leading blank entries... (who cares, right?!)
1110 Mon Jul 29 22:05:40 1991  Douglas C. Schmidt  (schmidt at net4.ics.uci.edu)
1112         * Modified the handling of the -E (emit enums rather than
1113           #defines) option in conjunction with the -G option.  Now, if -G
1114           and -E are given the enums are generated outside the lookup
1115           function, rather than within it!
1117         * Yow, as part of my Software Practice and Experience submission
1118           writeup I realized I needed to make the # comment character work
1119           correctly.  Now if you put a backslash character ('\') in front
1120           of the # it treats the first character as a #.  Naturally, to
1121           put a '\' character on the front of the line you need to escape
1122           it also, i.e.,
1123           \\I'm a line that starts with only one \
1124           # I'm a comment line
1125           \#define I'm walking a fine line... ;-)
1127 Wed Jun 26 11:21:02 1991  Douglas C. Schmidt  (schmidt at bastille.ics.uci.edu)
1129         * Changed all uses of the identifier `iteration_number' to
1130         `generation_number' (also updated the paper!).
1132 Tue Apr  9 07:59:42 1991  Doug Schmidt  (schmidt at net4.ics.uci.edu)
1134         * Had to change a whole bunch of little thangs in key-list.cc and
1135           list-node.cc to make the -I option work.
1137         * Changed an alloca statement in key-list.cc to reflect the
1138           strncasecmp modification (i.e., we now need to be able to
1139           allocate a longer buffer if the -I option is used).
1141 Mon Apr  8 18:17:04 1991  Doug Schmidt  (schmidt at net4.ics.uci.edu)
1143         * Yucko, there was a bug in the handling of -c (and of course the
1144           new -I command in key-list.cc).  Apparently when I added the
1145           super-duper hack that provided support for duplicate keys I
1146           forgot to update the strcmp output...
1148         * Boy, it has been a *long* time since I hacked this puppy.  Let's
1149           see, I'm about to add long-overdue support for case-insensitive
1150           string comparisons to gperf's generated output code.  We are
1151           going to employ the hitherto unused option -I to indicate this!
1153 Thu Jun 28 16:17:27 1990  Doug Schmidt  (schmidt at brilliant)
1155         * Wow, first fix on the new job!  There was a dumb error
1156           in Key_List::output_lookup_function, where I printed the
1157           string "&wordlist[key]" instead of the correct "&wordlist[index]".
1159         * Added a couple of #ifdefs for USG support.
1161 Sun Jun  3 17:16:36 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1163         * Updated the version number to 2.5 and sent to Doug Lea for release
1164           with the latest GNU libg++.
1166         * Changed the error handling when a keyword file cannot be opened
1167           (now calls perror).
1169 Wed May 30 14:49:40 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1171         * Instrumented the source code with trace statements automagically
1172           inserted using my new automated trace instrumentation tool!
1174 Wed May  9 11:47:41 1990  Doug Schmidt  (schmidt at siam.ics.uci.edu)
1176         * Really fixed the previous bug.  Turns out that a small amount
1177           of logic had to be duplicated to handle static links that occur
1178           as part of dynamic link chains.  What a pain!!!
1180 Tue May  8 23:11:44 1990  Doug Schmidt  (schmidt at siam.ics.uci.edu)
1182         * Fixed a stupid bug in Key_List::output_lookup_array that was
1183           causing incorrect counts to be generated when there were both
1184           static and dynamic links occurring for the same hash value.
1185           Also simplified the code that performs the logic in this routine.
1187 Mon Apr 30 17:37:24 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1189         * Fixed stupid bug in Key_List::output_lookup_array that was
1190           making the generated lookup[] array contain `chars' even
1191           when the values stored in the chars are greater than 127!
1193         * Changed the behavior of the -G (global table) option so that it
1194           will output the `length[]' array in the global scope along with
1195           the `word_list[]' array.
1197         * Fixed a stupid bug in Key_List::output_lookup_function that
1198           would always output the complicated `duplicate-handling' lookup
1199           logic, even when there were no duplicates in the input!
1201         * Yikes, had to modify a bunch of stuff in key-list.cc to correctly
1202           handle duplicate entries.  Changed the generated code so that
1203           the MIN_HASH_VALUE is no longer subtracted off when calculating
1204           the hash value for a keyword.  This required changing some other
1205           code by substituting MAX_HASH_VALUE for TOTAL_KEYS in several places.
1206           Finally, this means that the generated tables may contain leading
1207           null entries, but I suppose it is better to trade-off space to get
1208           faster performance...
1210 Mon Mar 26 13:08:43 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1212         * Updated version number to 2.4 to reflect the latest changes.
1214         * Changed the main program so that it always prints out gperf's
1215           execution timings to the generated output file.
1217 Sun Mar 25 12:39:30 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1219         * Added the -Z option so that users can specify the name of the
1220           generated class explicitly.  Updated documentation to reflect
1221           this change.
1223         * Modified the generated C++ class interface so that the functions
1224           are declared static (to remove the overhead of passing the `this'
1225           pointer).  This means that operator()() can no longer be used,
1226           since it only works on non-static member functions.
1227           Also changed things so that there is no constructor (why waste
1228           the extra call, when it doesn't do anything, eh?)
1230         * Modified the behavior of Key_List::output when the -L C++ option
1231           is enabled.  Previously the code generated use const data members
1232           to record MIN_WORD_LENGTH, MIN_HASH_VALUE, etc.  However, as
1233           pointed out by James Clark this may result in suboptimal behavior
1234           on the part of C++ compilers that can't inline these values.
1235           Therefore, the new behavior is identical to what happens with
1236           -L C, i.e., either #defines or function-specific enums are used.
1237           Why sacrifice speed for some abstract notion of `code purity?' ;-)
1239 Tue Mar  6 18:17:42 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1241         * Added the -E option that defines constant values using an enum
1242           local to the lookup function rather than with #defines.  This
1243           also means that different lookup functions can reside in the
1244           same file.  Thanks to James Clark (jjc@ai.mit.edu).
1246 Sat Mar  3 20:19:00 1990  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1248         * Added a special case to key_list::output_switch that doesn't
1249           generate extra comparisons when the `-S' is given an argument
1250           of 1 (the normal case).  This should speed up the generated
1251           code output a tad...
1253 Fri Feb 23 14:21:28 1990  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1255         * Renamed all instances of member function get_keysig_size
1256           to get_max_keysig_size, since this is more precise...
1258         * Changed all occurrences of charset to keysig (stands for ``key
1259           signature'') to reflect the new naming convention used in the
1260           USENIX paper.
1262 Thu Feb 22 11:28:36 1990  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1264         * Changed the name of the generated associated values table from
1265           asso_value to asso_values to reflect conventions in the USENIX
1266           C++ paper.
1268 Thu Feb 15 23:29:03 1990  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1270         * Updated the gperf.texinfo file to fix some formatting problems
1271           that had crept in since last time.
1273 Wed Feb 14 23:27:24 1990  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1275         * Fixed stupid bug in key-list.cc (get_special_input), wher
1276           gperf replaced each '%' with the succeeding character.
1278         * Added support for multiple target language generation.  Currently
1279           handled languages are C and C++, with C as the default.  Updated
1280           documentation and option handler to reflect the changes.
1282         * Added a global destructor to new.cc and removed the #ifdef, since
1283           the bloody thing now works with libg++.
1285 Mon Feb 14 13:00:00 1990  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1287         * Found out that my gperf paper was accepted at the upcoming
1288           USENIX C++ Conference in San Francisco.  Yow!
1290 Tue Jan 30 09:00:29 1990  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1292         * #ifdef'd out the new.cc memory allocator, since there are
1293           problems with this and the libg++ stuff.
1295         * Changed key-list.h so that class Vectors is a public (rather
1296           than private) base class for class Key_List.  The previous
1297           form was illegal C++, but wasn't being caught by the old
1298           g++ compiler.  Should work now... ;-)
1300 Sun Dec 10 14:08:23 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1302         * Added several changes from rfg@ics.uci.edu.  These changes
1303           help to automate the build process.
1305 Wed Nov 15 15:49:33 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1307         * Removed conditional compilation for GATHER_STATISTICS.  There's
1308           really no good reason to avoid collecting this info at run-time,
1309           since that section of code is *hardly* the bottleneck... ;-)
1311         * Simplified the C output routines in Key_List::set_output_types
1312           and Key_List::output_keyword_table a bit in order to
1313           speed-up and clean up the code generation.
1315         * Modified function Key_List::get_special_input so that it does
1316           not try to `delete' a buffer that turned out to be too short.
1317           This is important since the new memory management scheme
1318           does not handle deletions.  However, adding a small amount of
1319           garbage won't hurt anything, since we generally don't do this
1320           operation more than a couple times *at most*!
1322         * Created a new file (new.cc) which includes my own overloaded
1323           operator new.  This function should dramatically reduce the
1324           number of calls to malloc since it grabs large chunks and
1325           doles them out in small pieces.  As a result of this change
1326           the class-specific `operator new' was removed from class List_Node.
1328 Tue Nov 14 21:45:30 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1330         * Continued to refine the great hack.  The latest trick is to
1331           try and replace most uses of dynamic memory (i.e., calls to
1332           new) with uses of gcc dynamic arrays (i.e., an alloca solution).
1333           This makes life much easier for the overall process-size, since
1334           it reduces the amount of overhead for memory management.  As a
1335           side-effect from this change there is no reason to have the
1336           Bool_Array::dispose member function, so it's outta here!
1338         * Fixed a stupid bug that was an disaster waiting to happen...
1339           Instead of making the boolean array large enough to index
1340           max_hash_value it was only large enough to index max_hash_value
1341           - 1.  Once again, an off-by-one mistake in C/C++!!!!
1343 Mon Nov 13 19:38:27 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1345         * Added the final great hack!  This allows us to generate hash tables
1346           for near-perfect hash functions that contain duplicates, *without*
1347           having to use switch statements!  Since many compilers die on large
1348           switch statements this feature is essential.  Furthermore, it appears
1349           that the generated code is often *smaller* than that put out by
1350           compilers, even though a large, sparse array must be created.
1351           Here's the general idea:
1353              a. Generate the wordlist as a contiguous block of keywords,
1354                 just as before when using a switch statement.  This
1355                 wordlist *must* be sorted by hash value.
1357              b. Generate the lookup array, which is an array of signed
1358                 {chars,shorts,ints}, (which ever allows full coverage of
1359                 the wordlist dimensions).  If the value v, where v =
1360                 lookup[hash(str,len)], is >= 0 and < TOTAL_KEYWORDS, then we
1361                 simply use this result as a direct access into the wordlist
1362                 array to snag the keyword for comparison.
1364              c. Otherwise, if v is < -TOTAL_KEYWORDS or > TOTAL_KEYWORDS
1365                 this is an indication that we'll need to search through
1366                 some number of duplicates hash values.  Using a hash
1367                 linking scheme we'd then index into a different part of
1368                 the hash table that provides the starting index and total
1369                 length of the duplicate entries to find via linear search!
1371 Sun Nov 12 13:48:10 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1373         * Simplified Key_List::output_min_max considerably by recognizing
1374           that since the keyword list was already sorted by hash value finding
1375           the min and max values is trivial!
1377         * Improved the debugging diagnostics considerably in classes Key_List,
1378           Hash_Table, and Gen_Perf.
1380         * Modified the `-s' option so that a negative argument is now
1381           interpreted to mean `allow the maximum associated value to be
1382           about x times *smaller* than the number of input keys.'  This
1383           should help prevent massive explosion of generated hash table
1384           size for large keysets.
1386 Sat Nov 11 11:31:13 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1388         * Added a field in class Key_List that counts the total number
1389           of duplicate keywords, both static and dynamic.
1391         * Added a new member function Bool_Array that deletes the dynamic
1392           memory allocated to Bool_Array::storage_array.  This space may
1393           be needed for subsequent options, so it made sense to free it as
1394           soon as possible...
1396         * Renamed file/class Alpha_Vectors to Vectors, to avoid problems
1397           with 14 character length filenames on SYSV.  Also changed file
1398           adapredefined.gperf to adadefs.gperf in the ./tests directory.
1400         * Modified class Options by changing the member function
1401           Options::total_positions to Options::get_charset_size and
1402           Options::set_charset_size.  These two routines now either return
1403           the total charset size *or* the length of the largest keyword
1404           if the user specifies the -k'*' (ALLCHARS) option.  This change
1405           cleans up client code.
1407         * Merged all the cperf changes into gperf.
1409         * Made sure to explicitly initialize perfect.fewest_collisions to
1410           0.
1412         * Cleaned up some loose ends noticed by Nels Olson.
1413           1.  Removed `if (collisions <= perfect.fewest_collisions)'
1414               from Gen_Perf::affects_prev since it was superfluous.
1415           2.  Removed the fields best_char_value and best_asso_value
1416               from Gen_Perf.  There were also unnecessary.
1417           3.  Fixed a braino in the Bool_Array::bool_array_reset
1418               function.  Since iteration numbers can never be zero
1419               the `if (bool_array.iteration_number++ == 0)' must be
1420               `if (++bool_array.iteration_number == 0).'
1421           4.  Modified Std_Err::report_error so that it correctly handles
1422               "%%".
1424         * It is important to note that -D no longer enables -S.
1425           There is a good reason for this change, which will become
1426           manifested in the next release... (suspense!).
1428         * Made some subtle changes to Key_List::print_switch so that if finally
1429           seems to work correctly.  Needs more stress testing, however...
1431         * Made a major change to the Key_List::print_switch function.
1432           The user can now specify the number of switch statements to generate
1433           via an argument to the -S option, i.e., -S1 means `generate 1
1434           switch statement with all keywords in it,' -S2 means generate
1435           2 switch statements with 1/2 the elements in each one, etc.
1436           Hopefully this will fix the problem with C compilers not being
1437           able to generate code for giant switch statements (but don't
1438           hold your breath!)
1440         * Changed Key_List::length function to Key_List::keyword_list_length.
1442         * Added a feature to main.c that prints out the starting wall-clock
1443           time before the program begins and prints out the ending wall-clock
1444           time when the program is finished.
1446         * Added the GATHER_STATISTICS code in hash-table.c so we can
1447           keep track of how well double hashing is doing.  Eventually,
1448           GATHER_STATISTICS will be added so that all instrumentation
1449           code can be conditionally compiled in.
1451         * Fixed a stupid bug in Key_List::print_switch routine.  This
1452           was necessary to make sure the generated switch statement worked
1453           correctly when *both* `natural,' i.e., static links and dynamic
1454           links, i.e., unresolved duplicates, hash to the same value.
1456         * Modified Bool_Array::~Bool_Array destructor so that
1457           it now frees the bool_array.storage_array when it is no longer
1458           needed.  Since this array is generally very large it makes sense
1459           to return the memory to the freelist when it is no longer in use.
1461         * Changed the interface to constructor Hash_Table::Hash_Table.  This
1462           constructor now passed a pointer to a power-of-two sized buffer that
1463           serve as storage for the hash table.  Although this weakens information
1464           hiding a little bit it greatly reduces dynamic memory fragmentation,
1465           since we can now obtain the memory via a call to alloca, rather
1466           than malloc.  This change modified Key_List::read_keys calling
1467           interface.
1469         * Since alloca is now being used more aggressively a conditional
1470           compilation section was added in main.c. Taken from GNU GCC,
1471           this code gets rid of any avoidable limit on stack size so that
1472           alloca does not fail.  It is only used if the -DRLIMIT_STACK
1473           symbol is defined when gperf is compiled.
1475         * Added warnings in option.c so that user's would be informed
1476           that -r superceeds -i on the command-line.
1478         * Rewrote Gen_Perf::affects_prev.  First, the code structure
1479           was cleaned up considerably (removing the need for a dreaded
1480           goto!).  Secondly, a major change occurred so that Gen_Perf::affects_prev
1481           returns FALSE (success) when fewest_hits gets down to whatever
1482           it was after inserting the previous key (instead of waiting for
1483           it to reach 0).  In other words, it stops trying if it can
1484           resolve the new collisions added by a key, even if there are
1485           still other old, unresolved collisions.  This modification was
1486           suggested by Nels Olson and seems to *greatly* increase the
1487           speed of gperf for large keyfiles.  Thanks Nels!
1489         * In a similar vein, inside the Gen_Perf::change routine
1490           the variable `perfect.fewest_collisions is no longer initialized
1491           with the length of the keyword list.  Instead it starts out at
1492           0 and is incremented by 1 every time change () is called.
1493           The rationale for this behavior is that there are times when a
1494           collision causes the number of duplicates (collisions) to
1495           increase by a large amount when it would presumably just have
1496           gone up by 1 if none of the asso_values were changed.  That is,
1497           at the beginning of change(), you could initialize fewest_hits
1498           to 1+(previous value of fewest_hits) instead of to the number of
1499           keys.  Thanks again, Nels.
1501         * Replaced alloca with new in the Gen_Perf::change function.
1502           This should eliminate some overhead at the expense of a little
1503           extra memory that is never reclaimed.
1505         * Renamed Gen_Perf::merge_sets to Gen_Perf::compute_disjoint_union
1506           to reflect the change in behavior.
1508         * Added the -e option so users can supply a string containing
1509           the characters used to separate keywords from their attributes.
1510           The default behavior is ",\n".
1512         * Removed the char *uniq_set field from LIST_NODE and modified
1513           uses of uniq_set in perfect.c and keylist.c.  Due to changes
1514           to Gen_Perf::compute_disjoint_sets this field was no longer
1515           necessary, and its removal makes the program smaller and
1516           potentially faster.
1518         * Added lots of changes/fixes suggested by Nels Olson
1519           (umls.UUCP!olson@mis.ucsf.edu).  In particular:
1520           1.  Changed Bool_Array so that it would dynamically create
1521               an array of unsigned shorts rather than ints if the
1522               LO_CAL symbol was defined during program compilation.
1523               This cuts the amount of dynamic memory usage in half,
1524               which is important for large keyfile input.
1525           2.  Added some additional debugging statements that print extra
1526               info to stderr when the -d option is enabled.
1527           3.  Fixed a really stupid bug in Key_List::print_switch
1528               A right paren was placed at the wrong location, which broke
1529               strlen ().
1530           4.  Fixed a subtle problem with printing case values when keylinks
1531               appear.  The logic failed to account for the fact that there
1532               can be keylinks *and* regular node info also!
1533           5.  Changed the behavior of Key_List::read_keys so that it would
1534               honor -D unequivocally, i.e., it doesn't try to turn off dup
1535               handling if the user requests it, even if there are no
1536               immediate links in the keyfile input.
1537           6.  Modified the -j option so that -j 0 means `try random values
1538               when searching for a way to resolve collisions.'
1539           7.  Added a field `num_done' to the Gen_Perf struct.  This is used
1540               to report information collected when trying to resolve
1541               hash collisions.
1542           8.  Modified the merge_sets algorithm to perform a disjoint
1543               union of two multisets.  This ensures that subsequent
1544               processing in Gen_Perf::affect_prev doesn't
1545               waste time trying to change an associated value that is
1546               shared between two conflicting keywords.
1547           9.  Modified Gen_Perf::affects_prev so that it doesn't try
1548               random jump values unless the -j 0 option is enabled.
1549           10. Fixed a silly bug in Gen_Perf::change.  This problem caused
1550               gperf to seg fault when the -k* option was given and the
1551               keyfile file had long keywords.
1553 Sun Oct 29 00:18:55 1989  Doug Schmidt  (schmidt at siam.ics.uci.edu)
1555         * Modified class-specific new operations for Read_Line and
1556           List_Node so they don't fail if SIZE is larger than twice
1557           the previous buffer size.  Note we double buffer size
1558           everytime the previous buffer runs out, as a heuristic
1559           to reduce future calls to malloc.
1561 Sun Oct 22 13:49:43 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1563         * Updated gperf version number to 2.0.  Send to Doug Lea for
1564           incorporation into the long-awaited `official' libg++ 1.36
1565           release!
1567         * Thanks to Nels Olson a silly bug in Gen_Perf::change ()
1568           was fixed.  This problem caused gperf to seg fault when
1569           the -k* option was given and the keyfile file had long
1570           keywords.
1572         * Modified Key_List::print_hash_function so that it output
1573           max_hash_value + 1 (rather than just max_hash_value) for
1574           any associated value entries that don't correspond to
1575           keyword charset characters.  This should speed up rejection
1576           of non-keyword strings a little in some cases.
1578 Sat Oct 21 19:28:36 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1580         * Fixed Key_List::print_hash_function so that it no longer output
1581           things like `return 0 + ...'  Although this probably gets
1582           optimized away by even the worst C compilers there isn't any
1583           point tempting fate... ;-)
1585         * Fixed class List_Node's constructor so that it wouldn't a priori
1586           refuse to consider trying to hash keys whose length is less
1587           than the smallest user-specified key position.  It turns out
1588           this is not a problem unless the user also specifies the -n
1589           (NOLENGTH) option, in which case such keys most likely
1590           don't have a prayer of being hashed correctly!
1592         * Changed the name of the generated lookup table from `Hash_Table'
1593           to `asso_value' to be consistent with the gperf paper.
1595 Tue Oct 17 14:19:48 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1597         * Added a flag GATHER_STATISTICS in the Makefile.  If defined
1598           during compilation this turns on certain collection facilities
1599           that track the performance of gperf during its execution.  In
1600           particular, I want to see how many collisions occur for the
1601           double hashing Hash_Table.
1603         * Added a safety check so that we don't screw up if the total
1604           number of `resets' of the Bool_Array exceeds MAX_INT.  Since
1605           this number is around 2^31 it is unlikely that this would ever
1606           occur for most input, but why take the risk?
1608         * Changed the behavior for the -a (ANSI) option so that the
1609           generated prototypes use int rather than size_t for the LEN
1610           parameter.  It was too ugly having to #include <stddef.h> all
1611           over the place...
1613 Mon Oct 16 11:00:35 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1615         * Continued to work on the gperf paper for the USENIX C++
1616           conference.  At some point this will be merged back into
1617           the gperf documentation...
1619 Sat Oct 14 20:29:43 1989  Doug Schmidt  (schmidt at siam.ics.uci.edu)
1621         * Added a majorly neat hack to Bool_Array, suggested by rfg.
1622           The basic idea was to throw away the Ullman array technique.
1623           The Ullman array was used to remove the need to reinitialize all
1624           the Bool_Array elements to zero everytime we needed to determine
1625           whether there were duplicate hash values in the keyword list.
1626           The current trick uses an `iteration number' scheme, which takes
1627           about 1/3 the space and reduces the overall program running a
1628           time by about 20 percent for large input!  The hack works as
1629           follows:
1631           1. Dynamically allocation 1 boolean array of size k.
1632           2. Initialize the boolean array to zeros, and consider the first
1633              iteration to be iteration 1.
1634           2. Then on all subsequent iterations we `reset' the bool array by
1635              kicking the iteration count by 1.
1636           3. When it comes time to check whether a hash value is currently
1637              in the boolean array we simply check its index location.  If
1638              the value stored there is *not* equal to the current iteration
1639              number then the item is clearly *not* in the set.  In that
1640              case we assign the iteration number to that array's index
1641              location for future reference.  Otherwise, if the item at
1642              the index location *is* equal to the iteration number we've
1643              found a duplicate.  No muss, no fuss!
1645 Mon Oct  2 12:30:54 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1647         * Changed some consts in options.h to enumerals, since g++
1648           doesn't seem to like them at the moment!
1650 Sat Sep 30 12:55:24 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1652         * Fixed a stupid bug in Key_List::print_hash_function that manifested
1653           itself if the `-k$' option was given (i.e., only use the key[length]
1654           character in the hash function).
1656         * Added support for the -C option.  This makes the contents of
1657           all generated tables `readonly'.
1659         * Changed the handling of generated switches so that there is
1660           only one call to str[n]?cmp.  This *greatly* reduces the size of
1661           the generated assembly code on all compilers I've seen.
1663         * Fixed a subtle bug that occurred when the -l and -S option
1664           was given.  Code produced looked something like:
1666           if (len != key_len || !strcmp (s1, resword->name)) return resword;
1668           which doesn't make any sense.  Clearly, this should be:
1670           if (len == key_len && !strcmp (s1, resword->name)) return resword;
1672 Tue Sep 26 10:36:50 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1674         * Changed class Read_Line's definition so that it no longer
1675           needs to know about the buffering scheme used to speed up
1676           dynamic memory allocation of input keywords and their
1677           associated attributes.  This means that operator new is no longer
1678           a friend of Read_Line.
1680 Mon Sep 25 23:17:10 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1682         * Decided that Obstacks had too much overhead, so they were
1683           removed in favor of super-efficient, low-overhead buffered
1684           storage allocation hacks in Read_Line and List_Node.
1686         * No longer try to inline functions that g++ complains about
1687           (Key_List::Merge and Key_List::Merge_Sort).
1689 Sun Sep 24 13:11:24 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1691         * Changed classes Read_Line and List_Node to use Obstacks in order
1692           to cache memory allocation for keyword strings and List_Nodes.
1694         * Continued to experiment with inheritance schemes.
1696         * Added a new file `alpha.h', that declares static data shared
1697           (i.e., inherited) between classes List_Node and Key_List.
1699 Tue Sep 12 16:14:41 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1701         * Made numerous changes to incorporate multiple inheritance in
1702           gperf.
1704 Wed Aug 16 23:04:08 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1706         * Added the -DCOMPILER_FIXED flag to the ./src/Makefile.  This
1707           implies that people trying to compile gperf need to have a
1708           working version of the new g++ compiler (1.36.0).
1710         * Removed some extra spaces that were being added in the generated
1711           C code.
1713 Mon Jul 24 17:09:46 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1715         * Fixed PRINT_HASH_FUNCTION and PRINT_LOOKUP_FUNCTION in keylist.c
1716           so that the generated functions take an unsigned int length argument.
1717           If -a is enabled the prototype is (const char *str, size_t len).
1719 Fri Jul 21 13:06:15 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1721         * Fixed a typo in PRINT_KEYWORD_TABLE in keylist.cc that prevented
1722           the indentation from working correctly.
1724         * Fixed a horrible typo in PRINT_KEYWORD_TABLE in keylist.cc
1725           that prevented links from being printed correctly.
1727 Tue Jul 18 16:04:31 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1729         * Fixed up readline.cc and readline.h so that they work OK
1730           with g++ compilers that aren't completely up-to-date.
1731           If symbol COMPILER_FIXED is defined then the behavior
1732           that works on my more recent version of g++ is enabled.
1734 Sun Jul  9 17:53:28 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1736         * Changed the ./tests subdirectory Makefile so that it
1737           uses $(CC) instead of gcc.
1739 Sun Jul  2 21:52:15 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1741         * Fixed a number of subtle bugs that occurred when -S was
1742           combined with various and sundry options.
1744         * Added the -G option, that makes the generated keyword table
1745           a global static variable, rather than hiding it inside
1746           the lookup function.  This allows other functions to directly
1747           access the contents in this table.
1749         * Added the "#" feature, that allows comments inside the keyword
1750           list from the input file. Comment handling takes place in readline.c.
1751           This simplifies the code and reduces the number of malloc calls.
1753         * Also added the -H option (user can give the name of the hash
1754           function) and the -T option (prevents the transfer of the type decl
1755           to the output file, which is useful if the type is already defined
1756           elsewhere).
1758 Thu Jun 22 20:39:39 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1760         * Modified many classes so that they would inherit Std_Err as
1761           a base class.  This makes things more abstract...
1763 Fri Jun 16 14:23:00 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1765         * Modified the -f (FAST) option.  This now takes an argument.
1766           The argument corresponds to the number of iterations used
1767           to resolve collisions.  -f 0 uses the length of the
1768           keyword list (which is what -f did before).  This makes
1769           life much easier when dealing with large keyword files.
1771 Tue Jun  6 17:53:27 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1773         * Added the -c (comparison) option.  Enabling this
1774           will use the strncmp function for string comparisons.
1775           The default is to use strcmp.
1777         * Fixed a typo in key_list.cc (PRINT_SWITCH).  This caused
1778           faulty C code to be generated when the -D, -p, and -t
1779           options were all enabled.
1781 Thu May 25 14:07:21 1989  Doug Schmidt  (schmidt at siam.ics.uci.edu)
1783         * Once again, changed class Read_Line to overload global operator
1784           new.  Hopefully, this will work...!
1786 Sun May 21 01:51:45 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1788         * Modified Key_List::print_hash_function () so that it properly
1789           formats the associated values in the hash table according to
1790           the maximum number of digits required to represent the largest
1791           value.
1793         * Removed the named return value from class Hash_Table's
1794           operator (), since this causes a seg fault when -O is enabled.
1795           No sense tripping subtle g++ bugs if we don't have to.... ;-)
1797         * Removed the operator new hack from Read_Line, since this seemed
1798           to create horrible bus error problems.
1800         * Changed many class member functions and data members to be `static',
1801           if they don't manipulate this!
1803 Fri May 12 23:06:56 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1805         * Changed class Std_Err to use static member functions, a la
1806           Ada or Modula 2.  This eliminates the need for an explicit
1807           error-handler class object.
1809         * Added the ``named return value'' feature to Hash_Table::operator ()
1810           and Bool_Array::operator [], just for the heck of it.... ;-)
1812         * Changed the previous hack in Read_Line so that we now use
1813           the overloaded global `new' instead of NEW_STRING!
1815 Wed May  3 17:36:55 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1817         * Updated to version 1.7.  This reflects the recent major changes
1818           and the new C port.
1820         * Modified the GNU getopt.cc routine to have a class-based interface.
1822         * Fixed a typo in Perfect.cc ~Perfect that prevented the actual maximum
1823           hash table size from being printed (maybe the stream classes
1824           weren't so bad after all.... ;-).
1826         * Added support for the -f option.  This generates the perfect
1827           hash function ``fast.''  It reduces the execution time of
1828           gperf, at the cost of minimizing the range of hash values.
1830 Tue May  2 16:23:29 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1832         * Added an efficiency hack to Read_Line.  Instead of making
1833           a call to operator NEW (a.k.a. malloc) for each input string
1834           a new member function NEW_STRING stores a large buffer from
1835           which new strings are carved out, growing the buffer if
1836           necessary.  It might be useful to add this throughout the
1837           program....
1839         * Removed all unnecessary calls to DELETE.  If the program is about
1840           to exit it is silly to waste time freeing memory.
1842         * Added the GNU getopt program to the distribution.  This makes
1843           GPERF portable to systems that don't include getopt in libc.
1845         * Added a strcspn member to class Key_List.  This also increases
1846           portability.
1848         * Added the get_include_src function from keylist.c as a member
1849           function in class Key_List.  Hopefully every function is
1850           now associated with a class.  This aids abstraction and
1851           modularity.
1853         * Ported gperf to C.  From now on both K&R C and GNU G++ versions
1854           will be supported.  There will be two ChangeLog files, one
1855           for each version of the program.
1857 Mon May  1 16:41:45 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1859         * Fixed a bug with -k'*'.  This now prints out *all* the cases
1860           up to the length of the longest word in the keyword set.
1862 Sun Apr 30 12:15:25 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1864         * Removed all use of the stream classes.  Too ugly, slow, and
1865           not handled by the c++-mode formatter....
1867         * Modified the handling of links (i.e., keywords that have
1868           identical hash values as other keywords).  This should
1869           speed up hash function generation for keyword sets with
1870           many duplicate entries.  The trick is to treat duplicate
1871           values as equivalence classes, so that each set of duplicate
1872           values is represented only once in the main list processing.
1874         * Fixed some capitialization typos and indentations mistakes in
1875           Key_List::print_hash_function.
1877 Sat Apr 29 12:04:03 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1879         * Fixed a typo/logico in Key_List::print_switch that prevented
1880           the last keyword in the keyword list to be print out.  This
1881           requires further examination.....
1883         * Fixed a stupid bug in List_Node::List_node.  If the -k'*' option
1884           was enabled the KEY_SET string wasn't getting terminated with
1885           '\0'!
1887 Fri Apr 28 12:38:35 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1889         * Renamed strexp.h and strexp.cc to iterator.h and iterator.cc.
1890           Also changed the strexp class to iterator.  Continued to work
1891           on style...
1893         * Updated the version number to 1.6.  This reflects all the
1894           recent changes.
1896 Thu Apr 27 00:14:51 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1898         * Added the -D option that properly handles keyword sets that
1899           contain duplicate hash values.
1901         * Continued the stylistic changes.  Added the #pragma once
1902           directive to all the *.h files.  Removed all #defines and
1903           replaced them with static consts.  Also moved the key_sort
1904           routine from options.cc into the options class as a
1905           member function.
1907 Mon Apr  3 13:26:55 1989  Doug Schmidt  (schmidt at zola.ics.uci.edu)
1909         * Made massive stylistic changes to bring source code into
1910           conformance with GNU style guidelines.
1912 Thu Mar 30 23:28:45 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1914         * Fixed up the output routines so that they generate code
1915           corresponding to the GNU style guidelines.
1917 Sat Mar 11 13:12:37 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1919         * Fixed Stderr constructors so that they wouldn't try to
1920           use the base class initializer syntax for the static
1921           class variable Program_Name.  G++ 1.34 is stricter in
1922           enforcing the rules!
1924 Fri Mar 10 11:24:14 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1926         * Removed -v and ``| more'' from the Makefile to keep rfg happy...
1928 Thu Mar  2 12:37:30 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1930         * Sent latest GNU gperf version 1.5 to Doug Lea for inclusion
1931           into libg++ 1.34.  Note that there is a small bug with
1932           the new %{ ... %} source inclusion facility, since it doesn't
1933           understand comments and will barf if %{ or %} appear nested
1934           inside the outermost delimiters.  This is too trivial of
1935           a defect to fix at the moment...
1937 Tue Feb 28 11:19:58 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1939         * Added the -K option, which allows the user to provide a
1940           alternative name for the keyword structure component.
1941           The default is still ``name.''
1943         * Added the LEX and YACC-like ability to include arbitrary
1944           text at the beginning of the generated C source code output.
1945           This required two new functions Get_Special_Input,
1946           Key_List::Save_Include_Src;
1948         * Fixed memory allocation bug in Key_List::Set_Types.
1949           Variable Return_Type needs 1 additional location
1950           to store the "*" if the -p option is used.
1952         * Added code to NULL terminate both Struct_Tag and Return_Type,
1953           *after* the strncpy (stupid mistake).
1955 Mon Feb 27 14:39:51 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1957         * Added a new option -N.  This allows the user to specify the
1958           name to be used for the generated lookup function.  The
1959           default name is still ``in_word_set.''  This makes it
1960           possible to completely automate the perfect hash function
1961           generation process!
1963 Mon Feb 20 23:33:14 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1965         * Corrected the Hash_Table::operator () function so that
1966           *it* is responsible for deciding when a new key has the
1967           same signature as a previously seen key.  The key length
1968           information is now used internally to this function to
1969           decide whether to add to the hash table those keys with
1970           the same key sets, but different lengths.  Before, this
1971           was handled by the Key_List::Read_Keys function.  However,
1972           this failed to work for certain duplicate keys, since
1973           they weren't being entered into the hash table properly.
1975 Sun Feb 19 16:02:51 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
1977         * Modified class Options by moving the enum Option_Type out
1978           of the class.  This is to satisfy the new enumeration
1979           scope rules in C++.
1981 Sun Jan 15 15:12:09 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
1983         * Incremented the version number upto 1.4 to reflect the new
1984           options that affect the generated code.  Send the new
1985           distribution off to Michael for use with g++ 1.33.
1987         * Added a fix to Key_List::Read_Keys so that it checks for links
1988           properly when the -n option is used.  Previously, it didn't
1989           catch obvious links, which caused it to spend large amount
1990           of time searching for a solution that could never occur!
1992         * Modified the Key_List data structure to record *both* the
1993           minimum and the maximum key lengths.  This information
1994           is now computed in Key_List::Read_Keys, and thus
1995           Key_List::Print_Min_Max doesn't need to bother.
1997         * Modified the key position iterator scheme in options.cc to
1998           eliminate the need for member function Options::Advance.
1999           Now, the Options::Get function performs the advancement
2000           automatically, obviating the need for an extra function call.
2002         * Added the new function Options::Print_Options, to print out
2003           the user-specified command line options to generated C
2004           output file.
2006         * Added a new function, Key_List::Print_Keylength_Table,
2007           which creates a table of lengths for use in speeding
2008           up the keyword search.  This also meant that a new
2009           option, -l (LENTABLE) is recognized.  It controls
2010           whether the length table is printed and the comparison
2011           made in the generated function ``in_word_set.''
2013         * Added a comment at the top of the generated C code
2014           output file that tells what version of gperf was used.
2015           Next, I'll also dump out the command line options
2016           as a comment too.  Thanks to Michael Tiemann for the
2017           feedback on this.
2019         * Fixed the -n option to make it work correctly with
2020           other parts of the program (most notably the Perfect::Hash
2021           function and the computation of minimum and maximum lengths.
2023 Fri Jan 13 21:25:27 1989  Doug Schmidt  (schmidt at siam.ics.uci.edu)
2025         * Realized the the need to add a test that will enable
2026           optimziation of the generated C code in the ``hash'' function
2027           by checking whether all the requested key positions are
2028           guaranteed to exist due to the comparison in `in_word_set.''
2029           I'll put this in soon....
2031 Thu Jan 12 20:09:21 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
2033         * Added pascal, modula3, and modula2 tests inputs to the
2034           Makefile
2036         * Recognised that there is a bug with the -n option.  However
2037           I'm too busy to fix it properly, right now.  The problem
2038           is that the generated #define end up being 0, since that's
2039           my hack to make -n work.  This needs complete rethinking!
2041 Tue Jan 10 00:08:16 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
2043         * Added a new option, -n, that instructs gperf to not use the
2044           length of an identifier when computing the hash functions.
2045           I'm not sure how useful this is!
2047         * Retransmitted the distribution to rocky.oswego.edu.  Hopefully,
2048           this will work!
2050         * Began fixing the indentation and capitalization to conform
2051           to the GNU coding guidelines.
2053 Mon Jan  9 22:23:18 1989  Doug Schmidt  (schmidt at pompe.ics.uci.edu)
2055         * Fixed horrible bug in Read_Line::Readln_Aux.  This was
2056           a subtle and pernicous off-by-1 error, that overwrote
2057           past the last character of the input string buffer.  I
2058           think this fault was killing the vax!
2060         * Yow, fixed an oversight in List_Node::List_Node, where the
2061           pointer field Next was uninitialized.  Luckily, the new routine
2062           seems to return 0 filled objects the first time through!
2064 Sun Jan  8 13:43:14 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
2066         * Modified the ``key linked'' diagnostic in Key_List::Read_Keys
2067           to be more helpful and easy to read.
2069         * Fixed the List_Node::List_Node so that it would ignore trailing
2070           fields if the -t option was not enabled.
2072         * Moved the List_Node declarations out of keylist.h and
2073           into a file of its own, called listnode.cc and listnode.h
2074           Made Set_Sort a member function of class List_Node.
2076         * Massively updated the documentation in the gperf.texinfo file.
2078         * Polished off the major revision to the print functions,
2079           added a few new tests in the Makefile to check for the
2080           validity of the program and ftp'ed the entire distribution
2081           off to Doug Lea for libg++. ( changed it to
2082           1.3 to reflect the major changes with the generated
2083           C code ).
2085         * Fixed Key_List::Print_Switch to deal with the -p and -t options.
2086           This meant that the ``still-born'' function Key_List::
2087           Print_Type_Switch was superflous, so I removed it.
2088           Also, removed the restriction in Option that the -p and
2089           -t options couldn't be used simultaneously.
2091         * Modified List_Node::List_Node, to perform only 1 call to
2092           ``new'' when dynamically allocating memory for the Key_Set
2093           and the Uniq_Set.
2095 Sat Jan  7 14:10:51 1989  Doug Schmidt  (schmidt at glacier.ics.uci.edu)
2097         * Fixed a big bug with the new policy of nesting the
2098           wordlist inside of generated function ``in_word_set.''
2099           I'd forgotten to declare the wordlist array as static!
2100           ( arrgh ).
2102         * Added a new function Key_List::Set_Types, that figures out
2103           the return type for generated function ``in_word_set,''
2104           the user-defined ``struct tag,'' if one is used, and also
2105           formates the array type for the static local array.
2107         * Changed the print routines to take advantage of the
2108           new -p option.
2110         * Began adding the hooks to allow the return of a pointer
2111           to a user defined struct location from the generated
2112           ``in_word_set'' function instead of the current 0 or 1
2113           return value.  Created function Key_List::Print_Type_Switch
2114           and added option -p to class Option, allowing the user to
2115           request generation of the aforementioned pointers returned
2116           instead of booleans.
2118         * Put in checks in class Option to make sure that -S and -t
2119           options are not used simultaneously.  This restriction
2120           will be removed in subsequent releases, once I decide on
2121           a clean way to implement it.
2123         * Sent version 1.2 to Doug Lea for possible inclusion into
2124           the libg++ distribution.
2126         * Moved the static word_list array inside the generated function
2127           in_word_set.  This supports better data hiding.
2129         * Added a texinfo file, gperf.texinfo
2131         * Revised the Makefile to cleanup the droppings from texinfo
2132           and changed the name of gperf.cc and gperf.h to perfect.cc
2133           and perfect.h.
2135 Fri Jan  6 13:04:45 1989  Doug Schmidt  (schmidt at crimee.ics.uci.edu)
2137         * Implemented the switch statement output format.  Much better
2138           for large datasets in terms of space used.
2140         * Added new functions to break up the Key_List::Output function.
2141           Functions added were Key_List::Print_Switch,
2142           Key_List::Print_Min_Max, Key_List::Print_Keyword_Table,
2143           Key_List::Print_Hash_Function, and
2144           Key_List::Print_Lookup_Function.  This simplifies the big mess
2145           in Key_List::Output considerably!
2147         * Added switch statement option to Options, which potentially
2148           trades time for space in the generated lookup code.
2150 Thu Jan  5 22:46:34 1989  Doug Schmidt  (schmidt at siam.ics.uci.edu)
2152         * Released version 1.1
2154         * Fixed a bug with Gperf::Merge_Set, it was skipping letters
2155           shared between the Set_1 and Set_2.
2157         * Added the optimal min/max algorithm in Key_List::Output.  This
2158           runs in O (3n/2), rather than O (2n) time.
2160         * Changed Gperf::Sort_Set to use insertion sort, rather than
2161           bubble sort.
2163         * Added a check in Key_List::Output for the special case where
2164           the keys used are 1,$.  It is possible to generate more
2165           efficient C code in this case.
2167 Local Variables:
2168 mode: change-log
2169 add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time))
2170 indent-tabs-mode: nil
2171 End: