

Summary of changes to "p2c"
------- -- ------- --  ---


Version 1.21 (alpha version of Tue Dec  7 20:57:35 PST 1993):

 * Added version number of p2c to banner at top of output file.

 * Added perl script "p2cc" for using p2c + cc as a Pascal compiler.

 * Added support for most object-oriented features of Borland/Turbo Pascal 6.0.

 * Added support for most object-oriented features of MPW Object Pascal.

 * Added more C++ support:  Comments, references, inits, reserved words.

 * Added some data flow analysis to remove cruft, e.g., from local file vars.

 * Added partial support for TI Pascal (Language=TIP).

 * Added partial support for Apollo Domain Pascal (Language=Apollo).

 * Added ReplaceBefore and ReplaceAfter features.

 * Added treatment of form-feeds similar to blank lines.

 * Added a declaration for the "alfa" type to p2c.h.

 * Can now compile -DNO_DECLARE_MALLOC if you get "p2c.h redeclaring malloc".

 * Improved handling of StoreFileNames mode.

 * Improved handling of PreserveTypes mode.

 * Added IncludeOutFileName option, for names generated when ExpandIncludes=0.

 * Changed file-related runtime errors to report file name when possible.

 * Changed to absorb or edit some comments like "end; {of foo}".

 * Improved handling of comments around if-else statements.

 * Changed to accept an optional colon after OTHERWISE keyword.

 * Added recognition of {$F=xxx} (Motorola Pascal include directive).

 * Added ability to use %f instead of %g in scanf to dodge library bugs.

 * Added TagStructs and TagComment to deal with nested records & WITH stmts.

 * Added MainType option.

 * Added P_rmax, etc., to p2clib.c.

 * Modified error messages to be parseable by Emacs' M-x compile mode.

 * Modified src/Makefile slightly to avoid a bug in DEC 3100/Ultrix 4.2.

 * Changed order of stddef.h/stdlib.h in trans.h and p2c.h for gcc on Suns.

 * Added "libp2c.a" to "make clean" list.

 * Bug fix in pexpr.c:istypespec: Added "iscast" test.
   Symptom: C expr "(funnyname)(x)" was parsed as call, more useful as cast.

 * Bug fix in decl.c:setupmeaning: Added mp->kind = ... = MK_VARREF.
   Symptom: VarMacros were broken.

 * Bug fix in funcs.c:seekeof: Changed to use skipnlspacename.
   Symptom: Seekeof should skip newline characters as well; it didn't.

 * Bug fix in funcs.c:makeenumnames: Added "tp = ord_type(tp)".
   Symptom: Was confused by subrange-of-enum types.

 * Bug fix in expr.c:realint: Forgot to recognize "e" portion in number.
   Symptom: "x * 1e20" was simplified to "x" since "1e20" looked like "1". (!)

 * Bug fix in expr.c:makeexpr_rel: Don't change r > i-1 to r >= i for real r.
   Symptom: This transformation was done for this but not for i > r-1.

 * Bug fix in expr.c:cleansprintf: Recognize '%%' control sequences.
   Symptom: Crash on the statement "writeln('%*')".

 * Bug fix in comment.c:grabcomment: Ignore ";" after comment.
   Symptom: Comment in "begin ... end {foo};" was misplaced.

 * Bug fix in comment.c:commentline: Suppress */ -> %/ in EMBED comments.
   Symptom: This was inappropriate in this case.  (Partial fix only.)

 * Bug fix in parse.c:out_block: Added singleindent(open/closebraceindent).
   Symptom: Braces on "switch" statements were not indented properly.

 * Bug fix in parse.c:p_stmt: Fixed bugs parsing Modula 2 CASE and WITH.
   Symptom: These were broken in Modula 2 mode.

 * Bug fix in parse.c:p_stmt: Moved newstmt() call in TOK_WITH section.
   Symptom: Comments were not placed properly around "WITH = ..." line.

 * Bug fix in parse.c:p_fieldlist: Handled extra ";"'s in Modula 2 variants.
   Symptom: Semicolons before "|" caused problems.

 * Bug fix in parse.c:forward_decl/out_function: Added check for use_static.
   Symptom: "StaticFunctions 0" did not prevent use of "Static" keyword.

 * Bug fix in funcs.c:func_chr: Changed p_expr to p_parexpr.
   Symptom: Was parsing "CHR(A)=B" as "CHR(A=B)"!

 * Bug fix in funcs.c:proc_readdir: Changed skipopenparen() to skipcomma().
   Symptom: Calls to HP Pascal builtin READDIR didn't translate properly.

 * Bug fix in funcs.c:func_filesize: Changed 1L to 0L.
   Symptom: filesize(f) returned result that was off by one.

 * Bug fix in expr.c:type_sizeof: Added support for Turbo byte types.
   Symptom: Blockread on an "array of byte" adjusted size inappropriately.

 * Bug fix in pexpr.c:p_index: Added var_reference calls for lower limit.
   Symptom: Subprocedure reference to parent's conformant array limit failed.

 * Bug fix in parse.c:out_block: Added (*NAME_main) test.
   Symptom: Setting NameMain to null, as described in p2c.man, didn't work!

 * Bug fix in expr.c:makeexpr_sprintfify: Don't treat string[1] as char.
   Symptom: a:=b+c with var b,c:string[1] generated %c instead of %s.

 * Bug fix in decl.c:outdeclarator: Obey preserved bit for pointer->basetype.
   Symptom: Typedefs for strings used with "*" in function args, return types.

 * Bug fix in p2c.h:my_memmove: Added #ifdef bcopy/memcpy clause.
   Symptom: Infinite recursion if system headers #defined bcopy as memmove.

 * Bug fix in p2c.h: Added #define HAS_STDLIB after second #include <stdlib.h>.
   Symptom: Problems including p2c.h under HP-UX.

 * Bug fix in sys.p2crc: Added comments for SeekBase, MessageStderr.
   Symptom: These options existed, but were undocumented!

 * Miscellaneous other bug fixes and enhancements.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    AnalyzeFlow         Do use/def and data flow analysis, on by default.
    AnonymousUnions     Use C++ anonymous unions for variant records.
    CallCasts           Use C++ "int(x)" casts instead of C "(int)x".
    CommonExtern        TIP "common" variables should be declared "extern".
    DeclSpacing         Spacing between declarations and function body.
    EscIO2Name          Name of EscIO-like function that takes a filename arg.
    FloatScanfCode      Scanf code for reading floats, %g by default.
    IncludeOutFileName  Format for include names when ExpandIncludes = 0.
    LowPrecLogicals     AND/OR/NOT have lower precedence than arith ops.
    MainType            Result type to use for "main" function.
    MessageStderr       MESSAGE proc writes to stderr (already in trans.h).
    NewDelete           Use C++ "new/delete" instead of "malloc/free".
    OFSName             Name of translation for Turbo Pascal OFS.
    ReplaceAfter        Do sed-like textual replacements on output text.
    ReplaceBefore       Do sed-like textual replacements on input text.
    SeekBase            Origin for file-seeking (already in trans.h).
    SEGName             Name of translation for Turbo Pascal SEG.
    ShellVars           Shell variable settings for MPW Pascal programs.
    SkipNLSpaceName     Name of skipspaces function which also skips \n's.
    SlashSlash          Use C++-style "//" notation for comments.
    SpaceStars          Write "int* x" instead of "int *x".
    TagComment          {TAGGED} enables TagStructs for a particular record.
    TagStructs          Generate tag names for all unnamed structs.
    TurboObjects        Select between Turbo and Mac-style Object Pascal.
    UseInits            Convert assignments to initializers when possible.
    UseRefs             Use C++ references "int &x" when appropriate.

