- ?/??/????, Phase Seven of the Module System
  + (builtins) primitive added to core.
  + (builtins) added to lib/fakevm.scm.
  + Any reference to an identifier not bound in builtins, imports is identified
    during compilation as an error.

- ?/??/????, Integration of the Massive Interface
  + Integration with Massive to provide a portable, simple graphic interface
  to MOSVM applications.
  + Add site configuration settings for "terminal"

- ?/??/????, MOSREF Release 2.0
  + Bug: The scanner does not warn when it has run out of file descriptors.
  + Bug: repeated recover is permissible without the drone actually connecting
  
- ?/??/????, MOSREF Transcripts and Persistent Drone Sessions
  + All commands generate information into a console transcript.
  + The console transcript may be read to reconstruct a console's state in a
    new session.
  + A console will accept restarted drones if the drone is not currently 
    affiliated.
  + Add a drop command to forcefully disconnect drones.

- ?/??/????, MOSREF Session Recovery
  + When a drone node record is created, it is stored in the transcript.
  + When a console node record is created, it is stored in the transcript.
  + When mosref loads, it may be supplied with a transcript, which will be used
    to recreate console and drone node records.

- ?/??/????, MOSREF Node Prod Command
  + Added the mosref/service module.
  + Added (add-mosref-service node proto addr portno) to mosref/service.
  + Added (services-by-addr addr) to mosref/service
  + Added (services-by-node node) to mosref/service
  + Added (services-by-port port) to mosref/service
  + Added (mosref-can-merge? service ..) to mosref/service, which returns true
    if all listed services share the same address and port.  (Should this check
    for prod tags, as well?)
  + scanner reports hosts that have reset, hosts that have rejected to the console
    to permit detection of congested networks and slow responding services.
  + console records services by the node that found them, their address, protocol
    (TCP) and port number.
  + Added the prod command which, given the service information from above,
    transmits various stimuli and analyzes the response to classify 
    identified services.
  + Added the merge command which, given a list of nodes, attempts to determine
    if services accessible by one of those nodes are accessible by the other nodes.
    Services that do not merge may indicate increased host-specific trust
    relationships.  Services that do merge may give insight about network
    toplogy.

- 7/29/2006, MOSREF Beta Three
  * Fixed a bug in lib/socks-server related to parsing shared authentication 
    secrets.
  * The proxy command now accepts an optional shared authentication secret.
  * Report failed affiliation attempts and reset state.
  * The nodes command no longer causes a node to assign a listener port number if
    one has not been previously assigned.
  * Modified the network monitor to handle EWOULDBLOCK correctly -- this signal
    occurs frequently on win32 when under load.
  * Modified the bridge monitor to silently drop fail messages.
  * Fixed spawn-command to properly close when the child does.
  * Modified the shell command to no longer require the sword-of-damocles trick.

