Fact-checked by Grok 2 weeks ago

HyperTalk

HyperTalk is a high-level, procedural developed by Apple in 1987 as the built-in programming environment for , a hypermedia system designed to enable non-programmers to create interactive applications through an English-like syntax. Created primarily by under the direction of , HyperTalk originated from an earlier prototype named WildTalk during the fall of 1986, evolving alongside HyperCard's development which began in late 1985. The language emphasized accessibility, featuring verbose, natural-language commands such as "put the first word of the third line of field 'hello' into field 'goodbye'" to manipulate text and elements without requiring traditional programming expertise. At its core, HyperTalk operates on an event-driven, message-passing model where scripts—organized as handlers like on mouseUp—respond to user interactions across 's object hierarchy of stacks, backgrounds, cards, buttons, and fields. It supports untyped variables, loops, conditionals, file operations, and custom functions, with extensions via external commands (XCMDs) for advanced capabilities like graphics or networking. Initially interpreted for ease of use, later versions from (1989) introduced compilation for improved performance and tools. HyperTalk's design philosophy of "programming for the rest of us" democratized software creation, allowing users to build databases, animations, presentations, and educational tools before widespread adoption of similar technologies like PowerPoint or the web. Its influence extended to Apple's later scripting efforts, notably shaping the syntax and accessibility of released in 1993, and even inspiring elements of through creator Brendan Eich's exposure to . Though and HyperTalk were bundled free with Macintosh systems upon their 1987 debut and continued evolving through version 2.4 in the mid-1990s, Apple discontinued the product in 2004 amid the rise of the , rendering the language largely obsolete but fondly remembered for pioneering user-friendly hypermedia development.

History and Development

Origins in HyperCard

HyperTalk was developed in the fall of 1986 by Bill Atkinson and Dan Winkler as the integrated scripting language for Apple's HyperCard application, initially named WildTalk to accompany the prototype known as WildCard. Atkinson, a key figure in early Macintosh software like MacPaint, envisioned HyperCard as a tool to extend user interaction beyond static graphics, while Winkler focused on the language's design to enable customization of interactive elements. This collaboration aimed to create a "software erector set" that allowed non-programmers to build and modify hypermedia without requiring conventional coding skills. HyperCard, featuring HyperTalk, was released on August 11, 1987, for the Macintosh computer, bundled initially at a low cost of $49.95 and later included free with new systems. The application positioned HyperTalk as a core component for constructing "stacks"—collections of linked cards containing text, , and interactive features—making it an early hypermedia accessible to everyday users. By integrating scripting directly into the graphical interface, HyperTalk facilitated the creation of dynamic applications on the then-nascent personal computing platform. The primary design goals of HyperTalk centered on empowering end-users to script behaviors for HyperCard's objects, such as cards, buttons, and fields, in a forgiving, English-like manner that prioritized ease over rigidity. This approach supported object-oriented concepts like inheritance, allowing scripts to propagate changes across stack elements while maintaining simplicity for beginners. Early adopters leveraged HyperTalk for straightforward tasks, such as automating navigation between cards via button scripts or implementing basic data entry forms in fields, which demonstrated its utility in building personal databases and interactive tools. These capabilities quickly inspired a wave of user-created stacks for data manipulation and user interface enhancements right after launch.

Evolution and Key Versions

HyperCard 1.0, released by Apple in August 1987, introduced the core scripting language as an integral part of the hypermedia system, enabling users to create interactive stacks with simple English-like commands for , data manipulation, and integration. Subsequent updates, such as version 1.2 in 1988, enhanced stability and compatibility, including support for read-only stacks on file servers and drives, while laying groundwork for extensions like third-party color tools. These early iterations focused on refining the foundational HyperTalk syntax for broader accessibility without major overhauls. The release of 2.0 in marked a significant expansion of HyperTalk capabilities, introducing version 2.0 of the language with an on-the-fly for improved performance, a built-in for troubleshooting, enhanced text handling through chunk expressions for precise data extraction (e.g., characters, words, or lines from fields), and support for global variables accessible across s. These features built on the original design philosophy of English-like accessibility, allowing non-programmers to develop more complex applications while maintaining syntactic simplicity. Further adaptations followed, including compatibility updates for in 1991, which integrated more seamlessly with the operating system's multitasking and AppleEvents for inter-application communication. By 1992, version 2.2 added native support for color images and animations via extensions like AddColor, expanding visual capabilities. Later releases culminated in 2.4 in 1998, incorporating internet scripting features such as commands (e.g., "open ") for integration, reflecting the era's shift toward networked applications. Following ' return to Apple in 1997, development priorities shifted, leading to the discontinuation of major updates after the 1998 release of version 2.4.1, the final official edition. Apple ceased sales in 2004, with the last compatibility patch enabling limited support under Mac OS X's environment, though no native port was pursued. Throughout its lifespan from 1987 to 2004, HyperTalk's core syntax remained largely unchanged, emphasizing stability and over radical innovations to preserve its user-friendly essence.

Decline and Legacy

By the mid-1990s, HyperTalk's prominence waned as the emergence of web technologies offered more dynamic and accessible alternatives for hypermedia creation, rendering HyperCard's stack-based model less competitive. Apple's strategic pivot under ' leadership in 1997 further accelerated this decline, with the final HyperCard update released in 1998 and the software discontinued from sale in March 2004; it continued to run only in the Classic Environment on early Mac OS X versions but received no native port or ongoing support. HyperCard's exclusive ties to the Macintosh ecosystem also hindered broader adoption, confining its user base amid growing demand for cross-platform solutions. Unofficial efforts sustained aspects of HyperTalk's ecosystem post-discontinuation. SuperCard, launched in 1987 by Solutions Etcetera, served as a direct successor with enhanced features like color support and a more robust GUI toolkit while preserving full compatibility for importing and running stacks, scripts, and extensions; it extended functionality to Mac OS X through version 4.8 in 2018. These revivals kept HyperTalk scripts viable for legacy applications, though they could not reverse the broader technological shift. HyperTalk's legacy endures in its role as a pioneer of accessible scripting and hypermedia, profoundly influencing Apple's own , introduced in 1993, which borrowed its natural, English-like syntax to enable system-wide on the Macintosh. It inspired a generation of authoring tools, democratizing content creation for non-programmers and paving the way for interactive . In education, HyperCard stacks powered countless interactive tutorials and simulations during the and 1990s, fostering early adoption of hypermedia for in classrooms worldwide. Today, HyperTalk's cultural significance persists through preservation initiatives, where digital archiving communities reverse-engineer and emulate vintage stacks to safeguard and artifacts, including embedded scripts that capture the era's innovative software experiments. Modern tools like echo this heritage by supporting compatible scripting for cross-platform multimedia projects. As of 2025, 's influence persists in the no-code movement and tools like , which remain actively developed for cross-platform use.

