Revised yet again: Inform 6.05 ============================== Two weeks ago I made an attempt at a definitive, all-known-bugs-fixed release of Inform: the next morning, emails began to arrive, reading "I've been meaning to tell you about this bug for a while now...". Here then is v6.05, fixing 9 bugs present in v6.04. (Three of these bugs are serious enough that I felt I should make the repaired version available immediately: particularly the *** Backpatch symbol out of range *** bug, which until recently I had only received rumours of, and had not been able to duplicate.) The full list of changes is given below. Apologies for troubling everyone again, so soon after the last time, and of course my thanks to all those who wrote to me. Graham Nelson September 24th 1996 ----------------------------------------------------------------------------- The files which make up this release are at the incoming/if-archive directory at ftp.gmd.de, pending proper archiving. The library 6/2 is not being updated, only the source code to Inform and its technical manual (and that only slightly). Specifically, there is a tar archive: inform605_source.tar containing the 21 files arrays asm bpatch directs errors expressc expressp files inform lexer linker memory objects states symbols syntax tables text veneer verbs header plus a file called "README" containing the text of this post. Of these, "header" is an include file and should probably be unpacked as a file called "header.h"; the rest should probably be unpacked as "whatever.c". and a slightly modified (mostly to contain the modification history below) Technical Manual file inform605_technical_manual.txt [in plain ASCII text; including instructions on how to port the code] In addition, in my other capacity as the Acorn RISC OS porter of Inform, I've made a fresh version of: inform605_riscos_port.spk [the Acorn RISC OS port of Inform 6, set up and ready for use, including the library; this needs only an interpreter to be provided. The file is a SparkFS archive, readable with the public-domain utility SparkPlug.] ----------------------------------------------------------------------------- Changes since v6.04 Feature added: Assembly language tracing slightly tidied up (a cosmetic change only). Bugs fixed: When a file with very long strings in (such as one generated automatically by "infoclues") is read, it can corrupt memory, resulting in the malloc heap being damaged. Spurious backpatching errors (actually, all backpatching errors are spurious - backpatching is supposed to work every time) produced when the Z-code area of the Z-machine exceeds 64K. (This seldom happens even in large games, unless quite long print and print_ret strings are quoted.) The error message in question was *** Backpatch symbol out of range *** and, just to recap, this should never appear. Please send me the offending source code if it persists! The only time I've seen this bug is that it once hung the Z-machine while working on printing an inventory of items which needed grouping using "list_together", but it's actually a mistake in the shift-reduce expression grammar: "(...)" (function call) has precedence level 11, whereas "." has level 12, in order to make messages object.message(...) parse correctly (i.e., as (object.message)(...)). This isn't usually done in SR operator grammars because, as I now realise, it results in function(X).property being misinterpreted as function(X.property). I've corrected this by giving (...) the asymmetric precedence level of 11 on the right, but 14 on the left. Printing dictionary contents to a text transcript file not working on the Amiga port, since an internal buffer was overwritten by one byte (5x16+1 = 81, not 80). Spurious "variable declared but not used" warnings appearing for a variable used only as a store destination in assembly language. The "box" statement producing boxes of the wrong width when the text contains the @ escape character (e.g. "@@92@@92@@92" used to be wrongly calculated as 12 characters wide, when it really consists of three backslash characters). The v6.04 optimisation using "pull" (see above) didn't work in v6, v7 or v8 (for two different reasons, but basically because the opcode behaves differently in these as compared with lower versions). Assembly language in v8 recognising the wrong instruction set (same as the previous bug). Version 6 games not properly compiled in some cases (because of a rounding error in calculating packed address offsets: a new section 8.7 has been added to the Technical Manual to document how Inform works these out). Many thanks to the following informers, who have reported bugs in Inform 6: Torbj|rn Andersson, Paul E. Bell, Gerald Bostock, Neil Brown, Evan Day, Stephen van Egmond, Greg Falcon, Roy Fellows, David Fletcher, Michael Graham, Sam Hulick, Brad Jones, Niclas Karlsson, Matt Kimball, Kirk Klobe, Josh Larios, Bonni Mierzejewska, Tim Muddleton, Ross Nicol, Robert Pelak, Matthew Russotto, Miron Schmidt, Rene Schnoor, Anson Turner, Uncle Bob Newell and all. -----------------------------------------------------------------------------