You can edit almost every page by Creating an account and confirming your email.

Hugo (programming language)

From EverybodyWiki Bios & Wiki


Hugo
Paradigmmultiparadigm, procedural, object-oriented, high-level, domain-specific [1]
Designed byKent Tessman[2]
DeveloperThe General Coffee Company Film Productions
First appearedJune 1995; 31 years ago (1995-06)[3]
Stable release
3.1.03 / January 10, 2006; 20 years ago (2006-01-10)
Implementation languageC
PlatformAcorn, Macintosh, Palm, PC, Pocket PC, Psion, Screen Readers[4]
OSCross-platform: Amiga, BeOS,[5][6] DOS, OS/2, Palm, EPOC, RISC OS, Unix (Linux, OS X), Windows, Windows Mobile[7]
LicenseFreeware [8]
Websitewww.generalcoffee.com

Search Hugo (programming language) on Amazon.

Hugo is a programming language and design system for interactive fiction created by Kent Tessman. It features development and run-time support for Windows,[9] OSX[10] and Unix[11] operating systems and a JavaScript interpreter.[12][13] It is known as one of the easier languages for running and playing interactive fiction.[14] Hugo was part of a wave of community created interactive fiction programming languages that enabled text and images to be displayed simultaneously, along with Glux and HTML-TADS.[15][16]

Language construction

The Hugo language is a hybrid of several features to provide a command processing system. The system consists of a verb definition section, a property and attribute definition section, an object definition section, and a code section. One may assign multiple names to the same attribute or property through the alias parameter to an attribute or property.

The language is not case sensitive,[17] although much of the code base in the standard library uses camel case for identifiers. Identifiers must start with a letter and may contain letters, numbers, and underscores. Strings are defined by using a double quote. Where it is necessary to include a double quote in a string, it may be escaped by preceding it with a backslash, i.e. \". With the exception of quoted strings, lines must be explicitly marked as being continued by having the last character on the line be a backslash.

The system provides for procedures, called a routine[18] which may optionally return a value. All executable statements must be within a routine; there is no default mode to execute code outside of a routine. Comments may be specified anywhere that whitespace is acceptable and are indicated by an exclamation point !. This causes anything remaining on the line from that point to be ignored. A special type of block comment for commenting a large area may be used by having the first two characters on a line begin with the comment !\ and the block comment is closed by the next occurrence of the inverse string \!.

Where a block is needed—a set of related values or a particular piece of executable code[19]—it is indicated by encasing it in the open brace character { and closing it with the }, similar to the same functionality in the C language. As with a number of other programming languages, Hugo borrows from C for a number of features, including escaping some values by preceding them with a backslash, the use of the ++ symbol to increment a variable, and the { and } braces for block begin and block end, as noted earlier. Hugo borrows the use of the print command for displaying variables and the use of the semi-colon ( ; ) from the BASIC programming language to indicate output that is not to be broken by a new line.

There are two mandatory routines, one named init[20] and one named main.[21] Init is run once when the program starts and, as the name implies, initializes anything the system needs to do. After Init ends, the routine main is run on every turn, a turn being used in the sense that each command issued by the player is a new turn. The main routine is used to do the typical housekeeping on each turn. The user is prompted for input, the parser processes the input to translate it into a verb and options to the verb, then determine the routine that processes that verb. The routine then returns a set of responses to the verb and options (if any), and the user is then prompted to type in a command.

The system requests commands and continues to do so until a routine indicates the program is over. Since the system was originally designed for writing games, the determination of the program being over is typically because either the player won according to the rules for that game, or because the player lost.

Verbs

In the verb definition section, one begins by defining each command, known as a verb, in which the code defines the verb as a quoted string. One then lists, one line at a time, each of the parameters to be used for processing the command issued. For example, if one has a command of incinerate, one would define a verb such as

verb "incinerate"
   *                           DoIncinerate
   * object                    DoIncinerate
   * "me"                      DoSuicide

Where the first parameter means that if the user running the program types the command incinerate with no options, it runs the routine DoIncinerate. If the user types the command incinerate and names a defined object, the DoIncinerate routine is run with the default object (whose name is 'object') being assigned the value of whatever object the user selected. If the user types the command incinerate followed by the option me, then the DoSuicide routine is run.

Attributes

The system allows for up to 128 different attributes to be defined.[22] Attributes are true/false values that represent conditions of an object. All attributes defined in a program are available to any object. For example, if an attribute of an object was hot or cold, one could define an attribute for one or the other, then use not preceding an attribute to test for the opposite condition. Attributes are defined by the attribute command and the name of the attribute, such as:

Attribute wet
attribute female
attribute cold
attribute hard

One defines an attribute as being possessed by an object by the is command, followed by the name of the attribute. To explicitly state that the attribute is not possessed, one indicates by placing not before the attribute on the is command.

Properties

Properties can contain essentially any value desired, including other objects. While every object contains all defined attributes, an object only contains the properties assigned to it when it is defined. A property may be defined either with or without a value and is defined by the property command, the name of the property, and the optional value, such as

property color
property weight 30
property size 4
property comment "whoa"

Objects