Design Philosophy and Features

English-Like Syntax

HyperTalk's syntax was deliberately crafted to resemble natural English, prioritizing and for users without formal programming experience. This approach employed a verb-object structure in its commands, such as "put 5 into x" for variable assignment, eschewing traditional operators like equals signs in favor of intuitive phrasing that mirrors everyday language. The design avoided punctuation-heavy elements common in other languages, such as semicolons for statement separation or braces for blocks, opting instead for keyword-driven flow that enhanced legibility. A key aspect of this syntax was the absence of strict typing, treating variables as dynamic containers that could hold numbers, text, or object references without prior declaration. This flexibility allowed scripts to manipulate data seamlessly, as in the command "put it * it into field 'Answer'" following input, where "it" dynamically references the entered value regardless of type. HyperTalk relied on descriptive keywords for common operations, including "go to card" for , "" to user dialogs, and "wait" for timing delays, further simplifying interactions within HyperCard's object-based environment. This English-like paradigm was rooted in Bill Atkinson's philosophy of democratizing programming, aiming to make the process feel like a natural conversation to reduce intimidation for beginners. As Atkinson noted in a 1987 interview, the goal was to empower non-experts without requiring mastery of complex control structures, fulfilling the Macintosh vision of accessible computing. A representative example illustrates this event-driven, declarative style: the script "on mouseUp put 'Hello' into field 1" responds to a mouse click by inserting text into a field, demonstrating how syntax integrates seamlessly with user interactions.

Object-Oriented Elements

HyperTalk incorporates a lightweight object-oriented model that structures both data and behavior within the HyperCard environment, treating elements as manipulable entities. This model revolves around a fixed set of object types—stacks, backgrounds, cards, buttons, and fields—without support for user-defined classes or explicit keywords. Instead, object relationships are defined implicitly through HyperCard's structure, where backgrounds provide shared elements across multiple cards, cards represent individual screens, and buttons and fields serve as interactive parts. Central to this model is the object hierarchy, which governs how messages propagate and behaviors are resolved. Messages sent to an object, such as a or , first check for a local response; if none exists, they ascend the chain: from the specific part ( or ) to its , then to the card's background, the , the home , and finally itself. This mechanism enables implicit , allowing higher-level objects to provide default behaviors that lower-level ones can override with their own . For instance, a on a background can define a common response to user interactions that applies to all cards sharing that background unless a card-specific intervenes. Encapsulation is achieved by associating scripts directly with individual objects, keeping and localized. Each object can have —such as name, visible, enabled, or text—that store its state, accessed through natural-language syntax like get the visible of button 1 or set the hilite of card field "Name" to true. Scripts, written as handlers (e.g., on mouseUp ... end mouseUp), are attached to these objects and respond to events, effectively bundling methods with the they manipulate. This tight integration with the allows scripts to reference and alter dynamically, as in:
on mouseUp
  set the visible of button 2 to false
  put the name of this [card](/page/Card) into [field](/page/Field) 1
end mouseUp
Such a handler on a would hide another button and display the current 's name in a upon clicking. Polymorphism emerges through the uniform handling of messages across objects, where generic commands like doMenu or event triggers adapt their effects based on the receiving object's context and properties. For example, the mouseUp message on a might navigate to a new , while the same message on a could select its text, demonstrating context-dependent behavior without explicit type declarations. This approach, while not as rigid as modern object-oriented languages, facilitated by leveraging HyperCard's visual structure for code organization. Event handling ties into these object behaviors by routing messages through the hierarchy, though detailed mechanics are covered elsewhere.

Forgiving Error Semantics

HyperTalk's forgiving error semantics emphasize , enabling scripts to proceed without abrupt termination when encountering common issues, which distinguishes it from more rigid programming languages of its era. This design choice reflects the language's intent to support and user-friendly development within environments. Failed operations, such as attempting to retrieve the contents of a non-existent field, typically trigger an dialog rather than a fatal error; this can be suppressed using the lockErrorDialogs property to allow the script to continue gracefully. A core aspect of this tolerance is automatic type coercion, where the interpreter seamlessly converts between numeric and textual data types based on context without requiring explicit casting commands. For instance, combining a number and a string in a operation, such as "5" && " apples", produces "5 apples" as output, treating the number as text when necessary. This leniency extends to arithmetic contexts as well, where strings representing valid numbers are coerced to numeric values for , supporting up to 19 digits of via Apple's SANE . The language performs no compile-time syntax or type checks, operating primarily interpretively at to prioritize ease of use over strict validation. Errors from invalid operations are captured in the the result property as descriptive strings (e.g., "No such stack" for a failed command), which scripts can inspect for conditional handling. While early versions relied on message-passing hierarchies and properties like lockErrorDialogs to suppress or redirect errors, later iterations post-HyperCard introduced enhanced graceful recovery through targeted message handlers, though without dedicated try-catch constructs. Accessing an undefined variable exemplifies this approach: the interpreter treats it as an empty string by default, automatically creating and initializing the variable on first use without raising an exception. This behavior, as in put x into message box where x is undefined, outputs nothing and enables incremental script development without upfront declarations. Although these semantics foster experimentation and for non-programmers, they carry trade-offs by potentially masking subtle bugs in larger stacks, where unhandled empty returns or coerced values might propagate unexpectedly and complicate .

Core Language Elements

Objects, Containers, and Properties

