home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 103 / af103sub.adf / Hugo.LZX / Hugo / release.txt < prev    next >
Text File  |  1989-06-22  |  24KB  |  549 lines

  1. A BRIEF HISTORY OF HUGO - RELEASE NOTES
  2.  
  3. By Kent Tessman
  4.  
  5. (reachable at the time of this writing at:  <as400477@orion.yorku.ca>
  6. or <tessman@cibc.ca>)
  7.  
  8.  
  9. -----------------------------------------------------------------------------
  10. v2.3d - May 1997
  11.  
  12. I haven't been in the habit of updating these release notes for interim
  13. releases (i.e., same-version updates), but a couple of recent revisions are
  14. worth mentioning in addition to the usual polishing and tweaking:
  15.  
  16. It is now possible to pre-declare arguments such as:
  17.  
  18.     routine TestRoutine(a, b = 25, c)
  19.     {...}
  20.  
  21. The statement "colour" may now be used interchangeably with the
  22. original "color".
  23.  
  24. Parentheses can be used where they previously could not, for example, in
  25.  
  26.     if (x = 1, 2, 3) and y = 4
  27.  
  28. The accompanying v2.3.2 library allows the player object to be referred to
  29. by the library in first, second, or third person depending on the setting
  30. of the player_person global.  The player object must help out a bit by giving
  31. the correct set of pronouns.  For example, the normal second-person player
  32. object "you" in SHELL.HUG now contains:
  33.  
  34.     pronouns "you", "you", "your", "yourself"
  35.  
  36.  
  37. -----------------------------------------------------------------------------
  38. v2.3 - March 1997
  39.  
  40. The month of fairly rigorous testing and refinement between v2.3's beta
  41. release and the official release resulted in at least a couple of highly
  42. functional extensions to object building:
  43.  
  44.     replace <objectname> "name"
  45.     {
  46.         inherits <class1>, <class2>,...
  47.         ...
  48.     }
  49.  
  50. The "replace" directive is useful for replacing previously defined objects
  51. or classes without having to actually edit the file in which they first
  52. appear.  A popular example is the room class from OBJLIB.H:  often,
  53. programmers have wanted to give their basic room classes special properties.
  54. This is now easy via:
  55.  
  56.     replace room "room_class"
  57.     {
  58.         (...new room definition...)
  59.     }
  60.  
  61. The "inherits" instruction allows more than one class to be used to build
  62. an object.  The precedence of inheritance is left to right, i.e., the
  63. properties of <class1> take precedence over <class2>, etc.
  64.  
  65. (Both "replace" and "inherits" were based on suggestions by Jools Arnold.)
  66.  
  67. Mark Bijster offered the following:
  68.  
  69.     object is <attribute1>[, [not] <attribute2>,...]
  70.  
  71. is now valid in a line of code, so that multiple attributes can be set or
  72. cleared for the same object at one time.
  73.  
  74. A couple of changes to the debugger accompany v2.3.  An online help file is
  75. now available (HDHELP.HLP), giving information on the debugger's various
  76. functions and features.  In terms of deletions, the ability to launch the
  77. compiler or an editor has been removed--mainly because in larger systems, it
  78. is relatively easy to switch back and forth between multiple programs, and
  79. on smaller systems (such as MS-DOS), memory constraints prevented launching a
  80. new process anyway.  (In short, this sort of process spawning wasn't
  81. particularly portable.)
  82.  
  83. A tidied up version of the libraries accompanies v2.3.
  84.  
  85.  
  86. -----------------------------------------------------------------------------
  87. v2.3 beta - February 1997
  88.  
  89. A small step forward in refining the Hugo language, but a major leap in
  90. terms of expanding the functionality of the Hugo design environment.
  91.  
  92. Version 2.3 includes a full-featured source(ish) level debugger enabling
  93. a Hugo programmer to utilize breakpoints, watch expressions, code tracing,
  94. and most other modern IDE features to debug programs.  It is not
  95. technically a source-level debugger in that it is tracing the compiled
  96. object code, not the original source file(s), but the output is similar
  97. enough to be useful in the same way.  Big thanks to my brother Dean Tessman
  98. for his input on the user interface.
  99.  
  100. Enhancements to the language allow the use of efficient operators '++'
  101. and '--' for pre/post-increment/decrement, as well as '+=', '-=', '*=',
  102. '/=', '&=', and '|='.  Those unfamiliar with these somewhat cryptic yet 
  103. exceptionally useful operators are referred to the Hugo Manual for
  104. further explication.
  105.  
  106. Another new feature is the "enumerate" directive, as in:
  107.  
  108.     enumerate start=5, step *2
  109.     {
  110.         FIRST_CONSTANT, SECOND_CONSTANT, THIRD_CONSTANT
  111.     }
  112.  
  113. which is equivalent to
  114.  
  115.     constant FIRST_CONSTANT   5
  116.     constant SECOND_CONSTANT 10
  117.     constant THIRD_CONSTANT  20
  118.  
  119. Globals may also be enumerated via "enumerate globals [start..., step...]".
  120.  
  121. (Both the efficient operators and constant/global enumeration have come
  122. into being at the urging of Mr. Jools Arnold.)
  123.  
  124. As a final constant-initialization enhancements, constants no longer need to 
  125. be declared with an explicit value.  If none is provided, the constant is 
  126. assigned a value that is unique from any other constants declared without 
  127. an explicit value, so that in
  128.  
  129.     constant THIS_CONSTANT
  130.     constant THAT_CONSTANT
  131.  
  132. THIS_CONSTANT and THAT_CONSTANT can be referred to meaningfully as
  133. different values, flags, etc.
  134.  
  135. Further compiler enhancements include stricter syntax checking to avert 
  136. potential runtime errors, the ability to pre-initialize local
  137. variables, as well as compile-time warnings of unused locals, and the
  138. option (for legibility) of defining an event as "event in <object>"
  139. instead of simply "event <object>".
  140.  
  141. Other quick additions and fixes:
  142.  
  143.     - "array[]" now returns the number of elements in the array
  144.  
  145.     - "&(obj.property1).property2" no longer incorrectly takes 
  146.       the address of <property1>
  147.  
  148.     - it is now possible to specify the input color via a third 
  149.       parameter in the color statement:
  150.       "color <foreground>[, <background>[, <input color>]]"
  151.  
  152.     - quirky attribute behavior has been isolated and reined in
  153.  
  154. A stylistic syntactical change involves constructions such as
  155.  
  156.     object.property1.property2
  157.  
  158. which used to be read as
  159.  
  160.     object.(property1.property2)
  161.  
  162. These are now interpreted left-to-right, so that the order of processing is
  163.  
  164.     (object.property1).property2
  165.  
  166. This is a.) more consistent with other common object-oriented languages, and 
  167. b.) plain old more intuitive.
  168.  
  169. The behavior of FindObject and the engine's expectations for it have been
  170. refined so that, for example, object disambiguation is more accurate, and
  171. parse_rank now works properly in a wider variety of circumstances.
  172.  
  173. As far as deletions to the language go, "~" and "^"--which existed briefly
  174. as equivalents to "\"' and '\n' in print statements for Inform users
  175. familiar with the former symbols--are no longer significant in printed text.
  176.  
  177. Thanks to Dean Tessman, Julian Arnold, Jim Newland, Cam Bowes, John Menichelli, 
  178. Jerome Nichols, and everyone else who has made contributions large and small.
  179.  
  180.  
  181. -----------------------------------------------------------------------------
  182. v2.2 - July 1996
  183.  
  184. While on the surface not much different from v2.1, v2.2 contains a range
  185. of revisions, enhancements, and extensions.  Here's a quick rundown:
  186.  
  187. Text output has been greatly expanded in terms of flexibility and capability,
  188. allowing (if the system in question supports it) boldface, italics,
  189. underlining, and proportional type.  Special characters such as accents
  190. are now easily printable.  In conjunction with these changes, the library
  191. printing and listing routines have been revised, and (most of) the printed
  192. text has been localized at the ends of HUGOLIB.H and OBJLIB.H.  Additionally,
  193. text may now be routed to a memory (array table) address instead of the
  194. screen.
  195.  
  196. Changes in how expressions may be structured now allow
  197.  
  198.     if x = 1, 2, 3
  199.  
  200. to be used instead of:  if x = 1 or x = 2 or x = 3, and
  201.  
  202.     if a = "apple" and b = "orange" and
  203.         c = "banana"
  204.  
  205. to be split across multiple lines, providing it ends in "or", "and", or ",".
  206.  
  207. The Init routine is no longer called with the arguments (MAX_OBJECTS,
  208. MAX_LINE); these are now referenced by the new globals objects and
  209. linelength (and there is a new global pagelength).
  210.  
  211. The random(n) engine function now returns a random value from 1 to n, a
  212. change that Jim Newland suggested was more intuitive and consistent
  213. (although the current manual incorrectly and unfortunately gives the
  214. range as 0 to n).  Array references are now all word-based, instead of
  215. previously where references involving calculations such as a[b+3] were
  216. byte-based.  Property routines may now be indirectly run with
  217. object..property.  And grammar lines may now use the "word" token to
  218. specify any single dictionary entry.
  219.  
  220. Extensions such as file i/o and command recording/playback have been
  221. added, as well as a machine-independent compressed saved-game format--and
  222. the engine now requires a confirmation if a save request will overwrite
  223. an existing file.
  224.  
  225. Enhancements to the command line allow directories to be specified for
  226. different types of files.
  227.  
  228. Finally, there has been the usual fine-tuning to the compiler (particularly
  229. with regard to source-file processing and temp file usage) and the engine
  230. (mainly the expression evaluator) to increase speed and performance.
  231.  
  232.  
  233. -----------------------------------------------------------------------------
  234. v2.1 - March 1996
  235.  
  236. Version 2.1 includes a number of substantial (although not earth-
  237. shattering) improvements to both the compiler and the interpreter.
  238. Foremost among these are the increase in the number of available attributes
  239. from 32 to 128, more elegant compiling and linking (and error messaging),
  240. more explicit run-time tracing of loop constructs, and a much, much faster
  241. expression evaluator.
  242.  
  243. As well, the (also faster) text-printing routine in the engine has been
  244. enhanced to allow the use of ~ and ^ in printed text to mimic \" and \n
  245. (the quotation mark and newline characters); this feature was added at
  246. the request of a number of Inform users who find them familiar and easier
  247. to work with.  And string constants can now be extended over more than one
  248. line without using the backslash ("\") at the end of the unfinished line.
  249. (The backslash is still necessary for non-string-constant expressions, etc.
  250. that stretch over more than one line.)
  251.  
  252. The author also managed to track down one particularly troublesome bug that
  253. prevented the coding of a complex assignment such as:
  254.  
  255.     <object>.<property> [#n] is <attribute>
  256.  
  257. (Also note:  #n is no longer passed as the first argument to a property
  258. routine.)
  259.  
  260. The library files include some major developments.  Primarily, the object
  261. library (OBJLIB.H) now includes advanced classes such as plural and
  262. identical objects, attachables, and components.
  263.  
  264. HUGOLIB.H has also been fine-tuned.  The routines DefArt, CDefArt,
  265. IndefArt, and CIndefArt (hold-overs from the author's introduction to
  266. interactive-fiction programming via the early Inform library) have been
  267. replaced with The, CThe, Art, and CArt, respectively--a somewhat subjective
  268. choice, perhaps, but one that lends it self to clarity of reading, and
  269. which is both easily corrected in existing files using search-and-replace
  270. as well as being nicely less cryptic.
  271.  
  272. Object listing has been enhanced--particulary the routines DescribePlace,
  273. ShortDescribe, WhatsIn, SpecialDesc, and ListObjects.  The LISTTYPE global
  274. no longer exists; it has been replaced by FORMAT.  As well, those users
  275. who have begun projects using the v2.0 starting-block program SHELL.HUG
  276. will want to remove the list_contents property from the player object.
  277.  
  278. And of course, the obligatory enhancements of the Vault of Hugo sample game,
  279. Colossal Hugo, and Spur have been released to accompany version 2.1.
  280.  
  281.  
  282. -----------------------------------------------------------------------------
  283. v2.0 - November 1995
  284.  
  285. (Those keeping score may have noticed that v1.3 was never officially
  286. released.  And admittedly v2.0 is not the full-featured, bells-and-whistles,
  287. CD-ROM-driven animation and sound version.  But the changes to the actual
  288. framework and functionality of the compiler have been so substantial since
  289. v1.2 that it started to seem less sensible to keep Hugo at a version 1
  290. level.)
  291.  
  292. The biggest new feature in version 2.0 is the ability to precompile header
  293. files like HUGOLIB.H into .HLB files that may be included using the #link
  294. directive instead of #include.  A new compiler switch -h is provided to
  295. specify creation of an .HLB precompiled header instead of a normal .HEX
  296. Hugo object file.
  297.  
  298. Thanks to the Hugo users who saw the value of allowing some form of linking,
  299. and thanks also to the author's lack of sensibility in vastly underestimating
  300. the work involved in reverse-engineering a non-linking compiler to accomplish
  301. the task.  I'm going to get some sleep now.
  302.  
  303. Other streamlining changes have included the removal of the -t, -m, -n, and
  304. -f switches (for compilation tracing, monitoring, numerical code generation,
  305. and full-object summaries) since 1.) the amount of output produced using any
  306. one of these become almost overwhelming when compiling a program of any
  307. significant length, and 2.) few programmers, if any, made use of them
  308. anyway.
  309.  
  310. The performance speed of the Hugo Engine has been increased by redesigning
  311. the way it processes conditional statements.  The engine is now able to
  312. work much more quickly through a complex series of IFs, SELECTs, DO-WHILEs,
  313. etc.
  314.  
  315. Accompanying version 2.0 is also Spur, a western adventure written by the
  316. author, as well as an extensive demonstration of what Hugo can do.  (In
  317. fact, the greatest use of version 1.3 was as an interim development tool
  318. for Spur.)
  319.  
  320. (NOTE:  A pre-Christmas touch-up release of v2.0 included some minor
  321. fixes to the compiler, engine, and library.  Special thanks to David Kinder,
  322. whose feedback helped increase the portability of the Hugo source code.)
  323.  
  324.  
  325. -----------------------------------------------------------------------------
  326. v1.3 - August 1995
  327.  
  328. Some significant enhancements to the compiler and interpreter, as well
  329. as the library--enough so, in fact, that the author considered making
  330. this v2.0, but held off as it has been suggested in the past that v2.0
  331. will be the full bells-and-whistles, CD-ROM graphics and sound version.
  332.  
  333. The most significant changes were to accommodate large programs, which
  334. would run into problems if the size of the total data space exceeded 64K.
  335. The fix required involved altering the internal format for storing
  336. reference addresses.  And some further refinement of the file format
  337. has--thankfully--eliminated the need for a separate .H$$ text bank file;
  338. everything is now self-contained in .HEX.  (These were the almost-v2.0
  339. changes.)
  340.  
  341. Also, property routines now always pass the number of the property
  342. element referenced as the first-defined local in the routine (if any is
  343. defined), so that if 'object.property #x' is called, and <property> is
  344. a routine, <x> is passed as the first local.  The only effects on
  345. programmers are that 1.)  It is now possible to return more than one value
  346. from a property routine, depending on how it was called, and 2.)  The
  347. first-defined local can no longer be expected to equal 0, as is usually
  348. the case in a normal routine.
  349.  
  350. It was decided that all compiler directives must now be prefixed with a
  351. C-ish "#"--i.e. #include, #ifset, etc.  This not only makes the source
  352. code easier to read, but increases compiler speed.  Other fine-tuning and
  353. optimizations increased compilation speed by as much as 25 percent.  (And
  354. another directive, #version, is provided--and used in the library files--
  355. to ensure that #included files are compatible with the latest Hugo features.)
  356.  
  357. Changes in format to engine commands and functions include:
  358.  
  359.     string(<array>, <dictentry or parse$>, <maxlen>)
  360.  
  361. (making the StringCapture library function obsolete), and
  362.  
  363.     save, restore, restart, scripton, and scriptoff
  364.  
  365. all of which must now be read as values instead of simply issuing a
  366. simple command.  Return values (1 if successful, 0 if not) should now
  367. be checked where appropriate, i.e.:
  368.  
  369.     if not save:  "Failed."
  370.  
  371. An UNDO function (checked in the same manner as save, restore, etc.) is
  372. now provided to undo the last player command.  (Multiple-turn undoing
  373. is allowed as long as undo information exists in the undo buffer.)
  374.  
  375. It is also possible to use the token STRING in a grammar syntax line
  376. to allow the player input to contain a quoted string.  The string is
  377. passed to the verbroutine in parse$, and may then be written to a string
  378. array via STRING(<array>, parse$, <maxlen>).
  379.  
  380. The new command DICT, as in
  381.  
  382.     x = dict(<array or parse$>, <maxlen>)
  383.  
  384. allows a new dictionary entry to be dynamically created at runtime
  385. (although space for the total number of entries that may ultimately be
  386. created must be reserved during compilation--in bytes--by setting the
  387. MAXDICTEXTEND limit).
  388.  
  389. Additions to the library included the NumberWord routine as well as a
  390. (small to begin with) set of math routines.  Properties such as
  391. inv_desc and list_contents now make it even easier to customize the
  392. listing of objects.  As well, some work was done with how the library
  393. treats scenery objects--their contents (if any) are now listed by default,
  394. even if the object itself isn't.
  395.  
  396. New string array routines include StringCompare, StringDictCompare, and
  397. StringEqual.  New character script routines include CancelScript,
  398. PauseScript, ResumeScript, and LoopScript--not to mention the fact that
  399. RunScripts now checks before/after routines for the actor.
  400.  
  401. A major improvement to before/after routines is in the usage specification,
  402. so that
  403.  
  404.     parent(object) DoGet
  405.  
  406. replaces
  407.  
  408.     parent DoGet
  409.  
  410. and the library now does checking for the special before property in the
  411. DoGet routine.  What this means is that programmers may now check
  412. any before or after routine/object combination instead of the previously
  413. pre-determined object, xobject, location, and parent.
  414.  
  415. Thanks again to Vikram Ravindran for excellent suggestions on where
  416. Hugo's functionality could be extended (particularly on supporting
  417. the implementation of DICT and UNDO, as well as library improvements big
  418. and small), and to Jim Newland for his extensive investigation into--and
  419. subsequent notes to the author on--how the character script routines might
  420. be expanded to further increase their usefulness.
  421.  
  422. NOTE:  Due to enhancements to certain key aspects of the Hugo language, it
  423. is recommended that programmers who may already be familiar with it take a
  424. moment to browse through the v1.3 manual, revisiting in particular the
  425. sections on before/after property routines, string arrays, and character
  426. scripts.
  427.  
  428.  
  429. ---------------------------------------------------------------------------
  430. v1.2 - July 1995
  431.  
  432. This time at the end of the month.
  433.  
  434. Hugo version 1.2 was moved ahead mainly in response to requests by
  435. porters for more easily portable code.  As a result, the H?HEADER.H
  436. files were changed somewhat, with the porting-required functions moved
  437. into separate .C files to make the job of adapting Hugo to different
  438. operating systems more manageable.  (Thanks especially to Jesse McGrew
  439. for the suggestion.)
  440.  
  441. Changes to Hugo at the most basic levels were relatively minor, except
  442. that compilation speed is about 20% faster (and engine execution is
  443. faster as well) because of Jeff Jenness's suggestion to limit the
  444. number of C strcmp() calls performed.  The greatest changes here were
  445. in STRINGFN.C, and HCMISC.C in the SeparateWords() function.
  446.  
  447. A couple of new constructs have been added to the language, particularly
  448.  
  449.     for <variable> in <object>
  450.  
  451. loops, the ability to specify values as ASCII characters as in
  452.  
  453.     'A', 'z', '7'
  454.  
  455. and print them as characters using
  456.  
  457.     printchar <value>
  458.  
  459. As well, it is now possible to specify an array address using a variable
  460. or other value, as in:
  461.  
  462.     x = testarray           ! i.e, the address of testarray[]
  463.     print array x[5]        ! the same as:  print testarray[5]
  464.  
  465. And finally, there is now a STRING command
  466.  
  467.     string <array>, <word>, <maximum length>
  468.  
  469. which reads the dictionary word <word> into the array given by <array>,
  470. to a maximum of <maximum length> characters.  A number of string-
  471. manipulation routines were subsequently added to HUGOLIB.H:
  472. StringCapture, StringCopy, StringLength, and StringPrint.
  473.  
  474. Error trapping is also considerably tighter, lessening the number of
  475. almost-correct lines which might slip through the compiler only to
  476. crash the engine at runtime.
  477.  
  478. Thanks also to Vikram Ravindran for spotting a couple of problems
  479. in Colossal Hugo (mainly involving attributes that were not properly
  480. assigned when needed in certain object definitions), as well as
  481. identifying a problem in HUGOLIB.H's DoGo routine which moved the
  482. player to a null room upon entering 'go vault' in the sample game.
  483. Thanks to Markus Mattes for suggesting a better fix than the one the
  484. author had in mind...
  485.  
  486.  
  487. -----------------------------------------------------------------------------
  488. v1.1 - July 1995
  489.  
  490. After a couple weeks of error-reporting and user-testing, I went about
  491. trying to address the two major problems with v1.0:  i.e. memory shortages
  492. and the lethargic compile speed.
  493.  
  494. Thanks especially in this case to Dr. Jeff Jenness, who pointed out to me
  495. that life does exist beyond MS-DOS, and that it may highly susceptible
  496. to stack abuse.  Jeff also suggested moving dictionary search/store
  497. management into memory as opposed to doing it in a work file.  This change
  498. alone practically doubled compile speed--on the trusty 8086, SAMPLE.HUG
  499. compiled in just over 300 seconds--and the programming required to
  500. implement the far-model arrays (MS-DOS programmers may flinch here in
  501. painful recognition) enabled many of the storage arrays such as for
  502. objects, properties, etc. to be changed from static arrays to dynamically
  503. allocated memory blocks.  The benefit:  increased limits for whatever
  504. storage types the user may desire, and no more memory problems when, for
  505. example, setting DEBUG instead of DEBUG_SMALL in COLOSSAL.HUG.
  506.  
  507. Changes to HCHEADER.H:  Far-model memory allocation and pointer declaration
  508. for objects, properties, dictionary, etc.  Making the applicable MAX<limit>
  509. declarations dynamic integers instead of constant #defines.
  510.  
  511. HCMISC.C:  AddDictionary() now searches a memory-based array instead of a
  512. temporary work file.  OpenFiles() takes care of allocating space for
  513. objects, properties, dictionary, etc.  New functions ListLimits() and
  514. SetLimit(), as well as provision for $<setting>=<new limit> specification
  515. in the invocation line via an addition to ParseCommandLine() (once again
  516. following in the footsteps of another of Graham Nelson's excellent ideas
  517. from Inform).
  518.  
  519. Additionally, there were minor additions/changes to the other compiler
  520. and engine source files, as well as to the Hugo library files.  (One change
  521. to SAMPLE.HUG was important--particularly to the author's self-respect.
  522. Seems that in revising the methods of player-character interaction, he
  523. actually omitted the means of solving the sample game.)
  524.  
  525.  
  526. -----------------------------------------------------------------------------
  527. v1.0 - June 1995
  528.  
  529. Hugo v1.0 was essentially the first full-featured, portable version of
  530. the compiler and engine written in C (and based on a MS-DOS-only
  531. Microsoft QuickBASIC beta release).  It was intended from the beginning
  532. to be a functional beta release--i.e. one which would serve to point
  533. out shortcomings and needed improvements with Hugo's design, but with
  534. which users would also be able to start developing programs that would
  535. be fully compatible with later releases.
  536.  
  537. The most obvious shortcomings were in memory management and compilation
  538. speed.  On the machine the author used for development--an 8086, the
  539. machine of necessity, not of choice--the sample game SAMPLE.HUG took
  540. more than 600 seconds to compile.  And larger programs ran into memory
  541. limitations, in one instance prompting the creation of the scaled-down
  542. DEBUG_SMALL HugoFix command set instead of the regular set included via
  543. setting DEBUG in the source file.
  544.  
  545. Also at this time, the first version of COLOSSAL.HUG was released--a Hugo
  546. port of Adventure based on Graham Nelson's Inform port of David Baggett's
  547. TADS adaptation of Crowther and Woods's original classic game.  (Quite a
  548. lineage.)
  549.