Add test for urn actions.
[open-adventure.git] / notes.adoc
index 4e110512da483d01f84937d3d9bcb3a4b4e686c5..4a166bd9eb6f8230427a8936c6807fee90c7f07f 100644 (file)
@@ -9,7 +9,9 @@ separate link:history.html[history] describing how it came to us.
 
 The principal maintainers of this code are Eric S. Raymond and Jason
 Ninneman.  Eric received Don Woods's encouragement to update and ship
-the game; Jason signed on early in the process to help.
+the game; Jason signed on early in the process to help. The assistance
+of Peje Nilsson in restructuring some particularly grotty gotos is
+gratefully acknowledged.
 
 == Nomenclature ==
 
@@ -62,12 +64,12 @@ The adventure.text file is no longer required at runtime.  Instead, it
 is compiled at build time to a source module containing C structures,
 which is then linked to the advent binary.
 
-The game-save format has changed.  This was done to simplify
-FORTRAN-derived code that formerly implemented these functions;
-without C's fread(3)/fwrite() and structs it was necessarily pretty
-ugly by modern standards. Encryption and checksumming have been
-discarded - it's pointless to try tamper-proofing saves when everyone
-has the source code.
+The game-save format has changed.  This was done to simplify the
+FORTRAN-derived code that formerly implemented the save/restore
+functions; without C's fread(3)/fwrite() and structs it was
+necessarily pretty ugly by modern standards. Encryption and
+checksumming have been discarded - it's pointless to try
+tamper-proofing saves when everyone has the source code.
 
 == Translation ==
 
@@ -77,11 +79,11 @@ ugly and quite unreadable.
 
 Jason Ninneman and I have moved it to what is almost, but not quite,
 idiomatic modern C.  We refactored the right way, checking correctness
-against a comprehesive test suite that we built first and verified with
+against a comprehensive test suite that we built first and verified with
 coverage tools. This is what you are running when you do "make check".
 
 This move entailed some structural changes.  The most important was
-the refactoring of 355 gotos into if/loop/break structures.  We
+the refactoring of over 350 gotos into if/loop/break structures.  We
 also abolished almost all shared globals; the main one left is a
 struct holding the game's saveable/restorable state.
 
@@ -99,7 +101,7 @@ in favor of proper C strings.  C strings may be a weak and leaky
 abstraction, but this is one of the rare cases in which they are
 an obvious improvement over what they're displacing... 
 
-The code falls short of being fully modern C in the following
+The code falls short of being fully modern C in the following
 ways:
 
 * We have not attempted to translate the old code to pointer-based
@@ -108,10 +110,9 @@ ways:
   and the choice to refrain will make forward translation into future
   languages easier.
 
-* There are 19 gotos left that resist restructuring; all of these are
-  in the principal command interpreter function implementing its state
-  machine.  A 21st, a two-level loop breakout, is not reducible even
-  in principle.
+* There are a few gotos left that resist restructuring; all of these
+  are in the principal command interpreter function implementing its
+  state machine.
 
 * Linked lists (for objects at a location) are implemented using an array
   of link indices. This is a surviving FORTRANism that is quite unlike
@@ -120,7 +121,9 @@ ways:
   compromise forward-portability to other languages.
 
 * The code still has an unfortunately high density of magic numbers - in
-  particular, numeric object and room IDs.
+  particular, numeric object and room IDs.  There are plans to fix this.
+
+* Much of the code still uses FORTRAN-style uppercase names.
 
 * The code is still mostly typeless, slinging around machine longs
   like a FORTRAN or BCPL program.  Some (incomplete) effort has been made