In HyperTalk, the foundational elements for data storage and manipulation are objects and their associated containers and properties, forming the static structure of applications. Objects encompass interactive components such as buttons, fields, cards, backgrounds, and stacks, each capable of holding data through dedicated containers or inherent properties. These elements enable developers to organize and access information within the environment without enforcing formal data types, treating all values implicitly as strings or numbers as needed. Containers serve as the primary holders for data in HyperTalk, including fields for editable text (limited to approximately 30,000 characters), buttons (starting from version 2.2), and variables that can be local or global in scope. Fields and buttons function as visible or invisible repositories on cards or backgrounds, while variables provide temporary storage accessible across scripts. Data is placed into containers using the put command, such as put "Hello" into [field](/page/Field) 1 or put the [date](/page/Date) into myVariable, and retrieved via the get command or direct reference, like get [field](/page/Field) "Name". Properties themselves, such as loc for position or script for attached code text, act as specialized containers for object-specific attributes, accessible for inspection or modification. Addressing objects and containers in HyperTalk supports both direct and named references, allowing precise targeting within the hierarchical structure of stacks, which contain cards, and cards, which contain backgrounds with parts like buttons and fields. Direct addressing uses numbers or IDs, as in field 1 or card id 1234, while named addressing employs quoted identifiers, such as button "Submit" or background field "Header". Hierarchical paths extend this flexibility, for example, field "Data" of card 5 of stack "Database", enabling navigation across layers without ambiguity. The keyword me provides a system-wide self-referential mechanism, inherited by all objects, allowing scripts to target the executing object itself, like set the visible of me to false. Quotation marks around names prevent interpretation as variables, ensuring literal recognition by HyperCard. Properties represent the configurable attributes of objects and the global HyperCard environment, queried or altered using the standardized syntax the [property] of [object], such as the name of card 1 to retrieve a card's label or the loc of button "Move" to get its coordinates. Modification occurs via the set command, exemplified by set the lockText of field "Name" to true, which prevents editing of the field's contents, or set the hilite of me to false for visual state changes. Global properties, like stacksInUse, apply system-wide and are often read-only, while object-specific ones, such as style or textFont, support both reading and setting to customize appearance and behavior statically. This property system underpins data persistence, as values remain until explicitly changed, with no distinction between data types—booleans like true coexist seamlessly with numeric coordinates or text strings.

Scripts and Handlers

In HyperTalk, scripts consist of handlers, which are reusable blocks of to objects such as buttons, fields, cards, or stacks. These handlers organize the language's procedural elements into modular units that respond to specific messages or perform custom . Message handlers follow the structure on <messageName> [parameterList] statementList end <messageName>, where <messageName> typically corresponds to an event like mouseUp, enclosing the code to execute upon that event's occurrence. Function handlers, used for reusable computations that return values, use function <functionName> [parameterList] statementList end <functionName>, with a specifying the output. Handlers are scoped locally to their parent object, meaning code defined in a 's executes only within that button's context unless explicitly invoked elsewhere. Invocation across the object hierarchy occurs via the send command for messages (e.g., send "mouseUp" to [button](/page/Button) "Next") or direct invocation for functions (e.g., put add(5, 3) into msg), allowing controlled communication without direct global access. Parameters in handlers are passed positionally as comma-separated variables, accessible directly by name or via param(n) for numbered arguments. For instance, a function might be defined as:
function add a, b
   return a + b
end add
This accepts two numeric inputs and returns their sum when called. A representative example is a button script for card navigation:
on mouseUp
   go to next card
end mouseUp
This handler advances to the subsequent card when the button is clicked, demonstrating HyperTalk's event-driven simplicity for user interface actions. Scripts are edited directly within HyperCard's integrated script editor, accessed via the Objects menu, keyboard shortcuts like Command-Option-C for a card script, or commands such as edit script of button 1. No separate compilation step is required; changes take effect immediately upon saving, supporting rapid iterative development in the HyperCard environment.

Messages and Event Handling

HyperTalk operates on an event-driven model, where scripts respond to messages generated by user interactions or system events, enabling dynamic behavior in applications. Messages serve as the primary mechanism for initiating actions, with handlers attached to objects to process them. This approach allows to translate user inputs, such as mouse clicks or key presses, into system messages that propagate through the object hierarchy. HyperTalk supports two main types of messages: system events and custom messages. System events include predefined triggers like mouseUp, which fires when the mouse button is released, and openCard, which occurs when a card is displayed. Custom messages, on the other hand, are user-defined and sent explicitly using the send command, such as send "myMessage" to object, allowing developers to trigger specific handlers across objects or stacks. These custom messages can target particular objects, bypassing standard if specified. Message propagation follows an upward path through the object hierarchy, starting from the target object (e.g., a ) and moving to the , background, , Home stack, and finally . If a handler for the exists in an object's , it executes and typically halts propagation unless the pass command is used, such as pass mouseUp, to forward the to the next level. This cancellable flow ensures efficient handling while permitting layered responses across the structure. The event loop in HyperTalk is driven by continuous user interactions and idle periods, with the idle message sent repeatedly to the current card during inactivity, such as when the Browse tool is active. Developers can attach an on idle handler to perform ongoing tasks, like animations or clock updates, making it essential for responsive, non-blocking applications. For asynchronous operations, HyperTalk provides the wait until command, which suspends script execution until a specified evaluates to true, such as wait until the [mouse](/page/Mouse) is down. This construct supports event-driven timing without polling, integrating seamlessly with message handling for conditional waits based on user input or state changes. Debugging message interactions often involves capturing return values through the result variable, which stores outputs or errors from commands and functions executed within handlers. For instance, put the result can output the value returned by a or an error like "not found," aiding in tracing propagation and handler outcomes.

Data Manipulation

Text Processing Functions

HyperTalk provides a suite of built-in operators and functions for manipulating strings and text within containers such as fields or variables, enabling developers to perform common tasks like joining, extracting, measuring, and modifying text without external extensions. These features emphasize , using phrases like "length of" or "after" to describe operations. The primary operators for text manipulation include and . The "&" joins two strings without adding a , as in put "Hello" & "World" into msg, which results in "HelloWorld". An extended form, "&&", concatenates with a inserted between the strings, yielding "Hello World" from the same example. For , the "after" retrieves the portion of a string following a specified , such as put after "Hello" in "HelloWorld" producing "World", while "before" extracts the preceding portion, like put before "World" in "HelloWorld" returning "Hello". Key functions support analysis and conversion of text. The "length of" function returns the number of characters in a string or container, for instance put length of "Hello" into msg yields 5; parentheses are recommended around complex expressions to ensure correct evaluation, as length of 3 + 5 would return 6 instead of the intended 1. The "offset" function locates the starting position of one string within another, returning 0 if not found and using 1-based indexing; for example, offset("lo", "Hello") returns 4. The "number" keyword serves dual purposes: as "number of" it counts elements like words or lines in a container, such as put the number of words in field 1 into msg, or alone it converts a string to a numeric value, like put number("123") into msg resulting in 123. Chunk expressions offer granular access to parts of text, allowing selection of specific characters, words, items, or lines within a larger string or field. Supported chunk types include "char" for characters, "word" for space-separated words, "item" for comma-delimited items (customizable via itemDelimiter), and "line" for newline-separated lines. Syntax follows patterns like chunkType number of container, with nesting possible, such as word 2 of line 1 of field "Data", which retrieves the second word from the first line of the specified field. Ranges can be specified with "to", e.g., char 1 to 3 of "cat" yields "cat". The "replace" command facilitates global substitution within a , replacing all occurrences of one with another. Its syntax is replace oldText with newText in container, as in replace "old" with "new" in myVar, which updates the variable by swapping all instances. For targeted changes, the "put" command can insert into a chunk expression, like put "new" into word 2 of field "Text". HyperTalk keywords and commands are case-insensitive, so "Put" and "put" are equivalent, but this does not affect the case preservation in stored text data, which remains as entered unless modified by functions like "upperCase" or "lowerCase".

