******************************************************

	Dynamic C for Rabbit Release Notes

******************************************************

VERSION 7.21P

Root code and data usage by libraries and BIOS reduced.

BUG FIXES

Compiler Bugs
- Defect #634 fixed. An improper check was occurring in
  evaluating a function's return value when returning a char.
  This bug was caused by the fix to defect #532, so the fix 
  was removed until a better one is implemented and #532
  is now unfixed.
- Defect #635 fixed. Using sizeof on a constant string literal
  incorrectly resulted in an error.
- Defect #636 fixed. Char arrays assigned a string the same
  length as the array dimension produced errors
  when only a warning should have been produced.
- Defect #641 fixed. Null terminator was omitted from strings 
  in xdata statements.
- Defect #643 fixed. Targetlesscomp.dll now has the correct base
  frequencies for the RCM2000, RCM2010, RCM2020, and SR9100.
- Defect #646 fixed. Structure block copies failed
  when "#pragma DATAWAITSUSED on" was applied.
- Defect #648 fixed. Cofunction abondonment in xmem broke
  when abondonment code appeared after the xmem page change.

Library Bugs
- Defect #638 fixed. writeUserBlock() now works when #class
  auto is used.
- Defect #642 fixed. The debug kernel does not allow virtual 
  watchdogs to be counted while single stepping.
- Defect #645 fixed. SHort delay added to the end of ModemInit()
  and CofModemInit() to prevent modem lockups on some hardware.

Documentation Additions
- Tech Note 219 - Root memory usage reduction tips added.
- Added uC/OS-II documentation from Jean J. Labrosse in the 
  samples/ucos-ii directory. Newv251.pdf contains all of the 
  features added since V2.00, and Relv251.pdf contains release
  notes for version 2.51. Several API changes have been
  introduced in v 2.51.

******************************************************

VERSION 7.20P

NEW FEATURES
- SR9150/SR9160 libraries added for full support of 
  SR9150 and SR9160 specific functionality. This 
  includes libraries supporting IO, RS232,RS485, TCPIP 
  and SR9150/SR9160 hardware specific functions.
- Support has been improved for flash devices with 4096-byte sectors
  (i.e. the SST39 series).  In addition, support for compiling to
  "large-sector" devices (sector sizes > 4kb) has been added. See
  the Rabbit Designer’s Handbook for a list of supported devices.
- Feature Request #480. The enum keyword is now supported per the ANSI
  C specification.
- ucos2.lib has been upgraded to version 2.51 which includes mutexes
  and event flags.  The library has been broken up into multiple files
  to more closely match the source structure of uCOS-II.
- Feature Request #473. Added the built in macros __FILE__, __LINE__, 
  __DATE__, and __TIME__. Refers to section 6.8.8 of the ANSI standard. 
  The difference between our implementation is that the __TIME__ and 
  __DATE__ of the modules reflect either the time of compilation for 
  the bios or the .c file.  The reason for this is that we lack linking,
  so libraries are essentially compiled at the same time 
  as the file being compiled (ie the bios, or the user’s program).
- Sample program to interface to ADS787 chip added in /SAMPLES/SPI
- Cloning is now all "fast" cloning, and options have been added for
  "sterile" clones, unconditional copy of a second flash, and more.
  See RabbitBios.c for details.
- Added console_enable and console_disable to Zconsole, which allow
  the sharing of the connection.
- Added ConsoleLogin structure which will prompt for a name and
  password when a connection is established.  There is a matching
  CONSOLE_LOGIN_BACKUP macro for saving and restoring the structure.
- Efficiency and robustness improvements to FTP.
- FTP_CLIENT and FTP_SERVER libraries updated to support passive
  mode connections.  This makes it more convenient for clients and
  servers which are on different sides of a firewall.
- FTP_CLIENT supports upload/download of more than 32k using a
  user-specified data handler function.  The data handler can also
  generate dynamic content, or parse incoming content on-the-fly.
- Both FTP_CLIENT and FTP_SERVER libraries can co-exist in the
  one application.
- The default FTP server allows files owned by the anonymous user
  to be accessed by any other defined user.  Only files which are
  accessible to the logged-in user are listed.  The userID of the
  anonymous user is set via the ftp_set_anonymous() function.
- The function names for the default FTP handlers in library
  TcpIp\FTP_SERVER.LIB have been changed.  They are forward declared
  in the "header" portion.  See "Samples\TcpIp\Http\GetFile.c" .
  Defining FTP_WRITABLE_FILES permits FTP client to upload.  This
  requires support from application.
- TARGETPROC_LOADER has been reworked to support the new coldloader
  and PilotBIOS. Ethernet loading should be seamlessly transparent
  to the target board and DynamicC.
- VSERIAL.LIB handles remote-echo over telnet properly. Programs
  that use this library will also have to #use "DCRTCP.LIB" directly
  now, instead of relying on VSERIAL.LIB to do it.
- ZCONSOLE.LIB now uses the telnet code from VSERIAL.LIB, so echo
  is handled properly.
- Added SERA_USEPORTD macro to RS232 library. Allows alternate pins
  to be used for serial port A
- Constant string optimization implemented.
- The Communications Options dialog now contains a checkbox to enable/
  disable processor verification. The default is checked (verify the 
  processor with the DSR line) and the state is maintained per project.
  This replaces the Tx Mode options which are no longer used.

Other Functional Changes

  Improvements to Smart Star library    
- Added run-time error checking to functions.
- Added display/keypad module configurations.
- Added ledOut() function to library.
- Added serMode(3) configuration to support both 5-wire
  and RS485.
- Added end-of-conversion timeout to anaIn() function.
- Added return value: -3, eeprom unreadable, to
  anaInEERd() and anaOutEERd() functions.
- Modified AD/DA samples to demonstrate above eeprom
  error message.

- Structs and unions now obey the same scoping rules as other
  identifiers.  That is, a structure or union type defined in a   
  function no longer has global scope.
- Feature Request #477. Stdio window row capacity increased from
  150 to 10000, with row and column limits maintained in the registry.
- #asm blocks are now marked "nodebug" by default, even if an
  enclosing function is marked "debug". This means that a breakpoint
  can not be set inside a #asm block unless "#asm debug" is explicitly
  used.
- Call graph in map file now suppresses subtrees of functions 
  that have already been printed.
- Compiling with "Used Attached Target" no longer compiles the bios,
  and requires that the target has a running bios/program.
  The Options menu now has a Define Target Configuration Command.
  The Compile to *.bin file command now use the target configuration
  defined in the new option to compile, instead of popping the Target
  Configuration Dialog up for every compilation.

BUG FIXES

Compiler Bugs
- Defect #477 fixed. Multi-line ANSI-style string concatenations 
  are not supported by Dynamic C. Before, Dynamic C silently 
  failed, now it flags an error.
- Defect #532 fixed. Assignment operators used in conditional 
  expressions with char variables produced an incorrect 
  promotion of the expression to an int.
- Defect #536 fixed. Dynamic C would GPF if an array of
  type CoData was used as a name instead of a CoData pointer.
- Defect #555 fixed.  Escape characters in string constants do
  not cause GPFs.
- Defect #559 fixed.  Undefined origin directives would cause
  the compiler to crash.
- Defect #560 fixed. Sizeof with complicated expressions
  does not generated bad code.
- Defect #565 fixed. The compiler now performs parameter 
  checking on built-in functions set and res.
- Defect #575 fixed. Symbol table overflow may cause DC 
  to live lock.
- Defect #579 fixed. Struct and union tags that are reused
  defined now generate an error instead of a warning.
- Defect #582 fixed. Declaring a union foo variable when
  struct foo had been defined earlier (and vice versa) now
  generates an error.
- Defect #584 fixed. The compiler now performs parameter 
  checking on built-in function bit.
- Defect #595 fixed.  The ISR in sample program TIMER_B.C wasn’t
  quite correct.
- Defect #597 fixed. Instructions of the form 
  ldp (mn), hl | ix | iy will now compile.
- Defect #598 fixed. Global typedefs no longer override
  typedefs of the same name in functions.
- Defect #599 fixed. A struct or union is no longer  allowed
  to contain multiple members of the same name.
- Defect #600 fixed. Initialized const struct with a pointer
  member is now properly recognized as const.
- Defect #610 fixed. Pointers cast to void* are no longer
  allowed in integer arithmetic.
- Defect #613 fixed. Complex expressions in #asm blocks for 
  memory offsets were not evaluated correctly in some cases.
- Defect #614 fixed. An error is now issued for an
  assignment to a member of a const struct variable.
- Defect #622 fixed. The Rabbit Field utility can now be run
  from a CD and open binary files which are on a CD.

GUI/Debugger Bugs
- Defect #238 fixed. runwatch() now updates watches with
  the same snapshot.
- Defect #510 fixed. Dynamic C did not handle const variables 
  appropriately in watch expressions. 
- Defect #538 fixed. Opening a different project can now be cancelled
  when prompted with an unsaved Edit window.
- Defect #539 fixed. Saving the current project settings to a new project 
  name now updates the Dynamic c status bar and title bar.
- Defect #577 fixed. Dynamic C will not crash if more than six
  watch expressions are added.
- Defect #564 fixed. A font change can now be cancelled after 
  selecting a new font.
- Defect #596 fixed. When compiling, the Compile button is now 
  inactive until compilation is completed. Hitting the Compile
  button again during a compile no longer causes a problem.

Library Bugs
- Defect #398 fixed. Due to fundamental changes in the RabbitLink,
  the polling bug is no longer applicable.
- Defect #403 fixed. Due to fundamental changes in the RabbitLink,
  the problem of stdin characters not being received is no
  longer applicable.
- Defect #543 fixed. serMode(2) description corrected
  to PD0=RTS and PD2=CTS.  
- Defect #544 fixed. Comment on use of SERB_USEPORTD added
  to serBopen() function description.
- Defect #545 fixed. Added to descriptions for packet
  send and receive functions.
