Exclude \Recent flags from STORE and APPEND commands and from IMAP
messages' permanent flags for filing to other folders. Include all
other flags, even if the server will not store them permanently. The
PERMANENTFLAGS list is no longer used for any purpose.
New variable DEFAULT-MIME-TEXT-CHARSET to support specifying charsets
other than ISO-8859-1 in MIME text attachments. The existing
behaviour is preserved; set this variable to the symbol PROMPT to
change it. This is not carefully conceived, but I need it this hour!
Remove spurious parameter in STRINGIFY-DATA/TRADITIONAL, as a vestige
of earlier changes. This bug had no effect except when explicitly
setting *USE-STACKIFY?* to true, which nothing in the system does at
the moment.
Chris Hanson [Fri, 26 Sep 2008 08:30:23 +0000 (08:30 +0000)]
Greatly simplify configuration choices:
* The distinction between "large" and "small" memory sizes has been
eliminated; nowadays this makes little sense, since our old notion
of "large" is tiny compared to modern programs. The "--large"
option is now accepted but ignored. The old MITSCHEME_LARGE_xxx and
MITSCHEME_SMALL_xxx environment variables are ignored, replaced by
two new vars MITSCHEME_HEAP_SIZE and MITSCHEME_STACK_SIZE. (There's
no var for constant size since it's rarely necessary to specify it.)
* The default heap size is set at 4 megawords, much larger than our
previous "large" size, and adequate for general use.
* We use the "all.com" band by default. The "--compiler" and
"--edwin" options are now accepted but ignored. The env vars
MITSCHEME_COMPILER_BAND, MITSCHEME_EDWIN_BAND, and
MITSCHEME_ALL_BAND are now ignored.
Chris Hanson [Wed, 24 Sep 2008 08:50:48 +0000 (08:50 +0000)]
Fix implementation of ISO 8601 date/time:
* When writing time zone, use "Z" for UTC, drop minutes when they are
zero, and otherwise insert ":" between hours and minutes. Omitting
the ":", as was previously done, is not compliant.
* When parsing, there are two formats: basic and extended. With basic
format, there are no "-" or ":" separators allowed, and with
extended format, they are all required. Previously the parser
allowed each of the date, time, and zone to independently be in
either format. Now the parser requires all three to be in the same
format.
* The parser now handles fractional seconds correctly, rounding up if
the fraction is >= 1/2. It is also careful to use exact arithmetic
for fractions.
* The parser now additionally accepts "," as a fraction indicator, as
required by the standard.
* The parser now implements fractional hours and fractional minutes.
* The parser now accepts time zones over the full range of +/-24
hours; previously it was restricted to +/-12 hours (except the
minute could be non-zero at +12 or -12, which made no sense).
* The parser now computes time zones with non-zero minutes correctly:
old formula: (+ (* SIGN HOUR) (/ MINUTE 60))
new formula: (* SIGN (+ HOUR (/ MINUTE 60)))
* The parser has two kluges to accomodate incorrectly-formed strings
that were once generated by this code: (1) the space character can
be used in place of "T" as a date/time separator; and (2) the ":"
may be omitted from the time zone in extended format.
Chris Hanson [Mon, 22 Sep 2008 08:16:44 +0000 (08:16 +0000)]
Major rewrite: header definitions now use combinator languages to
raise the abstraction level and hopefully avoid more stupid thinkos
like the ones I recently fixed.
Chris Hanson [Sun, 21 Sep 2008 07:35:15 +0000 (07:35 +0000)]
Implement "chunked" transfer encoding, required by HTTP 1.1. Fix bug
in "transfer-encoding" header parser. Add new procedure
READ-RFC2822-FOLDED-LINE that reads a line of text, dealing with the
header-field folding from RFC 2822.
Chris Hanson [Wed, 17 Sep 2008 06:31:54 +0000 (06:31 +0000)]
Hair up handling of HTTP headers. In new model, there are codecs for
each known header (basically almost all of RFC 2616 at this point).
These codecs translate between the string representation of a header
value and its internal representation. MAKE-HTTP-HEADER accepts
either the string representation or the internal representation.
HTTP-HEADER-VALUE always contains the string representation, while
HTTP-HEADER-PARSED-VALUE contains the internal representation. If the
decoder for a header fails on a particular string represenation, or if
there's no decoder for that header, HTTP-HEADER-PARSED-VALUE contains
a default object (use DEFAULT-OBJECT? to test for it).
Additionally, HTTP requests have been changed so that the METHOD is a
string rather than a symbol (that is, "GET" rather than '|GET|).
Write output for temporary compilation into a file with a unique name
so that when the runtime loads the file, the microcode will not cache
the blocks under the same name for each compilation, which caused odd
effects such as
Chris Hanson [Mon, 15 Sep 2008 05:15:23 +0000 (05:15 +0000)]
Split "http-io.scm" to create new file "http-syntax.scm". I'm
currently working on the latter, so this minimizes the difference
between the trunk and my code.
In OPTIONAL-PORT, require only that if an argument was supplied it is
a port. Defer the guarantee that the port is an I/O port until it is
important: ports with PROMPT-FOR-{COMMAND-,}EXPRESSION operations need
not support input operations in order for the prompting procedures to
work.
In SIGNAL-IO-THREAD-EVENTS, we may not always find a dentry for all
the descriptors and modes listed. Don't assume that we shall.
This case arises particularly when there is no thread blocked in
BLOCK-ON-IO-DESCRIPTOR and someone invokes the PROCESS-WAIT primitive.
This should fix the random (%RECORD-REF #F 3) error that I have seen
when gunzipping MIT Scheme's Info reference manual and it isn't in the
operating system's disk buffer cache, which led to a losing race.
Change COMPILE-SCODE/INTERNAL/HOOK into three separate hooks:
COMPILE-SCODE/FILE/HOOK, COMPILE-SCODE/NO-FILE/HOOK, and
COMPILE-SCODE/RECURSIVE/HOOK. Use this in the C back end to fix
compilation of scode not from files. Handle temporary files more
carefully in the C back end. Remove vestiges of support for keeping
debugging info in the C back end, which depends on such operations as
SET-COMPILED-CODE-BLOCK/DEBUGGING-INFO! not available in the C code
generator. The info should perhaps be returned in the compiler
output, and applied in FINISH-C-COMPILATION to the compiled code
block, but this is trickier than it sounds. For now we'll just not
pretend to support keeping debugging info.
Add an optional argument to TEMPORARY-FILE-PATHNAME for a procedure
that transforms the generated pathname before trying to allocate a
temporary file. Implemented only on Unix because that's all I can
test, and the only user of it at the moment will be liarc, which runs
only on Unix anyway.
Clarify IMAP MIME body sections, which are confusing because every
message body is treated as a multipart body by the IMAP's indexing
scheme. This makes IMAIL never fetch TEXT body parts, except when
the user views a message raw with `C-c C-t C-m' (eventually, which
will also view arbitrary MIME bodies raw), and rather use numbered
parts, which will cause IMAIL to refill existing disk caches, even
though they already have mostly the same data in them. IMAIL will
also now show MIME bodies in IMAP and file folders more uniformly,
especially complex nesting of message/rfc822 and multipart bodies.
When walking the body of a message/rfc822 body to insert the latter
in-line, add BODY to the selector to disambiguate the message/rfc822
body from its own body. MIME selectors as used by the front end
continue to diverge from IMAP sections, which appear to make little
sense (although this requires further testing with more IMAP server
implementations).
- to make sense,
- to be more robust,
- to better reflect the terminology of the RFCs,
- to simplify code that uses MIME bodies,
- to move all generic MIME code into imail-mime.scm, and
- to fix a number of small bugs.
The documentation will need to be updated, since some user-visible
commands are now named with the word `body' rather than `entity'.
Undoubtedly, refactoring added many small bugs, too, still to be
weeded out.
Chris Hanson [Sun, 7 Sep 2008 04:33:13 +0000 (04:33 +0000)]
Rewrite of LIST-PARSER to be more general. Now there are three
variants: OBJECT-PARSER, LIST-PARSER, and VECTOR-PARSER. There are
corresponding OBJECT, LIST, and VECTOR keywords for switching between
the different modes. And the optimizer is considerably smarter.
Back out earlier changes concerning a phantom race condition with
the GC daemon (of course the access to the uncompressed file list
locks the GC daemon out), and instead avoid storing entries in it
before the uncompressor has returned normally. Also, handle file
errors in FASLOAD-LOADER, since they aren't all signalled as bad-
range-argument errors by the microcode.