Collections, Lists, and Arrays

In HyperTalk, lists are implemented as comma-separated strings stored in variables or containers, providing a simple mechanism for grouping related values without requiring explicit declarations. The default item delimiter is a (ASCII 44), which can be modified using the itemDelimiter property to accommodate other separators, such as semicolons or tabs, though it reverts to when the script idles. For example, assigning put "apple,[banana](/page/Banana),cherry" into myList creates a list accessible via chunk expressions like item 2 of myList, which returns "". This approach treats lists as delimited text, enabling functions such as [sum](/page/Sum)(items of myList) to perform aggregate operations on numeric lists like [sum](/page/Sum)(12.45,15.00,150.00). Arrays in HyperTalk lack explicit declaration or native support, relying instead on implicit structures formed through numbered chunks within or containers to simulate array-like behavior. Developers simulate one-dimensional by storing values in comma-delimited and accessing them via ordinal chunks, such as item 3 of field "scores", while multi-dimensional are approximated by parsing nested delimiters in a single , often using repeat loops for traversal. No true type exists in the core until extensions like XCMDs provide additional functionality, making string-based chunking the primary method for handling. For instance, to iterate over an implicit in a field containing "10,20,30,40", a script might use repeat with i = 1 to the number of items in field "scores" followed by operations on item i of field "scores". This chunk-based system integrates seamlessly with text processing but limits efficiency for large or complex datasets compared to modern primitives. Collections in HyperTalk extend beyond simple lists to encompass dynamic queries over objects, such as cards, buttons, or fields, using the every keyword combined with conditional where clauses. This allows filtering and referencing groups based on properties, for example, every card where visible is true retrieves all visible cards in the current as a return-delimited suitable for further . Such collections support without predefined indices, enabling scripts to operate on subsets like every button where name contains "OK" to target interactive elements. This object-oriented querying mechanism distinguishes collections from static s, providing a declarative way to aggregate and manipulate runtime object states within the HyperCard environment. Iteration over these structures primarily employs the repeat control structure, which supports index-based loops for and , such as repeat with i = 1 to 10 to traverse fixed ranges or repeat with i = 1 to the number of items in myList for variable-length collections. For more expressive traversal, repeat for each line of [field](/page/Field) "data" or repeat with each item of myList directly processes elements without manual indexing, often outputting results to the message box or another container. These methods leverage chunk expressions for access, ensuring compatibility with HyperTalk's string-centric while avoiding the need for explicit array bounds checking.

Referencing and Accessing Containers

In HyperTalk, containers such as fields, buttons, cards, backgrounds, stacks, and variables serve as data holders within stacks, and the language provides flexible for referencing and accessing them to enable manipulation and data transfer. Referencing can be absolute, specifying a full path through the object , or relative, leveraging the current for brevity. This system allows scripts to target specific objects using descriptors like numbers, names, or unique IDs, often combined with prepositions such as "of" or "in" to define . Absolute references locate containers explicitly within the stack structure, such as "card field 3" to denote the third field on a specific , or "stack 'MyApp' card 2 background field 'Data'" for a full hierarchical including the stack name. Relative references, by contrast, use contextual keywords to simplify addressing, including "this card's background" to target the background of the currently displayed , "next card" for the subsequent in sequence, or "previous field" relative to the executing object's position. These relative forms rely on the script's execution context, with "me" referring to the object running the handler and "recent" indicating the last accessed . Containers can also be referenced by unique identifiers or descriptive names, providing persistent or user-friendly access independent of ordinal positions. For instance, "button id 1005" targets a by its unchanging numeric , which remains valid even if objects are reordered or deleted, while "field named 'OK'" uses a quoted string to match the object's name property. are available for cards, backgrounds, , and fields but not stacks, and names must be enclosed in single or double quotes, with stack names limited to 31 valid Macintosh characters. Ordinal numbers serve as an alternative, such as "second button of this card," where positions range from 1 to the total count of that object type and may shift upon modifications. Part expressions enable granular access to substrings within text-based containers like fields, using a nested "of" structure to specify chunks such as characters, words, items, or lines. A typical form is "char 1 to 5 of word 2 of line 3 of field 'Data'," which extracts a range of characters from a specific word in a line of the named field. These expressions support ordinals (e.g., "first line") or numeric expressions for indices and ranges, allowing precise text manipulation without altering the entire container. Global variables provide cross-script access to data, declared at the start of a handler with the "global" keyword followed by the variable name, such as "global myVar," making it available across all handlers in the but not persisting between sessions unless saved explicitly. -level references use the "stack" descriptor with a name or path, like "stack 'MyApp'" for the current or "card 1 of 'MyApp'" for a specific therein, facilitating operations across multiple in the . can be added to or removed from the active using "start using 'MyApp'" or "stop using 'MyApp'." A common shorthand for data transfer involves commands like "put cd fld 1 into msg," which copies the contents of the first field on the current ("cd" abbreviating "") into the message box for temporary storage or further processing, akin to a operation.

Control Flow and Operations

Basic Arithmetic and Logic

HyperTalk provides a set of basic arithmetic operators for performing numerical computations, including (+), (-), (*), (/), (^), integer division (div), and (mod). These operators work on numeric values, with results supporting up to 19 decimal places unless formatted otherwise. For instance, the expression 5 + 3 evaluates to 8, while 10 / 3 yields 3.33333333333333333. , such as 2 ^ 3, computes 8 and is evaluated right-to-left in compound expressions. Integer division truncates the decimal portion, as in 10 div 3 resulting in 3. Logical operations in HyperTalk utilize the keywords and, or, and not for boolean expressions, which evaluate to true or false. The and operator returns true only if both operands are true, or yields true if at least one operand is true, and not inverts the boolean value of its operand. For example, (1 < 2) and (3 > 4) is false, while not false is true. Comparison operators enable relational checks, including equality (= or is), inequality (<> or is not), less than (<), greater than (>), less than or equal (<=), greater than or equal (>=), and containment (contains or is in). These return boolean results and prioritize numeric comparison when possible, falling back to lexical ordering for text. The contains operator checks if one string is a substring of another, such as "hello" contains "ell" evaluating to true. Examples include 5 > 3 (true) and "apple" < "banana" (true, lexically). Operator evaluation follows a defined precedence hierarchy, with parentheses overriding it for explicit grouping; within the same precedence level, operations proceed left-to-right, except for exponentiation which is right-to-left. The precedence order, from highest to lowest, is: parentheses, unary - and not, ^, * / div mod, + -, relational comparisons (> < etc., contains), equality comparisons (= <> is etc.), and, or. This avoids ambiguity in simple expressions but requires care in complex ones. For example, the statement put (3 + 2) * 4 into result first computes 3 + 2 as 5, then multiplies by 4 to yield 20 in the result container. Without parentheses, 3 + 2 * 4 would evaluate as 3 + (2 * 4) = 11 due to multiplication's higher precedence. HyperTalk implicitly coerces non-numeric values to 0 in contexts, ensuring operations continue without halting. For instance, the expression 5 + "abc" treats "abc" as 0, resulting in 5. This behavior applies to containers like fields holding invalid numeric text, where the number property returns 0 for non-numeric content. Such supports robust scripting but may lead to unexpected results if not validated explicitly. These operators form the basis for conditional statements in .