- 7/28/2006, MOSREF Scanner Improvements
  * Added (peer-addr stream), and altered network monitor to use getpeername 
    to detect a successful connection instead of the less portable technique of
    sending zero bytes.
  * MOSVM will automatically expand the number of file descriptors available to
    MOSVM to the maximum permitted for the current user on POSIX systems.  
  * Added (close-stream stream), which immediately closes the specified stream.
    Unlike (send 'close stream), this will not permit the continued transmission
    of queued data.
  * Fixed erroneous help documentation for scan.
  * Fixed recover command; now correctly uses the edge node, not the current
    node for the listener.
  * Worker processes in the scanner use a randomized initial delay in an effort
    to ease impact on weak TCP/IP implementations.  Previously, the workers would
    start in a synchronized fashion, initiating up to a thousand connections at the
    same time.
  * Adjusted the scanner defaults in favor of higher reliability, lower speed
    scanning.
  * On successful affiliation, the peer address of the node is reported to the
    console.

- 7/23/2006, MOSREF Drone Recovery
  * When a bridge is closed, all lanes and the bridge-lanes channel are 
    sent a close notification.
  * When a drone loses connection, all console displays are notified with
    an alert, and the drone is marked as offline.
  * When a command attempts to transmit a command to an offline node, an
    error is posted and the command rejected.
  * The mosref command now considers the initial address and port arguments
    optional.  The user may subsequently use set addr and set port.
  * The old prompt for windows users has been removed.
  * The cp command now defaults to the console, instead of the current node,
    for file location.
  * The drone command now defaults to the console, instead of the current node,
    for file location.
  * Renamed mosref/base to mosref/transport.
  * Merged mosref/endpoint into mosref/transport.
  * close-listener now causes the listener to emit a close message.
  * MOSREF console now exits when the last display closes.
  * Moved old set behavior to with.
  * Added a simpler set command that simply updates the property without
    possibly resetting it.
  * Modified shell parser to recognize x=y as set x=y
  * Revised the drone command to use patch and listener, to broker multiple 
    control connections to a single port.
  * Added a clear command that clears one or more properties on the current
    node.
  * Added (channel-prepend! channel value) to core primitives.
  * Added mosref/listener module, which manages multiple session listeners
    grouped by ports and selected by a random 16 byte session key.
  * Added mosref/patch module.
  * Added (patch in out) to mosref/patch, which spawns a process that will
    transmit all data received from an input to an output until the input
    signals a close.  ( The close will be forwarded, as well. )
  * Added (patch2 left right) to mosref/patch, which patches left to right
    and right to left.
  * Consoles tag themselves with a platform.
  * Drones tag themselves with a platform after they complete affiliation. 
  * When a node tries to construct a listener for the first time, if a portno
    has not been assigned, it will randomly select one.
  * Replaced ad-hoc property parsers, validators and formatters with a more
    formal property specification framework.
  * The service identification number and console ecdh key associated with a
    drone node is now stored in the drone record.
  * Drone node records are now created before the server waits for the drone.
  * After affiliation, drone records are updated with online status.
  * The recover command causes a node to listen again for the affiliation of
    a known offline drone.

- 7/20/2006, MOSREF Drone Proxying
  * Added lib/socks-server, a partial implementation of logic required for
    implementing a SOCKS4 proxy server.
  * Added (format-socks4-response granted portno addr) to lib/socks-server
  * Added (parse-socks4-request str) -> (auth proto addr portno) to 
    lib/socks-server
  * Added the proxy command, which creates a proxy on the console that forwards
    incoming TCP connections to the current node.
  * Added lib/socks-client, an implementation of a socks4 client library.
  * Added spawn-socks4-proxy to lib/socks-server, an extensible socks4 proxy.
  * Added close support to lanes in lib/bridge; sending close to a lane will
    cause the remote lane to receive a close message and the respective xmit
    recv tags to be reclaimed.  Note that this is a "half-close", both sides
    must send 'close to completely remove themselves from the bridge.

- 7/17/2006, MOSREF Drone Bridges
  * Added (make-reserved-lane bridge) -> lane to lib/bridge; unlike make-lane,
    lanes created on one end of a bridge do not appear in the bridge-lanes 
    channel on the remote end -- they must be picked up with find-reserved-lane
  
  * Added (find-reserved-lane bridge tag) -> lane to lib/bridge
  * Exposed (lane-tag lane) -> str from lib/bridge
  * Added test cases for find-reserved-lane, lane-tag and make-reserved-lane to
  * Added properties to nodes, and the set command to manage properties.
  * Added (node-tcp-listen node portno) to mosref/cmd/drone; yields a list
    of close-func and lanes containing information received by a remote tcp
    listener.

  * Drones may now act as bridges for other drones by tunnelling the control
    protocol for the remote drone inside the control protocol for the 
    bridging drone.

- 7/16/2006, MOSREF Shell Refactor
  All commands for the MOSREF shell can now be found in mosref/cmd/<verb>.ms; 
  the drone programs required to implement these commands are included in the
  command modules, instead of cluttering the mosref/node module.  The overall
  intent is to greatly simplify the effort required to add new commands.

- 7/15/2006, MOSREF Drone Port Scanning
  * Added the scan command to the mosref shell to perform TCP port scans from
    the current node.

  * Overhauled the scan task generator in mosref/scanner to generate scan
    tasks in constant memory.

- 7/15/2006, Generic Iteration
  With the introduction of coroutines, it has become obvious that lib/iterate
  is too rooted in the old Lisp notion of map and for-each.  All of the
  functions in lib/iterate -- except for find, list-index, and find-tail -- now 
  accept dictionaries, sets, and functions instead of just lists.  Functions 
  are called each time the iterator wants an item, and may throw 'done to 
  indicate that they are out of items.

  * Added lib/catch, which contains macros to simplify writing guards.
  * Added (catch-cond conds stmt ..) to lib/catch
  * Added (catch-case cases stmt ..) to lib/catch
  * Added (join-iters iter0 iterN ..) -> iter to lib/iterate
  * Added (integer-range min max) -> iter to lib/iterate

- 7/14/2006, Multiple Monitors
  Multiple monitors may now wait on a single channel -- this is needed by
  the mosref scanner, since a single channel is expected to generate work
  for multiple workers.

  Now, when more than one process is waiting on an empty channel, the first
  process to wait on the channel will get the next event, and so on, in a
  round robin fashion.

  For simplicity, it is no longer possible a process to wait on multiple
  channels.  This was only used in unit tests in MOSVM and MOSREF, and was 
  of limited utility.

  * removed prev and next members from channel
  * replaced channel monitor member with first_mon, last_mon 
  * modified mqo_is_stream_reading to use first_mon, not monitor member.
  * modified mqo_add_monitor to support multiple monitors
  * modified mqo_remove_monitor to support multiple monitors
  * renamed mqo_clear_monitors to mqo_clear_monitor
  * modified mqo_clear_monitors to employ mqo_remove_monitor instead of taking
    direct action on the channel fields.
  * modified mqo_trace_channel to trace multiple monitors
  * modified uses in unit tests of multiple-wait.  ( The wait/doom functions )

- 7/14/2006, Coroutines Added
  MOSREF's permutations generator can be very expensive in terms of memory,
  which means MOSVM's crude mark-and-sweep GC will consume increasing amounts
  of CPU time.  ( O(n) )

  Coroutines can moderate that cost, making scanning nodes much faster when
  dealing with large scan spaces.

  * Added the lib/coro module, which supplies a macro for defining coroutine
    generator functions.
  * Added the (define-coro formals . body) macro to lib/coro
  * Modified mosref/scanner to use coroutines to generate scan tasks.

- 7/9/2006, MOSREF Console Shell
  * MOSREF now started with:  mosref address:portno 
  * Added mosref/node, which encapsulates an node that can be addressed by
    the console and assigned work.
  * The concept of "current node" added to permit the REPL to designate
    which node should perform a command.
  * Added the mosref/shell module.
  * Added (mosref-shell) to the mosref/shell module; interacts with process
    input and output to provide a console shell.
  * Switching between nodes performed with: on <node> [command]
  * Exiting MOSREF performed with: exit
  * Nodes are listed with: nodes
  * Commands are listed with: help
  * Help on a particular command is listed with: help command
  * Files are referenced, from the current node, with the file's path, or
    by a pair of node-id and path, separated by a colon.
  * Files are copied with: cp src dst
  * Files may be accessed and modified on console nodes.
  * MOSREF Drones are created with: drone file id platform [portno]
  * Local lisp commands are performed with: do <expr>
  * New shell windows created with: fork
  * Programs may be loaded onto nodes using: load <path>
  * Drones may import modules from the console.
  * Host shell commands are evaluated with: sh <command>
    NOTE: This is somewhat buggy, because most utilities do not close stdin,
    which can cause MOSREF to assume the stream will never yield.  Currently,
    MOSREF will wait roughly 500ms, then terminate.  A future version of
    MOSREF will employ waitpid, here.
  * locate-path will now return false when a file cannot be found.

- 7/01/2006, MOSREF Prod
  * Added (list-refp list index) -> pair, similar to list-ref, except it
    returns the index'th pair in the list.

    >> (define a '(v w x y z))
    :: (v w x y z)
    >> (define b (list-refp a 2))
    :: (x y z)
    >> (set-car! b 101)
    >> b
    :: (101 y z)
    >> a
    :: (v w 101 y z)

  * Added the lib/args-fu module, which provides functionality useful for
    constructing complicated keyword argument parsers common with Common Lisp
    environments.  See mosref/prod.ms for examples of usage.

  * Added mosref/prod, an expert system for interrogating network services
    discovered by mosref/scanner and classifying their response for the
    operator.

- 7/01/2006, Build System Overhaul
  * bin/mosc now accepts zero or more module arguments -- it will build all
    of the listed modules, in dependency order.
  
  * bin/mosc also accepts a -exe <program> flag, instructing mosc to produce
    an executable program, much like build-exe.

  * compile now imports modules, instead of trying to guess the imported 
    symbols and macros.  For complicated macros, this greatly improves
    reliability, and, more importantly, more closely resembles user
    expectations.

  * mosvm stubs now invoke the (main) function at the end of load

- 6/28/2006, MOSREF Scanner
  * Added (| integer mask ...) -> integer, which performs a bit-wise or.
  * Added (& integer mask ...) -> integer, which performs a bit-wise and.
  * Added (<< integer offset) -> integer, which performs a bit-wise shift-left.
  * Added (>> integer offset) -> integer, which performs a bit-wise shift-or.
  * Added (^ integer offset) -> integer, which performs a bit-wise shift-or.
  * Added (! integer offset) -> integer, which returns a bit complement.
  * Added a Knuth / Fisher-Yates shuffle module, lib/shuffle.
  * Added list->vector and vector->list primitives.
  * Added (scan host-list port-list conns timeout) to mosref/scanner, which
    will populate the recon database with contacts as they are found.

- 6/28/2006, Second Generation Bootstrap
  * Modified the build process to permit building MOSVM without a supporting
    scheme compiler if either a previous installation of MOSVM is available,
    or if the Mosquito Lisp dependencies of MOSC and MOSVM have not changed.

  * Added display fix for bin/manifest under MOSVM, submitted by Ari Johnson.

- 6/27/2006, MOSVM Installer
  * Add an install.ms script for unix users.
  * Add an install target for unix users.
  * Added the (locate-file file-name path ..) -> file-path primitive.
  * Modified the MOSVM stub loader to locate itself by analyzing the path.
  * Add the -mwindows flag for mosvm to prevent creating a console.

- 6/26/2006, Spawn Terminal
  * Added lib/terminal, a module that provides a way to spawn a new terminal
    in a variety of environments.
  * Added the *platform* global variable to core -- *platform* matches the
    MOSVM platform identifier for the current virtual machine.
  * Added the (close-listener listener) primitive.
  * Added lib/env, a module that provides convenient access to the environment
    variables found in *environ*
  * Modified bin/mosvm to use lib/terminal on win32 hosts.

- 6/25/2006, MOSREF Restoration
  * MOSREF now creates binaries for distribution again.
  * MOSREF employs bridges and endpoints, making it more flexible for adding
    new plugins.
  * Added lib/options, a library for constructing Common Lisp named arguments;
    slow but versatile.
  * Modified traceback to also permit tracing back into a string.
  * MOSREF now spawns an eval process on the drone, instead of doing a complete
    spawn every time it wants to eval.  The eval process sends feedback
    asynchronously to the drone, via the bridge.
  * Added lib/cons-filter
  * Added lib/format-filter

- 6/24/2006, Win32 Restoration
  * MOSVM now compiles and operates under win32, with the absence of *stdio*,
    and spawn-command.  Asynchronous I/O under win32 requires a considerable 
    amount of time and effort -- time that is not available to EphSec.
    
    For win32 developers with netcat installed in their PATH, the winrepl
    script will use netcat to fork off a window and spawn a REPL process.

  * Added an optional argument to traceback, a channel to output the traceback
    to.  When omitted, the traceback will be printed, which is the current
    behavior.

  * Fixed a bug with guards where the guard statement's result is emplyed as
    an argument.

  * Modified the REPL to forward tracebacks correctly.

- 6/22/2006, Shell Commands
  * Added (spawn-command path ?arg-list ?env-list) -> stream to primitives. 
    Note that this will not work on windows, since Windows does not make it 
    easy to interact with the input and output of a command.
    
    >> (define x (spawn-command "/bin/cat"))
    -- [stream 80FC160]
    >> (send "Alpha" x)
    >> (wait x)
    -- "Alpha"
    >> (send "Beta" x)
    >> (wait x)
    -- "Beta"
    >> (send 'close x)
    >> (wait x)
    -- close
    
  * Added the *environ* global variable, which contains a list of assignments
    commonly found in environ(7) on POSIX systems.

  * Added (run-command command-string), which runs a command in the host
    environment's shell, and waits for a return.  Unlike spawn-command, this
    will work on Windows.  Caution should be exercised, this command will halt
    all processes in a virtual machine until it completes.

- 6/20/2006, More Effort on XML Parsing Speed
  * Added (string-read-regex! string regex), which advances the string origin
    past the end of the match, and returns the match.
    
    >> (define sentence "The quick brown fox jumped over the lazy dog")
    >> (define word "^ *([^ ]+)")
    >> (string-regex-match! sentence word)
    -- ("The")
    >> sentence
    >> " quick brown fox jumped over the lazy dog"
    >> (string-regex-match! sentence word)
    -- ("quick")
    >> sentence
    >> " brown fox jumped over the lazy dog"

  * Altered the S-XML processor to use channels and coroutines to simplify
    the processor state machine.  Empirical 15 - 20% speed improvement, 20%
    memory consumption reduction.

  * Added (sxml->string sxml) -> string to lib/xml; a relatively fast XML
    formatter.
    
    >> (sxml->string `(*TOP (html (head (title ,page-title))
                                  (body (h2 ,page-title)
                                        (div (* class "content")
                                             ,@page-contents)
                                        (div (* class "menu")
                                             ,@page-menu)))))
    -- "<?xml version='1.0'><html><head><title>The Title</title>..."

  * Added (tc-remove! tc item) to core primitives.
  * Modified lib/clue to use tconcs instead of sets for collections of records
    with identical values for a given parameter.

  * Fix -- streams now report invalid input as fail messages to output.
  * Fix -- the repl now reports fail input as an error to help detecting bad
           output from the above.
  * Fix -- the repl uses send instead of print, now, to improve linearity of
           console output.
  * Added find-clue-record, a function that accomplishes the same thing as
    the find-clue macro -- for programmatic creation of clue queries.
  * Amended test/http for the recent changes to http-request-header

- 7/16/2006, Channel Bridges
  For MOSREF, we need the ability to multiplex multiple channels across a single
  channel.  The bridge module provides the necessary capabilities.

  * Added the lib/bridge module
  * Added (make-bridge xmit recv) -> bridge to lib/bridge
  * Added (make-lane xmit recv) -> lane to lib/bridge
  * Added (bridge-lanes bridge) -> channel of lane to lib/bridge
  * Added (lane-recv bridge) -> channel of string to lib/bridge
  * Added (lane-xmit bridge) -> channel of string to lib/bridge

- 7/14/2006, Formal Filters
  With the introduction of channels, a number of similar operations have been
  cluttering up the Mosquito Library.  The new lib/filter module provides a
  unified way to describe and arrange these filter operations.

  * Added the (define-filter formals stmt ...) macro to lib/filter
  * Added the (input-chain channel filter ...) function to lib/filter
  * Added the (output-chain channel filter ...) function to lib/filter
  * Added the (error-on-fail message_ function to lib/filter
  * Modified s-filter from lib/filter to use the new define-filter form.
  * Modified line-filter from lib/filter to use the new define-filter form.
  * Modified repl from lib/repl to use input-chain to arrange s-filter and
    line-filter to parse input.
  * Added (crc32 string), which calculates the CRC32 of a given string.
  * Added lib/checksum-filter, which prepends a checksum to each string, and
    checks the checksum.
  * Added quad->string, word->string, byte->string prims.
  * Revised MOSREF's affiliation and transport protocols to use the new 
    filters and CRC32.
  * Added test/filter to test the functions listed above.
  * Updated 

- 6/03/2006, Broken lib/lib
  * Broke lib/lib into smaller components and integrated them with lib/compile,
    lib/assemble, lib/optimize and lib/freeze to fix the make-procedure
    reliance on lib/eval.
  * Fixed test-compile

- 5/27/2006, Buffer Merged With String
  * Modified string to be internally identical to the buffer type.
  * Removed the buffer type, and altered all functions matching *buffer* to 
    *string*; note that write-buffer and read-buffer are now string-write and
    string-read, respectively.
  * Added string-alter!, string-prepend!, string-append!, string-erase!,
    string-insert!
  * Replaced all uses of buffer-empty? to empty-string?
  * Added copy-string
  * Removed lib/scan, since strings with prepend can do the same, faster.
  * Modified lib/xml to pass a single buffer around, instead of copying
    and making buffers repeatedly.

- 5/15/2006, Accelerated XML Parsing
  * All XML parser rules now use string-begins-with? to shortcut the regular
    expression parsing step.  This greatly accelerates XML parsing by reducing
    use of match-regex.
  * Added an ellision operation to lib/trace's traceback that makes tracebacks
    involving extremely large strings manageable.
  * Added the lib/scan module, which wraps the buffer type to permit "peeking"
    one byte at a time into the buffer.  This is a frequent use by string
    parsers.
  * Added (buffer-skip-space buffer) to core primitives; will skip all
    whitespace leading the buffer.
  * Parsing XML attributes now uses the new scan module and logic implemented
    in Mosquito Lisp to compensate for the incredible time penalties inflicted
    by the regex "greedy match" algorithms.

- 5/14/2006, Bugfix for Tc-Splice!
  * tc-splice will no longer cannibalize the supplied list's structure.
  * Added (get-sxml-tag sxml) to lib/xml
  * Added (has-sxml-tag? sxml tag) to lib/xml
  * Added (has-sxml-attr? sxml key value) to lib/xml
  * Added (sxml-drill sxml test ...) to lib/sxml; example: 
    >> (define xml '(html (body (p "alpha" (a (@ (href . "a")) "aleph")) (p "beta"))))
    >> (sxml-drill xml is-body? is-p? is-a?)
    :: (a (@ (href . "a")) "aleph")
  * lib/xml's parser now handles sequential comments more reliably.
  * Added (strip string) to core primitives; strip removes leading and trailing
    whitespace from the string.
  * Added (strip-head string) to core primitives.
  * Added (strip-tail string) to core primitives.
  * make-sxml is now more intelligent about character data blocks, concatenating contiguous blocks together
    into a single sxml node.
  * string-head and string-tail no longer complain when given a length that
    exceeds the string length -- the length is adjusted quietly to the string's
    length.

- 4/18/2006, XML Parser
  * Added lib/mailto-url.ms, support for mailto URLs that was written in 
    response to documentation's request for a simpler usage of 
    register-url-parser.
  * Fixed module header in lib/http-url.ms
  * Added file-len, file-pos, file-seek and file-skip methods for file ports
    to lib/file-port
  * Added bin/incr-repl.ms, a REPL that logs each instruction to a file to
    simplify the incremental creation of MOSVM applications and test suites.
  * Added assoc prim to core.
  * Modified open-input-file to correctly return *eof* when read-descr yields
    #f to indicate end of the file.
  * Modified read <port> to correctly use the close method to close the port
    instead of just marking it out of service.
  * Added -g flag to the MOSVM stub; invoking the stub with -g will cause a 
    list of global variables to be displayed prior to exit.
  * Added lib/xml.ms, a library that parses XML strings and files into S-XML
    data structures. 

- 4/14/2006, Miscellaneous Bug Fixes
  * Added test directory to package target.
  * Overhauled lib/build to rely on core/module and lib/module.
  * Fixed build-exe when used to compile a module to a binary.
  * Added (read-platform-stub platform)
  * Added stub path configuration to bin/situation.sh
  * Restored queue class definition to lib/queue.
  * Extended read-descr-line to support file descriptors.
  * Altered lib/crypto-port to only operate on 64k messages at a time to
    avoid the possibility of a garbled message header causing an absurdly
    large buffer to be constructed.
  * Fixed cyclic dependency of lib/lib on lib/eval by deferment
  * Added import of lib/string-port to lib/format
  * Restored ignore-method to core/macro
  * Added import of lib/eval to lib/mosc.
  * Fixed bug when compiling under mosvm
  * Added export of read-line from lib/string-port
  
- 4/10/2006, Phase Six of the Module System, p6ms
  * Added the core subdirectory -- all modules in core should be 
    embedded by MOSVM applications prior to any imported modules.
  * Added core/file -- wraps file open and file read primitives to create
    a simple API for reading and writing files.
  * Moved read-lisp-file, read-data-file and write-data-file from lib/lib.ms 
    to core/file.ms
  * Added core/config --  provides a generic interface for storing site
    configuration information, or the absence of site configuration.
  * (site-config key) -> value
  * (set-site-config! key value)
  * Moved for-each, map, find-tail, list-index, find, any, fold, filter, 
    filter! to lib/iterate
  * Moved define-class from lib/compile to lib/object
  * Moved define-record-type to lib/record from lib/compile
  * Moved eval to lib/eval
  * Moved all functions for constructing classes to lib/object.ms
  * Moved define-class to lib/object.ms
  * Moved define-record-type to lib/record.ms
  * Added the site subdirectory -- all modules in site are considered to be
    specific to a particular installation of mosvm.
  * Added lib/module, which provides the ability to determine dependency
    information about module source files.
  * Modified bin/manifest.ms to use lib/module for dependencies
  * Moved <port>, current-input-port current-output-port, input-port?, 
    output-port?, closed?, close, (read <port>), (read <process>), 
    *console-port*, (write <port>), (write <process>), newline, read-all,
    read-exprs to lib/ports
  * Added core/macro.ms
  * Moved set-macro! and mosvm-syntax from lib/lib.ms to core/macro.ms  
  * Added read-lisp-file, read-data-file and write-data-file wrappers to 
    fakevm.scm
  * Added read-module-source wrappers to fakevm.scm
  * Added bin/situation, which generates site/config interactively.
  * Added site/config, which contains core/config instructions on where to 
    find external modules, and other site-specific parameters. 
  * Modified the Makefile to build site and core files.
  * Modified lib/fakevm's implementation of make-tc to accept arguments.
  * Renamed parse-imports to code-imports
  * Moved determine-dependencies from lib/build to lib/module, and renamed 
    to code-depenencies
  * Deprecated parse-dependencies in lib/module for code-dependencies
  * Modified build-exe to use lib/module for dependencies
  * Modified mqo_string_compare to use dictionary order semantics when in
    the presence of strings of inequal length; this makes set and dict usable
    for sorting collections of strings.
  * Added examples/modman.ms, a script to quickly analyze a module's imports
    and exports.
  * Modified the Makefile to make package work.

- 4/3/2006, HTTP Server Module
  * Altered descr closing to wait until the descr's write buffer clears.
  * (read-buffer-line buffer) -> str or #f
    Handles \n and \r\n termination, but does not handle macos-inbred \r
  * (read-descr-line descr) -> str or #f
  * (read-line conn-port) -> str or *eof*
  * (read-line file-port) -> str or *eof*
  * (read-line string-port) -> str or *eof*
  * Moved lib/http.ms to lib/http-url.ms
  * Added lib/http-server.ms
  * (read-http-request port) -> http-request
  * (write-http-response port code reason headers body)
  * (spawn-http-server portno func)
  * Added test/http.ms
  * Revised lib/filter to work with counted read lengths.
  * Added (string-replace src pat text) -> str
  * Added (xml-escape src) -> dst

- 4/2/2006, HTTP-URL
  * (register-url-parser scheme parser)
  * Modified string->url to use registered URL "parsers" for various schemes.
  * Added lib/http.ms
  * Added the <http-url> type
  * Added the HTTP URL parser scheme.
  * (make-http-url host port path args frag) -> http-url
  * (http-url-args url) -> value
  * (http-url-arg url key) -> value
  * (http-url-addr url) -> value
  * (http-url-port url) -> value
  * (url-scheme http-url) -> string
  * (url-path http-url) -> string
  * (url-auth http-url) -> string
  * (url-query http-url) -> string
  * (url-frag http-url) -> string
  * (string->url string scheme) -> url
  * Fixed bug with macros not working from imported modules

- 4/2/2006, URL Module
  * Added lib/url.ms
  * Added the <url> type
  * (url-scheme url) -> string
  * (url-path url) -> string
  * (url-auth url) -> string
  * (url-query url) -> string
  * (url-frag url) -> string
  * (string->url str) -> url
  * (url->string url) -> str
  * (percent-encode string mask) -> string
  * (percent-decode string) -> string
  * Added test/url.ms

- 4/2/2006, REGEX Primitives
  * Added mosvm/regex.c, mosvm/mosvm/regex.h and mosvm/prims/regex.c
  * (make-regex pattern) -> regex
  * (regex-match regex string) -> list of groups or match or #f
  * (regex-match* regex string) -> list of matches 
  * (regex? value) -> #t or #f
  * Added test/regex.ms

- 3/24/2006, MOSREF Remote REPL
  * Added string->integer to core prims
  * Added a platform architecture tag to the stubs
  * Disabled set-macro! generation by the compiler; imported macros can
    be determined by module source examination, now.
  * Modified decrypt-input to recognize eof conditions.
  * Added mosref/main, a command wrapper for MOSREF to establish a remote 
    repl / terminal.
  * Added support for dotted-quad addresses to MOSVM's address resolution.
  * Added (resolve-addr string) -> address for testing MOSVM's resolution.
  * Improved error reporting for host resolution errors.

- 3/20/2006, MOSREF Drone Exec / Repl Interface
  * Broke mosref functionality into mosref/drone and mosref/console
  * Added drone-exec, console-repl to mosref/console
  * Added drone-repl to mosref/drone

- 3/18/2006, Quantity Added to Read
  * Altered read-descr to accept an optional quantity argument.
  * Added the quantity field to mqo_descr
  * Altered mqo_read_data_mt to use the quantity field.
  * Altered all uses of port-read-fn to include quantity arguments.
  * Added mqo_flush_buffer and flush-buffer

- 3/18/2005, MOSREF Compose Module
  * Added (path-mtime path) -> integer to prims/os
  * Added (file-path? path) -> #t or #f
  * Added (path-join string ..) -> string to lib/core
  * Added (convert-path string) -> string to lib/core
  * Added (read-data-file path) -> string to lib/core
  * Modified read-lisp-file to use descrs instead of ports.
  * Fixed bug with make-tc causing optional arguments to be misread.
  * Fixed bug with open-file-descr causing create to append
  * Added t for Truncate to open-file-descr
  * Added (path-exists? path) -> #t or #f to prims/os
  * Added (member item list) -> #t or #f to prims/core
  * Added lib/build
  * Added (build-module module) -> string to lib/build
  * Added (build-dependencies module) to lib/build
  * Added (build-exe platform module) -> string to lib/build 
  * Fixed a bug in mqo_expand_buffer that caused a buffer not to expand.
  * Added (write-data-file path data) to lib/core

- 3/12/2006, MOSREF Control Module
  * Added (open-buffer-port) -> port to lib/core
  * Added (fuse-ports read-port write-port) -> port
  * Added (drone-affiliation console-ecdh port) -> port
  * Added (console-affiliation console-ecdh port) -> port
  * Added affiliation unit test

- 3/11/2006, Filter Ports and Crypto Filters
  * Added the lib/filter module
  * Added filter-output, filter-input and filter-port to lib/filter
  * Added the lib/crypto-port module
  * Added the buffer-empty? primitive.
  * Modified make-buffer to make capacity optional
  * Added the crypto-port test suite.
  * Added buffer-skip primitive.

- 5/08/2006, Integration of ECDH cipher from LibTomCrypt
  * Added (random? value) -> #t or #f
  * Added mqo_ecdh_key subtype of mqo_key
  * Added (make-ecdh-key key-size data) -> ecdh-key
  * Added (import-ecdh data) -> ecdh-key
  * Added (export-public-ecdh key) -> string
  * Added (export-private-ecdh key) -> string
  * Added (ecdh-shared-secret local remote) -> string
  * Added (ecdh-key? value) -> #t or #f
  * Added (ecdh-public-key? value) -> #t or #f
  * Added (ecdh-private-key? value) -> #t or #f
  * Added tests for AES, XOR, BASE64, ECDH to test/crypto

- 5/07/2006, Integration of AES cipher from LibTomCrypt
  * Added mqo_aes_key subtype of mqo_key
  * Added (make-aes-key key-size data) -> aes-key
  * Added (aes-key? value) -> #t or #f
  * Added (aes-encrypt aes-key plaintext random) -> ciphertext
  * Added (aes-decrypt aes-key ciphertext) -> plaintext
  * Added (xor-string string mask) -> string
  * Added lib/cfb, a generic implementation of Cipher-Feedback Mode.
  * Added (key-size key) -> integer
  * Added (key-block-size key) -> integer
  * Added bin/build-lib.sh which automatically builds all modules in the
    lib subdirectory.
  * Added (encode64 string) -> string
  * Added (decode64 string) -> string

- 1/09/2006, Integration of LibTomCrypt
  * Added libtomcrypt 1.0 to the source tree with some light modifications to
    integrate with MOSVM.
  * Added support for LTC's pseudorandom number generators and entropy
    gathering routines.
  * Added the <random> type.
  * Added the make-random primitive.
  * Added the add-entropy primitive.
  * Added the random-string primitive.
  * Added the random-quad primitive.
  * Added the random-integer primitive.
  * Added the random-algorithm primitive.
  * Added the import-random primitive.
  * Added the export-random primitive.

- ?/??/????, Integration of Entropy from LibTomCrypt
  * Added prims/entropy.c
  * Added (gather-entropy count) -> string 
  * Added (random max) -> integer

- 1/07/2006, Buffers in the Dispatch Loop
  * Altered mqo_halt to identify reading processes and remove their
    descriptor from the reading state
  * Extended processes with a reading field that refers to a descriptor which
    caused the process to suspend while reading.
  * Extended descriptors with write buffers that may be used to asynchronously
    respond to writable events by feeding data out of the write buffer.
  * Extended descriptors with read buffers that are filled whenever a 
    dispatched descriptor signals that it is readable, and a read method
    function that will parse the read data on behalf of a suspended monitor
    process.
  * Altered write-descr to buffer data written to 
  * Renamed write-file-byte to write-descr-byte, and altered it to use the
    write buffer when writing to sockets.
  * Renamed write-file-word to write-descr-word, and altered it to use the
    write buffer when writing to sockets.
  * Renamed write-file-quad to write-descr-quad, and altered it to use the
    write buffer when writing to sockets.
  * Replaced read-file-all with read-descr-all
  * Added checks to write-descr-byte / word / quad for range, using 
    REQ_BYTE_ARG, REQ_WORD_ARG and REQ_QUAD_ARG.
  * Altered mqo_close to attempt a final read_mt for monitored descriptors.
  * Added the chdir primitive to core.
  * Added the substring primitive to core -- (substring string index length)
  * Added the string-head primitive to core -- (string-head string length)
  * Added the string-tail primitive to core -- (string-tail string index)
  * Added string-tail and string-ends-with? to lib/fakevm
  * Altered mosc to accept the mis-use of .ms or .scm silently.

- 2/28/2006, Phase Four of the Module System, Phase Three of the Macro System
  * Fixed a bug with parse.c that would cause the parser to loop indefinitely
    on encountering an unmatched ")".
  * Fixed a bug with parse.c that would cause a bogus OS error to be thrown
    if the parser parsed an integer after an OS error had occurred.
  * lib/manifest introduced; constructs a load order based on the imports.
    required to execute a particular program.
  * Added set emulation to lib/fakevm.scm
  * Added dict emulation to lib/run-mzscheme.scm
  * Altered context-syntax to use a dict
  * Altered make-top-context to build a syntax dict from the *mosvm-syntax*
    list.
  * Renamed all .scm files to .ms
  * Wrote mosc rule in Makefile for constructing the mosc compiler
  * Wrote an alternate version of read-module for Scheme
  * Compiler now analyzes imports for exported syntaxes
  * Altered export to recognize syntax.
  * Added the trace macro to lib/trace -- traces within a block context.
  + Added bin/manifest.ms 
  + Altered the .ms -> .mo rule to use the mosc compiler

- 2/18/2006, File Function Renames
  * Added file-len
  * Renamed seek-file to file-seek, skip-file to file-skip, and 
    pos-file to file-pos
  * Renamed open-file to open-file-descr
  * Renamed <atom> to <quark>
  * Added file-input-port?, file-output-port?, string-input-port?, and 
    string-output-port? to lib/core.
  * Fixed typo in filter causing a global, "it", to be bound.
  * Renamed <file> to <file-descr>
  * Fixed typo in dict->string that could crash traceback.

- 2/17/2006, Phase Two of the Macro System
  * Added define-macro
  * Added eval
  * Added make-procedure

- 2/17/2006, Phase Three of the Module System
  * Renamed the export special form to module.
  * Modified compile to analyze the source for top level export statements --
    top level defines that define identifiers that are not exported will
    not be mapped into the global namespace.
  * Made inner-defines forward looking in namespace.
  * Altered REPL to insert an export for all variables bound in the
    expression.
  * Added parent-type primitive.
  * Added direct-type primitive.
  * Fixed typo in type->string
  * Fixed error in mqo_raise that would cause an error when parsing
    environments with 0 bindings.
  * Fixed typo in compile-expr that would cause a bogus error.

- 2/14/2006, Buffered Read / Write
  * Added the buffer primitive type.
  * Added the (make-buffer size) primitive to core.
  * Added the (buffer? value) primitive to core.
  * Added the (buffer-length buffer) primitive to core.
  * Added the (write-buffer buffer string) primitive to core.
  * Added the (read-buffer buffer ?max) primitive to core.
  * Added the (buffer->string buffer) primitive to core.
  * Added the (write-buffer-byte buffer byte) primitive to core.
  * Added the (write-buffer-word buffer word) primitive to core.
  * Added the (write-buffer-quad buffer quad) primitive to core.
  * Added the (read-buffer-byte buffer) primitive to core.
  * Added the (read-buffer-word buffer) primitive to core.
  * Added the (read-buffer-quad buffer) primitive to core.
  * Altered string-port to use buffers.
  * Added the re-error primitive to permit guard clauses to repeat an error
    without altering the error's context.
  * Altered with-input-port and with-output-port macros to use guards to ensure
    that the ports are restored.
  * Added the buffer-output macro, which wraps all writes into a string port,
    then outputs the resulting buffer to the output port on completion.
  * Altered traceback to buffer-output.

- 2/09/2006, Cosmetic Improvements
  * repl now correctly responds to the closure of its input port.
  * when multimethods are bound to global names, any anonymous closures
    contained by them are given that name.
  * added lib/format.ms, a replacement for show that supports show'ing to
    ports.
  * record types are now named with the supplied name, and bound to <name>
  * string-output-ports will now periodically compact queued data into a 
    temporary string to protect against excessively large queues.
  * added lib/traceback.scm, a replacement for il-traceback written in MOSVM
    that interoperates with lib/format and ports.
  * added the function-name primitive; given a function it will attempt to
    determine the symbolic name of that function.
  * primitive names are now symbols.
  * altered error types to replace the out-dated vmstate information with
    context, an easier to use representation of the return and data stack at
    the time of the error.

- 2/08/2006, Queues Suspend and Resume on Empty
  * Extended the queue read method to suspend the reading process if the queue
    is empty.
  * Extended the queue write method to resume a blocked reading process if
    necessary.
  * Added a read method for reading from a process -- using its assigned
    output port.
  * Added a write method for writing to a process -- using its assigned
    input port.
  * il_traceback will display the first string in the error without escapes,
    and all subsequent values using show.
  * Added support for arithmetic comparisons with 1 or more arguments.
  * Removed <input-port> and <output-port> from the port class hierarchy in
    favor of using a more sophisticated <port> class.
  * Added logic to <port> reads to identify a closed port and mark them
    as closed when *eof* is returned by a port's read method.
  * Fixed stack contamination from closing a port.

- 2/08/2006, Clarification of Show and Write
  * Updated fakevm and mosc with hacks for Scheme environments to work around
    the differences in write, and the lack of display.
  * the suspend and pause primitives now properly clear their call frames off
    the return stack.
  * the read-desr primitive now properly clears its call frame off the return 
    stack if it blocks to monitor.
  * NO_MORE_ARGS no longer crashes the virtual machine when the user supplies
    too many arguments to a primitive.
  * mqo_list_ref now signals an error when index is greater than length.
  * mqo_show_string now wraps the supplied string in quotes.
  * Modified the process type to maintain fields for current-input-port and
    current-output-port.
  * Added the set-process-input! primitive to assign an input value to a 
    process.  This is used to specify input-ports on a per-process basis.
  * Added the set-process-output! primitive to assign an output value to a 
    process.  This is used to specify output-ports on a per-process basis.
  * Added the process-input primitive to retrieve the input value of a
    process.
  * Added the process-output primitive to retrieve the output value of a
    process.
  * Altered the spawn primitive to initialize a new process's input and output
    to that of its parent.
  * Added the *console-output-port* global, which is an output-port that writes
    to the console descriptor.
  * Added the *console-input-port* global, which is an input-port that reads 
    from the console descriptor.
  * Added the current-input-port procedure to lib/core, which returns the
    active process's input or *console-output-port*
  * Added the current-output-port procedure to lib/core, which returns the
    active process's output or *console-input-port*
  * Added the with-input-port special form to lib/compile.
  * Added the with-output-port special form to lib/compile.
  * Modified the read procedure to use current-input-port in the absence of
    a port.
  * Modified the write procedure to use current-output-port in the absence of
    a port.
  * newline now moved to the core module, and supports an optional port
    argument; if one is omitted, the current-output-port will be used.
  * Altered lib/conn to use the with-input-port and with-output-port forms.
  * Altered closed? to accept a no-argument case that would default to 
    checking process-input.
  * Altered close to accept a no-argument case that would default to close
    process-input.

- 2/08/2006, Replacement of TAVL with TREAP
  * Replaced tavl.c with tree.c -- using a faster, simpler tree implementation
    based on treaps.
  * Fixed a bug involving errors in mqo_compare due to implicit sign conversion
    issues when subtracting pointers.
  * All internal show functions how require a count pointer.
  * Show now employs a pointer in the type object to determine how to display
    a value.
  * Show has been refitted for consistency.
  * Massive rearrangement of functions into individual files, out of memory.c,
    exec.c and show.c.
  * Renamed net.c to the more precise os.c.
  * Fixed a bug involving issues on BSDs with changing stdin to nonblocking 
    causing stdout to become nonblocking as well.
  * Added mosc.mo to the distribution.

- 2/02/2006, Refit of Alarms to make Monitors
  * Removed read-alarm, write-alarm and the alarm type from mosvm.
  * Added the monitor primitive to os.c.
  * Added the unmonitor primitive to os.c
  * Added the monitor field to descr.
  * Added a result and monitor field to descr.
  * Added four specialized types of descr; console, file, socket and listener.
  * Altered primitives in os.c to specify which type of descr they act on.
  * Added the REQ_ANY_DESCR_ARG macro to mosvm/prim.h
  * Removed alarm.c in favor of dispatch.c
  * Added dispatch.c, which employs select to determine if any sockets might
    be ready to read, then attempts to read to ensure that they are -- a 
    necessary precaution against select implementations that guess.  (Looking
    at you, Windows.)
  * Altered read-descr to use the result buffer on non-file descriptors.
  * Altered write-descr to use stdout when given the console.
  * Removed *stdin*, *stdout* and *stderr* in favor of *console*
  * Altered connect-tcp to create a non-blocking socket.
  * Altered serve-tcp to create a non-blocking server socket.

- 1/30/2006, Introduction of TCP primitives and Alarms.
  * Moved resume functionality out of mqo_prim_resume to mqo_resume in exec.c
    for use by alarm.c
  * Moved mqo_set_key and mqo_dict_key out of prims/core.c to memory.c for use
    by other mosvm functions.
  * Renamed file prims, changing all mentions of 'file' to descr with the
    exception of file-open, file-seek, file-pos, file-reset.  Also made these
    identifiers more conversational -- verb-type-modifier, e.g. 
    write-descr-quad and read-descr-all
  * Added the globals primitive to core, which returns a set containing all
    of the symbols currently assigned a global value.
  * Fixed any, which was not correctly using the items of the supplied lists.
  * Fixed a bug that would cause all functions created with define forms
    to be regarded as multimethods, and not simple closures.
  * Added net.c, which provides the ability to resolve ipv4 addresses, connect
    to TCP services, and serve TCP connections.
  * Added alarm.c, which implements a table of processes suspended as they
    wait to read or write to a specified descriptor.
  * Added a call to continue to mqo_process_alarms, to be used at the end of
    a sweep through active processes.
  * Added prims/net.c to provide net.c functionality to MOSVM applications.
  * Added prims/alarm.c to support alarms.
  * Replaced open-stdin and open-stdout with global *stdin* and *stdout*
  * Removed useless count argument from read-descr and write-descr -- it is
    always better to use the OS's buffer recommendations.

- 1/28/2006, Resume Transfers to Suspend
  * Altered the suspend primitive to not place a return value on the stack
    prior to suspending the process.
  * Altered the suspend primitive to only suspend the active process.
  * Altered the resume primitive to place a supplied value on the stack of the
    resumed process.

- 1/27/2006, Process Scheduler, Suspend / Resume / Stop / Spawn.
  * Altered mqo_process to contain a status symbol, which will contain one of
    the following -- suspended, running, paused, halted.
  * Altered mqo_process to contain references to a next and a prev process.
  * Altered mqo_continue to cycle between paused processes.
  * Added the mqo_spawn function.
  * Altered mqo_execute to use mqo_spawn, then repeatedly mqo_continue until
    there are no more processes.
  * Altered all users of MQO_XP to correctly use MQO_NEXT_INSTR, MQO_NEXT_PROC
    or MQO_NEXT_LIFE to signal why a non-local exit was required.
  * Added show_process to show.c
  * Added the spawn primitive, which creates a new process that will execute
    the supplied thunk.
  * Added the pause primitive, which marks the active process as paused,
    permitting the virtual machine to proceed to the next paused process.
  * Added the halt primitive, which marks the specified process as halted. If
    no process is specified, it will halt the active process.
  * Added the suspend primitive, which marks the specified process as 
    suspended.  If no process is specified, it will suspend the active process
    and permit the virtual machine to cycle to the next process.
  * Added the resume primitive, which marks a suspended process as merely
    paused, then pauses the active process.
  * Added the process-status primitive, which identifies the current state 
    of the specified process.
  * Added the active-process primitive, which returns the active process.
  * Added the halt primitive which puts the process in halted state.  Halted
    processes cannot be resumed
  * Modified mqo_err to stop the specified process if the error is not
    handled.
  * Added load-ms.
  * Added load, which brokers against load-ms and load-mo, based on the
    file extension.
  * Altered run.scm to run any files that do not end in .mo as source files,
    with automatic compilation and optimization.

- 1/26/2006, Added string primitives for log parsing.
  * Added split-lines primitive to core.
  * Added string-starts-with primitive to core.
  * Added string-ends-with primitive to core.
  * Extended make-tc to accept an optional seed list.
  * Added *line-sep* global to os.

- 1/26/2006, Preparations for phase alpha
  * Moved all stack push/pop/etc operations to use mqo_stack_xxx calls.
  * Modified mqo_il_traceback to work forwards from the base of the call and
    data stacks, instead of downwards, and cleanly handle unintelligible
    calls.
  * Cross-compiled on Darwin/PPC.
  * Cross-compiled on Linux/x86.
  * Added tavl.c and tavl.h, derived from Bert C. Hughes' public domain TAVL
    library.
  * Added mqo_compare and mqo_string_compare for use by tavl.
  * Replaced the use of a pair for the symbol lexicon with a tree.
  * Added mqo_show_tree to show.c
  * Added mqo_show_tree to mqo_show
  * Added dump-lexicon primitive to core for testing purposes.
  * Added set type to memory.h
  * Added dict type to memory.h
  * Added set, set?, set-add!, set-remove! set-member? and set->list primitives
    to core.
  * Added dict, dict?, dict-set!, dict-ref, dict-remove!, dict-keys, 
    dict-values, dict-set? and dict->list primitives to core.
  * Relicensed all code -- granted copyright to Ephemeral Security, assigned 
    LGPL terms.
  * Added mosvm/glue.c, a C implementation of glue, and removed glue.scm; this
    should make it possible to glue an executable on platforms without guile.
  * Added the memmem function, with functionality similar to strstr, but
    without the dependency on null termination.
  * Added the string-split* primitive to core.
  * Added the *path-sep* global value to os; will contain "/" on POSIX hosts,
    and "\" on win32 hosts. ( And, some day, ":" on all three VMS hosts. )
  * Added the string-join primitive to core.
  * Edited load-mo to use split-string and path-sep to enable importing on
    win32.
  * Added the string-find primitive to core.
  * Added the string-split primitive to core.
  * Rewrote the implementation of append!.
  * Compile now recognizes null lists and renders them as a constant: e.g.
    (show ()) does not raise an error, it just displays ().
  * Added the export procedure to core and modified import to rely on export
    to register modules as loaded, and their origin.
  * Altered lib/run to start a REPL if no arguments are supplied.
  * Altered Makefile to produce a mosvm executable that is capable of playing
    repl, or supporting mosc, without the need for external files.

- 1/24/2006, Mosc written in dual scheme / mosvm.
  * Added read-all method for queues.
  * Revised mosc to work under scheme and mosvm.
  * Revised push / pop / peek / read operations to use the standard 
    vector accessors for debugging purposes.
  * Revised MQO_END_PRIM to use mqo_return instead of smoking crack.
  * Added the lib/optimize module, with a simple tail call optimizer.
  * Extended parse.c to understand #t and #f.
  * Added open-stdin primitive
  * Added open-stdout primitive
  * Added open-stderr primitive
  * Fixed bugs with the use of guards, and il-traceback.
  * Added examples/repl.scm, an example of making a repl.
  * Fixed bugs blocking the compilation of quasiquote forms under mosvm.
  * Fixed scope bug where the bodies of inner defines were unable to refer to
    themselves.
  * Replaced tail-recursion abuses from make-inventory and program-values
    in lib/scheme.
  * Fixed bug with parsing escaped strings in parse.c
  * Patched Makefile to turn of SSP stack protection on OpenBSD -- incompatible
    with libgc.
  * Added a signal handler for SIGINT that will automatically supply a 
    stack dump prior to termination.
  * Replaced excessive use of recursion in assemble, compile, and freeze with
    while loops.
  * Simplified eradication of comments and extra whitespace in parse.c
  * Fixed bug where escaped text in parsed strings would cause the string to
    lose length.

- 1/21/2006, Freeze written in dual scheme / mosvm.
  * Added error trap to detect 0 divisors in m_div
  * Added abs primitive to core.
  * Added quotient primitive to core.
  * Added remainder primitive to core.
  * Added tc-clear! primitive to core.
  * Added optimization to string-append for the single item special case.
  * Modified assemble to report unresolved address references.
  * Fixed bug with case forms missing a final "next" branch.
  * Added write-quad procedure to fakevm.
  * Fixed bug where string-append could result in a string data not having
    a null placed after the end of the string.
  * Fixed bug with cons*
  * Added write-quad method to core for file ports and string ports.
  * Added file-write-quad primitive to os.
  * Modified lib/freeze.ms to use write-byte / write-word / write-quad
  * Added freeze test suite.
  * Added string-output-port and string-input-ports to core.
  * Extended string-append to accept bytes as possible values.

- 1/21/2006, Compile written in dual scheme / mosvm.
  * Moved symbol-starts-with to lib/lib, added alternate mosvm version due
    to mosvm's lack of support for the character data type.
  * Added test/compile.ms, a unit test for the compiler.
  * null? now accepts any value, not just pairs.
  * Fixed inconsistencies in the return value of unless and while special
    forms.
  * Fixed error where and forms would not correctly return the final truth or
    false.
  * Added symbol->string primitive.
  * Explained to subtract that 1 - 2 is not True.  (WTF?)
  * Added string-ref primitive.
  * Added test/compile test suite.

- 1/20/2006, Assemble written in dual scheme / mosvm.
  * Added mqo_program_ref function.
  * Added REQ_PROGRAM_ARG macro.
  * Added OPT_PROGRAM_ARG macro.
  * Added fold procedure.
  * Added program? primitive.
  * Added program-length primitive.
  * Added make-program primitive.
  * Added set-program-code-at! primitive.
  * Added set-program-word1-at! primitive.
  * Added set-program-value-at! primitive.
  * Added set-program-word2-at! primitive.
  * Added set-program-symbol-at! primitive.
  * Added program-code-at primitive.
  * Added program-word1-at primitive.
  * Added program-value-at primitive.
  * Added program-word2-at primitive.
  * Added program-symbol-at primitive.
  * Renamed erroneously named define-record form to define-record-type.
  * Fixed incorrect modifier creation semantics for define-class / d/rt.
  * Added filter procedure.
  * Mapped filter! to filter.

- 1/20/2006, Glue written in dual scheme / mosvm.
  * Moved script loader from core.ms to bin/run.ms
  * Added the last-item primitive.
  * Added the reverse primitive.
  * Added the reverse! primitive.
  * Rewrote glue.ms to work under both scheme and mosvm.
  * Added the mosvm? global to lib/core.ms and lib/fakevm.ms.
  * Added the file-write-byte primitive.
  * Added the file-write-word primitive.
  * Added the write-byte procedure to fakevm and core.
  * Added the write-word procedure to fakevm and core.
  * Fixed a bug with compiling cond forms without an else branch.
  * Ensured that subsequent calls to mqo_execute will reset the return stack.
  * Cleaned up mqo_exec and mqo_execute; they will accept any function type,
    and they will correctly ensure that the non-local exit point buffer, MQO_XP
    will not be overwritten.
  * Added the -s flag, which will cause mosvm to show the return value
    from the last program executed.
  * Added a new function for checked conversion from values to specific types
  * Added MQO_DEFN_REQ macros to memory.
  * Modified REQ_X_ARG macros to use mqo_req_x.

- 1/17/2006, Load now uses the file port abstraction.
  * Added the string->exprs function.
  * Added the read-all procedure.
  * Added a specialized read-all for file ports.
  * Added the tc-next! primitive.
  * Added the tc-empty? primitive.
  * Moved all .scm files to .ms
  * Added the file-read-all primitive.
  * Moved thaw-file from primitive to procedure.

- 1/16/2006, Addition of R5RS procedures required for lib/lib.scm
  * Added the exit primitive.
  * Added the string->symbol primitive.
  * Added the number->string primitive.
  * Added the +, -, * and / primitives.
  * Added the list-ref primitive.
  * Added the find-tail, find, and list-index procedures.
  * Added the s:, r: and t: special forms to lib/compile.scm
  * Added the any procedure.
  * Added the last-pair primitive.
  * Added the not primitive.
  * Added the integer? primitive.
  * Added the symbol? primitive.
  * Added the list? primitive.
  * Added the mqo_equal function to mosvm/memory.c
  * Added the mqo_equals function to mosvm/memory.c
  * Added the mqo_equalv function to mosvm/memory.c
  * Added the mqo_equalp function to mosvm/memory.c
  * Added the mqo_eqv function to mosvm/memory.c
  * Added the mqo_eqvs function to mosvm/memory.c
  * Added the mqo_eqvv function to mosvm/memory.c
  * Added the mqo_eqvp function to mosvm/memory.c
  * Added the equal? primitive.
  * Added the eqv? primitive.
  * Altered the string=? primitive to use mqo_eqvs
  * Added the mqo_last_pair function to mosvm/memory.c
  * Added the tc primitive type as a derivative of pair.
  * Added the last_pair primitive.
  * Added show_tc to show.
  * Added the make-tc primitive.
  * Added the tc-append! primitive.
  * Added the tc-prepend! primitive.
  * Added the tc->list primitive.
  * Added the tc-splice! primitive.
  * Added the tc? primitive.
  * Added support for quasiquote forms to lib/compile.scm
  * Added support for metasymbols in quasiquotes. (%symbol -> %temp-symbol)
  * Added the caddr primitive.
  * Added the cadr primitive.
  * Altered mqo_show_cstring to use fputs, instead of printf to ensure
    escapes are printed, and prevent format attacks.
  * Replaced uses of printf for constant strings to mqo_show_cstring in
    show.c

- 1/16/2006, Introduction of the port abstraction.
  * Added the port variant type.
  * Added the input-port variant type.
  * Added the output-port variant type.
  * Added the cons* primitive.
  * Altered types to contain an optional "info" list.
  * Added the open-output-file procedure.
  * Added the open-input-file procedure.
  * Added the read procedure.
  * Added the write procedure.
  * Added the eof-object? procedure.
  * Added the port? procedure.

- 1/16/2006, Introduction of define-class and integration with define-record.
  * Replaced compile-define-class with a syntax rule
  * Replaced compile-define-record with a sytnax rule
  * Added the make-class procedure to lib/core.ms
  * Added the class-fields procedure to lib/core.ms
  * Added the make-class-constructor procedure to lib/core.ms
  * Added the make-class-accessor procedure to lib/core.ms
  * Added the make-class-modifier procedure to lib/core.ms
  * Fixed apply.
  * Moved special form compile rules to a table similar to the syntax table
    to ensure expand knows what forms NOT to expand.
  * Added make-tc to lib/core.ms
  * Added tc-append! to lib/core.ms
  * Added tc-prepend! to lib/core.ms
  * Added tc->list to lib/core.ms
  * Added for-each to lib/core.ms
  * Added map to lib/core.ms
  * Added make-vector primitive to mosvm/prims/core.c
  * Added string-length primitive to mosvm/prims/core.c
  * Added string=? primitive to mosvm/prims/core.c
  * Added <, >, =, <=, >= and != primitives to mosvm/prims/core.c

- 1/15/2006, Introduction of Procedural Macros
  * Added support to lib/compile.scm for inner-defines extending their
    lexical context.
  * Added the syntax field to context records in lib/compile.scm.
  * Added the add-context-syntax procedure to lib/compile.scm.
  * Added the find-context-rule procedure to lib/compile.scm.
  * Added the expand procedure to lib/compile.scm.
  * Modified compile-expr to automatically use expand.
  * Added the *mosvm-syntax* global which contains the standard 
    syntactic rules.
  * Added the make-top-context procedure which is used by compile 
    to create a top-level context for a program.
  * Added the mos special form to asm.
  * Replaced compile-when with syntax.
  * Added the compile-begin rule.
  * Replaced compile-unless with syntax.
  * Replaced compile-while with syntax.
  * Replaced compile-until with syntax.
  * Replaced compile-or with syntax.
  * Replaced compile-and with syntax.
  * Replaced compile-cond with syntax.
  * Replaced compile-case with syntax.
  * Replaced compile-guard with syntax.
  * Replaced compile-q with syntax.

- 1/14/2006, Added void primitive type, expansion of define-record to classes.
  * Added the atom primitive type.
  * Derived the void primitive type from atom.
  * Altered the vm to default all global values to void.
  * Altered the vm to signal an error when a ldg discovers a void.
  * Altered define-record to use define-class, which permits inheritance.
  * Added the type-info primitive to extract the info field from type objects.
  * Extended the make-type primitive to assign overflow arguments to the 
    info field.

- 1/14/2006, Improved call protocol and traceback
  * Overhauled mqo_jump, mqo_call, mqo_tail_call and mqo_return
  * Fixed edge cases involving il_tracebacks.
  * Altered primitive argument macros to bind arguments in order, support
    mixing optional and required arguments and binding rest arguments
    correctly.
  * Added the info field to the type primitive type to store additional 
    information about the type.

- 1/14/2006, Introduction of Low Level File I/O
  * Fixed a bug freezing negative values.
  * Added the file primitive type. 
  * Added the file? primitive.
  * Added the file-read primitive.
  * Added the file-open primitive.
  * Added the file-write primitive.
  * Added the file-close primitive.
  * Added the file-path primitive.
  * Added the file-fd primitive.
  * Added the file-skip primitive.
  * Added the file-seek primitive.
  * Added the file-pos primitive.

- 1/10/2006, Introduction of Multimethod Dispatch
  * Altered lib/compile.scm to recognize method definitions in defines and
    generate generics and methods on demand.
  * Added the multimethod type.
  * Added the (make-multimethod <signature> <pass> <fail>) primitive.
  * Added (refuse-method . args), a craven refuser.
  * Removed all use of record and recordtype in the VM in favor of tagged
    values.
  * Added the vector-ref primitive.
  * Added the vector-set! primitive.
  * Added the vector? primitive.
  * Added the vector-length primitive.
  * Rewrote the record? and <record> definitions in lib/core.ms using tags.

- 1/10/2006, Introduction of Tagged Values
  * Added the mqo_type type.
  * Added the MQO_DECL_TYPE macro.
  * Added MQO_DECL_TYPE to MQO_BEGIN_TYPE.
  * Altered MQO_PTR_INLINES To MQO_TYPE_INLINES
  * Added the MQO_BIND_TYPE macro.
  * Added mqo_init_memory_subsystem
  * Altered main to load mqo_init_memory_subsystem
  * Replaced all use of t_xxx with mqo_xxx_type
  * Added the mqo_boolean type.
  * Added the mqo_make_type function.
  * Altered mqo_value to be pair of type pointer and integer/pointer data.
  * Added the new make-type primitive.
  * Added the new tag primitive.
  * Added the new type primitive.
  * Added the new repr primitive.
  * Added the new isa? primitive.
  * Added mqo_type mqo_direct_type( mqo_value value )
  * Altered REQ_VALUE_ARG to check for indirect descended types.
  * Fixed an edge case where case-else may leak a slot on the data stack.

- 1/7/2006, Added the ability to glue modules to a binary.
  * Fixed a wretched typo in the BSD license boilerplate.
  * Added the glue script to bin.
  * Added a make rule to fuse mosvm/lib/core.ms to the default interpreter.
  * Added mqo_thaw_frag to mosvm/thaw.c
  * Added mqo_thaw_tail to mosvm/thaw.c
  * Revised main in mosvm/main.c to execute each program fused to the 
    executable file.
  * Added until and while macros to lib/run-guile.scm

- 1/6/2006, Added the requirements for import / reload procedure
  * Altered mqo_make_error to initialize the mqo_vmstate members.
  * Altered mqo_make_vmstate to leave all members initialized to null values.
  * Added the mqo_process type to mosvm/memory.c and mosvm/mosvm/memory.h
  * Added the mqo_make_process function to mosvm/memory.c and 
    mosvm/mosvm/memory.h
  * Added the mqo_use_process function to mosvm/exec.c and mosvm/mosvm/exec.h
  * Altered mqo_exec to automatically create a process when one is not in 
    use.
  * Split mqo_exec into mqo_execute and mqo_exec.
  * Added the ability to mqo_call programs.
  * Added the ability to mqo_return from programs.
  * Altered lib/compile.scm to place USEA 0 x at the start of a program,
    and bound supplied arguments to the *args* symbol.
  * Altered lib/compile.scm to use RETN instead of STOP to end a program.
  * Added the thaw-file primitive to mosvm/prims/core.c
  * Added MQO_AALLOC to mosvm/mosvm/memory.h -- which should be used when
    an allocated data structure completely lacks interior pointers.
  * Added mqo_make_string, and altered mqo_string_fm to use it.
  * Added the string-append primitive to mosvm/prims/core.c
  * Added the assq primitive to mosvm/prims/core.c
  * Added the getcwd primitive to mosvm/prims/core.c
  * Added the import procedure to mosvm/lib/core.ms
  * Added the reload procedure to mosvm/lib/core.ms

- 1/5/2006, Added functionality required for implementing for-each
  * Added the while special form to lib/compile.scm
  * Added the until special form to lib/compile.scm
  * Added the ERR_IF_NULL macro to mosvm/mosvm/prim.h
  * Added the apply primitive to mosvm/prims/core.c
  * Added the map-car primitive to mosvm/prims/core.c
  * Added the map-cdr primitive to mosvm/prims/core.c
  * Added the memq primitive to mosvm/prims/core.c
  * Added x y . z formals support to lib/compile.scm
  * Fixed error with return stack not properly reducing after an apply.
  * Streamlined show_pair

- 1/5/2006, Added define-record special form to compile.scm
  * Added the record-type type to mosvm/memory.c
  * Added the record type to mosvm/mosvm/memory.h
  * Added make-record to mosvm/memory.c
  * Added make-record-type to mosvm/memory.c
  * Added the REQ_RECORD_TYPE_ARG macro to mosvm/mosvm/prim.h
  * Added the REQ_RECORD_ARG macro to mosvm/mosvm/prim.h
  * Added the OPT_RECORD_TYPE_ARG macro to mosvm/mosvm/prim.h
  * Added the OPT_RECORD_ARG macro to mosvm/mosvm/prim.h
  * Added the record-type-length primitive to mosvm/prims/core.c
  * Added the record-type-name primitive to mosvm/prims/core.c
  * Added the record-type primitive to mosvm/prims/core.c
  * Added the record-get primitive to mosvm/prims/core.c
  * Added the record-set primitive to mosvm/prims/core.c
  * Added the make-record-type primitive to mosvm/prims/core.c
  * Added the make-record primitive to mosvm/prims/core.c
  * Added the record? primitive to mosvm/prims/core.c
  * Added the record-type? primitive to mosvm/prims/core.c
  * Added the define-record special form to compile.scm
  * Added show-record-type to mosvm/show.c
  * Added show-record to mosvm/show.c
  * Added show-record-type to mosvm/mosvm/show.h
  * Added show-record to mosvm/mosvm/show.h
  * Added the ability to show records and record types to the show primitive.
  * USEN now reports mis-applications clearly.
  * Added the REQ_VALUE_TYPE macro to mosvm/mosvm/prim.h

- 1/5/2006, Added special forms employed by compile.scm to compile.scm
  * Removed the use of named lets from lib/compile.scm
  * Removed the use of named lets from lib/assembler.scm
  * Removed the use of named lets from lib/freeze.scm
  * Fixed a bug with the use of JMP / JF / JT where MQO_PRIM_NEXT 
    was erroneously invoked.
  * Removed the use of named lets from lib/lib.scm
  * Added support for or forms to lib/compile.scm
  * Added support for and forms to lib/compile.scm
  * Added the copy operator to lib/lib.scm
  * Added the jt operator to lib/lib.scm
  * Added the copy operator to mosvm/exec.c
  * Added the jt operator to mosvm/exec.c
  * Added the copy operator to mosvm/prims/vm.c
  * Added the jt operator to mosvm/prims/vm.c
  * Added the copy operator to mosvm/exec.h
  * Added the jt operator to mosvm/exec.h
  * Added the asm special form to lib/compile.scm for debugging purposes.
  * Added support for cond forms to lib/compile.scm
  * Added the eq? primitive to mosvm/prims/core.c
  * Added support for case forms to lib/compile.scm

- 1/2/2006, Integration of Boehm-Demers-Weiser GC
  * Updated MQO_ALLOC to employ the BDW conservative garbage collector.
  * Fixed an error with the internment of symbols related to misreported
    string lengths.
  * Added bin/mosvm script that will automatically build mosvm, compile a
    script, then apply mosvm against the compiled script.

- 1/2/2006, Reorganization of File Layout
  * mosvm moved to mosvm/mosvm
  * mosc.scm moved to bin
  * assemble.scm, compile.scm, freeze.scm, fakevm.scm, lib.scm, 
    run-mzscheme.scm, run-guile.scm moved to lib.
  * Makefile split into mosvm/Makefile, which builds mosvm, and Makefile
    which directs mosvm/Makefile, compiles tests, determines system information
  * Added rule to root Makefile for running mosvm programs.
  * Added script to bin directory for building mosvm, compiling a given program
    and executing the result.
  * exec.c, main.c, memory.c, show.c, thaw.c moved to mosvm.
  * prims moved to mosvm
  * Tagged all source files with BSD/NA license.

- 1/2/2006, Refit of Primitive Argument Macros to use Error System.
  * Primitive argument macros now signal errors using mqo_errf instead of
    dumping core with an assertion.
  * Primitive option macros now indicate absence using has_##nm; e.g. has_arg1
  * Added mqo_es_args for argument error keys. (bad-args)

- 1/1/2006, Introduction of Call Value Tracebacks
  * Calls now push the number of arguments passed on the return stack.
  * Returns now clear the number of arguments passed from the return stack.
  * Closures now have a name field; when the closure is created, this field
    is #f.
  * When a closure is bound globally that has a false name field, the
    name field is updated to the global name. 
  * The internal traceback function can now display arguments to closures in
    the return stack, and their names if they are available.

- 12/30/2005, Introduction of the PROGRAM and INSTRUCTION object types
  * Added the Instruction object type which encodes a single MOSVM instruction
    as a record of fixed length.
  * Added the Procedure object type which encodes a sequence of MOSVM
    Instruction records.
  * Replaced mqo_op_names and mqo_op_prims with mqo_op_table, which also
    specifies what operands a given instruction operator employs.
  * Added instruction to show for use by il-traceback.
  * Added program to show for use by main.
  * Added the fakevm.scm file; a library of functions that can simulate mosvm
    features sufficiently to bootstrap the compilation of a mosvm compiler.
  * Rewrote assemble.scm to use the new program and instruction types. 
  * Modified bin/run-mzscheme.scm to load fakevm.scm
  * Modified bin/run-guile.scm to load fakevm.scm
  * Revised mosvm/memory.h macros to auto generate fv / vf / is inlines.
  * Replaced MQO_IX with MQO_IP, a reference to the current instruction.
  * Altered exec.c to use the new instruction and program types.
  * Altered main.c to use the new program type.
  * Modified primitives in prim/vm.c to use the new mqo_instruction type for
    their inline arguments.
  * Modified thaw.c to decode the program type.
  * Modified freeze.scm to encode the program type.
  * Added mqo_errf, a printf-like error facility for primitives and functions.
  * Expanded il_traceback to give a stack dump and a rudimentary call trace.

- 12/27/2005, Introduction of VMSTATE and IL-Traceback
  * Added the new vmstate object type to encapsulate vm information contained
    by continuations and errors.
  * Added the il-traceback primitive for displaying a low level dump of the
    virtual machine state.
  * Added a test for compiling the guard special form.
  * Re-sync'd ChangeLog with darcs changes.
  * Updated Makefile to employ gnu99 for building the virtual machine.
  * Restricted the info field of the error type to pairs.
  * Added the MQO_FOREACH macro for iterating over a list.
  * Added the newline primitive.

- 12/23/2005, Introduction of the Error / Guard System.
  * Added the error primitive
  * Added the error object type.
  * Added the RAG opcode.
  * Added the GAR opcode.
  * Added the MQO_ERROR macro for signalling errors.
  * Added the MQO_EXIT macro for long jumping back to the top level interpreter 
    loop.
  * Added the MQO_GP register to contain a stack of active guard objects.
  * Renamed the error_handler object type to guard.
  * Added the REST_ARGS macro for use by primitives.
  * Added the OPT_INTEGER_ARG macro for use by primitives.
  * Added the mqo_show_error function, and added the ability for the show 
    primitive to show errors.
  * Added the guard special form.
  * Added test cases for compilation of the guard special form.
  * Altered compile.scm to compile the guard special form.
  * Added the show primitive.  (A bastardized display, with optional item 
    ellision. )
  * Added the examples/g2.ms example, which demonstrates the use of a guard.
  * Added the errorq, error-key, error-info primitives.

- 12/18/2005, Reduction of Opcodes to Unbound Primitives
  * mqo_exec now uses continuation passing style.
  * All opcodes are now implemented as unbound mqo primitives, and the
    toplevel interpreter loop has been amended to permit primitives to affect
    instruction flow.
  * Fixed error merging symbols.
  * Ensured that END_PRIM moves to the next primitive.
  * Added the REQ_VALUE_ARG macro for use by primitives.
  * Renamed NO_ARGS to NO_MORE_ARGS.
  * Added the MQO_NO_RESULT macro for signalling that a primitive has an 
    unspecified result.
  * Added the pair?, null?, cons, car, cdr, set-car!, set-cdr! and length
    primitives.

- 12/17/2005, Implementation of Let Compression
  * Altered compiler and virtual machine to employ "let compression"; at the
    beginning of a function's evaluation, it allocates memory for all variables
    bound within its lexical scope.
  * Altered compilation of let to expand the allocation of variables, and
    assign values to those variables.
  * Altered compilation of let in the top level to implicitly create a new
    lambda and apply the supplied values against it, similar to a conventional
    Scheme implementation of let.
  * Expanded the SPOT Test system, added the ability to conditionally disable
    spot tests.
  * Added tests for the context registry employed by the compiler.

- 12/9/2005, Vectorization of MOSVM IL
  * The MOSVM compiler now generates a vector for each program, instead of a
  list.  This vector is used by the MOSVM interpreter, gaining
  a considerable performance increase over the traditional SECD use of
  lists.
  * Added closure type to memory.
  * Added primitive type to memory.
  * Moved all operations that are not required to construct a function
    call to primitives.
  * Made VM registers global so primitives can modify them.
  * Made the data and return stack into a vector for speed purposes.
  * Made the environment a list of vectors.
  * Expanded CALL to accept either a primitive or a closure.
  * Expanded USEA and USEN to pre-allocate a context for all internal
    bound variables.
  * Added JF and JMP opcodes.

