HyperTalk |
HyperTalk is a high-level programming language created in 1987 by Dan Winkler and used in conjunction with Apple Computer s HyperCard hypermedia program by Bill Atkinson. The main target audience of HyperTalk was beginning programmers, hence HyperTalk programmers were usually called authors, and the process of writing programs was called scripting . HyperTalk scripts are fairly similar to written English language, and use a logic structure similar to the Pascal programming language.
The case-insensitive language was at first interpreted, but since HyperCard 2.x virtually s, or rather lists of items delimited by a certain character (in later versions the itemDelimiter property allowed choosing an arbitrary character).
=Object-Oriented HyperTalk=
However, HyperTalk was by no means a strictly procedural language. Scripts were associated with objects in HyperCard files (so-called stacks ), and HyperTalk allowed manipulating these objects in various ways, changing their properties using the set command, for example. Objects were addressed using a syntax close to natural language, where objects were specified relative to the current card, or the of operator was used to specify the absolute position of an object: send mouseUp to card button OK of card Veracity . Since buttons could also exist on the background layer, but their content would differ between cards, there were card buttons, background buttons etc. Objects could be addressed by their name, z-ordering number, or by a unique ID number that usually did not change throughout an object s lifetime. To iterate over objects (joinedly referred to as parts in HyperCard 2.2 and later), one simply used their number after querying e.g. the number of card parts.
HyperTalk also provided full-blown script control over the built-in drawing tools, simply by scripting the needed changes in paint tools and simulating mouse movements using the drag from start to end and the click at pos commands.
HyperTalk also used messages (i.e. events) sent to objects to handle user interaction. E.g. the mouseDown message was sent to a button when the user clicked it, and mouseUp was sent when the user released the mouse inside it to trigger its action. Similarly, it had the periodic idle message, mouseEnter, mouseLeave, ... and various other messages related to navigation between different cards in a HyperCard stack, as well as user input (keyDown, functionKey, ...), and system events. As far as the scripters were concerned, there were no main event loops like in other procedural programming languages.
=Extending HyperTalk=
Although the HyperTalk language languished just like HyperCard itself, it received a second lease on life through its plugin protocol, so-called External Commands (XCMDs) and External Functions (XFCNs), which were native code containers attached to stacks (as Macintosh-specific Resource fork) with a single entry point and return value. XCMDs and XFCNs could be called just like regular message and function handlers from HyperTalk scripts, and were also able to send messages back to the HyperCard application. Some enterprising XCMD authors added advanced features like full color support (ColorizeHC, HyperTint, AddColor), multiple special-purpose windows (Prompt, Tabloid, Textoid, Listoid, ShowDialog, MegaWindows), drag and drop support and various hardware interfaces to the language.
=Descendants of HyperTalk=
Various languages have taken their cues from HyperTalk. There are straight clones like
As well as second-level clones like
Many method names first popularized by HyperTalk made it into later languages, such as the onmouseUp message in JavaScript. Although Asymmetrix Toolbook is often also considered a HyperCard clone, its scripting language apparently bears little resemblance to HyperTalk.
These clones and dialects (commonly referred to under the moniker of xTalk -languages) added various features to the language that are expected from a modern programming language, like exception handling, user-defined object properties, timers, multi-threading and even user-defined objects.
=Some sample scripts=
on mouseUp put 100,100 into pos repeat with x = 1 to the number of card buttons set the location of card button x to pos add 15 to item 1 of pos end repeat end mouseUp
on mouseDown put Disk:Folder:MyFile into filePath -- no need to declare variables if there is a file filePath then open file filePath read from file filePath until return put it into cd fld some field close file filePath set the textStyle of character 1 to 10 of card field some field to bold end if end mouseDown
function replaceStr pattern,newStr,inStr repeat while pattern is in inStr put offset(pattern,inStr) into pos put newStr into character pos to (pos +the length of pattern)-1 of inStr end repeat return inStr end replaceStr|
|