This is version 1.2.1 of the nesC compiler.

Installation instructions are in INSTALL. Note that nesC needs patched
versions of the GNU assemblers for the avr and msp430 architectures. For
more information, check the INSTALL file.

Changes in nesC 1.2.3
=====================
- provide network type information in nesC dump output
- bug fixes

Changes in nesC 1.2.2
=====================
- nescc-wiring tool to check wiring constraints - see man page for details
- python mig, ncg support
- XML schema update (should now match nesC dump output)
- Java code now made available in compiled form as nesc.jar (rather than
  in source form)
- bug fixes

Changes in nesC 1.2.1
=====================
- external types (nx_...) can now be passed as parameters and returned as
  results
- updates to XML dump information to support nesdoc
  in particular, remember typedef names
- bug fixes

Changes in nesC 1.2
===================
- generic components and interfaces. See doc/user/generics-1.2.txt. 
  nesdoc does not support generic components and interfaces (this should be 
  supported in the next release).
- configuration implementations and component specifications can now 
  include type and constant declarations; configuration implementations
  can refer to these types and constants. These changes are described
  alongside the generic component changes, in doc/user/generics-1.2.txt. 
- attributes (Java 1.5-style). See doc/user/attributes.txt.
- binary components. See doc/user/binary-components.txt.
- external types, a revamp of nesC 1.1.3's network types. See 
  doc/user/network-types.txt.
- "includes" is deprecated - use #include instead; note that you
  must use #ifndef/#define/#endif for #include'd files in the usual
  C style.
- macros in included files now work in ways that are similar to C
  (as long as you use #include instead of includes).
- support for compiling task/post into an interface + wiring: this
  allows the scheduler to be implemented as a component.
- return can be used in atomic statements (implicitly terminating
  the atomic statement).
- the patched AVR assembler has been unbundled from nesC.
- the ncc, mig and nesdoc scripts have been unbundled from nesC (they
  are now distributed with the other TinyOS tools).

Changes in nesC 1.1.3
=====================
- network types: platform-independent types to support heterogeneous
  networking. See doc/network-types.txt.
- support passing assembler options for nesC programs with -Wa, as usual w/ gcc
- support -I- correctly (see gcc manual)
- initialiser bug fix (some initialisers crashed nesC)

Changes in nesC 1.1.2
=====================
- Misc bug fixes (in particular, work around latest-cygwin weirdness which
  causes file corruption)
- Recognise the gcc noinline attribute and don't automatically inline such
  functions (patch contributed by Klaus Madsen, nesc@hjernemadsen.org)
- Mac OS X support; avr-gcc not needed when compiling nesC
- Support gcc's -I- idiom to prevent searching current dir for components,
  interfaces, etc.
- 64-bit platform support: compile with -DLARGE_ADDRESSES, and 
  edit the MEMSLICE1 constant in src/libcompat.regions.c to be the number
  of unused high-order bits on your platform
- ncg supports C (note that there's no C mig support yet)

Changes in nesC 1.1.1
=====================
- Support for platforms and sensorboards in directories other than 
  tos/platforms and tos/sensorboards: a platform or sensorboard 
  can be used if its directory is specified with an explicit -I directive
  (see doc/ncc.html for details).
- support for Tython
- support -Wparentheses (warnings on statements like 'if (var = value) ...',
  and other similar C pitfalls)
- nesC editing modes for emacs, vim and kde (kate, kwrite, kdevelop):
  these are in tools/editor-modes, and get installed to 
  <installdir>/lib/ncc/editor-modes. Read the appropriate readme.txt file
  for installation directions
- msp430 and env targets (env gets the machine specification from an
  environment variable and is intended to ease implementation of new
  platforms, see doc/envtarget.html for details)
- new hwevent, atomic_hwevent attributes to tell nesC which functions
  are interrupt entry points (hwevent: interrupt entry point, invoked
  with interrupts enabled; atomic_hwevent: interrupt entry point, invoked
  with interrupts disabled) - these should ease porting to new platforms
- new keywords (future use): abstract, component, extends, generic, new
- A few small bug fixes

Changes in nesC 1.1
===================
- Support for new language features:
  o atomic sections
  o compile-time data race detection
  o explicit marking of asynchronous (aka interrupt) code (async keyword on
    commands and events)
  o automatic combining of results of multiply-wired functions
  o initialisers now supported on module variables
  o uniqueCount(<string>) function to complement unique(<string>), returning
    the number of uses of the latter (useful for dimensioning arrays...)

- new nesC warning flags/changes:
  o -W[no-]unexpected-docstring is now -Wnesc-docstring, and defaults to off
  o -W[no-]nesc-fnptr: warn for uses of function pointers
  o -W[no-]nesc-data-race: turn on[off] compile-time data race detection
  o -W[no-]nesc-async: warn [bug in alpha: error] if asynchronous code calls
    synchronous code
  o -W[no-]nesc-combine: warn when multiply wired functions do not have
    a combining function defined on the result type. See tos.h for the
    the combining function definition for result_t
  o -Wnesc-all: same as -Wnesc-data-race -Wnesc-async -Wnesc-fnptr and
                -Wnesc-combine

- The NESC preprocessor symbol is defined to XYZ, where X is the major
  version, Y the minor and Z the patchlevel. So nesc 1.1 defines NESC as 110

- Tool chain changes:
  o ncc has been split into two files: ncc and nescc
    TinyOS-specific code is in ncc, nescc is a "generic" nesC compiler
    (nescc does not automatically include tos.h, and does not automatically
     add the TinyOS directory structure to the search path)
  o the -fnesc-include=<filename> option includes a C file before compiling
    the requested component (used by ncc to include tos.h...)
    You can specify several -fnesc-include=... options
  o A hardware platform X can now more easily be added:
    - create directory .../tos/platforms/X
    - place a .platform file in .../tos/platforms/X. Look at existing
      .platform files for inspiration.
  o A sensor board Y can add directories to the search path if there is
    a .sensor file in the .../tos/sensorboards/Y directory
    (as with .platform, .sensor is just perl code so can modify the
    variables used by ncc to achieve whatever effect is necessary)
  o set-mote-id works for programs greater than 64K

- New tool to extract (enum) constants from C code: ncg. Usage is similar
  to mig.
- Debugging on mica supports with the Atmel JTAG ICE and the AvarICE
  project (at http://sourceforge.net/projects/avarice)

- Some improved error messages, miscellaneous bug fixes