Version 1.20:

 * Changed VAX "type t = [byte] 0..255" not to say it can't interpret size.

 * Changed to use a temp var when passing a constant to a VAR parameter.

 * Changed to avoid initializing char arrays with string literals in pre-ANSI.

 * Changed to make arithmetic involving character literals more readable.

 * Changed to accept empty parentheses in function declarations (for Modula 2).

 * Made more changes for VAX and MSDOS compatibility (thanks to William Bader).

 * Added support for PACK and UNPACK procedures (finally!).

 * EMBED lines beginning with `#' are no longer indented.

 * EatComments no longer eats EMBED comments.

 * Reworded "File paramter needs associated buffers" to suggest StructFiles.

 * Added ability to eliminate "if false" and "if true" if ElimDeadCode = 2.

 * Bug fix in funcs.c:handleread/write_text: Treated case where fex is a PAC.
   Symptom: VAX Pascal readv/writev failed when "string" was an array of chars.

 * Bug fix in expr.c:makeexpr_charcast: Watch for mp->val.type == NULL case.
   Symptom: Reference to NULL error when referring to some CONST names.
   (Also fixed this bug in various other places.)

 * Bug fix in expr.c:eval_expr_either: Check for TK_INTEGER, not tp_integer.
   Symptom: Constant exprs involving +, *, etc. could not always be evaluated.

 * Bug fix in pexpr.c:p_factor:MK_SPECIAL case: Added "target &&" check.
   Symptom: Reference to NULL in VAX Pascal "open(..., ..., new)".

 * Bug fix in p2clib.c:my_memcpy etc.: Use n-- > 0 instead of --n >= 0.
   Symptom: Didn't work when size_t is an unsigned integer type.

 * Bug fix in p2clib.c:ipow: Changed 1<< to 1L<< (also in set functions).
   Symptom: Didn't work on 16-bit target machines.

 * Bug fix in funcs.c:handleread_text: Write %g for float, %lg for double.
   Symptom: Bad code for reading a "single" or "shortreal" variable.

 * Added to sys.p2crc/trans.h the following configuration parameter:

    InitPACStrings      String literal in initializer can be size of array.

Version 1.19:

 * P2c's copyright has been assigned to the Free Software Foundation.

 * Improved p2c to preserve Pascal type names in most cases.

 * Introduced "PreserveTypes" (PreserveTypes=0 makes p2c work like v1.18).

 * Also added "PreservePointers" (default off) and "PreserveStrings" (on).

 * Changed p2c.h to recognize funny ANSI-like header files in HP-UX 7.0.

 * Changed to handle taking the address of an argument of a promotable type.

 * Changed parser to accept "a * -b" without syntax errors.

 * Fixed a few unreachable statement warnings in the p2c sources.

 * Changed exit(0) to exit(EXIT_SUCCESS) in main program.

 * Added support for VAX C and MSDOS to p2c.h.

 * Bug fix in parse.c:fixblock: Call filebasetype in similartypes arg.
   Symptom: Pascal GET procedure sometimes crashed p2c when StructFiles=1.

 * Bug fix in pexpr.c:p_funcarglist: Handle stdin/stdout when StructFiles=1.
   Symptom: myproc(output) generated "type mismatch" warning and bad code.

 * Bug fix in expr.c:makeexpr_rel: Use ISCONST to guard checkconst call.
   Symptom: "J <= A-I-1+C" where "const C=1" put p2c into an infinite loop.

 * Bug fix in decl.c:setupmeaning: Consider enum consts to be global names.
   Symptom: Local enum consts can conflict with similar global names.

 * Bug fix in lex.c:push_input/pop_input: Save/restore curtokbuf/curtokcase.
   Symptom: Value lost when main calls defmacro after setup_lex, before parser.

 * Bug fix in parse.c:out_function: Don't recursively output "exported" funcs.
   Symptom: This occurs when an "external" decl occurs local to a function.

 * Bug fix in p2c.h:AGETFBUF: Removed extra "&".
   Symptom: Taking address of an array generated a warning on some compilers.

 * Bug fix in p2c.h:LONG_MAX, etc.: Fixed to cast back to signed types.
   Symptom: LONG_MAX had type unsigned long; "(double)(-LONG_MAX)" failed.

 * Bug fix in p2clib.c:P_trimname: Added trailing null to output string.
   Symptom: Function wouldn't always work after first call.

 * Added to sys.p2crc/trans.h the following configuration parameter:

    FixPromotedArgs    Fix "&" of arguments which may be promoted.
    PreserveTypes      Use typedef to preserve most Pascal type names.
    PreservePointers   Use typedef specifically for pointer types.
    PreserveStrings    Use typedef specifically for string types.
    SpaceCommas	       Use spaces after commas (default on).
    SpaceFuncs	       Use spaces after function names (default off).
    NoBanner	       Suppress "From input file..." comment at top of file.

Version 1.18:

 * Improved indentation strategy for EMBED comments.

 * Allowed one-line EMBED comments: {EMBED foo();}

 * Made {SKIP} ... {NOSKIP} comments nestable.  ({NOSKIP ... } isn't nestable.)

 * Changed to emit comments in export sections of modules in correct order.

 * Rewrote decl.c:p_arraydecl slightly to avoid a gcc bug.

 * Bug fix in expr.c:makeexpr_sizeof: Compute size by hand if SkipIndices used.
   Symptom: Size was "sizeof(arr)" even if it should have omitted skipped part.

 * Bug fix in trans.h: Added #undef _toupper/_tolower at end.
   Symptom: Failed to compile on Apollos.

 * Bug fix in parse.c:fixblock: Added "sp->stm1 &&" check for WHILE statements.
   Symptom: "while cond do ;" caused a reference-to-NULL error.

 * Bug fix in decl.c:makefakestruct: Suppressed fakestruct when importing.
   Symptom: Importing a module generates two declarations for _REC_A.

 * Bug fix in Makefile: Added rules to make home dirs if not found.

Version 1.17:

 * Introduced "StructFile" stuff to help with more intensive file operations.

 * Simplified "N + 0.0" to "(double)N" instead of "N" when appropriate.

 * Fixed typo in sys.p2crc: "LogBreakPenalty" => "RelBreakPenalty".

 * Changed to avoid generating bit fields as members of a union.

 * Now "stringarray[i] := expr" will sprintf expr into lhs with no temp var.

 * Handled assignment of small packed arrays of chars into big ones.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    CharConsts      Assume "const c='x'" is a char, not string constant.
    SelfIncludeName Format to use when a module includes its own .h file.
    StructFiles     Translate files as special structs rather than FILE *'s.
    StructFile      A file variable to be treated as if StructFiles=1.

Version 1.16:

 * Reduced wasteful proliferation of identical-looking temporary variables.

 * Improved heuristic for determining allocation size for set constructors.

 * Corrected handling for EOF applied to buffered binary files.

 * Bug fix in decl.c: Handled a rare case involving forward-declared pointers.

 * Bug fix in p2clib.c:P_remset: Forgot to fix s[0] if highest bit was cleared.

 * Bug fix in p2clib.c:P_setxor: Forgot to fix s[0] if highest bits cancelled.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    EofBufName      Macro to use for EOF of a bufffered file.
    FilePosBufName  Macro to use for FILEPOS or POSITION of a buffered file.

Version 1.15:

 * Taught the line breaker to handle logical/relational operators specially.

 * Improved code generation for large set constructors.

 * Changed makeexpr_assign to handle EK_LITCAST's on the lefthand side.

 * Changed makeexpr_addr to handle casts.

 * Changed FieldMacros so that the substituted base expr retains its type.

 * Bug fix in p2c.h: Rewrote P_getbits_US and other small-packed-array macros.
   Symptom: On many architectures, these macros didn't work at all!
   NOTE: These now pack small arrays in the opposite direction (LSB first).

 * Bug fix in funcs.c:handleread_text: changed strread of string to use %255s.
   Symptom: Previous translation of %255c did not append a null character.

 * Bug fix in p2clib.c:strrtrim: Added test for empty string input.
   Symptom: Incorrect behavior on strrtrim("").

 * Bug fix in p2clib.c:P_addsetr: Changed to signed comparison of v1 and v2.
   Symptom: Adding [0..-1] to a set failed.

 * Bug fix in p2clib.c:P_expset: Don't write to d[1] if set is empty.
   Symptom: Sets allocated to store 0 elements didn't work properly.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    LogBreakPenalty         Like OpBreakPenalty, but for && and ||.
    LogBreakExtraPenalty    Like OpBreakExtraPenalty, but for && and ||.
    RelBreakPenalty         Like OpBreakPenalty, but for <, ==, etc.
    RelBreakExtraPenalty    Like OpBreakExtraPenalty, but for <, ==, etc.

Version 1.14:

 * Added partial support for Oregon Software Pascal's delete(f) procedure.

 * Changed file_iofunc to be a little more robust in case of errors.

 * Bug fix in p2clib.c:strrtrim: Changed to "while (*++s2) ;"
   Symptom: This function didn't do anything!

 * Bug fix in decl.c:p_type: Declared enums which were base types of sets.
   Symptom: In "type s = set of (a,b)", the enum was never declared.

 * Bug fix in decl.c:issafename: Avoided #defining existing field names.
   Symptom: "type r=record a:integer; end; const a=10;" produced bad code.

 * Bug fix in expr.c:makeexpr_charcast: Changed to recognize CONST names.
   Symptom: "const x='x'; var s : set of char; s := [x];" generated bad code.

Version 1.13:

 * Changed to interpret cpp-style "#include" as another include-file syntax.

 * Improved handling of WRITE field widths for packed arrays of char.

 * Improved handling of built-in identifiers in PascalCaseSens mode.

 * Bug fix in parse.c:p_function: used strcicmp to check for "FORWARD" keyword.
   Symptom: In PascalCaseSens mode, forward declarations had to be capitalized.

Version 1.12:

 * Added support for Sun/Berkeley Pascal.

 * Beefed up PascalCaseSens handling.

 * Added some extra parentheses to the P_clrbits macros. (!)

 * Added to sys.p2crc/trans.h the following configuration parameters:

    CharFileText    Treat "file of char" as identical to "text".
    UseStrncmp	    Use strncmp, not memcmp, to compare packed arrays of char.
    MessageStderr   Built-in "message(...)" should use stderr, not stdout.
    LiteralFiles    Files opened without names should use file var's name.
    LiteralFile	    Specific files which should use LiteralFiles=1 mode.

Version 1.11:

 * Improved the "usage" message slightly.

 * Introduced "CollectNest=0" to help with include files of sub-procedures.

 * Changed to ignore "OVERLAY" keyword (a Turbo Pascal anachronism).

 * Introduced "BROKEN_OR" option in trans.h in case of compiler bugs.

 * Changed src/Makefile to check for presence of nroff before changing p2c.cat.

 * Taught strmax_func to understand string consts as well as string literals.

 * Changed system.imp to use __module to avoid ModuleNotation dependencies.

 * Prevented variables in varstructs from being declared "const".

 * Changed "checkvarchanged" in decl.c to observe constqual, volatilequal.

 * Introduced "expr_has_address" (in expr.c) as a variant on "expr_is_lvalue".

 * Bug fix in pexpr.c:p_funcarglist: for strings as conformant arrays, low=1.
   Symptom: Strings were passed as array [0..N] instead of [1..N].

 * Bug fix in decl.c:setupmeaning: added missing "break;" for MK_VARIANT case.
   Symptom: Special formatting for enumerated type names was broken.

 * Bug fix in p2c.h:P_getcmdline: removed "Const" keywords.
   Symptom: Prototype was inconsistent with definition in p2clib.c.

 * Bug fix in decl.c:addfield: changed to "tname && tname->name ? ...".
   Symptom: Reference to NULL formatting field names for unnamed records.

 * Bug fix in expr.c:fixblock: fixed getfbuf + get => fread to check var type.
   Symptom: "f:file of byte; i:integer; i:=f^; get(f);" used fread incorrectly.

 * Bug fix in lex.c:turbo_directive: checked return value of handle_include.
   Symptom: Turbo-style include directives messed up if file was not found.

 * Added to sys.p2crc/trans.h the following configuration parameter:

    CollectNest     Kludge to make sub-procs be emitted as they are parsed.

Version 1.10:

 * Bug fix in comment.c:addnote: reference to "quiet" changed to "quietmode".
   Symptom: Failed to compile!  (Sorry, about that!)

Version 1.09:

 * Made a few improvements to "-R" (regression-testing) mode.

 * Bug fix in decl.c:addfield: rewrote part of the issafename loop.
   Symptom: Various problems choosing names for fields of structs.

 * Bug fix in out.c:getcurtime: modified non-HASTIME case to use starttime.
   Symptom: Not safe to multiply raw time() result by 1000.

Version 1.08:

 * Changed "makeproto" commands in src/Makefile to "./makeproto".

 * Extended "ConstFormat" mechanism for all other kinds of identifiers.

 * Added a special format for Pascal include-file names.

 * Added "UseConsts=2" to force the use of "Const" instead of "const".

 * Added FileNameFilter option.

 * Added "-E" switch to halt after some number of errors.

 * Added DeclBufNCName for compilers which can't handle null macro arguments.

 * Handled the case of multiple parameters using a common conformant schema.

 * Incorporated several Oregon Pascal standard procedures from William Bader.

 * Fixed typo in documentation of "BraceLine" in sys.p2crc.

 * Bug fix: in funcs.c:handleread_text: add copyexpr to P_read[ln]paoc calls.
   Symptom: Dangling pointer problems generating calls to P_read[ln]paoc.

 * Bug fix: in pexpr.c:dots_n_hats:TOK_LBR case: changed to use p_ord_expr().
   Symptom: Arrays indexed by literal characters used "A", not 'A'.

 * Bug fix: in pexpr.c:p_setfactor: added two makeexpr_longcast calls.
   Symptom: Generated code used "1 << x" instead of "1L << x" in a few places.

 * Bug fix: in decl.c:setup_decl: defined SWORD equivalent to tp_sshort.
   Symptom: Signed words were translated as longs under some circumstances.

 * Bug fix: in parse.c:fixblock: "if" rearrangements now clear if-else flags.
   Symptom: Else-ifs were formed in inappropriate places.

 * Bug fix: in parse.c:fixblock: "continue" added after final eatstmt call.
   Symptom: Reference to an already-freed pointer.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    ModuleFormat    Analogous to ConstFormat but for module names.
    FunctionFormat  Analogous to ConstFormat but for function names.
    VarFormat       Analogous to ConstFormat but for variable names.
    FieldFormat     Analogous to ConstFormat but for record field names.
    TypeFormat      Analogous to ConstFormat but for type names.
    EnumFormat      Analogous to ConstFormat, for enumeration constant names.
    IncludeFileName Format for include file names.
    FileNameFilter  Function to call to "clean" file names for use by fopen.
    MaxErrors	    Number of errors/warnings/notes printed before aborting.
    DeclBufNCName   Version of DeclBufName with no "storage class" arg.

Version 1.07:

 * Added "Integer16=2" mode to translate Pascal "integer" as C "int".

 * Added a warning when "%" is used for MOD of arguments that may be negative.

 * Made formatted output of booleans and reals closer to Pascal standards.

 * Now print warning when trying to use associated buffers of file params.

 * Added support for buffered "file of array" types.

 * Prevented warning message when main program ends with ";" instead of ".".

 * Changed to ignore RESET and REWRITE on standard file OUTPUT.

 * Bug fix: in decl.c:p_constdecl: Added mp->isactive=0 / ... / mp->isactive=1.
   Symptom: "const ten=10; procedure p; const ten=ten;" failed.

 * Bug fix: in pexpr.c:p_factor:MK_SPECIAL case: Checked mp->isfunction.
   Symptom: Passing a built-in like PAGE as a procedure parameter failed.

 * Bug fix: in pexpr.c:p_setfactor: Moved "val.i|=1<<first[i]->val.i" to ELSE.
   Symptom: The set constant [3..0] generated 0x8, not 0.

 * Bug fix: in p2clib.c:P_addsetr: Added "v1 > v2" test.
   Symptom: The set constructor [i..j] did not generate [] when i > j.

 * Bug fix: in p2clib.c:P_peek: Return ' ' if character was \n.
   Symptom: Line breaks were sometimes not converted to space on input.

 * Bug fix: in p2c.h: Added "#define CPUTFBUF(f,v) (PUTFBUF(f,char,v))".
   Symptom: Calls to this undefined routine were produced.

 * Bug fix: in parse.c:p_stmt:TOK_FOR clause: Added checks for limit=MAXINT.
   Symptom: "for i := j to maxint" generated an infinite loop.

 * Bug fix: in decl.c:outfieldlist: Added checking for empty unions.
   Symptom: "record case integer of 1: () end" produced an empty C union.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    ArrayGetName      Analogous to GetName for "file of array" types.
    ArrayGetFBufName  Analogous to GetFBufName for "file of array" types.
    ArrayPutName      Analogous to PutName for "file of array" types.
    ArrayPutFBufName  Analogous to PutFBufName for "file of array" types.

Version 1.06:

 * Changed Makefile to look for ranlib in /bin, too.

 * Added ability to call dispose on a non-lvalue: clearing to NIL is omitted.

 * Added ForEvalOrder option: "in for x := y to z, y is evaluated before z".

 * Added more entries in the AvoidName and AvoidGlobalName lists.

 * Added checks for "__unix" cpp symbol synonymous with "unix".

 * Improved heuristic in arraysize() which returns NULL for "huge" arrays.

 * Added support for "rewrite(f)" creating an unnamed temporary file.

 * Added definition of "tmpfile" in p2c.h for systems that don't have it.

 * Bug fix in parse.c:usebraces: Added "sp != NULL &&" before findcomment.
   Symptom: Segmentation fault.

 * Bug fix in pexpr.c:dots_n_hats: Added "tp->basetype->fbase &&".
   Symptom: Segmentation fault.

 * Bug fix in parse.c:p_stmt:TOK_CASE clause: Changed to use p_ord_expr().
   Symptom: case 'A' of ... translated to switch("A"), not switch('A').

 * Bug fix in parse.c:p_stmt:TOK_FOR clause: Added tp_boolean to "small" types
   Symptom: for b := true downto false had unsigned-wraparound problems.

 * Bug fix in decl.c:outbasetype:TK_ENUM clause: Added test for mp == NULL.
   Symptom: Segmentation fault if null enum list.

 * Bug fix in expr.c:makeexpr_plus: a->nargs < 1: used gentle_cast on zero.
   Symptom: f(a-a) => "f()"; argument was converted to real const w/null value.

 * Bug fix in expr.c:makeexpr_plus: checked a->args[j] for TK_REAL/STRING, too.
   Symptom: 1+2.0 was incorrectly constant-folded, though 1.0+2 was correct.

 * Bug fix in p2c.h: removed trailing semicolon from FILEBUF definition.

 * Bug fix in decl.c:p_type: added a call to makefakestruct for TOK_FILEs.
   Symptom: "var f:file of record ... end" (for buffered f) produced bad code.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    ForEvalOrder    Initial value in for loop must be evaluated before limit.
    FreeRvalueName  Name of a function or macro to free a pointer in an rvalue.

Version 1.05:

 * Added support for reading packed arrays of characters.

 * Made some changes for compatibility with Xenix.

 * Put in slightly better handling of the "#define BSD" stuff.

 * Changed trans.c to avoid declaring sbrk() itself.

 * Changed p2c.h to define _toupper(), _tolower() in a non-ASCII-dependent way.

Version 1.04:

 * Added "-V" switch to generate a log file with some details of translation.

 * Added "-M" switch to control memory usage during translation.

 * Added "TEST_MALLOC" stuff to measure memory allocated but never freed.

 * Added {SIGNED} and {UNSIGNED} comments preceding type "char" and "integer".

 * Added HighCharBits-related optimizations for characters 128 and above.

 * Eliminated unnecessary casting of CHR's argument by making it MK_SPECIAL.

 * Recognized "ch+'A'-'a'" idiom and translated as "_toupper(ch)".

 * Added P2CRC environment variable.

 * Bug fix in parse.c:p_search: emptied curcomments at top of do loop.
   Symptom: leading comment in module header was copied over by import.

 * Bug fix in funcs.c:func_addr and elsewhere: fixed handling of procedure ptrs
   Symptom: "var pr:procedure; p := addr(pr);" wrote "_PROCEDURE pr; p = pr".

 * Bug fix in expr.c:makeexpr_assign: no longer copy _PROCEDUREs with memcpy.
   Symptom: memcpy was used to copy _PROCEDUREs even though assignable.

 * Bug fix in pexpr.c:p_factor: always allow makeexpr_hat after p_funccall
   Symptom: FuncMacros for string functions produced expression of wrong type

 * Bug fix in decl.c:p_conststring: added gettok() just before p_expr.
   Symptom: String constants with constructor notation didn't work.

 * Bug fix in decl.c:isfilevar and elsewhere: don't assume EK_DOT's val.i != 0.
   Symptom: Reference to NULL arises from "literal" dot expressions.

 * Bug fix in expr.c:value_name: check for value in range for "'%ld'" format.
   Symptom: Char literals containing negative or nonprinting chars were made.

 * Bug fix in expr.c:type_sizeof: prevent multiple recursion for TK_ENUM types.
   Symptom: Infinite recursion occurred when convert_size used on enum types.

 * Bug fix in expr.c:makeexpr_assign: avoid using memcpy for _PROCEDURE types.
   Symptom: Procedure vars with static links used memcpy even if CopyStructs>0.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    HighCharBits    Do high-char optimizations (safest if chars are 8 bits).
    PascalEnumSize  Size in bits of an enumerated type in Pascal.

Version 1.03:

 * Modified headers to compile under pure System V.

 * Added '::' operator in C expressions (e.g., FuncMacro definitions).

 * Added '##' comment delimiter to embedded configuration parameter comments.

 * In Turbo, RESET/REWRITE now open in read/write mode for binary files.

 * Added note/warning IDs and a mechanism for suppressing undesired notes.

 * Extended FuncMacros to apply to predefined and undeclared functions.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    ReadWriteOpen   Binary files always opened in read/write mode.
    EatNotes	    List of notes/warnings to be suppressed.

Version 1.02:

 * Added support for HP Pascal with HP-UX 6.2 and 6.5:
     BADDRESS, WADDRESS, ADDTOPOINTER, BITSIZE, FCALL.

 * Now initializes file variables embedded in records or allocated by NEW.

 * Better error messages in skipcomma, skipcloseparen.

 * Extended convert_offset in funcs.c to handle more cases.

 * Extended distribute_plus in expr.c to handle negated arguments.

 * Line breaker's behavior in difficult/large cases is improved.

 * Bug fix in decl.c:setup_decl: changed '... modula2 ? "WORD" : "UWORD"'
   to '... modula2 ? "UWORD" : "WORD"'
   Symptom:  Turbo did not recognize "WORD" built-in type any more.

 * Bug fix in funcs.c:func_random: removed incorrect "->args[0]" after "ex".
   Symptom:  Bus error parsing "random(4)".

 * Bug fix in funcs.c: decl_builtins: "randomize" function declared.
   Symptom:  Turbo Pascal "randomize" not recognized.

 * Bug fix in funcs.c: blockread & blockwrite: size and nitems args swapped.
   Symptom:  Return value for blockread & blockwrite was wrong.

 * Bug fix in p2clib.c:P_inset: condition changed to "val < *s++ ..."
   Symptom:  Certain elements appeared to be in the set even though too large.

 * Bug fix in funcs.c:handleopen: called makeexpr_stringify for file name.
   Symptom:  Reset lost file name in dialects with only packed arrays of char.

 * Bug fix in decl.c:declaretype: added declaresubtypes function.
   Symptom:  _REC_xxx records sometimes emitted before the things they used.

 * Bug fix in expr.c:makeexpr_lstring, etc: added null terminator for strings.
   Symptom:  Occasional spurious treatment of string constants.

 * Bug fix in parse.c:replaceexprexpr: now even less strict about types.
   Symptom:  If had to replace char variable ch, missed ord(ch) usage.

 * Bug fix in out.c:adddeltas/applydelta: changed "> 1000" to ">= 1000".
   Symptom:  Absolute indention of 0 did not work properly.

Version 1.01:

 * VAX Pascal support added.

 * UCSD Pascal support added.

 * MPW Pascal support added.

 * Partial Modula-2 support added.

 * Added -L command-line flag.

 * Support for non-local GOTO's added.

 * Improved code generation for certain set operations.

 * Special comment forms now recognized for (* *) as well as { }.

 * Added the "Synonym" feature.

 * Removed unnecessary type casts for ANYVAR parameters and FuncMacros.

 * Added comments in trans.h describing major p2c data structures.

 * Bug fix in parse.c:checkcommas: "if (sp->exp1)" added in SK_FOR case.
   Symptom:  Bus error when initializer portion of FOR was null.

 * Bug fix in trans.c:main: setup_comment now called before setup_lex.
   Symptom:  Initial comment in program disappeared.

 * Bug fix in pexpr.c:p_funccall: added func_reference function.
   Symptom:  Static links were occasionally left out when they were needed.

 * Bug fix in funcs.c:decl_builtins: "pi" function declared.
   Symptom:  Turbo Pascal "pi" not recognized since func_pi never called.

 * Bug fix in decl.c:outdeclarator and elsewhere: improved pointers to arrays.
   Symptom:  An array-of-strings parameter was declared as "char **".

 * Bug fix in system.imp: Turbo Pascal's "getmem" was incorrectly declared.

 * Added to sys.p2crc/trans.h the following configuration parameters:

    Modula2	    Use Modula-2 instead of Pascal syntax.
    ImplModules	    Modules use VAX notation rather than HP/UCSD notation.
    IgnoreNonAlpha  Ignore non-alphanumeric characters in Pascal identifiers.
    StarArrays	    Control notation for array-valued parameters.
    InitialCalls    List of functions to call at start of main program.
    SymbolFormat    Format string for C identifiers derived from Pascal ones.
    ArrayMinName    Name for lower-bound variables (Modula-2/VAX Pascal).
    ArrayMaxName    Name for upper-bound variables (Modula-2/VAX Pascal).
    LabelVarName    Name for jmp_buf variable associated with a stmt label.
    Synonym	    Declare a synonym for a Pascal keyword or identifier.
    AvoidName	    Added "Inline" to the list.
    StructFunction  Added "P_remset" to the list.
    StrlapFunction  Added "P_setxor" and "strpad" to the list.
    RemName	    Name of function or macro for VAX Pascal REM operator.
    StrPadName	    Name of function for VAX Pascal "pad" function.
    SetXorName	    Name of function for symmetrical set difference.
    SetRemName	    Name of function to remove an element from a set.

Version 1.00:

(Initial public release)
