1libpp change history
3	 ----- minor sync release -----
409/11/89 add extra sun style 1,2 arg to line syncs in ppline with pp:linetype
5	 add pp:oldc to convert __STDC__ void* and prototypes to old C
608/11/89 fix <...> include dir bug
708/08/89 add SYM_INIT for #define during INIT
807/28/89 delete STRIPTOP, STRIP only T_STRING & T_CHARCONST at pp.level==1
9	 add ppcargs() compatibility command line argument parse
1007/17/89 dialect: ANSI (default) or (Reiser) compatibility
11	 style: extended (default) or strict
12	 use pathprobe(3) for dynamic ppdefault.h
13	 add PP_PROBE to specify pathprobe() processor
14	 add -[DI]+ to invert options in ppargs()
17	 add #pragma's for most ppargs() options
18	 add #option(pragma-option) predicate test
19	 PP_MACREF now called during initialization
2007/11/89 add PP_BUILTIN for external #(...) handler
21	 add line number to missing endif message
22	 ignore errors in skipped ppexpr() &&, || and ?: subexpressions
23	 add space before macro actual in replacement text
2407/04/89 fix PP_TRUNCATE interaction with PP_COMPILE
2506/30/89 #define x #; x was recognized as directive #
2606/27/89 don't pass comments during #if skip
2705/01/89 add L"..." and L'...' wide quoted constants
28	 mixed "..." and L"..." ok -- L"..." for COMPILE, first otherwise
29	 fix PASSCOMMENTS in directives
30	 allow #define f(a,) for COMPATIBILITY
31	 fix literal string concatenation bugs
32	 fix header parsing in non-active if-blocks
33	 #endmac now takes no arg
3404/11/89 tone down unknown directive diagnostic in conditional
3504/07/89 move macref call before arg processing
3603/27/89 fix pplex bug that bombed line sync for last line == #include
3703/15/89 fix PP_TRUNCATE macro id bit table checks
38	 remove compatibility option s from ppargs() -- belongs in cmds
3903/08/89 remove ``empty character constant'' warning for PASSTHROUGH
4002/28/89 fix variable n usage conflict for DEFINE: in ppcontrol
4102/22/89 fix -T conflict with __GNUC__ in ppargs
4202/01/89 add -T (PP_TRUNCATE) for old non-flexname compiler compatibility
4301/31/89 -I-M-<char><suffix> finds map file by mapping input file name
44	 -I-H[directory] allowed for fine hosted control
4501/24/89 fix #undef of SYM_READONLY macro message
46	 add PPCOMPATIBLE for compatibility installation in /lib/cpp
47	 add PP_MAP & -I-M to map include files for minimal including
4801/18/89 fix pp.token setting by noting with pp.state|=TOKENSET
4901/11/89 fix #if skip bug where quoted token set begin line state
5012/11/88 add error checking wrappers to *alloc()
5112/05/88 add PP_FILEDEPS (-M) and FILEDEPS mode for BSD compatibility
5212/01/88 add #macdef-#endmac and change actualsync() char to SYNC ('\r')
5311/30/88 TOKOUTBUF controls 11/28/88 STANDALONE speedup
5411/28/88 speed up STANDALONE by avoiding pp.token copy
5511/22/88 add comment removal to string_special
5611/11/88 LIBEXPR enables expr(3) in ppexpr() (12K extra text)
5710/11/88 move VARQUOTE to pp.mode
5810/01/88 allow checkpoint files for !STANDALONE
5908/31/88 add pp.undefsym for pp.macref's on undefined symbols
6008/23/88 0xe+N -> `0xe' `+' `N'
6108/16/88 fix ppckeys.c: T_DOUBLE->T_DOUBLE_T, T_FLOAT->T_FLOAT_T
6207/17/88 add \newline to string_special
63	 add line number arg to pp.comment call
64	 move private stuff from pp.h to pplib.h
65	 add ignored -v to ppargs() (GNU uses this)
6606/22/88 move pp.macref check; stack pp.state in ppcontrol()
67	 add PP_INCREF and (*pp.incref)(old-file, new-file, push|return)
6806/11/88 add pp.macref
69	 add ppckeys.h and C, C++ and pcc-based C keyword tables
7006/01/88 convert to new hash library interface
7105/31/88 pp:readonly in PP_INIT only for STRICT
7205/11/88 T_MOREARGS -> T_VARIADIC; add SYM_VARIADIC for ... last macro arg
7305/03/88 fix empty include file bug by omitting empty check
7404/27/88 ignore space in pragma % maps to accomodate SCCS %.% expansion
7504/19/88 change pp.h to check for old nmake cpp clash with ppsymbol
7604/11/88 fix flag check bug in ppload()
7702/29/88 add MAP_ECHO and %E for MAP_RESCAN + echo
78	 PP_INITDIR inserted before PP_STANDARD during initialization
7902/18/88 ignore malformed #'s in COMPATIBILITY macro definitions
80	 add pp.prefix, PP_PREFIX and -I-P for prefix dir "..." includes
8102/10/88 add NOQUOTE to disable ' and " and decouple from VARQUOTE
82	 add keyword and quote pragmas
8302/02/88 add strcmp builtin predicate for token string value comparison
8401/24/88 fix <backslash><newline> handling in #define on bsd
8501/20/88 add %T and fix %[...] pragma mapping formats
8601/11/88 complete 12/11/87 COMPATIBILITY macro arg /**/ pasting bug fix
87	 complete KEYWORD support
8801/08/88 add PP_KEYWORD, (pp.state & KEYWORD), -D-K and #if KEYARGS
8901/06/88 hex char constants are now variable length
9001/04/88 do not add terminator for COMPATIBILITY " and ' constants
9112/11/87 remove #multiple in lieu of #pragma multiple
92	 add %R MAP_RESCAN option to rescan pragma/directive mapping
93	 fix COMPATIBILITY macro arg /**/ pasting bug
9412/08/87 recode for updated hash library interface
95	 add T_PTRMEMREF ->* and T_DOTREF .* C++ operator tokens
9612/01/87 reorganize pp token numbers to span 0401..0477
9711/22/87 add operand error checks to ppexpr()
98	 add PP_DEFAULT and -I-Dfile for fine PPDEFAULT control
9911/11/87 pppragma() now omits space after # for primitive passes (uts)
10010/30/87 fix line count on `newline' in ['"] constant warning
10110/29/87 add MAP_PLUSCOMMENT and %P to pragma|directive mapping
10210/28/87 add head & tail args to ppcomment; pass // comments as is
10310/23/87 add warning for multiple ppop(PP_LOCAL) calls
10410/16/87 change PP_HOSTED to PP_HOSTDIR, add PP_HOSTED and PP_NONHOSTED
105	 add #(BASE) that expands to base name of #(FILE)
10610/15/87 for PASSTHROUGH each line of multi-line "..." or '...' is a token
10710/14/87 add ppmultiple() for multiple include test ops
10810/11/87 delete CONVERTASSIGN -> `=<op>' no longer recognized
109	 delete C++ := -> = conversion
110	 fix COMPATIBILITY macro recursion bug
111	 add `#pragma multiple' equivalent to `#multiple'
11210/06/87 split pplex.c adding ppdirective.c and ppbuiltin.c
113	 don't recognize obsolete assignments for PLUSPLUS
11410/05/87 fix PLUSPLUS PASSCOMMENTS bug `// */' -> `/* ***/'
11510/01/87 allow newlines in ' and " constants for PASSTHROUGH
11609/28/87 fix CONVERTCC STRICT bug that omitted octal character constants
117	 add CATLITERAL compile switch for adjacent string literal concatenation
118	 fix "\07" "3" -> "\073" string literal concatenation bug -> "\0073"
11909/18/87 complete ppdump() and ppload() checkpoint support
12009/17/87 fix macro formal bug that didn't update pointers after realloc()
121	 add PP_DONE complement op to PP_INIT
122	 add SYM_BUILTIN and #pragma pp:builtin to note builtin macros
123	 add PP_DUMP, -D-D and #pragma pp:load checkpoint support
12408/20/87 fix bug that omitted some actualsync() calls for '\n' in pp.in->actual
12508/19/87 fix pp.linesync==0 && PASSTHROUGH bug that omitted '\n' after "token"
12608/11/87 fix #($var) null pointer bug
12707/31/87 fix linesync bug for comment after #include in PASSCOMMENTS
12807/24/87 add PP_NOPASSTHROUGH
12907/16/87 fix predicate missing # ambiguity warning
13007/09/87 fix `macro("@*")' bug in expand_special()
13106/17/87 fix comment error message check that was off by one line
13206/16/87 remove #pragma pp:multiple; add #multiple; retain PP_MULTIPLE
13306/08/87 add # operator to disambiguate predicate tests
134	 inhibit more warnings on hosted files
135	 make diagnostics more consistent -- a little more work
136	 PP_READ files and their included files always marked hosted
13706/05/87 fix macro actual arg collection with imbedded #include, #line
13805/28/87 add `#pragma pp:multiple *' to mark all files multiple
139	 add -D-M for command line equivalent to `#pragma pp:multiple *'
14005/01/87 clarify HOSTED and SYM_PREDEFINED
14104/24/87 split pplex.c into smaller files -- too big for some compilers
142	 move common wrapper routines into the library
143	 fix ppargs() to cooperate with other option parsers
14404/22/87 remove getenv("PPSTANDARD") override of PP_STANDARD
14504/21/87 replace yacc parser with recursive expr() from library streval()
14604/20/87 add #((<expr>)) expression evaluation on (x)
147	 add #(<sym>=<expr>) to dynamically evaluate macro values
14804/11/87 home brew output buffering for PP_STANDALONE -- up to 10%
149	 cleanup
15004/10/87 change T_STRING concatenation in preparation for new output buffering
15104/09/87 fix character constant conversion warnings
15204/07/87 fix \\n and ??/\n bugs in comment scan
15304/06/87 add DIGIT, HEX, OCTAL and NONOCTAL case classes to ppdefs.h
154	 use GETCHR() and ISSPECIAL() in outer pplex() loop -- up to 10%
155	 fix macro actual arg count test
15604/03/87 add PP_TEST and TEST1, TEST2 to mode for internal tests
15704/02/87 delete PPDEFAULT and generalize with PP_READ
158	 note `# <line> "<file>"' as non-standard
159	 add check for malloc() out of space
16004/01/87 C specific error messages only if language="C"
161	 C++ specific error messages only if language="C++"
16203/31/87 delete command() predicate -- gateway for trojan horse
16303/30/87 add dialect() and language() builtin predicates
164	 change in->standard to in->hosted and STANDARD to HOSTED
166	 ignore #pragma for non-hosted files in STRICT dialect
16703/27/87 add predop(); delete pp:plusplus
168	 pp:dialect and pp:language for verification only
16903/24/87 ----- first release -----
17003/24/87 ----- first release -----
17103/23/87 allow WARN to apply to all dialects
172	 fix pp:directive `...multiple...' warning
173	 add MAP_NEWLINE to separate multiple pragmas
17403/22/87 warn about null macro args for STRICT
175	 add PP_LANGUAGE, `#pragma language [language]'
176	 warn about newline in macro call arguments in directives
177	 warn about directives in macro call arguments for STRICT
178	 validate character constants in #if expressions
17903/20/87 add PP_DIRECTIVE and PP_LOCAL
180	 add %I (ignore) map format and allow %X for pragma args
18103/19/87 change PP_DEFAULT to PP_STANDARD, add PP_DIALECT
182	 add dialect arg to PP_COMPATIBILITY, PP_DIALECT and PP_STRICT
183	 add `#pragma pp:pragma pass:option format' mapping
18403/18/87 delete pp:obsolete; fix `#pragma version'
185	 fixed macro stack frame bug during recursive macro arg expansion
187	 add `#pragma dialect [dialect]' verification
18803/17/87 add PP_NOSTANDARD to disable any special handling of std files
189	 refine mkdefault.sh for sun workstations
190	 remove comma operator from pp.yacc since it implies side effects
191	 add argument type checking for pp:directive and pp:obsolete
19203/16/87 refine CONFORMING messages
193	 disambiguate most #assert/#define clashes
194	 add PASSCOMMENT and (*ppcomment)() for old lint fans
19503/14/87 #undef in pp:readonly marks id as readonly macro
19603/11/87 warn about macros that are predicates in #if expressions
197	 add mode to handle uncoupled flag bit overflow from state
19803/04/87 fix COMPATIBILITY to expand a macro in its definition
19902/24/87 add gentab.sh and mkdefault.sh to Makefile
20002/20/87 add IN_RECURSIVE for proper handling of #(...)
20102/16/87 add #unassert; PP_WARN & WARN to note obsolete usage
202	 only recognize directive if # is first char for (state&COMPATIBILITY)
203	 generalize gentab.sh and retrofit pp.tab
204	 change in->name.file to be the name of including file
20502/13/87 add pp.tab; PP_PRAGMA "x=y" -> "#pragma x y"
206	 add #(x y...) -> "#x y..." for recursive directive evaluation
20702/12/87 #pragma [pass:] [no]option [arg ...]
208	 #pragma pp:[no]directive [pass:]<new-directive>
209	 #pragma pp:id <identifier-character>
21002/11/87 distribute post-token switch in pplex() to individual cases (~5%)
21102/09/87 clarify invalid numeric token gobble
212	 add VARQUOTE & PP_VARQUOTE for `X...X vs. '...' & "..." constants
21302/06/87 change STRICT to CONFORMING; add PP_CONFORMING
21402/06/87 change PPBUILTIN to #(<id>)
21502/05/87 clarify /*...*/ concatenation for (state&COMPATIBILITY)
216	 add convertcc() to convert new char const to old style
217	 rework # op to work with convertcc()
21802/04/87 add =<op> obsolete operators for (state&COMPATIBILITY)
21902/02/87 fix expand() to save and restore (state&DISABLE)
22012/17/86 first code