Conditional and Looping Structures

HyperTalk provides conditional structures primarily through the if statement, which allows scripts to execute different code paths based on the evaluation of a boolean condition. The basic syntax for a single-statement conditional is if condition then statement [else statement], where no end if is required, enabling simple tests directly in the Message box or within handlers. For more complex logic involving multiple statements, the form expands to if condition then statements [else if condition then statements] [else statements] end if, supporting nested conditions via else if clauses and an optional else for the false branch. Conditions are evaluated using operators such as is, =, &lt;&gt;, &gt;, &lt;, and logical connectors like and, or, and not, often incorporating arithmetic expressions for comparisons (e.g., if x &gt; 5 then ...). This structure facilitates decision-making in scripts, such as checking user input or object properties before proceeding. For instance, a might hide a based on a dialog response: if it is "Yes" then hide me else answer "Glad you reconsidered." [end if](/page/If—). Nesting allows chained evaluations, as in if the textStyle of the clickChunk is bold then show card field "definitions" else if it is italic then hide card field "notes" else beep [end if](/page/If—), ensuring precise control over interface behaviors. Every if block must be properly closed with end if in multi-statement forms to avoid syntax errors, and conditions are re-evaluated only at the start of each branch. Looping in HyperTalk relies on the versatile repeat construct, which supports over fixed counts, ranges, or conditions without a dedicated ; instead, conditional repetition is achieved via repeat until or repeat while. The counted loop syntax is repeat with [variable](/page/Variable) = start to end [down to] ... end [repeat](/page/Loop), where the increments by 1 (or decrements with down to) from the start value to the end, executing the enclosed statements for each . For example, repeat with i = 1 to 10 ... end repeat processes ten iterations. A simpler fixed-count form is repeat number [times] ... end repeat, equivalent to the ranged version without a . Conditional loops include repeat until condition ... end repeat, which continues execution as long as the condition is false, checking it before each iteration, and repeat while condition ... end repeat, which repeats while the condition holds true. An indefinite loop uses repeat forever ... end repeat, running until interrupted. These forms enable tasks like processing collections, such as repeat with i = 1 to the number of lines in field 1 put line i of field 1 into message box end repeat, which iterates over each line in a field and displays it sequentially. HyperTalk lacks a traditional while loop, but repeat while provides equivalent pre-test conditional repetition, while repeat until inverts the logic for post-equivalent behavior. Loop control is managed with exit repeat, which terminates the innermost loop immediately upon execution, and next repeat, which skips the remaining statements in the current iteration and advances to the next. For example, within a range loop, if someValue &gt; threshold then exit repeat end if allows early termination based on a condition, preventing unnecessary iterations in scripts like slideshows or data validation. These commands apply only within repeat blocks and cannot affect outer loops directly, promoting structured flow without goto-like jumps. All loops must end with end repeat and are typically placed inside handlers for event-driven execution.

HyperCard-Specific Commands

HyperCard-specific commands in HyperTalk enable direct interaction with the application's , stacks, and elements, distinguishing them from general-purpose scripting constructs. These commands facilitate navigation through stack structures, manipulation of components, creation and organization of content, audio playback, user interaction via dialogs, and data filtering operations tailored to HyperCard's card-based environment. Unlike standard statements, they invoke HyperCard's built-in behaviors, often triggering associated messages for further customization. Navigation commands allow scripts to move between cards, backgrounds, and stacks, simulating user actions like flipping through a deck. The go command navigates to a specified location within or across stacks. Its syntax includes go [to] &lt;ordinal&gt;, go [to] &lt;position&gt;, go [to] &lt;card&gt; [of &lt;background&gt;] [of &lt;stack&gt;], go [to] &lt;background&gt; [of &lt;stack&gt;], go [to] &lt;stack&gt;, or go [to] [&lt;card of&gt; &lt;background of&gt;] &lt;stack&gt; [in a new window] [without dialog]. For instance, go card 5 moves to the fifth card in the current stack, while go last card advances to the final card; go stack "Home" switches to another stack, and options like in a new window open it separately or without dialog suppress location prompts. The find command searches for text across fields in cards or backgrounds, highlighting matches and navigating to the first occurrence. Syntax variants include find [international] &lt;text&gt; [in &lt;field&gt;] [of &lt;marked cards&gt;], find &lt;chars&gt; [international] &lt;text&gt; [in &lt;field&gt;] [of &lt;marked cards&gt;], find &lt;word&gt; [international] &lt;text&gt; [in &lt;field&gt;] [of &lt;marked cards&gt;], find &lt;whole&gt; [international] &lt;text&gt; [in &lt;field&gt;] [of &lt;marked cards&gt;], and find &lt;string&gt; [international] &lt;text&gt; [in &lt;field&gt;] [of &lt;marked cards&gt;]. The international modifier accounts for diacritics, in &lt;field&gt; restricts scope, and of marked cards limits to selected cards. Examples include find "text" in field "Notes", which locates partial matches starting at word boundaries, or find whole "exact phrase" for precise strings; upon success, it boxes the text and sets the result to empty, or "Not found" otherwise.

User Interface

