From: Matthew Flatt <>
Date: Fri, 12 Apr 2002 08:30:21 -0600 (MDT)
Subject: 200alpha16

The exp-tagged source code in CVS for MzScheme and MrEd is now version

The main change for this version is a re-write of MzScheme’s I/O
subsystem for Windows. This re-write enables `object-wait-multiple’
support for output ports, plus other improvements in the future.

"Text-mode" I/O (with the LF<->CRLF conversiont) is currently supported
in Windows only for regular files. In particular, MzScheme now reads
and writes to stdin, stdout, and stderr in "binary mode". Text mode
could be supported for all devices, but it’s a pain, so I’ll leave it
out unless someone cares. (I’ve given up on text mode completely in my
own code. CRLF files appear so often in Unix that I write programs to
work with all newline conventions on all platforms.)

Known bug: for Windows 95/98/Me, it’s technically possible that output
flushes on different ports will be re-ordered when the ports write to
the same underlying device. For example, if you run MzScheme within
Emacs, the current error and output ports presumably write to the same
pipe, and it’s possible that a new prompt will appear after an error
message for the previous prompt due to a flush re-order. This
re-ordering is unlikely, however. Besides, if you’re forced to run
95/98/Me instead of NT/2000/XP, then you probably have worse problems
to worry about (unrelated to PLT Scheme).

Other changes in 200alpha16:

 * `object-wait-multiple’ works on file-stream, TCP, and pipe output
   ports. (In 100alpha17, I expect it will work on all ports.)

 * `tcp-listen’ takes a new optional argument: the address where
   connections are receieved (#f = default = all of the listening
   machine’s addresses).

 * Fixed the macro-expansion bug that Doug found.

 * Bytecode input is validated to prevent crashes. More checking is
   needed to guarantee that the space allocated during a bytecode read
   is proportional to the size of the bytecode input.

 * Inside MzScheme: scheme_make_input_port() and
   scheme_make_output_port() have changed.

Note that `make-input-port’ and `make-output-port’ have not yet changed.