5P9i0s8y19Z 5P9i0s8y19Z id=1 nft=01;80000008;000B;00;Book Antiqua dt=RTF Hugo v2.5 0 {\rtf1\ansi\deff0\deftab850{\fonttbl{\f0\fnil\fcharset0 arial;}{\f1\fnil\fcharset0 Book Antiqua;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard{\tqc\tx4680 \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs28\cf0\b Hugo v2.5\par {\brdrb\brdrs\brdrw20\brsp20\qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs28\cf0\i An Interactive Fiction Design System\par }}\qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par {\tqc\tx4680 \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0\b PROGRAMMING MANUAL\par }\qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par {\tqc\tx4680 \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 Copyright \'a9 1995-2000 by Kent Tessman\par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs20\cf0 TreePad transcription by Mike Arnaud \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs20\cf0\i Revised February 2000\par \qc\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs20\cf0\i }} } 5P9i0s8y19Z id=2 nft=02;80000008;000A;00;Times New Roman dt=RTF I. INTRODUCTION 1 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0\b I.\tab INTRODUCTION\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Hugo is a system for designing, programming, and running sophisticated interactive fiction, or text \plain\f0\fs24\cf0 adventures. It is the result of an attempt to further extend the concepts developed in earlier, similar \plain\f0\fs24\cf0 systems in order to make interactive fiction programming less cryptic and more accessible to \plain\f0\fs24\cf0 designers. Hugo owes much to the original Infocom format (particularly with regard to its internal \plain\f0\fs24\cf0 data tables) as well as to Graham Nelson's publicly distributed Inform compiler (and its syntactic \plain\f0\fs24\cf0 interpretation of the Infocom format and straightforward grammar definition).\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The best advice to be given for learning Hugo is probably to print or otherwise have handy the source \plain\f0\fs24\cf0 listing of \plain\f1\fs24\cf0 SAMPLE.HUG\plain\f0\fs24\cf0 , and to refer to it throughout; examples of almost all of Hugo's features may \plain\f0\fs24\cf0 be found in the source of the sample game.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Author e-mail (The General Coffee Company Film Productions):\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Hugo Home Page:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab http://www.generalcoffee.com\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i (As of this revision)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i }} } 5P9i0s8y19Z id=3 dt=RTF I.a. Legal Notes 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset2 symbol;}{\f2\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.a.\tab Legal Notes\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Programs created using the Hugo Compiler are the property of the individual author. The library \plain\f0\fs24\cf0 files are copyright by Kent Tessman, as is the Hugo Engine. The use of the Hugo library files and the \plain\f0\fs24\cf0 distribution of the Hugo Engine are authorized so long as all transactions are non-commercial and \plain\f0\fs24\cf0 free of charge (except in cases where any charge is to cover the cost of distribution), and that the \plain\f0\fs24\cf0 library files and engine are not distributed in a modified form.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 For those interested in the commercial distribution of a program created with the Hugo Compiler, \plain\f0\fs24\cf0 please contact Kent Tessman for permission.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 NOTE: Since the Hugo Compiler and Engine are provided free of charge, there is no warranty for \plain\f0\fs24\cf0 their use.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=4 dt=RTF I.b. (Less Legal Notes) 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.b.\tab (Less Legal Notes)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 This supplementary, less-official section is meant to clarify my intentions as to legal usage of \plain\f0\fs24\cf0 Hugo, and what it means for users who may want to distribute their games. First off, let me say \plain\f0\fs24\cf0 that, I do want to be able to maintain some discretion over what is done with Hugo, and the above \plain\f0\fs24\cf0 phrasing is intended to reserve me that ability. Hugo is more than "just" a compiler-it's a complete \plain\f0\fs24\cf0 design and runtime environment, so distribution may involve more than just a simple \plain\f1\fs24\cf0 .HEX\plain\f0\fs24\cf0 file \plain\f0\fs24\cf0 (which, even though a large part of it may be the Hugo Library, isn't really a cause for concern on \plain\f0\fs24\cf0 my part).\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Here's a quick informal overview of how I see the various types of distribution:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 1. \plain\f0\fs24\cf0\i Freeware.\plain\f0\fs24\cf0 I don't really have any concerns, even if the Hugo Engine is being distributed as part \plain\f0\fs24\cf0 of a free package. (Although it might be nice to know about this, just so far as wanting to help \plain\f0\fs24\cf0 ensure that proper instructions, updated information, etc. were included.) As far as using the \plain\f0\fs24\cf0 Hugo Library goes: I wrote it for this express purpose, so that people would use it in making their \plain\f0\fs24\cf0 own games. Freeware distribution is certainly something I fully encourage.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 2. \plain\f0\fs24\cf0\i Shareware.\plain\f0\fs24\cf0 Again, I don't think this really concerns me, either. (Although, again, I would like to \plain\f0\fs24\cf0 be aware of shareware distribution. My only real objection would be to something that is entirely \plain\f0\fs24\cf0 reprehensible-I probably don't need to go into details. In that case, I'd probably tell you to write \plain\f0\fs24\cf0 your own damned library and interpreter.) The shareware market for IF is unfortunately minor, \plain\f0\fs24\cf0 but writing a good game takes a lot of talent and hard work-and if Hugo authors wanted to try to \plain\f0\fs24\cf0 generate some shareware revenues, I would wish them luck.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 3. \plain\f0\fs24\cf0\i Commercial software.\plain\f0\fs24\cf0 This is about the only sticking point I can think of, and it's not much of one. \plain\f0\fs24\cf0 It's unfortunately pretty unlikely that someone could market a wildly successful piece of \plain\f0\fs24\cf0 commercial Interactive Fiction. On the other hand, I do believe that Hugo is capable of creating \plain\f0\fs24\cf0 some pretty eye- (and ear-) catching games. And on the other other hand, especially with \plain\f0\fs24\cf0 commercial software, what you'd be distributing would likely be more than half written by other \plain\f0\fs24\cf0 people (i.e., me, the library contributors, and any porter(s)). But even in a case like this, I would \plain\f0\fs24\cf0 expect any individual license to give the author the freedom to sell \plain\f0\fs24\cf0\i n\plain\f0\fs24\cf0 copies of the game without \plain\f0\fs24\cf0 involving me or anyone else in any (however minor) participation.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=5 dt=RTF I.c. Names and Acknowledgments 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset2 symbol;}{\f2\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.c.\tab Names and Acknowledgments\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Those who have taken upon themselves the (sometimes trying, I'm sure) task of porting Hugo to \plain\f0\fs24\cf0 various platforms-aside from the author's own 16-bit DOS, 32-bit DOS, Windows, and BeOS \plain\f0\fs24\cf0 ports-are:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li862\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Julian Arnold\tab \tab Acorn/RiscOS\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Gerald Bostock\tab \tab OS/2\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab David Kinder\tab \tab Amiga\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Bill Lash\tab \tab Original Unix/Linux port\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Andrew Plotkin\tab Macintosh (using Glk)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Colin Turnbull\tab \tab Original Acorn Archimedes\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The author is considerably indebted to them, for all their work as well as for their input on how to \plain\f0\fs24\cf0 improve the compiler and engine by way of criticisms both generous and deservedly direct.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 More than a few words of appreciation must be given to Volker Blasius who (now with help from \plain\f0\fs24\cf0 David Kinder) has had the substantial responsibility of maintaining the Interactive Fiction Archive \plain\f0\fs24\cf0 at \plain\f0\fs24\cf0\i ftp://ftp.gmd.de\plain\f0\fs24\cf0 -one of the key resources for Hugo programmers and a primary hub of material for \plain\f0\fs24\cf0 contributors to (and readers of) the newsgroups \plain\f0\fs24\cf0\i rec.arts.int-fiction\plain\f0\fs24\cf0 and \plain\f0\fs24\cf0\i rec.games.int-fiction\plain\f0\fs24\cf0 .\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Thanks also to those whose comments and suggestions have contributed to making Hugo as useful \plain\f0\fs24\cf0 and usable as it is: Dr. Jeff Jenness, Vikram Ravindran, Jesse McGrew, Paolo Vece, Daniel \plain\f0\fs24\cf0 Cardenas, Cam Bowes, Mark Bijster, Jose Luis Cebrian, John Menichelli, Jerome Nichols, Jason \plain\f0\fs24\cf0 Dyer, Jason Brown, Gunther Schmidl, and Giacomo Pini. Acknowledgment and thanks are also \plain\f0\fs24\cf0 due Graham Nelson, whose Inform language helped give shape to Hugo's early syntax and \plain\f0\fs24\cf0 structure.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Special thanks to Julian Arnold and Jim Newland, members of the ad hoc Hugo What-If? \plain\f0\fs24\cf0 Committee. They've both made numerous valuable contributions to Hugo both in terms of \plain\f0\fs24\cf0 suggestions for the language itself and for user library improvements and extensions-to be more \plain\f0\fs24\cf0 specific would surely be to overlook something invaluable.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Finally, my brother Dean Tessman has been a well-used resource with his willingness to test-drive \plain\f0\fs24\cf0 multi-100K e-mail attachments of executables and to engage in ongoing back-and-forth discussions \plain\f0\fs24\cf0 on programming minutiae.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=6 dt=RTF I.d. Packing List 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 .d.\tab Packing List\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A number of files are part of the basic Hugo package:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i (NOTE: Throughout this manual, the default naming convention is for MS-DOS/Windows. As Hugo \plain\f0\fs24\cf0\i becomes available for other systems, file naming conventions may vary, and any machine-specific \plain\f0\fs24\cf0\i documentation should document those variations.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HC.EXE\plain\f0\fs24\cf0 \tab \tab Hugo Compiler\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HE.EXE\plain\f0\fs24\cf0 \tab \tab Hugo Engine\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HD.EXE\plain\f0\fs24\cf0 \tab \tab Hugo Debugger\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HDHELP.HLP\tab \plain\f0\fs24\cf0 \tab Debugger help file\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HUGOLIB.H\tab \plain\f0\fs24\cf0 \tab Library definitions and routines\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 VERBLIB.H\tab \tab \plain\f0\fs24\cf0 Standard verb routines\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 VERBLIB.G\plain\f0\fs24\cf0 \tab \tab Standard verb grammar definitions\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 OBJLIB.H\plain\f0\fs24\cf0 \tab \tab A library of useful object definitions\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \tab \tab \tab (included by \plain\f1\fs24\cf0 HUGOLIB.H\plain\f0\fs24\cf0 )\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 SAMPLE.HUG\plain\f0\fs24\cf0 \tab \tab Sample game source code\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 SHELL.HUG\plain\f0\fs24\cf0 \tab \tab Source code to build on\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 And two sets of files that, depending on user-specified settings, are optionally included by \plain\f1\fs24\cf0 HUGOLIB.H\plain\f0\fs24\cf0 , \plain\f1\fs24\cf0 VERBLIB.H\plain\f0\fs24\cf0 and \plain\f1\fs24\cf0 VERBLIB.G\plain\f0\fs24\cf0 :\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HUGOFIX.H\tab \plain\f0\fs24\cf0 \tab Debugging routines\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HUGOFIX.G\tab \plain\f0\fs24\cf0 \tab Debugging grammar\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 VERBSTUB.H\plain\f0\fs24\cf0 \tab \tab Additional verb routines\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 VERBSTUB.G\plain\f0\fs24\cf0 \tab \tab Additional verb grammar\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 An additional Hugo source file demonstrates the ability to create precompiled headers:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 HUGOLIB.HUG\plain\f0\fs24\cf0 \tab \tab To create a linkable version of \plain\f1\fs24\cf0 HUGOLIB.H\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The latest release of Hugo is available through anonymous FTP from \plain\f0\fs24\cf0\i ftp.gmd.de\plain\f0\fs24\cf0 in \plain\f1\fs24\cf0 if-archive/programming/hugo\plain\f0\fs24\cf0 . Distribution of any of the Hugo files is authorized only \plain\f0\fs24\cf0 with permission of the author as per \plain\f0\fs24\cf0\i Legal Notes\plain\f0\fs24\cf0 , above.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The \plain\f1\fs24\cf0 .HUG\plain\f0\fs24\cf0 , \plain\f1\fs24\cf0 .H\plain\f0\fs24\cf0 , and \plain\f1\fs24\cf0 .G\plain\f0\fs24\cf0 files are text files and must be downloaded as such; the executables are \plain\f0\fs24\cf0 binary files.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i (FORMATTING NOTE: The above files are properly formatted for a standard tab stop of 8 spaces; if the \plain\f0\fs24\cf0\i formatting appears incorrect, adjust the tab size on your editor.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=7 dt=RTF I.e. Manual Conventions 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.e.\tab Manual Conventions\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The following conventions are used in this manual:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 \tab \tab for required parameters\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 [parameter]\plain\f0\fs24\cf0 \tab \tab for optional parameters\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 FILE\plain\f0\fs24\cf0 \tab \tab \tab for specific filenames\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 FunctionName\plain\f0\fs24\cf0 \tab functions, etc.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 'token'\plain\f0\fs24\cf0 \tab \tab tokens, keywords\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 ...\plain\f0\fs24\cf0 \tab \tab \tab for omissions\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=8 dt=RTF I.f. Getting Started 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.f.\tab Getting Started\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Type\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 hc\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 without any parameters to get a full listing of available compiler options and specifications.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The MS-DOS syntax for running the compiler is\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc [-switches] \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 It is not necessary to specify any switches, the name of the objectfile, or the sourcefile extension. \plain\f0\fs24\cf0 The bare-bones version of the compiler invocation is\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 With no other parameters explicitly described, the compiler assumes an extension of \plain\f1\fs24\cf0 .HUG\plain\f0\fs24\cf0 . The \plain\f0\fs24\cf0 default object filename is \plain\f1\fs24\cf0 .HEX\plain\f0\fs24\cf0 .\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Here's how to compile the sample game. With the compiler executable, library files, and sample \plain\f0\fs24\cf0 game source code all in the current directory, type\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc -ls sample.hug\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 or simply\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc -ls sample\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and after a few seconds (or more, or less, depending on your processor and configuration) a \plain\f0\fs24\cf0 screenful of statistical information will appear following the completed compilation (because of the \plain\f0\fs24\cf0 -s switch).\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The new file \plain\f1\fs24\cf0 SAMPLE.HEX\plain\f0\fs24\cf0 will have appeared in current directory. As well, the -l switch wrote all \plain\f0\fs24\cf0 compile-time output (which would have included errors, had there been any) to the file \plain\f1\fs24\cf0 SAMPLE.LST\plain\f0\fs24\cf0 .\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=9 dt=RTF I.g. Compiler Switches 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'02\'04);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'05);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'06);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'07);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'08);}{\levelnumbers\'01;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.g.\tab Compiler Switches\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A number of switches may be selected via the invocation line. The available options are:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -a\tab Abort compilation on any error\par \ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \plain\f0\fs24\cf0 -d\plain\f1\fs24\cf0 \tab compile as an .HDX debuggable executable\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -e\tab Expanded error format\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -f\tab Full object summaries\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -h\tab compile in \plain\f1\fs24\cf0 .HLB\plain\f0\fs24\cf0 precompiled Header format\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -i\tab display debugging Information\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -l\tab print Listing to disk as \plain\f1\fs24\cf0 .LST\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -o\tab display Object tree\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -p\tab send output to standard Printer\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -s\tab print compilation Statistics\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -t\tab Text to listfile for spellchecking\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -u\tab show memory Usage for objectfile\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -v\tab Verbose compilation\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab -x\tab ignore switches in source code\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Most Hugo programming will probably make use of the -l switch in order to record compile-time \plain\f0\fs24\cf0 errors.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The -z switch may, on some configurations, increase compilation speed by inhibiting normal \plain\f0\fs24\cf0 messaging (i.e., "Compiling...lines of..." and "...percent complete").\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=10 dt=RTF I.h. Limit Settings 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'02\'04);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'05);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'06);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'07);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'08);}{\levelnumbers\'01;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.h.\tab Limit Settings\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Also included on the invocation line, after any switches and before the sourcefile, may be one or more \plain\f0\fs24\cf0 limit settings. These settings are for memory management, and limit the number of certain types of \plain\f0\fs24\cf0 program elements, such as objects and dictionary entries.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To list the settings, type:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc $list\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To change a non-static limit, type:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc $= ...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 For example, to compile the sample game with the maximum number of dictionary entries doubled \plain\f0\fs24\cf0 from the default limit of 1024, and with the -l and -s switches set,\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc -ls $MAXDICT=2048 sample\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 If a compile-time error is generated indicating that too many symbols of a particular type have been \plain\f0\fs24\cf0 declared, it is probably possible to overcome this simply by recompiling with a higher limit for that \plain\f0\fs24\cf0 setting specified in the invocation line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 See \plain\f0\fs24\cf0{\field{\*\fldinst { HYPERLINK "idnode://75"}}{\fldrslt{\i Appendix C\plain\f0\fs24\cf0}}}\i \plain\f0\fs24\cf0 for a complete listing of valid limit settings.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=11 dt=RTF I.i. Directories 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.i.\tab Directories\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 It is possible to specify where the Hugo Compiler will look for different types of files. This can be \plain\f0\fs24\cf0 done in the command line via:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc @=\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 For example, to specify that the source files are to be taken from the directory \plain\f1\fs24\cf0 C:\\HUGO\\SOURCE\plain\f0\fs24\cf0 , \plain\f0\fs24\cf0 invoke the compiler with\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc @source=c:\\hugo\\source \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Valid directories are:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 source\tab \tab \plain\f0\fs24\cf0 Source files\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 object\tab \tab \plain\f0\fs24\cf0 Where the new \plain\f1\fs24\cf0 .HEX\plain\f0\fs24\cf0 file will be created\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 lib\tab \plain\f0\fs24\cf0 \tab \tab Library files\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 list\tab \plain\f0\fs24\cf0 \tab \tab \plain\f1\fs24\cf0 .LST\plain\f0\fs24\cf0 files\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 resource\plain\f0\fs24\cf0 \tab \tab Resources for a "\plain\f1\fs24\cf0 resource\plain\f0\fs24\cf0 " list\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 temp\tab \plain\f0\fs24\cf0 \tab \tab Temporary compilation files (if any)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Advanced users may take advantage of the ability to set default directories using environment \plain\f0\fs24\cf0 variables. (The method for setting an environment variable may vary from operating system to \plain\f0\fs24\cf0 operating system.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The \plain\f1\fs24\cf0 HUGO_\plain\f0\fs24\cf0 environment variable may be set to the \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 directory. For example, the \plain\f0\fs24\cf0 source directory may be set with the \plain\f1\fs24\cf0 HUGO_SOURCE\plain\f0\fs24\cf0 environment variable.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Command-line-specified directories take precedence over those set in environment variables. In \plain\f0\fs24\cf0 either case, if the file is not found in the specified directory, the current directory is searched.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=13 dt=RTF I.j. The Hugo Engine 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 Book Antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 I.j.\tab The Hugo Engine\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Having compiled the sample game, run it by invoking\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab he sample\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 at the command line. Again, it is not necessary to specify the extension. The engine assumes \plain\f1\fs24\cf0 .HEX\plain\f0\fs24\cf0 if \plain\f0\fs24\cf0 none is given.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i (NOTE: The environment variable \plain\f1\fs24\cf0 HUGO_OBJECT\plain\f0\fs24\cf0\i or \plain\f1\fs24\cf0 HUGO_GAMES\plain\f0\fs24\cf0\i may hold the directory that the Hugo \plain\f0\fs24\cf0\i Engine searches for the specified \plain\f1\fs24\cf0 .HEX\plain\f0\fs24\cf0\i file. The location for save files may be specified with \plain\f1\fs24\cf0 HUGO_SAVE\plain\f0\fs24\cf0\i . All of \plain\f0\fs24\cf0\i these are optional.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=14 nft=02;80000008;000A;00;Times New Roman dt=RTF II. A FIRST LOOK AT HUGO 1 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset2 symbol;}{\f2\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0\b II.\tab A FIRST LOOK AT HUGO\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 There are a couple of basic concepts to become oriented to in order to begin working with Hugo.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 First of all, most programming in Hugo will involve the creation of what are called "objects". Quite \plain\f0\fs24\cf0 literally, these represent the "objects" or elements of the game universe: people, places, and things.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The bulk of the rest of a Hugo program is comprised of "routines". These are the sections of code \plain\f0\fs24\cf0 made up of commands or statements that facilitate the actual behavior of the program at different \plain\f0\fs24\cf0 points in the story. Routines are less frequently (although more frequently in other languages) \plain\f0\fs24\cf0 called "functions"-they may be thought of as performing an operation or series of operations, and \plain\f0\fs24\cf0 then returning some kind of value as a result.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (The idea of return values is an important one and, while sometimes puzzling to novices, is \plain\f0\fs24\cf0 actually quite uncomplicated. Often a particular function will be referred to as "returning true" or \plain\f0\fs24\cf0 "returning false"-all this means is that it returns either a non-zero value (usually 1) or a zero value, \plain\f0\fs24\cf0 almost always to indicate success or failure. A program will constantly be checking the return \plain\f0\fs24\cf0 values of a variety of routines and commands to determine if a particular operation was successful \plain\f0\fs24\cf0 in order to decide what to do next. Of course, a return value can be any integer value; a routine \plain\f0\fs24\cf0 that adds together two supplied values, a and b, may return the sum a+b.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 For those familiar with the common programming languages C and BASIC, Hugo strongly \plain\f0\fs24\cf0 resembles a hybrid of the two. Individual objects and routines-as well as conditional blocks-are \plain\f0\fs24\cf0 enclosed in braces as in C, but unlike C (and like BASIC), a semicolon is not required at the end of \plain\f0\fs24\cf0 each line, and the language itself is considerably less cryptic. Keywords, variables, routine and \plain\f0\fs24\cf0 object names, and other tokens are not case-sensitive.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The goal in designing Hugo was to make programming as intuitive to facilitate both initial \plain\f0\fs24\cf0 development and subsequent debugging.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=15 dt=RTF II.a. Hello, Sailor! 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 II.a.\tab Hello, Sailor!\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The grand tradition of programming texts has an introduction to a new programming language \plain\f0\fs24\cf0 detailing how to print the optimistic phrase "Hello, world" as an example of the particular language's \plain\f0\fs24\cf0 form and substance.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 In the equally grand tradition of interactive fiction, we'll start with the rallying cry "Hello, Sailor!". \plain\f0\fs24\cf0 Don't worry too much about the syntax below; this is meant mainly as a familiarization with what \plain\f0\fs24\cf0 Hugo looks like.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab routine main\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \{\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab print "Hello, Sailor!"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab return\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The entire program consists of one routine. (Two routines are normally required for any Hugo \plain\f0\fs24\cf0 program, the other being the \plain\f1\fs24\cf0 Init\plain\f0\fs24\cf0 routine, which is omitted in this example since there isn't much \plain\f0\fs24\cf0 required in the way of initialization.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The \plain\f1\fs24\cf0 Main\plain\f0\fs24\cf0 routine is automatically called by the engine. It from here that the central behavior of any \plain\f0\fs24\cf0 Hugo program is controlled. In this case the task at hand is the printing of "Hello, Sailor!", followed \plain\f0\fs24\cf0 by an order to return from the routine (i.e., exit it) so that we don't strand the program waiting for an \plain\f0\fs24\cf0 input, which is the normal order of Hugo business.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=16 dt=RTF II.b. Data Types 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 II.b.\tab Data Types\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 All data in Hugo is represented in terms of 16-bit integers, treated as signed (-32768 to 32767) or \plain\f0\fs24\cf0 unsigned (0 to 65535) as appropriate. The name of any individual data type may contain up to 32 \plain\f0\fs24\cf0 alphanumeric characters (as well as the underscore '_').\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 All of the following are valid data types:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Integer values\tab \tab \plain\f1\fs24\cf0 0, -10, 16800, -25005\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (constant values that appear in Hugo source code as numbers)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab ASCII characters\tab \tab \plain\f1\fs24\cf0 'A', 'z', '7'\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (constant values equal to the common ASCII value for a character; i.e., 65 for '\plain\f1\fs24\cf0\i A\plain\f0\fs24\cf0\i ')\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par {\tx720\tx1440\tx2160 \qj\li2880\fi-2880\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Objects\tab \tab \tab \plain\f1\fs24\cf0 suitcase, emptyroom, player\par }\qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (constant values representing the object number of the given object)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Variables\tab \tab \tab \plain\f1\fs24\cf0 a, b, score, TEXTCOLOR\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (changeable value-holders that may be set to equal another variable or constant value)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Constants\tab \tab \tab \plain\f1\fs24\cf0 true, false, BANNER\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (constant-obviously-values that are given a name similarly to a variable, but are non-modifiable)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Dictionary entries\tab \tab \plain\f1\fs24\cf0 "a", "the", "basketball"\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (The appearance of \plain\f1\fs24\cf0 "the"\plain\f0\fs24\cf0\i in a line of code actually refers to the location in the dictionary table where \plain\f1\fs24\cf0 "the"\plain\f0\fs24\cf0\i is stored.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Array elements\tab \tab \plain\f1\fs24\cf0 ranking[1]\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (a series of one or more changeable values that may be referenced from a common base point)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Array addresses\tab \tab \plain\f1\fs24\cf0 ranking\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (the base point-see above)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Properties\tab \tab \tab \plain\f1\fs24\cf0 nouns, short_desc, found_in\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (variable attachments of data relating specifically to objects)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab Attributes\tab \tab \tab \plain\f1\fs24\cf0 open, light, transparent\par \qj\li720\fi-720\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab (less complex attachments of data describing an object, which may be specified as either having or not \plain\f0\fs24\cf0\i having the given attribute)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Most of these types are relatively straightforward, representing in most cases a simple value. \plain\f0\fs24\cf0 Dictionary entries are addresses in the dictionary table, with the null string "" having the value 0. \plain\f0\fs24\cf0 Array addresses (as opposed to separate array elements) represent the address at which the array \plain\f0\fs24\cf0 begins in the array table. Properties and attributes treated as discrete values represent the number \plain\f0\fs24\cf0 of that property or attribute, assigned sequentially as the individual property or attribute is \plain\f0\fs24\cf0 defined.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 As mentioned, routines also return values, as do engine functions, so that\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab FindLight(room)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab parent(object)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 are also valid integer data types.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Routine addresses are also stored as 16-bit integers. However, those versed in such calculations \plain\f0\fs24\cf0 will notice that if such a value was treated as an absolute address, then any addressable executable \plain\f0\fs24\cf0 code would be limited to 64K in size. Such is not the case, since the routine address is actually an \plain\f0\fs24\cf0 indexed representation of the absolute address.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 NOTE: The 16-bit format of a routine address (or the address of a property routine, to be discussed \plain\f0\fs24\cf0 below), can obtained via the address operator '&', as in:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x = &Routine\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x = &object.property\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (where \plain\f1\fs24\cf0 x\plain\f0\fs24\cf0 is a variable).\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=17 dt=RTF II.c. Multiple Lines 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 II.c.\tab Multiple Lines\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 If any single command is too long to fit on one line, it may be split across several lines by ending \plain\f0\fs24\cf0 all but the last with the control character '\\'.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab "This is an example string."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x = 5 + 6 * higher(a, b)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 are the same as\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab "This is an example \\\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab string."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x = 5 + 6 * \\\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab higher(a, b)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The space at the end of the first line is necessary because the compiler automatically trims leading \plain\f0\fs24\cf0 spaces from the second line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 String constants, such as in the above print statement, are an exception in that they do not require \plain\f0\fs24\cf0 the '\\' character at the end of each line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab print "The engine will properly\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab print this text, assuming a\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab single space at the end of each\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab line."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 will result in:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab The engine will properly print this text, assuming\par \ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab a single space at the end of each line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Care must be taken, however, to ensure that the closing quotes are not left off the string constant. \plain\f0\fs24\cf0 Failing that, the compiler will likely generate a "Closing brace missing" error when it overruns the \plain\f0\fs24\cf0 object/routine/event boundary looking for a resolution to the odd number of quotation marks.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Also, most lines ending in a comma, '\plain\f1\fs24\cf0 and\plain\f0\fs24\cf0 '\plain\f1\fs24\cf0 ,\plain\f0\fs24\cf0 or '\plain\f1\fs24\cf0 or\plain\f0\fs24\cf0 ' will automatically fall through to the next line (if \plain\f0\fs24\cf0 they occur in a line of code). In other words,\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x[0] = 1, 2, 3,\tab ! array assignment x[0] through x[4]\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab 4, 5\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab if a = 5 and \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab b = "tall"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 translate into\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x[0] = 1, 2, 3, 4, 5\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab if a = 5 and b = "tall"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 This is provided primarily so that lengthy lines and complex expressions do not have to run off the \plain\f0\fs24\cf0 right-hand side of the screen during editing, nor do they continually need to be extended using '\\' \plain\f0\fs24\cf0 and the end of each line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (NOTE: Multiple lines that are not strictly code, such as property assignments in object \plain\f0\fs24\cf0 definitions-to be discussed-must still be joined with '\\', as in\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab nouns "plant", "flower", "marigold", \\\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab "fauna", "greenery"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and similar cases, even if they end in a comma.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 There is a complement to the '\plain\f1\fs24\cf0 \\\plain\f0\fs24\cf0 ' line-control character: the '\plain\f1\fs24\cf0 :\plain\f0\fs24\cf0 ' character allows multiple lines to be \plain\f0\fs24\cf0 put together on a single line, i.e.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x = 5 : y = 1\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 or\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab if i = 1: print "Less than three."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Which the compiler translates to\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab x = 5\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab y = 1\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab if i = 1\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab \{print "Less than three."\}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (See sections below on code formatting to see exactly what these constructions represent.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=18 dt=RTF II.d. Comments 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 II.d.\tab Comments\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 There are two types of comments. Comments on a single line begin with a '!'. Anything following on \plain\f0\fs24\cf0 the line is ignored. Multiple-line comments are begun with '!\\' and ended with '\\!'.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab ! A comment on a single line\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab !\\ A multiple-line\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab comment \\!\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The '!\\' combination must come at the start of a line to be significant; it cannot be preceded by any \plain\f0\fs24\cf0 other statements or remarks. Similarly, the '\\!' combination must come at the end of a line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=19 dt=RTF II.e. Compiler Errors 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 II.e.\tab Compiler Errors\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A compiler error is generally of one of two types. A fatal error looks like this:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Fatal error: \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and halts compiler execution.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A non-fatal error typically looks like:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab (): Error: \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Also, the compiler may issue warnings in the form:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab (): Warning: \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Compilation will continue, but this is an indication that the compiler suspects a problem at \plain\f0\fs24\cf0 compile-time.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 If the -e switch has been set during invocation to generate expanded-format errors, error output \plain\f0\fs24\cf0 looks like:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab : \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab (Error-causing line)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab "ERROR: "\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 It prints the section of code that caused the error, followed by an explanation of the problem. \plain\f0\fs24\cf0 Compilation will generally continue unless the -a switch has been set.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i NOTE: The section of offending code may not be printed exactly as it appears in the source, since the compiler \plain\f0\fs24\cf0\i often paraphrases and rebuilds the source code into a more rigid format before building the line.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=20 dt=RTF II.f Compiler Directives 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 II.f.\tab Compiler Directives\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A number of special commands may be used to determine a.) how the source code is read by the \plain\f0\fs24\cf0 compiler, or b.) what special output will be generated at compile time.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To set switches within the source code so that they do not have to be specified each time the \plain\f0\fs24\cf0 compiler is invoked for that particular program, the line\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #switches -\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 will set the switches specified by \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 , where \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 is a string of characters \plain\f0\fs24\cf0 representing valid switches, without any separators between characters.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Many programmers may find it useful to make\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #switches -ils\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 the first line in every new program, which will automatically print out debugging information, a \plain\f0\fs24\cf0 statistical summary, and any errors to the \plain\f1\fs24\cf0 .LST\plain\f0\fs24\cf0 list file.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Using\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #version [.]\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 specifies that the file is to be used with version \plain\f1\fs24\cf0 .\plain\f0\fs24\cf0 of the compiler. If the \plain\f0\fs24\cf0 file and compiler version are mismatched, a warning will be issued.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To include the contents of another file at the specified point in the current file, use\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #include ""\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 where \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 is the full path and name of the file to be read. When \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 has been \plain\f0\fs24\cf0 read completely, the compiler resumes with the statement immediately following the \plain\f1\fs24\cf0 #include\plain\f0\fs24\cf0 \plain\f0\fs24\cf0 command.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (A file or set of files can be compiled into a precompiled header using the -h switch, and then \plain\f0\fs24\cf0 linked using \plain\f1\fs24\cf0 #link\plain\f0\fs24\cf0 instead of \plain\f1\fs24\cf0 #include\plain\f0\fs24\cf0 . See \plain\f0\fs24\cf0\i Appendix D\plain\f0\fs24\cf0 on \plain\f0\fs24\cf0\i Precompiled Headers\plain\f0\fs24\cf0 .)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A useful tool for managing Hugo source code is the ability to use compiler flags for conditional \plain\f0\fs24\cf0 compilation. A compiler flag is simply a user-defined marker that can control which sections of the \plain\f0\fs24\cf0 source code are compiled. In this way, a programmer can develop add-ons to a program that can \plain\f0\fs24\cf0 be included or excluded at will. For example, the library files \plain\f1\fs24\cf0 HUGOLIB.H\plain\f0\fs24\cf0 , \plain\f1\fs24\cf0 VERBLIB.H\plain\f0\fs24\cf0 , and \plain\f1\fs24\cf0 VERBLIB.G\plain\f0\fs24\cf0 check to see if a flag called \plain\f1\fs24\cf0 DEBUG\plain\f0\fs24\cf0 has been set previously (as it is in \plain\f1\fs24\cf0 SAMPLE.HUG\plain\f0\fs24\cf0 ). \plain\f0\fs24\cf0 Only if it has do they include the \plain\f1\fs24\cf0 HUGOFIX.H\plain\f0\fs24\cf0 and \plain\f1\fs24\cf0 HUGOFIX.G\plain\f0\fs24\cf0 files.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To set and clear flags, use\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #set \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #clear \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 respectively.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Then, check to see if a flag is set or not (and include or exclude the specified block of source code) \plain\f0\fs24\cf0 by using\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #ifset \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0\i \tab \tab ...conditional block of code...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #endif\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 or\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #ifclear \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \tab \plain\f0\fs24\cf0\i ...conditional block of code...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #endif\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Conditional compilation constructions may be nested up to 32 levels deep.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (Note also that compiler flags can be specified in the invocation line as \plain\f1\fs24\cf0 #\plain\f0\fs24\cf0 .)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 "\plain\f1\fs24\cf0 #if set\plain\f0\fs24\cf0 " and "\plain\f1\fs24\cf0 #if clear\plain\f0\fs24\cf0 " are the long form of "\plain\f1\fs24\cf0 #ifset\plain\f0\fs24\cf0 " and "\plain\f1\fs24\cf0 #ifclear\plain\f0\fs24\cf0 ", allowing usage of \plain\f0\fs24\cf0 "\plain\f1\fs24\cf0 #elseif\plain\f0\fs24\cf0 " for code such as:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #set THIS_FLAG\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #set THAT_FLAG\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #if clear THIS_FLAG\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #message "This will never be printed."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #elseif set THAT_FLAG\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #message "This will always be printed."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #else\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #message "But not this if THAT_FLAG is set."\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #endif\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Use "\plain\f1\fs24\cf0 #if defined \plain\f0\fs24\cf0 " and "\plain\f1\fs24\cf0 #if undefined \plain\f0\fs24\cf0 " to test if objects, properties, \plain\f0\fs24\cf0 routines, etc. have previously been defined.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 As seen above, the \plain\f1\fs24\cf0 #message\plain\f0\fs24\cf0 directive can be used as\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #message ""\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 to output \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 when (or if) that statement is processed during the first compilation pass.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Including "\plain\f1\fs24\cf0 error\plain\f0\fs24\cf0 " or "\plain\f1\fs24\cf0 warning\plain\f0\fs24\cf0 " before "\plain\f1\fs24\cf0 \plain\f0\fs24\cf0 " as in\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #message error ""\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 or\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab #message warning ""\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 will force the compiler to issue an error or warning, respectively, as it prints "\plain\f1\fs24\cf0 \plain\f0\fs24\cf0 ".\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 It is also possible to include inline limit settings, such as\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab $=\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 in the same way as in the invocation line. However, an error will be issued if, for example, an \plain\f0\fs24\cf0 attempt is made to reset \plain\f1\fs24\cf0 MAXOBJECTS\plain\f0\fs24\cf0 if one or more objects have already been defined.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \keep\qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=78 dt=RTF Example: Command-Line Compiling 3 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'02\'04);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'05);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'06);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'07);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'08);}{\levelnumbers\'01;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 Example: Command-Line Compiling\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 On the author's machine, running under MS-DOS, the compiler executable \plain\f1\fs24\cf0 HC.EXE\plain\f0\fs24\cf0 is in a directory \plain\f0\fs24\cf0 called \plain\f1\fs24\cf0 C:\\HUGO\plain\f0\fs24\cf0 . The library files are in \plain\f1\fs24\cf0 C:\\HUGO\\LIB\plain\f0\fs24\cf0 , and the source code for the game Spur is in \plain\f1\fs24\cf0 C:\\HUGO\\SPUR\plain\f0\fs24\cf0 .\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 It's possible to call the compiler to compile Spur with a number of different options, including setting \plain\f0\fs24\cf0 compiler flags to include the HugoFix debugging library and verb stub routines (i.e., what could \plain\f0\fs24\cf0 otherwise be accomplished with "\plain\f1\fs24\cf0 #set DEBUG\plain\f0\fs24\cf0 " and "\plain\f1\fs24\cf0 #set VERBSTUBS\plain\f0\fs24\cf0 " in the source), and \plain\f0\fs24\cf0 printing all debugging information, the object tree, and statistics to a file. (Assume that the current \plain\f0\fs24\cf0 directory is \plain\f1\fs24\cf0 C:\\HUGO\plain\f0\fs24\cf0 and that none of the switches or compiler flags are set in the source.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab hc -iols #debug #verbstubs @source=spur @lib=lib spur\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 This makes use of all the possible command-line option types, including multiple switches, flag \plain\f0\fs24\cf0 settings, and directory specifications.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=21 nft=02;80000008;000A;00;Times New Roman dt=RTF III. OBJECTS 1 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0\b III.\tab OBJECTS\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Objects are the building blocks of any Hugo program. Anything that must be accessible to a player \plain\f0\fs24\cf0 during the game-including items, rooms, other characters, and even directions-must be defined as \plain\f0\fs24\cf0 an object.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The basic object definition looks like this:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab object "object name"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \{\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab ...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 As an example, a suitcase object might be defined as:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab object suitcase "suitcase"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \{\}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The enclosing braces are needed even if the object definition has no body. The only data attached \plain\f0\fs24\cf0 to the suitcase object are-from right to left-a name, an identifier, and membership in the basic object \plain\f0\fs24\cf0 class.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The compiler assigns the object labeled \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 the next sequential object number. That \plain\f0\fs24\cf0 is, if the first-defined object is the "nothing" object (object 0), then the next-defined object, whatever \plain\f0\fs24\cf0 it is, is given the object number 1; the one after that is 2, etc. This is academic, however, as a \plain\f0\fs24\cf0 programmer need never know what object number a particular object is-except for certain \plain\f0\fs24\cf0 debugging situations-and can always refer to an object by its label \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 .\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 If no explicit "name" (or name property) is provided, the compiler automatically gives it the name \plain\f0\fs24\cf0 "\plain\f1\fs24\cf0 ()\plain\f0\fs24\cf0 ", i.e., \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 in parentheses.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (The compiler automatically creates an object called "display" as the last defined object. The \plain\f0\fs24\cf0 display object can be used to get information about the engine's output display. See the section on \plain\f0\fs24\cf0 the display object below under \plain\f0\fs24\cf0{\field{\*\fldinst { HYPERLINK "idnode://62"}}{\fldrslt{\i "Advanced Features"\plain\f0\fs24\cf0}}}\i \plain\f0\fs24\cf0 .) \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=22 dt=RTF III.a. The Object Tree 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 III.a. The Object Tree\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 In order for objects to have a position in the game, i.e., to be in a room or contained in another \plain\f0\fs24\cf0 object or beside another object, they must occupy a position in the object tree. The object tree is a \plain\f0\fs24\cf0 map which represents the relationships between all objects in the game. The total number of \plain\f0\fs24\cf0 objects is held in the global variable objects.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The nothing object is defined in the library as object 0. This is the root of the object tree, upon \plain\f0\fs24\cf0 which all other objects are based.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 When referring to object numbers, this manual is generally referring to the name given the object in \plain\f0\fs24\cf0 the source code: i.e., \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 . The compiler automatically assigns each object an object \plain\f0\fs24\cf0 number, and refers to it whenever a specified \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 is encountered.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (NOTE: When using the standard library routines, ensure that no objects (or classes, to be \plain\f0\fs24\cf0 discussed later) are defined before \plain\f1\fs24\cf0 HUGOLIB.H\plain\f0\fs24\cf0 is included. Problems will arise if the first-defined \plain\f0\fs24\cf0 object-object 0-is not the "nothing" object.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Here is an example of an object tree:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 Nothing\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Room\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Table---Chair---Book---Player\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab | |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Bowl Bookmark\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Spoon\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 A number of functions can be used to read the object tree.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab parent\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab sibling\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab child\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab youngest\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab elder\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 eldest\tab \plain\f0\fs24\cf0 (same as \plain\f1\fs24\cf0 child\plain\f0\fs24\cf0 )\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 younger\tab \plain\f0\fs24\cf0 (same as \plain\f1\fs24\cf0 sibling\plain\f0\fs24\cf0 )\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab children\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Each function takes a single object as its argument, so that\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab parent(Table)\tab = Room\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab parent(Bookmark) = Book\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab parent(Player)\tab = Room\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab child(Bowl)\tab \tab = Spoon\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab child(Room)\tab \tab = Table\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab child(Chair)\tab = 0 \plain\f0\fs24\cf0 (Nothing)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab sibling(Table)\tab = Chair\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab sibling(Player)\tab = 0 \plain\f0\fs24\cf0 (Nothing)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab youngest(Room)\tab = Player\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab youngest(Spoon)\tab = 0 \plain\f0\fs24\cf0 (Nothing)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab elder(Chair)\tab = Table\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab elder(Table)\tab = 0 \plain\f0\fs24\cf0 (Nothing)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab children(Room)\tab = 4\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab children(Table)\tab = 1\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab children(Chair)\tab = 0\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (In keeping with the above explanation of object numbers and \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 , the functions in the \plain\f0\fs24\cf0 first set actually return an integer number that refers to a particular \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 .)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To better understand how the object tree represents the physical world, the table, the chair, the \plain\f0\fs24\cf0 book, and the player are all in the room. The bookmark is in the book. The bowl is on the table, \plain\f0\fs24\cf0 and the spoon is on the bowl. The Hugo library will assume that the player object in the example \plain\f0\fs24\cf0 is standing; if the player were seated, the object tree might look like:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Nothing\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Room\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Table---Chair---Book\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab | | |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab ... Player ...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 and\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab child(Chair)\tab = Player\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab parent(Player)\tab = Chair\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab children(Chair)\tab = 1\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (Try compiling \plain\f1\fs24\cf0 SAMPLE.HUG\plain\f0\fs24\cf0 with the -o switch in order to see the object tree for the sample game. \plain\f0\fs24\cf0 Or, if the \plain\f1\fs24\cf0 DEBUG\plain\f0\fs24\cf0 flag was set during compilation, use the HugoFix command "$ot" or "$ot \plain\f0\fs24\cf0 " during play to view the current state of the object tree during play. Compiling with the \plain\f0\fs24\cf0 -d switch will generate a debuggable (\plain\f1\fs24\cf0 .HDX\plain\f0\fs24\cf0 ) version of the file-the object tree can then be viewed \plain\f0\fs24\cf0 directly from the debugger.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Logical tests can also be evaluated with regard to objects and children. The structure\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab [not] in \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 will return true if \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 is in \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 (or false if '\plain\f1\fs24\cf0 not\plain\f0\fs24\cf0 ' is used).\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To initially place an object in the object tree, use\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab in \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 in the object definition, or, alternatively\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab nearby \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 or simply\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab nearby\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 to give the object the same parent as \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 or, if \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 is not specified, the same parent \plain\f0\fs24\cf0 as the last-defined object.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 If no such specification is given, the parent object defaults to 0-the nothing object as defined in the \plain\f0\fs24\cf0 library. All normal room objects have 0 as their parent.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Therefore, the expanded basic case of an object definition is\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab object "object name"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \{\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab in \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab ...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 (Ensure that the opening brace '\{' does not come on the same line as the '\plain\f1\fs24\cf0 object\plain\f0\fs24\cf0 ' specifier.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab object "object name" \{...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 is not permitted.)\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The table in the example presumably had a definition like\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab object table "Table"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \{\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab in room\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab ...\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 To put the suitcase object defined earlier into the empty room in \plain\f1\fs24\cf0 SHELL.HUG\plain\f0\fs24\cf0 :\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab object suitcase "suitcase"\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \{\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \tab in emptyroom\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab \}\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Objects can later be moved around the object tree using the '\plain\f1\fs24\cf0 move\plain\f0\fs24\cf0 ' command as in\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab move to \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Which, essentially, disengages \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 from its old parent, makes the sibling of \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 the \plain\f0\fs24\cf0 sibling of \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 's elder, and moves \plain\f1\fs24\cf0 \plain\f0\fs24\cf0 (along with all its possessions) to the new \plain\f0\fs24\cf0 parent.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Therefore, in the original example, the command\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab move bowl to player\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 would result in altering the object tree to this:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Nothing\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Room\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Table---Chair---Book---Player\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab | |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Bookmark Bowl\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab |\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab Spoon\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 There is also a command to remove an object from its position in the tree:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab remove \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 which is the same as\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab move to 0\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 The object may of course be moved to any position later.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 }} } 5P9i0s8y19Z id=23 dt=RTF III.b. Attributes 2 {\rtf1\ansi\deff0\deftab862{\fonttbl{\f0\fnil\fcharset0 book antiqua;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 symbol;}{\f3\fnil\fcharset2 WingDings;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;}\wpprheadfoot0\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\margh720\margf720{\*\listtable{\list\listtemplateid19690212{\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc1{\leveltext\'02\'00.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc3{\leveltext\'02\'01.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'02\'02.;}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'02\'03);}{\levelnumbers\'01;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc2{\leveltext\'03(\'04);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc4{\leveltext\'03(\'05);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'06);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'07);}{\levelnumbers\'02;}} {\listlevel\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent360\levelnfc0{\leveltext\'03(\'08);}{\levelnumbers\'02;}} \listid1194737}}{\*\listoverridetable{\listoverride\listid1194737\listoverridecount0\ls1}}\endnhere\sectdefaultcl{\pard\keep{\qj\li0\fi0\ri0\sb0\sl\sa240 \plain\f0\fs24\cf0 III.b. Attributes\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Attributes are essentially qualities that every object either does or doesn't have. They are most \plain\f0\fs24\cf0 useful for qualifying or disqualifying objects for or from consideration in any given instance.\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 An attribute is defined as\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f1\fs24\cf0 \tab attribute \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 Up to 128 attributes may be defined. Those defined in \plain\f1\fs24\cf0 HUGOLIB.H\plain\f0\fs24\cf0 include:\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 known\tab \tab \plain\f0\fs24\cf0 \tab if an object is known to the player\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 moved\tab \tab \plain\f0\fs24\cf0 \tab if an object has been moved\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 visited\tab \tab \plain\f0\fs24\cf0 if a room has been visited\par \qj\li0\fi0\ri0\sb0\sl\sa0 \plain\f0\fs24\cf0 \tab \plain\f1\fs24\cf0 static\tab \tab \p