UI commands control the visibility and behavior of interface elements, enabling dynamic hiding or revealing of components during script execution. The show command displays hidden or off-screen elements, with syntax such as show &lt;menuBar&gt;, show &lt;titleBar&gt;, show &lt;groups&gt;, show &lt;all cards&gt;, show &lt;marked cards&gt;, show &lt;posInteger cards&gt;, show &lt;card picture&gt;, show &lt;background picture&gt;, show &lt;picture of card&gt;, show &lt;picture of background&gt;, show &lt;field&gt; [at &lt;point&gt;], show &lt;button&gt; [at &lt;point&gt;], show &lt;window&gt; [at &lt;point&gt;], or show &lt;externalWindow&gt; [at &lt;point&gt;]. It brings windows to the front and positions parts at specified coordinates if provided. For example, show button 1 reveals a hidden button, or show menuBar restores the menu bar visibility. Conversely, the hide command conceals elements without deleting them, using syntax like hide &lt;menuBar&gt;, hide &lt;titleBar&gt;, hide &lt;groups&gt;, hide &lt;card picture&gt;, hide &lt;background picture&gt;, hide &lt;picture of card&gt;, hide &lt;picture of background&gt;, hide &lt;field&gt;, hide &lt;button&gt;, hide &lt;window&gt;, or hide &lt;externalWindow&gt;. This sets properties like visible to false for parts or showPict to false for images. Examples include hide button 1 to obscure a button or hide card picture to blank the card's visual layer; hiding the front window activates the next available one. The doMenu command simulates menu selections to perform interface actions, with syntax doMenu &lt;itemName&gt; [without dialog] [with keys] or doMenu &lt;itemName&gt;, &lt;menuName&gt; [without dialog] [with keys]. The without dialog skips confirmation prompts, and with keys emulates modifier keys. It triggers the doMenu message, allowing overrides. Examples are doMenu "Cut" to execute the Cut menu item or doMenu "New Card" without dialog to add a card silently.

Stack Operations

Stack operations manage the creation, organization, and multimedia aspects of HyperCard stacks. To create a new card, scripts typically use doMenu "New Card", which adds a blank card to the current stack and sends the newCard message for initialization. This integrates with the menu system but allows scripted automation, such as populating the new card immediately after. The sort command orders cards or container contents based on criteria, with syntax sort [sortDirection] [sortStyle] by &lt;expression&gt;, sort [this] &lt;stack&gt; [sortDirection] [sortStyle] by &lt;expression&gt;, sort [&lt;marked&gt;] &lt;cards&gt; [of this stack] [sortDirection] [sortStyle] by &lt;expression&gt;, sort &lt;background&gt; [sortDirection] [sortStyle] by &lt;expression&gt;, sort [&lt;marked&gt;] &lt;cards of background&gt; [sortDirection] [sortStyle] by &lt;expression&gt;, or sort [&lt;chunks of&gt;] &lt;container&gt; [sortDirection] [sortStyle] [by &lt;expression&gt;]. Directions include ascending or descending (default ascending), and styles are text, numeric, international, or dateTime (default text). The each variable holds current items during sorting. For example, sort cards by name arranges cards alphabetically by their names, or sort lines of field "List" numeric descending orders field lines by numerical value. The command handles audio output, with syntax play stop, play &lt;sound&gt;, play &lt;sound&gt; &lt;notes&gt;, play &lt;sound&gt; tempo &lt;posInteger&gt;, or play &lt;sound&gt; tempo &lt;posInteger&gt; &lt;notes&gt;. It plays named sounds from resources or generates tones using note sequences in NAOD format (note, accidental, octave, duration). play stop halts playback immediately. Examples include play "boing" for a resource sound or play "harpsichord" tempo 120 "c4 q e4 q g4 h" for a musical phrase; digitized sounds require sufficient RAM and set the result to error messages if unavailable.

User Input

For soliciting user responses, the answer command presents modal dialogs. Syntax includes answer &lt;text&gt;, answer &lt;text&gt; with &lt;reply1&gt;, answer &lt;text&gt; with &lt;reply1&gt; or &lt;reply2&gt;, answer &lt;text&gt; with &lt;reply1&gt; or &lt;reply2&gt; or &lt;reply3&gt;, answer file &lt;text&gt; [of type &lt;fileType&gt;], or answer program &lt;text&gt; [of type &lt;processType&gt;]. It returns the selected reply in it (default "OK" if unspecified) and supports file/program selection variants. Text is limited to 254 characters. A representative example is answer "Yes/No?" with "Yes" or "No", which displays buttons and stores the choice in it for conditional logic.

Extensions and Influences

External Commands and XCMDs

External Commands and XCMDs in HyperTalk refer to XCMDs (eXternal CoMmanDs) and XFCNs (eXternal FuNctions), which are compiled code resources that extend the capabilities of HyperCard beyond its native scripting features. These modules, typically written in languages such as or Pascal, allow developers to create custom commands and functions that integrate seamlessly with HyperTalk scripts, enabling access to routines and other system-level operations. XCMDs function like procedures that modify the HyperCard environment without returning a value directly, while XFCNs behave like functions that compute and return results. The primary purpose of XCMDs and XFCNs is to address limitations in HyperTalk's built-in commands, such as providing faster execution for complex computations or interfacing with hardware and peripherals not supported natively by HyperCard, including graphics manipulation, file input/output operations, and device drivers like video disk controllers. For instance, an XCMD might handle animation sequences by directly calling Macintosh graphics routines, or connect to external databases for data retrieval, thereby enhancing HyperCard stacks for specialized applications. This extensibility was crucial for developers building performance-intensive or platform-integrated tools within the HyperCard ecosystem. In HyperTalk scripts, XCMDs are invoked as commands without parentheses, such as MyXCMD param1, param2, while XFCNs require parentheses for parameters and can assign results, as in put MyXFCN("input") into target. HyperCard searches for these resources in the resource forks of the current stack, home stack, and system stacks via its message inheritance mechanism, loading and executing the matching code resource upon finding it. Parameters are passed through a parameter block containing paramCount (indicating the number of arguments, up to 16) and an array of params (handles to zero-terminated strings), allowing HyperTalk to supply data as text. To return values, XCMDs set the global the result variable, whereas XFCNs use a returnValue handle; both rely on callback functions for converting data types or interacting with HyperCard elements, such as paramToNum for numeric conversion or GetFieldByName for accessing stack contents. XCMDs and XFCNs were introduced with HyperCard version 1.1 in 1988, building on the initial 1987 release to provide a standardized for third-party extensions. However, they were initially platform-specific to the Macintosh, requiring compilation with tools like MPW and facing constraints such as a 255-character limit on text callbacks, re-entrancy issues in binary operations, and inability to directly access non-current card fields without callbacks, which could impact performance. These limitations necessitated careful design to avoid memory overflows or compatibility problems across HyperCard versions.

Modern Descendants and Adaptations