Everything that can be manipulated in a Hugo program is an object. Objects have attributes and properties. All defined attributes are available to all objects, but each object only has the properties assigned to it when it is created. An object is a block of specifications stating all of the information about it, begins with the object command, the name of the object, an optional descriptive string for the name, a block open symbol (the open brace {), the various values to assign to the object, and a block close symbol (the close brace }). In the following object

object table "Kitchen Table"
{
  is hard
  is not female
  color brown
  size 10
}

The table object would have the hard attribute (set to true) and would have the cold, female and wet attributes, which are all false. The object would have been set to "is not female" by default, but explicitly specifying it may be useful, or if the object is a copy of another object but with additional or different properties or differing values for the attributes. The color property of the table object could be referenced through table.color.

Routines

All action in a Hugo program takes place in a routine. In the example given above, if the user had typed Incinerate me, the DoSuicide routine would have been executed:

routine DoSuicide
{

   "I can't allow you to do this,";
   print player.name;"."

}

A quoted string by itself is treated as an implicit print statement. To print actual values such as the name property (one of about six properties automatically defined by the compiler) it is necessary to specify it through the print command, by specifying the name of the object and the property, separated by the dot ( . ) operator. To reference an attribute, it may be tested in an if statement, like so:

   if (table is cold)
   {
  ... other code ...
   } else {
     if (table is not hard) {
  ... other code ...
     }
   }

Other Features

The Hugo language also provides for classes, which are more like types of objects than full classes as used in object-oriented programming (classes do not have direct methods in Hugo). A property may be a value, an array, or it may represent executable code such as an equivalent to a method in a full object-oriented language.

Hugo is customizable with third-party library extensions,[23] and a JavaScript online interpreter for Hugo games was announced at Wordplay London[24][25] on November 16, 2016.[26]

See also

Notable games written in Hugo

References

  1. http://mirrors.ibiblio.org/interactive-fiction/programming/hugo/manuals/hugo_book.pdf
  2. http://tracks.ranea.org/post/47146430669/kent-tessmans-name-keeps-coming-up-at-least-if
  3. http://brasslantern.org/community/history/timeline-c.html
  4. https://www.audiogames.net/page.php?pagefile=_Audyssey_Magazine_issue_24_-_July_-_August_2000_
  5. https://github.com/HaikuArchives/BeHugo
  6. https://joomla.iscomputeron.com/index.php/441-superman-was-yesterday-future-boy-is-tomorrow
  7. Hugo Downloads
  8. http://mirrors.ibiblio.org/interactive-fiction/programming/hugo/manuals/hugo_book.pdf
  9. https://github.com/realnc/hugor/releases
  10. https://github.com/realnc/hugor/releases
  11. https://bitbucket.org/0branch/hugo-unix
  12. http://www.intfiction.org/forum/viewtopic.php?p=116164#p116164
  13. https://github.com/juhana/hugojs
  14. https://brasslantern.org/beginners/tadownload-b.html
  15. http://maher.filfre.net/if-book/if-9.htm
  16. Jackson-Mead, Kevin, and Wheeler, J. Robinson (eds.) (2011) IF Theory Reader. Boston, MA: Transcript On Press
  17. http://hugo.gerynarsabode.org/index.php?title=Identifier
  18. http://hugo.gerynarsabode.org/index.php?title=Routine
  19. http://hugo.gerynarsabode.org/index.php?title=Block
  20. http://hugo.gerynarsabode.org/index.php?title=Init
  21. http://hugo.gerynarsabode.org/index.php?title=Main
  22. http://hugo.gerynarsabode.org/index.php?title=Attributes
  23. http://hugo.gerynarsabode.org/index.php?title=Roodylib
  24. https://twitter.com/emshort/status/799983770875154432
  25. https://twitter.com/pressfuturist/status/799983396583653376
  26. http://www.wordplay.london/events/crafting-interactive-fiction-tools/
  27. http://www.mobygames.com/game-group/hugo-games
  28. http://www.theglobeandmail.com/technology/future-boy/article20437262/
  29. http://www.adventuregamers.com/articles/view/17787
  30. https://web.archive.org/web/20050404163243/http://www.macologist.org/viewtopic.php?t=1026
  31. http://www.homeoftheunderdogs.net/game.php?id=5163
  32. http://www.spagmag.org/archives/backissues/spag49.html
  33. https://archive.org/details/MacAddict-101-200501
  34. http://www.imdb.com/title/tt2540294/
  35. https://grandtextauto.soe.ucsc.edu/2004/09/16/future-boy/
  36. https://ifcomp.org/comp/2006?compact=0
  37. http://maher.filfre.net/if/comp06.html#swordsman
  38. http://www.highprogrammer.com/alan/rants/reviews/video_games/if/tales_of_the_traveling_swordsman.html
  39. http://www.caltrops.com/pointy.php?action=viewPost&pid=182005
  40. https://emshort.blog/2008/06/21/more-if-publicity/
  41. https://groups.google.com/forum/#!original/rec.games.int-fiction/PEEMwQ2U_OM/yocV3OBZK4wJ
  42. http://www.mobygames.com/game-group/hugo-games
  43. https://www.rockpapershotgun.com/2011/09/21/splice-of-life-cryptozookeeper/
  44. http://www.ministryofpeace.com/if-review/reviews/20120504.html

External links


This article "Hugo (programming language)" is from Wikipedia. The list of its authors can be seen in its historical. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.