home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Magazin 1997 May / CD_05_97.ISO / doc / script.txt < prev   
Text File  |  1997-03-02  |  217KB  |  5,491 lines

  1. ScalaScript
  2. ===========
  3.  
  4. Foreword
  5.  
  6. This document provides an overview of the ScalaScript language and its
  7. capabilities under MM200.  Updates to this document will be made available
  8. at the web page http://www.scala.com/scripting.
  9.  
  10. In general, users of Scala products should not have to resort to hand-editing
  11. scripts--the authoring system should provide all necessary features.  However,
  12. if a feature is required that is not supported by the authoring system, then
  13. manual updating of a script may be required.  It is posible to create new
  14. scripts outside of the authoring system, as well as hand-edit scripts that
  15. were created by the authoring system.
  16.  
  17. Note that loading an hand-edited or hand-authored script into the authoring
  18. system may produce unexpected results.
  19.  
  20. -------------------------------------------------------------------------------
  21.  
  22. Contents:
  23.  
  24. 1.  The ScalaScript Language
  25. 2.  Launch EX Script Commands and Variables
  26. 3.  FileIO EX Script Commands and Variables
  27. 4.  Sound EX Script Commands and Variables
  28. 5.  Input EX Script Commands and Variables
  29. 6.  Time Script Functions and Variables
  30. 7.  MPEG EX Script Commands and Variables
  31. 8.  Screen Script Commands and Variables
  32.  
  33. -------------------------------------------------------------------------------
  34.  
  35. 1.  The ScalaScript Language
  36. ============================
  37.  
  38. This is a discussion of the ScalaScript language and its usage.
  39.  
  40. It is important to understand that the ScalaScript language is not a
  41. traditional procedural (imperative) programming language. Commands in
  42. a ScalaScript script are not necessarily executed one after another,
  43. like a Basic or C program. Rather, a ScalaScript script is a
  44. description of an application and its components, much like a
  45. description in English. The ScalaScript parser and the EX modules read
  46. this description and build a model that can be used to play or author
  47. the script.
  48.  
  49. Also, keep in mind that the ScalaScript language was designed primarily to be
  50. authored in a graphical user interface. It would certainly look different if it
  51. was intended to be used as a programming language.
  52.  
  53. Example Scripts
  54. ---------------
  55.  
  56. First, a few sample scripts and their ScalaScript descriptions will be
  57. presented.
  58.  
  59. Simple Picture Sequence
  60. -----------------------
  61.  
  62. The first example script consists of four event objects; one Block that
  63. contains the full script and three atoms placed in the Block's Sequence list.
  64. In the ScalaScript language, this script could be described with the following
  65. lines:
  66.  
  67.     !ScalaScript
  68.     EVENT
  69.       Sequence:
  70.         PICTURE (":C/PICTURES/PICTURE1.BMP");
  71.         PICTURE (":C/PICTURES/PICTURE2.BMP");
  72.         PICTURE (":C/PICTURES/PICTURE3.BMP");
  73.     END
  74.  
  75. Note that the containing Block is often referred to as the "parent" of the
  76. Events that the Block contains, and that the Events within the Block are
  77. often referred to as "sub-events" of the Block.
  78.  
  79. Sub-events are by default placed in the parent Block's Sequence list. In this
  80. case, the PICTURE events must go into the Sequence list rather than the Group
  81. list. This is because events in the Group list are played in parallel, which
  82. doesn't make much sense for these events (they should be played sequentially).
  83. Since events default to the Sequence list, the Sequence: keyword is optional
  84. here.
  85.  
  86. The PICTURE command used here, which an example command supported by some
  87. external EX, requires one parameter: the name of the picture file. Note how
  88. command parameters are enclosed in parentheses. A file name is a string, which
  89. has to be enclosed in double quotes ("). Also note that the ScalaScript language
  90. can use MMOS syntax for path names, which is slightly different from MS-DOS.
  91. However, standard MS-DOS path names are supported.
  92.  
  93. As can be seen from the example, commands are terminated by semicolons (;).
  94.  
  95. Simple Page Sequence
  96. --------------------
  97.  
  98. The next example script uses Blocks to Group related events together:
  99.  
  100.     !ScalaScript
  101.     EVENT
  102.     Sequence:
  103.         :Page1 EVENT
  104.         Group:
  105.             PICTURE(":C/PICTURES/PICTURE1.BMP");
  106.         Sequence:
  107.             TEXT(120,40,"This is our");
  108.             TEXT(120,60,"first script");
  109.             TEXT(120,80,"with text");
  110.         END
  111.  
  112.         :Page2 EVENT
  113.         Group:
  114.             ANIM(":C/ANIM/ANIM1.FLC");
  115.             SOUND(":C/MUSIC/SONG1.MID");
  116.         Sequence:
  117.             TEXT(120,350,"You can put text on animations, too");
  118.         END
  119.     END
  120.  
  121. The EVENT...END commands are used to define Blocks.
  122.  
  123. Events may be named by proceeding them with a label. The label is an identifier
  124. that is prefixed by a colon. Note that this is an identifier, not a string.
  125. Identifiers must follow stricter rules than strings (see below).
  126.  
  127. The label attaches to the first event that follows its definition. Therefore,
  128. any label must precede some event. Note that certain commands contain internal
  129. labels and a label should not be placed before these commands. These commands
  130. are those that define named entities, such as variable declarations or style
  131. commands.
  132.  
  133. Also, note how the PICTURE, ANIM and SOUND commands are placed in their parents'
  134. Group list in this example. The items in a Group list are played in parallel and
  135. are active throughout the execution of the Block's Sequence list.
  136.  
  137. Simple Chapter Sequence
  138. -----------------------
  139.  
  140. The EVENT...END commands can be nested any number of levels:
  141.  
  142.     !ScalaScript
  143.     EVENT
  144.         :Chapter1 EVENT
  145.         Sequence:
  146.             :Page1 EVENT
  147.             Group:
  148.                 PICTURE(":C/PICTURES/PICTURE1.BMP");
  149.             Sequence:
  150.                 TEXT(120,40,"Some text");
  151.             END
  152.             :Page2 PICTURE(":C/PICTURES/PICTURE2.BMP");
  153.             :Page3 PICTURE(":C/PICTURES/PICTURE3.BMP");
  154.         END
  155.  
  156.         :Chapter2 EVENT
  157.             :Page1 EVENT
  158.             Group:
  159.                 PICTURE(":C/PICTURES/PICTURE4.BMP");
  160.             Sequence:
  161.                 TEXT(120,40,"Some text");
  162.             END
  163.         END
  164.     END
  165.  
  166. Note that it may not be desirable to nest the script a great deal, even though
  167. it is possible. Nested Blocks restrict the access to Events defined within
  168. them. It is often useful to be able to jump directly to any page from any point
  169. in the script. This is not possible if the script uses chapter nesting as shown
  170. above.
  171.  
  172. Lexical and Syntax Rules
  173. ------------------------
  174.  
  175. Since the arguments of most commands and functions, as well as the indices of
  176. many arrays, are parsed by EX modules, the Player cannot control the lexical
  177. rules in all instances. For instance, in these sample commands, arrays and
  178. functions the parsing within the parenthesis or square brackets is handled by
  179. the EX:
  180.  
  181.     mx129.play("test", rate(100), delay(long), start(true));
  182.     a = channel_value(1, 17, force(true)) + channel_offset[1, current_channel(true)];
  183.  
  184. It is assumed that EX implementors will follow the standards in all cases. Not
  185. doing so should be considered an error in the EX implementation.
  186.  
  187. ScalaScript File Identifier
  188. ---------------------------
  189.  
  190. The first 12 characters of a ScalaScript file must be "!ScalaScript" (without
  191. the quotes.) This identifies the file to the Player as a valid ScalaScript file.
  192. This keyword must be before any comments, commands, white space or any other
  193. characters. It must be on its own line (the first line of the file).
  194.  
  195. White Space and Comments
  196. ------------------------
  197.  
  198. The ScalaScript language ignores all white space, such as spaces, carriage
  199. returns, line feeds and tabs. Any string of these white space characters is
  200. treated as a single separator character in parsing. That is, this script:
  201.  
  202.     !ScalaScript
  203.     EVENT Group: integer(x); Sequence: x=x+1; END
  204.  
  205. Is equivalent to this script:
  206.  
  207.     !ScalaScript
  208.     EVENT
  209.     Group:
  210.         integer(x);
  211.     Sequence:
  212.         x=x+1;
  213.     END
  214.  
  215. There are two types of comments in ScalaScript: block comments and line
  216. comments. Block comments delimit a range of characters defined by a block
  217. comment introducer ("/*") and a block comment terminator ("*/"). All characters
  218. within a block comment are ignored including the block comment introducer and
  219. line comment introducer.
  220.  
  221.     !ScalaScript
  222.     /* this is a block comment */
  223.     Event
  224.     /* this is a comment.  It may appear anywhere within the file,
  225.     except on the first line.  The everything within the block is ignored.
  226.     */
  227.     End
  228.     /* another block comment */
  229.  
  230. Line comments are introduced by the line comment introducer ("//"). All
  231. characters following the line comment introducer up to the next end of line
  232. character are ignored.
  233.  
  234.     !ScalaScript
  235.     // this is a comment
  236.     Event
  237.     Sequence:                      // this is a comment.
  238.         my.command(1,2,test(on));  // another comment.
  239.     End
  240.     // this is a comment.
  241.  
  242. Comments do not nest.
  243.  
  244. Case
  245. ----
  246.  
  247. Scripts are case insensitive, that is "WHILE" is equivalent to "while".
  248.  
  249.     /* these three lines are equivalent */
  250.     DISPLAY(STYLE(DISPLAY1));
  251.     Display(Style(Display1));
  252.     display(style(display1));
  253.  
  254. Labels
  255. ------
  256.  
  257. Labels are defined by a leading colon.
  258.  
  259.     :cmd_label command();                   // command with label.
  260.     :my_event  event...end                  // block with label.
  261.  
  262. Labels can collide with other names (variables, styles, etc.).
  263.  
  264. Labels attach to the next event. Labels that do not have a following event are
  265. ignored (before END, 2 sequential labels).
  266.  
  267. Disable
  268. -------
  269.  
  270. Events (commands or blocks) may be disabled by placing the word "disabled"
  271. in front of them.  The "disabled" keyword follows any label, but preceeds the
  272. event or block.
  273.  
  274.     Disabled my_command(1, foo(on));        // disabled command.
  275.     :my_label disabled cmd();               // disabled command with label.
  276.     :my_event disabled event...end          // disabled block with label.
  277.  
  278. Optional
  279. --------
  280.  
  281. Commands may be marked as optional by putting the word "optional" in front
  282. of them. The "optional" keyword follows any label, but preceeds the command.
  283.  
  284. An optional command is one that is not required for the execution of the
  285. script.  If the EX that handles the command is available, then the command
  286. should be normally processed.  If the EX is unavailable, then any errors
  287. should be quietly suppressed and the script playback should proceed without
  288. the command.
  289.  
  290.     optional my_command(1, foo(on));       // this command not required.
  291.  
  292. NoAuthor
  293. --------
  294.  
  295. The 'noauthor' directive keeps Scala from allowing the "group" (cluster) to
  296. be gone into in the editor.  Usually used on hand-authored scripts that
  297. author wouldn't understand.
  298.  
  299.     noauthor my_command(1, foo(on));
  300.  
  301. Identifiers
  302. -----------
  303.  
  304. Identifiers are used to denote command names and event names (including labels,
  305. variable names and function names.) Identifiers must start with one of the
  306. following characters:
  307.  
  308.     A-Z, a-z, _ (underscore)
  309.  
  310. Otherwise, an identifier can contain any number of the following characters:
  311.  
  312.     A-Z, a-z, _ (underscore), 0-9, . (dot)
  313.  
  314. Identifiers are not case-sensitive.
  315.  
  316. Numerals
  317. --------
  318.  
  319. Numeric literals can be in decimal, hexadecimal or binary form, for example:
  320.  
  321.     4711        (decimal)
  322.     $7f         (hexadecimal)
  323.     %11010111   (binary)
  324.  
  325. Numerals are 32-bit signed values. The decimal form uses a minus sign to denote
  326. negative numbers, while the hexadecimal and binary forms use twos-complement.
  327. Hexadecimal numbers are not case sensitive.
  328.  
  329. Strings
  330. -------
  331.  
  332. String literals are always enclosed with double quotes ("). ScalaScript imposes
  333. no limit to the length of a string.
  334.  
  335. The ScalaScript language uses the caret (^) as an "escape" character, to prefix
  336. control codes within a string:
  337.  
  338.     ^n    New Line
  339.     ^r    Carriage Return
  340.     ^t    Tab
  341.     ^"    Quote
  342.     ^^    Caret
  343.     ^     At end of line: continue string on next line
  344.     ^xNN  Embed any ASCII code NN (hexadecimal 00-FF)
  345.  
  346. Boolean
  347. -------
  348.  
  349. Boolean literals may be written in two forms:
  350.  
  351.     TRUE, FALSE
  352.     ON, OFF
  353.  
  354. With TRUE being equivalent to ON and FALSE being equivalent to OFF. The two
  355. forms may be used interchangeably.
  356.  
  357. Parenthesis, Separators and Terminators
  358. ---------------------------------------
  359.  
  360.     Parentheses   ( )   used to enclose command an function parameter lists.
  361.                         They are also used in expressions for grouping.
  362.     Brackets      [ ]   used to enclose index values of an array variable.
  363.     Commas        ,     used to separate parameters in a parameter list.
  364.     Semicolons    ;     used to terminate commands.
  365.     Colons        :     used with certain keywords and with labels.
  366.  
  367. Operators
  368. ---------
  369.  
  370. For the use in integer arithmetic expressions, the ScalaScript language
  371. recognizes the following operators:
  372.  
  373.     *    multiplication
  374.     **   Power
  375.     +    addition
  376.     -    subtraction or negation
  377.     /    division
  378.     =    assignment
  379.     MOD  Modulus
  380.  
  381. Boolean operators are:
  382.  
  383.     <    less-than
  384.     <=   less-than or equal-to
  385.     <>   not equal-to
  386.     =    equality
  387.     >    greater-than
  388.     >=   greater-than or equal-to
  389.     AND  logical and
  390.     NOT  logical not
  391.     OR   logical or
  392.  
  393. String operators are:
  394.  
  395.     +    Concatenation
  396.     =    Assignment
  397.  
  398. Expressions
  399. -----------
  400.  
  401. Primitives
  402. ----------
  403.  
  404. The ScalaScript language itself recognizes a few keywords - or primitives:
  405.  
  406.     {              Block introducer, equivalent to EVENT.
  407.     }              Block terminator, equivalent to END.
  408.     Boolean        Declare one or more Boolean variables.
  409.     Chain          Load and execute a script file. Never return.
  410.     Else           Conditional execution of the current Block if the
  411.                    preceding IF/ELSEIF returned FALSE.
  412.     ElseIf         Conditional execution of the current Block if the
  413.                    preceding IF/ELSEIF returned FALSE and condition evaluates
  414.                    to TRUE.
  415.     End            Block terminator, equivalent to }.
  416.     Event          Block introducer, equivalent to {.
  417.     EX             Open a specified EX.
  418.     Exit           Exit one or more Blocks.
  419.     GoTo           Goto a specified event by name. Pushes a return address
  420.                    (for the RETURN command) if Bookmark(TRUE) is specified
  421.                    as an option.
  422.     Group:         Place events that follow into the Group list of the
  423.                    current Block.
  424.     If             Conditional execution of the current Block if the
  425.                    condition evaluates to TRUE.
  426.     Integer        Declare one or more integer variables.
  427.     Jump           Jump a number of events forward or backward.
  428.     OnNotification Perform an action when a variable changes.
  429.     Quit           Exit a script and return to the caller (from
  430.                    Script command.)
  431.     Resources:     Place events that follow into the Resources list of the
  432.                    current Block.
  433.     Return         Return to the event following the last executed goto that
  434.                    pushed a bookmark. Only returns to GOTOs that set
  435.                    Bookmark(TRUE).
  436.     Script         Load and execute a script file. Continue in this file after
  437.                    loaded file exits.
  438.     Sequence:      Place events that follow into the Sequence list of the
  439.                    current Block.
  440.     String         Declare one or more string variables.
  441.     Until          Repetitive execution of the current Block until the
  442.                    condition becomes TRUE.
  443.     Use            Execute a named Block "in place".
  444.     While          Repetitive execution of the current Block while the
  445.                    condition is TRUE.
  446.  
  447. Keyed Values
  448. ------------
  449.  
  450. MMOS uses the concept of keyed lists to create self-identifying data which is
  451. often used in parameter lists (see the MMOS document for more information on
  452. keyed lists). Not surprisingly, the same concept can be used directly in the
  453. ScalaScript language. The advantages of using keyed values as ScalaScript
  454. command parameter are the same as when programming in C under MMOS:
  455.  
  456. Command parameters can be optional. The caller specifies only the parameters he
  457. is interested in and lets the command use default values for the rest.
  458.  
  459. The script becomes more readable, as each keyed value is preceded by a
  460. explanatory "key."
  461.  
  462. Using keyed values ensures script compatibility between different software
  463. versions. New optional parameters can be added with keys, without changing the
  464. command syntax.
  465.  
  466. The ScalaScript language primitives do not use keyed values, because they have
  467. very few, required parameters. Keyed values are more useful for certain EX
  468. commands. For example, consider a command to control sound. In its simplest
  469. form, it would just have one parameter; the name of the file to play.
  470. Additionally, one might add parameters to set the sound's volume, panning,
  471. pitch, fade-in time, fade-out time and so on. Using keyed values, the command
  472. could look like this:
  473.  
  474.     SOUND(":C/MIDI/TOCCATA.MID");
  475.  
  476. or, like this:
  477.  
  478.     SOUND(":C/MIDI/TOCCATA.MID",Volume(24),Pan(-5),FadeOut(10));
  479.  
  480. In these examples, the first parameter - the file name - is fixed. Following is
  481. a keyed list of parameters, which may be empty or contain any number of keyed
  482. values. Now, if a future version of the Sound EX adds a new option to control,
  483. say, a real-time digital reverb effect, it would just add a new key:
  484.  
  485.     SOUND(":C/MIDI/TOCCATA.MID",Reverb(10));
  486.  
  487. The new EX would play old scripts without special handling. The old Sound EX
  488. would even be able to play a script created with the new EX. If the Sound EX was
  489. programmed to ignore unknown keys, it would just skip the Reverb() key and
  490. happily play the file without reverb.
  491.  
  492. It is possible to have more than one value per key, for example:
  493.  
  494.     BRUSH(120,400,":C/GRAPHICS/LOGO.BMP",Resize(48,54));
  495.  
  496. It is even possible to have keys that contain other keys:
  497.  
  498.     BRUSH(120,400,"LOGO.BMP",bevel(on,size(4)));
  499.  
  500. The ScriptParser class offers methods that ease the parsing of keyed lists.
  501.  
  502. Event Names
  503. -----------
  504.  
  505. There are occasions when references to specific events are needed. For example:
  506.  
  507.     Branch events (GOTO, EXIT, JUMP, USE)
  508.     Expressions with variables.
  509.     Named styles.
  510.  
  511. It has already been shown how to name an event with the ":name" construct:
  512.  
  513.     :foo event                // a Block with the name "foo"
  514.     Group:
  515.         integer(my_var);      // a variable object with the name "my_var"
  516.     Sequence:
  517.         :bar text("hello");   // an event with the name "bar"
  518.     end
  519.  
  520. All atoms may have names, some of them require names. For instance, variable are
  521. not useful unless they are named.
  522.  
  523. Note that certain commands accept an event name through a notation different
  524. than the ":name" construct described above. Variables, for instance, take their
  525. name as a parameter to the declaration of the variable. This is usually only
  526. done when the name is required, as it is for a variable.
  527.  
  528. Name Collisions
  529. ---------------
  530.  
  531. It is possible for event names to collide under certain circumstances as they
  532. are used for more than one purpose in scripting. Event names are currently used
  533. for three reasons:
  534.  
  535. Labels         - Used as targets for branching.
  536. Variable Names - Allow variables to be referenced as parameters or in expressions.
  537. Style Names    - Allow defined styles to be created for text and other elements.
  538.  
  539. When writing or authoring scripts, one must bear in mind that all of these names
  540. use the same name space. Specifically, the use of a name in one area (as a
  541. variable name, for instance), may interfere with the use of that same name in
  542. another area (as a label, for instance). The best policy is to keep all names
  543. within a script unique.
  544.  
  545. Attaching Names to Events
  546. -------------------------
  547.  
  548. When the script exists in memory as an object hierarchy, labels are maintained
  549. as part of the event that they name. The question is, how are these names
  550. represented in the ScalaScript language? There are three cases to consider here:
  551. Labels, variables and styles.
  552.  
  553. Labels, as previously mentioned, are described using a leading colon. In
  554. ScalaScript, the label precedes the event to be named:
  555.  
  556.     :TestLabel
  557.     EVENT        // this event (a Block) will take the name "TestLabel"
  558.     END
  559.  
  560. Names defined this way should not be used before variable definitions or style
  561. definitions.
  562.  
  563. Variables contain the label name internal to the definition. For instance, the
  564. definition:
  565.  
  566.     INTEGER(my_var);
  567.  
  568. can be thought of as creating a labeled integer variable:
  569.  
  570.     :my_var INTEGER_VARIABLE(); // for example only, can't really do this.
  571.  
  572. That is, the variable definition creates a variable instance with the given
  573. name. Having a single variable definition statement that declares multiple
  574. variables (INTEGER(x,y,z);) is equivalent to having multiple labels with
  575. multiple variable entities. This explains why variable names and labels can
  576. collide, they are really using the same internal mechanism for their
  577. implementation.
  578.  
  579. Styles, such as those implemented by the elements in the Screen book, are
  580. implemented in a similar way to variables. The label name is given internally to
  581. the definition:
  582.  
  583.     TextStyle(my_style, font("helvetica 20"), face(on, pen(7)));
  584.  
  585. defines a text style with a specific set of attributes (font and color). This is
  586. equivalent to the statement:
  587.  
  588.     // not real, for example only.
  589.     :my_style TextStyle(font("helvetica 20"), face(on, pen(7)));
  590.  
  591. except in the actual implementation, with the name given in the command, the
  592. event name is required. That is, by placing the event name inside of a command
  593. implemented by an EX, that name becomes required. This means that when a style
  594. is defined it must have a name.
  595.  
  596. Scope
  597. -----
  598.  
  599. The scope of an event - whether it is a Block, a variable or an atom -
  600. determines the part of the script where the event name is visible. A reference
  601. to an event may only be made within its scope. Scope of a name is determined by
  602. the following rule:
  603.  
  604. Part 1: An event name's scope consists of all events within the Block in which
  605. the name is defined, including sub-events that are nested within that Block.
  606.  
  607. Part 2: If a reference is made to an event name that has multiple definitions
  608. that all meet Part 1 of this rule, the name whose parent Block is "closest" to
  609. the reference will be used. Here "closest" means "shortest path".
  610.  
  611. A few examples to clarify this rule:
  612.  
  613.     :Chapter1 EVENT
  614.       Sequence:
  615.         :Page1.1 EVENT
  616.             :
  617.         END
  618.             :
  619.     END
  620.  
  621.     :Chapter2 EVENT
  622.       Sequence:
  623.         :Page2.1 EVENT
  624.             :
  625.         END
  626.  
  627.         EVENT(Page2.5)
  628.             GOTO(Page2.1);     // Goto number 1
  629.             GOTO(Chapter2);    // Goto number 2
  630.             GOTO(Chapter1);    // Goto number 3
  631.             GOTO(Page1.1);     // Goto number 4
  632.         END
  633.     END
  634.  
  635. The four alternative GOTOs labeled 1-4 are branch events with references to
  636. other events:
  637.  
  638. The GOTO(Page2.1) branch is within the scope of Page2.1 as Page2.1 is defined
  639. within the Block that contains the GOTO event.
  640.  
  641. The GOTO(Chapter2) branch is within the scope of Chapter2 as Chapter2 is defined
  642. within the root Block, which contains all events in the script.
  643.  
  644. The GOTO(Chapter1) branch is within the scope of Chapter1 for the same reason as 2.
  645.  
  646. The GOTO(Page1.1) branch is not within the scope of Page1.1 and is therefore
  647. illegal. This is because Page1.1's parent is Chapter1, which is not an ancestor
  648. of the GOTO event.
  649.  
  650. Now an example that demonstrates the rule's second part:
  651.  
  652.     :Chapter1 EVENT
  653.       Sequence:
  654.         :TitlePage EVENT       // Note {1}.
  655.             :
  656.         END
  657.             :
  658.     END
  659.  
  660.     :Chapter2 EVENT
  661.       Sequence:
  662.         :TitlePage EVENT       // Note {2}.
  663.             :
  664.         END
  665.         :Section2.1 EVENT
  666.           Sequence:
  667.             :TitlePage EVENT   // Note {3}.
  668.                 :
  669.             END
  670.                 :
  671.             GOTO(TitlePage);
  672.         END
  673.     END
  674.  
  675. Here, there are three events named TitlePage. The first part of the scope rule
  676. eliminates {1} as it is not contained within the Block in which the name is
  677. defined. The second two are both pass part one of the rule, so the Player must
  678. choose between them. It uses the second part of the rule to resolve any
  679. conflicts. The path from the GOTO to {3}'s parent is shorter than the path to
  680. {2}'s parent, therefore, the GOTO is within {3}'s scope.
  681.  
  682. Binding
  683. -------
  684.  
  685. There are two possible methods of finding an event name in a script given a
  686. reference to that name:
  687.  
  688. Static binding - or reference by connector - means that the binding is done when
  689. the script is loaded. The reference is established by a Connector such that
  690. there is no need to search for a named event during playback. The connection
  691. does not change during the entire playback of the script.
  692.  
  693. Dynamic binding - or reference by name - means that the binding is done during
  694. playback of the script. Every time the event is needed, the player must search
  695. the script for an event with the given name. There are actually other types of
  696. dynamic binding, an event can be referenced by relative position in the Sequence
  697. (JUMP) or by exiting a certain number of Blocks (EXIT).
  698.  
  699. Static binding is fast compared with dynamic binding. There is no searching for
  700. the target event or computing the location of the name at run time. However, the
  701. referenced event will always remain the same regardless of the execution of the
  702. script.
  703.  
  704. Dynamic binding is more flexible, but is slower and often not necessary. Dynamic
  705. binding only matters where a single name reference may be accessed from more
  706. than one place in the script. For instance, suppose a string is created that
  707. references a variable:
  708.  
  709.     event
  710.     Group:
  711.         Integer(x);   x   = 3;
  712.         String(str);  str = "x is !x";
  713.     ...
  714.  
  715. And then, within that script there are two different uses of that string:
  716.  
  717.     ...
  718.         EVENT
  719.         Group:
  720.             integer(x);
  721.         Sequence:
  722.             x=100;
  723.             TEXT(10,20,str);
  724.         end
  725.     ...
  726.         EVENT
  727.         Group:
  728.             integer(x);
  729.         Sequence:
  730.             x=9123;
  731.             TEXT(10,20,str);
  732.         end
  733.     ...
  734.  
  735. If the string uses static binding internally, then it will bind the value of x
  736. to 3 when the script is parsed. When the script is run, it will print "x is 3"
  737. twice. If the string uses dynamic binding internally, then each use of the
  738. string (once in each of the TEXT commands) will bind when they are run. This
  739. means that the script will print "x is 100" and "x is 9123".
  740.  
  741. In ScalaScript, the GOTO and USE commands use static binding, as do variables
  742. used in expressions. The JUMP and EXIT commands use dynamic binding, as does
  743. variable substitution in strings ("!-expressions").
  744.  
  745. Note that where a resource is called from does not change the binding of names
  746. in that resource. This is best shown through examples:
  747.  
  748.     event
  749.     Group:
  750.         integer(x);
  751.         x = 100;
  752.     Sequence:
  753.         use(foo);
  754.         event
  755.         Group:
  756.             integer(x);
  757.             x=123;
  758.         Sequence:
  759.             use(foo);
  760.         end
  761.     Resources:
  762.         :foo text("x is !x");
  763.     end
  764.  
  765. This script will print "x is 100" twice. The resolution of the name "x" does not
  766. happen from where the resource is used, it happens from where the resource is
  767. defined in the script. Therefore, the name "x" referenced in the Resources list
  768. will be found at the outer level regardless of whether static or dynamic binding
  769. is used.
  770.  
  771. Or, look at this script:
  772.  
  773.     event
  774.     Sequence:
  775.         event
  776.         Sequence:
  777.             use(foo);
  778.         Resources:
  779.             :bar text("inner level");
  780.         end
  781.     Resources:
  782.         :foo goto(bar);
  783.         :bar text("outter level");
  784.     end
  785.  
  786. This script will print "inner level". Again, this is because the GOTO is
  787. resolved from its actual location in the script and not where it is used. This
  788. has nothing to do with static vs. dynamic binding, but is determined solely by
  789. the way resources are handled.
  790.  
  791. Constructing Scripts
  792. --------------------
  793.  
  794. A script consists of a series of "events" or statements. A statement might look
  795. like the following:
  796.  
  797.     Display(style(display1));
  798.     Text ( 10, 10, "Hello, world!" );
  799.     While(x = 1);
  800.     OFFSET( -32, 0 );
  801.     Integer(temptime,timeofday,timeoffset[20]);
  802.     temptime = timeofday + timeoffset[12];
  803.     else();
  804.  
  805. Where the semicolon terminates each statement.
  806.  
  807. Parameters to commands are enclosed in parenthesis and multiple parameters are
  808. separated by commas. Parameters may include named options such as this TEXT
  809. command which has a Style() and an Outline() option:
  810.  
  811.     Text(0, 0, "Outline", Style(t2), Outline(on, Thickness(2), Fill(Pen(1))));
  812.  
  813. Note that options may be embedded within options as in Outline(). This may go
  814. arbitrarily deep. For instance, the Text() command shown has an Outline() option
  815. which has a Fill() option which has a Pen() option.
  816.  
  817. In addition to commands, scripts may use variables, array variables and
  818. functions. Most variables and arrays must be declared, although there are
  819. built-in variables (often added by EX modules) that are available without
  820. declaration. Variables and functions are often used in expressions:
  821.  
  822.     foo = temp[100] + random(1,10);
  823.  
  824. Variables that are created within the script must be declared before use:
  825.  
  826.     Integer(temp[200]);
  827.  
  828. Expressions may be used in place of command/function arguments, and that they
  829. also may be used in strings:
  830.  
  831.     // substitute the variables x and y in the string, plus use an expression.
  832.     string_var = "X value is !x, Y value is !y, product is !(x * y)";
  833.     Text(x+3,y-100,string_var);
  834.  
  835. The substitution of variables in strings is automatic, but the handling of
  836. expressions in EX command arguments must be explicitly handled by the EX.
  837.  
  838. Any command may be labeled, which binds a name with an event. A label consists
  839. of an identifier preceded by a colon. The event following the label takes the
  840. name of the label:
  841.  
  842.     :one echo("hello^n");
  843.     :two
  844.     a = a + 1;
  845.  
  846. White space does not matter. In the first statement the echo() is given the name
  847. "one" and in the second statement the assignment is given the name "two".
  848.  
  849. Labels are primarily used for execution control, that is, the script may GOTO an
  850. event with a name rather than calculating the offset of the target event. This
  851. makes the target event position independent.
  852.  
  853. A number of events may be grouped into blocks using the EVENT...END construct. A
  854. block of statements may be used anywhere a normal statement is allowed.
  855.  
  856.     event
  857.         echo("hello^n");
  858.         Text(5,235,"Practice makes perfect.");
  859.     end
  860.     :page1 event
  861.         /* stuff */
  862.     end
  863.  
  864. Note that for the 'page1' label, the label applies to the block, not to one of
  865. the events in the block.
  866.  
  867. Blocks
  868. --------
  869.  
  870. Blocks of statements created with the EVENT...END construct are known as
  871. Blocks. A script consists of a single Block contained in a file. Thus, a
  872. script might be:
  873.  
  874.     Event
  875.         /* commands and stuff here. */
  876.     End
  877.  
  878. Note that on the PC, all scripts must begin with the text "!ScalaScript", so the
  879. minimal script would be:
  880.  
  881.     !ScalaScript
  882.     // This is the minimal ScalaScript script.  Note that nothing is allowed
  883.     // to appear before the !ScalaScript introducer (no comments, blank lines,
  884.     // etc.  This script doesn't do anything.
  885.     EVENT
  886.     END
  887.  
  888. Blocks are divided into three sections: The Group list, the Sequence list and
  889. the Resources list. By default, commands go into the Sequence. To place commands
  890. into other sections, that section must be explicitly named. The sections are
  891. named as follows:
  892.  
  893.     :my_Block EVENT
  894.     Group:
  895.         /* Group stuff here */
  896.     Sequence:
  897.         /* Sequence stuff here */
  898.     Resources:
  899.         /* Resources stuff here */
  900.     END
  901.  
  902. The sections may appear in any order, but are executed in a very well-defined
  903. sequence. The Group is executed first, and all events in the Group are executed
  904. in parallel.
  905.  
  906. The Group also gives scope to events. Specifically, events in the Group remain
  907. active until the Block is exited. This means that items created in the Group
  908. are guaranteed to exist throughout the execution of the Block's Sequence list.
  909. For instance, variables declared in the Group list of a Block are available
  910. anywhere within that Block.
  911.  
  912. Generally, Blocks are not placed within the Group list of another Block. If
  913. a Block is placed into the Group of another Block, then only the Group of
  914. the inner Block will be played (the Sequence and Resources lists are ignored).
  915. The Sequence of a Block is executed after the Group, although commands in the
  916. Group have a chance to clean up after the Sequence has finished. Events in the
  917. Sequence are executed sequentially.
  918.  
  919. The Resources list is just like the Sequence list, but its events are never
  920. executed unless explicitly called.
  921.  
  922. Execution Control
  923. -----------------
  924.  
  925. Execution of a Block may be controlled through the IF, ELSEIF, ELSE, WHILE and
  926. UNTIL statements. These statements are put into the Group list of the Block
  927. and they control the execution of the entire Block. For instance, the IF
  928. statement allows a Block to execute only if the condition is true:
  929.  
  930.     EVENT
  931.     Group:
  932.         if (condition);
  933.     Sequence:
  934.         /* stuff to execute if condition is true */
  935.     END
  936.  
  937. Blocks that use if/elseif/else must be contiguous, although white space and
  938. comments between the Blocks does not matter. For instance:
  939.  
  940.     event
  941.     Group:     if (condition);
  942.     Sequence:  // execute if condition is true.
  943.     end
  944.     event
  945.     Group:     elseif (condition);
  946.     Sequence:  // execute if 'if' was false, but elseif is true.
  947.     end
  948.     event
  949.     Group:     else ();
  950.     Sequence:  // execute if 'if' and 'elseif' are false.
  951.     end
  952.  
  953. The WHILE statement repeats the execution of the Block while the condition is
  954. true.
  955.  
  956.     EVENT
  957.     Group:
  958.         while (condition);
  959.     Sequence:
  960.         /* stuff to execute while condition is true */
  961.     END
  962.  
  963. The UNTIL statement repeats the execution of the Block until the condition is
  964. true.
  965.  
  966.     EVENT
  967.     Group:
  968.         until (condition);
  969.     Sequence:
  970.         /* stuff to execute until condition is true */
  971.     END
  972.  
  973. Execution order in a script may be controlled using the GOTO, USE, JUMP, EXIT,
  974. QUIT, RETURN, SCRIPT and CHAIN commands.
  975.  
  976. GOTO is used to transfer control to a named event.
  977.  
  978.     goto(name);
  979.     ...
  980.     :name echo("this is a test^n");
  981.     /* execution continues here */
  982.  
  983. The GOTO command by default does not push a return address for the RETURN
  984. command. However, a return address may be set by using the Bookmark(TRUE)
  985. option. This allows for scripts like this:
  986.  
  987.     GOTO(foo, Bookmark(TRUE));
  988.     ...
  989.     :foo
  990.     // do stuff here.
  991.     return;
  992.  
  993. The USE command executes the named event, then returns when the event completes.
  994. Note that the named event may be a Block, in which case the entire Block
  995. will be executed. Often, the "USEd" event is kept in the Resources list, but
  996. this is not required (it may be in the Sequence list).
  997.  
  998.     use(name)
  999.     /* execution continues here */
  1000.     ...
  1001.     :name echo("this is a test^n");
  1002.  
  1003.     Sequence:
  1004.         use(res)
  1005.         /* execution continues here */
  1006.         ...
  1007.     Resources:
  1008.         :res event
  1009.             /* do everything in this event, then return */
  1010.             echo("this is a test^n");
  1011.         end
  1012.  
  1013. The EXIT command may be used to return from a "USEd" resource before the
  1014. end of that resource:
  1015.  
  1016.         use(res)
  1017.         ...
  1018.     Resources:
  1019.         :res event
  1020.             /* return from the resource before the end. */
  1021.             exit(1);
  1022.             ...
  1023.             echo("this is a test^n");
  1024.         end
  1025.  
  1026. JUMP is used to jump a number of events forward or back.
  1027.  
  1028.     jump(2);
  1029.     jump(-5);
  1030.  
  1031. EXIT is used to exit from the current block. This may cause the currently
  1032. executing script to exit, which would return control to the calling script.
  1033. If the current script is the top-level script, then the player terminates.
  1034. Note that the EXIT command takes a parameter that indicates the number of
  1035. blocks to exit:
  1036.  
  1037.     exit(1);
  1038.     exit(5);
  1039.  
  1040. RETURN is used to return to a previous GOTO that has pushed a return address.
  1041.  
  1042.     return();
  1043.  
  1044. ONNOTIFICATION is used to set-up notification on a specific variable. When
  1045. the variable changes value, a specified action is taken. The notification
  1046. remains in effect until the variable or the ONNOTIFICATION command go out
  1047. of scope.
  1048.  
  1049.     OnNotification(variable, goto(foo));
  1050.     OnNotification(my_var, use(foo));
  1051.  
  1052. SCRIPT is used to load another file and then return when it is done.
  1053.  
  1054.     Script(":scala/scripts/test.scr");
  1055.     /* execution continues here when test.scr is done. */
  1056.  
  1057. QUIT will exit one or more scripts and return to the caller. If a script calls
  1058. another script with the SCRIPT command, and that script calls a third, then the
  1059. third script may return to the first by executing the command QUIT(2);
  1060.  
  1061.     quit(1);
  1062.     quit(5);
  1063.  
  1064. CHAIN is used to load another file and never return.
  1065.  
  1066.     Chain(":scala/scripts/test.scr");
  1067.     /* execution never returns from test.scr. */
  1068.  
  1069. The EX statement is used to load EX modules. This makes commands available to
  1070. the executing script. This statement is often used in the Environment to load EX
  1071. modules for the script.
  1072.  
  1073.     EVENT
  1074.     Group:
  1075.         EX ("button.ex");
  1076.         EX ("example.ex");
  1077.         EX ("console.ex");
  1078.         EX ("debug.ex");
  1079.         EX ("screen.ex");
  1080.         EX ("timing.ex");
  1081.         EX ("touch.ex");
  1082.     END
  1083.  
  1084. Variables
  1085. ---------
  1086.  
  1087. Variables of three types may be declared: BOOLEAN, INTEGER and STRING. Variables
  1088. must be declared before they are used (unless they are built-in). Variables must
  1089. be declared in the Group section of a Block. The scope of the variable is the
  1090. containing Block.
  1091.  
  1092.     EVENT
  1093.     Group:
  1094.         BOOLEAN(bool_1, bool_2, bool_3);
  1095.         INTEGER(int_1, int_2, int_3);
  1096.         STRING(str_1, str_2, str_3);
  1097.     Sequence:
  1098.         /* do stuff here */
  1099.     END
  1100.  
  1101. These three types also allow simple arrays to be declared:
  1102.  
  1103.     BOOLEAN(bool_array[10]);
  1104.     INTEGER(int_arr[10]);
  1105.     STRING(my_str[10]);
  1106.  
  1107. Boolean variables may take on any of the following values: TRUE, FALSE, ON or
  1108. OFF. Note that TRUE and ON are equivalent, as are FALSE and OFF.
  1109.  
  1110.     Group:
  1111.         BOOLEAN(bool_1);
  1112.     Sequence:
  1113.         bool_1 = TRUE;
  1114.  
  1115. Integer variables are 32-bit, signed numbers. Decimal numbers are the default.
  1116. Hex numbers are introduced with the dollar sign ($) and binary numbers are
  1117. introduced with the percent sign (%).
  1118.  
  1119.     Group:
  1120.         INTEGER(int_1);
  1121.     Sequence:
  1122.         int_1 = 1;
  1123.         int_1 = $7F;
  1124.         int_1 = %01011;
  1125.  
  1126. Strings are contained in double-quotes and can contain a number of special
  1127. control characters:
  1128.  
  1129.     Group:
  1130.         STRING(str_1);
  1131.     Sequence:
  1132.         str_1 = "Hello^tThis is a test^n";
  1133.  
  1134. Strings may also contain variables that are expanded for display. The variables
  1135. or expressions are introduced with the bang (!) operator:
  1136.  
  1137.     Text(1,1, "X is !x, Y is !y, array index 10 is !(array[10])");
  1138.  
  1139. Note that parenthesis must enclose the expression if it is anything other than a
  1140. simple variable. These are valid:
  1141.  
  1142.     !my_var
  1143.     !(my_var)
  1144.     !(a + 1)
  1145.     !(my_array[10])
  1146.     !(my_function(a,b,10))
  1147.  
  1148. Format strings allow integer variables to be printed out with formatting. This
  1149. allows for fixed width fields, leading plus or minus signs, and leading or
  1150. trailing zeros. For example:
  1151.  
  1152.     "This is a test !(my_var, ^"###.##^") of a format string"
  1153.  
  1154. This will build a string representation of an integer variable based on
  1155. information in the format string.
  1156.  
  1157. The FORMAT function may also be used to format integer values:
  1158.  
  1159.     str_var = Format("###.##", int_var);
  1160.  
  1161. Format strings may be constructed as follows:
  1162.  
  1163.     "####" will print an integer, 4 digits wide:
  1164.  
  1165.         12345        (too wide, grows freely)
  1166.         1234         (fits fine)
  1167.          234         (shorter number is padded with spaces)
  1168.           34
  1169.            4
  1170.           -4         (negative numbers just pick up a minus sign)
  1171.          -34
  1172.  
  1173.     "0###" will print an integer with leading zeroes:
  1174.  
  1175.         1234         (fits fine)
  1176.         0234         (padded with zeroes)
  1177.         0034
  1178.  
  1179.     "#0##" will fill with leading zeros all but the first digit:
  1180.  
  1181.         1234         (fits fine)
  1182.          234         (leftmost place isn't supposed to be zero-filled)
  1183.          034         (now we get zeroes)
  1184.  
  1185.     "##.##" will print an integer as a fixed-point number based on the fractional
  1186.     digits given:
  1187.  
  1188.         12.34        (integer 1234 prints like this)
  1189.          2.34        (leading zeroes trick would work here if you wanted)
  1190.          2.3         (trailing zeroes dropped, but see below!)
  1191.           .3         (not even one leading zero)
  1192.          0           (special case)
  1193.  
  1194.     "#0.#0" is like the above example, but will always display two full decimal
  1195.     places listed plus the integral zero:
  1196.  
  1197.         12.34
  1198.          2.34
  1199.          2.30        (note the 0 in the hundredth's place)
  1200.          0.30        (never lose that upper zero)
  1201.          0.00        (as zero as we get)
  1202.  
  1203.     "-####" will print a leading minus sign:
  1204.  
  1205.          1234        (no sign printed if positive)
  1206.         -1234
  1207.         -  34        (compare to first example, where minus sign touches the 3)
  1208.  
  1209.     "+####" will print a leading plus:
  1210.  
  1211.         +1234        (even the plus is printed)
  1212.         + 234
  1213.         -1234
  1214.  
  1215.     "####<" will print a left-align number in the field:
  1216.  
  1217.         1234
  1218.         234
  1219.         34
  1220.         4
  1221.  
  1222. Notification
  1223. ------------
  1224.  
  1225. The built-in variable types (and many of the EX variables) support the
  1226. concept of "notification". This is a procedure where a variable can tell
  1227. another object that its value has changed. The object may then update its
  1228. display or internal state based on the new value of the variable.
  1229.  
  1230. For instance, the TEXT command supports notification on variables that
  1231. are referenced within strings using bang-formatting. This means that a
  1232. string may displayed with variable references that will update as the
  1233. values in the variables change. For instance:
  1234.  
  1235.     EVENT
  1236.     group:
  1237.         integer(x);
  1238.     sequence:
  1239.         x = 0;
  1240.         TEXT(10,10,"x is !x");
  1241.         EVENT
  1242.         group:
  1243.             while (x < 100);
  1244.         sequence:
  1245.             pause(1);
  1246.             x = x + 1;
  1247.         END
  1248.     END
  1249.  
  1250. Note here that the variable 'x' follows the group scope, while the text object
  1251. does not! Text objects are a part of the Element class of the Screen book and
  1252. these object follow a different set of scope rules. The Text object will
  1253. remain active until the next Display() command. Note that this script assumes
  1254. that a Display() command has already been executed. See the Element
  1255. documentation for more information.
  1256.  
  1257. So, what does this script do? It displays "x is 0". Then after one second the
  1258. value of X on screen changes to "1", then to "2", and so on. This is because
  1259. the variable is notifying the text object that its value has changed. The
  1260. text object then updates its display to show the new value.
  1261.  
  1262. Other types of objects can implement notification in their own way, it doesn't
  1263. have to involve the updating of the screen. For instance, a Television tuner
  1264. might change the channel when the value of the "channel" variable changes.
  1265.  
  1266. If an action needs to be taken when the value of a variable changes, but either
  1267. the object does not support notification or no object is available, then a
  1268. special command is available that allows actions to be taken on any variable's
  1269. notification. This command is OnNotification. It works as follows:
  1270.  
  1271.     EVENT
  1272.     group:
  1273.         OnNotification(my_var, use(foo));
  1274.     ...
  1275.  
  1276. When this command is in scope (it follows the group scope rules), the action
  1277. will be taken every time the variable changes. Actions include USE and GOTO
  1278. commands.
  1279.  
  1280. Expressions
  1281. -----------
  1282.  
  1283. Arithmetic expressions use parenthesis for grouping.
  1284.  
  1285.     Group:
  1286.         INTEGER(int_1, int_2);
  1287.     Sequence:
  1288.         int_1 = 1 + (3 ** 2);
  1289.         int_2 = $7F MOD int_1 * -3;
  1290.  
  1291. Strings allow for concatenation and assignment.
  1292.  
  1293.     Group:
  1294.         string(str1);
  1295.     Sequence:
  1296.         str1 = "hello" + ", " + "world!";
  1297.  
  1298. Logical expressions use parenthesis for grouping.
  1299.  
  1300.     Group:
  1301.         boolean(bool_1);
  1302.         integer(int_1);
  1303.     Sequence:
  1304.         bool_1 = (1 = 1) and not (3 > 7);
  1305.         int_1 = 7;
  1306.         EVENT
  1307.         Group:
  1308.             While (int_1 >= 0);
  1309.         Sequence:
  1310.             int_1 = int_1 - 1;
  1311.         END
  1312.  
  1313. Standard Functions and Variables
  1314. --------------------------------
  1315.  
  1316. Although functions are usually supplied by EX modules, the Scala Player itself
  1317. also provides a number of useful general-purpose functions and variables.
  1318.  
  1319. Functions
  1320. ---------
  1321.  
  1322.     integer ABS(integer N)
  1323.     string  CHAR(integer C)
  1324.     integer CODE(string S)
  1325.     anytype CONDITIONAL(boolean Expr, any OnTrue, any On False)
  1326.     boolean EVALBOOL(string S)
  1327.     integer EVALINT(string S)
  1328.     string  EVALSTRING(string S)
  1329.     boolean EXISTS(string FileName)
  1330.     string  FORMAT(string FormatStr, integer Value)
  1331.     string  GETENV(string Var)
  1332.     string  LEFT(string S, integer N)
  1333.     integer LENGTH(string S)
  1334.     integer MAX(integer N1, integer N1)
  1335.     integer MIN(integer N1, integer N2)
  1336.     integer RANDOM(integer Min, integer Max)
  1337.     boolean SEED(integer N)
  1338.     integer REVISION(string ModuleName)
  1339.     string  RIGHT(string S, integer N)
  1340.     integer SEARCH(string S, integer P, string T)
  1341.     integer SIGN(integer N)
  1342.     string  SUBSTRING(string S, integer P, integer N)
  1343.     integer VALUE(string S)
  1344.     integer VERSION(string ModuleName)
  1345.  
  1346. Variables
  1347. ---------
  1348.  
  1349.     string  CPU
  1350.     integer MEMORY
  1351.     string  PLATFORM
  1352.  
  1353. Detailed Information on Functions and Variables
  1354. -----------------------------------------------
  1355.  
  1356. Conditional Functions
  1357. ---------------------
  1358.  
  1359. Conditional
  1360.     anytype CONDITIONAL(boolean Expr, anytype OnTrue, anytype On False)
  1361.  
  1362.     This function does not show up in the Branch menu list of functions.
  1363.  
  1364.     The function Conditional(Expr, OnTrue, OnFalse) takes an expression that
  1365.     evaluates to a boolean. If Expr evaluates to TRUE, then OnTrue is returned.
  1366.     If Expr evaluates to FALSE, then OnFalse is returned. This is very useful
  1367.     for things like:
  1368.  
  1369.         page = page + Conditional(line > 20, 1, 0);
  1370.         str = word + Conditional(number > 1, "'s", "");
  1371.  
  1372.     Otherwise doing things like this requires setting up complex conditional
  1373.     pages. It is similar to the C/C++ language construct "?".
  1374.  
  1375.     This function is unusual in that any type of variable may be used.
  1376.     However, the function return, OnTrue and OnFalse must all be of the
  1377.     same type.
  1378.  
  1379. Casting Functions
  1380. -----------------
  1381.  
  1382. Value
  1383.     integer VALUE(string S)
  1384.  
  1385.     Convert S to an integer. Returns 0 if S does not start with a number
  1386.     (leading white space is ignored). Recognizes decimal numbers (default),
  1387.     hexadecimal (prefixed with a '$'), and binary (prefixed with a '%').
  1388.  
  1389. String Functions
  1390. ----------------
  1391.  
  1392. Left
  1393.     string LEFT(string S, integer N)
  1394.  
  1395.     Return the N first characters of S. If Length(S) <= N, return S.
  1396.  
  1397. Right
  1398.     string RIGHT(string S, integer N)
  1399.  
  1400.     Return the N last characters of S. If Length(S) <= N, return S.
  1401.  
  1402. SubString
  1403.     string SUBSTRING(string S, integer P, integer N)
  1404.  
  1405.     Return substring of S, starting at position P, containing N characters.
  1406.     P should be in the range [1...Length(S)]. If N > 1+Length(S)-P, return
  1407.     as many characters as possible. If P > Length(S), return an empty string.
  1408.  
  1409. Length
  1410.     integer LENGTH(string S)
  1411.  
  1412.     Return the number of characters in S.
  1413.  
  1414. Search
  1415.     integer SEARCH(string S, integer P, string T)
  1416.  
  1417.     If T is a substring of S (starting at a position >= P) return the position
  1418.     of the first occurrence of T within S, else return 0.
  1419.  
  1420. Code
  1421.     integer CODE(string S)
  1422.  
  1423.     Return the ANSI Latin-1 code of the first character in the string S.
  1424.     If S is empty, return 0.
  1425.  
  1426. Char
  1427.     string CHAR(integer C)
  1428.  
  1429.     Return a one-character string consisting of the ASCII character defined by
  1430.     the code C.
  1431.  
  1432. Format
  1433.     string  FORMAT(string FormatStr, integer Value)
  1434.  
  1435.     Apply the specified format string to the given value and return the result
  1436.     as a string. For example:
  1437.  
  1438.         my_str = Format("-0####.##0", 123400);
  1439.  
  1440.     Will return the string "-00123.400".
  1441.  
  1442. Math Functions
  1443. --------------
  1444.  
  1445. Min
  1446.     integer MIN(integer N1, integer N2)
  1447.  
  1448.     If N1 > N2 return N2 else return N1.
  1449.  
  1450. Max
  1451.     integer MAX(integer N1, integer N1)
  1452.  
  1453.     If N1 > N2 return N1 else return N2.
  1454.  
  1455. Abs
  1456.     integer ABS(integer N)
  1457.  
  1458.     If N < 0 return -N else return N.
  1459.  
  1460. Sign
  1461.     integer SIGN(integer N)
  1462.  
  1463.     If N < 0 return -1 else if N > 0 return 1 else return 0.
  1464.  
  1465. Random
  1466.     integer RANDOM(integer Min, integer Max)
  1467.  
  1468.     Returns a random number in the range [Min...Max].
  1469.  
  1470. Seed
  1471.     boolean SEED(integer N)
  1472.  
  1473.     Seed the random number generator; N can be any number. The function
  1474.     returns True always.
  1475.  
  1476. Expression Evaluation
  1477. ---------------------
  1478.  
  1479. EvalString
  1480.     string EVALSTRING(string S)
  1481.  
  1482.     Evaluate the string expression contained in the string S and return the
  1483.     result.
  1484.  
  1485. EvalInt
  1486.     integer EVALINT(string S)
  1487.  
  1488.     Evaluate the integer expression contained in the string S and return the
  1489.     result.
  1490.  
  1491. EvalBool
  1492.     boolean EVALBOOL(string S)
  1493.  
  1494.     Evaluate the boolean expression contained in the string S and return the
  1495.     result.
  1496.  
  1497. System Functions
  1498. ----------------
  1499.  
  1500. GetEnv
  1501.     string GETENV(string Var)
  1502.  
  1503.     Return the contents of the OS (not Player) Environment variable Var. If
  1504.     the variable is not defined, or the OS doesn't support Environment
  1505.     variables, return empty string. May not be available on all platforms.
  1506.  
  1507. Exists
  1508.     boolean EXISTS(string FileName)
  1509.  
  1510.     Return TRUE if and only if a file named FileName exists.
  1511.  
  1512. Version and Revision
  1513.     integer VERSION(string ModuleName)
  1514.     integer REVISION(string ModuleName)
  1515.  
  1516.     Return the version/revision number of a module (e.g. "player.book" or
  1517.     "mpeg.ex").
  1518.  
  1519. System Variables
  1520. ----------------
  1521.  
  1522. Platform
  1523.     string PLATFORM
  1524.  
  1525.     Environment variable containing the name of the OS platform, such as
  1526.     "MSDOS", "GIEOS", etc.
  1527.  
  1528. CPU
  1529.     string CPU
  1530.  
  1531.     Environment variable containing the a CPU name, such as: "386", "486",
  1532.     "Pentium", etc.
  1533.  
  1534. Memory
  1535.     integer MEMORY
  1536.  
  1537.     Environment variable containing the total amount (not necessarily free)
  1538.     of RAM in bytes.
  1539.  
  1540. -------------------------------------------------------------------------------
  1541.  
  1542. 2.  Launch EX Script Commands and Variables
  1543. ===========================================
  1544.  
  1545. The Launch EX provides a single command that is used to start other programs
  1546. outside of the Scala application.
  1547.  
  1548.     Launch (command_line, Minimized(state), Wait(state));
  1549.  
  1550. -------------------------------------------------------------------------------
  1551.  
  1552. 3.  FileIO EX Script Commands and Variables
  1553. ==========================================
  1554.  
  1555. Overview
  1556. --------
  1557.  
  1558. Function          Description
  1559. --------          -----------
  1560. Open()            Open a file or directory.
  1561. Close()           Close a file or directory.
  1562. ReadStr()         Read a line from an open file and return it as a string.
  1563. ReadInt()         Read a line from an open file, convert it to an integer
  1564.                   and return the integer.
  1565. ReadBool()        Read a line from an open file, convert it to a boolean
  1566.                   (where 1=TRUE and 0=FALSE) and return the boolean.
  1567. ReadChars()       Read a number of characters from an open file and return
  1568.                   it as a string.
  1569. WriteStr()        Write a string to an open file.  The string is written
  1570.                   as a complete line, with CR/LF appended.
  1571. WriteInt()        Write an integer to an open file.  The integer is written
  1572.                   as a complete line, with CR/LF appended.
  1573. WriteBool()       Write a boolean to an open file.  The boolean is written
  1574.                   as a complete line, with CR/LF appended.
  1575. WriteChars()      Write a number of characters to an open file.  Only the
  1576.                   characters are written, with no trailing CR/LF.
  1577. MkDir()           Create a directory.
  1578. FileSize()        Get the size of a file.
  1579. RmDir()           Remove a directory.
  1580. Eof()             Check for end-of-file condition on an open file.
  1581. Erase()           Erase a file.
  1582. Rename()          Rename a file.
  1583. Copy()            Copy a file.
  1584.  
  1585. FileIO variable summary:
  1586.  
  1587. Variable          Description
  1588. --------          -----------
  1589. FileIO.Status     Contains the status returned by the last call to
  1590.                   any of the FileIO functions.
  1591.  
  1592. Open Function
  1593. --------------
  1594.  
  1595. This function will open a file or directory for processing.  It will
  1596. return a filehandle that will be used in the future to reference the
  1597. file until the file is closed.
  1598.  
  1599. Note that all File I/O access is restricted to the "Data" directory
  1600. within the "Scala" directory.  You are not allowed to use full path
  1601. names or drive letters when specifying file names.  All file names
  1602. are expected to be relative to the Data directory.
  1603.  
  1604. Open has three different access modes.  The first mode is READ, when
  1605. the file is opened for READ access only READs may occur.  If a Write
  1606. is attempted and error is the result.
  1607.  
  1608. The second mode is WRITE, which implies READ access as well.  With this
  1609. setting a file can be used for both READING and WRITING.
  1610.  
  1611. The third mode is APPEND, which applies both READ and WRITE Access.  The
  1612. difference with APPEND is that the filepointer is not set to point at
  1613. the end of the file as opposed to the beginning of the file as with all
  1614. of the other modes.
  1615.  
  1616. Syntax:
  1617. -------
  1618.  
  1619. FileHandle = INTEGER Open("filename", READ)
  1620. FileHandle = INTEGER Open("filename", WRITE)
  1621. FileHandle = INTEGER Open("filename", APPEND)
  1622. DirHandle  = INTEGER Open("directory", DIR)
  1623.  
  1624. Returns
  1625. -------
  1626.  
  1627. If successful a positive integer value is returned.  If there is a
  1628. failure a zero will be returned.
  1629.  
  1630. Close Function
  1631. --------------
  1632.  
  1633. The Close function will close the current open file or directory.  The
  1634. user would pass the FileHandle or DirHandle to the close function.
  1635.  
  1636. Syntax
  1637. ------
  1638.  
  1639. status = INTEGER Close(INTEGER FileHandle)
  1640. status = INTEGER Close(INTEGER DirHandle)
  1641.  
  1642. Returns
  1643. -------
  1644.  
  1645. If succesful Close() returns 0.
  1646. This command also sets FileIO.Status.  The variable will
  1647. contain 1 if successful, or 0 zero if not.
  1648.  
  1649. ReadStr Function
  1650. ----------------
  1651.  
  1652. This function will read from the specified filehandle an entire line
  1653. of text from the file.
  1654.  
  1655. Syntax
  1656. ------
  1657.  
  1658. buffer = STRING ReadStr(INTEGER FileHandle)
  1659.  
  1660. Returns
  1661. -------
  1662.  
  1663. Will return either a string or "" if it fails.
  1664. This command also sets FileIO.Status.  The variable will
  1665. contain 1 if successful, or 0 zero if not.
  1666.  
  1667. ReadInt Function
  1668. ----------------
  1669.  
  1670. The ReadInt Function will read from the provided filehandle a single
  1671. integer.
  1672.  
  1673. Syntax
  1674. ------
  1675.  
  1676. value = INTEGER ReadInt(INTEGER FileHandle)
  1677.  
  1678. Returns
  1679. -------
  1680.  
  1681. returns an integer value.
  1682.  
  1683. This command also sets FileIO.Status.  The variable will
  1684. contain 1 if successful, or 0 zero if not.
  1685.  
  1686. ReadBool Function
  1687. ------------------
  1688.  
  1689. Reads a single line of text from a file.  Then the text is converted
  1690. into an integer.  If this succeeds then a 1 is returned otherwise
  1691. a zero is returned.
  1692.  
  1693. Example text.dat file
  1694.  
  1695.     text              result
  1696.     ------------      ------
  1697.     80 some text ---> Returns 1 (because this converts to an 80)
  1698.     1            ---> Returns 1
  1699.     some text 4  ---> Returns 0 (because this does not convert to an integer)
  1700.     0            ---> Returns 0
  1701.  
  1702. Syntax
  1703. ------
  1704.  
  1705. value = BOOLEAN ReadBool(INTEGER FileHandle)
  1706.  
  1707. Returns
  1708. -------
  1709.  
  1710. Returns either a 0 or a 1
  1711.  
  1712. This command also sets FileIO.Status.  The variable will
  1713. contain 1 if successful, or 0 zero if not.
  1714.  
  1715. ReadChars Function
  1716. ------------------
  1717.  
  1718. This function will read the specified number of characters from the
  1719. file.  It should be noted that Scala STRING variables can not contain
  1720. any illegal character data.  NO special characters or binary data
  1721. may be held in this type of variable.
  1722.  
  1723. Syntax
  1724. ------
  1725.  
  1726. buffer = STRING ReadChars(INTEGER FileHandle, INTEGER BytesToRead)
  1727.  
  1728. Returns
  1729. -------
  1730.  
  1731. Returns either a string or NULL.
  1732.  
  1733. This command also sets FileIO.Status.  The variable will
  1734. contain 1 if successful, or 0 zero if not.
  1735.  
  1736. WriteStr Function
  1737. -----------------
  1738.  
  1739. This function will write the specified string into the opened
  1740. text file.  It will add a CR/LF to the end of the line before
  1741. it is written to the file.
  1742.  
  1743. Syntax
  1744. ------
  1745.  
  1746. status = BOOLEAN WriteStr(INTEGER FileHandle, STRING buffer)
  1747.  
  1748. Returns
  1749. -------
  1750.  
  1751. Returns TRUE if succesful, FALSE if failure.
  1752.  
  1753. WriteInt Function
  1754. ------------------
  1755.  
  1756. This function will convert the specified integer into a string
  1757. and write that string to a text file appending a CR/LF sequence
  1758. to the end of the string.
  1759.  
  1760. Syntax
  1761. ------
  1762.  
  1763. status = BOOLEAN WriteInt(INTEGER FileHandle, INTEGER value)
  1764.  
  1765. Returns
  1766. -------
  1767.  
  1768. Returns TRUE if successful, FALSE if failure.
  1769.  
  1770. WriteBool Function
  1771. ------------------
  1772.  
  1773. This function will convert the specified boolean value into a
  1774. string (either a "1" or a "0") and append a CR/LF to the string
  1775. and write the string to the file specified.
  1776.  
  1777. Syntax
  1778. ------
  1779.  
  1780. status = BOOLEAN WriteBool(INTEGER FileHandle, BOOLEAN value)
  1781.  
  1782. Returns
  1783. -------
  1784.  
  1785. Returns TRUE if successful, FALSE if failure.
  1786.  
  1787. WriteChars Function
  1788. -------------------
  1789.  
  1790. Writes the specified number of bytes from the variable specified to
  1791. a file.  It will NOT add a CR/LF sequence to the end of the string
  1792. prior to writing to the file.
  1793.  
  1794. Syntax
  1795. ------
  1796.  
  1797. bytes = INTEGER WriteChars(INTEGER FileHandle, STRING buffer,
  1798.                 INTEGER BytesToWrite)
  1799.  
  1800. Returns
  1801. -------
  1802.  
  1803. Number of bytes written.
  1804.  
  1805. This command also sets FileIO.Status.  The variable will
  1806. contain 1 if successful, or 0 zero if not.
  1807.  
  1808. MkDir Function
  1809. --------------
  1810.  
  1811. Creates the specified directory.  The function will accept any valid
  1812. Scala filename.
  1813.  
  1814. Syntax
  1815. ------
  1816.  
  1817. status = BOOLEAN MkDir("filename")
  1818.  
  1819. Returns
  1820. -------
  1821.  
  1822. Returns TRUE if successful, FALSE if failure.
  1823.  
  1824. FileSize Function
  1825. -----------------
  1826.  
  1827. Returns the number of bytes a specified file uses on a disk.
  1828.  
  1829. Syntax
  1830. ------
  1831.  
  1832. bytes = INTEGER FileSize("filename")
  1833.  
  1834. Returns
  1835. -------
  1836.  
  1837. Byte count.
  1838.  
  1839. This command also sets FileIO.Status.  The variable will
  1840. contain 1 if successful, or 0 zero if not.
  1841.  
  1842. RmDir Function
  1843. ---------------
  1844.  
  1845. Deletes the directory specified.  In order for this function to be
  1846. successful the directory must be empty first.
  1847.  
  1848. Syntax
  1849. ------
  1850.  
  1851. status = BOOLEAN RmDir("filename")
  1852.  
  1853. Returns
  1854. -------
  1855.  
  1856. TRUE successful, FALSE if failure
  1857.  
  1858. Eof Function
  1859. -------------
  1860.  
  1861. This function will return a 1 if you have read all of the data contained
  1862. in the file.  It will return a zero otherwise.
  1863.  
  1864. Syntax
  1865. ------
  1866.  
  1867. status = BOOLEAN Eof(INTEGER FileHandle)
  1868.  
  1869. Returns
  1870. -------
  1871.  
  1872. TRUE if End of File
  1873. FALSE if not at end of file
  1874.  
  1875. This command also sets FileIO.Status.  The variable will
  1876. contain 1 if successful, or 0 zero if not.
  1877.  
  1878. Erase function
  1879. --------------
  1880.  
  1881. This function will delete a file.
  1882.  
  1883. Syntax
  1884. ------
  1885.  
  1886. status = BOOLEAN Erase("filename")
  1887.  
  1888. Returns
  1889. -------
  1890.  
  1891. TRUE if successful, FALSE if failure
  1892.  
  1893. Rename Function
  1894. ---------------
  1895.  
  1896. Renames the source file to the specified destination file.
  1897.  
  1898. Syntax
  1899. ------
  1900.  
  1901. status = BOOLEAN Rename("filename1", "filename2")
  1902.  
  1903. Returns
  1904. -------
  1905.  
  1906. TRUE if successful, FALSE if failure
  1907.  
  1908. Copy Function
  1909. --------------
  1910.  
  1911. Copies the source file to the specified destrination file.
  1912.  
  1913. Syntax
  1914. ------
  1915.  
  1916. status = BOOLEAN Copy("filename1", "filename2")
  1917.  
  1918. Returns
  1919. -------
  1920.  
  1921. TRUE if successful, FALSE if failure
  1922.  
  1923. -------------------------------------------------------------------------------
  1924.  
  1925. 4.  Sound EX Script Commands and Variables
  1926. ==========================================
  1927.  
  1928. The Sound EX supports pre-seek/buffering/loading and sound spooling from disk.
  1929. This EX provides a set of commands, functions and variables for controlling and
  1930. configuring sound from in Scala Scripts.
  1931.  
  1932. The Sound EX supports playback of Audio CD's on a CD-ROM drive, Wave files
  1933. (.WAV 8/16-bit mono or stereo digital audio files, also ADPCM), IFF 8SVX files
  1934. (8-bit mono uncompressed digital audio files) and General MIDI files (.MID
  1935. files, only type 0 and 1 are supported).
  1936.  
  1937. MIDI playback is done entirely by the Sound EX.
  1938.  
  1939. Sound EX Commands
  1940.  
  1941. Below is a list of all Scala Script commands provided by the Sound EX.
  1942. Parameters within brackets are optional.
  1943.  
  1944. Overview
  1945.  
  1946. CD Commands
  1947.  
  1948.     CD.Eject([FADE(secs)] [,UNIT(unit)])
  1949.     CD.Pan(Panning [,UNIT(unit)])
  1950.     CD.Pause([FADE(secs)] [,UNIT(unit)])
  1951.     CD.Play(InTrack, OutTrack [,WAIT(bool)] [,LOOPS(loops)]
  1952.             [,PAN(panval)] [,FADE(vol,secs)] [,UNIT(unit)])
  1953.     CD.PlayMSF(InMSF, OutMSF [,WAIT(bool)] [,LOOPS(loops)]
  1954.             [,PAN(panval)] [,FADE(vol,secs)] [,UNIT(unit)])
  1955.     CD.ReadToc([UNIT(unit)])
  1956.     CD.Resume([FADE(vol,secs)] [,WAIT(bool)] [,UNIT(unit)])
  1957.     CD.Stop([FADE(secs)] [,UNIT(unit)])
  1958.     CD.Sync(SyncMSF [,TRACK(bool)] [,UNIT(unit)])
  1959.     CD.Volume(FadeTo, FadeTime [,WAIT(bool)] [,UNIT(unit)])
  1960.     CD.Wait([UNIT(unit)])
  1961.  
  1962. Midi Commands
  1963.  
  1964.     Midi.Pan(Panning)
  1965.     Midi.Pause([FADE(secs)])
  1966.     Midi.Play(FileName [,RATE(rate)] [,WAIT(bool)] [,LOOPS(loops)]
  1967.             [,PAN(panval)] [,FADE(vol,secs)])
  1968.     Midi.Resume([FADE(vol,secs)] [,WAIT(bool)])
  1969.     Midi.Stop([FADE(secs)])
  1970.     Midi.Volume(FadeTo, FadeTime [,WAIT(bool)])
  1971.     Midi.Wait()
  1972.  
  1973. Mixer Commands
  1974.  
  1975.     Mixer.Pan([MASTER(MasterPan)] [,VOICE(VoicePan)] [,FM(FMPan)]
  1976.             [,CD(CDPan)] [,LINEIN(LineInPan)])
  1977.     Mixer.Volume(FadeTime [,MASTER(MasterVol)] [,VOICE(VoiceVol)] [,FM(FMVol)]
  1978.             [,CD(CDVol)] [,LINEIN(LineInVol)] [,MICIN(MicInVol)])
  1979.  
  1980. Sample Commands
  1981.  
  1982.     Sample.Pan(Panning)
  1983.     Sample.Play(FileName [,RATE(rate)] [,SIGNED(bool)] [,WAIT(bool)]
  1984.             [,LOOPS(loops)] [,PAN(panval)] [,FADE(vol,secs)])
  1985.     Sample.Stop([FADE(secs)])
  1986.     Sample.Volume(FadeTo, FadeTime [,WAIT(bool)])
  1987.     Sample.Wait()
  1988.  
  1989. Details
  1990.  
  1991. CD.PLAY
  1992.     InTrack             integer  Play from track number 'InTrack'
  1993.     OutTrack            integer  Play until track number 'OutTrack'
  1994.     [WAIT(bool)]        boolean  Wait for playback to complete before
  1995.                                  continuing?
  1996.     [LOOPS(loops)]      integer  Play the sequence/track 'loops' number of
  1997.                                  times
  1998.     [PAN(panval)]       integer  Set panning value to 'panval'
  1999.                                  (range -255 to 255)
  2000.     [FADE(vol,secs)]    integer  Fade from zero to 'vol' volume
  2001.                         integer  Fade in 'secs' seconds
  2002.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2003.  
  2004.  
  2005. CD.PLAYMSF
  2006.     InMSF               string   Play from 'InMSF'
  2007.                                  format "MM:SS.FF" (mins/secs/frames)
  2008.     OutMSF              string   Play until 'OutMSF'
  2009.                                  format "MM:SS.FF" (mins/secs/frames)
  2010.     [WAIT(bool)]        boolean  Wait for playback to complete before
  2011.                                  continuing?
  2012.     [LOOPS(loops)]      integer  Play the sequence/track 'loops'
  2013.                                  number of times
  2014.     [PAN(panval)]       integer  Set panning value to 'panval'
  2015.                                  (range -255 to 255)
  2016.     [FADE(vol,secs)]    integer  Fade from zero to 'vol' volume
  2017.                         integer  Fade in 'secs' seconds
  2018.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2019.  
  2020.  
  2021. CD.SYNC
  2022.     SyncMSF             string   Halt script until 'SyncMSF' is reached
  2023.                                  format "MM:SS.FF"
  2024.     [TRACK(bool)]       boolean  Set to 'TRUE' if relative to start of track
  2025.                                  rather than start of disk.
  2026.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2027.  
  2028.  
  2029. CD.WAIT - Wait for playback to complete before continuing.
  2030.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2031.  
  2032.  
  2033. CD.STOP - Stop playback (playback can not be resumed)
  2034.     [FADE(secs)]        integer  Fade down to zero during 'secs' secs
  2035.                                  before stopping
  2036.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2037.  
  2038.  
  2039. CD.PAUSE - Pause playback (playback can be resumed if playing)
  2040.     [FADE(secs)]        integer  Fade down to zero during 'secs' secs
  2041.                                  before stopping
  2042.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2043.  
  2044.  
  2045. CD.RESUME - Resume playback (if stopped during playback)
  2046.     [FADE(vol,secs)]    integer  Fade upto 'vol' volume
  2047.                         integer  Fade in 'secs' seconds
  2048.     [WAIT(bool)]        boolean  Wait for fade to complete before continuing?
  2049.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2050.  
  2051.  
  2052. CD.EJECT - Eject the CD (not supported by all drives)
  2053.     [FADE(secs)]        integer  Fade down to zero during 'secs' secs
  2054.                                  before ejecting
  2055.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2056.  
  2057.  
  2058. CD.READTOC - Rereads the table of contents if the user has inserted a CD
  2059.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2060.  
  2061.  
  2062. CD.VOLUME
  2063.     FadeTo              integer  Set the new volume to 'FadeTo'
  2064.                                  (range 0 to 255)
  2065.     FadeTime            integer  The fade should take 'FadeTime' secs
  2066.                                  (0 if no fade)
  2067.     [WAIT(bool)]        boolean  Wait for fade to complete before continuing?
  2068.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2069. SEE ALSO: CD.HWVOL
  2070.  
  2071.  
  2072. CD.PAN
  2073.     Panning             integer  Set the new panning to 'Panning'
  2074.                                  (range -255 to 255)
  2075.     [UNIT(unit)]        integer  Command is related to CD-ROM unit 'unit'
  2076. SEE ALSO: CD.HWVOL
  2077.  
  2078.  
  2079. SAMPLE.PLAY
  2080.     FileName            string   Play the sample indicated by 'FileName'
  2081.     [RATE(rate)]        integer  Override the default rate, set to 'Rate' Hz
  2082.     [SIGNED(bool)]      boolean  Override the default sign
  2083.                                  (file contains signed data?)
  2084.     [WAIT(bool)]        boolean  Wait for playback to complete
  2085.                                  before continuing?
  2086.     [LOOPS(loops)]      integer  Play the sample 'loops' number of times
  2087.     [PAN(panval)]       integer  Set panning value to 'panval'
  2088.                                  (range -255 to 255)
  2089.     [FADE(vol,secs)]    integer  Fade from zero to 'vol' volume
  2090.                         integer  Fade in 'secs' seconds
  2091.  
  2092.  
  2093. SAMPLE.WAIT - Wait for playback to complete before continuing
  2094.  
  2095.  
  2096. SAMPLE.STOP - Stop playback (playback can be resumed if playing)
  2097.     [FADE(secs)]        integer  Fade down to zero during 'secs'
  2098.                                  seconds before stopping
  2099.  
  2100.  
  2101. SAMPLE.VOLUME
  2102.     FadeTo              integer  Set the new volume to 'FadeTo'
  2103.                                  (range 0 to 255)
  2104.     FadeTime            integer  The fade should take 'FadeTime' secs
  2105.                                  (0 if no fade)
  2106.     [WAIT(bool)]        boolean  Wait for fade to complete before continuing?
  2107.  
  2108.  
  2109. SAMPLE.PAN
  2110.     Panning             integer  Set the new panning to 'Panning'
  2111.                                  (range -255 to 255)
  2112.  
  2113.  
  2114. MIXER.VOLUME
  2115.     FadeTime            integer  The fade should take 'FadeTime' secs
  2116.                                  (0 if no fade)
  2117.     [MASTER(MasterVol)] integer  The new Master volume (range 0 to 255)
  2118.     [VOICE(VoiceVol)]   integer  The new Voice/Sample volume (range 0 to 255)
  2119.     [FM(FMVol)]         integer  The new FM/Midi volume (range 0 to 255)
  2120.     [CD(CDVol)]         integer  The new CD volume (range 0 to 255)
  2121.     [LINEIN(LineInVol)] integer  The new Line In volume (range 0 to 255)
  2122.     [MICIN(MicInVol)]   integer  The new Mic In volume (range 0 to 255)
  2123.  
  2124.  
  2125. MIXER.PAN
  2126.     [MASTER(MasterPan)] integer  The new Master panning (range -255 to 255)
  2127.     [VOICE(VoicePan)]   integer  The new Voice/Sample panning
  2128.                                  (range -255 to 255)
  2129.     [FM(FMPan)]         integer  The new FM/Midi panning (range -255 to 255)
  2130.     [CD(CDPan)]         integer  The new CD panning (range -255 to 255)
  2131.     [LINEIN(LineInPan)] integer  The new Line In panning (range -255 to 255)
  2132.  
  2133.  
  2134.  
  2135. MIDI.PLAY
  2136.     FileName            string   Play the Midi file indicated by 'FileName'
  2137.     [RATE(rate)]        integer  Override the default rate, set to 'Rate' bpm
  2138.     [WAIT(bool)]        boolean  Wait for playback to complete before
  2139.                                  continuing?
  2140.     [LOOPS(loops)]      integer  Play the Midi file 'loops' number of times
  2141.     [PAN(panval)]       integer  Set panning value to 'panval'
  2142.                                  (range -255 to 255)
  2143.     [FADE(vol,secs)]    integer  Fade from zero to 'vol' volume
  2144.                         integer  Fade in 'secs' seconds
  2145.  
  2146.  
  2147. MIDI.WAIT - Wait for playback to complete before continuing
  2148.  
  2149.  
  2150. MIDI.STOP - Stop playback (playback can not be resumed)
  2151.     [FADE(secs)]        integer  Fade down to zero during 'secs'
  2152.                                  seconds before stopping
  2153.  
  2154.  
  2155. MIDI.PAUSE - Stop playback (playback can be resumed if playing)
  2156.     [FADE(secs)]        integer  Fade down to zero during 'secs'
  2157.                                  seconds before stopping
  2158.  
  2159.  
  2160. MIDI.RESUME - Resume playback (if playback was previously stopped)
  2161.     [FADE(vol,secs)]    integer  Fade up to 'vol' volume
  2162.                         integer  Fade in 'secs' seconds
  2163.     [WAIT(bool)]        boolean  Wait for fade to complete before continuing?
  2164.  
  2165.  
  2166. MIDI.VOLUME
  2167.     FadeTo              integer  Set the new volume to 'FadeTo'
  2168.                                  (range 0 to 255)
  2169.     FadeTime            integer  The fade should take 'FadeTime' secs
  2170.                                  (0 if no fade)
  2171.     [WAIT(bool)]        boolean  Wait for fade to complete before continuing?
  2172.  
  2173.  
  2174. MIDI.PAN
  2175.     Panning             integer  Set the new panning to 'Panning'
  2176.                                  (range -255 to 255)
  2177.  
  2178.  
  2179. Sound Variables and Functions
  2180.  
  2181. FUNCTIONS:
  2182.  
  2183. Name                            Type    Description
  2184. ------------------------------------------------------------------------
  2185. CD.LengthTrack(tracknumber)     String  Length of any given tracknumber
  2186.  
  2187. VARIABLES:
  2188.  
  2189. Name            Type    Example         Description
  2190. -----------------------------------------------------------------------
  2191. CD.DiscLength   String  "54:32"         Total playing time whole disc
  2192. CD.DiscTime     String  "23:45"         Elapsed time whole disc
  2193. CD.FirstDrive   String  "D"             Drive letter of first CD drive
  2194. CD.MaxTracks    Integer 12              Number of tracks on disc
  2195. CD.NumDrives    Integer 1               Number of CD drives on this PC
  2196. CD.Track        Integer 3               Current track number
  2197. CD.TrackLength  String  "04:56"         Length this track
  2198. CD.TrackTime    String  "01:23"         Elapsed time this track
  2199.  
  2200. CD variables are Read Only. You cannot assign values to them.
  2201.  
  2202.  
  2203. Name            Type    Range           Description
  2204. -----------------------------------------------------------------------
  2205. Mixer.CDPan     Integer -255...255      CD Pan
  2206. Mixer.CDVol     Integer 0..255          CD Volume
  2207. Mixer.LinePan   Integer -255...255      Line Pan
  2208. Mixer.LineVol   Integer 0..255          Line Volume
  2209. Mixer.MasterPan Integer -255...255      Master Pan
  2210. Mixer.MasterVol Integer 0..255          Master Volume
  2211. Mixer.MicVol    Integer 0..255          Microphone Volume
  2212. Mixer.MIDIPan   Integer -255...255      MIDI Pan
  2213. Mixer.MIDIVol   Integer 0..255          MIDI Volume
  2214. Mixer.SamplePan Integer -255...255      Sample Pan
  2215. Mixer.SampleVol Integer 0..255          Sample Volume
  2216.  
  2217. Mixer variables are Read/Write. You can read their current value
  2218. or set a new value.
  2219.  
  2220. All volume settings range from 0 to 255, while all panning settings range from
  2221. -255 to 255 (-255 equals full left channel, 0 equals full left and right
  2222. channel, 255 equals full right channel.)
  2223.  
  2224. Sound Environment variables
  2225.  
  2226. The sound for MM200 is processed through Microsoft DirectX support, and does
  2227. not depend on proprietary hardware drivers.  Most of the variables listed
  2228. in this section are now obsolete.
  2229.  
  2230. Environment variables are used to configure the Sound EX. Below is a sample
  2231. configuration file for the Sound EX (sound.sca). This file should be placed
  2232. into the "config" directory of the system.
  2233.  
  2234.     !ScalaScript
  2235.     EVENT
  2236.         CD.Hwvol    = FALSE;
  2237.         Sample.Type = "NONE";
  2238.         Sample.Addr = $220;
  2239.         Sample.Irq  = 5;
  2240.         Sample.Dma  = 1;
  2241.         Midi.Type   = "NONE";
  2242.         Midi.Addr   = $330;
  2243.         Midi.Patch  = "NONE";
  2244.     END
  2245.  
  2246. Here is a brief description of the Sound EX module's Environment variables.
  2247.  
  2248. CD.HWVOL = FALSE;
  2249.  
  2250. The CD volume can be controlled in two ways: Either by using the CD-ROM hardware
  2251. for controlling the volume (not supported by all manufacturers), or by using the
  2252. soundcard's mixer functions. Set this boolean variable to TRUE if you would like
  2253. to use the CD-ROM hardware for controlling the volume.
  2254.  
  2255. SAMPLE.TYPE = "NONE";
  2256.  
  2257. This variable defines the type of soundcard installed in your machine (for
  2258. sample playback).
  2259.  
  2260.     "NONE"        No card has been installed.
  2261.     "SB1.X"       SoundBlaster version 1.x.
  2262.     "SB1.5"       SoundBlaster version 1.5.
  2263.     "SB2.0"       SoundBlaster version 2.0.
  2264.     "SBPRO"       SoundBlaster Pro series.
  2265.     "SB16"        SoundBlaster 16-bit cards.
  2266.     "AWE32"       SoundBlaster 16-bit cards.
  2267.     "MEDIAVISION" MediaVision - use MVSOUND.
  2268.  
  2269. SAMPLE.ADDR = $220;
  2270.  
  2271. This variable defines the address of the soundcard. The dollar sign prefixes a
  2272. hexa-decimal address.
  2273.  
  2274. SAMPLE.IRQ = 5;
  2275.  
  2276. This variable defines the soundcard's irq number. Most Blaster cards do not need
  2277. this setting.
  2278.  
  2279. SAMPLE.DMA = 1;
  2280.  
  2281. This variable defines the soundcard 's dma channel. Most cards do not need this
  2282. setting.
  2283.  
  2284. MIDI.TYPE = "NONE";
  2285.  
  2286. This variable defines the type of MIDI card installed in your machine (for MIDI
  2287. playback).
  2288.  
  2289.     "NONE"   No card has been installed.
  2290.     "MPU401" General Midi chip used by most cards for communication
  2291.              with external equipment - also used by the Roland RAP-10
  2292.              and Roland LAPC1/MT32 cards for internal audio.
  2293.     "AWE32"  SoundBlaster AWE32 / EMU8000.
  2294.     "GUS"    Gravis UltraSound - use ULTRAMID.EXE.
  2295.  
  2296. MIDI.ADDR = $330;
  2297.  
  2298. This variable defines the address of your MIDI card, which is normally $330 for
  2299. MPU401 and $620 for the AWE32. The dollar sign prefixes a hexadecimal address.
  2300.  
  2301. MIDI.PATCH = "NONE";
  2302.  
  2303. This variable defines the name of a patch or soundfonts (SBK) file that should
  2304. automatically be loaded upon startup .
  2305.  
  2306.  
  2307. Example scripts
  2308.  
  2309. The following "intro" script plays the first 10 seconds of each track on the CD.
  2310.  
  2311. EVENT
  2312. Group:
  2313.     INTEGER(track);
  2314. Sequence:
  2315.     EVENT
  2316.     Group:
  2317.         WHILE(track < CD.MAXTRACK)
  2318.     Sequence:
  2319.         track = track + 1;
  2320.         CD.PLAY(track, track, Wait(FALSE));
  2321.         CD.SYNC("00:10.00", Track(TRUE));
  2322.     END
  2323. END
  2324.  
  2325. The following "jukebox" script uses the Console EX for reading input and writing
  2326. messages onto the screen.
  2327.  
  2328. EVENT
  2329. Group:
  2330.     INTEGER(track);
  2331.     track = 1;
  2332. Sequence:
  2333.     EVENT
  2334.     Group:
  2335.         WHILE(track > 0)
  2336.     Sequence:
  2337.         ECHO("\nEnter track number: ");
  2338.         ASK(track);
  2339.         CD.PLAY(track, track, Wait(FALSE));
  2340.     END
  2341. END
  2342.  
  2343. The following script plays track one on the CD and crossfades to the WAV file
  2344. indicated, waiting for completion.
  2345.  
  2346. EVENT
  2347. Sequence:
  2348.     MIXER.VOLUME(Voice(0), CD(255));
  2349.     CD.PLAY(1, 1, Wait(FALSE));
  2350.     SAMPLE.PLAY(":n/archive/sounds/jazzriff.wav", Wait(FALSE));
  2351.     MIXER.FADE(10, Voice(255), CD(0));
  2352.     SAMPLE.WAIT();
  2353. END
  2354.  
  2355. -------------------------------------------------------------------------------
  2356.  
  2357. 5.  Input EX Script Commands
  2358. ============================
  2359.  
  2360. Input():
  2361.  
  2362.     Input(
  2363.         [ Mouse( BOOLEAN ) ]
  2364.         [ TouchScreen( BOOLEAN ) ]
  2365.         [ Keyboard( BOOLEAN ) ]
  2366.         [ MouseControls( BOOLEAN ) ]
  2367.         [ KeyboardControls( BOOLEAN ) ]
  2368.         [ MousePointer( STRING ) ]
  2369.         [ MouseBusyPointer( STRING ) ]
  2370.         [ PointerSelectionOnly( BOOLEAN ) ]
  2371.         )
  2372.     
  2373.     Button Input
  2374.     ------------
  2375.     
  2376.     - Mouse( BOOLEAN )
  2377.         Use a mouse as the ButtonsEX input device.  This option is mutually
  2378.         exclusive with the TouchScreen option.
  2379.     
  2380.     - TouchScreen( BOOLEAN )
  2381.         Use a touch screen as the ButtonsEX input device.  This option is
  2382.         mutually exclusive with the Mouse option.
  2383.     
  2384.     - Keyboard( BOOLEAN )
  2385.         Use the keyboard as the ButtonsEX input device.  This can be used
  2386.         with Mouse or TouchScreen.
  2387.     
  2388.     
  2389.     Slideshow Controls
  2390.     ------------------
  2391.     
  2392.     - MouseControls( BOOLEAN )
  2393.         Allows the mouse to navigate through a slideshow.  This option will
  2394.         be ignored while the Mouse() option is on AND there are buttons on
  2395.         the current page.  
  2396.     
  2397.     - KeyboardControls( BOOLEAN )
  2398.         Allow the keyboard to navigate through a slideshow.
  2399.     
  2400.     
  2401.     Mouse Pointer
  2402.     -------------
  2403.     
  2404.     - MousePointer( STRING )
  2405.         Filename of normal mouse pointer image.  The image file can be a .bmp
  2406.         or other image file format that Scala supports for Clips.  By
  2407.         default, Scala will use Scala:\pointers\stdptr.bmp.
  2408.     
  2409.     - MouseBusyPointer( STRING )
  2410.         Filename of busy mouse pointer image.  The image file can be a .bmp
  2411.         or other image file format that Scala supports for Clips.  A busy
  2412.         pointer will appear when buttons are on the page but are not yet
  2413.         active.  If PointerSelectionOnly (see below) is On, a busy pointer
  2414.         can appear while the player is in an idle state and there are no
  2415.         wipes in progress.  By default, Scala will not show a busy pointer.
  2416.     
  2417.     - PointerSelectionOnly( BOOLEAN )
  2418.         If this is On, a mouse pointer will only appear while there are
  2419.         buttons on the current page.  If this is Off, a pointer will
  2420.         appear on all pages.  Of course, if the user has not set the busy
  2421.         pointer image,  there will be no pointer when the player is idle.
  2422.  
  2423. -------------------------------------------------------------------------------
  2424.  
  2425. 6.  Time Script Functions and Variables
  2426. =======================================
  2427.  
  2428. Time
  2429.     string TIME
  2430.  
  2431.     Environment variable containing the current time in the current format
  2432.     (defined by a system setting).
  2433.  
  2434. Date
  2435.     string DATE
  2436.  
  2437.     Environment variable containing the current date in the current format
  2438.     (defined by a system setting).
  2439.  
  2440. Clock
  2441.     integer CLOCK
  2442.  
  2443.     Environment variable containing the number of seconds since some magic date.
  2444.  
  2445. SysTime
  2446.     integer SYSTIME(enum Mode)
  2447.  
  2448.     Where Mode can be:
  2449.         Mode     Returned Range
  2450.         ----     --------------
  2451.         Year     1995, 1996, ...
  2452.         Month    [1...12]
  2453.         Day      [1...31]
  2454.         Hour     [0...23]
  2455.         Minute   [0...59]
  2456.         Second   [0...59]
  2457.         Weekday  [1...7]
  2458.  
  2459.     For example:
  2460.         SysTime(Weekday) might return 5 (Thursday).
  2461.         SysTime(Year) might return 1996.
  2462.  
  2463. -------------------------------------------------------------------------------
  2464.  
  2465. 7.  MPEG EX Script Commands
  2466. ===========================
  2467.  
  2468. MPEG.Stop();
  2469.  
  2470. MPEG.Wait();
  2471.  
  2472. MPEG.Play(filename, <options>);
  2473.  
  2474.     MPEG.Play() required parameters:
  2475.  
  2476.         -filename
  2477.  
  2478.     MPEG.Play() optional parameters:
  2479.  
  2480.         - Pos(x,y),
  2481.     
  2482.         - Size(width,height),
  2483.     
  2484.         - Wait(boolean)
  2485.  
  2486. -------------------------------------------------------------------------------
  2487.  
  2488. 8.  Screen Script Commands and Variables
  2489. ===========================================
  2490.  
  2491. This is a description of the EX commands and variables supported by
  2492. the Screen Book and related EXes.
  2493.  
  2494. EX Variables
  2495. ------------
  2496.  
  2497. Various EX variables may be set to configure certain aspects of Screen
  2498. EX operation. These include:
  2499.  
  2500. Screen.ViewMode (string)
  2501.     If set, this tells the system to force all background elements
  2502.     to use a specific View mode, as if the View Mode suboption was
  2503.     specified in each background command. This overrides any View
  2504.     option specified in the background command.
  2505.  
  2506. Screen.ViewWidth (integer)
  2507.     If set, this tells the system to force all background elements
  2508.     to use a specific View width, as if the View Size suboption was
  2509.     specified in each background command. This overrides any View
  2510.     option specified in the background command.
  2511.  
  2512. Screen.ViewHeight (integer)
  2513.     If set, this tells the system to force all background elements
  2514.     to use a specific View height, as if the View Size suboption was
  2515.     specified in each background command. This overrides any View
  2516.     option specified in the background command.
  2517.  
  2518. Screen.Switched (boolean)
  2519.     This variable changes to TRUE when the Scala application is
  2520.     switched in, and to FALSE when it is switched out. A script can
  2521.     resume execution at a specific position by setting up
  2522.     notification on this variable. Without this notification, the
  2523.     script will exit when playback is switched out.
  2524.  
  2525. Screen.ViewColorModel (string)
  2526.     If set, this tells the system to force all background elements
  2527.     to use a specific View ColorModel, as if the View ColorModel
  2528.     suboption was specified in each background command. This can be
  2529.     PaletteMapped, HiColor, or TrueColor. This overrides any View
  2530.     option specified in the background command.
  2531.  
  2532. Screen.ViewRefreshRate (integer)
  2533.     It takes an integer, and determines the refresh rate used by all pages.
  2534.     Zero uses the system default.
  2535.  
  2536. Element and Style Commands
  2537. --------------------------
  2538.  
  2539. An element is an on-screen object created by a Scala Script command.
  2540. An element may be either a background or a foreground element. Each
  2541. background element replaces any background element that appeared
  2542. previously. Foreground elements appear in front of the current
  2543. background element, and may overlap each other. Each foreground
  2544. element will always obscure any overlapping elements that appeared
  2545. previously. When a background element is replaced by a new one, all
  2546. foreground elements that were shown on it are removed automatically.
  2547.  
  2548. Each Scala Script command that creates an element is known as an
  2549. element command. Each element command may have required parameters
  2550. that it expects, and/or optional parameters that it supports. This
  2551. section describes each of these element commands and the parameters
  2552. that it uses.
  2553.  
  2554. A style is a command that can be used to set up commonly used options
  2555. for reference by one or more element commands. Each element command
  2556. has an associated style command. A Scala Script author may choose to
  2557. use or not to use a style command for any given element command,
  2558. depending on the needs of the script. Style commands can be used to
  2559. reduce RAM and CPU utilization during Scala Script playback, by
  2560. specifying common options on the style commands and referencing those
  2561. styles by name on element commands.
  2562.  
  2563. Note that styles are not supported by the authoring system at this time.
  2564. They may, however, be hand authored. Scripts created with styles will
  2565. probably not be able to be loaded into the current authoring system.
  2566.  
  2567. An element command may reference a style command, and override some of
  2568. the options specified in the style command by re-specifying the same
  2569. option again in the element command. If an option is overridden this
  2570. way, all suboptions for that option are also overridden (unless
  2571. otherwise noted), whether or not they were specified on the element
  2572. command. Suboptions that are not specified for an overridden option
  2573. will use default values. All element and style commands, unless
  2574. otherwise noted, evaluate their parameters only once, when an element
  2575. is created.
  2576.  
  2577. Background Commands
  2578. -------------------
  2579.  
  2580. AnimStyle():
  2581.  
  2582.     This command creates a style object that can be used to specify a
  2583.     common set of options used by one or more Anim commands.
  2584.  
  2585.     Synopsis:
  2586.  
  2587.         AnimStyle( stylename
  2588.                 [, Loops(loops) ]
  2589.                 [, Margin(left, right, top, bottom) ]
  2590.                 [, Operation(state, <operation options>) ]
  2591.                 [, Palette( Clear(state), <palette options> ) ]
  2592.                 [, PlayAfter(state) ]
  2593.                 [, Speed(speed) ]
  2594.                 [, StopAtFirstFrame(state) ]
  2595.                 [, Style(stylename) ]
  2596.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  2597.                 [, UserPalette( Clear(state), <palette options> ) ]
  2598.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  2599.                 [, Wipe(wipename, <wipe options>) ]
  2600.                 );
  2601.  
  2602.     Examples:
  2603.  
  2604.         AnimStyle(Barnum, Speed(40));
  2605.         AnimStyle(Bailey, Style(Barnum), Speed(60), Wipe("FlyLeft"));
  2606.  
  2607.     Required Parameters Used by This Class:
  2608.  
  2609.         - stylename
  2610.             The name of the style being defined.
  2611.  
  2612.     Optional Parameters Supported by This Class:
  2613.  
  2614.         - Loops(loops)
  2615.             How may times to play the animation in a loop.
  2616.  
  2617.         - Margin(left, right, top, bottom)
  2618.             This sets margins in the Background element to be used for
  2619.             positioning foreground elements on that background. The
  2620.             margin values may be 0 or greater, and all default to 0.
  2621.  
  2622.         - Operation(state, <operation options>)
  2623.             Specifies the operations done before drawing this image.
  2624.             The state defaults to off.
  2625.  
  2626.         - Palette( Clear(state), <palette options> )
  2627.             The palette used for this background. This defines
  2628.             specific colors to be mapped to specific pens at playback
  2629.             time.
  2630.  
  2631.             Clear(state) determines whether pens from the style
  2632.             (if any) are cleared before applying pens specified in
  2633.             this Palette option.
  2634.  
  2635.         - PlayAfter(state)
  2636.             Whether the animation shall stop after the first frame
  2637.             and let the sequence list be played before resuming the
  2638.             animation. Default to FALSE. If FALSE then the animation
  2639.             will be played first, then the element in the sequence
  2640.             list will be played.
  2641.  
  2642.         - Speed(speed)
  2643.             The speed of the animation in frames per second.
  2644.  
  2645.         - StopAtFirstFrame(state)
  2646.             Whether to stop the animation on the first frame after
  2647.             completion of the animation. If this is on, the first
  2648.             frame will be the last one shown. If this is off, the
  2649.             animation's last frame will be the last one shown. The
  2650.             state defaults to off.
  2651.  
  2652.         - Style(stylename)
  2653.             The name of a style style being defined is derived from.
  2654.  
  2655.         - Tabs(Implicit(width), Explicit(tab, ...))
  2656.             A description of tab stops, relative to the background. If
  2657.             both Implicit and Explicit tabs are specified, explicit
  2658.             tabs are used first, and implicit tabs are used once the
  2659.             explicit tabs are used up.
  2660.  
  2661.             Implicit(width) set the distance between implied tab
  2662.             stops. This represents the number of pixels from each tab
  2663.             stop to the next. The width may be 1 or greater, and
  2664.             defaults to 50.
  2665.  
  2666.             Explicit(tab, ...) sets a list of one or more explicit tab
  2667.             stops. Each tab stop represents a number of pixels from
  2668.             the tab reference point, and may be 0 or greater. Any
  2669.             number of tab stops may be specified, but they must be
  2670.             listed in increasing order. There are no default Explicit
  2671.             tabs.
  2672.  
  2673.         - UserPalette( Clear(state), <palette options> )
  2674.             The user palette for this background. This defines
  2675.             specific colors to be mapped to user pen numbers during
  2676.             playback. These user pen numbers are used by other
  2677.             commands via the 'Pen' fill option to select colors for
  2678.             elements to be drawn in. During playback, these user pens
  2679.             may end up mapped to any playback pens, and the screen
  2680.             book will take care of converting one to the other. The
  2681.             net result is that elements may refer to a user pen
  2682.             number, and get the desired color, no matter which
  2683.             playback pen the user pen number is actually mapped to.
  2684.  
  2685.             Clear(state) determines whether user pens from the style
  2686.             (if any) are cleared before applying user pens specified
  2687.             in this UserPalette option.
  2688.  
  2689.         - View(Mode(name), Size(width, height), ColorModel(colors))
  2690.             This describes the View used for this background. Any
  2691.             combination of suboptions may be specified to uniquely
  2692.             describe the View to be used.
  2693.  
  2694.             Mode(name) identifies the mode by a name (in string form).
  2695.  
  2696.             Size(w,h) identifies the View by the maximum display size
  2697.             it supports. this is the size of the ViewPort that is created.
  2698.  
  2699.             ColorModel(colors) identifies the View by
  2700.             the maximum number of colors it supports. This can be
  2701.             PaletteMapped, HiColor, or TrueColor, and defaults to
  2702.             PaletteMapped.
  2703.  
  2704.         - Wipe(wipename, <wipe options>)
  2705.             A description of the wipe used for wiping in the element.
  2706.             If no wipe is specified, the "Cut" wipe is used.
  2707.  
  2708. Anim():
  2709.  
  2710.     This command creates an animation background.
  2711.  
  2712.     All <operation options> are available for Anim() with the exception
  2713.     of TransparentRGB. In most cases, performance will not be good enough
  2714.     for any of the <operation options> to be used.
  2715.  
  2716.     Synopsis:
  2717.  
  2718.         Anim( filename
  2719.                 [, Loops(loops) ]
  2720.                 [, Margin(left, right, top, bottom) ]
  2721.                 [, Operation(state, <operation options>) ]
  2722.                 [, Palette( Clear(state), <palette options> ) ]
  2723.                 [, PlayAfter(state) ]
  2724.                 [, Speed(speed) ]
  2725.                 [, StopAtFirstFrame(state) ]
  2726.                 [, Style(stylename) ]
  2727.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  2728.                 [, UserPalette( Clear(state), <palette options> ) ]
  2729.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  2730.                 [, Wipe(wipename, <wipe options>) ]
  2731.                 );
  2732.  
  2733.     Examples:
  2734.  
  2735.         Anim("show.flc");
  2736.         Anim("show2.flc", Style(Barnum), Loops(5));
  2737.  
  2738.     Required Parameters Used by This Class:
  2739.  
  2740.         - filename
  2741.             The name of the file containing the image data.
  2742.  
  2743.     Optional Parameters Supported by This Class:
  2744.  
  2745.         - Loops(loops)
  2746.             How may times to play the animation in a loop.
  2747.  
  2748.         - Margin(left, right, top, bottom)
  2749.             This sets margins in the Background element to be used for
  2750.             positioning foreground elements on that background. The
  2751.             margin values may be 0 or greater, and all default to 0.
  2752.  
  2753.         - Operation(state, <operation options>)
  2754.             Specifies the operations done before drawing this image.
  2755.             The state defaults to off.
  2756.  
  2757.         - Palette( Clear(state), <palette options> )
  2758.             The palette used for this background. This defines
  2759.             specific colors to be mapped to specific pens at playback
  2760.             time.
  2761.  
  2762.             Clear(state) determines whether pens from the style
  2763.             (if any) are cleared before applying pens specified in
  2764.             this Palette option.
  2765.  
  2766.         - PlayAfter(state)
  2767.             Whether the animation shall stop after the first frame
  2768.             and let the sequence list be played before resuming the
  2769.             animation. Default to FALSE. If FALSE then the animation
  2770.             will be played first, then the element in the sequence
  2771.             list will be played.
  2772.  
  2773.         - Speed(speed)
  2774.             The speed of the animation in frames per second.
  2775.  
  2776.         - StopAtFirstFrame(state)
  2777.             Whether to stop the animation on the first frame after
  2778.             completion of the animation. If this is on, the first
  2779.             frame will be the last one shown. If this is off, the
  2780.             animation's last frame will be the last one shown. The
  2781.             state defaults to off.
  2782.  
  2783.         - Style(stylename)
  2784.             The name of a style style being defined is derived from.
  2785.  
  2786.         - Tabs(Implicit(width), Explicit(tab, ...))
  2787.             A description of tab stops, relative to the background. If
  2788.             both Implicit and Explicit tabs are specified, explicit
  2789.             tabs are used first, and implicit tabs are used once the
  2790.             explicit tabs are used up.
  2791.  
  2792.             Implicit(width) set the distance between implied tab
  2793.             stops. This represents the number of pixels from each tab
  2794.             stop to the next. The width may be 1 or greater, and
  2795.             defaults to 50.
  2796.  
  2797.             Explicit(tab, ...) sets a list of one or more explicit tab
  2798.             stops. Each tab stop represents a number of pixels from
  2799.             the tab reference point, and may be 0 or greater. Any
  2800.             number of tab stops may be specified, but they must be
  2801.             listed in increasing order. There are no default Explicit
  2802.             tabs.
  2803.  
  2804.         - UserPalette( Clear(state), <palette options> )
  2805.             The user palette for this background. This defines
  2806.             specific colors to be mapped to user pen numbers during
  2807.             playback. These user pen numbers are used by other
  2808.             commands via the 'Pen' fill option to select colors for
  2809.             elements to be drawn in. During playback, these user pens
  2810.             may end up mapped to any playback pens, and the screen
  2811.             book will take care of converting one to the other. The
  2812.             net result is that elements may refer to a user pen
  2813.             number, and get the desired color, no matter which
  2814.             playback pen the user pen number is actually mapped to.
  2815.  
  2816.             Clear(state) determines whether user pens from the style
  2817.             (if any) are cleared before applying user pens specified
  2818.             in this UserPalette option.
  2819.  
  2820.         - View(Mode(name), Size(width, height), ColorModel(colors))
  2821.             This describes the View used for this background. Any
  2822.             combination of suboptions may be specified to uniquely
  2823.             describe the View to be used.
  2824.  
  2825.             Mode(name) identifies the mode by a name (in string form).
  2826.  
  2827.             Size(w,h) identifies the View by the maximum display size
  2828.             it supports. this is the size of the ViewPort that is created.
  2829.  
  2830.             ColorModel(colors) identifies the View by
  2831.             the maximum number of colors it supports. This can be
  2832.             PaletteMapped, HiColor, or TrueColor, and defaults to
  2833.             PaletteMapped.
  2834.  
  2835.         - Wipe(wipename, <wipe options>)
  2836.             A description of the wipe used for wiping in the element.
  2837.             If no wipe is specified, the "Cut" wipe is used.
  2838.  
  2839. DisplayStyle():
  2840.  
  2841.     This command creates a style object that can be used to specify a
  2842.     common set of options used by one or more Display commands.
  2843.  
  2844.     Synopsis:
  2845.  
  2846.         DisplayStyle( stylename
  2847.                 [, Face(<fill options>) ]
  2848.                 [, Margin(left, right, top, bottom) ]
  2849.                 [, Palette( Clear(state), <palette options> ) ]
  2850.                 [, Size(width, height) ]
  2851.                 [, Style(stylename) ]
  2852.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  2853.                 [, UserPalette( Clear(state), <palette options> ) ]
  2854.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  2855.                 [, Wipe(wipename, <wipe options>) ]
  2856.                 );
  2857.  
  2858.     Examples:
  2859.  
  2860.         DisplayStyle(Fred, View(Mode("NTSC 704")));
  2861.         DisplayStyle(Wilma, Style(Fred), Face(RGB(0)));
  2862.  
  2863.     Required Parameters Used by This Class:
  2864.  
  2865.         - stylename
  2866.             The name of the style being defined.
  2867.  
  2868.     Optional Parameters Supported by This Class:
  2869.  
  2870.         - Face(<fill options>)
  2871.             The appearance of the face of the element. For images,
  2872.             <fill options> defaults to nothing. For other elements,
  2873.             <fill options> defaults to RGB($ffffff).
  2874.  
  2875.         - Margin(left, right, top, bottom)
  2876.             This sets margins in the Background element to be used for
  2877.             positioning foreground elements on that background. The
  2878.             margin values may be 0 or greater, and all default to 0.
  2879.  
  2880.         - Palette( Clear(state), <palette options> )
  2881.             The palette used for this background. This defines
  2882.             specific colors to be mapped to specific pens at playback
  2883.             time.
  2884.  
  2885.             Clear(state) determines whether pens from the style
  2886.             (if any) are cleared before applying pens specified in
  2887.             this Palette option.
  2888.  
  2889.         - Size(width, height)
  2890.             This may be used to force a visual display size that is
  2891.             different than the ViewPort size. If no Display size is
  2892.             specified, the display will be the same size as the
  2893.             ViewPort (or View). If the display size is smaller than
  2894.             the ViewPort size, the display will be centered in the
  2895.             ViewPort.
  2896.  
  2897.         - Style(stylename)
  2898.             The name of a style style being defined is derived from.
  2899.  
  2900.         - Tabs(Implicit(width), Explicit(tab, ...))
  2901.             A description of tab stops, relative to the background. If
  2902.             both Implicit and Explicit tabs are specified, explicit
  2903.             tabs are used first, and implicit tabs are used once the
  2904.             explicit tabs are used up.
  2905.  
  2906.             Implicit(width) set the distance between implied tab
  2907.             stops. This represents the number of pixels from each tab
  2908.             stop to the next. The width may be 1 or greater, and
  2909.             defaults to 50.
  2910.  
  2911.             Explicit(tab, ...) sets a list of one or more explicit tab
  2912.             stops. Each tab stop represents a number of pixels from
  2913.             the tab reference point, and may be 0 or greater. Any
  2914.             number of tab stops may be specified, but they must be
  2915.             listed in increasing order. There are no default Explicit
  2916.             tabs.
  2917.  
  2918.         - UserPalette( Clear(state), <palette options> )
  2919.             The user palette for this background. This defines
  2920.             specific colors to be mapped to user pen numbers during
  2921.             playback. These user pen numbers are used by other
  2922.             commands via the 'Pen' fill option to select colors for
  2923.             elements to be drawn in. During playback, these user pens
  2924.             may end up mapped to any playback pens, and the screen
  2925.             book will take care of converting one to the other. The
  2926.             net result is that elements may refer to a user pen
  2927.             number, and get the desired color, no matter which
  2928.             playback pen the user pen number is actually mapped to.
  2929.  
  2930.             Clear(state) determines whether user pens from the style
  2931.             (if any) are cleared before applying user pens specified
  2932.             in this UserPalette option.
  2933.  
  2934.         - View(Mode(name), Size(width, height), ColorModel(colors))
  2935.  
  2936.         - Wipe(wipename, <wipe options>)
  2937.             A description of the wipe used for wiping in the element.
  2938.             If no wipe is specified, the "Cut" wipe is used.
  2939.  
  2940. Display():
  2941.  
  2942.     This command creates a solid color or a patterned background.
  2943.  
  2944.     Synopsis:
  2945.  
  2946.         Display(
  2947.                 [, Face(<fill options>) ]
  2948.                 [, Margin(left, right, top, bottom) ]
  2949.                 [, Palette( Clear(state), <palette options> ) ]
  2950.                 [, Size(width, height) ]
  2951.                 [, Style(stylename) ]
  2952.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  2953.                 [, UserPalette( Clear(state), <palette options> ) ]
  2954.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  2955.                 [, Wipe(wipename, <wipe options>) ]
  2956.                 );
  2957.  
  2958.     Examples:
  2959.  
  2960.         Display(Face(RGB($ffffff)));
  2961.         Display(Style(Fred), Face(Tile("scalabang.bmp")), Size(608,400));
  2962.  
  2963.     Optional Parameters Supported by This Class:
  2964.  
  2965.         - Face(<fill options>)
  2966.             The appearance of the face of the element. For images,
  2967.             <fill options> defaults to nothing. For other elements,
  2968.             <fill options> defaults to RGB($ffffff).
  2969.  
  2970.         - Margin(left, right, top, bottom)
  2971.             This sets margins in the Background element to be used for
  2972.             positioning foreground elements on that background. The
  2973.             margin values may be 0 or greater, and all default to 0.
  2974.  
  2975.         - Palette( Clear(state), <palette options> )
  2976.             The palette used for this background. This defines
  2977.             specific colors to be mapped to specific pens at playback
  2978.             time.
  2979.  
  2980.             Clear(state) determines whether pens from the style
  2981.             (if any) are cleared before applying pens specified in
  2982.             this Palette option.
  2983.  
  2984.         - Size(width, height)
  2985.             This may be used to force a visual display size that is
  2986.             different than the ViewPort size. If no Display size is
  2987.             specified, the display will be the same size as the
  2988.             ViewPort (or View). If the display size is smaller than
  2989.             the ViewPort size, the display will be centered in the
  2990.             ViewPort.
  2991.  
  2992.         - Style(stylename)
  2993.             The name of a style style being defined is derived from.
  2994.  
  2995.         - Tabs(Implicit(width), Explicit(tab, ...))
  2996.             A description of tab stops, relative to the background. If
  2997.             both Implicit and Explicit tabs are specified, explicit
  2998.             tabs are used first, and implicit tabs are used once the
  2999.             explicit tabs are used up.
  3000.  
  3001.             Implicit(width) set the distance between implied tab
  3002.             stops. This represents the number of pixels from each tab
  3003.             stop to the next. The width may be 1 or greater, and
  3004.             defaults to 50.
  3005.  
  3006.             Explicit(tab, ...) sets a list of one or more explicit tab
  3007.             stops. Each tab stop represents a number of pixels from
  3008.             the tab reference point, and may be 0 or greater. Any
  3009.             number of tab stops may be specified, but they must be
  3010.             listed in increasing order. There are no default Explicit
  3011.             tabs.
  3012.  
  3013.         - UserPalette( Clear(state), <palette options> )
  3014.             The user palette for this background. This defines
  3015.             specific colors to be mapped to user pen numbers during
  3016.             playback. These user pen numbers are used by other
  3017.             commands via the 'Pen' fill option to select colors for
  3018.             elements to be drawn in. During playback, these user pens
  3019.             may end up mapped to any playback pens, and the screen
  3020.             book will take care of converting one to the other. The
  3021.             net result is that elements may refer to a user pen
  3022.             number, and get the desired color, no matter which
  3023.             playback pen the user pen number is actually mapped to.
  3024.  
  3025.             Clear(state) determines whether user pens from the style
  3026.             (if any) are cleared before applying user pens specified
  3027.             in this UserPalette option.
  3028.  
  3029.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3030.             This describes the View used for this background. Any
  3031.             combination of suboptions may be specified to uniquely
  3032.             describe the View to be used.
  3033.  
  3034.             Mode(name) identifies the mode by a name (in string form).
  3035.  
  3036.             Size(w,h) identifies the View by the maximum display size
  3037.             it supports. this is the size of the ViewPort that is created.
  3038.  
  3039.             ColorModel(colors) identifies the View by
  3040.             the maximum number of colors it supports. This can be
  3041.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3042.             PaletteMapped.
  3043.  
  3044.         - Wipe(wipename, <wipe options>)
  3045.             A description of the wipe used for wiping in the element.
  3046.             If no wipe is specified, the "Cut" wipe is used.
  3047.  
  3048. MovieStyle():
  3049.  
  3050.      MovieStyle() creates a style object that can be used to specify a
  3051.      common set of options used by one or more Movie commands.
  3052.  
  3053.     Synopsis:
  3054.  
  3055.         MovieStyle(stylename,
  3056.                 [, Loops(loops) ]
  3057.                 [, Margin(left, right, top, bottom) ]
  3058.                 [, Operation(state, <operation options>) ]
  3059.                 [, Palette( Clear(state), <palette options> ) ]
  3060.                 [, PlayAfter(state) ]
  3061.                 [, Style(stylename) ]
  3062.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  3063.                 [, UserPalette( Clear(state), <palette options> ) ]
  3064.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  3065.                 [, Volume(volume) ]
  3066.                 [, Wipe(wipename, <wipe options>) ]
  3067.                 );
  3068.  
  3069.     Examples:
  3070.  
  3071.         MovieStyle(Barnum, Speed(40));
  3072.         MovieStyle(Bailey, Style(Barnum), Speed(60), Wipe("FlyLeft"));
  3073.  
  3074.     Required Parameters Used by This Class:
  3075.  
  3076.         - stylename
  3077.             The name of the style being defined.
  3078.         
  3079.     Optional Parameters Supported by This Class:
  3080.  
  3081.         - Loops(loops)
  3082.             How may times to play the animation in a loop.
  3083.  
  3084.         - Margin(left, right, top, bottom)
  3085.             This sets margins in the Background element to be used for
  3086.             positioning foreground elements on that background. The
  3087.             margin values may be 0 or greater, and all default to 0.
  3088.  
  3089.         - Operation(state, <operation options>)
  3090.             Specifies the operations done before drawing this image.
  3091.             The state defaults to off.
  3092.  
  3093.         - Palette( Clear(state), <palette options> )
  3094.             The palette used for this background. This defines
  3095.             specific colors to be mapped to specific pens at playback
  3096.             time.
  3097.  
  3098.             Clear(state) determines whether pens from the style
  3099.             (if any) are cleared before applying pens specified in
  3100.             this Palette option.
  3101.  
  3102.         - PlayAfter(state)
  3103.             Whether the animation shall stop after the first frame
  3104.             and let the sequence list be played before resuming the
  3105.             animation. Default to FALSE. If FALSE then the animation
  3106.             will be played first, then the element in the sequence
  3107.             list will be played.
  3108.  
  3109.         - Style(stylename)
  3110.             The name of a style style being defined is derived from.
  3111.  
  3112.         - Tabs(Implicit(width), Explicit(tab, ...))
  3113.             A description of tab stops, relative to the background. If
  3114.             both Implicit and Explicit tabs are specified, explicit
  3115.             tabs are used first, and implicit tabs are used once the
  3116.             explicit tabs are used up.
  3117.  
  3118.             Implicit(width) set the distance between implied tab
  3119.             stops. This represents the number of pixels from each tab
  3120.             stop to the next. The width may be 1 or greater, and
  3121.             defaults to 50.
  3122.  
  3123.             Explicit(tab, ...) sets a list of one or more explicit tab
  3124.             stops. Each tab stop represents a number of pixels from
  3125.             the tab reference point, and may be 0 or greater. Any
  3126.             number of tab stops may be specified, but they must be
  3127.             listed in increasing order. There are no default Explicit
  3128.             tabs.
  3129.  
  3130.         - UserPalette( Clear(state), <palette options> )
  3131.             The user palette for this background. This defines
  3132.             specific colors to be mapped to user pen numbers during
  3133.             playback. These user pen numbers are used by other
  3134.             commands via the 'Pen' fill option to select colors for
  3135.             elements to be drawn in. During playback, these user pens
  3136.             may end up mapped to any playback pens, and the screen
  3137.             book will take care of converting one to the other. The
  3138.             net result is that elements may refer to a user pen
  3139.             number, and get the desired color, no matter which
  3140.             playback pen the user pen number is actually mapped to.
  3141.  
  3142.             Clear(state) determines whether user pens from the style
  3143.             (if any) are cleared before applying user pens specified
  3144.             in this UserPalette option.
  3145.  
  3146.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3147.             This describes the View used for this background. Any
  3148.             combination of suboptions may be specified to uniquely
  3149.             describe the View to be used.
  3150.  
  3151.             Mode(name) identifies the mode by a name (in string form).
  3152.  
  3153.             Size(w,h) identifies the View by the maximum display size
  3154.             it supports. this is the size of the ViewPort that is created.
  3155.  
  3156.             ColorModel(colors) identifies the View by
  3157.             the maximum number of colors it supports. This can be
  3158.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3159.             PaletteMapped.
  3160.  
  3161.         - Volume(volume)
  3162.             This specifies the volume for the movie / movieclip.
  3163.             Range is 0 to 255. Defaults to 255 meaning full
  3164.             volume. 0 is silence.
  3165.  
  3166.         - Wipe(wipename, <wipe options>)
  3167.             A description of the wipe used for wiping in the element.
  3168.             If no wipe is specified, the "Cut" wipe is used.
  3169.  
  3170. Movie()
  3171.  
  3172.     Movie() creates an movie background.
  3173.  
  3174.     All <operation options> are available for Movie() with the exception
  3175.     of TransparentRGB. In most cases, performance will not be good enough
  3176.     for any of the <operation options> to be used.
  3177.  
  3178.     Synopsis:
  3179.  
  3180.         Movie(filename,
  3181.                 [, Loops(loops) ]
  3182.                 [, Margin(left, right, top, bottom) ]
  3183.                 [, Operation(state, <operation options>) ]
  3184.                 [, Palette( Clear(state), <palette options> ) ]
  3185.                 [, PlayAfter(state) ]
  3186.                 [, Style(stylename) ]
  3187.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  3188.                 [, UserPalette( Clear(state), <palette options> ) ]
  3189.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  3190.                 [, Volume(volume) ]
  3191.                 [, Wipe(wipename, <wipe options>) ]
  3192.                 );
  3193.  
  3194.  
  3195.     Examples:
  3196.  
  3197.         Movie("show.avi");
  3198.         Movie("show2.avi", Style(Barnum), Loops(5));
  3199.  
  3200.     Required Parameters Used by This Class:
  3201.  
  3202.         - filename
  3203.             The name of the file containing the image data.
  3204.  
  3205.     Optional Parameters Supported by This Class:
  3206.  
  3207.         - Loops(loops)
  3208.             How may times to play the animation in a loop.
  3209.  
  3210.         - Margin(left, right, top, bottom)
  3211.             This sets margins in the Background element to be used for
  3212.             positioning foreground elements on that background. The
  3213.             margin values may be 0 or greater, and all default to 0.
  3214.  
  3215.         - Operation(state, <operation options>)
  3216.             Specifies the operations done before drawing this image.
  3217.             The state defaults to off.
  3218.  
  3219.         - Palette( Clear(state), <palette options> )
  3220.             The palette used for this background. This defines
  3221.             specific colors to be mapped to specific pens at playback
  3222.             time.
  3223.  
  3224.             Clear(state) determines whether pens from the style
  3225.             (if any) are cleared before applying pens specified in
  3226.             this Palette option.
  3227.  
  3228.         - PlayAfter(state)
  3229.             Whether the animation shall stop after the first frame
  3230.             and let the sequence list be played before resuming the
  3231.             animation. Default to FALSE. If FALSE then the animation
  3232.             will be played first, then the element in the sequence
  3233.             list will be played.
  3234.  
  3235.         - Style(stylename)
  3236.             The name of a style style being defined is derived from.
  3237.  
  3238.         - Tabs(Implicit(width), Explicit(tab, ...))
  3239.             A description of tab stops, relative to the background. If
  3240.             both Implicit and Explicit tabs are specified, explicit
  3241.             tabs are used first, and implicit tabs are used once the
  3242.             explicit tabs are used up.
  3243.  
  3244.             Implicit(width) set the distance between implied tab
  3245.             stops. This represents the number of pixels from each tab
  3246.             stop to the next. The width may be 1 or greater, and
  3247.             defaults to 50.
  3248.  
  3249.             Explicit(tab, ...) sets a list of one or more explicit tab
  3250.             stops. Each tab stop represents a number of pixels from
  3251.             the tab reference point, and may be 0 or greater. Any
  3252.             number of tab stops may be specified, but they must be
  3253.             listed in increasing order. There are no default Explicit
  3254.             tabs.
  3255.  
  3256.         - UserPalette( Clear(state), <palette options> )
  3257.             The user palette for this background. This defines
  3258.             specific colors to be mapped to user pen numbers during
  3259.             playback. These user pen numbers are used by other
  3260.             commands via the 'Pen' fill option to select colors for
  3261.             elements to be drawn in. During playback, these user pens
  3262.             may end up mapped to any playback pens, and the screen
  3263.             book will take care of converting one to the other. The
  3264.             net result is that elements may refer to a user pen
  3265.             number, and get the desired color, no matter which
  3266.             playback pen the user pen number is actually mapped to.
  3267.  
  3268.             Clear(state) determines whether user pens from the style
  3269.             (if any) are cleared before applying user pens specified
  3270.             in this UserPalette option.
  3271.  
  3272.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3273.             This describes the View used for this background. Any
  3274.             combination of suboptions may be specified to uniquely
  3275.             describe the View to be used.
  3276.  
  3277.             Mode(name) identifies the mode by a name (in string form).
  3278.  
  3279.             Size(w,h) identifies the View by the maximum display size
  3280.             it supports. this is the size of the ViewPort that is created.
  3281.  
  3282.             ColorModel(colors) identifies the View by
  3283.             the maximum number of colors it supports. This can be
  3284.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3285.             PaletteMapped.
  3286.  
  3287.         - Volume(volume)
  3288.             This specifies the volume for the movie / movieclip.
  3289.             Range is 0 to 255. Defaults to 255 meaning full
  3290.             volume. 0 is silence.
  3291.  
  3292.         - Wipe(wipename, <wipe options>)
  3293.             A description of the wipe used for wiping in the element.
  3294.             If no wipe is specified, the "Cut" wipe is used.
  3295.  
  3296. PictureStyle():
  3297.  
  3298.     This command creates a style object that can be used to specify a
  3299.     common set of options used by one or more Picture commands.
  3300.  
  3301.     Synopsis:
  3302.  
  3303.         PictureStyle( stylename
  3304.                 [, Face(<fill options>) ]
  3305.                 [, Margin(left, right, top, bottom) ]
  3306.                 [, Operation(state, <operation options>) ]
  3307.                 [, Palette( Clear(state), <palette options> ) ]
  3308.                 [, Style(stylename) ]
  3309.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  3310.                 [, UserPalette( Clear(state), <palette options> ) ]
  3311.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  3312.                 [, Wipe(wipename, <wipe options>) ]
  3313.                 );
  3314.  
  3315.     Examples:
  3316.  
  3317.         PictureStyle(MaryAnn,
  3318.             Operation(On, ImagePalette(RGBPen(1, $ff00ff, $ffff00))));
  3319.         PictureStyle(Ginger, Style(MaryAnn));
  3320.  
  3321.     Required Parameters Used by This Class:
  3322.  
  3323.         - stylename
  3324.             The name of the style being defined.
  3325.  
  3326.     Optional Parameters Supported by This Class:
  3327.  
  3328.         - Face(<fill options>)
  3329.             The appearance of the face of the element. For images,
  3330.             <fill options> defaults to nothing. For other elements,
  3331.             <fill options> defaults to RGB($ffffff).
  3332.  
  3333.         - Margin(left, right, top, bottom)
  3334.             This sets margins in the Background element to be used for
  3335.             positioning foreground elements on that background. The
  3336.             margin values may be 0 or greater, and all default to 0.
  3337.  
  3338.         - Operation(state, <operation options>)
  3339.             Specifies the operations done before drawing this image.
  3340.             The state defaults to off.
  3341.  
  3342.         - Palette( Clear(state), <palette options> )
  3343.             The palette used for this background. This defines
  3344.             specific colors to be mapped to specific pens at playback
  3345.             time.
  3346.  
  3347.             Clear(state) determines whether pens from the style
  3348.             (if any) are cleared before applying pens specified in
  3349.             this Palette option.
  3350.  
  3351.         - Style(stylename)
  3352.             The name of a style style being defined is derived from.
  3353.  
  3354.         - Tabs(Implicit(width), Explicit(tab, ...))
  3355.             A description of tab stops, relative to the background. If
  3356.             both Implicit and Explicit tabs are specified, explicit
  3357.             tabs are used first, and implicit tabs are used once the
  3358.             explicit tabs are used up.
  3359.  
  3360.             Implicit(width) set the distance between implied tab
  3361.             stops. This represents the number of pixels from each tab
  3362.             stop to the next. The width may be 1 or greater, and
  3363.             defaults to 50.
  3364.  
  3365.             Explicit(tab, ...) sets a list of one or more explicit tab
  3366.             stops. Each tab stop represents a number of pixels from
  3367.             the tab reference point, and may be 0 or greater. Any
  3368.             number of tab stops may be specified, but they must be
  3369.             listed in increasing order. There are no default Explicit
  3370.             tabs.
  3371.  
  3372.         - UserPalette( Clear(state), <palette options> )
  3373.             The user palette for this background. This defines
  3374.             specific colors to be mapped to user pen numbers during
  3375.             playback. These user pen numbers are used by other
  3376.             commands via the 'Pen' fill option to select colors for
  3377.             elements to be drawn in. During playback, these user pens
  3378.             may end up mapped to any playback pens, and the screen
  3379.             book will take care of converting one to the other. The
  3380.             net result is that elements may refer to a user pen
  3381.             number, and get the desired color, no matter which
  3382.             playback pen the user pen number is actually mapped to.
  3383.  
  3384.             Clear(state) determines whether user pens from the style
  3385.             (if any) are cleared before applying user pens specified
  3386.             in this UserPalette option.
  3387.  
  3388.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3389.             This describes the View used for this background. Any
  3390.             combination of suboptions may be specified to uniquely
  3391.             describe the View to be used.
  3392.  
  3393.             Mode(name) identifies the mode by a name (in string form).
  3394.  
  3395.             Size(w,h) identifies the View by the maximum display size
  3396.             it supports. this is the size of the ViewPort that is created.
  3397.  
  3398.             ColorModel(colors) identifies the View by
  3399.             the maximum number of colors it supports. This can be
  3400.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3401.             PaletteMapped.
  3402.  
  3403.         - Wipe(wipename, <wipe options>)
  3404.             A description of the wipe used for wiping in the element.
  3405.             If no wipe is specified, the "Cut" wipe is used.
  3406.  
  3407. Picture():
  3408.  
  3409.     This command creates a still image background.
  3410.  
  3411.     Synopsis:
  3412.  
  3413.         Picture( filename
  3414.                 [, Face(<fill options>) ]
  3415.                 [, Margin(left, right, top, bottom) ]
  3416.                 [, Operation(state, <operation options>) ]
  3417.                 [, Palette( Clear(state), <palette options> ) ]
  3418.                 [, Style(stylename) ]
  3419.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  3420.                 [, UserPalette( Clear(state), <palette options> ) ]
  3421.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  3422.                 [, Wipe(wipename, <wipe options>) ]
  3423.                 );
  3424.  
  3425.     Examples:
  3426.  
  3427.         Picture("pic1.bmp");
  3428.         Picture("pic2.bmp", Style(Ginger), Operation(On, Resize(800, 600)));
  3429.  
  3430.     Required Parameters Used by This Class:
  3431.  
  3432.         - filename
  3433.             The name of the file containing the image data.
  3434.  
  3435.     Optional Parameters Supported by This Class:
  3436.  
  3437.         - Face(<fill options>)
  3438.             The appearance of the face of the element. For images,
  3439.             <fill options> defaults to nothing. For other elements,
  3440.             <fill options> defaults to RGB($ffffff).
  3441.  
  3442.         - Margin(left, right, top, bottom)
  3443.             This sets margins in the Background element to be used for
  3444.             positioning foreground elements on that background. The
  3445.             margin values may be 0 or greater, and all default to 0.
  3446.  
  3447.         - Operation(state, <operation options>)
  3448.             Specifies the operations done before drawing this image.
  3449.             The state defaults to off.
  3450.  
  3451.         - Palette( Clear(state), <palette options> )
  3452.             The palette used for this background. This defines
  3453.             specific colors to be mapped to specific pens at playback
  3454.             time.
  3455.  
  3456.             Clear(state) determines whether pens from the style
  3457.             (if any) are cleared before applying pens specified in
  3458.             this Palette option.
  3459.  
  3460.         - Style(stylename)
  3461.             The name of a style style being defined is derived from.
  3462.  
  3463.         - Tabs(Implicit(width), Explicit(tab, ...))
  3464.             A description of tab stops, relative to the background. If
  3465.             both Implicit and Explicit tabs are specified, explicit
  3466.             tabs are used first, and implicit tabs are used once the
  3467.             explicit tabs are used up.
  3468.  
  3469.             Implicit(width) set the distance between implied tab
  3470.             stops. This represents the number of pixels from each tab
  3471.             stop to the next. The width may be 1 or greater, and
  3472.             defaults to 50.
  3473.  
  3474.             Explicit(tab, ...) sets a list of one or more explicit tab
  3475.             stops. Each tab stop represents a number of pixels from
  3476.             the tab reference point, and may be 0 or greater. Any
  3477.             number of tab stops may be specified, but they must be
  3478.             listed in increasing order. There are no default Explicit
  3479.             tabs.
  3480.  
  3481.         - UserPalette( Clear(state), <palette options> )
  3482.             The user palette for this background. This defines
  3483.             specific colors to be mapped to user pen numbers during
  3484.             playback. These user pen numbers are used by other
  3485.             commands via the 'Pen' fill option to select colors for
  3486.             elements to be drawn in. During playback, these user pens
  3487.             may end up mapped to any playback pens, and the screen
  3488.             book will take care of converting one to the other. The
  3489.             net result is that elements may refer to a user pen
  3490.             number, and get the desired color, no matter which
  3491.             playback pen the user pen number is actually mapped to.
  3492.  
  3493.             Clear(state) determines whether user pens from the style
  3494.             (if any) are cleared before applying user pens specified
  3495.             in this UserPalette option.
  3496.  
  3497.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3498.             This describes the View used for this background. Any
  3499.             combination of suboptions may be specified to uniquely
  3500.             describe the View to be used.
  3501.  
  3502.             Mode(name) identifies the mode by a name (in string form).
  3503.  
  3504.             Size(w,h) identifies the View by the maximum display size
  3505.             it supports. this is the size of the ViewPort that is created.
  3506.  
  3507.             ColorModel(colors) identifies the View by
  3508.             the maximum number of colors it supports. This can be
  3509.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3510.             PaletteMapped.
  3511.  
  3512.         - Wipe(wipename, <wipe options>)
  3513.             A description of the wipe used for wiping in the element.
  3514.             If no wipe is specified, the "Cut" wipe is used.
  3515.  
  3516. Foreground Commands
  3517. -------------------
  3518.  
  3519. AnimClipStyle():
  3520.  
  3521.     AnimClipStyle() creates a style object that can be used to specify a
  3522.     common set of options used by one or more AnimClip commands.
  3523.  
  3524.     Synopsis:
  3525.  
  3526.          AnimClipStyle( stylename,
  3527.                 [, Loops(loops) ]
  3528.                 [, Margin(left, right, top, bottom) ]
  3529.                 [, Operation(state, <operation options>) ]
  3530.                 [, Palette( Clear(state), <palette options> ) ]
  3531.                 [, Speed(speed) ]
  3532.                 [, StopAtFirstFrame(state) ]
  3533.                 [, Style(stylename) ]
  3534.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  3535.                 [, Transparent(state) ]
  3536.                 [, UserPalette( Clear(state), <palette options> ) ]
  3537.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  3538.                 [, Wait(state) ]
  3539.                 [, Wipe(wipename, <wipe options>) ]
  3540.                 );
  3541.  
  3542.     Examples:
  3543.  
  3544.          AnimClipStyle(Barnum, Speed(40));
  3545.          AnimClipStyle(Bailey, Style(Barnum), Speed(60), Wipe("FlyLeft"));
  3546.  
  3547.     Required Parameters Used by This Class:
  3548.  
  3549.         - stylename
  3550.             The name of the style being defined.
  3551.  
  3552.     Optional Parameters Supported by This Class:
  3553.  
  3554.         - Loops(loops)
  3555.             How may times to play the animation in a loop.
  3556.  
  3557.         - Margin(left, right, top, bottom)
  3558.             This sets margins in the Background element to be used for
  3559.             positioning foreground elements on that background. The
  3560.             margin values may be 0 or greater, and all default to 0.
  3561.  
  3562.         - Operation(state, <operation options>)
  3563.             Specifies the operations done before drawing this image.
  3564.             The state defaults to off.
  3565.  
  3566.         - Palette( Clear(state), <palette options> )
  3567.             The palette used for this background. This defines
  3568.             specific colors to be mapped to specific pens at playback
  3569.             time.
  3570.  
  3571.             Clear(state) determines whether pens from the style
  3572.             (if any) are cleared before applying pens specified in
  3573.             this Palette option.
  3574.  
  3575.         - Speed(speed)
  3576.             The speed of the animation in frames per second.
  3577.  
  3578.         - StopAtFirstFrame(state)
  3579.             Whether to stop the animation on the first frame after
  3580.             completion of the animation. If this is on, the first
  3581.             frame will be the last one shown. If this is off, the
  3582.             animation's last frame will be the last one shown. The
  3583.             state defaults to off.
  3584.  
  3585.         - Style(stylename)
  3586.             The name of a style style being defined is derived from.
  3587.  
  3588.         - Tabs(Implicit(width), Explicit(tab, ...))
  3589.             A description of tab stops, relative to the background. If
  3590.             both Implicit and Explicit tabs are specified, explicit
  3591.             tabs are used first, and implicit tabs are used once the
  3592.             explicit tabs are used up.
  3593.  
  3594.             Implicit(width) set the distance between implied tab
  3595.             stops. This represents the number of pixels from each tab
  3596.             stop to the next. The width may be 1 or greater, and
  3597.             defaults to 50.
  3598.  
  3599.             Explicit(tab, ...) sets a list of one or more explicit tab
  3600.             stops. Each tab stop represents a number of pixels from
  3601.             the tab reference point, and may be 0 or greater. Any
  3602.             number of tab stops may be specified, but they must be
  3603.             listed in increasing order. There are no default Explicit
  3604.             tabs.
  3605.  
  3606.         - Transparent(state)
  3607.             This specifies if there should be any transparent areas
  3608.             in the front image. This option is used with the
  3609.             Operation(TransparentRGB()) option to turn on
  3610.             transparency.
  3611.  
  3612.         - UserPalette( Clear(state), <palette options> )
  3613.             The user palette for this background. This defines
  3614.             specific colors to be mapped to user pen numbers during
  3615.             playback. These user pen numbers are used by other
  3616.             commands via the 'Pen' fill option to select colors for
  3617.             elements to be drawn in. During playback, these user pens
  3618.             may end up mapped to any playback pens, and the screen
  3619.             book will take care of converting one to the other. The
  3620.             net result is that elements may refer to a user pen
  3621.             number, and get the desired color, no matter which
  3622.             playback pen the user pen number is actually mapped to.
  3623.  
  3624.             Clear(state) determines whether user pens from the style
  3625.             (if any) are cleared before applying user pens specified
  3626.             in this UserPalette option.
  3627.  
  3628.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3629.             This describes the View used for this background. Any
  3630.             combination of suboptions may be specified to uniquely
  3631.             describe the View to be used.
  3632.  
  3633.             Mode(name) identifies the mode by a name (in string form).
  3634.  
  3635.             Size(w,h) identifies the View by the maximum display size
  3636.             it supports. this is the size of the ViewPort that is created.
  3637.  
  3638.             ColorModel(colors) identifies the View by
  3639.             the maximum number of colors it supports. This can be
  3640.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3641.             PaletteMapped.
  3642.  
  3643.         - Wait(state)
  3644.             Whether the player shall wait until the animation is
  3645.             finished before continuing with the sequence list.
  3646.             Defaults to FALSE. If FALSE we will not wait until the
  3647.             current animclip is finished before continuing the script.
  3648.  
  3649.         - Wipe(wipename, <wipe options>)
  3650.             A description of the wipe used for wiping in the element.
  3651.             If no wipe is specified, the "Cut" wipe is used.
  3652.  
  3653. AnimClip()
  3654.  
  3655.     AnimClip() creates an animated object that may be placed on a page.
  3656.  
  3657.     All <operation options> are available for AnimClip(), but, in most cases,
  3658.     performance will not be good enough for them to be used.
  3659.     
  3660.     Synopsis:
  3661.  
  3662.         AnimClip( filename,
  3663.                 [, Loops(loops) ]
  3664.                 [, Margin(left, right, top, bottom) ]
  3665.                 [, Operation(state, <operation options>) ]
  3666.                 [, Palette( Clear(state), <palette options> ) ]
  3667.                 [, Speed(speed) ]
  3668.                 [, StopAtFirstFrame(state) ]
  3669.                 [, Style(stylename) ]
  3670.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  3671.                 [, Transparent(state) ]
  3672.                 [, UserPalette( Clear(state), <palette options> ) ]
  3673.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  3674.                 [, Wait(state) ]
  3675.                 [, Wipe(wipename, <wipe options>) ]
  3676.                 );
  3677.         
  3678.     Examples:
  3679.  
  3680.         AnimClip("show.flc");
  3681.         AnimClip("show2.flc", Style(Barnum), Loops(5));
  3682.         
  3683.     Required Parameters Used by This Class:
  3684.  
  3685.         - filename
  3686.             The name of the file containing the image data.
  3687.  
  3688.     Optional Parameters Supported by This Class:
  3689.  
  3690.         - Loops(loops)
  3691.             How may times to play the animation in a loop.
  3692.  
  3693.         - Margin(left, right, top, bottom)
  3694.             This sets margins in the Background element to be used for
  3695.             positioning foreground elements on that background. The
  3696.             margin values may be 0 or greater, and all default to 0.
  3697.  
  3698.         - Operation(state, <operation options>)
  3699.             Specifies the operations done before drawing this image.
  3700.             The state defaults to off.
  3701.  
  3702.         - Palette( Clear(state), <palette options> )
  3703.             The palette used for this background. This defines
  3704.             specific colors to be mapped to specific pens at playback
  3705.             time.
  3706.  
  3707.             Clear(state) determines whether pens from the style
  3708.             (if any) are cleared before applying pens specified in
  3709.             this Palette option.
  3710.  
  3711.         - Speed(speed)
  3712.             The speed of the animation in frames per second.
  3713.  
  3714.         - StopAtFirstFrame(state)
  3715.             Whether to stop the animation on the first frame after
  3716.             completion of the animation. If this is on, the first
  3717.             frame will be the last one shown. If this is off, the
  3718.             animation's last frame will be the last one shown. The
  3719.             state defaults to off.
  3720.  
  3721.         - Style(stylename)
  3722.             The name of a style style being defined is derived from.
  3723.  
  3724.         - Tabs(Implicit(width), Explicit(tab, ...))
  3725.             A description of tab stops, relative to the background. If
  3726.             both Implicit and Explicit tabs are specified, explicit
  3727.             tabs are used first, and implicit tabs are used once the
  3728.             explicit tabs are used up.
  3729.  
  3730.             Implicit(width) set the distance between implied tab
  3731.             stops. This represents the number of pixels from each tab
  3732.             stop to the next. The width may be 1 or greater, and
  3733.             defaults to 50.
  3734.  
  3735.             Explicit(tab, ...) sets a list of one or more explicit tab
  3736.             stops. Each tab stop represents a number of pixels from
  3737.             the tab reference point, and may be 0 or greater. Any
  3738.             number of tab stops may be specified, but they must be
  3739.             listed in increasing order. There are no default Explicit
  3740.             tabs.
  3741.  
  3742.         - Transparent(state)
  3743.             This specifies if there should be any transparent areas
  3744.             in the front image. This option is used with the
  3745.             Operation(TransparentRGB()) option to turn on
  3746.             transparency.
  3747.  
  3748.         - UserPalette( Clear(state), <palette options> )
  3749.             The user palette for this background. This defines
  3750.             specific colors to be mapped to user pen numbers during
  3751.             playback. These user pen numbers are used by other
  3752.             commands via the 'Pen' fill option to select colors for
  3753.             elements to be drawn in. During playback, these user pens
  3754.             may end up mapped to any playback pens, and the screen
  3755.             book will take care of converting one to the other. The
  3756.             net result is that elements may refer to a user pen
  3757.             number, and get the desired color, no matter which
  3758.             playback pen the user pen number is actually mapped to.
  3759.  
  3760.             Clear(state) determines whether user pens from the style
  3761.             (if any) are cleared before applying user pens specified
  3762.             in this UserPalette option.
  3763.  
  3764.         - View(Mode(name), Size(width, height), ColorModel(colors))
  3765.             This describes the View used for this background. Any
  3766.             combination of suboptions may be specified to uniquely
  3767.             describe the View to be used.
  3768.  
  3769.             Mode(name) identifies the mode by a name (in string form).
  3770.  
  3771.             Size(w,h) identifies the View by the maximum display size
  3772.             it supports. this is the size of the ViewPort that is created.
  3773.  
  3774.             ColorModel(colors) identifies the View by
  3775.             the maximum number of colors it supports. This can be
  3776.             PaletteMapped, HiColor, or TrueColor, and defaults to
  3777.             PaletteMapped.
  3778.  
  3779.         - Wait(state)
  3780.             Whether the player shall wait until the animation is
  3781.             finished before continuing with the sequence list.
  3782.             Defaults to FALSE. If FALSE we will not wait until the
  3783.             current animclip is finished before continuing the script.
  3784.  
  3785.         - Wipe(wipename, <wipe options>)
  3786.             A description of the wipe used for wiping in the element.
  3787.             If no wipe is specified, the "Cut" wipe is used.
  3788.  
  3789. BoxStyle():
  3790.  
  3791.     This command creates a style object that can be used to specify a
  3792.     common set of options used by one or more Box commands.
  3793.  
  3794.     Synopsis:
  3795.  
  3796.         BoxStyle( stylename
  3797.                 [, Align(horizontal, vertical) ]
  3798.                 [, Antialias(state) ]
  3799.                 [, Backdrop(state, <fill options>) ]
  3800.                 [, Bevel(state, Thickness(pixels), Base(color),
  3801.                         Left(<fill options>), Right(<fill options>),
  3802.                         Top(<fill options>), Bottom(<fill options>)) ]
  3803.                 [, Border(left, right, top, bottom) ]
  3804.                 [, Face(state, <fill options>) ]
  3805.                 [, Focus(state, <fill options>) ]
  3806.                 [, Outline(state, Thickness(pixels), <fill options>) ]
  3807.                 [, Replace(state) ]
  3808.                 [, Shadow(state, Offset(horizontal, vertical), <fill options>) ]
  3809.                 [, Shift(x, y) ]
  3810.                 [, Style(stylename) ]
  3811.                 [, Transparent(state) ]
  3812.                 [, Wipe(wipename, <wipe options>) ]
  3813.                 );
  3814.  
  3815.     Examples:
  3816.  
  3817.         BoxStyle(Rowan, Wipe("Center", Speed(7)));
  3818.         BoxStyle(Martin, Style(Rowan), Outline(on, Thickness(2), Pen(3)));
  3819.  
  3820.     Required Parameters Used by This Class:
  3821.  
  3822.         - stylename
  3823.             The name of the style being defined.
  3824.  
  3825.     Optional Parameters Supported by This Class:
  3826.  
  3827.         - Align(horizontal, vertical)
  3828.             This determines whether the element is positioned based on
  3829.             its X,Y values, or by the Background's size and margins.
  3830.             These tables describe the alignment values and their
  3831.             meanings:
  3832.  
  3833.             Horizontal  Description
  3834.             ----------  -----------
  3835.             None        The left edge of the element's face is
  3836.                         positioned relative to the left edge of the
  3837.                         background. The element's X value and the
  3838.                         cumulative effect of all applicable Offset
  3839.                         commands are used for positioning the element.
  3840.  
  3841.             Left        The left edge of the element's face is
  3842.                         positioned at the Background's left margin.
  3843.                         The element's X value and all applicable
  3844.                         Offset commands are ignored.
  3845.  
  3846.             Center      The vertical centerline of the element's face
  3847.                         is positioned midway between the Background's
  3848.                         left and right margins. The element's X value
  3849.                         and all applicable Offset commands are
  3850.                         ignored.
  3851.  
  3852.             Right       The right edge of the element's face is
  3853.                         positioned at the Background's right margin.
  3854.                         The element's X value and all applicable
  3855.                         Offset commands are ignored.
  3856.  
  3857.             Vertical    Description
  3858.             --------    -----------
  3859.             None        The top edge of the element's face is
  3860.                         positioned relative to the left edge of the
  3861.                         background. The element's Y value and the
  3862.                         cumulative effect of all applicable Offset
  3863.                         commands are used for positioning the element.
  3864.  
  3865.             Top         The top edge of the element's face is
  3866.                         positioned at the Background's top margin. The
  3867.                         element's Y value and all applicable Offset
  3868.                         commands are ignored.
  3869.  
  3870.             Middle      The horizontal centerline of the element's
  3871.                         face is positioned midway between the
  3872.                         Background's top and bottom margins. The
  3873.                         element's Y value and all applicable Offset
  3874.                         commands are ignored.
  3875.  
  3876.             Bottom      The bottom edge of the element's face is
  3877.                         positioned at the Background's bottom margin.
  3878.                         The element's Y value and all applicable
  3879.                         Offset commands are ignored.
  3880.  
  3881.             If this option is not specified, the element's alignment
  3882.             defaults to (None, None).
  3883.  
  3884.         - Antialias(state)
  3885.             This determines if the element is antialiased. The state
  3886.             defaults to off.
  3887.  
  3888.         - Backdrop(state, <fill options>)
  3889.             The appearance of the bounding box of the element behind
  3890.             the face and other style options applied to the element.
  3891.             The state defaults to off. <fill options> defaults to
  3892.             RGB($7f7f7f).
  3893.  
  3894.         - Bevel(state, Thickness(pixels), Base(color),
  3895.                 Left(<fill options>), Right(<fill options>),
  3896.                 Top(<fill options>), Bottom(<fill options>))
  3897.             A beveled edge added outside the element's bounding box.
  3898.             The state defaults to off. Thickness may be 1 or greater,
  3899.             and defaults to 2. Base is a hint to the authoring station
  3900.             to assist with choosing bevel colors, and is not used by
  3901.             the system otherwise. The Base color is specified as a
  3902.             4-byte hexadecimal number, where each byte encodes zero,
  3903.             red, green, and blue, from MSB to LSB. The bevel colors
  3904.             default to shades of grey.
  3905.  
  3906.         - Border(left, right, top, bottom)
  3907.             Extra space added to the edges of the element, measured in
  3908.             pixels. This effectively extends the element's bounding
  3909.             box without affecting the position of the element's face
  3910.             or the size of its face image. The border values may be 0
  3911.             or greater, and all default to 0.
  3912.  
  3913.         - Face(state, <fill options>)
  3914.             The appearance of the face of the element. The state
  3915.             defaults to on. For images, <fill options> defaults to
  3916.             nothing. For other elements, <fill options> defaults to
  3917.             RGB($ffffff).
  3918.  
  3919.         - Focus(state, <fill options>)
  3920.             How to highlight the face of the last-wiped-in element.
  3921.             When a new element gets wiped in, the face of this element
  3922.             reverts to its normal face appearance. If a group of
  3923.             elements are wiped in together, each element with this
  3924.             option specified will be highlighted. The state defaults
  3925.             to off. <fill options> defaults to RGB($ffff7f).
  3926.  
  3927.         - Outline(state, Thickness(pixels), <fill options>)
  3928.             A colored outline added to the element. The state defaults
  3929.             to off. Thickness may be 1 or greater, and defaults to 1.
  3930.             <fill options> defaults to RGB(0).
  3931.  
  3932.         - Replace(state)
  3933.             This determines whether an element command will create a
  3934.             new element or replace an existing element previously
  3935.             created by the same command. If the state is On, the
  3936.             element command will replace the previous element created
  3937.             by the same command. If the state is Off, a new element
  3938.             will be created, and any previous elements created by the
  3939.             same command will remain on the screen. This defaults to
  3940.             Replace(On).
  3941.  
  3942.         - Shadow(state, Offset(horizontal, vertical), <fill options>)
  3943.             A drop shadow drawn behind the element, drawn in a solid
  3944.             color. The state defaults to off. Either or both of the
  3945.             offsets can be positive or negative, and are measured in
  3946.             pixels. <fill options> defaults to RGB(0).
  3947.  
  3948.         - Shift(x, y)
  3949.             The amount the element's face, outline, and shadow are
  3950.             shifted from the specified element position. This is
  3951.             intended to be used for different button states to move
  3952.             the face without moving the backdrop or bevel. The offset
  3953.             values may be any numbers, and default to (0, 0).
  3954.  
  3955.         - Style(stylename)
  3956.             The name of a style style being defined is derived from.
  3957.  
  3958.         - Transparent(state)
  3959.             Whether or not pen zero is transparent. The state defaults
  3960.             to off. If this is on, any portion of the foreground
  3961.             element drawn in pen zero will not be visible, but will
  3962.             show through to the image beneath this foreground element.
  3963.  
  3964.         - Wipe(wipename, <wipe options>)
  3965.             A description of the wipe used for wiping in the element.
  3966.             If no wipe is specified, the "Cut" wipe is used.
  3967.  
  3968. Box():
  3969.  
  3970.     This command creates a foreground object that is a rectangle drawn
  3971.     in a solid color or a pattern.
  3972.  
  3973.     Synopsis:
  3974.  
  3975.         Box( X, Y , width, height
  3976.                 [, Align(horizontal, vertical) ]
  3977.                 [, Antialias(state) ]
  3978.                 [, Backdrop(state, <fill options>) ]
  3979.                 [, Bevel(state, Thickness(pixels), Base(color),
  3980.                         Left(<fill options>), Right(<fill options>),
  3981.                         Top(<fill options>), Bottom(<fill options>)) ]
  3982.                 [, Border(left, right, top, bottom) ]
  3983.                 [, Face(state, <fill options>) ]
  3984.                 [, Focus(state, <fill options>) ]
  3985.                 [, Outline(state, Thickness(pixels), <fill options>) ]
  3986.                 [, Replace(state) ]
  3987.                 [, Shadow(state, Offset(horizontal, vertical), <fill options>) ]
  3988.                 [, Shift(x, y) ]
  3989.                 [, Style(stylename) ]
  3990.                 [, Transparent(state) ]
  3991.                 [, Wipe(wipename, <wipe options>) ]
  3992.                 );
  3993.  
  3994.     Examples:
  3995.  
  3996.         Box(x, y, width, height, Face(Pen(4)));
  3997.         Box(x, y, width, height, Style(Martin), Face(on, RGB($326496)));
  3998.  
  3999.     Required Parameters Used by This Class:
  4000.  
  4001.         - X
  4002.             The horizontal position of the element's face. This
  4003.             position may be modified by the effects of Offset commands
  4004.             in containing clusters, and by Foreground's Align option.
  4005.             See those options' descriptions for more details.
  4006.  
  4007.         - Y 
  4008.             The vertical position of the element's face. This position
  4009.             may be modified by the effects of Offset commands in
  4010.             containing clusters, and by Foreground's Align option. See
  4011.             those options' descriptions for more details.
  4012.  
  4013.         - width
  4014.             The horizontal dimension of the rectangle.
  4015.  
  4016.         - height
  4017.             The vertical dimension of the rectangle.
  4018.  
  4019.     Optional Parameters Supported by This Class:
  4020.  
  4021.         - Align(horizontal, vertical)
  4022.             This determines whether the element is positioned based on
  4023.             its X,Y values, or by the Background's size and margins.
  4024.             These tables describe the alignment values and their
  4025.             meanings:
  4026.  
  4027.             Horizontal  Description
  4028.             ----------  -----------
  4029.             None        The left edge of the element's face is
  4030.                         positioned relative to the left edge of the
  4031.                         background. The element's X value and the
  4032.                         cumulative effect of all applicable Offset
  4033.                         commands are used for positioning the element.
  4034.  
  4035.             Left        The left edge of the element's face is
  4036.                         positioned at the Background's left margin.
  4037.                         The element's X value and all applicable
  4038.                         Offset commands are ignored.
  4039.  
  4040.             Center      The vertical centerline of the element's face
  4041.                         is positioned midway between the Background's
  4042.                         left and right margins. The element's X value
  4043.                         and all applicable Offset commands are
  4044.                         ignored.
  4045.  
  4046.             Right       The right edge of the element's face is
  4047.                         positioned at the Background's right margin.
  4048.                         The element's X value and all applicable
  4049.                         Offset commands are ignored.
  4050.  
  4051.             Vertical    Description
  4052.             --------    -----------
  4053.             None        The top edge of the element's face is
  4054.                         positioned relative to the left edge of the
  4055.                         background. The element's Y value and the
  4056.                         cumulative effect of all applicable Offset
  4057.                         commands are used for positioning the element.
  4058.  
  4059.             Top         The top edge of the element's face is
  4060.                         positioned at the Background's top margin. The
  4061.                         element's Y value and all applicable Offset
  4062.                         commands are ignored.
  4063.  
  4064.             Middle      The horizontal centerline of the element's
  4065.                         face is positioned midway between the
  4066.                         Background's top and bottom margins. The
  4067.                         element's Y value and all applicable Offset
  4068.                         commands are ignored.
  4069.  
  4070.             Bottom      The bottom edge of the element's face is
  4071.                         positioned at the Background's bottom margin.
  4072.                         The element's Y value and all applicable
  4073.                         Offset commands are ignored.
  4074.  
  4075.             If this option is not specified, the element's alignment
  4076.             defaults to (None, None).
  4077.  
  4078.         - Antialias(state)
  4079.             This determines if the element is antialiased. The state
  4080.             defaults to off.
  4081.  
  4082.         - Backdrop(state, <fill options>)
  4083.             The appearance of the bounding box of the element behind
  4084.             the face and other style options applied to the element.
  4085.             The state defaults to off. <fill options> defaults to
  4086.             RGB($7f7f7f).
  4087.  
  4088.         - Bevel(state, Thickness(pixels), Base(color),
  4089.                 Left(<fill options>), Right(<fill options>),
  4090.                 Top(<fill options>), Bottom(<fill options>))
  4091.             A beveled edge added outside the element's bounding box.
  4092.             The state defaults to off. Thickness may be 1 or greater,
  4093.             and defaults to 2. Base is a hint to the authoring station
  4094.             to assist with choosing bevel colors, and is not used by
  4095.             the system otherwise. The Base color is specified as a
  4096.             4-byte hexadecimal number, where each byte encodes zero,
  4097.             red, green, and blue, from MSB to LSB. The bevel colors
  4098.             default to shades of grey.
  4099.  
  4100.         - Border(left, right, top, bottom)
  4101.             Extra space added to the edges of the element, measured in
  4102.             pixels. This effectively extends the element's bounding
  4103.             box without affecting the position of the element's face
  4104.             or the size of its face image. The border values may be 0
  4105.             or greater, and all default to 0.
  4106.  
  4107.         - Face(state, <fill options>)
  4108.             The appearance of the face of the element. The state
  4109.             defaults to on. For images, <fill options> defaults to
  4110.             nothing. For other elements, <fill options> defaults to
  4111.             RGB($ffffff).
  4112.  
  4113.         - Focus(state, <fill options>)
  4114.             How to highlight the face of the last-wiped-in element.
  4115.             When a new element gets wiped in, the face of this element
  4116.             reverts to its normal face appearance. If a group of
  4117.             elements are wiped in together, each element with this
  4118.             option specified will be highlighted. The state defaults
  4119.             to off. <fill options> defaults to RGB($ffff7f).
  4120.  
  4121.         - Outline(state, Thickness(pixels), <fill options>)
  4122.             A colored outline added to the element. The state defaults
  4123.             to off. Thickness may be 1 or greater, and defaults to 1.
  4124.             <fill options> defaults to RGB(0).
  4125.  
  4126.         - Replace(state)
  4127.             This determines whether an element command will create a
  4128.             new element or replace an existing element previously
  4129.             created by the same command. If the state is On, the
  4130.             element command will replace the previous element created
  4131.             by the same command. If the state is Off, a new element
  4132.             will be created, and any previous elements created by the
  4133.             same command will remain on the screen. This defaults to
  4134.             Replace(On).
  4135.  
  4136.         - Shadow(state, Offset(horizontal, vertical), <fill options>)
  4137.             A drop shadow drawn behind the element, drawn in a solid
  4138.             color. The state defaults to off. Either or both of the
  4139.             offsets can be positive or negative, and are measured in
  4140.             pixels. <fill options> defaults to RGB(0).
  4141.  
  4142.         - Shift(x, y)
  4143.             The amount the element's face, outline, and shadow are
  4144.             shifted from the specified element position. This is
  4145.             intended to be used for different button states to move
  4146.             the face without moving the backdrop or bevel. The offset
  4147.             values may be any numbers, and default to (0, 0).
  4148.             The amount the element's face, outline, and shadow are
  4149.             shifted from the specified element position. This is
  4150.             intended to be used for different button states to move
  4151.             the face without moving the backdrop or bevel. The offset
  4152.             values may be any numbers, and default to (0, 0).
  4153.  
  4154.         - Style(stylename)
  4155.             The name of a style style being defined is derived from.
  4156.  
  4157.         - Transparent(state)
  4158.             Whether or not pen zero is transparent. The state defaults
  4159.             to off. If this is on, any portion of the foreground
  4160.             element drawn in pen zero will not be visible, but will
  4161.             show through to the image beneath this foreground element.
  4162.  
  4163.         - Wipe(wipename, <wipe options>)
  4164.             A description of the wipe used for wiping in the element.
  4165.             If no wipe is specified, the "Cut" wipe is used.
  4166.  
  4167. Button():
  4168.  
  4169.     Button() creates an interactive element on the display.
  4170.     Buttons do not support styles.
  4171.  
  4172.     Synopsis:
  4173.  
  4174.         Button(
  4175.                 [ Wipe(wipename, <wipe options>) ]
  4176.                 [ HotKey( [shift-][alt-][ctrl-]<keyname> ) ]
  4177.                 [ BoxedHit(on|off) ]
  4178.                 [ LinkPositions(on|off) ]
  4179.                 [ MatchSize(on|off) ]
  4180.                 [ Normal(
  4181.                     [ Text|Clip|AnimClip|MovieClip|Box( <command params here> ), ]
  4182.                     [ Use|Goto(<branch parameters>) ] ) ]
  4183.                 [ Highlight( [ MousePointer( <filename> ), ]
  4184.                     [ Text|Clip|AnimClip|MovieClip|Box( <command params here> ), ]
  4185.                     [ Use|Goto(<branch parameters>) ] ) ]
  4186.                 [ Select( [ MousePointer( <filename> ), ]
  4187.                     [ Text|Clip|AnimClip|MovieClip|Box( <command params here> ), ]
  4188.                     [ Use|Goto(<branch parameters>) ] ) ]
  4189.                 [ SelectDown( [ Use|Goto(<branch parameters>) ] ) ]
  4190.                 );
  4191.  
  4192.     Examples:
  4193.  
  4194.         Button(HotKey("F"), MatchSize(On),
  4195.             Normal(Text(20, 20, "hello", Wrap(Off, Auto(610)))),
  4196.             Select(Goto("btn: hello", Bookmark(On))));
  4197.         Button(HotKey("F12"), MatchSize(On),
  4198.             Normal(Text(20, 20, "Test button",
  4199.                 Backdrop(On, Image("Scala:\buttons\steel\steel01.bmp")),
  4200.                 Wrap(Off, Auto(610)))),
  4201.             Highlight(Text(20, 20, "Test button",
  4202.                 Backdrop(On, Image("Scala:\buttons\steel\steel02.bmp")),
  4203.                 Wrap(Off, Auto(610)))),
  4204.             Select(Text(20, 20, "Test button",
  4205.                 Backdrop(On, Image("Scala:\buttons\steel\steel03.bmp")),
  4206.                 Shift(10, 10), Wrap(Off, Auto(610))), Goto("_TempName1")));
  4207.         Button(Wipe("Flyon", Direction(0)), HotKey("Space"), MatchSize(On),
  4208.             Normal(Text(20, 20, "foo", Wrap(Off, Auto(610)))),
  4209.             Select(Text(20, 20, "foo", Wrap(Off, Auto(610))), Return()));
  4210.  
  4211.     Optional parameters:
  4212.  
  4213.         - Wipe(wipename, <wipe options>)
  4214.             A description of the wipe used for wiping in the element.
  4215.             If no wipe is specified, the "Cut" wipe is used.
  4216.  
  4217.         - HotKey( [shift-][alt-][ctrl-]<keyname> )
  4218.             Specifies the key that triggers the button's selection. Buttons
  4219.             support all the keys below along with all of the qualifiers,
  4220.             although many of them don't really make sense to use
  4221.             (shift-1, ctrl-alt-DEL).
  4222.  
  4223.                 UP, DOWN, LEFT, RIGHT, ENTER, HELP, TAB,
  4224.                 SPACE, BACKSPACE, ESCAPE, F1-F12, A-Z,
  4225.                 !\#$%&'()*+,-./:;<=>?@[\]^_`{|}~
  4226.  
  4227.             The authoring station only allows A-Z, 0-9, F1-F12, and SPACE,
  4228.             and doesn't permit modifiers.
  4229.  
  4230.             Keys are specified in double quotes (they are string parameters).
  4231.             For example:
  4232.  
  4233.                 HotKey("SHIFT-ENTER"),
  4234.                 HotKey("ALT-F1"),
  4235.                 HotKey("&"),
  4236.                 HotKey("CTRL-R"),
  4237.  
  4238.         - BoxedHit(on|off)
  4239.             Tells the button to use the bounding box as the hit area
  4240.             for the mouse.
  4241.  
  4242.         - LinkPositions(on|off)
  4243.             Pertains only to authoring.
  4244.  
  4245.         - MatchSize(on|off)
  4246.             If on, all faces will have the same rectangular size.
  4247.  
  4248.         - Normal(
  4249.                 [ Text|Clip|AnimClip|MovieClip|Box( <command params here> ), ]
  4250.                 [ Use|Goto(<branch parameters>) ]*
  4251.                 ),
  4252.             The Text, Clip, AnimClip, MovieClip, or Box option is an
  4253.             embedded Element command.  With the exception of the Wipe
  4254.             options, the embedded Element command supports all normal
  4255.             options. Wipe options will be ignored.
  4256.  
  4257.             The Use|Goto branches are embedded player branches and accept
  4258.             their normal parameters.
  4259.  
  4260.         - Highlight(
  4261.                 [ MousePointer( <filename> ), ]
  4262.                 [ Text|Clip|AnimClip|MovieClip|Box( <command params here> ), ]
  4263.                 [ Use|Goto(<branch parameters>) ]*
  4264.                 ),
  4265.             The Text, Clip, AnimClip, MovieClip, or Box option is an
  4266.             embedded Element command.  With the exception of the Wipe
  4267.             options, the embedded Element command supports all normal
  4268.             options. Wipe options will be ignored.
  4269.  
  4270.             The Use|Goto branches are embedded player branches and accept
  4271.             their normal parameters.
  4272.  
  4273.         - Select(
  4274.                 [ MousePointer( <filename> ), ]
  4275.                 [ Text|Clip|AnimClip|MovieClip|Box( <command params here> ), ]
  4276.                 [ Use|Goto(<branch parameters>) ]*
  4277.                 ),
  4278.             The Text, Clip, AnimClip, MovieClip, or Box option is an
  4279.             embedded Element command.  With the exception of the Wipe
  4280.             options, the embedded Element command supports all normal
  4281.             options. Wipe options will be ignored.
  4282.  
  4283.             The Use|Goto branches are embedded player branches and accept
  4284.             their normal parameters.
  4285.  
  4286.         - SelectDown(
  4287.                 [ Use|Goto(<branch parameters>) ]*
  4288.                 ),
  4289.             The Use|Goto branches are embedded player branches and accept
  4290.             their normal parameters.
  4291.  
  4292. ClipStyle():
  4293.  
  4294.     This command creates a style object that can be used to specify a
  4295.     common set of options used by one or more Clip commands.
  4296.  
  4297.     Synopsis:
  4298.  
  4299.         ClipStyle( stylename
  4300.                 [, Align(horizontal, vertical) ]
  4301.                 [, Antialias(state) ]
  4302.                 [, Backdrop(state, <fill options>) ]
  4303.                 [, Bevel(state, Thickness(pixels), Base(color),
  4304.                         Left(<fill options>), Right(<fill options>),
  4305.                         Top(<fill options>), Bottom(<fill options>)) ]
  4306.                 [, Border(left, right, top, bottom) ]
  4307.                 [, Face(state, <fill options>) ]
  4308.                 [, Focus(state, <fill options>) ]
  4309.                 [, Operation(state, <operation options>) ]
  4310.                 [, Outline(state, Thickness(pixels), <fill options>) ]
  4311.                 [, Replace(state) ]
  4312.                 [, Shadow(state, Offset(horizontal, vertical), <fill options>) ]
  4313.                 [, Shift(x, y) ]
  4314.                 [, Style(stylename) ]
  4315.                 [, Transparent(state) ]
  4316.                 [, Wipe(wipename, <wipe options>) ]
  4317.                 );
  4318.  
  4319.     Examples:
  4320.  
  4321.         ClipStyle(Ricky, Operation(On, Crop(10, 10, 80, 80)));
  4322.         ClipStyle(Lucy, Style(Ricky), Operation(On, Resize(100, 100)));
  4323.  
  4324.     Required Parameters Used by This Class:
  4325.  
  4326.         - stylename
  4327.             The name of the style being defined.
  4328.  
  4329.     Optional Parameters Supported by This Class:
  4330.  
  4331.         - Align(horizontal, vertical)
  4332.             This determines whether the element is positioned based on
  4333.             its X,Y values, or by the Background's size and margins.
  4334.             These tables describe the alignment values and their
  4335.             meanings:
  4336.  
  4337.             Horizontal  Description
  4338.             ----------  -----------
  4339.             None        The left edge of the element's face is
  4340.                         positioned relative to the left edge of the
  4341.                         background. The element's X value and the
  4342.                         cumulative effect of all applicable Offset
  4343.                         commands are used for positioning the element.
  4344.  
  4345.             Left        The left edge of the element's face is
  4346.                         positioned at the Background's left margin.
  4347.                         The element's X value and all applicable
  4348.                         Offset commands are ignored.
  4349.  
  4350.             Center      The vertical centerline of the element's face
  4351.                         is positioned midway between the Background's
  4352.                         left and right margins. The element's X value
  4353.                         and all applicable Offset commands are
  4354.                         ignored.
  4355.  
  4356.             Right       The right edge of the element's face is
  4357.                         positioned at the Background's right margin.
  4358.                         The element's X value and all applicable
  4359.                         Offset commands are ignored.
  4360.  
  4361.             Vertical    Description
  4362.             --------    -----------
  4363.             None        The top edge of the element's face is
  4364.                         positioned relative to the left edge of the
  4365.                         background. The element's Y value and the
  4366.                         cumulative effect of all applicable Offset
  4367.                         commands are used for positioning the element.
  4368.  
  4369.             Top         The top edge of the element's face is
  4370.                         positioned at the Background's top margin. The
  4371.                         element's Y value and all applicable Offset
  4372.                         commands are ignored.
  4373.  
  4374.             Middle      The horizontal centerline of the element's
  4375.                         face is positioned midway between the
  4376.                         Background's top and bottom margins. The
  4377.                         element's Y value and all applicable Offset
  4378.                         commands are ignored.
  4379.  
  4380.             Bottom      The bottom edge of the element's face is
  4381.                         positioned at the Background's bottom margin.
  4382.                         The element's Y value and all applicable
  4383.                         Offset commands are ignored.
  4384.  
  4385.             If this option is not specified, the element's alignment
  4386.             defaults to (None, None).
  4387.  
  4388.         - Antialias(state)
  4389.             This determines if the element is antialiased. The state
  4390.             defaults to off.
  4391.  
  4392.         - Backdrop(state, <fill options>)
  4393.             The appearance of the bounding box of the element behind
  4394.             the face and other style options applied to the element.
  4395.             The state defaults to off. <fill options> defaults to
  4396.             RGB($7f7f7f).
  4397.  
  4398.         - Bevel(state, Thickness(pixels), Base(color),
  4399.                 Left(<fill options>), Right(<fill options>),
  4400.                 Top(<fill options>), Bottom(<fill options>))
  4401.             A beveled edge added outside the element's bounding box.
  4402.             The state defaults to off. Thickness may be 1 or greater,
  4403.             and defaults to 2. Base is a hint to the authoring station
  4404.             to assist with choosing bevel colors, and is not used by
  4405.             the system otherwise. The Base color is specified as a
  4406.             4-byte hexadecimal number, where each byte encodes zero,
  4407.             red, green, and blue, from MSB to LSB. The bevel colors
  4408.             default to shades of grey.
  4409.  
  4410.         - Border(left, right, top, bottom)
  4411.             Extra space added to the edges of the element, measured in
  4412.             pixels. This effectively extends the element's bounding
  4413.             box without affecting the position of the element's face
  4414.             or the size of its face image. The border values may be 0
  4415.             or greater, and all default to 0.
  4416.  
  4417.         - Face(state, <fill options>)
  4418.             The appearance of the face of the element. The state
  4419.             defaults to on. For images, <fill options> defaults to
  4420.             nothing. For other elements, <fill options> defaults to
  4421.             RGB($ffffff).
  4422.  
  4423.         - Focus(state, <fill options>)
  4424.             How to highlight the face of the last-wiped-in element.
  4425.             When a new element gets wiped in, the face of this element
  4426.             reverts to its normal face appearance. If a group of
  4427.             elements are wiped in together, each element with this
  4428.             option specified will be highlighted. The state defaults
  4429.             to off. <fill options> defaults to RGB($ffff7f).
  4430.  
  4431.         - Operation(state, <operation options>)
  4432.             Specifies the operations done before drawing this image.
  4433.             The state defaults to off.
  4434.  
  4435.         - Outline(state, Thickness(pixels), <fill options>)
  4436.             A colored outline added to the element. The state defaults
  4437.             to off. Thickness may be 1 or greater, and defaults to 1.
  4438.             <fill options> defaults to RGB(0).
  4439.  
  4440.         - Replace(state)
  4441.             This determines whether an element command will create a
  4442.             new element or replace an existing element previously
  4443.             created by the same command. If the state is On, the
  4444.             element command will replace the previous element created
  4445.             by the same command. If the state is Off, a new element
  4446.             will be created, and any previous elements created by the
  4447.             same command will remain on the screen. This defaults to
  4448.             Replace(On).
  4449.  
  4450.         - Shadow(state, Offset(horizontal, vertical), <fill options>)
  4451.             A drop shadow drawn behind the element, drawn in a solid
  4452.             color. The state defaults to off. Either or both of the
  4453.             offsets can be positive or negative, and are measured in
  4454.             pixels. <fill options> defaults to RGB(0).
  4455.  
  4456.         - Shift(x, y)
  4457.             The amount the element's face, outline, and shadow are
  4458.             shifted from the specified element position. This is
  4459.             intended to be used for different button states to move
  4460.             the face without moving the backdrop or bevel. The offset
  4461.             values may be any numbers, and default to (0, 0).
  4462.  
  4463.         - Style(stylename)
  4464.             The name of a style style being defined is derived from.
  4465.  
  4466.         - Transparent(state)
  4467.             Whether or not pen zero is transparent. The state defaults
  4468.             to off. If this is on, any portion of the foreground
  4469.             element drawn in pen zero will not be visible, but will
  4470.             show through to the image beneath this foreground element.
  4471.  
  4472.         - Wipe(wipename, <wipe options>)
  4473.             A description of the wipe used for wiping in the element.
  4474.             If no wipe is specified, the "Cut" wipe is used.
  4475.  
  4476. Clip():
  4477.  
  4478.     This command creates a foreground object that is a rectangle
  4479.     drawn with a still image.
  4480.  
  4481.     Synopsis:
  4482.  
  4483.         Clip( X, Y , filename
  4484.                 [, Align(horizontal, vertical) ]
  4485.                 [, Antialias(state) ]
  4486.                 [, Backdrop(state, <fill options>) ]
  4487.                 [, Bevel(state, Thickness(pixels), Base(color),
  4488.                         Left(<fill options>), Right(<fill options>),
  4489.                         Top(<fill options>), Bottom(<fill options>)) ]
  4490.                 [, Border(left, right, top, bottom) ]
  4491.                 [, Face(state, <fill options>) ]
  4492.                 [, Focus(state, <fill options>) ]
  4493.                 [, Operation(state, <operation options>) ]
  4494.                 [, Outline(state, Thickness(pixels), <fill options>) ]
  4495.                 [, Replace(state) ]
  4496.                 [, Shadow(state, Offset(horizontal, vertical), <fill options>) ]
  4497.                 [, Shift(x, y) ]
  4498.                 [, Style(stylename) ]
  4499.                 [, Transparent(state) ]
  4500.                 [, Wipe(wipename, <wipe options>) ]
  4501.                 );
  4502.  
  4503.     Examples:
  4504.  
  4505.         Clip(x, y, "pic3.bmp");
  4506.         Clip(x, y, "pic3.bmp", Style(Lucy), Bevel(on));
  4507.  
  4508.     Required Parameters Used by This Class:
  4509.  
  4510.         - X
  4511.             The horizontal position of the element's face. This
  4512.             position may be modified by the effects of Offset commands
  4513.             in containing clusters, and by Foreground's Align option.
  4514.             See those options' descriptions for more details.
  4515.  
  4516.         - Y 
  4517.             The vertical position of the element's face. This position
  4518.             may be modified by the effects of Offset commands in
  4519.             containing clusters, and by Foreground's Align option. See
  4520.             those options' descriptions for more details.
  4521.  
  4522.         - filename
  4523.             The name of the file containing the image data.
  4524.  
  4525.     Optional Parameters Supported by This Class:
  4526.  
  4527.         - Align(horizontal, vertical)
  4528.             This determines whether the element is positioned based on
  4529.             its X,Y values, or by the Background's size and margins.
  4530.             These tables describe the alignment values and their
  4531.             meanings:
  4532.  
  4533.             Horizontal  Description
  4534.             ----------  -----------
  4535.             None        The left edge of the element's face is
  4536.                         positioned relative to the left edge of the
  4537.                         background. The element's X value and the
  4538.                         cumulative effect of all applicable Offset
  4539.                         commands are used for positioning the element.
  4540.  
  4541.             Left        The left edge of the element's face is
  4542.                         positioned at the Background's left margin.
  4543.                         The element's X value and all applicable
  4544.                         Offset commands are ignored.
  4545.  
  4546.             Center      The vertical centerline of the element's face
  4547.                         is positioned midway between the Background's
  4548.                         left and right margins. The element's X value
  4549.                         and all applicable Offset commands are
  4550.                         ignored.
  4551.  
  4552.             Right       The right edge of the element's face is
  4553.                         positioned at the Background's right margin.
  4554.                         The element's X value and all applicable
  4555.                         Offset commands are ignored.
  4556.  
  4557.             Vertical    Description
  4558.             --------    -----------
  4559.             None        The top edge of the element's face is
  4560.                         positioned relative to the left edge of the
  4561.                         background. The element's Y value and the
  4562.                         cumulative effect of all applicable Offset
  4563.                         commands are used for positioning the element.
  4564.  
  4565.             Top         The top edge of the element's face is
  4566.                         positioned at the Background's top margin. The
  4567.                         element's Y value and all applicable Offset
  4568.                         commands are ignored.
  4569.  
  4570.             Middle      The horizontal centerline of the element's
  4571.                         face is positioned midway between the
  4572.                         Background's top and bottom margins. The
  4573.                         element's Y value and all applicable Offset
  4574.                         commands are ignored.
  4575.  
  4576.             Bottom      The bottom edge of the element's face is
  4577.                         positioned at the Background's bottom margin.
  4578.                         The element's Y value and all applicable
  4579.                         Offset commands are ignored.
  4580.  
  4581.             If this option is not specified, the element's alignment
  4582.             defaults to (None, None).
  4583.  
  4584.         - Antialias(state)
  4585.             This determines if the element is antialiased. The state
  4586.             defaults to off.
  4587.  
  4588.         - Backdrop(state, <fill options>)
  4589.             The appearance of the bounding box of the element behind
  4590.             the face and other style options applied to the element.
  4591.             The state defaults to off. <fill options> defaults to
  4592.             RGB($7f7f7f).
  4593.  
  4594.         - Bevel(state, Thickness(pixels), Base(color),
  4595.                 Left(<fill options>), Right(<fill options>),
  4596.                 Top(<fill options>), Bottom(<fill options>))
  4597.             A beveled edge added outside the element's bounding box.
  4598.             The state defaults to off. Thickness may be 1 or greater,
  4599.             and defaults to 2. Base is a hint to the authoring station
  4600.             to assist with choosing bevel colors, and is not used by
  4601.             the system otherwise. The Base color is specified as a
  4602.             4-byte hexadecimal number, where each byte encodes zero,
  4603.             red, green, and blue, from MSB to LSB. The bevel colors
  4604.             default to shades of grey.
  4605.  
  4606.         - Border(left, right, top, bottom)
  4607.             Extra space added to the edges of the element, measured in
  4608.             pixels. This effectively extends the element's bounding
  4609.             box without affecting the position of the element's face
  4610.             or the size of its face image. The border values may be 0
  4611.             or greater, and all default to 0.
  4612.  
  4613.         - Face(state, <fill options>)
  4614.             The appearance of the face of the element. The state
  4615.             defaults to on. For images, <fill options> defaults to
  4616.             nothing. For other elements, <fill options> defaults to
  4617.             RGB($ffffff).
  4618.  
  4619.         - Focus(state, <fill options>)
  4620.             How to highlight the face of the last-wiped-in element.
  4621.             When a new element gets wiped in, the face of this element
  4622.             reverts to its normal face appearance. If a group of
  4623.             elements are wiped in together, each element with this
  4624.             option specified will be highlighted. The state defaults
  4625.             to off. <fill options> defaults to RGB($ffff7f).
  4626.  
  4627.         - Operation(state, <operation options>)
  4628.             Specifies the operations done before drawing this image.
  4629.             The state defaults to off.
  4630.  
  4631.         - Outline(state, Thickness(pixels), <fill options>)
  4632.             A colored outline added to the element. The state defaults
  4633.             to off. Thickness may be 1 or greater, and defaults to 1.
  4634.             <fill options> defaults to RGB(0).
  4635.  
  4636.         - Replace(state)
  4637.             This determines whether an element command will create a
  4638.             new element or replace an existing element previously
  4639.             created by the same command. If the state is On, the
  4640.             element command will replace the previous element created
  4641.             by the same command. If the state is Off, a new element
  4642.             will be created, and any previous elements created by the
  4643.             same command will remain on the screen. This defaults to
  4644.             Replace(On).
  4645.  
  4646.         - Shadow(state, Offset(horizontal, vertical), <fill options>)
  4647.             A drop shadow drawn behind the element, drawn in a solid
  4648.             color. The state defaults to off. Either or both of the
  4649.             offsets can be positive or negative, and are measured in
  4650.             pixels. <fill options> defaults to RGB(0).
  4651.  
  4652.         - Shift(x, y)
  4653.             The amount the element's face, outline, and shadow are
  4654.             shifted from the specified element position. This is
  4655.             intended to be used for different button states to move
  4656.             the face without moving the backdrop or bevel. The offset
  4657.             values may be any numbers, and default to (0, 0).
  4658.  
  4659.         - Style(stylename)
  4660.             The name of a style style being defined is derived from.
  4661.  
  4662.         - Transparent(state)
  4663.             Whether or not pen zero is transparent. The state defaults
  4664.             to off. If this is on, any portion of the foreground
  4665.             element drawn in pen zero will not be visible, but will
  4666.             show through to the image beneath this foreground element.
  4667.  
  4668.         - Wipe(wipename, <wipe options>)
  4669.             A description of the wipe used for wiping in the element.
  4670.             If no wipe is specified, the "Cut" wipe is used.
  4671.  
  4672. MovieClipStyle():
  4673.  
  4674.     MovieClipStyle() creates a style object that can be used to specify a
  4675.     common set of options used by one or more MovieClip commands.
  4676.     
  4677.     Synopsis:
  4678.     
  4679.         MovieClipStyle(stylename,
  4680.                 [, Loops(loops) ]
  4681.                 [, Margin(left, right, top, bottom) ]
  4682.                 [, Operation(state, <operation options>) ]
  4683.                 [, Palette( Clear(state), <palette options> ) ]
  4684.                 [, Style(stylename) ]
  4685.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  4686.                 [, Transparent(state) ]
  4687.                 [, UserPalette( Clear(state), <palette options> ) ]
  4688.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  4689.                 [, Volume(volume) ]
  4690.                 [, Wait(state) ]
  4691.                 [, Wipe(wipename, <wipe options>) ]
  4692.                 );
  4693.         
  4694.     Examples:
  4695.         
  4696.         MovieClipStyle(Barnum, Speed(40));
  4697.         MovieClipStyle(Bailey, Style(Barnum), Speed(60), Wipe("FlyLeft"));
  4698.         
  4699.     Required Parameters Used by This Class:
  4700.         
  4701.         - stylename
  4702.             The name of the style being defined.
  4703.  
  4704.     Optional Parameters Supported by This Class:
  4705.  
  4706.         - Loops(loops)
  4707.             How may times to play the animation in a loop.
  4708.  
  4709.         - Margin(left, right, top, bottom)
  4710.             This sets margins in the Background element to be used for
  4711.             positioning foreground elements on that background. The
  4712.             margin values may be 0 or greater, and all default to 0.
  4713.  
  4714.         - Operation(state, <operation options>)
  4715.             Specifies the operations done before drawing this image.
  4716.             The state defaults to off.
  4717.  
  4718.         - Palette( Clear(state), <palette options> )
  4719.             The palette used for this background. This defines
  4720.             specific colors to be mapped to specific pens at playback
  4721.             time.
  4722.  
  4723.             Clear(state) determines whether pens from the style
  4724.             (if any) are cleared before applying pens specified in
  4725.             this Palette option.
  4726.  
  4727.         - Style(stylename)
  4728.             The name of a style style being defined is derived from.
  4729.  
  4730.         - Tabs(Implicit(width), Explicit(tab, ...))
  4731.             A description of tab stops, relative to the background. If
  4732.             both Implicit and Explicit tabs are specified, explicit
  4733.             tabs are used first, and implicit tabs are used once the
  4734.             explicit tabs are used up.
  4735.  
  4736.             Implicit(width) set the distance between implied tab
  4737.             stops. This represents the number of pixels from each tab
  4738.             stop to the next. The width may be 1 or greater, and
  4739.             defaults to 50.
  4740.  
  4741.             Explicit(tab, ...) sets a list of one or more explicit tab
  4742.             stops. Each tab stop represents a number of pixels from
  4743.             the tab reference point, and may be 0 or greater. Any
  4744.             number of tab stops may be specified, but they must be
  4745.             listed in increasing order. There are no default Explicit
  4746.             tabs.
  4747.  
  4748.         - Transparent(state)
  4749.             This specifies if there should be any transparent areas
  4750.             in the front image. This option is used with the
  4751.             Operation(TransparentRGB()) option to turn on
  4752.             transparency.
  4753.  
  4754.         - UserPalette( Clear(state), <palette options> )
  4755.             The user palette for this background. This defines
  4756.             specific colors to be mapped to user pen numbers during
  4757.             playback. These user pen numbers are used by other
  4758.             commands via the 'Pen' fill option to select colors for
  4759.             elements to be drawn in. During playback, these user pens
  4760.             may end up mapped to any playback pens, and the screen
  4761.             book will take care of converting one to the other. The
  4762.             net result is that elements may refer to a user pen
  4763.             number, and get the desired color, no matter which
  4764.             playback pen the user pen number is actually mapped to.
  4765.  
  4766.             Clear(state) determines whether user pens from the style
  4767.             (if any) are cleared before applying user pens specified
  4768.             in this UserPalette option.
  4769.  
  4770.         - View(Mode(name), Size(width, height), ColorModel(colors))
  4771.             This describes the View used for this background. Any
  4772.             combination of suboptions may be specified to uniquely
  4773.             describe the View to be used.
  4774.  
  4775.             Mode(name) identifies the mode by a name (in string form).
  4776.  
  4777.             Size(w,h) identifies the View by the maximum display size
  4778.             it supports. this is the size of the ViewPort that is created.
  4779.  
  4780.             ColorModel(colors) identifies the View by
  4781.             the maximum number of colors it supports. This can be
  4782.             PaletteMapped, HiColor, or TrueColor, and defaults to
  4783.             PaletteMapped.
  4784.  
  4785.         - Volume(volume)
  4786.             This specifies the volume for the movie / movieclip.
  4787.             Range is 0 to 255. Defaults to 255 meaning full
  4788.             volume. 0 is silence.
  4789.  
  4790.         - Wait(state)
  4791.             Whether the player shall wait until the animation is
  4792.             finished before continuing with the sequence list.
  4793.             Defaults to FALSE. If FALSE we will not wait until the
  4794.             current animclip is finished before continuing the script.
  4795.  
  4796.         - Wipe(wipename, <wipe options>)
  4797.             A description of the wipe used for wiping in the element.
  4798.             If no wipe is specified, the "Cut" wipe is used.
  4799.  
  4800. MovieClip()
  4801.         
  4802.     MovieClip() creates an movie background.
  4803.  
  4804.     All <operation options> are available for MovieClip(), but, in most cases,
  4805.     performance will not be good enough for them to be used.
  4806.         
  4807.     Synopsis:
  4808.         
  4809.         MovieClip(filename,
  4810.                 [, Loops(loops) ]
  4811.                 [, Margin(left, right, top, bottom) ]
  4812.                 [, Operation(state, <operation options>) ]
  4813.                 [, Palette( Clear(state), <palette options> ) ]
  4814.                 [, Style(stylename) ]
  4815.                 [, Tabs(Implicit(width), Explicit(tab, ...)) ]
  4816.                 [, Transparent(state) ]
  4817.                 [, UserPalette( Clear(state), <palette options> ) ]
  4818.                 [, View(Mode(name), Size(width, height), ColorModel(colors)) ]
  4819.                 [, Volume(volume) ]
  4820.                 [, Wait(state) ]
  4821.                 [, Wipe(wipename, <wipe options>) ]
  4822.                 );
  4823.         
  4824.     Examples:
  4825.         
  4826.         MovieClip("show.avi");
  4827.         MovieClip("show2.avi", Style(Barnum), Loops(5));
  4828.         
  4829.     MovieClip() required parameters:
  4830.         
  4831.         - filename
  4832.             The name of the file containing the image data.
  4833.  
  4834.     Optional Parameters Supported by This Class:
  4835.  
  4836.         - Loops(loops)
  4837.             How may times to play the animation in a loop.
  4838.  
  4839.         - Margin(left, right, top, bottom)
  4840.             This sets margins in the Background element to be used for
  4841.             positioning foreground elements on that background. The
  4842.             margin values may be 0 or greater, and all default to 0.
  4843.  
  4844.         - Operation(state, <operation options>)
  4845.             Specifies the operations done before drawing this image.
  4846.             The state defaults to off.
  4847.  
  4848.         - Palette( Clear(state), <palette options> )
  4849.             The palette used for this background. This defines
  4850.             specific colors to be mapped to specific pens at playback
  4851.             time.
  4852.  
  4853.             Clear(state) determines whether pens from the style
  4854.             (if any) are cleared before applying pens specified in
  4855.             this Palette option.
  4856.  
  4857.         - Style(stylename)
  4858.             The name of a style style being defined is derived from.
  4859.  
  4860.         - Tabs(Implicit(width), Explicit(tab, ...))
  4861.             A description of tab stops, relative to the background. If
  4862.             both Implicit and Explicit tabs are specified, explicit
  4863.             tabs are used first, and implicit tabs are used once the
  4864.             explicit tabs are used up.
  4865.  
  4866.             Implicit(width) set the distance between implied tab
  4867.             stops. This represents the number of pixels from each tab
  4868.             stop to the next. The width may be 1 or greater, and
  4869.             defaults to 50.
  4870.  
  4871.             Explicit(tab, ...) sets a list of one or more explicit tab
  4872.             stops. Each tab stop represents a number of pixels from
  4873.             the tab reference point, and may be 0 or greater. Any
  4874.             number of tab stops may be specified, but they must be
  4875.             listed in increasing order. There are no default Explicit
  4876.             tabs.
  4877.  
  4878.         - Transparent(state)
  4879.             This specifies if there should be any transparent areas
  4880.             in the front image. This option is used with the
  4881.             Operation(TransparentRGB()) option to turn on
  4882.             transparency.
  4883.  
  4884.         - UserPalette( Clear(state), <palette options> )
  4885.             The user palette for this background. This defines
  4886.             specific colors to be mapped to user pen numbers during
  4887.             playback. These user pen numbers are used by other
  4888.             commands via the 'Pen' fill option to select colors for
  4889.             elements to be drawn in. During playback, these user pens
  4890.             may end up mapped to any playback pens, and the screen
  4891.             book will take care of converting one to the other. The
  4892.             net result is that elements may refer to a user pen
  4893.             number, and get the desired color, no matter which
  4894.             playback pen the user pen number is actually mapped to.
  4895.  
  4896.             Clear(state) determines whether user pens from the style
  4897.             (if any) are cleared before applying user pens specified
  4898.             in this UserPalette option.
  4899.  
  4900.         - View(Mode(name), Size(width, height), ColorModel(colors))
  4901.             This describes the View used for this background. Any
  4902.             combination of suboptions may be specified to uniquely
  4903.             describe the View to be used.
  4904.  
  4905.             Mode(name) identifies the mode by a name (in string form).
  4906.  
  4907.             Size(w,h) identifies the View by the maximum display size
  4908.             it supports. this is the size of the ViewPort that is created.
  4909.  
  4910.             ColorModel(colors) identifies the View by
  4911.             the maximum number of colors it supports. This can be
  4912.             PaletteMapped, HiColor, or TrueColor, and defaults to
  4913.             PaletteMapped.
  4914.  
  4915.         - Volume(volume)
  4916.             This specifies the volume for the movie / movieclip.
  4917.             Range is 0 to 255. Defaults to 255 meaning full
  4918.             volume. 0 is silence.
  4919.  
  4920.         - Wait(state)
  4921.             Whether the player shall wait until the animation is
  4922.             finished before continuing with the sequence list.
  4923.             Defaults to FALSE. If FALSE we will not wait until the
  4924.             current animclip is finished before continuing the script.
  4925.  
  4926.         - Wipe(wipename, <wipe options>)
  4927.             A description of the wipe used for wiping in the element.
  4928.             If no wipe is specified, the "Cut" wipe is used.
  4929.  
  4930. Text():
  4931.  
  4932.     This command creates a foreground object that is one or more words
  4933.     of text drawn with a specified font and effects.
  4934.  
  4935.     Synopsis:
  4936.  
  4937.         Text( X, Y , string
  4938.                 [, Append( string,
  4939.                     Font(typeface, size),
  4940.                     Bold(state, Delta(value)),
  4941.                     Italic(state, Delta(value)),
  4942.                     Spacing(pixels),
  4943.                     Kerning(state),
  4944.                     Face(state, <fill options>),
  4945.                     Focus(state, <fill options>),
  4946.                     Outline(state, Thickness(pixels), <fill options>),
  4947.                     Shadow(state, Offset(h, v), <fill options>),
  4948.                     Under(state, Position(top), Thickness(height),
  4949.                         Air(size), <fill options>) ]
  4950.                 [, Align(horizontal, vertical) ]
  4951.                 [, Antialias(state) ]
  4952.                 [, Backdrop(state, <fill options>) ]
  4953.                 [, Bevel(state, Thickness(pixels), Base(color),
  4954.                         Left(<fill options>), Right(<fill options>),
  4955.                         Top(<fill options>), Bottom(<fill options>)) ]
  4956.                 [, Bold(state, Delta(value)) ]
  4957.                 [, Border(left, right, top, bottom) ]
  4958.                 [, Face(state, <fill options>) ]
  4959.                 [, Focus(state, <fill options>) ]
  4960.                 [, Font(typeface, size) ]
  4961.                 [, Italic(state, Delta(value)) ]
  4962.                 [, Justify(horizontal, vertical) ]
  4963.                 [, Kerning(state) ]
  4964.                 [, Leading(pixels) ]
  4965.                 [, Outline(state, Thickness(pixels), <fill options>) ]
  4966.                 [, Replace(state) ]
  4967.                 [, Shadow(state, Offset(horizontal, vertical), <fill options>) ]
  4968.                 [, Shift(x, y) ]
  4969.                 [, Size(width, height) ]
  4970.                 [, Spacing(pixels) ]
  4971.                 [, Tabs(Relative(state), Implicit(width), Explicit(tab, ...)) ]
  4972.                 [, Transparent(state) ]
  4973.                 [, Under(state, Position(top), Thickness(height), Air(size),
  4974.                         <fill options>) ]
  4975.                 [, Update(type) ]
  4976.                 [, Wipe(wipename, <wipe options>) ]
  4977.                 [, Wrap(state) ]
  4978.                 );
  4979.  
  4980.     Examples:
  4981.  
  4982.         Text(x, y, "Larry");
  4983.         Text(x, y, "Curly", Face(on, Pen(3)));
  4984.         Text(x, y, "",
  4985.             Transparent(on), Under(on, Pen(1)),
  4986.             Append("John,", Face(on, RGB($ff0000))),
  4987.             Append(" Paul,", Face(on, RGB($00ff00))),
  4988.             Append(" George,", Face(on, RGB($0000ff))),
  4989.             Append(" and Ringo!", Face(on, RGB($ffff00))))
  4990.  
  4991.     Required Parameters Used by This Class:
  4992.  
  4993.         - X
  4994.             The horizontal position of the element's face. This
  4995.             position may be modified by the effects of Offset commands
  4996.             in containing clusters, and by Foreground's Align option.
  4997.             See those options' descriptions for more details.
  4998.  
  4999.         - Y 
  5000.             The vertical position of the element's face. This position
  5001.             may be modified by the effects of Offset commands in
  5002.             containing clusters, and by Foreground's Align option. See
  5003.             those options' descriptions for more details.
  5004.  
  5005.         - string
  5006.             The text string to be displayed. If this is an expression,
  5007.             and the Live option is turned on, the string displayed by
  5008.             the Text element will change each time this expression
  5009.             changes.
  5010.  
  5011.  
  5012.     Optional repeatable Parameters Supported by This Class:
  5013.  
  5014.         - Append(string,
  5015.                 Font(typeface, size),
  5016.                 Bold(state, Delta(value)),
  5017.                 Italic(state, Delta(value)),
  5018.                 Spacing(pixels),
  5019.                 Kerning(state),
  5020.                 Face(state, <fill options>),
  5021.                 Focus(state, <fill options>),
  5022.                 Outline(state, Thickness(pixels), <fill options>),
  5023.                 Shadow(state, Offset(h, v), <fill options>),
  5024.                 Under(state, Position(top), Thickness(height),
  5025.                     Air(size), <fill options>)
  5026.  
  5027.             This may be repeated in a Text command to create Text
  5028.             elements with in-line style changes. Each occurrence of
  5029.             the Append option creates a text segment. A text segment
  5030.             is also created by the string provided to the Text command
  5031.             itself. All text segments will be concatenated together in
  5032.             the same order as they appear in the Text command.
  5033.  
  5034.     Optional Parameters Supported by This Class:
  5035.  
  5036.         - Align(horizontal, vertical)
  5037.             This determines whether the element is positioned based on
  5038.             its X,Y values, or by the Background's size and margins.
  5039.             These tables describe the alignment values and their
  5040.             meanings:
  5041.  
  5042.             Horizontal  Description
  5043.             ----------  -----------
  5044.             None        The left edge of the element's face is
  5045.                         positioned relative to the left edge of the
  5046.                         background. The element's X value and the
  5047.                         cumulative effect of all applicable Offset
  5048.                         commands are used for positioning the element.
  5049.  
  5050.             Left        The left edge of the element's face is
  5051.                         positioned at the Background's left margin.
  5052.                         The element's X value and all applicable
  5053.                         Offset commands are ignored.
  5054.  
  5055.             Center      The vertical centerline of the element's face
  5056.                         is positioned midway between the Background's
  5057.                         left and right margins. The element's X value
  5058.                         and all applicable Offset commands are
  5059.                         ignored.
  5060.  
  5061.             Right       The right edge of the element's face is
  5062.                         positioned at the Background's right margin.
  5063.                         The element's X value and all applicable
  5064.                         Offset commands are ignored.
  5065.  
  5066.             Vertical    Description
  5067.             --------    -----------
  5068.             None        The top edge of the element's face is
  5069.                         positioned relative to the left edge of the
  5070.                         background. The element's Y value and the
  5071.                         cumulative effect of all applicable Offset
  5072.                         commands are used for positioning the element.
  5073.  
  5074.             Top         The top edge of the element's face is
  5075.                         positioned at the Background's top margin. The
  5076.                         element's Y value and all applicable Offset
  5077.                         commands are ignored.
  5078.  
  5079.             Middle      The horizontal centerline of the element's
  5080.                         face is positioned midway between the
  5081.                         Background's top and bottom margins. The
  5082.                         element's Y value and all applicable Offset
  5083.                         commands are ignored.
  5084.  
  5085.             Bottom      The bottom edge of the element's face is
  5086.                         positioned at the Background's bottom margin.
  5087.                         The element's Y value and all applicable
  5088.                         Offset commands are ignored.
  5089.  
  5090.             If this option is not specified, the element's alignment
  5091.             defaults to (None, None).
  5092.  
  5093.         - Antialias(state)
  5094.             This determines if the element is antialiased. The state
  5095.             defaults to off.
  5096.  
  5097.         - Backdrop(state, <fill options>)
  5098.             The appearance of the bounding box of the element behind
  5099.             the face and other style options applied to the element.
  5100.             The state defaults to off. <fill options> defaults to
  5101.             RGB($7f7f7f).
  5102.  
  5103.         - Bevel(state, Thickness(pixels), Base(color),
  5104.                 Left(<fill options>), Right(<fill options>),
  5105.                 Top(<fill options>), Bottom(<fill options>))
  5106.             A beveled edge added outside the element's bounding box.
  5107.             The state defaults to off. Thickness may be 1 or greater,
  5108.             and defaults to 2. Base is a hint to the authoring station
  5109.             to assist with choosing bevel colors, and is not used by
  5110.             the system otherwise. The Base color is specified as a
  5111.             4-byte hexadecimal number, where each byte encodes zero,
  5112.             red, green, and blue, from MSB to LSB. The bevel colors
  5113.             default to shades of grey.
  5114.  
  5115.         - Bold(state, Delta(value))
  5116.             Indicates whether the text should be bolder than normal.
  5117.             The state defaults to off. Text weight is calculated from
  5118.             1 (thin) to 12 (black). The Delta value may range from -11
  5119.             to 11, and defaults to 3. This gives the ability to use
  5120.             any weight within the supported range with any font. Note
  5121.             that the Delta value is relative to the font's nominal
  5122.             weight, not an absolute weight value. Note also that some
  5123.             fonts won't look different at each available Delta value,
  5124.             and that bitmap fonts cannot be made thinner than their
  5125.             nominal weight.
  5126.  
  5127.         - Border(left, right, top, bottom)
  5128.             Extra space added to the edges of the element, measured in
  5129.             pixels. This effectively extends the element's bounding
  5130.             box without affecting the position of the element's face
  5131.             or the size of its face image. The border values may be 0
  5132.             or greater, and all default to 0.
  5133.  
  5134.         - Face(state, <fill options>)
  5135.             The appearance of the face of the element. The state
  5136.             defaults to on. For images, <fill options> defaults to
  5137.             nothing. For other elements, <fill options> defaults to
  5138.             RGB($ffffff).
  5139.  
  5140.         - Focus(state, <fill options>)
  5141.             Highlight the face of the last-wiped-in element.
  5142.             When a new element gets wiped in, the face of this element
  5143.             reverts to its normal face appearance. If a group of
  5144.             elements are wiped in together, each element with this
  5145.             option specified will be highlighted. The state defaults
  5146.             to off. <fill options> defaults to RGB($ffff7f).
  5147.  
  5148.             It affects the face color of focus text only; it cannot
  5149.             be used to set the color of shadow or outline, nor can
  5150.             it be used to set the face color to transparent (in the
  5151.             way Face( Off, ... ) sets the face color to transparent.)
  5152.             The underline color will only change if, after evaluation,
  5153.             the face, focus, and underline color of every text segment
  5154.             are the same AND the face, focus, and underline state of
  5155.             every text segment are in the ON state, then the focus pen
  5156.             affects the underline color too.
  5157.  
  5158.         - Font(typeface, size)
  5159.             The typeface and size to be used for drawing the text.
  5160.  
  5161.         - Italic(state, Delta(value))
  5162.             Indicates whether the text should be more or less italic
  5163.             than normal (most fonts are normally upright). The state
  5164.             defaults to off. Text slant is calculated from -99 (full
  5165.             left slant) to 99 (full right slant). The Delta value may
  5166.             range from -198 to 198, and defaults to 32. This gives the
  5167.             ability to use any slant within the supported range with
  5168.             any font. Note that the Delta value is relative to the
  5169.             font's nominal slant, not an absolute slant value.
  5170.  
  5171.         - Justify(horizontal, vertical)
  5172.             The justification of the text within its bounding box (if
  5173.             any). Horizontal can be Left, Center, or Right, and
  5174.             defaults to Left. Vertical can be Top, Middle, or Bottom,
  5175.             and defaults to Top. This option has no effect if no Size
  5176.             option is specified, and there is only one line of text.
  5177.  
  5178.         - Kerning(state)
  5179.             Indicates whether or not the text is kerned. The state
  5180.             defaults to off.
  5181.  
  5182.         - Leading(pixels)
  5183.             Indicates the vertical distance between lines of text in a
  5184.             Text element. Pixels may be any positive or negative
  5185.             number, and defaults to 0. This represents the number of
  5186.             pixels of space added below the bottom of each line.
  5187.  
  5188.         - Outline(state, Thickness(pixels), <fill options>)
  5189.             A colored outline added to the element. The state defaults
  5190.             to off. Thickness may be 1 or greater, and defaults to 1.
  5191.             <fill options> defaults to RGB(0).
  5192.  
  5193.         - Replace(state)
  5194.             This determines whether an element command will create a
  5195.             new element or replace an existing element previously
  5196.             created by the same command. If the state is On, the
  5197.             element command will replace the previous element created
  5198.             by the same command. If the state is Off, a new element
  5199.             will be created, and any previous elements created by the
  5200.             same command will remain on the screen. This defaults to
  5201.             Replace(On).
  5202.  
  5203.         - Shadow(state, Offset(horizontal, vertical), <fill options>)
  5204.             A drop shadow drawn behind the element, drawn in a solid
  5205.             color. The state defaults to off. Either or both of the
  5206.             offsets can be positive or negative, and are measured in
  5207.             pixels. <fill options> defaults to RGB(0).
  5208.  
  5209.         - Shift(x, y)
  5210.             The amount the element's face, outline, and shadow are
  5211.             shifted from the specified element position. This is
  5212.             intended to be used for different button states to move
  5213.             the face without moving the backdrop or bevel. The offset
  5214.             values may be any numbers, and default to (0, 0).
  5215.  
  5216.         - Size(width, height)
  5217.             The horizontal and vertical dimensions of the bounding box
  5218.             for the Text element, measured in pixels. If Wrap is on,
  5219.             this will wrap text to fit the bounding box's width. If
  5220.             Wrap is off, text is clipped at the width of the bounding
  5221.             box. In both cases, text is clipped at the height of the
  5222.             bounding box.
  5223.  
  5224.         - Spacing(pixels)
  5225.             Indicates the intercharacter spacing of the text. Pixels
  5226.             may be any positive or negative number, and defaults to 0.
  5227.             This represents the number of pixels of space added to the
  5228.             right side of each character.
  5229.  
  5230.         - Tabs(Relative(state), Implicit(width), Explicit(tab, ...))
  5231.             A description of tab stops, relative to either the element
  5232.             or the background. If both Implicit and Explicit tabs are
  5233.             specified, explicit tabs are used first, and implicit tabs
  5234.             are used once the explicit tabs are used up.
  5235.  
  5236.             Relative(state) determines whether tabs are relative to
  5237.             the element or to the background. If TRUE, tabs are
  5238.             relative to the left edge of the element. Otherwise, tabs
  5239.             are relative to the left edge of the background. The
  5240.             Relative state defaults to FALSE.
  5241.  
  5242.             Implicit(width) set the distance between implied tab
  5243.             stops. This represents the number of pixels from each tab
  5244.             stop to the next. The width may be 1 or greater, and
  5245.             defaults to 50.
  5246.  
  5247.             Explicit(tab, ...) sets a list of one or more explicit tab
  5248.             stops. Each tab stop represents a number of pixels from
  5249.             the tab reference point, and may be 0 or greater. Any
  5250.             number of tab stops may be specified, but they must be
  5251.             listed in increasing order. There are no default Explicit
  5252.             tabs.
  5253.  
  5254.         - Transparent(state)
  5255.             Whether or not pen zero is transparent. The state defaults
  5256.             to off. If this is on, any portion of the foreground
  5257.             element drawn in pen zero will not be visible, but will
  5258.             show through to the image beneath this foreground element.
  5259.  
  5260.         - Under(state, Position(top), Thickness(height), Air(size),
  5261.                 <fill options>)
  5262.             The underline of the text, if any. The state defaults to
  5263.             off. Position is measured in pixels from the top of the
  5264.             underline to the baseline of the text, increasing
  5265.             downward, and defaults to 1. Thickness is the height of
  5266.             the underline measured in pixels, and defaults to 2. Air
  5267.             is the distance in pixels between the underline and the
  5268.             nearest text pixel, and defaults to 1.
  5269.  
  5270.         - Update(type)
  5271.             Whether or not the text element updates when the string
  5272.             parameter is an expression, and that expression changes
  5273.             value. The type can be one of None, Normal, or Extended,
  5274.             and defaults to Extended. If the string parameter is
  5275.             constant, this option has no effect.
  5276.  
  5277.         - Wipe(wipename, <wipe options>)
  5278.             A description of the wipe used for wiping in the element.
  5279.             If no wipe is specified, the "Cut" wipe is used.
  5280.  
  5281.         - Wrap(state)
  5282.             Whether or not the text element wraps at the edge of its
  5283.             bounding box. The state defaults to off. If no Size option
  5284.             is specified, this option is ignored.
  5285.  
  5286. Non-Element Commands
  5287. --------------------
  5288.  
  5289. These are descriptions of other commands supported by the Screen book
  5290. and related software. These commands do not create elements, but they
  5291. can affect elements that are displayed.
  5292.  
  5293. Offset():
  5294.  
  5295.     The Offset command, when used in the Group list of a Scala Script
  5296.     cluster, offsets the positions of all Foreground elements by the
  5297.     specified offset amount. If Offset commands are used in nested
  5298.     clusters, the net result of each Offset command is added together
  5299.     to determine the effective offset for Foreground elements in the
  5300.     most nested cluster. The effect of having an Offset command in a
  5301.     group list between several foreground elements is undefined.
  5302.  
  5303.     This command is useful when grouping related Foreground elements
  5304.     so the group can be moved around easily during authoring. The
  5305.     Offset command can be used for positioning the group, and
  5306.     Foreground elements within the group are positioned relative to
  5307.     the group's effective position, taking into account the offsets 
  5308.     of all nested groups.
  5309.  
  5310.     Required Parameters:
  5311.  
  5312.         - X
  5313.             The horizontal offset, relative to the left edge of the
  5314.             background.
  5315.  
  5316.         - Y
  5317.             The vertical offset, relative to the top edge of the
  5318.             background.
  5319.  
  5320. WipeOut():
  5321.  
  5322.     The WipeOut command wipes out an element that has been wiped in.
  5323.  
  5324.     WipeOut(elementname,
  5325.         [ Wipe(wipename, <wipe options>) ]
  5326.         );
  5327.  
  5328.     WipeOut() required parameters:
  5329.  
  5330.         - elementname
  5331.             The script label of the command that created the
  5332.             foreground element to be wiped out, or the label of a
  5333.             block containing at least one foreground element to be
  5334.             wiped out.
  5335.  
  5336.     Optional parameters:
  5337.  
  5338.         - Wipe(wipename, <wipe options>)
  5339.             A description of the wipe used for wiping out the element.
  5340.  
  5341. Option Groups
  5342. -------------
  5343.  
  5344. These are descriptions of the option groups that are used in several
  5345. different classes. Rather than repeat the descriptions for each class
  5346. that supports these options, this section describes them once.
  5347.  
  5348. <fill options>:
  5349.     There are several fill options, only one of which can be used at a
  5350.     time. If none of these options are used, the behaviour depends on
  5351.     the element.
  5352.  
  5353.     All fill options have a default Pen if there is a user palette,
  5354.     and a default RGB if there is no user palette.
  5355.  
  5356.         - Pen(pen)
  5357.             A pen used for filling the specified area.
  5358.  
  5359.         - RGB(color)
  5360.             A solid color used for filling the specified area. This
  5361.             is not used directly, but the closest matching pen from the
  5362.             current background's palette is used.
  5363.  
  5364.         - Tile(filename,
  5365.                 Justify(horizontal, vertical),
  5366.                 Offset(direction, amount),
  5367.                 <operation options>)
  5368.             (implemented only for Box, Display, and Foreground's Backdrop)
  5369.             Specifies an image to be tiled onto the specified area,
  5370.             and options describing how it is to be tiled.
  5371.  
  5372.             Filename specifies the name of the file containing the
  5373.             image data to be used. This image file may be a stretcher
  5374.             file or a standard bitmap file.
  5375.  
  5376.             Justify(horizontal, vertical) specifies how the image is
  5377.             justified when tiling.
  5378.  
  5379.             Offset(direction, amount) specifies the offset for the
  5380.             tiled image from one row (or column) to the next.
  5381.  
  5382.             <operation options> specifies the operations done before
  5383.             drawing this image.
  5384.  
  5385.         - Image(filename, <operation options>)
  5386.             (implemented only for Box, Display, and Foreground's Backdrop)
  5387.             Specifies an image to be drawn into the specified area.
  5388.             The image will be sized to fit the filled area, using an
  5389.             appropriate scaling method for the source image.
  5390.  
  5391.             Filename specifies the name of the file containing the
  5392.             image data to be used. This image file may be a stretcher
  5393.             file or a standard bitmap file.
  5394.  
  5395.             <operation options> specifies the operations done before
  5396.             drawing this image.
  5397.  
  5398. <operation options>:
  5399.     There are several operation options, which may be used in
  5400.     combination. The options specified are applied in this order:
  5401.  
  5402.         - Crop(left, top, width, height)
  5403.             A sub-part of the image to be displayed. By default, the
  5404.             image is not cropped and the entire source image is used.
  5405.  
  5406.         - Flip(horizontal, vertical)
  5407.             (vertical flip not implemented yet)
  5408.             Flip the source image in the horizontal and/or vertical
  5409.             direction before using it for drawing the element. This
  5410.             defaults to Flip(off, off).
  5411.  
  5412.         - Rotate(angle)
  5413.             Rotate the source image clockwise the specified angle
  5414.             before using it for drawing the element. The angle is
  5415.             specified in degrees clockwise from North, and is limited
  5416.             to the range 0 through 359, inclusive.
  5417.  
  5418.         - Resize(width, height)
  5419.             Scale the image, using absolute scaling.
  5420.  
  5421.             Width indicates the new width in pixels for the image.
  5422.             This may be 1 or greater, and defaults to the nominal
  5423.             width of the image.
  5424.  
  5425.             Height indicates the new height in pixels for the image.
  5426.             This may be 1 or greater, and defaults to the nominal
  5427.             height of the image.
  5428.  
  5429.         - ImagePalette(  <palette options> )
  5430.             Remap one or more pens in the source image to the pens
  5431.             from the current background's palette that most closely
  5432.             match the specified colors.
  5433.  
  5434.         - Dither(state, Auto(autostate))
  5435.             Use Floyd-Steinberg dithering to make the source image
  5436.             more closely match its original coloring using the current
  5437.             background's palette. This defaults to off.
  5438.  
  5439.             Auto(autostate) is used to tell the software to ignore the
  5440.             Dither state provided, and to determine the dither state
  5441.             based on whether the image is a true color image. If
  5442.             autostate is on and the image is a true color image, then
  5443.             the image will be dithered. If autostate is on and the
  5444.             image is not a true color image, the image will not be
  5445.             dithered. If autostate is off, then the supplied dither
  5446.             state will be used. Autostate defaults to off.
  5447.  
  5448.         - TransparentRGB(Color,TransparentDelta(Delta))
  5449.             This option allows you to choose a transparent color.
  5450.             The color should be given as a 32bit RGB number
  5451.             (like $7f7f7f). If TransparentDelta is specified,
  5452.             all the colors within the specified delta range from the
  5453.             main color will be transparent as well. Delta is unsigned.
  5454.  
  5455. <palette options>:
  5456.     There is one palette option, which may be repeated as many times
  5457.     as needed. If a Palette option is specified on a style command and
  5458.     an element command that references that style, both will be used
  5459.     in this way: first, the palette will be set from the style's
  5460.     Palette option, then from the element command's Palette option. If
  5461.     a pen is set more than once, the last color set for the pen will
  5462.     be used.
  5463.  
  5464.         - RGBPen(pen, color, ...)
  5465.             Set a specific pen to a specific color. Color is specified
  5466.             as a 3-byte hexadecimal number, where each byte encodes
  5467.             red, green, and blue, from MSB to LSB.
  5468.             Color may be repeated. If more than one color is
  5469.             specified, each color is assigned to the next consecutive pen,
  5470.             starting at the specified pen.
  5471.  
  5472. <wipe options>:
  5473.     These wipe options may be used in any combination. Some wipes may
  5474.     impose certain restrictions on the values of these options, and
  5475.     may ignore some other options altogether.
  5476.  
  5477.         - Speed(value)
  5478.             Indicates a subjective speed for the wipe. The value may
  5479.             range from 1 (slow) to 10 (fast) for most wipes, and
  5480.             defaults to 5. Some wipes may allow speeds outside the
  5481.             range 1-10. In all cases, the number chosen will be used
  5482.             as a guide for the Screen book to choose a wipe wpeed that
  5483.             results in a smooth wipe.
  5484.  
  5485.         - Direction(dir)
  5486.             Indicates the direction of travel for the wipe.
  5487.  
  5488.         - Flip(horizontal, vertical)
  5489.             Indicates whether the wipe is flipped horizontally and/or
  5490.             vertically. This defaults to Flip(off, off).
  5491.