SuperCard, released in by Allegiant Technologies, emerged as one of the earliest commercial extensions of , featuring enhanced capabilities while maintaining strong compatibility with through its own , SuperTalk, which is a dialect of the xTalk family. SuperTalk preserved core syntax and semantics, allowing users to translate stacks, scripts, and extensions like XCMDs directly into SuperCard projects with minimal adjustments. Additionally, SuperCard introduced support for color graphics, higher-resolution displays, and a Windows port in the early 1990s, enabling cross-platform development that lacked. MetaCard, introduced in 1998 by MetaCard Corporation, further advanced the HyperTalk lineage with its MetaTalk scripting language, a superset of HyperTalk designed for cross-platform application development on Macintosh, Windows, and Unix systems. In 2003, MetaCard was acquired and rebranded as Runtime Revolution (RunRev) by , which open-sourced parts of the while retaining MetaTalk's high compatibility—enabling nearly unmodified HyperTalk scripts to run within its environment. This evolution culminated in 2010 with the launch of , which continues to use LiveCode Script (an updated MetaTalk) that retains approximately 90% of HyperTalk's syntax, including foundational commands like "put" and "go," while adding modern features such as , SQL database integration, and support for mobile (, ) and web deployment. has found particular application in , where its intuitive scripting aids in teaching programming concepts, and in , with active communities converting legacy HyperCard stacks for contemporary use. Other adaptations include HyperNext, developed by TigaByte Software in the early 2000s (with version 1.21 released in 2004), which offers a simplified programming language closely modeled on HyperTalk to assist beginners in creating multimedia applications for Macintosh and Windows. As of November 2025, Apple has made no official efforts to revive HyperCard or HyperTalk, leaving development to these third-party successors.

Impact on Scripting Languages

HyperTalk served as a direct precursor to , introduced by Apple in 1993, by popularizing an English-like syntax that emphasized readable verbs and object-oriented commands for scripting user interfaces and applications. This approach influenced 's design, which adopted similar constructs to make accessible to non-programmers, while extending HyperTalk's verb-object structure into the broader inter-application communication model. For instance, HyperTalk's chunk expressions for referencing UI elements, such as "the clicked button," generalized into 's event handling, enabling scripted control over Macintosh applications through standardized events rather than HyperCard-specific messaging. The language also inspired the development of in 1995 by at , particularly in its event-driven paradigm and forgiving syntax suited for dynamic, interactive environments. Eich drew from 's message-passing system—where scripts responded to user events like mouse clicks—to inform JavaScript's event handling in web browsers, such as the onclick mechanism in the (DOM). This influence extended JavaScript's role as a that prioritized ease of use over strict typing, allowing rapid prototyping of interactive web pages much like HyperTalk enabled stack manipulation in . In the realm of hypermedia, HyperTalk's integration of scripting with elements shaped subsequent paradigms, including event models in and CSS for web interactions, and paved the way for modern no-code platforms by demonstrating how declarative, low-barrier scripting could creators without deep programming knowledge. Its object-centric approach to linking text, graphics, and behaviors influenced the evolution of hypermedia systems toward more intuitive, event-based interfaces, as seen in tools like and Adalo that abstract scripting into visual workflows for app building. Retrospectives in human-computer interaction (HCI) from the , such as analyses of end-user programming environments, credit HyperTalk with popularizing accessible scripting for non-experts, highlighting its role in shifting HCI toward through "programming for the rest of us." Culturally, HyperTalk facilitated the creation of early titles and by enabling authors to script interactive experiences, such as encyclopedias and choose-your-own-adventure games, which shaped intuitive in tools. Companies like Voyager used HyperTalk within to produce landmark s, including expanded books with embedded audio and video, demonstrating how the language's simplicity accelerated the adoption of in and during the . This legacy influenced broader trends in scripting by emphasizing event-responsive, user-friendly code that prioritized engagement over complexity.