- Defect #549 fixed. ID and user blocks are properly protected
  when a 512kb flash is installed (didn't affect 2x256kb).
- Defect #551 fixed. _EraseFlashChip function now works.
- Defect #561 fixed. DMFile structures can now be on the
  stack if uC/OS is being used.
- Defect #567 fixed. The BIOS was performing an 
  inadvertent write to a register.
- Defect #570 fixed. PACKET.LIB now handles a change from
  a low to high baud rate correctly.
- Defect #571 fixed. PACKET.LIB parity modes are now correct
- Defect #572 fixed. Corrected library header typo.
- Defect #578 fixed. Dynamic C no longer loses communication 
  after breakpoint set and removed in a program with a lot of 
  stdio output.
- Defect #580 fixed. Added srand() to initialize random seed
  from a program instead of using default value.
- Defect #581 fixed. Zconsole parameter "" was not handled
  properly.
- Defect #586 fixed. Added input buffer overflow to serial errors
- Defect #587 fixed. Dynamic C now returns 1.0 for pow(0, y) where y 
  is greater than 0 but not equal to 1.
- Defect #588 fixed. MODEM.LIB functions now handle MS_TIMER rollover
  correctly.
- Defect #589 fixed. The BinWrPortE function prototype was incorrect.
- Defect #591 fixed. Header blocks in RS232.LIB now only have extern
  variable declarations
- Defect #594 fixed. Packet library can use alternate serial B pins by
  defining ’PKTB_USEPORTD’
- Defect #601 fixed. Corrected chip part number in sample description
- Defect #602 fixed. Incorrect mask value in anaOut function   (JRIO.LIB).
- Defect #608 fixed. correct value for MY_NETMASK in PPP_ANSWER.C
- Defect #609 fixed. Zserver forms were missing the HTTP Content-Type
  field.
- Defect #617 fixed. Occasional zero raw data values and 10V 
  in float values resolved.
- Defect #618 fixed. The RabbitLink has been updated to match changes
  in the underlying ARP code.
- Defect #629 fixed. The printf format strings "lX" and "LX" did not
  produce uppercase hex values.
- Defect #631 fixed. Filesystem Mk II (FS2) should now work with
  costatements/cofunctions.  Was not preserving IX register.  

NOTE:
Dynamic C 7.10 was a Special Edition (DSE) only version sold
only with DeviceMate. Users going from version 7.06 or older to
version 7.20 should read the version 7.10DSE release notes also.

******************************************************

VERSION 7.10DSE

NEW FEATURES
- Project files implemented. See the Dynamic C manual for
  details.
- Feature Request #440. Hotkeys ArrowUp, ArrowDown,
  PageUp, PageDown can now be used in memory 
  dump window.
  Documented in the Dynamic C User’s manual rev. O.
- Feature Request #448. Added command in Run menu 
  to clear all breakpoints.
  Documented in the Dynamic C User’s manual rev. O.
- Added #precompile functionality. This includes a new
  directive, #precompile, and a new library, precompile.lib.
  Any functions listed in precompile.lib using #precompile
  will be compiled and downloaded with the BIOS, increasing
  user program compile/download speed significantly.
  Documented in the Dynamic C User’s manual rev. O.
- Changed error about compiling to RAM while cloning is
  enabled to a warning that automatically disables
  cloning when compiling to RAM. 
- Feature Request #250. Improved targetless compile GUI to 
  configure with "Options | Define target configuration" and
  compile with "Compile | Compile target configuration". 
  Compilation dialog title bar informs of RAM or flash target.
- Feature Request #464. Added a message after a Compile target
  configuration, stating Object file successfully created.
- A new directive for #asm blocks, "xmem" has  been added to 
  facilitate placing blocks of assembly code
  directly into Xmem.
  Documented in the Dynamic C User’s Manual rev. 0.
- Internal macro __DynamicC__ is now a synonym for CC_VER

BUG FIXES
Compiler Bugs
- Defect #263 fixed. Extra semicolons in function calls generate
  compiler errors.
- Defect #326 fixed. Size of character buffers are reported correctly 
  in the map file.
- Defect #408 fixed. The compiler no longer generates errors
  when compiling the following inline assembly statements:
  - asm  ld  bc’,bc
  - asm  ld  de’,bc
  - asm  ld  hl’,bc
  - asm  ld  bc’,de
  - asm  ld  de’,de
  - asm  ld  hl’.de
- Defect #442 fixed. Assembly instructions with alternate registers
  that are followed by C++ style comments compile.
- Defect #452 fixed. Nested switch statements compile with the 
  correct context. 
- Defect #453 fixed. Escape character constants and hex values 
  in assembly code are parsed correctly.
- Defect #459 fixed. Watch expressions no longer corrupt variables.
- Defect #492 fixed. Compiler generated incorrect code
  for some tests with characters in logical expressions.
- Defect #495 fixed. The case where an array is declared
  extern without a dimension, and the sizeof operator is
  used on that array before its size is known now generates
  an error because the array is an incomplete type.     
- Defect #499 fixed. White space in arithmetic operations 
  was not ignored.
- Defect #505 fixed. Compiler incorrectly handles sizeof 
  operator result as a signed integer (should be unsigned).
- Defect #508 fixed. Disallowed cofunctions to have 
  old-style argument declarations.
- Defect #514 fixed. Old-style function declarations are 
  now compared to their prototypes, if a prototype exists. 
  Old-style declarations also flag an error if they do not 
  have a parameter declaration list.
- Defect #518 fixed. Compiler no longer generates bad byte in
  startup code.
- Defect #621 fixed. Macros entered into the Options | Compiler |
  Defines dialog are read at Dynamic C startup.

TCP/IP Bugs
- Defect #444 fixed. LCP negotiation fixed. Added Echo-Request
  handling.
- Defect #454 fixed. cgi_sendstring() no longer causes garbled
  data to be output.
- Defect #460 fixed. PAP authentication now checks 
  name and password length.
- Defect #464 fixed. PPP_ANSWER.C handles failed
  connect properly.
- Defect #488 fixed. ZSERVER.LIB’s telnet I/O method 
  now works correctly with uC/OS-II.
- Defect #528 fixed. PPP and FTP_CLIENT.LIB now work
  together properly.
- Defect #541 fixed. SAMPLES\RTDK\UCOS.C and
  SAMPLES\TCPIP\UCOS\UCOS2.C now correctly call sock_init()
  after OSInit().

GUI/Debugger Bugs
- Defect #451 fixed. Highlighted text now becomes 
  the default selection in the Watch window.
- Defect #457 fixed. Search & Replace now works for a reverse
  search when the replace text contains the replace text.
- Defect #494 fixed. When a compile is cancelled, the window
  focus is now returned to the edit window for keyboard input.

Library Bugs
- Defect #438 fixed. Argument syntax in pktXopen() is now correct
- Defect #466 fixed. parity table is now only defined once.
- Defect #467 fixed. Address calculation in fs_writesector(),
  in fs_flash_single.lib is cast properly.
- Defect #481 fixed. fdelete() in FILESYSTEM.LIB now returns
  the correct values.
- Defect #487 fixed. FILESYSTEM.LIB no longer mixes
  up files in its RAM cache.
- Defect #491 improved. PACKET.LIB now makes less use of
  the IP buffer, so a user program is less likely to
  overflow it.
- Defect #500 fixed. WAIT_5_us macro would not compile
- Defect #521 fixed. 7 bit bytes now transmitted correctly.

Other Functional Changes
- Feature Request #429. printf and sprintf now return 
  the number of characters written. Documented in
  the Dynamic C User’s Manual revision 0.
- Feature Request #459. Long calls and long jumps
  to xmem addresses are resolved to symbol names
  where possible.


KNOWN PROBLEMS
- Due to target communications changes, normal cloning does not work.
  Fast cloning, however, does work. This will be fixed in the next
  release.
- Also due to target communications changes, the RabbitLink product
  will not work with this version of Dynamic C. This will be fixed in
  the next release.
- A problem exists with PC serial ports that have the FIFO disabled.
  This problem may cause a Dynamic C lockup.  If you experience
  downloading/debugging problems, please make sure that the FIFO is
  enabled for your PC’s serial port. This setting can be found in
  the Control Panel in the Ports section.
******************************************************

VERSION 7.06P2

BUG FIXES

Sample Program Bugs
- Defect #583 fixed. Printf statements in the sample program
  xstring.c are accurate.

File System Bugs
- Defect #548 fixed. FS2_RAM_RESERVE is no longer counted twice
  in the reserved RAM.
- Defect #592 fixed. FS2_RAM_RESERVE definition in 
  RABBITBIOS.C is now in terms of 4096-byte blocks rather 
  than byte count. This allows use of more than 32k for 
  the RAM filesystem without getting warnings when 
  compiling the BIOS.

Library Bugs
- Defect #445 fixed. In Ucos-II, task can now be deleted if 
  it is created with OSTaskCreate.
- Defect #468 fixed. DHCP options 12 and/or 15 do not cause
  array overwrite and crash.
- Defect #469 fixed. Redundant code to validate pevent in
  OSQPost has been removed.
 -Defect #585 fixed.  _glInitLCDPort no longer has hardcoded 
  addresses.  These address were problematic for new controllers
- Defect #611 fixed. BL2100 digital port strobe changed from a
  chip select to a qualified RD & WR I/O strobe to eliminate
  an inadvertent channel selection.

TCP/IP Bugs
- Defect #409 fixed. TCP not sending correct keepalive segments.
- Defect #411 fixed. TCP timeout/retransmit strategy not
  implemented correctly.
- Defect #412 fixed. TCP not handling dropped or out-of-order
  segments correctly.
- Defect #413 fixed. TCP not handling closed window properly.
- Defect #465 fixed. sock_bytesready() and sock_dataready() 
  no longer return more bytes than are available for ASCII
  sockets.
- Defect #471 fixed. After a connection was SYN queued, 
  a re-transmit of the initial opening of the window does
  not have the proper flags set.
- Defect #473 fixed. Specifying the remote IP address 
  and remote port in tcp_listen() and tcp_extlisten() 
  now works correctly.
- Defect #474 fixed. DHCP did not accept packets <250 
  bytes. It now rejects a packet if it is <240.
- Defect #480 fixed. SMTP.LIB and FTP_CLIENT.LIB 
  were relying on MY_IP_ADDRESS directly, and now 
  use the proper API call to catch runtime address changes.
- Defect #483 fixed. resolve_cancel(0) no longer makes 
  subsequent DNS resolves fail.
- Defect #490 fixed. The HTTP server now properly 
  ends 401 responses (in particular, the Opera browser 
  now works with HTTP.LIB’s authentication).
- Defect #502 fixed. A UDP socket will no longer receive
  broadcast data sent to a different port from the one
  on which it is listening.
- Defect #503 fixed. HTTP.LIB no longer misreports a
  Content-Length field from a client of over 32768 bytes.
- Defect #504 fixed. sock_close() now correctly closes
  a listening but unconnected socket.
- Defect #509 fixed. sock_init() now only sets up uC/OS
  semaphores on first time through.
- Defect #520 fixed. Compilation error when DHCP_USE_BOOTP
   defined, when compiling BOOTP.LIB.
- Defect #522 fixed. Inability to use the TFTP.LIB library if
   not using DHCP client library (BOOTP.LIB)
- Defect #530 fixed. The macros BUFSIZE and MAXBUFS in
  NET.LIB have been renamed to ETH_BUFSIZE and ETH_MAXBUFS.
- Defect #535 fixed. Using the resolve functions in DNS.LIB
  without a nameserver defined no longer causes a divide-by-
  zero error.  In conjunction with this fix, some error
  return values for the resolve functions have been changed
  (see below).
- Defect #562 fixed. Ethernet frames of larger than
  ETH_MTU are no longer accepted by the packet driver.
  This caused a potential crash problem in ICMP.LIB.
- Defect #566 fixed. Echo request packets now generated
  correctly. Also, echo requests are no longer lost
  when using PPPoE
- Defect #569 fixed. In ZCONSOLE.LIB, the subject line in
  a mail message was sometimes incorrectly treated as the
  first line in the body.
- Defect #593 fixed. Under heavy load specific sized
  packets could cause a lockup.
- Defect #605 fixed. HTTP server long delays when processing
  post-style form data.  Especially noticeable with MSIE
  browser.
- Defect #607 fixed. PPP buffer now allocated correctly
  after packet is dropped.

Changes to ARP (Address Resolution Protocol):

- These changes should be transparent to most applications
  except those that use UDP sockets.  A call to udp_open() or
  udp_extopen() used to block while waiting for ARP resolution.
  These calls are now non-blocking, so it is possible for the
  application to call udp_sendto() on a socket which is not
  resolved.  This will cause the datagram to be dropped.  To
  help old applications, two new UDP functions are provided:
  udp_waitopen() and udp_waitsend().  These functions are
  identical to udp_extopen() and udp_sendto() respectively,
  except that an additional parameter specifies the maximum
  amount of time to block waiting for ARP resolution to
  complete.  A value of 100ms should be sufficient in most
  cases.
- ARP is now handled using a cache table in all cases.
  The table includes router and host information.  There is no
  blocking waiting for ARP when opening a TCP or UDP socket.
  ARP cache entries are automatically refreshed
  based on short or long timeouts.  ethernet address is no
  longer stored in the socket structure.
- New sock_resolved() function for testing whether a TCP or
  UDP socket is resolved to a valid hardware (ethernet)
  address.
   
General improvements to the TCP/IP library suite:

- TCP: The "functions" sock_wait_established(), sock_wait_data() and
  sock_wait_clsoed() are deprecated; do not use them in new code.
  These are really macros that "goto sock_err" when trouble is
  noticed.  All sample program have had these removed and replaced
  with looping code that calls tcp_tick().  See the file
  "Samples/RCM2200/myecho.c" for an example.
- TCP correctly computes round-trip-time estimators, which is
  important for handling timeout/retransmit strategy.
- TCP protocol core rewritten.  Much better throughput
  over long latency and/or unreliable links.  Code efficiency
  improvements for lower processor overhead.  Better conformance
  to host requirements RFC.  Nagle algorithm performed correctly.
  Common sections of code factored out into functions since
  the old code was somewhat inconsistent.  TCP is believed to
  be much more reliable and less prone to odd "lock-ups".
- New APIs for setting TTL and TOS for TCP/UDP sockets.
  sock_set_ttl() and sock_set_tos().
- ICMP errors passed up to transport protocol layers via
  upcall functions.  TCP handles transparently to the application.
  UDP allows the application to receive ICMP messages via the
  normal udp_recvfrom() interface.  Additional UDP socket
  mode flags to control ICMP processing.
- Socket error messages handled by number (not strings).  New
  API in NETERRNO.LIB for checking and printing errors e.g.
  sock_perror().  Up to two error codes may be queued to a socket.
- Debugging and verbosity defines have been rationalized.  The
  programmer can #define xxx_DEBUG and xxx_VERBOSE to control
  DC "nodebug" settings and debugging messages.  xxx is the library
  name e.g. TCP_VERBOSE for TCP.LIB.  Can also set DCRTCP_DEBUG
  and DCRTCP_VERBOSE to enable for all TCP/IP core libraries.
- Improved control over library constants via #defines.
- Packet driver time delays reduced.
- IP and transport layers drop malformed packets which used
  to get through (causing possible crashes and security problems).
- Minor UDP checksumming bug fixed.
- TCP ignores unbelievable RST segments.
- DHCP client sets broadcast flag correctly, and understands more
  information from the server.  Does not crash with host option.
  Accepts timezone information from server. New API:
  dhcp_get_timezone().
- Miscellaneous documentation clarifications for some of the
  API functions.  (Control-H function descriptions).
- Many of the polymorphic API functions now take void * for socket
  rather than "sock_type *".
- sock_mode() enhanced by addition of some macros to perform
  type-safe updates of single mode flags.
- New udp_peek() function for examining datagram information
  before actually removing the datagram from the UDP socket
  receive buffer.  This also returns more detail than
  udp_recvfrom(), including the incoming TOS and whether the
  datagram was directed to the broadcast address.
- In HTTP.LIB, calling the epilog function automatically in an abort
  condition after the prolog function has been called has now been
  changed. Now, the user must set the abort_notify field in the
  HttpState structure to 1 in the prolog function to indicate that
  the epilog function should be called on abort. As before, the
  cancel field in the HttpState structure will be set to 1 in such
  a situation. This functionality has been extended to CGI functions
  as well (see the New Features below).
- In HTTP.LIB, the abort_notify field in the HttpState structure can be
  set to 1 in a CGI function if the user wants the CGI function to be
  called one more time in case of a connection abort condition. The
  cancel field in the HttpState structure will be set to 1 in such a
  situation. This could be used to release resources that have been
  locked, for example.
- HTTP: Added HTTP_USERDATA_SIZE to extend make
   "HttpState.userdata[]".  This space is totally for user 
  program.  It’s cleared on each new connection.  If
  HTTP_USERDATA_SIZE is left undefined, this 
  additional field of HttpState isn’t included.  See 
  "Samples/TargetProc/SLog-App.c" for usage. Documented in the
  TCP/IP User’s Manual rev. C.
- For automatically generated forms in HTTP.LIB, the
  epilog function will now be called even if the connection
  is aborted (as long as the prolog function has been called
  first).  The "cancel" variable in the HttpState structure
  is 0 to indicate that the epilog function is being called
  normally, and 1 to indicate that it is being called in a
  cancel situation.
  Documented in the TCP/IP User’s Manual rev. C.
- Added support for dotted decimal IP addresses in resolve_name_start.
- New error return code RESOLVE_NONAMESERVER has been
  added to resolve_name_start(), resolve_name_check(),
  and resolve_cancel() in DNS.LIB.  Also, the return codes
  -1 and -2 for resolve_name_start() have been given the
  symbolic names RESOLVE_NOENTRIES and RESOLVE_LONGHOSTNAME,
  respectively. Documented in the TCP/IP User’s Manual, rev. C.
- Feature Request #442. Extended smtp_sendmailxmem
  to data larger than 32K.


NEW FEATURES
- OP6800 libraries added for full support of OP6800  
  specific functionality. This includes libraries 
  supporting IO, RS232,RS485, TCPIP and OP6800 
  hardware specific functions.
- SF1000 libraries are now provided in all versions of Dynamic C
  including the TSE and SE versions.

******************************************************
VERSION 7.06

BUG FIXES
Compiler Bugs
- Defect #360 fixed. Library functions that were declared
  in a BeginHeader block were not correctly read when the 
  function name was > 32 chars.
- Defect 461 fixed. Corrected division bug for unsigned
  constant powers of two which was caused by a call to 
  c_divt instead of c_usr.
- Defect #485. Dynamic C crashes on some macros due to 
  a bug in the preprocessor.
- Defect #497 fixed. The command line compiler does not 
  recognize board types. Programs which  require specific 
  board libraries do not run correctly.

TCP/IP Bugs
- Defect #470 fixed. DNS now only does table allocation
  once
- Defect #486 fixed. DNS lookups no longer fail when 
  a type CNAME answer is given first.
- Defect #511 fixed. DNS support no longer crashes the
  board when used in conjunction with uC/OS-II.
- Defect #527 fixed. Large fragmented packets could
  cause lockup.

GUI/Debugger Bugs
- Defect #515 fixed. The message window can now be closed
  without problem after compiling a program following one or
  more warnings generated from compiling the BIOS. 
- Defect #516 fixed. Changes to the Lib directory in the Compiler
  Options dialog are now effective immediately.
- Defect #517 fixed. The Rabbit Field Utility now sizes dialog
  windows correctly if Windows Display Properties large fonts
  are used.

Library Bugs
- Defect #506 fixed. The macro _BOARD_TYPE_  used in 
  RS232.lib in order to define SERB_USEPORTD  is also
  defined for the RCM2300.
- Defect #507 fixed.  Cloning would occasionally fail
  depending on the size of the program being compiled.
- Defect #513 fixed. The packet driver was incorrectly updating
  the PDFR and PDCR for the RCM2200. 
- Defect #534 fixed. Stack was corrupted when errlogGetNthEntry
  detected a checksum error.

Other Functional Changes

NEW FEATURES

- BL2100 libraries added for full support of BL2100 specific
  and display specific functionality.  This includes libraries 
  supporting display, character, graphic and BL2100 hardware
  specific functions.
- SF1000.LIB added to Dynamic C Libraries.  The SF1000 series 
  offers serial-interfaced Flash memory that is designed to 
  increase storage capabilities of Z·World single-board computers.
- New font converter executable (fbmcnvtr.exe) and help files 
  (FONTBMP.HLP) are now included in the Dynamic C installations.
- "STERILE_CLONES" option added to fast cloning to disable cloning
  of clones.

Additional Documentation

******************************************************


VERSION 7.05

NEW FEATURES
- Command line compiler released and documented in Dynamic C 
  User’s Manual.
- Compiling a program  into two flash chips has been made
  nearly seamless. #defining the macro USE_2NDFLASH_CODE is the
  only thing the user needs to do to make it work. Two extra bin
  files are generated when the program goes into two flash so
  that an EPROM burner can be used. A single large bin file
  is also generated for use with the Rabbit Field Utility and
  cloning. 
- SPI library added along with a sample interfacing to a
  serial ADC chip. See \SAMPLES\SPI\.
- GPS library added along with a sample interfacing to a
  GPS receiver. See \SAMPLES\GPS\.
- New I2C library and sample. Allows Rabbit to act as a 
  master for a Philips I2C bus. Documented in Application 
  Note AN215.  See \SAMPLES\I2C\.
- Major changes have been made to the 
  UDP socket API.  These changes will greatly improve the
  flexibility of our UDP implementation. They are 
  documented in the Dynamic C TCP/IP User’s Manual
- Instruction Set Reference item added to Help Menu.
- Error logging implemented and documented in Dynamic C 
  User’s Manual.
- A serial download manager sample program for boards with 2
  flash has been added in \SAMPLES\DOWN_LOAD\.
- New filesystem library (FS2.LIB and friends). FS2 documented
  in Dynamic C User’s Manual.  It is mostly compatible with 
  the current filesystem (FILESYSTEM.LIB) except for 
  initialization.  FS2 provides the following enhancements:
  . Allows overwriting parts of an existing file.
  . Multiple extents ("partitions") may be defined.
  . Supports any combination of flash memory, battery-backed
    RAM, or user-defined devices with a flash-like interface.
  . Supports large- and small-sector flash memory.
  . Runtime error reporting improved by using symbols
    defined in ERRNO.LIB.  These codes are returned in the
    errno variable if a filesystem routine encounters an
    error.
  The original filesystem is still supported, however any
  enhancements will only be made to FS2.
- Runtime error reporting is now improved, adding the 
  file and line at which the error occurred, unless 
  nodebug was in effect in the source code for that line.
- Sample serial downloader for 2 flash board added,
- If a file generates errors, compilation now stops at the 
  end of the file.
- Added packet drivers. These drivers allow for packet based 
  serial communication using a variety of packet separation 
  modes. Function description documented in Dynamic C User’s 
  Manual.
- BL2000 serves Java applet to control Analog output.
  Samples\BL2000\Applet\ has web page to deliver a Java
  applet (source in Applet\pages\AnalogApplet.java).
  Includes pre-compiled .class files, so you can just
  re-compile from Dynamic C, download and run!  Applet
  tested on NS Communicator 4.72 and MSIE 5.00.  See
  Samples\BL2000\Applet\README.txt for details.
- "Smart" BIOS Recompilation. Dynamic C now keeps a dependency
  list for the libraries included in the BIOS with #use.
  The BIOS is only recompiled when one of the libraries it is
  dependent upon is modified (or a library that one of those
  libraries #use’s). Nested #use is also supported,
  but any #use in a library must be in a BeginHeader/EndHeader
  block.
- Fast cloning option added, see RabbitBIOS.c.
- Complete rewrite of the DNS subsystem. 
- New functions sauth_getuserid(), sauth_setpassword(), and
  sauth_removeuser() in ZSERVER.LIB.  sauth_getuserid()
  gets the user id for a given username.  sauth_setpassword()
  sets the password for a given user id.  sauth_removeuser() 
  removes the given user from the user list.  Note any web
  pages associated with that user should be reassigned to
  another user, or have authentication removed (by passing 
  the parameter "" to sspec_setrealm()). 
- New function http_urldecode() to HTTP.LIB. Converts
  a string with HTTP transfer-coding "tokens" (such as
  %20 (hex) for space) into actual values.  Changes "+"
   into a space.
- New function http_contentencode() to HTTP.LIB. Converts
  a string to include HTTP transfer-coding "tokens" 
  (e.g. &#64; (decimal) for at-sign) where appropriate. 
  Encodes these chars: "<>@%#&"
- New callback macro HTTP_CUSTOM_HEADERS in 
  HTTP.LIB.  The developer  can define this macro to be a 
  function of the following prototype:  void my_headers 
  (HttpState* state, char* buffer, int bytes); The state 
  parameter is a pointer to the state structure for the 
  calling web server, the buffer parameter is the buffer 
  in which the header(s) can be written, and bytes is the 
  number of bytes available in the buffer. The macro will
  be called whenever HTTP headers are being sent. 
  Collected all runtime error code into a single new library,
  ERRORS.LIB.  Also added three new runtime errors:  
  "invalid cofunction instance", "unexpected interrupt",
  and "bad parameter passed to I/O function".
- New functions sspec_setpreformfunction() and 
  sspec_getpreformfunction() in ZSERVER.LIB.  These 
  functions add support for a user-supplied function that 
  will be called just before HTML form generation.
- New function udp_send, which will send a datagram to the 
   remote host on the UDP socket.
- New function udp_sendto, which will send a datagram to a 
  specified remote host and port.
- New function udp_recv, which will receive a datagram from 
  a remote host.
- New function udp_recvfrom, which will receive a datagram 
  from a remote host, and also return the IP address and port 
  number of the sender.
- New functions tcp_extopen, tcp_extlisten, and udp_extopen 
  have been defined.  These allow a user to specify their 
  own socket buffers in xmem (with xalloc) instead of having 
  them allocated from the pool.  Hence, it is now possible for 
  the user to handle socket buffer management.
- Added functions resolve_name_start(), resolve_name_check(), 
  and resolve_cancel() to perform nonblocking DNS lookups.
- Added the following configuration macros for DNS:
 * DNS_MAX_RESOLVES (4 by default) -- number of 
  concurrent DNS queries that can be done.  This specifies 
  the size of an internal table that is allocated in xmem.
  * DNS_MAX_NAME (64 by default) -- hostnames to look up
  (including an appended default domain) must be no larger 
  than this macro, including the null-terminator.  For 
  temporary storage, a variable of this size must be placed
  on the stack in DNS processing.
  * DNS_MAX_DATAGRAM_SIZE (512 by default) --
  specifies the maximum length in bytes of a DNS datagram 
  that can be sent or received.  A root data buffer of this 
  size is allocated for DNS support.
  * DNS_RETRY_TIMEOUT (2000 by default) -- specifies 
  the number of milliseconds to wait before retrying a 
  DNS request.
  * DNS_NUMBER_RETRIES (2 by default) -- specifies the 
  number of times a request will be retried after an error 
  or a timeout.
  * DNS_MIN_KEEP_COMPLETED (10000 by default) -- 
  specifies the number of milliseconds a completed request 
  will be kept in an internal table before it can be flushed, 
  so that the user can retrieve the results.
  * DNS_SOCK_BUF_SIZE (1024 by default) -- specifies 
  the size in bytes of the socket receive buffer for the 
  DNS socket.  An xmem buffer of this size will be allocated.
  Compatibility has been preserved for the resolve() function,
  call the MAX_DOMAIN_LENGTH macro, and the 
  DISABLE_DNS macro.
- The sizeof operator can be used inside assembly blocks. 
  Documented in the Dynamic C User’s Manual.
- ZCONSOLE.LIB now supports FS2.LIB.  The functions
  con_backup_bytes(), con_set_files_lx(), and
  con_set_backup_lx() have been created for use with FS2.LIB.
- All of the new and improved TCP/IP functionality has been 
  documented in the Dynamic C TCP/IP User’s Manual
- A new registry entry, Include Time Stamp, has been added under
  the Dynamic C Compiler Section. This setting is set to true 
  by default, but can be edited so that Dynamic C will compile
  files without including time stamp information. 
- Access to time/date stamp added:
  long dc_timestamp;
- Ability to #define macros in compiler options GUI added.
- Ability to select a different LIB.DIR file in compiler
  options GUI added.
- When a program is compiled for debug, the source file will
  no longer scroll to the beginning of the code when debug
  mode is entered.

BUG FIXES
Compiler Bugs
- Defect #42 fixed.  Post and pre increments and decrements of
  auto character variables  are implemented correctly.
- Defect #100 fixed.  Compiler did not generate an error when 
  assigning a cofunction to a function pointer. 
- Defect #105 fixed.  Conversions from float to long for some 
  overflow values caused Dynamic C to crash.
- Defect #151 fixed.  Selection operator did not work with 
  arrays of structures.
- Defect #161 fixed.  Adding constant to function pointer now
  generates compiler error.
- Defect #168 fixed. Address of operator did not work properly 
  for functions.
- Defect #169 fixed. Address of operator did not work properly 
  for arrays.
- Defect #194 fixed.  Compiler now permits white space between
  the name and the colon of a label definition.
- Defect #207 fixed.  The compiler warns when global assembly 
  labels are redefined and when symbols contained in library 
  headers are defined in a user’s program. 
- Defect #210 fixed. Indirect calls to functions with arguments
  work correctly when made multiple times, and when their return
  values are assigned to auto or dereferenced pointers. 
- Defect #226 fixed.  An internal error occurred when using the
  auto keyword with certain variables.
- Defect #232 fixed. The sizeof operator was causing compiler
  errors in certain cases when used as an array index.
- Defect #242 fixed. In some rare instances, incorrect forward 
  jumps were generated for expressions with multiple 
  logical operators.
- Defect #246 fixed.  same as #42 and defect #282.  
- Defect #249 fixed. Same as defect #333.
- Defect 266 fixed. Cofunction local variables outside the 
  range of indexing with IX (~128 bytes) incorrectly were 
  assigned the SP Relative address mode.
- Defect #273 fixed.  Invalid characters in macro identifiers 
  produce errors.
- Defect #279 fixed.  Missing endheader caused compiler to crash.
- Defect #282 fixed.  same as defect #42 and defect #246. 
- Defect #304 fixed.  Assembly statements in multi line macros 
  expand correctly.
- Defect #312 fixed.  same as defect #210. 
- Defect #313 fixed.  TCP connections could have a transient
  problem when MS_TIMER rolls over.
- Defect #314 fixed.  same as defect #210.
- Defect #329 fixed.  Sample programs that cause seg chains 
  to be compiled on the bios no longer result in Abnormal 
  Program Terminations when run with targetless compilation
  or on the rabbit link.  
- Defect #331 fixed. Defect caused optimization to be 
  incorrectly applied to test expressions containing a new line.
- Defect #333 fixed.  GPF when initializing a variable that 
  was declared using an undefined structure name.
- Defect #334 fixed. Character arrays that are initialized with
  a constant string having the same length as the array are not
  null-terminated. Added a warning message to highlight this
  problem.
- Defect #349 fixed. The correct address is assigned in 
  references to extern variables between libraries.
- Defect #370 fixed. The result of x%1 gave incorrect result 
  of x with constant 1, should be 0 instead.
- Defect #377 fixed.  GPF when syntax error is encountered 
  while parsing initializer list.

TCP/IP Bugs
- Defect #337 fixed. Using TCP/IP now forces debug, grays out 
  menu item "Compile | Include debug code/RST 28 
  instructions" in a checked state.
- Defect #359 fixed.  Compiler crashed on some syntax errors.
- Defect #365 fixed. RabbitLink now sets the TCP port correctly
  on bootup, if changed from the default.
- Defect #388 fixed.  Can now allocate more than a total of 32k
  of socket buffers.
- Defect #405 fixed.  sock_preread() now compiles correctly.
- Defect #407 fixed.  Some problems in HTTP 
  username/password authentication are now fixed.
- Defect #427 fixed.  Sockets on reserved ports no longer stall
  in the 2MSL wait state.
- Defect #428 fixed.  HTTP servers are no longer leaked due to
  missed requests.
- Defect #429 fixed.  The HTTP server would sometimes freeze on
  startup.  This freezing no longer occurs.
- Defect #430 fixed.  A problem with some TCP/IP timeouts longer
  than 65 seconds has been resolved.
- Defect #443 fixed.  Deadlock problem using TCP/IP with uC/OS.

GUI/Debugger Bugs
- Defect #148 fixed.  Tabbing through help lookup controls no 
  longer tabs to Parameter Number window when in View 
  Only mode.
- Defect #164 fixed.  Watch window no longer incorrectly 
  promotes integer expression to unsigned integer (Incorrectly 
  marked as fixed in version 7.02P).
- Defect #229 fixed.  The Print Setup Dialog Box is now 
  initialized with the default margin values.
- Defect #251 fixed.  Focus is set to file with breakpoint hit.
- Defect #253 fixed.  Ctl-H Insert Call no longer corrupts 
  function name in source file after call is inserted.
- Defect #272 fixed. Closing the "Loading Initial Loader" 
  window when attempting to compile a user program after 
  having closed the "Loading Initial Loader" window that 
  appears immediately after starting Dynamic C  stops 
  compilation instead of causing a GPF. 
- Defect #297 fixed. Redo (Alt-Shift-Backspace) now works 
  correctly.
- Defect #299 fixed.  Now only attempts to save a file if there is
  sufficient disk space, otherwise displays a warning message.
- Defect #310 fixed. Removed length restriction to Watch 
  expressions.
- Defect #317 fixed. Hitting F9 to run and F10 immediately 
  after no longer causes the compilation to stall.
- Defect #319 fixed. Dynamic C no longer hangs up when 
  characters with high bit set are in the source file, as can 
  be introduced by other editors or other software.
- Defect #323 fixed. The default BIOS is now used if the
  Compiler Options ’Use’ checkbox is checked but 
  filename is blank.
- Defect #361 fixed. Watch window Delete button is enabled 
  when watch list is not empty.
- Defect #384 fixed.  Watch expressions involving arguments to
  root functions that are called by xmem functions are evaluated
  correctly.
- Defect #402 fixed. The destination address of altd djnz is 
  correctly disassembled. 
- Defect #433 fixed.  Print to file of a memory dump now works
  properly for logical addresses.
- Defect #456 fixed.  Some PCs were getting "received XX
  instead of ACK." message at times. This should be
  reduced now if not eliminated.

Library Bugs
- Defect #220 fixed. WrPortI and BitWrPortI now suspend 
  interrupts when updating shadow registers to prevent a race 
  condition with an ISR.
- Defect #255 fixed.  Incorrect references to chkPowerFail
  in SYS.LIB were changed to the correct chkHardReset.
- Defect #301 fixed.  A comment was incorrect in the 
  KEYLCD.C demo.
- Defect #311 fixed. Added minimum baud rate to serXopen to 
  prevent divide by zero errors.
- Defects #232, #294, and #348 fixed. (All related)
  Declarations were allowed in sizeof and cast expressions. 
  Declarations using sizeof did not compile. Complex types in 
  sizeof caused crashes and other problems.
- Defect #355 fixed. The RFU no longer overwrites the ID block
  when downloading a binary image larger than the primary flash.
- Defect #357 fixed. Incorrect definition of _FlashData was
  changed.
- Defect #358 fixed. Hex formats in printf now work correctly, 
  with %x printing in lower case and %X in upper case.
- Defect #376 fixed.  dispContrast function now works for values 
  between 45 and 60.
- Defect #382 fixed.  Long variables may now be inspected
   via Rabbitlink.
- Defect #389 fixed. strtod now converts strings longer than 9 
  characters.
- Defect #391 fixed.SmartStar read analog now faster.
- Defect #392 fixed. userClockDivider() was incorrectly dividing
  peripheral clock by eight and not changing the status of
  the periodic interrupt.
- Defect #419 fixed.  Casting from long to char works with both
  direct and indirect assignments independent of storage class.
- Defect #421 fixed.  chkSoftReset() was reporting hard resets 
  instead.
- Defect #425 fixed.  An external interrupt routine was 
  automatically up for the RCM21xx.  This would clobber any
  user interrupt vector that was set up before sock_init.
  It now only sets up a vector if PD_INTVEC is defined to
  the interrupt vector.
- Defect #426 fixed.  WriteFlash2() was assuming an ID block
  existed at the top of the second flash and not writing
  to the top sector.
- Defect #439 fixed.  Added a runtime warning when a user
  passes an auto socket to tcp_open, tcp_listen, or
  udp_open when using uC/OS-II.
- Defect #441 fixed.  Fixed a race condition in vdriver.lib that
  would cause ucos/slice task aware isrs to not work.
- Defect #448 fixed.  Flash driver was rewriting every sector,
  even when the data was identical and a rewrite was unnecessary.
- Defect #452 fixed.  the read/writeUserBlock() functions would
  return an error when compiling to RAM.
- Defect #463 fixed.  MS_TIMER roll-over not handled in
  ConsoleFinish function

Other Functional Changes
- Feature Request #260. Using a C long macro in an assembly
  block now produces a demotion-of-value warning.
- Feature Request #270. P flag is V in register window. V and
  nv are synonymous with lo and lz.
- Feature Request #325. Users can compile with or without 
  debug information to the target after compiling to a 
  file without debug information. 
- Feature Request #332. The Rabbit Field Utility will now look 
  for the cold loader and pilot BIOS in the current working 
  directory if a pathname is not found in the registry.
- Feature Request #341. Error and warning messages are now 
  shortened by replacing the full pathname with just the 
  filename and extension.
- Feature Request #351. All error messagebox messages now stay 
  on top of all other windows within Dynamic C.
- Feature Request #443. Added HTTP_PORT to make it easy to
  override the default port on a HTTP server.
- It is no longer necessary to change USE115KBAUD in the
  BIOS to change the baud rate between 115200 and 57600 , 
  an internal macro was defined.
- The initial load of the pilot BIOS has been sped up to
  57600 baud, resulting in a reduced BIOS load time.
- Symbol and literal string table size increased.
- filesystem: File access is faster due to lookup tables in RAM
  added fshift() for removing data from the beginning of
  a file  added fs_reserve_blocks() to reserve space that can
  only be allocated by privileged files (128-143) Documented in 
  Dynamic C User’s Manual.
- Dynamic C now always generates an even sized program to
  facilitate checksumming using word-wise methods.
- For uC/OS-II support, you should define the new macro
  MAX_SOCKET_LOCKS.  This defines the number of 
  socket locks that will be allocated.  It defaults to 
  MAX_TCP_SOCKET_BUFFERS + MAX_UDP_SOCKET_BUFFERS.  
  This macro is necessary because we can no longer calculate 
  the number of socket locks needed based on the number of 
  socket buffers, now that the user can manage their own 
  socket buffers.
- sock_bytesready and sock_dataready have been modified to
  work with the new UDP sockets.  They will return the size
  of the next datagram to be read if there is one waiting. 
  sock_bytesready will return -1 if there is no datagram 
  waiting. sock_dataready will return 0 if there is no datagram 
  waiting--hence, sock_dataready can not distinguish between 
  no datagram waiting and an empty datagram waiting.
- The functions sock_read, sock_write, sock_fastread, 
  sock_fastwrite, sock_gets, sock_puts, sock_getc, sock_putc, 
  and sock_preread no longer support UDP sockets.
- The functions sock_recv_init, sock_recv, and sock_recv_from 
  have been removed
- UDP socket buffers are now circular, and can accept as many
  datagrams as will fit in the buffer
- TCP and UDP socket buffer management has been changed:
- The socket buffer pool has been split into separate TCP and 
  UDP buffer pools
- The macro MAX_TCP_SOCKET_BUFFERS gives the 
  number of TCP socket buffers that will be allocated.  It 
  defaults to 4.
- The macro TCP_BUF_SIZE gives the size of a TCP socket
  buffer.  It is split into a read buffer and a write buffer of 
  equal sizes. It defaults to 4096 bytes.
- The macro MAX_UDP_SOCKET_BUFFERS gives the number of UDP
  socket buffers that will be allocated. It defaults to 0.
- The macro UDP_BUF_SIZE gives the size of a UDP socket 
  buffer.  It is all one read buffer, since UDP datagrams are 
  sent out immediately.  It defaults to 4096 bytes.
- For backwards compatibility, MAX_TCP_SOCKET_BUFFERS 
  will take on the value of MAX_SOCKETS if it is defined.
- For backwards compatibility, TCP_BUF_SIZE and UDP_BUF_SIZE
  will take on the value of SOCK_BUF_SIZE if it is defined.
- For backwards compatibility, TCP_BUF_SIZE and UDP_BUF_SIZE
  will take on twice the value of tcp_MaxBufSize if it is defined.
- The preprocessor symbol FS2_RAM_RESERVE may be defined in
  STACK.LIB in order to reserve a block of RAM for use by FS2.
- The maximum compilation errors and warnings can now be set in
  the dialog box shown with the Options | Compiler menu selection.
- Defining the label SERB_USEPORTD will cause serial
  port B to use it’s alternate rx/tx pins on parallel port D
- Additional error checking for module headers.  Specifically,
  errors are reported if BeginHeaders and EndHeaders
  do not match.
- Origin directives now support a follows specifier and a
  resume specifier to allow compiling around the system ID
  block kludgelessly. Documented in Designer’s Handbook 
- Compile to bin file has an option for padding or not padding
  the file with zero’s for program code that starts at
  addresses > 0.
- A Intel HEX file is now always generated for all compiles.
- Use HTTP_MAXNAME in "HttpType" structure instead of 
  hardcoded constant 20 for field "type[]".  This allows 
  MIME types of longer than 19 chars in the HttpType structure.  
  Developer can override HTTP_MAXNAME in their source file.
- sock_puts now has error code (-1).  It can be generated if it 
  is called with a UDP socket.
- sock_gets now has error code (-1).  It can be generated if it 
  is called with a UDP socket.
- Made readUserBlock, writeUserBlock functions backward compatible
  with older or no system ID block.

Additional Documentation 
- All new/improved TCP/IP functionality has been documented in
  the Dynamic C TCP/IP User’s Manual.
- An appendix of useful compiler and library defined macros has
  been added to the Dynamic C User’s Manual.
- PCB Layout and EMI information was added to the Hardware Design
  chapter of the Designer’s Handbook.
- Wait State Bug information was added as an appendix to the 
  Designer’s Handbook.
   

******************************************************
VERSION 7.04SE4

New Features
- Dynamic C now supports the RCM2300 series including 
  new samples and documentation.

VERSION 7.04P3

New Features
- Dynamic C Premier now supports the BL200 series 
  as well as Smart Star D/A boards.
- Added packet drivers. These drivers allow for
  packet based serial communication using a
  variety of packet separation modes.

Bug Fixes
- Defect #387 fixed.  The packet driver for RCM2100
  did not use shadow registers properly.
- Defect #396 fixed. Time-outs in RS232.LIB did not
  handle MS_TIMER rollover correctly.

VERSION 7.04T2

New Features
- Samples, libraries, and documentation for new 
  RCM2200 core module added.
- Slave port support functions added.
- A "user block" has been added to the flash device 
  along with the ID block for protected storage of
  calibration constants, IP addresses, etc.  To 
  support large-sectored flash, these two protected 
  blocks take up 16KB at the top of flash.  If more 
  code space is needed, the user block can be removed
  from boards that are not currently using it; 
  contact Tech Support for more information.
- New library tftp.lib provides a TFTP client
- Improved DHCP support (including reacquiring leases 
  and file transfer support)
- New library zconsole.lib implements a customizable
  serial console with or without TCP/IP functionality 
  such as a web server and mail client
- New libraries for using the Rabbit slave port: 
  slave_port.lib master_serial.lib, and sp_stream.lib
- New function smtp_sendmailxmem() in SMTP.LIB.  It 
  works much like smtp_sendmail(), except that it 
  gets the body of the message from an xmem buffer.
- TCP Keepalives are now available. See the function 
  tcp_keepalive() to turn on keepalives on a 
  per-socket basis.

Bug Fixes
- Defect #254 fixed.  spkrOut() was not included in 
  ctrl-H function lookup.
- Defect #257 fixed.  The flash transfer buffer will
  now be located at the top of available RAM instead 
  of in the middle.
- Defect #258 fixed.  The MAC address for the second
  interface on the EG2000 is now handled correctly.
- Defect #259 fixed.  The spkrOut() function now 
  disables the timer B interrupt when volume is set
  to zero.
- Defect #274 fixed. The runtime error list has been
  cleaned up.
- Defect #275 fixed. PPP driver no longer requires
  compression options
- Defect #281 fixed.  Potential buffer overflow in 
  DNS lookups has been corrected.
- Defect #296 fixed. PPPsetAuthenticator() now has
  correct description
- Defect #298 fixed.  Some packets were being
  unnecessarily broadcast when the destination
  combined with the netmask was FFFFFFFF.
- Defect #302 fixed. Function description blocks in 
  modem.lib have correct library name
- Defect #315 fixed. A potential race condition in the
  Realtek initialization on TCP/IP Development Kits
  was removed.
- Defect #316 fixed. Added ModemSetDTR() call and port
  pin idle high to ModemInit() for more standardized
  modem initialization.
- Defect #318 fixed. sock_recv_from() now returns 
  the IP address and port number in host byte order 
  instead of network byte order.  Note that this does 
  affect code that depends on the old behavior.
- Defect #327 fixed.  Cloning now works for CPU clock
  frequencies > 19MHz.
- Defect #328 fixed.  512kb flash device support was 
  fixed.
- Defect #336 fixed. TCP/IP stack sent unnecessary 
  ACKS when a connection  was actively opened, but
  no data has been sent.
- Defect #343 fixed.  Auto variables are no longer 
  corrupted when certain transcendental functions are 
  called from useix functions.
- Defect #344 fixed. Serial port A now sets parallel 
  port C pin correctly.
- Defect #350 fixed.  Error reading ID on some Atmel 
  flash fixed.
- Defect #352 fixed. xmem2root and root2xmem were not 
  reentrant.  This caused problems using HTTP with 
  MuC/OS.
- Defect #354 fixed.  RES and SET forced to root
- Defect #362 fixed.  tcp_reserveport() would only 
  work the first time it  was called. 
- Defect #363 fixed.  FFT problems with powerspectrum
  and fft_hann  when 256 or 512 data points used fixed.
- Defect #365 fixed.  RabbitLink wouldn’t restore the 
  modified TCP port on bootup.
- Defect #375 fixed.  All valid shadow registers are 
  now initialized by the BIOS.
- Defect #383 fixed.  TargetlessComp GUI boards list 
  now contains all Rabbit boards. New board will be 
  added upon compiler upgrade, while retaining any
  previously configured boards.
- Defect #416 fixed.  The header for chkHardReset() has
  been corrected.

Other Functional Changes
- The GOCR register is now initialized to A0h. This makes the
  CLK pin low, before it was driven by the crystal. This
  actually changed in 7.02, but was omitted in the release note.
- Cloning is set to NOT clone the whole flash by default now,
  just the user program and BIOS.
- DNS lookup behavior with default domains has changed 
  slightly.  If the name to be looked up contains a ’.’, then it 
  is looked up directly first; if that fails, it is looked up with 
  the default domain appended.  If the name to be looked up 
  does not contain a ’.’, then it is looked up with the default 
  domain appended first; if that fails, it is looked up directly.


Additional Documentation 
- Runtime error chapter in Dynamic C manual has been
  updated and expanded.

******************************************************
VERSION 7.04P

New features
- New library for AES(Rijndael) encryption
- New RCM2100 specific samples have been added along with 
  Realtek and IP driver modifications for full RCM2100 support.
- Added the WriteFlash2() function, which will write a buffer
  to the second flash devices on boards with two flash installed
  (this function is NOT compatible with the flash file system).
- New sample to display memory usage.
- The allocation of memory quadrants was rearranged when
  compiling to flash:
    quadrant 0 (0x00000-0x3FFFF) is the primary flash
    quadrant 1 (0x40000-0x7FFFF) is the second flash (if installed)
    quadrant 2 (0x80000-0xBFFFF) is RAM
    quadrant 3 (0xC0000-0xFFFFF) is RAM
  Previous releases of Dynamic C would swap quadrant 3 between
  RAM and the second flash to write to the second flash.

Bug Fixes
- Defect #256 fixed.  The TBCSR and TBCR registers are
  now cleared in the BIOS, preventing odd behavior with
  some programs that used the timer B interrupt.
- Defect #278 fixed.  Dynamic C correctly reports errors concerning
  running out of xmem code space.
- Defect #280 fixed.  Dynamic C crashes when the same function 
  names is used in a function description block in three or 
  more libraries. 
- Defect #283 fixed.  Cloning was broken in Dynamic C
  versions 7.02 and 7.03.
- Defect #288 fixed. ModemSetDTR() was incorrect in modem.lib
- Defect #289 fixed. RabbitLink no longer loses serial console
  communication with the target in normal run mode.
- Defect #290 fixed. GUI for defining targetless compile data will
  now accept international floating point separators and will 
  automatically convert any existing registry targetless compile data 
  to use the current symbol.
- Defect #293 fixed.  Dynamic C lost communication with the BIOS
  on boards running low-frequency crystals (e.g. 3MHz).
- Defect #307 fixed. Delays in cofunctions were not working.
- Defect #309 fixed.  Flash file system could cause inadvertent
  writes to Rabbit 2000 registers.
- Defect #330 fixed. fshift() could corrupt lookup tables
- Defect #346 fixed.  Conversion programming in fs_block_init
  in fs_flash.lib no longer causes a boundary check to fail.


Other Functional Changes
- Changes to BIOS, flash drivers to make use of 512K RAM seamless

Documentation Changes
- RCM2100 manual added

******************************************************
VERSION 7.03P

New features
- The library zserver.lib now provides support for variables
  located in xmem.  sspec_addxmemvar() adds an xmem variable,
  and the macro SSPEC_XMEMVARLEN defines the size of the
  stack-allocated buffer that is used in sspec_readvariable()
  for xmem variables.  SSPEC_XMEMVARLEN is 20 by default.
- New function sspec_getvarkind() in zserver.lib returns the
  kind of variable represented (i.e., INT8, INT16, INT32,
  FLOAT32, or PTR16).
- New function sspec_getvartype() in zserver.lib returns the
  type of variable (i.e., SSPEC_XMEMVAR or SSPEC_ROOTVAR)
- Flash filesystem features: shifting out contents from the 
  beginning of a file using fshift(), reserving blocks that
  will remain available for privileged files.

Bug Fixes
- Defect #248 fixed.  Mail sent through the SMTP client was not
  readable by some mail readers.
- Defect #265 fixed.  sock_bytesready() sometimes failed
  with ASCII TCP sockets.
- Defect #267 fixed. block checksums were being incorrectly
  modified

Other Functional Changes

Documentation Changes


******************************************************
VERSION 7.02P3

Bug Fixes
- Defect #261 fixed.  WriteFlash() would write the data
  requested but trash the rest of the flash sector.

******************************************************
VERSION 7.02P

New features
- Libraries for dial-up PPP connections
- Dynamic C can now be used to program and debug over Ethernet
  and Internet.
- The Rabbit Field Utility can now load over Ethernet/Internet. 
- Programs can now be compiled to a .bin file
  without an attached target.
- Calls to xmem functions no longer use a root proxy 
  (i.e., "root bouncer"), but use the lcall instruction.
  This improves code size and speed.
- Protected and shared variables are now supported.
- More descriptive error messages can be displayed by 
  pressing F1 when the message window is active. 
- A good map file is now generated for compiled programs.
- The #class directive can be used to change the 
  default storage class to auto/static.  In DC, the 
  default is normally static.
- Users can now define their own runtime error handler
  instead of the default function using the
  defineErrorHandler() function.
- ’Sleepy mode’ is better supported:  periodic
  interrupts are disabled when the CPU is switched to
  the 32kHz oscillator and re enabled when switching
  back to the main oscillator.  In addition, a new
  function, updateTimers(), can be called while in
  sleepy mode to update TICK_TIMER, MS_TIMER, and
  SEC_TIMER which normally depend on the periodic
  interrupt.
- New functions strcmpi() and strncmpi() perform case-
  insensitive string compares
- New function Disable_HW_WDT() disables the hardware
  watchdog timer.
- Watch expression text control is now a combobox
- A Tip of the Day dialog will come up if its ’Show on startup’
  checkbox is checked, or when the tip menu item in Help is clicked.
- New TCP/IP function, sock_bytesready(), provides
  functionality similar to sock_dataready(), except
  that it is more useful for ASCII mode sockets.
  To save memory, sock_dataready() should no longer be
  used, although it is provided for backward
  compatibility. Note that sock_bytesready() returns
  -1 for an empty socket, whereas sock_dataready()
  returns 0 for an empty socket.
- Compiler option for creating a .bin file
  with or without including the bios.
- New Watch Code radio buttons in Options/Compiler menu dialog box
  to enable any watch expressions or to restrict expressions to
  save space.
- New library zserver.lib (automatically included for the web
  and FTP servers) provides the basis for server object handling.
  It handles files (in both root and extended memory), variables,
  functions, forms, and users.  Files and users may now be
  directly shared between the web and FTP servers.  Server-
  specific notes follow:
  * HTTP Server
    http_flashspec may still be used for the web server.  Define
    HTTP_NO_FLASHSPEC if you do not wish to use the
    http_flashspec structure.
  * FTP Server
    The FTP server must use the new zserver.lib functionality.
    The FTP handler interface has changed.  One more function to
    handle directory listings has been added, and an offset
    parameter has been added to the read and write functions.
  See the TCP/IP High Level Protocols manual for more information.
- The web server can now automatically generate and parse forms,
  which makes it much easier to modify variables through a web
  browser.  See the sample program form1.c and the TCP/IP High
  Level Protocols manual for more information.
- Added a new function paddr which converts a logical address
  into a physical address.
- Added smtp_setserver() to smtp.lib, which allows setting the
  SMTP server at runtime. 
- bios/ramonlybios.c and bios/ramonlycoldload provided for custom
  boards having no flash with RAM connected to CS0/OE0/WE0
- A macro CS1_ALWAYS_ON was added to allow the BIOS to easily be
  changed to keep CS1 always active
- Added support for 12 new flash devices.
- A library for performing MD5 hashes, MD5.LIB, including a demo
  program, MD5_TEST.C
   
Bug Fixes
- Defect #3 fixed.  Line highlighting when stepping through code
  is accurate.
- Defect #12 fixed. Breakpoints can be set for jump and call expressions.
- Defect #26 fixed. Costatements now work correctly in (non-indexed)
  cofunctions.
- Defect #39 fixed. Compiling programs with #nodebug will cause the 
  debugger to malfunction until DC is restarted.
- Defect #40 fixed. External declarations can be used with xdata.
- Defect #45 fixed. strtol tailptr problem corrected.
- Defect #53 fixed.  Expressions to sizeof operator do not generate
  code unless they have a side effect (i.e., contain ++, --, or 
  an assigment operator).  This feature is not portable, since no sizeof
  expressions are evaluated in ANSI C.
- Defect #74 fixed. Fixes bug with runwatch for auto variables.
- Defect #82 fixed. A warning is now issued if a library (.lib) or a
  source (.c) file line length exceeds maximum allowed (512).
- Defect #85 fixed.  Lcalls can be made with two arguments: the first 
  being a constant, interpreted as the xpc, followed by either a label 
  or a constant, interpreted as the logical address.  Lcalls can also 
  be made with a label as the only argument.
- Defect #87 fixed. Dynamic C no longer crashes when attempting to compile
  to a write protected directory, but issues an error message instead.
- Defect #107 fixed.  Fixed a GPF that can occur if Dynamic C
  is opened on a com port that is already in use.
- Defect #112 fixed.  In HTTP.LIB, file lengths are now
  represented by long integers to allow images and
  SSI-included files > 32kb.
- Defect #113 fixed.
- Defect #114 fixed.  Not a bug.  Warning should not be generated
  as arithmetic character expressions are promoted to integer.
  Improved typechecking for constant data initializers.  Shown
  program should not compile.
- Defect #115 fixed. Fixed constant initializers to match ISO/ANSI
  specification.  Only constant literals or static storage addresses
  should be allowed in initializer expressions.  Some complex 
  expressions with addresses are unsupported.
- Defect #117 fixed.  Oversized single and multi-dimensional root data
  arrays compiled due to 16-bit overflow.  Root data arrays now
  limited to a total of 32,767 elements.
- Defect #119 fixed.  Com port used by Dynamic C is correctly
  initialized.
- Defect #120 fixed.  Function prolog/epilogs are generated 
  inline if compiling optimized for speed, and are only used 
  when optimizing for size if the function includes debug 
  information, or if the function is nodebug and uses auto 
  variables.
- Defect #123 fixed.  Programs with certain compile time errors 
  caused the compiler to enter an endless loop.
- Defect #124 fixed.  Bug limits nesting of #if and #ifdef’s 
  to 3 or 4 levels.  New limit is 2048.
- Defect #126 fixed. printf problems with max neg int & long corrected.
- Defect #130 fixed. Landscape printing is corrected.
- Defect #131 fixed.  Using long symbol names in certain
  circumstances caused a general protection fault.
- Defect #135 fixed. HTTP header field names and SSI commands
  are now parsed in a case-insensitive manner
- Defect #138 fixed.  Programs with unclosed comments now generate
  an error during compilation. 
- Defect #142 fixed. RS-485 and D/A channel 1 are now
  compatible on newer Jackrabbits.
- Defect #144 fixed. Errors reporting undefined global symbols
  reoprt the line number on which the symbol is first used.
- Defect #146 fixed. Board specific libraries not #used
  in default.h if compiling BIOS now.
- Defect #147 fixed. Duplicate case statements will produce an error.
- Defect #154 fixed. Fixed short circuit evaluation logical
  expressions   with a constant first operand.
- Defect #156 fixed. Now pathnames starting with \\ such as
  \\zintranet\sweng\.. can be used.
- Defect #157 fixed - MSB is masked out when receiving 7bit serial data
- Defect #163 fixed. Dynamic C can now be installed to directories
  nested to many levels, and can run programs with long path names.
- Defect #165 fixed. pktdrv.lib will mark buffers while it is using
  them. This will prevent future problems with multiple net drivers
  sharing TCP/IP buffers
- Defect #172 fixed. Keyword checking on identifiers has been 
  implemented.
- Defect #174 fixed. Improved documentation of serial receive functions
- Defect #176 fixed. More checking is done on initializer lists. 
- Defect #180 fixed. Added to documentation for serXread()
- Defect #182 fixed.  It was possible for read_rtc() to
  occasionally read the RTC while it was updating, causing
  invalid data.  A similar function, read_rtc_32kHz(), was
  added to allow access to the RTC while running off
  the 32kHz oscillator.
- Defect #184 fixed.  pow(-x,y) would return a runtime error
  even if y was an integer.
- Defect #185 fixed. Cofunction write routines in RS232.lib now do
  a write unlock in the abandon clause.
- Defect #187 fixed. Syntax error with unions caused general
  protection fault.
- Defect #192 fixed. pd_resetinterface()--usually called 
  from sock_init()--no longer locks up on custom boards.
- Defect #193 fixed. Corrected field width problems with sprintf,
  with f, e format chars.  
- Defect #195 fixed. Scrolling the dump window could cause abnormal 
  program termination if programming cable is disconnected.
- Defect #196 fixed. Disassembling could cause abnormal 
  program termination if programming cable is disconnected.
- Defect #197 fixed. sock_read(), sock_fastread(), sock_write(),
  sock_fastwrite() now return -1 when a UDP socket is halted
  because of a ICMP Port Unreachable message.
- Defect #198 fixed. Bug with post inc/dec with type char.
- Defect #199 fixed. RS232.LIB function descriptions now documented
  as being non-reentrant.
- Defect #200 fixed. RS232.LIB functions separated into different headers
  to reduce code size.    
- Defect #201 fixed. Floating point operators >, <, <=, and >= 
  called the wrong comparison function when the compiler reorders
  the operands.
- Defect #202 fixed.  the xstring label points to the memory location 
  after the table, which holds the address of the first table entry.
- Defect #204 fixed. The invalid instruction ld r, (hl+d) now
  produces an error.
- Defect #205 fixed. Interference between #ximport and comments.
- Defect #208 fixed. The assembler would not allow long jumps
  to forward references.
- Defect #209 fixed. All serial interrupts are explicitly disabled during BIOS
  startup. This should eliminate target communication errors.
- Defect #211 fixed. Register collision not detected when mixing long and 
  int/char types in some expressions using the mod operator ’%’.
- Defect #213 fixed. A potential problem with reading and writing
  Ethernet packets whose length is 14 bytes more than an even
  256 byte multiple.
- Defect #214 fixed. A missing #endif could cause the compiler 
  to hang.
- Defect #215 fixed. A bug in the flash driver could prevent flash
  writes under special conditions.
- Defect #219 fixed. 2 error/warning messages were opening up under
  certain circumstances.
- Defect #222 fixed. POP3.LIB would not receive some messages if they
  had no message-body.
- Defect #223 fixed. ucos2.lib was not deallocating a task’s stack when
  the task was deleted.
- Defect #224 fixed. Code alignment problem that incorrectly generated a
  "Out of root code space" error.
- Defect #225 fixed. #ximport defined macro symbol as int instead of long.
- Defect #227 fixed. Default CTS/RTS macro values work properly
- Defect #228 fixed. Fixed a problem with extremely high (attack level)
  traffic handling in the RealTek packet driver.
- Defect #233 fixed. DNS lookups no longer overflow 512-byte stacks in
  uC/OS-II.
- Defect #234 fixed. When running in RAM, bug caused xalloc failure to go 
  undetected and would cause the program to crash.
- Defect #235 fixed. The PUSH flag is now set for all TCP packets that
  contain data.
- Defect #240 fixed. #ximport works correctly in header sections now.
- Defect #241 fixed. An If-Modified-Since header caused the HTTP server
  to close the connection.
Other Functional Changes
- The error window now displays a maximum of 10 errors, 
  10 serious warnings, and 10 trivial warnings.  Checks
  for warnings and errors are separate so that when one
  category is filled, messages from the other category 
  can still be reported.
- The coldloader can now be up to 0x4000 bytes in length.
- Any IO (ioe, ioi) instruction that immediately precedes
  certain 1 byte instructions using hl to access memory
  are now followed by a nop to fix hardware bug with 
  these instructions.
- sock_fastwrite() now refuses to send a UDP datagram that
  would need to be fragmented, instead of only sending out
  the first fragment 
- Target communication errors are now more informative, stating the
  high level activity being executed when the error occurred as well
  as the read/write address if applicable.
- Default MTU size for IP packets is set to 600. This allows for smaller
  packet buffers
- DCRTCP supports SYN queing, where new connections can be accepted and
  maintained before an available socket is made ready.
- Floating point code moved to xmem to save root code space.
- Pointer checking code was moved to xmem 
  and BIOS, start-up, and program code now immediately follow 
  each other to conserve root memory space. 
- Pointer checking initialization is now done at compile 
  time.  Turning runtime pointer checking off will reduce the 
  amount of root code space used by 256 bytes.
- The semantics of the keywords "xmem" and "root" apply to
  function prototypes.  
- New limits.h file (that is automatically included) defines
  constants representing the limits of representable values
  for C variable types (such as INT_MAX and INT_MIN)
- The flash buffer has been moved from root memory to XMEM, freeing
  up 1024 bytes of root memory for user programs and variables.
- Ctrl-S shortcut key for save file added.

Documentation Changes
- DC User’s Manual
   * Chap 2 Removed list of improvements over old Z180 version.
            Noted that DC can be used to program and debug over the Internet
   * Chap 4 Replaced graphic of primitive data types with limits.h values
   * Chap 4,11 class keyword added
   * Chap 4 Removed tables showing recommended prog. form; 
	    replaced with more readable text.
   * Chap 4 Improved descriptions of Modules and function pointers. 	
   * Chap 5 Added loophead(), loopinit() descriptions. 
            Noted that costatements are not used with indexed cofunctions
   * Chap 8 Added run-time errors to table: 250 and 251
   * Chap 10 New chapter on the flash file system
   * Chap 12 keyword descriptions updated for: const, class, xmem, xdata,
        xstring, memmap, while
   * Chap 14 Added new function descriptions: defineErrorHandler,forceSoftReset,
             fsck, read_rtc_32kHz, paddr, flashfile functions, removed
             Alloc_Stack Corrected various function descriptions
   * Chap 15 Noted that multiple instances of DC can run simultaneously
             Updated Compiler Menu, described new options
             Updated Compiler and Communications Options dialog boxes.
	     Updated Print description.

-Designer’s Handbook
   * Added appendix about baud rates
   * Updated information on flash driver
   * Updated table of supported flash memories

-TCP/IP High-Level Protocols
   * Added chapter on the Server Utility Library
   * Added chapter on Remotely Modifiable Variables
   * Added chapter on console.c
   * Added 2 appendices on HTML forms
   * Updated function descriptions, added sspec_setformepilog and
     sspec_setformprolog
-TCP/IP Function Reference
   * Added new flash file system functions
   * Added low-level flash memory access functions
   * Updated various other functions
-IP Drivers Manual
   * Created new manual for IP drivers; currently contains PPP driver. 


******************************************************
VERSION 6.57P2 / 6.57T2
Bug Fixes
-Added reference to LIB.DIR for POP3.LIB
******************************************************
VERSION 6.57P1 / 6.57T1

Bug Fixes
-Defect #192 fixed. pd_resetinterface()--usually called 
 from sock_init()--no longer locks up on custom boards.

VERSION 6.57

New features
-TCP/IP socket buffers are now in extended memory,
 thus freeing up some root memory and allowing more
 sockets to be used.  This change required several
 other changes:
 * Use the macro MAX_SOCKETS to define the number
   of sockets that will be allocated (not including
   the socket for DNS lookups). Code that uses more
   than 4 sockets will not work without using the
   MAX_SOCKETS macro.
 * Use the macro SOCK_BUF_SIZE to determine the
   size of the socket buffers--note that a TCP
   socket will have two buffers of size
   (SOCK_BUF_SIZE / 2) for send and receive, and a
   UDP socket will have a single socket of size
   SOCK_BUF_SIZE.
 * Define the macro DISABLE_DNS to disable DNS
   lookups.  This prevents a UDP socket for DNS
   from being allocated, thus saving some memory.
 * tcp_MaxBufSize should no longer be used,
   although backwards compatibility is preserved.
 * Auto sockets (sockets allocated on the stack)
   should not be used. When auto sockets are
   deallocated (go out of scope), their buffer area
   will not be freed for future auto sockets to use.
-TCP/IP stack is reentrant, and can be used with uC/OS
-New function xmem2xmem() added
-New cloning option, CLONEWHOLEFLASH, allows user to
 clone entire flash device or just the program code.
-Flow control and parity control added to serial library

Bug Fixes
-Defect #140 fixed. Calling tcp_config("HOSTNAME", ...) 
 after sethostname() now works correctly.
-Defect #150 fixed. Broadcast addresses of the form
 X.Y.Z.255 work correctly.
-Defect #167 fixed.  Bug caused the compiler to incorrectly evaluate 
 some #if expressions.  This problem only occured after a previous 
 compile error occurred.
-Defect #170 fixed. Cloning was not copying the
 top 32kb of flash.
-Defect #178 fixed. TCP sockets took 10 seconds to close
 when the remote side initiated the close.
-Any IO (ioe, ioi) instruction that immediately precedes
 certain 1 byte instructions using hl to access memory
 are now followed by a nop to fix hardware bug with 
 these instructions.
-Defect #181 fixed.  Jackrabbit D/A channel 1 was
 always disabled.
-Defect #186 fixed.  Jackrabbit D/A channels would 
 occasionally produce inverted voltages, i.e. a high voltage
 when a low voltage was requested and vice-versa.
-Defect #188 fixed. Corrected update of PDDRShadow in Jr485Init().

Documentation Changes
-TCP/IP An Introduction rev. D
 * tcp/ip and µC/OS-II compatibility documented
 * tcp_MaxBufSize deprecated
-TCP/IP Function Reference rev. B
 * MAX_SOCKETS, SOCK_BUF_SIZE and DISABLE_DNS documented 
 * Packet Driver functions deleted from category section
 * tcp_config documented
 * _arp_resolve documented
-TCP/IP High-level Protocols rev C
 * FTP_MODE_UPLOAD and FTP_MODE_DOWNLOAD documented
 * Chapter on POP3 added
-Dynamic C Users Manual rev. I
 * xmem2xmem documented
 * Help Menu screen updated
 * Error messages documented in run-time error msg. table
 * tcp/ip and µC/OS-II compatibility documented
 * write_rtc and tm_wr function descriptions updated
 * Delay function descriptions updated
 * serXread tmout parameter clarified
-Dynamic C Users Manual rev. J
 * Multitasking chapter overhauled
 * Dump at Address dialog box updated
 * serXparity description expanded
-Rabbit 2000 Designers Handbook rev. E
 * Cloning chapter updated
 


******************************************************
VERSION 6.56 
Upgrade Core Module Dev Kits from 6.52

New features
-New function Disable_HW_WDT added
 
Bug Fixes 
-Defect #154 fixed. Fixed short circuit evaluation 
 logical expressions with a constant first operand.
-Defect #131 fixed. Using long symbol names in certain
 circumstances caused a general protection fault.
-Defect #162 fixed. strncmp() and strncmpi() no longer
 compare beyond a null terminator.

Documentation Changes
-The Dynamic C User’s Manual revised to Rev H. The
 Function Reference now includes a functional grouping
 listing.
-Description of Disable_HW_WDT added.
-Descriptions of new serial flow control and parity
 functions added
-The Rabbit 2000 Designers Handbook is revised to Rev D.
 Improvements were made to the Cloning chapter.
 
******************************************************
VERSION 6.55 
Upgrade JackRabbit Dev Kits from 6.52

New features
-New functions strcmpi() and strncmpi() perform case-
 insensitive string compares
 
Bug Fixes 
-Defect #135 fixed. HTTP header field names and SSI
 commands are now parsed in a case-insensitive manner
-Defect #141 fixed. Clearing TACR bit for timer A1 usage,
 allowing reopening at a high baud after opening at a low
 baud that required the bit to be set.
-Defect #142 fixed. RS-485 and D/A channel 1 are now
 compatible on newer Jackrabbits.
-Defect #146 fixed. Board specific libraries not #used
 in default.h if compiling BIOS now.
-Defect #152 fixed. Board now correctly reads in ID
 block while running in RAM.

******************************************************
VERSION 6.54
Dynamic C Premier initial release

-No compiler or GUI changes. All libraries and sample 
 programs for all Rabbit based products released. 
-First release to include uC/OS-II. Jean Labrosse’s 
 real time kernel is now available royalty free for 
 Dynamic C for Rabbit users.

Bug Fixes
-Defect #129 fixed. Some #use lines in default.h were
 incorrectly commented out in 6.52. This caused compiler
 errors in some JackRabbit and LCST sample programs.

Documentation Changes
-The Dynamic C User’s Manual Revved to Rev F. A new
 chapter 6 on the virtual driver was inserted.

******************************************************
VERSION 6.53
New Features
-uC/OS-II Library and samples programs added. (Premier
 version only)   
-The Rabbit Field Utility, RFU.EXE has been added. This
 program is for loading BIN files created by Dynamic C
 to a Rabbit target without using Dynamic C.
-Highlighted text in assembly window now continuously
 updates sum of cycle times as the mouse is moved.

Bug Fixes
-Defect #48 fixed.  GPF occurred if initial BIOS compile
 was interrupted.
-Defect #77 fixed. Added function to update TICK_TIMER,
 MS_TIMER, and SEC_TIMER while running off 32kHz
 oscillator.
-Defect #78 fixed. The About Box can no longer have
 multiple instances.
-Defect #90 fixed. Lib.dir can now contain CR/LFs on the 
 last line.
-Defect #91 fixed. Unnecessary write to GOCR eliminated.
-Defect #92 fixed. The user BIOS file selection dialog
 box is now modal.
-Defect #95 fixed.  Bug introduced while fixing defect #64
 would disable Jackrabbit high-power outputs 0 and 1.
-Defect #104 fixed. Slice statement debugging works
 correctly.
-Defect #106 fixed.  ISR’s using ’interrupt’ keyword were
 not being forced to root.
-Defect #108 fixed.  ftoa was giving compiler errors due
 to missing headers.
-Defect #110 fixed. Shadow registers SxCRShadow are now
 being used in RS232.LIB serXopen and serXclose functions.
-Defect #111 fixed.  Fixed a problem with rx buffers on
 RealTek getting corrupted.  Optimized overflow handling
 in the ethernet packet driver.  
-Defect #121 fixed.  BIOS no longer assumes cloning mode 
 if PB1/CLKA pulled low unless cloning is enabled.
-Defect #122 fixed.  IB0CRShadow is now correct.

Other Functional Changes
-Updated PDDRShadow in Jr485Init().

******************************************************
VERSION 6.52
Bug Fixes
-Defect #88 fixed. Some relational expressions 
 were generating bad code.
-Defect #89 fixed. Missing SPxCR shadow registers added.
-Defect #96 fixed. Closing Dynamic C while the app. was
 minimized, then opening it, could cause bad registry 
 entries for the main window coordinates.
-Defect #97 fixed. Rearranged ports D and E register 
 initialization in BIOS to avoid occasional problems 
 when program is recompiled.
-Defect #98 fixed. SMTP.LIB (TCP/IP) now resets the 
 timeout value correctly when activity happens.
-Defect #101 fixed Recovered 8k of free space from top
 of RAM by moving up data segment to top.
-Defect #103 fixed. used correct TACR mask for serial
 ports A, B and D when low baud requires timer A.
-Defect #125 fixed. DNS cache lookups work consistently.

Other Functional Changes
-Data segment moved up in RAM to free more space 
 for xalloc.
-Core Module samples added.

Document Changes
-Major overhaul to Rabbit Designer’s Manual

******************************************************
VERSION 6.51 
Bug Fixes
-Defect #80 fixed. Post decrement of integers in logical
 expressions handled correctly now.
Document Changes
-#ximport description added 
 
******************************************************
VERSION 6.50 (Release 3)
New Features
- TCP/IP (Available with the TCP/IP dev. kit and 
 Premier versions of Dynamic C).
 TCP/IP stack with support for the RealTek NE2000
 Ethernet chipset.  Library support for:
 * Socket level TCP and UDP programming.
 * HTTP (web server ) with server side includes (SSI)
   and a CGI interface.
 * SMTP client (mail)
 * FTP client and server
 * TFTP
 * TELNET
 * PING

 Added to DC user’s manual as chap. 13.

-Fast Fourier Transform functions added:
 fftcplxinv, fftcplx, fftreal, fftrealinv, hanncplx,
 hannreal, powerspectrum
 Documented in DC user’s manual.

-A new flash driver has been added to the BIOS.  This
 driver recognizes a variety of small-sector flash
 devices and manufacturers.  In addition, an
 "ID block" on the flash device containing useful
 information about the product is now supported.
 A new macro, _BOARD_TYPE_, is internally defined by
 Dynamic C using the a field of the system ID block.

-Support for "cloning" (copying the contents of one
 board’s flash device to another board via a special
 cable) has been added to the BIOS.  See the designers’
 manual for more details.
 
-Dynamic C now determines the sizes of the RAM and
 Flash automatically so that manual changes to BIOS
 code are no longer necessary for different memory
 sizes. The determination is done during the boot-
 strap stage and is based on the hardware present.

-"No debug compile" compiles all code as "nodebug" 
 to flash memory on target.  To run the program
 after compiling with this command, disconnect
 the target from the programming port and
 toggle the reset line.  Documented in DC user’s 
 manual in chap. 12.

-"Compile to .bin file" compiles the program to a file 
 with the .bin extension.  The .bin file may then be used 
 with a flash burner to program similar flash devices.
 Documented in DC user’s manual in chap.12.

-Selecting RAM or FLASH located in the 
 "Default BIOS Memory Setting" box in the "Compiler" 
 options window now defines the macros _RAM_ or 
 _FLASH_, respectively.  Using these macros,
 a single, user defined BIOS file can be developed 
 for both types of memory.  Documented in DC user’s
 manual in chap. 12.

-The Help menu has new commands, "Operators" and
 "Keywords" which open the HTML index pages for the
 descriptions of those items.

-Stack Allocation Functions added; documented in DC user’s
 manual.
___________________________________________________

Other Functional Changes

-Constant data may be created in extended memory
 through the constructs xdata and xstring.
-Supports extended memory (xmem) allocation 
 through function Xalloc.
-Supports allocation of multiple stack sizes 
 through function Stack_Alloc.
-Sample program SEEPARAM.C added.
-RAM and flash BIOS files were merged.
-Serial open functions now automatically modify timer A1
 and use timer A1 when the baudrate specified is low
 enough to require a timer A1 modification.
-The two BIOS source files, JRABBIOS.C and JRAMBIOS.C
 have been replaced by one file, RABBITBIOS.C
-PILOT.BPF was renamed to PILOT.BIN
-JRABBIOS.RTI was renamed to RABBIOS.RTI
-The cycle time total in the assembly window is
 now updated continuously, not just when the mouse
 button is released.
-sprintf, printf and several other functions were made
 reentrant. The uC/OS-II documentation specifies which
 library functions are not reentrant.
-A new macro CLOCK_DOUBLER in the BIOS was added. If this
 macro is set to 1 (default) then clock speed is doubled
 by the BIOS code if the crystal frequency is <= 12.9 MHz.

Bug Fixes

-Defect #17 fixed. Illegal use of type void is now  
 caught by the compiler.
-Defect #20 fixed. Adding a char to char value returned
 from a function works now. Compiler now promotes character
 math to integers to fix the bug and to more closely match 
 ISO/ANSI C.
-Fixes bug with expression "*(p++)" where p is a pointer.
-Defect #22 fixed. Crashes were happening when too large a 
 string was created with concatenation using continuations.
-Defect #27 fixed. Log functions now cause run-time 
 error if given zero for an argument instead of returning
 a garbage value.
-Defect #28 fixed. pow(-0,1) returns zero instead of 
 causing a run-time error.
-Defect #29 fixed. Serial port ISRs no longer write 
 incorrectly to status registers.
-Defect #30 fixed. Comments corrected for serial sample
 programs.
-Defect #31 fixed. The main application window now
 retains its position, size and maximization state 
 between runs.
-Defect #32 fixed. setvect and getvect documentation 
 removed from manual.
-Defect #35 fixed. Changing the user defined BIOS now takes 
 effect immediately.
-Defect #36 fixed. Virtual watchdog timers can be allocated 
 and deallocated more than 10 times.
-Defect #37 fixed. Access to the first array element of 
 char pointer in an array of structures generates correct 
 code now.  
-Defect #38 fixed. DC now compiles files using
 UNIX style newlines.
-Defect #41 fixed. Problem with bitwise operators 
 ’&’,’|’, and ’^’ with char operands.
-Defect #42 fixed. Problem indexing arrays with auto variable
 as index corrected.
-Defect #43 fixed. Error with subtraction of constants in 
 pointer arithmetic corrected.
-Defect #44 fixed. Last line of library files was not compiled
 if a newline was not present.
-Defect #46 fixed. Specifying string length with a variable
 argument in printf, sprintf now works.
-Defect #47 fixed. Problem with incrementing/dereferencing
 a pointer corrected.
-Defect #51 fixed.  Xmem defect no longer crashes.
-Defect #52 fixed. Casting addresses of integers to integers
 now longer causes incorrect dereference.
-Defect #54 fixed.  Using a variable for the precision 
 specifier in  sprintf, printf floating point output 
 now works.
-Defect #55 fixed.  Returning a long value from a cofunction
 to an auto variable was generating an internal error.
-Defect #56 workaround.  A hardware bug that
 affected external interrupts has been circumvented
 via a new function, SetVectExtern2000(). Sample 
 program Samples\Intrupts\Int0demo.c has been modified
 to reflect use the workaround. A new function
 GetVectExtern2000() has been created  also.
-Defect #57 fixed.  DC now correctly dereferences and casts 
pointers from unsigned longs to unsigned integers.
-Defect #61 fixed. For find, find/replace, disassemble at 
 address, and dump at address dialogs, current search
 string is properly added to list of previous search strings.
-Defect #62 fixed.  Clock counts in the Assembly window 
correctly now.
-Defect #63 fixed. Assembler generated bad code
 for adc hl’, hl and rl hl’.  The latter now generates
 a compiler error.
-Defect #64 Fixed. jrioInit now properly sets port E pins
 for A/D.
-Defect #66 Fixed. Bug that prevented use of 29MHz crystals.
-Defect #67 Fixed. Problem choosing between jump relative and 
 jump conditional with nodebug for loops.
-Defect #68 Fixed. Bug with compiling C statements embedded
 in assembly code across the xmem page boundary. 
-Defect #69 Fixed. Bug in compiler that prevented code
 generation above 512k.
-Defect #70 Fixed. Compile information reported in
 prog_param structure and information window now correct.
-Defect #71 Fixed. Placed the inline function bit/BIT into
 root memory. 
-Defect #72 Fixed. Support is now given for serial baudrates 
requested in serXopen(baudrate) for which a divisor greater 
the maximum allowable 255 would be required, by prescaling 
with Timer A1.
-Defect #73 Fixed. Cofunctions with abandonment code
 were not properly restoring the xpc.
-Defect #75 Fixed.  periodic_init was not using the
 GCSR shadow register.  Now does.
-Defect #76 Fixed. Compiler allowed slice statements to access
 variables with local extent instead of causing a 
 compile-time error. 
-Defect #79 Fixed. Allow timer to decrement to zero 
 after setting for baud rate divisor. 

Other changes in the DC user’s manual
-Chapter 9: addition of keywords, xdata and xstring
-References to RS232.lib were changed to SERIAL.lib
-Chapter 11: setvect and getvect deleted.  SetVectIntern, 
 SetVectIntern2000
 GetVectIntern, GetVectIntern2000 were added.

******************************************************

VERSION 6.19
New Features
-Compiler now recognizes 32 significant characters in
 identifier names.

Bug Fixes   

-Defect #56 workaround.  The hardware bug that
 affected external interrupts has been circumvented
 via a new function, SetVectExtern2000().
-A new function GetVectExtern2000() has been created 
 also.
-Defect #34 fixed. Serial open functions no longer 
 dependent on value stored in battery backed RAM.
-Defect #59 fixed. Integer division by constants equal
 to powers of 2 + 1 now works correctly.
-Target reset/BIOS compile is now suppressed when the
 warning report options are changed.
-Defect #60 fixed. Fixed problem with printing on some 
 operating system/printer combinations.

******************************************************

VERSION 6.18
Bug Fixes   

-Fixed bug with inline function bit/BIT.
-Added prototypes to util.lib so that inline 
 functions bit, set, res, ipset, and ipres compile.
-Fixed parsing bug with ipres.
-Defect #33 fixed. Fixed communication error messages 
 "CE_FRAME" and "CE_BREAK" that were happening on 
 some PCs.
-Fixed bug where BIOS compiles when Warning Report
 options change.

******************************************************

VERSION 6.17
New Features

 The processor instruction cycle times are now 
 displayed in a column to the right of each opcode
 in the Assembly window. Selecting text in the 
 Assembly window replaces the cycle time in the 
 lowest selected row with the total of the cycle 
 times in the selection when the left mouse button 
 is  released. On the next mouse click, the original
 cycle time is restored. There are some instructions
 whose time cycle times depend on whether a branch is 
 taken or the count stored in BC. These are not 
 totaled  and an asterisk will appear next to the 
 total time if they are selected. Cycle times assume
 0 wait states.	

 The online documentation can be accessed from a new
 Help Menu command. The default URL can be changed
 in the Registry entry:
 Software/ZWorld/DCW/Rabbit/6.17/Dynamic C Personality/DEFAULTURL

 The Dump feature now has an option to dump the flash
 image to a binary file.
______________________________________________________

Other Functional Changes

-Floating point math including transcendental functions
 has been speeded up considerably. 
-The BIOS and programs are now compiled from file 
 unless the corresponding edit window is dirty.
-Function chains now work between the precompile 
 section (after the pragma in the bios) and the user 
 program compile.
-The #precompile can be used after the pragma to 
 precompile library functions.
-The compiler options now support a persistent user 
 selected BIOS file.
-Code generated for relational operators (signed/unsigned
 integers), post-increment, and "nodebug" loops is faster.
-Compiler now uses sp relative load/store and jump 
 relative instructions for faster/smaller code.
-Integer assignment to zero is faster.
-Dynamic C now takes a command line option (-c <name>) 
 to append a string to the version number registry sub key.
 This change allows multiple installations of the same 
 version.
-Added missing Interval Tick function
-Added some sample programs
-Dump window now accepts segmented root address, bb:aaaa.
-Printing of selected text, specified page ranges, and 
 user control of print margin settings are now implemented.
-Serial port options extended to include COM7: & COM8:
-"Assembly code compiled to xmem" warning disabled

Bug Fixes   
-useix was being ignored, this is fixed
-Issuing a compile while a program is running shows the 
 correct program name in the dialog.
-Xmem boundary checking is improved.
-Added necessary library support for the interrupt keyword
-Fixed bugs in anaIn function that could cause port A to 
 change values.
-Fixed bug with pointer and character type addition.
-Slice statement tick now matches TICK_TIMER.
-Fixed a problem with slice statement yield and waitfor.
-Fixed a problem with bitwise operations on functions that 
 return a character.
-LIB.DIR file was not being closed properly after checking 
 it for updates.
-Fixed bug where calling root cofunctions from xmem did
 not restore xpc.
-Removed shortcut key conflicts on the Options and Edit 
 pull down menus.
-Fixed access violation when attempting to close 
-Memory leaks repaired
-Fixed a problem with xmem address check for
 switch statements and cofunctions.
-Fixed general protection fault caused by interaction
 between message window and source windows.
-Fixed printf bug for smallest signed int (-32768).
-Fixed bug with string literals located in global
 assembly blocks.
-Fixed bug that was reporting atan(-1) as pi/4, now -pi/4
-PDCR was not addressed in Jr485Init(), but now is set to
 0 (pclk/2) to resolve possible contention with DA1.
-Fixed bugs with jumps across xmem page boundaries.
-Fixed bug in serDputc, return value was 0 if unsuccessful
 but uninitialized if the character was successfully put.
-Fixed alignment/allocation of constant data pointers.  
-Fixed message box bug with closing modified edit windows.
-Fixed sqrt(-0.0) it now returns -0.0

******************************************************

VERSION 6.04D
Bug Fix	
- storage of freq_divider in the RAM BIOS source was  
  incorrect causing serial open functions in serial 
  library to set the wrong baud rate when running from
  RAM.

******************************************************

VERSION 6.04C
Bug Fixes	
- Installation
    Remove Read-only attributes from Dynamic C root 
    directory during installation.
Updates
- JackRabbit Board Schematic 090-0092.pdf updated.
- Added C operator reference to Dynamic C Help.

******************************************************