References

  1. [1]
    SP 88: AN INTRODUCTION TO HYPERCARD PROGRAMMING
    In the fall of 1986, the developers decided to include a programming language in WildCard, so Atkinson and Dan Winkler designed WildTalk. HyperCard's language, ...
  2. [2]
    None
    Summary of each segment:
  3. [3]
    [PDF] HyperTalk: The Language for the Rest of Us - Memoryhole.net
    Jan 18, 2004 · HyperTalk was born as the core scripting language of the HyperCard application, developed by Bill Atkinson1 for Apple Computer, Inc. in 1987 ...
  4. [4]
    Retro Apple: How HyperCard Changed the World One Stack at a Time
    ### Summary of HyperTalk: Description, History, and Influences
  5. [5]
    Apple HyperCard - Software - The Centre for Computing History
    HyperCard was originally released in 1987 for $49.95 and was included free with all new Macs. It was withdrawn from sale in March 2004, having received its ...
  6. [6]
    HyperCard Stack File Format - The Library of Congress
    Dec 14, 2021 · HyperCard was developed by Bill Atkinson for use on Apple Macintosh and Apple IIGS computers and was first released by Apple in 1987.Missing: origins | Show results with:origins
  7. [7]
    Hypercard Overview - Museums Victoria Collections
    HyperTalk can be used to manipulate data and the user interface. The HyperTalk programming language was created in 1986-87 by Dan Winkler. Many freeware ...<|control11|><|separator|>
  8. [8]
    HyperCard On The Archive (Celebrating 30 Years of HyperCard)
    Aug 11, 2017 · HyperCard brought into one sharp package the ability for a Macintosh to do interactive documents with calculation, sound, music and graphics. It ...Missing: entry | Show results with:entry
  9. [9]
    [PDF] Introduction to Macintosh System 7 1991.pdf - Vintage Apple
    May 15, 1992 · Our Instant References provide quick access to each of a program's commands and functions. SYBEX Encyclopedias provide a comprehensive reference ...
  10. [10]
    [PDF] HyperCard Script Language Guide - cancel.fm
    Page 1. ð. HyperCard. Script Language Guide. The HyperTalk Language. Page 2. ð ... HyperTalk evaluates expressions—the descriptions of how to get a value.
  11. [11]
    The forgotten software that inspired our modern world - BBC
    Jul 23, 2019 · HyperCard was a gateway to programming and was what first got me comfortable with the idea of coding. It's probably not ridiculously hyperbolic ...
  12. [12]
    30-plus years of HyperCard, the missing link to the Web - Ars Technica
    May 25, 2019 · HyperCard allowed you to create "stacks" of cards, which were visual pages on a Macintosh screen. You could insert "fields" into these cards that showed text, ...
  13. [13]
    SuperCard FAQ - Fourth World
    HYPERCARD COMPATIBILITY. How do I convert my HyperCard stacks to SuperCard? How close are SuperTalk and HyperTalk? How do I implement sharedText background ...
  14. [14]
    AppleScript: The Missing Manual - O'Reilly
    HyperTalk, the programming language for HyperCard, was highly regarded for its English-like syntax and shallow learning curve. And even hard-core ...
  15. [15]
    All Hyped Up for HyperCard: Further Adventures with an Apple ...
    Jul 29, 2021 · We have been involved in research on HyperCard, a discontinued Apple program used to design a wide range of computer applications in the late-1980s and 1990s.Missing: influence | Show results with:influence<|separator|>
  16. [16]
    [PDF] HyperTalk: The Language for the Rest of Us - Memoryhole.net
    Jan 18, 2004 · HyperTalk was born as the core scripting language of the HyperCard application, developed by Bill Atkinson1 for Apple Computer, Inc. in 1987 ...
  17. [17]
  18. [18]
    HyperTalk
    Much of the ease of using HyperTalk comes from its object-oriented nature and tight coupling with the HyperCard interface. Screen objects may be put in ...
  19. [19]
    [PDF] Hyperralk·· Beginner's Guide: An Introduction to Scripting
    HyperCard also has global variables, whose values are available to all handlers everywhere. Global variables aren't covered in this book. See the HyperCard ...
  20. [20]
    Referring to objects | HyperTalk Reference - The HyperCard Center
    It's a good idea to use quotation marks around an object's name so that HyperCard recognizes it literally and doesn't look for a variable by that name. Note: ...
  21. [21]
    HyperTalk and scripts - The HyperCard Center
    In HyperTalk, responding to an event is called handling the event. As a scripter, you write a specific handler for each event that you want your stack to handle ...
  22. [22]
    Handling messages | HyperTalk Reference - The HyperCard Center
    As a scripter, you write message handlers to respond to messages. When an object receives a message, HyperCard searches the object's script for a handler with ...
  23. [23]
    length | HyperTalk Reference - The HyperCard Center
    Most functions take factors as their parameters, which is why length of 3 + 5 returns 6 and length of (3 + 5) returns 1 . In short, always use parentheses ...
  24. [24]
    offset | HyperTalk Reference - The HyperCard Center
    offset. offset(text1, text2). Value returned: the number 0 if text1 does ... String operators. Placeholders. HyperTalk Reference · abs · annuity · atan · average.
  25. [25]
    itemDelimiter | HyperTalk Reference - The HyperCard Center
    The itemDelimiter property sets or retrieves what character HyperCard uses to separate items in a list. The default delimiter is comma .
  26. [26]
    HyperTalk BNF - Jeanne's World
    This section describes the One True Syntax for the HyperTalk scripting language on the Macintosh, HyperCard versions through 1.2.5.Missing: 1989 | Show results with:1989
  27. [27]
  28. [28]
    Comparison operators | HyperTalk Reference | The HyperCard Center
    ### Summary of Comparison Operators in HyperTalk
  29. [29]
    go | HyperTalk Reference | The HyperCard Center
    The go command takes the user to a card in a stack. The ordinal and position forms take the user to a card in the current stack.Missing: syntax | Show results with:syntax
  30. [30]
  31. [31]
  32. [32]
  33. [33]
  34. [34]
  35. [35]
  36. [36]
  37. [37]
  38. [38]
    | HyperTalk Reference | The HyperCard Center
    **Summary of 'filter' Command in HyperTalk:**
  39. [39]
    XCMD CookBook - MacTech | The journal of Apple technology.
    XFCNs, like any other function in Hypercard, take their parameters in parentheses and return a value. This is the most important difference between XCMDs and ...Missing: mechanism | Show results with:mechanism
  40. [40]
    [PDF] Compilelt! - The XCMD Development System - HyperCard
    Toolbox routines yourself, and you are not manipulating HyperTalk string variables or chunk expressions (which Compileltf turns into memory manager routine ...
  41. [41]
    SuperCard FAQ - Fourth World
    How close are SuperTalk and HyperTalk? SuperTalk is a dialect of the HyperTalk family of languages, what are sometimes collectively referred to as xTalk.
  42. [42]
    SuperCard 1.x - Macintosh Repository
    SuperCard is HyperCard compatible and will translate all stacks, scripts, XCMDs and XFCNs. Users can save their SuperCard applications as stand-alone ...
  43. [43]
    SuperCard may have gone extinct. - OpenXTalk Forums
    After years of reflection and recovery (the closure of Allegiant and the end of the Windows port nearly cost me my business, the closure settlement cost all of ...
  44. [44]
    MetaCard FAQ: Overview & Related Products
    Because the MetaTalk language used in MetaCard is a superset of the HyperTalk language used in HyperCard, the sites HyperCard Home Page, , and HyperCard ...
  45. [45]
    MetaCard - OpenXTalk Forums
    Nov 22, 2024 · At some time the MetaCard Corp. went bust and the MetaCard people GAVE all the MetaCard code to RunRev. This resembles my buying a brick house ...MetaCard > Runtime Revolution > LiveCode - OpenXTalk ForumsHyperStudio - OpenXTalk ForumsMore results from openxtalk.orgMissing: HyperTalk | Show results with:HyperTalk
  46. [46]
    LiveCode - Develop Apps Yourself
    ### Summary of LiveCode from https://livecode.com/
  47. [47]
  48. [48]
    HyperNext v1.21 - MacTech.com
    ... .21. mactech. 21 years ago. HyperNext v1.21. We are pleased to announce the release of HyperNext v1.21 for ... Date: December 8, 2006; In relation to: MacTech News.
  49. [49]
    [PDF] AppleScript - UT Computer Science
    Sep 29, 2006 · The Apple Events communication model uses a generalization of HyperCard's chunk expressions. Just as a HyperCard command contains a verb and one.
  50. [50]
    [PDF] JavaScript: the first 20 years - Department of Computer Science
    HyperCard [Apple Computer 1988] inspired Brendan Eich to use the concept of events in the original Netscape 2 DOM [Netscape 1996c] design. Originally events ...
  51. [51]
    [PDF] Programming “systems” deserve a theory too! Joel Jakubovic School ...
    Explicitly designed with the goal of end-user empowerment, with a slogan of “programming for the rest of us”, HyperCard was a popular platform both to share and ...
  52. [52]
    [PDF] Voyager Company CD-ROMs: Production History and Preservation ...
    • Software Choices. Many Voyager titles—including nearly all the book-based titles— were programmed using the Apple software HyperCard. Voyager was one of ...Missing: HyperTalk | Show results with:HyperTalk
  53. [53]
    HyperCard in Educational Research: An Introduction and Case Study
    Nov 14, 1988 · HyperCard? In the jargon, HyperCard is a software develop- ment environment or platform. It contains: (a) a.