home *** CD-ROM | disk | FTP | other *** search
/ World of Graphics / WOGRAPH.BIN / 509.MANUAL.DOC < prev    next >
Text File  |  1992-10-15  |  208KB  |  5,317 lines

  1.                                                             
  2.                               
  3.                               
  4.                      DOCUMENTATION FOR
  5.  
  6.  
  7.              VERSION 7.32 (October 15th, 1992)
  8.  
  9.                              OF
  10.  
  11.  
  12.  
  13.  
  14.  
  15.                             P11
  16.  
  17.  
  18.  
  19.                A GRAPHICS PROGRAM WRITTEN BY:
  20.  
  21.                      RUSSELL D. HOFFMAN
  22.                       P.O. Box 188006
  23.                      CARLSBAD, CA 92009
  24.                        (800) 551-2726
  25.                        (619) 720-7261
  26.                  America Online:RUSSELL DH
  27.                    CompuServe:70743,1226
  28.                               
  29.                               
  30.                               
  31.  
  32.      THE AUTHOR ASSUMES NO RESPONSIBILITIES AS TO THE
  33.     APPLICABILITY OF THIS PROGRAM TO YOUR NEEDS OR THE
  34.  ACCURACY OF ITS FUNCTIONS.  PLEASE NOTIFY THE AUTHOR OF
  35.  ANY INACCURACIES FOUND AND OF ANY DESIRED NEW FEATURES.
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.          CONCEIVED, DESIGNED, WRITTEN AND PRODUCED
  43.    BY RUSSELL D. HOFFMAN IN THE UNITED STATES OF AMERICA.
  44.             PROGRAM COPYRIGHT (c) 1984 to 1992,
  45.    DOCUMENTATION COPYRIGHT (c) 1985 to 1992 by RUSSELL D.
  46.                           HOFFMAN.
  47.                               
  48.                               
  49.                               
  50.                ALL WORLDWIDE RIGHTS RESERVED.
  51.  
  52. This document is copyrighted.  No portion may be reproduced,
  53. copied, duplicated  or stored in an electronic access system
  54. for retrieval  by persons  other  than  the  rightful  owner
  55. and/or user of this product without prior written permission
  56. of the  author, except  small  portions  may  be  taken  for
  57. purposes of review or training.  This version supersedes all
  58. previous releases  of this  document and  the P11  family of
  59. graphics  products.    This  version  is  SHAREWARE  and  is
  60. dedicated to  the thousands of users who have contributed to
  61. this product over the years, in so many ways.  Thanks to all
  62. of you, past, present,... and future!
  63.  
  64.  
  65. Proudly manufactured in the United States of America.
  66.  
  67. First printing:  Version 3.00.00, October, 1987. (Some prior
  68. limited distribution.  (Program versions 3.20 & 3.21, 3.50 &
  69. 3.51)
  70. Second printing: Version 4.80.00, March, 1989.
  71. Third Printing:  Version 6.00.00,  May, 1990.  (Main program
  72.      release was 6.40 (editor) and 6.41 (runtime)
  73. Fourth  "Printing":   Version  7.22.00,   Aug.   4th,   1992
  74.      (Shareware)
  75. Fifth  "Printing":   Version   7.24.00,   Aug.   9th,   1992
  76.      (Shareware)
  77. Sixth  "Printing":   Version  7.26.00,   Aug.   14th,   1992
  78.      (Shareware)
  79. Seventh  "Printing":   Version  7.30.00,   Oct.  9th,   1992
  80.      (Shareware)
  81.  
  82. This technical  reference and it's accompanying tutorial and
  83. addenda have  been completely  revised and  updated for  use
  84. with the  current version  of P11  and P11RUN.    Additional
  85. addenda to  this document  may be  included  for  subsequent
  86. releases of  P11 and/or  P11RUN.   The manufacturer reserves
  87. the  right   to  make   changes  to   the  programs   and/or
  88. documentation without prior notice or obligation.
  89.  
  90.  
  91. Numerous companies  produce products  that are  important to
  92. the satisfactory  use of  this  product.    Throughout  this
  93. manual  these   products  are  mentioned.    Many  of  these
  94. product's names   are  trademarked and  we have attempted to
  95. list the owners of these trademarks below.
  96.  
  97.      I.B.M., PC, PC/XT, PC/AT, PS/2, and PC-DOS are all
  98.   registered trademarks of International Business Machines
  99.                         Corporation.
  100.   Softgraf is a registered trademark of AutoScribe Corp.,
  101.                        Rockville, MD
  102.     Compaq is a registered trademark of Compaq Computer
  103.                         Corporation.
  104.   Summagraphics is a registered trademark of Summagraphics
  105.                            Corp.
  106.  MS-DOS is a registered trademark of Microsoft Corporation.
  107.   Manager Mouse is a registered trademark of The Numonics
  108.                           Company.
  109. HP Laserjet is a registered trademark of the Hewlett-Packard
  110.                           Company.
  111.   RADIO SHACK and TANDY are registered trademarks of Radio
  112.                         Shack, Inc.
  113.   ATI WONDER CARD and WONDER MOUSE are trademarks of ATI,
  114.                            Canada
  115.   QEMM is a trademark of Quarterdeck Office Systems, Santa
  116.                          Monica, CA
  117.     GRAPHICS MASTER is a registered trademark of TECMAR.
  118.                               
  119. Additional trademarks belong to the companies listed herein.
  120.                               
  121.                               
  122.                               
  123.                               
  124.                               
  125.                               
  126.  
  127.                      TABLE OF CONTENTS
  128.  
  129.      COMMANDS AND SYNTAX ................... 1
  130.      
  131.      
  132.      
  133.      Alphabetical Listing Of All Commands
  134.           
  135.                ACTIVATE ............. 2
  136.                ADD .................. 3
  137.                APPEND ............... 4
  138.                AUTHORITY ............ 5
  139.                BEEP ................. 6
  140.                BLANK ................ 7
  141.                BREAK ................ 8
  142.                BUILD ................ 9
  143.                BUTTON ............... 10
  144.                CALL ................. 11
  145.                CALLM ................ 12
  146.                CIRCLE ............... 13
  147.                CLEAR ................ 14
  148.                CLOCK ................ 15
  149.                CLOSE ................ 16
  150.                CONNECT .............. 17
  151.                CONVERT .............. 18
  152.                CRAWL ................ 19
  153.                CURSOR ............... 20
  154.                DATA ................. 21
  155.                DELETE ............... 22
  156.                DIGITIZER ............ 23
  157.                DISPLAY .............. 24
  158.                DIVIDE ............... 25
  159.                DOT .................. 26
  160.                DRAW ................. 27
  161.                ELIMINATE ............ 28
  162.                ELSE ................. 29
  163.                END .................. 30
  164.                ENDIF ................ 31
  165.                ERROR ................ 32
  166.                EXCHANGE ............. 33
  167.                EXECUTE .............. 34
  168.                FRAME ................ 36
  169.                HEIGHT ............... 37
  170.                HUE .................. 38
  171.                IF ................... 39
  172.                IN ................... 40
  173.                JOYSTICK ............. 41
  174.                JRCOLOR .............. 42
  175.                JUMP ................. 43
  176.                KEY .................. 44
  177.                LENGTH ............... 45
  178.                LINE ................. 46
  179.                LOCATE ............... 47
  180.                LOAD ................. 48
  181.                MARQUE ............... 49
  182.                MEMORY ............... 50
  183.                MOUSE ................ 51
  184.                MOVE ................. 52
  185.                MULTIPLY ............. 53
  186.                NAME ................. 54
  187.                ON ERROR ............. 55
  188.                ON KEY ............... 56
  189.                OPEN ................. 57
  190.                OUT .................. 58
  191.                OVERLAY .............. 59
  192.                PAINT ................ 60
  193.                PASSWORD ............. 61
  194.                PEN .................. 62
  195.                PRINT ................ 63
  196.                QUESTION ............. 64
  197.                READ ................. 65
  198.                RESTORE .............. 66
  199.                RETURN ............... 67
  200.                ROTATE ............... 68
  201.                ROUNDS ............... 69
  202.                RUN .................. 70
  203.                SAVE ................. 71
  204.                SCREEN ............... 72
  205.                SCROLL ............... 73
  206.                SET .................. 74
  207.                SHOW ................. 75
  208.                SOUND ................ 76
  209.                SPRINT ............... 77
  210.                SPRITE ............... 78
  211.                SUBTRACT ............. 79
  212.                TEXT ................. 80
  213.                THEN ................. 81
  214.                WAIT ................. 82
  215.                WIDTH ................ 83
  216.                WRITE ................ 84
  217.                X .................... 85
  218.                ZING ................. 86
  219.                * .................... 87
  220.                " .................... 88
  221.                + .................... 89
  222.      
  223.      \RUN Information Displays....... 90
  224.      Picture and Font File Formats... 91
  225.      Format for the Auxiliary File... 92
  226.      Format for the Hue File......... 93
  227.      Space Considerations............ 94
  228.      Tips On Making Your Program Faster  95
  229.      Uses of the "escape" key........ 96
  230.      F10-"Instant" commands & DOS functions   97
  231.      Future Enhancements............. 98
  232.      Of Mice and Joysticks and Digitizers     99
  233.      Timing Considerations........... 100
  234.      Converting Images Between Screen Modes   101
  235.      Executing DOS from within the program    102
  236.      About the Author................ 103
  237.      
  238.  
  239.                               
  240.  
  241.  
  242.                               
  243.  
  244.  
  245.                               
  246.  
  247.  
  248.                     COMMANDS AND SYNTAX
  249.  
  250.  
  251.                               
  252.  
  253.      Commands in  this language  are based on ENGLISH words.
  254. All commands  have a  backslash in  column one  and then the
  255. command.   You may  have one  or  more  spaces  between  the
  256. backslash  and  the  command  word.    If  the  command  has
  257. parameters these  should follow AT LEAST ONE SPACE after the
  258. command word.
  259.      You may  have multiple  commands on  a single line, but
  260. the first  character of  each command  must be  a backslash.
  261. The \", \+, and \* commands if used must be the last command
  262. on the line.
  263.      \ON KEY  commands, which  allow the user to move around
  264. within the text file, are only checked between lines (except
  265. during \",  \X, \MARQUE,  \SHOW and \RUN).  \ON KEY checking
  266. will not  occur between  lines if  the last  command on  the
  267. previous line is \+ (see that command for more information).
  268. Temporary suspension  of key checking (except for the ESCAPE
  269. key) enhances  the usefulness  of the \ON KEY command and is
  270. explained in more detail in the command description.
  271.      Usually only  the first  1, 2,  3 or  (sometimes)  more
  272. letters are  evaluated when  the program  decides what  word
  273. (command) you  have specified.   Some commands must be coded
  274. exactly as  they appear  in this  manual, particularly \END,
  275. \ELSE, and  \ENDIF.   All commands  must have enough of them
  276. coded to  distinguish them  from all  other commands.  Since
  277. future releases will include additional commands, the use of
  278. abbreviations is NOT AN APPROVED TECHNIQUE.  It is mentioned
  279. here "for documentation purposes only."
  280.      
  281.      
  282.      PARAMETERS
  283.      Some commands  can have  a varying number of parameters
  284. following them.   Some may or may not have any parameters at
  285. all.  Most expect commas to separate a series of values.
  286.      Parameters may  be positional or keywords, depending on
  287. the command.  As an example of positional parameters, assume
  288. you have  issued a  command to  draw a  MARQUE (such as they
  289. have on  Broadway) on  the screen.   This program has such a
  290. command.  Here is an example:
  291.           
  292.           \MARQUE 20,24,40,50
  293.           
  294.      This will  display a  moving  rectangular  marque  with
  295. opposite corners  at dot 20,24 and dot 40,50.  The syntax of
  296. this command (so far) is \MARQUE #,#,#,#.
  297.      
  298.      
  299.      KEYWORDS
  300.      Some commands  have "KEYWORD="  parameters.  \MOUSE and
  301. \SPRITE are  good examples.   A typical \MOUSE command might
  302. look like this:
  303.           
  304.           \MOUSE LOCATION=180,100 WINDOW=33,53,188,130
  305.           ROUNDS=30
  306.           
  307.      This will  display a  mouse cursor  at location 180,100
  308. (near the  middle of  the screen), in a window with opposite
  309. corners at 33,53 and 188,130.  It will display for 30 rounds
  310. (see \MOUSE for an explanation of the ROUNDS option).
  311.      Parameters,  whether  positional  or  keyword,  may  be
  312. specified with  numeric literals,  auxboxes,  variables,  or
  313. mathematical expressions.
  314.      
  315.      
  316.      MATHEMATICAL EXPRESSIONS
  317.      Let's say  you don't want to say dot 20,24 as the upper
  318. left corner  of the  MARQUE, but  rather, dot (10 + 10),(8 +
  319. 16).   This is actually the SAME DOT!  10 plus 10 is twenty,
  320. and 8  plus 16  is twenty-four.  You may use parenthesis and
  321. variables just as you would in high-school algebra.  You can
  322. use operators  for addition, subtraction, multiplication and
  323. division (+,-,/,*)  with or  without using parenthesis.  The
  324. order of  evaluation, as with algebra, is parenthesis first,
  325. then multiplication  and division  equally (left  to right),
  326. and then addition and subtraction equally (left to right.)
  327.      
  328.      
  329.      AUXBOXES
  330.      Suppose you  don't want  to specify  an exact place for
  331. the MARQUE,  but rather, you want to use values contained in
  332. your auxboxes.   The \MARQUE command, using auxboxes, (short
  333. for "AUXilliary  storage BOXES"  and  we  pronounce  it  "OX
  334. BOXES")  1, 2, 3 and 4, would look like this:
  335.           
  336.           \MARQUE #1,#2,#3,#4
  337.           
  338.      If auxbox  #1 contained  the value 20, #2 contained 24,
  339. #3   contained 40,  and #4  contained 50, then this would do
  340. the EXACT SAME THING as in the previous examples.
  341.      Syntax requires that auxboxes be described with a pound
  342. sign (#)  in front  of them, unless you had previously named
  343. the auxbox, in which case you could specify the name instead
  344. of the  number.  There cannot be any signs (+,-) between the
  345. pound sign  (#) and the auxbox number.  If the pound sign is
  346. not present,  the program  thinks it  is  seeing  a  numeric
  347. literal if  the first character is a number (0 through 9) or
  348. the plus (+) and minus (-) signs.  If the first character is
  349. a letter,  it assumes  you are  using a named auxbox, unless
  350. the name  is ONE  AND ONLY ONE character long.  In this case
  351. the program  assumes you  are referring to one of 26 special
  352. numeric variables (see below).
  353.      The auxboxes  don't have  to contain numbers.  They can
  354. also  contain  "literals"  (alphanumerics).    For  example,
  355. TIME&DATE  is   an  alphanumeric   literal,  not  a  number.
  356. Alphanumeric auxboxes  can be  up to 80 characters long.  If
  357. you try  to use  an auxbox  that has  non-numeric data in it
  358. when you need a numeric value...it's an error.  Also, if you
  359. have not  set an  auxbox to a value before trying to use it,
  360. that's an error too (auxboxes don't actually exist until you
  361. put something  in them.)   Auxboxes can be switched back and
  362. forth  from   numeric  to  alphanumeric  values  or  removed
  363. entirely to make room for new ones.
  364.      
  365.      
  366.      VARIABLES
  367.      When the  program encounters  a solitary letter where a
  368. value is  expected it is interpreted as a variable, which is
  369. always numeric,  and the  value in  that variable is used in
  370. the command.   These  are very much like algebraic variables
  371. except for variables A through F.  The program AUTOMATICALLY
  372. puts values  in those six, so don't try to use them to store
  373. anything!  Some other commands will put values in additional
  374. variables (for example \SET.)
  375.      
  376.      Here are some more examples of valid command syntax:
  377.           
  378.           \ADD (8 + 16) TO Q
  379.           \LINE (M*3),(N+80),(O-160),(P+ #434),#23
  380.           \READ GREETING.PIC
  381.           \BUILD #23="Today is ",TIME&DATE[1,8]
  382.           \"
  383.      
  384.      
  385.      SYNTAX
  386.      Wherever a  pound sign  (#) appears  in  the  following
  387. command listing  it can mean several things.  If it is where
  388. a numeric  value should  be, it  can be an auxbox, variable,
  389. number or  mathematical expression  containing any  of these
  390. elements.  If it is where an alphanumeric value should be it
  391. must be  an auxbox (not a variable), or in most cases can be
  392. an alphanumeric literal inside quote marks.
  393.      Start alphanumeric  literals with  a single or a double
  394. quote and  end them  with whichever  (single or  double) you
  395. started them  with.   To specify a numeric literal just type
  396. the number.   To  specify an  auxbox type  the number of the
  397. auxbox with  a pound  sign (#) in front of it, such as #123.
  398. If the  auxbox is  named you  may use the name.  A number of
  399. commands  (such   as  \DISPLAY)   allow  either  numeric  or
  400. alphanumeric values in each position.
  401.      Braces ({,})  are used  in this manual to indicate that
  402. several different  things can be put there, or that optional
  403. parameters may  be  included.    Do  not  code  the  braces.
  404. Brackets ([,])  on the  other  hand  should  be  coded  when
  405. indicated.   They refer  to characters  within  alphanumeric
  406. auxboxes.
  407.      A mathematical  expression must be constructed entirely
  408. of mathematical  parts.  You  may  use  any  combination  of
  409. parenthesis  (   (  )   ),  operators  (+-*/)  and  operands
  410. (auxboxes, numbers  or variables).   Evaluation is standard:
  411. things inside  of  parenthesis  are  evaluated  first,  then
  412. multiplication and  division operators  are  evaluated  with
  413. equal precedence,  then addition  and  subtraction  equally.
  414. Aside  from   these  rules,   evaluation  is  left-to-right.
  415. Internal calculations  are  handled  as  signed  double-word
  416. values.   This means  the intermediate results can be signed
  417. values up  to 31  bits long.   The  final  total  should  be
  418. between -32K and +32K to be handled properly.  The following
  419. statement would  be valid if auxbox #323 contained a numeric
  420. value and variable R was not 0:
  421.           
  422.           \MOVE (M*N)+O+#323-P+(Q/R) TO S
  423.           
  424.           
  425.           
  426.           
  427.           
  428.           
  429.  
  430.                               
  431.  
  432.  
  433.                      **** ACTIVATE ****
  434.  
  435.  
  436. FORMAT: \ACTIVATE {SCREEN #}
  437.  
  438.  
  439.      Screen 0  is the actual screen while screen 1 is the
  440.      normal background  screen.   By activating screen 1,
  441.      all \SHOW,  \RUN, \LINE,  \CIRCLE,  \DOT  and  other
  442.      pixel-writing  commands   write  to  the  background
  443.      screen.   Also all  text displayed  with the current
  444.      font is  written to  the activated screen.  The only
  445.      things that  are NOT  written to the activated frame
  446.      are text  which uses the DOS font (including numeric
  447.      display, lines  displayed and  entered by  the  user
  448.      with the  \QUESTION command,  and text displayed for
  449.      the \WAIT  RETURN command and when the ESCAPE key is
  450.      pressed.)
  451.  
  452.      This function  is especially  useful  for  designing
  453.      complex images which you will want to display all at
  454.      once.  You can create them while the user is reading
  455.      something else on the screen.
  456.  
  457.      The  background   frame  is   also  used   for  MASK
  458.      operations. The image that is brought forward during
  459.      the \SHOW  of a  masked  frame  is  taken  from  the
  460.      background screen  and then  the  merged  frame  and
  461.      background are  moved  to  the  screen.    Therefore
  462.      although most  image display  commands can  write to
  463.      any screen  (0,1...), masked  frame should  only  be
  464.      written to  screen 0.   Otherwise unexpected results
  465.      may appear.
  466.  
  467.      Any error, even if trapped, will activate screen 0.
  468.                               
  469.  
  470.  
  471.                         **** ADD ****
  472.  
  473.  
  474. FORMAT: \ADD # TO #
  475.  
  476.  
  477.      Must be  numeric.  The first # can be a mathematical
  478.      expression.   The second  # must  be a  variable  or
  479.      auxbox.  The result will overlay the second value.
  480.  
  481.  
  482. EXAMPLES:
  483.  
  484.      \ADD #24 TO #8
  485.      \ADD #24*#43 TO #12
  486.      
  487.      (The second  example multiplies  the contents of auxbox
  488.      24 by the contents of auxbox 43 and adds the product to
  489.      the contents of auxbox 12, putting the result in auxbox
  490.      12.)
  491.                               
  492.  
  493.  
  494.                       **** APPEND ****
  495.  
  496.  
  497. FORMAT: \APPEND NNNNNNNN.PIC #,#
  498.  
  499.  
  500.      The specified  frames from the named picture file on
  501.      disk are appended to the current file in RAM or EMM.
  502.      This means  they are  tacked on  to the  end of  the
  503.      file.   The frames  can all be shown in one animated
  504.      sequence.   It is  a good  idea to  \APPEND as  many
  505.      frames as  possible at  once.   It  is  faster,  and
  506.      whenever you  add single  frames DOS has to give the
  507.      program smaller,  more wasteful  chunks of RAM. This
  508.      can fragment  the use  of your  computer's memory if
  509.      you  continually   are  \APPENDing   and  \DELETEing
  510.      frames. Instead,  \READ in  a new  picture file when
  511.      possible so the program will return all the previous
  512.      allocations of RAM or EMM to DOS and start fresh.
  513.  
  514.      After your  \APPEND frames you will need to refer to
  515.      the frame  #'s as  they exist  in RAM or EMM--not by
  516.      their numbers in the original file.
  517.  
  518.      If the  second value is -1 the program will read the
  519.      entire picture file.
  520.  
  521.      The #  of frames  that were actually read will be in
  522.      variable "A".
  523.  
  524.      When creating/testing  a text file this command will
  525.      execute each  time it  is encountered.    Therefore,
  526.      your picture  file can  get very  big very  quickly.
  527.      You  will  have  to  get  around  this,  perhaps  by
  528.      commenting out  the line temporarily by inserting an
  529.      asterisk (*)  in the  second column  while you  test
  530.      your text file.  Don't forget to remove the asterisk
  531.      when you save the text file!
  532.  
  533.      \APPEND can  be used to salvage damaged files.  If a
  534.      picture file  is invalid for any reason it cannot be
  535.      \READ but it may be possible to \APPEND some or even
  536.      all of  the frames.  Dust particles on a diskette or
  537.      "head  crashes"   could  all   create  invalid  file
  538.      conditions.     Do  not   expect  \APPEND  to  solve
  539.      anything!  Maintain multiple backups!
  540.                               
  541.  
  542.  
  543.                      **** AUTHORITY ****
  544.  
  545.  
  546. FORMAT: \AUTHORITY {HIGH}
  547.  
  548.  
  549.      In order to use the \OUT command you need to set the
  550.      AUTHORITY LEVEL  to high.   This  merely allows  the
  551.      \OUT command  to execute.  OUT is very powerful--you
  552.      should KNOW WHAT YOU ARE DOING BEFORE USING THE \OUT
  553.      COMMAND.   IT IS  NOT REPEAT  NOT TO BE PLAYED WITH.
  554.      It will  write directly  to the  hardware.   You can
  555.      crash the system or even BREAK THE MONITOR and other
  556.      parts if  you \OUT garbage.  I'm SERIOUS.  DON'T USE
  557.      \OUT UNLESS YOU UNDERSTAND WHAT IT WILL DO.
  558.  
  559.      That's why you have to enable \OUT with \AUTHORITY.
  560.  
  561.  
  562.                               
  563.                               
  564.  
  565.  
  566.                        **** BEEP ****
  567.  
  568.  
  569. FORMAT: \BEEP #{,#}
  570.  
  571.  
  572.      Beeps the  speaker for the duration specified in the
  573.      first number.  The first number represents a unit of
  574.      time equal to that used with the SPEED option of the
  575.      \ROUNDS command  and other  commands. A value of 584
  576.      will be about one second. A value of zero clicks the
  577.      speaker.   Maximum value  is 10,000.    Duration  is
  578.      preset to 23.
  579.  
  580.      If the  \CLOCK speed  has been  set differently from
  581.      the  default,   the  length  of  the  beep  will  be
  582.      proportionately changed.
  583.  
  584.      The optional  second number  is the  tone in cycles-
  585.      per-second.   If present  it must be greater than 20
  586.      or it  will be  ignored.   Tone  is  preset  to  988
  587.      cycles/second.
  588.  
  589.      \SOUND OFF will override this command.
  590.                               
  591.  
  592.  
  593.                        **** BLANK ****
  594.  
  595.  
  596. FORMAT: \BLANK #,#,#,#
  597.  
  598.  
  599.      Will blank  a rectangle on the screen from the first
  600.      two values  (X-low, Y-low)  to the second two values
  601.      (X-high, Y-high).
  602.                               
  603.  
  604.  
  605.                        **** BREAK ****
  606.  
  607.  
  608. FORMAT: \BREAK {ON} or \BREAK OFF
  609.  
  610.  
  611.      This command is a debugging tool and is not expected
  612.      to ever  be used  in a  finished tutorial.  It turns
  613.      "single-step" mode  on and  off.  You can also begin
  614.      single-step  operation   by  pressing   ESCAPE   and
  615.      following the prompts.  To turn single-step mode off
  616.      again, press ESCAPE and don't turn the option on.
  617.  
  618.      In single-step  mode the  next line  to be  executed
  619.      will appear  at  the  bottom  of  the  screen.    If
  620.      multiple commands  appear on the same line they will
  621.      all be  shown and  THEY WILL  ALL BE EXECUTED in the
  622.      next cycle.   After  displaying the line the program
  623.      waits for  you to  press a  key.  That key goes into
  624.      the program  as if  you had pressed it in the normal
  625.      course of  running the  tutorial--it is NOT absorbed
  626.      by the  "single-step" operation.    Macros  are  NOT
  627.      single-stepped.
  628.  
  629.      During single-step  mode all \ON KEY jumps and calls
  630.      will be  taken except the "global" option.  However,
  631.      the \X  NNNNN (paragraph)  that the command jumps to
  632.      will NOT  be shown,  nor will  any commands  on that
  633.      line or  connected by \+.  This is because lines are
  634.      only displayed when user keypresses would be checked
  635.      for.  This is also true for \CALL's and \JUMP's--the
  636.      paragraph name lines (\X NNNNN) will not be shown.
  637.                               
  638.  
  639.  
  640.                        **** BUILD ****
  641.  
  642.  
  643. FORMAT: \BUILD #=#{,#,# etc.}
  644.  
  645.  
  646.      This command  creates an  alphanumeric auxbox out of
  647.      other auxboxes, or even pieces of other auxboxes, or
  648.      numbers, or literals (in quotes).  The maximum total
  649.      length is 80 characters.  Separate each element with
  650.      commas.
  651.  
  652.  
  653. EXAMPLE:
  654.  
  655.      \MOVE "HELLO " to #4
  656.      \BUILD #3=#4,"THERE!"
  657.      \DISPLAY #3   ;(HELLO THERE! is displayed)
  658.                               
  659.  
  660.  
  661.                       **** BUTTON ****
  662.  
  663.  
  664. FORMAT: \BUTTON 1=# 2=# 3=#...7=# or 0
  665.  
  666.  
  667.      Gives an alternate key value for any of seven button
  668.      codes used  by the  mouse, joystick,  or  digitizer.
  669.      The normal  (default) key  value for  all buttons is
  670.      7181, the  return  key.    Values  do  NOT  have  to
  671.      correspond to actual key values.
  672.  
  673.      If the  input device supplies a button value greater
  674.      than seven  it is automatically assigned the keycode
  675.      7181.
  676.  
  677.      \BUTTON 0  (zero) will  ask the user to enter button
  678.      presses and  press  a  key.    This  gives  them  an
  679.      opportunity to  adjust the  buttons to  what is most
  680.      convenient for  them.   The button  presses that the
  681.      user responds  with will  be remapped to the first 3
  682.      button values and to no (0) buttons pressed.
  683.  
  684.      NOTE:   For codes  corresponding to  multiple button
  685.      presses, the  program will "probably" respond to the
  686.      first button  first, as  it is  almost impossible to
  687.      press the buttons at the exact same time.  Similarly
  688.      when releasing  multiple buttons,  an indication  of
  689.      other combinations is likely to occur.  Thus single-
  690.      button functions are most reliably reported.
  691.                               
  692.  
  693.  
  694.                        **** CALL ****
  695.  
  696.  
  697. FORMAT: \CALL NNNNN
  698.  
  699.  
  700.      NNNNN is  a name  of a  place in your text file (see
  701.      the \X  command).    The  name  can  be  one  to  30
  702.      characters long  with no  imbedded spaces.  The name
  703.      must be exactly the same, including capitals and all
  704.      other characters,  in all  places it  appears or you
  705.      will not  be able  to reference  it correctly.   The
  706.      difference between  \CALL and  \JUMP is that \RETURN
  707.      will  return  processing  to  the  instruction  that
  708.      follows  the  \CALL.    The  instructions  that  the
  709.      program does  between the  \CALL  and  the  matching
  710.      \RETURN are  called a  subroutine.  A subroutine may
  711.      call other  subroutines, and  the current call could
  712.      in turn  have been  called... You  can go thirty-two
  713.      (32) deep before you get in too deep and the program
  714.      can't process.  (An error message appears.)
  715.                               
  716.  
  717.  
  718.                        **** CALLM ****
  719.  
  720.  
  721. FORMAT: \CALLM NNNNN
  722.  
  723.  
  724.      Use this  special form  of the \CALL command to call
  725.      paragraphs within  macros from  text files.   Within
  726.      all macros,  you are  expected to eventually \RETURN
  727.      to the  calling text file, or return with an \ON KEY
  728.      or \READ command.
  729.  
  730.      Once inside a macro use the regular \CALL command to
  731.      call other paragraphs within the macro area.
  732.  
  733.      When you read in a new text file all nested \CALL's,
  734.      \CALLM's and  \IF's are reset, and processing begins
  735.      at the  start of  the text  file.   This will happen
  736.      even if  the program does not actually read the file
  737.      because it is already in RAM (see \READ).
  738.                               
  739.  
  740.  
  741.                       **** CIRCLE ****
  742.  
  743.  
  744. FORMAT: \CIRCLE {ANGLE=#,# COLOR=# LOCATION=#,#
  745.           RADIUS=#,#}
  746.  
  747.  
  748.      Draws a circle, oval, or arc by one of two methods.
  749.  
  750. ANGLE=#,#
  751.      If specified  the program will use a lookup table of
  752.      sine values  to calculate  the endpoints of 1-degree
  753.      connected line  segments.   If you  draw a  complete
  754.      circle  by   not  specifying   any  angle   (not  by
  755.      specifying   0,360)    it   calculates    the   dots
  756.      mathematically using the Pythagorean Theorem.
  757.  
  758. COLOR=#
  759.      If  in  XOR  mode  when  executed,  will  produce  a
  760.      speckled circle  because some  dots are  drawn  more
  761.      than once.
  762.  
  763. LOCATION=#,#
  764.      Is the  location of  the center  of the  circle.  It
  765.      need not be on the screen.
  766.  
  767. RADIUS=#,#
  768.      Is the length of the radii on the X, Y axis.  ANGLES
  769.      are only "correct" (circular, not oval) for radii of
  770.      10:12 ratio--the ratio of the individual dot's width
  771.      to height  on a  standard CGA  monitor  with  a  4:3
  772.      ratio.   Other ratios  will affect  the actual angle
  773.      that a  specified angle is drawn at.  Maximum radius
  774.      on either axis is 2000.
  775.  
  776.  
  777.                               
  778.  
  779.  
  780.                        **** CLEAR ****
  781.  
  782.  
  783. FORMAT: \CLEAR {KEYBOARD, MACROS, NAMES,  ON KEYS,
  784.           PICTURES, SCREEN, SHOW, SPRITES, SPRITE #}
  785.  
  786.  
  787.      Resets parameters  to "standard"  values.   Use only
  788.      one option at a time.
  789.  
  790. KEYBOARD
  791.      Clears all keys out of the keyboard buffer.  The key
  792.      values are  lost.    The  program  always  gets  ONE
  793.      keypress (if available) between each command line or
  794.      cycle of  animation and puts it in variable "B".  It
  795.      is therefore  unlikely that the keyboard buffer will
  796.      ever fill  up, except  when executing  commands that
  797.      take a  long time  to process.  \DRAW with the PAINT
  798.      option and  \READ are  both candidates.   Of course,
  799.      the user  would have to be pressing a lot of keys or
  800.      holding one down.
  801.  
  802. MACROS
  803.      Clears the  macros you  have read  so far  and their
  804.      names.     The  program  stores  up  to  nine  macro
  805.      filenames that  have been read as well as the macros
  806.      themselves.   This command clears out both the names
  807.      and the  macros.  You can read more than nine macros
  808.      without \CLEARing  if  they  will  fit  in  the  10k
  809.      (approximate) available,  but the  names will not be
  810.      stored.     \READ  will   reread  the  macro  if  it
  811.      encounters a name it hasn't stored, possibly filling
  812.      up your  macro area.  You can  use \DELETE to remove
  813.      specific macro filenames without \CLEARing the macro
  814.      area.     This  command  also  clears  any  \ON  KEY
  815.      specifications that refer to paragraphs in the macro
  816.      area.
  817.  
  818. MOUSE
  819.      Sets mouse  options to  default values.   See \MOUSE
  820.      for what  these values are.  The \SCREEN command, if
  821.      it changes  the current  mode, will execute a \CLEAR
  822.      MOUSE command automatically.
  823.  
  824. NAMES
  825.      Clears all  symbolic auxnames that you have created.
  826.      No auxbox  data is cleared; it may still be referred
  827.      to by  auxbox number.   Reading  new text  files and
  828.      using the editor does NOT clear auxbox names.
  829.  
  830. ON KEYS
  831.      Clears all  \ON KEY specifications either for macros
  832.      or for  text depending  on where the command appears
  833.      (it clears  only the  one it's  in).   You need  not
  834.      specify which  one to clear.  The program clears the
  835.      macro specs if you are in a macro and the text specs
  836.      if you aren't.
  837.  
  838. ON ERROR
  839.      Clears the  \ON ERROR  command, making  the  program
  840.      stop on any error again (That's the default.)
  841.  
  842. PICTURES
  843.      This removes all pictures in RAM or EMM from memory.
  844.      Use before  changing screen modes because you cannot
  845.      change to incompatible modes (different resolutions)
  846.      while you  have pictures  in RAM or EMM.  You cannot
  847.      use this  option if  you have changes to the current
  848.      file or  if you  are in  the picture  editor at  the
  849.      time.
  850.  
  851. SCREEN
  852.      This is  a fastest  way to  clear the  screen.  Will
  853.      clear the  background  screen  if  it  is  currently
  854.      active.
  855.  
  856. SHOW
  857.      This clears  the parameters  set up with the keyword
  858.      options of \SHOW.  WINDOW is set to the full screen,
  859.      AND=NO, OR=NO,  XOR=NO,  PATH=NO,  LOCATION=0,0  and
  860.      MOTION=0,0.   The \SCREEN command, if it changes the
  861.      current mode,  will execute  a \CLEAR  SHOW  command
  862.      automatically.
  863.  
  864. SPRITES
  865.      Clears all  sprites  that  have  been  set  up  with
  866.      \SPRITE and  \SPRINT  and  resets  all  the  \SPRITE
  867.      parameters to the default values listed in \SPRITE.
  868.  
  869. SPRITE #
  870.      Clears one  sprinted frame  or  resets  the  \SPRITE
  871.      values  to   their  defaults  without  clearing  any
  872.      frames.  To use this option to clear a single sprite
  873.      element you must keep track of which frames were set
  874.      up with  \SPRINT and  in what  order.   To clear the
  875.      first sprinted  frame use  1, the  second, 2 etc.  A
  876.      value of  zero (0) will reset the \SPRITE parameters
  877.      but will NOT clear the elements you have already set
  878.      up.
  879.                               
  880.  
  881.  
  882.                        **** CLOCK ****
  883.  
  884.  
  885. FORMAT: \CLOCK SPEED=# CURSOR=#,# FORMAT={MM:SS,
  886.           HH:MM:SS, HH:MM,SS}
  887.  
  888.  
  889.      Clock serves  several functions.   It can be used to
  890.      set the  number of  times that  the PC  Asynchronous
  891.      Clock interrupt  occurs each second (SPEED= option),
  892.      or to  display the  current time  somewhere  on  the
  893.      screen.   When displaying  the time  only the digits
  894.      that change are updated, except the hours digits are
  895.      updated with  the minutes  digits.   If you  place a
  896.      drawing  or   text  over   the  clock  it  will  not
  897.      completely reappear  immediately. If a \CLEAR SCREEN
  898.      or similar  command is  executed  the  entire  clock
  899.      display will be rewritten.
  900.  
  901. SPEED=#
  902.      Specifies the number of times the asynchronous clock
  903.      should cause  an internal  software  interrupt,  per
  904.      second. Values  are from  1 to  6 where  one is  the
  905.      standard DOS  amount, about  18.2 times  per second,
  906.      and each  unit above  (2, 3 etc.) is twice as often.
  907.      The default  is 5,  or about  584 times  per second.
  908.      This provides  enough control  for most applications
  909.      without taking too much "overhead" in CPU usage.
  910.  
  911.      This value  is temporarily  reset  to  the  standard
  912.      value, 18.2,  during the  \EXECUTE command.   It  is
  913.      also reset on exit.
  914.  
  915. CURSOR=#,#
  916.      Specify the  position of  the on-screen clock on the
  917.      screen.   Values are in characters on the X, Y axis,
  918.      where 0,0 is the upper left corner of the screen.
  919.  
  920. FORMAT={MM:SS, HH:MM:SS, HH:MM,SS}
  921.      Lets you  specify how  much of  the current time you
  922.      would like  to display.  The format HH:MM will blink
  923.      the colon  every second,  other formats  update  the
  924.      hours and minutes only once a minute.
  925.                               
  926.  
  927.  
  928.                        **** CLOSE ****
  929.  
  930.  
  931. FORMAT: \CLOSE NNNNNNNN.EXT or LPT#:
  932.  
  933.  
  934.      This closes  a named  file or  turns off  access  to
  935.      LPT#: (the  system printer).   NNNNNNNN  is the file
  936.      name.   The extension  can be DAT, PIC, or PRN.  The
  937.      file must  have previously  been opened  with \OPEN.
  938.      Errors in  processing will  cause these  files to be
  939.      closed automatically  when processing  stops.   They
  940.      will also be closed if you exit to DOS.
  941.  
  942.      Files must  always  be  closed  if  they  have  been
  943.      written to,  so that  the file directory information
  944.      that DOS  maintains will  be properly  updated.  For
  945.      all manual  operations  with  the  editor  and  when
  946.      writing auxiliary  files, this program automatically
  947.      closes files after it writes them.
  948.  
  949.      Closing LPT#:  (where #  is 1,  2, or  3)  does  not
  950.      actually signal  the printer  in any  way, it simply
  951.      disables access to it with \PRINT. You might do this
  952.      so that  you can  use the  statement to  write print
  953.      files to disk.
  954.  
  955.  
  956. EXAMPLES:
  957.  
  958.      \CLOSE LPT1:
  959.      \CLOSE SOANDSO.PRN
  960.                               
  961.  
  962.  
  963.                       **** CONNECT ****
  964.  
  965.  
  966. FORMAT: \CONNECT {ON or YES} or {OFF or NO}
  967.  
  968.  
  969.      This will  cause vector  images  to  be  drawn  with
  970.      connected dots in the picture editor and with \SHOW.
  971.      To  draw   connected  dots   with  sprites  use  the
  972.      CONNECT=YES option  of \SPRITE.   The  color of  the
  973.      line that is drawn will be the color of the upcoming
  974.      dot.  The starting dot of each line segment will not
  975.      be drawn  after the  first one  in the  image.   The
  976.      connect option  is initially  OFF.  \CONNECT with no
  977.      parameters defaults to turning connected mode ON.
  978.  
  979.      The lines  are clipped  if the endpoints are off the
  980.      screen.   In Version  7.24 if the endpoints are more
  981.      than 32767  dots apart on any axis a sign conversion
  982.      error may  occur during  internal calculations,  and
  983.      the  line   will  not   be  drawn  properly.    This
  984.      separation corresponds  to more  than 100  times the
  985.      width of  the screen  in the  CGA mode  and over 150
  986.      times the CGA height of 200 dots.
  987.  
  988.  
  989. EXAMPLES:
  990.  
  991.      \CONNECT NO     ;turns it off
  992.      \CONNECT YES    ;turns it on
  993.      
  994.                               
  995.  
  996.  
  997.                       **** CONVERT ****
  998.  
  999.  
  1000. FORMAT: \CONVERT #
  1001.  
  1002.  
  1003.      This will  convert an auxbox from an alphanumeric to
  1004.      a numeric  or from a numeric to an alphanumeric.  It
  1005.      is up  to you  to know  which way you are going.  If
  1006.      you are  going from an alphanumeric to a numeric and
  1007.      the  alphanumeric   starts  with  numbers,  it  will
  1008.      convert the  numbers  only.    Numbers  that  become
  1009.      greater than  32767 or less than -32768 will produce
  1010.      an error.  The alphanumeric auxbox produced when you
  1011.      convert from  a number  is six  bytes long  and will
  1012.      contain "leading"  (left-hand) spaces  in  place  of
  1013.      high-order zeroes,  with a  minus sign (-) if needed
  1014.      next to the leading character.  Non-numeric auxboxes
  1015.      are displayed  with the  current font  at a location
  1016.      set by  the \LOCATE  command.   Numeric auxboxes are
  1017.      displayed with the DOS font, and the cursor position
  1018.      is then set with \CURSOR.
  1019.  
  1020.  
  1021. EXAMPLES:
  1022.  
  1023.      \MOVE 328 TO #80
  1024.      \CURSOR 0,0
  1025.      \DISPLAY #80    ;328 is displayed as a numeric
  1026.      \CONVERT #80
  1027.      \LOCATE 0,10
  1028.      \DISPLAY #80    ;328 displayed in the current font
  1029.      \DISPLAY #80[4,2]    ;32 is displayed.
  1030.      
  1031.                               
  1032.  
  1033.  
  1034.                        **** CRAWL ****
  1035.  
  1036.  
  1037. FORMAT: \CRAWL #{,X or A or O,#}
  1038.  
  1039.  
  1040.      This sets  text display  mode to CRAWL from right to
  1041.      left.   The first  number is the speed of the crawl,
  1042.      the second  parameter if  included should be an X to
  1043.      XOR the text onto the screen, or an A or O to AND or
  1044.      OR the  text.   If the text is to be XORed, ANDed or
  1045.      ORed, then  a third  value should be included as the
  1046.      color to  XOR, AND  or OR  the text  with as  it  is
  1047.      placed on  the screen.    Like  \SCROLL  and  unlike
  1048.      \OVERLAY it  does not  XOR, AND  or OR the text with
  1049.      what is already on the screen.
  1050.  
  1051.      The area  to be  crawled is set with \LOCATE for the
  1052.      upper left corner, and \WIDTH.  All \CRAWLed text is
  1053.      one character high.
  1054.  
  1055.      Anything in  the crawl  area that  was there  before
  1056.      will be shifted off the screen.
  1057.  
  1058.      This command  gives the effect of an electronic news
  1059.      banner crawling through a window from right to left.
  1060.  
  1061.      AND, OR,  and XOR are most useful for fonts designed
  1062.      with just black (background) and the highest numeric
  1063.      color available for the screen mode.
  1064.  
  1065.      Special considerations for BITPLANE modes:
  1066.  
  1067.      With \SCROLL and \OVERLAY, in bitplane modes you can
  1068.      only XOR, AND, or OR with color 1.  Use \TEXT PLANE=
  1069.      for effects similar to what other color values would
  1070.      give you in  bitmapped modes.
  1071.  
  1072.      OR has  no effect  in bitplane  modes (will work the
  1073.      same as XOR).
  1074.  
  1075.      AND with 0 has no effect in ANY mode.
  1076.                               
  1077.  
  1078.  
  1079.                       **** CURSOR ****
  1080.  
  1081.  
  1082. FORMAT: \CURSOR #,# {,#,#}
  1083.  
  1084.  
  1085.      This sets  a cursor  for user input and numeric data
  1086.      output.   The screen  in this case should be thought
  1087.      of as  being cursor  positions.    See  the  \SCREEN
  1088.      command for a table of character dimensions for each
  1089.      screen mode.  The upper left corner is position 0,0.
  1090.      In CGA  mode, which is 320 by 200 dots, there are 40
  1091.      X 25  cursor positions.   The  first  value  is  the
  1092.      column (0-39)  and the  second value  is the row (0-
  1093.      24).  The bottom right position of the screen is not
  1094.      available because DOS would scroll the entire screen
  1095.      if a character is placed there.
  1096.  
  1097.      The second  two numbers, if present, create a window
  1098.      for user  input and numeric data output.  The cursor
  1099.      will be  set to  the upper  left corner  (the  place
  1100.      specified by  the first  two numbers.)   Text  lines
  1101.      that are  too long  for the available window will be
  1102.      automatically scrolled for the user.
  1103.                               
  1104.  
  1105.  
  1106.                        **** DATA ****
  1107.  
  1108.  
  1109. FORMAT: \DATA  #{,#,#...}
  1110.  
  1111.  
  1112.      This command  reads ASCII data into auxboxes in P11.
  1113.      The file  should be  delimited by  commas  for  each
  1114.      field and  by 13,10 (carriage return, line feed) for
  1115.      each record.  Each \DATA statement reads ONE record.
  1116.      Maximum record  length is  512 bytes  including  the
  1117.      13,10.   Each field  is placed  in the corresponding
  1118.      auxbox, by position.
  1119.  
  1120.      You should  \ELIMINATE the  auxbox(s) you  will read
  1121.      data into  before  executing  the  \DATA  statement.
  1122.      That way if the auxbox(s) still don't exist you know
  1123.      you read the last record or a blank (empty) record.
  1124.                               
  1125.  
  1126.  
  1127.                       **** DELETE ****
  1128.  
  1129.  
  1130. FORMAT: \DELETE {FRAME #} {MACRO NNNNNNNN}
  1131.  
  1132.  
  1133.      The FRAME  option of  this command  will delete  the
  1134.      frame requested from the current picture file in RAM
  1135.      provided there are no changes to that file since the
  1136.      last save.   This command will only return the space
  1137.      to DOS  if the  frame being deleted is the sole user
  1138.      of the  associated chunk  of RAM.  See Appendix "E",
  1139.      Space Considerations, for more information.
  1140.  
  1141.      The MACRO option will delete the macro name from the
  1142.      list of stored names.  IT WILL NOT DELETE THE MACRO!
  1143.      This is  so you  can more easily control which macro
  1144.      names  are  stored.    When  a  \READ  statement  is
  1145.      encountered and  the name  matches one  of the  nine
  1146.      stored macro  names, the  read is  skipped.  You may
  1147.      use \CLEAR  to remove  all the  macro names but that
  1148.      also removes the macros.
  1149.  
  1150.  
  1151. EXAMPLES:
  1152.  
  1153.      \DELETE FRAME 23
  1154.      \DELETE MACRO SETNAMES
  1155.                               
  1156.  
  1157.  
  1158.                      **** DIGITIZER ****
  1159.  
  1160.  
  1161. FORMAT: \DIGITIZER {OFF}, {INITIALIZE #,#{,#{,#,#}}}, or
  1162.           {?}
  1163.  
  1164.  
  1165. INITIALIZE
  1166.      Turns the  digitizer on.   The first two numbers for
  1167.      X, Y  axis resolution  are not adjusted before being
  1168.      passed to  the digitizer  so be  sure to account for
  1169.      any rounding  that  the  digitizer  will  do.    The
  1170.      default values  (in CGA  mode) are 328 on the X-axis
  1171.      and 298  on the  Y-axis.   Refer to your digitizer's
  1172.      manual for  more information.   The  third number if
  1173.      present should  be a two or a one (2 or 1).  If two,
  1174.      COM2  rather   than  COM1   will  be   used.    (The
  1175.      communications port COM1 is located at address 3F8h,
  1176.      while COM2 is at 2F8h.)
  1177.  
  1178.      The fourth  and fifth  numbers are  the X-offset and
  1179.      the Y-offset,  if you  don't want  offset 0,0.   The
  1180.      offset is  added to  the screen  X,Y position to get
  1181.      the minimum axis values.  You may prefer a border on
  1182.      the right as well as the left.
  1183.  
  1184. OFF
  1185.      Turns the digitizer off if it was on.
  1186.  
  1187. ?
  1188.      Returns the  current state  of the  digitizer. 0  is
  1189.      off, 1  is off, but had previously been on, and 2 is
  1190.      currently on.  Value is returned is variable "A".
  1191.  
  1192.      Turning on  the digitizer  turns off  the  mouse  or
  1193.      joystick if they are on.
  1194.  
  1195.      If you  change screen  modes you  should  reset  the
  1196.      digitizer, because the maximum X- and Y- axis values
  1197.      may be incorrect for the new screen mode.
  1198.                               
  1199.  
  1200.  
  1201.                       **** DISPLAY ****
  1202.  
  1203.  
  1204. FORMAT: \DISPLAY #{,#,#...}
  1205.  
  1206.  
  1207.      Will display text or numbers on the screen.  Numbers
  1208.      are displayed  using  the  DOS  standard  font,  and
  1209.      always on  the actual  screen, wherever  \CURSOR set
  1210.      the cursor.   Alphanumerics,  including literals  in
  1211.      quotes,  are   displayed  using   the  current  font
  1212.      wherever \LOCATE  set the text cursor, on the active
  1213.      screen (see  \ACTIVATE.)   Additional items  can  be
  1214.      displayed when  separated by  commas.   Any  literal
  1215.      auxbox can  have just  a portion  of it displayed by
  1216.      immediately following  the name  or #  with brackets
  1217.      and two numbers:
  1218.  
  1219.      \DISPLAY #45[12,23]
  1220.      
  1221.      The first  number in  the brackets  is the  starting
  1222.      position to  display and  the second  is the length.
  1223.      These numbers  can  be  variables  or  even  numeric
  1224.      auxboxes.   Do not  use the  tab character  within a
  1225.      \DISLAY sequence.
  1226.  
  1227.  
  1228. EXAMPLES:
  1229.  
  1230.      \DISPLAY "Today is ",TIME&DATE[1,8]
  1231.      \DISPLAY A,B,C,#1,#45,#32767
  1232.      
  1233.      In the second example, first the variables A, B, and
  1234.      C will  be displayed  using the DOS character set at
  1235.      the current numeric cursor location, and the numeric
  1236.      cursor location will be advanced by seven places for
  1237.      each variable  displayed.   If there  is not  enough
  1238.      room (seven  characters) the cursor will be advanced
  1239.      to the  next line and to the top of the screen if at
  1240.      the bottom.  The placement of auxboxes #1 and #45 in
  1241.      this example  would  depend  on  whether  they  were
  1242.      numeric or  not.  Auxbox #32767 (TIME&DATE) would be
  1243.      displayed wherever the non-numeric cursor is set (in
  1244.      the current  font)  and  would  advance  the  cursor
  1245.      according to the width of the font.  (See \LOCATE.)
  1246.                               
  1247.  
  1248.  
  1249.                       **** DIVIDE ****
  1250.  
  1251.  
  1252. FORMAT: \DIVIDE # by # {REMAINDER #}
  1253.  
  1254.  
  1255.      Don't divide  by zero, of course.  The second number
  1256.      can be  a numeric  literal,  mathematical  equation,
  1257.      numeric auxbox  or variable.   The first number must
  1258.      be a  numeric auxbox or variable.  The result (aside
  1259.      from the remainder) goes in the first value, and the
  1260.      remainder (if  specified) goes  in the  third value.
  1261.      REMAINDER is  optional.   If used only the first few
  1262.      letters (REM)  are actually  needed.  REMAINDER must
  1263.      follow the second number by at least one space.
  1264.  
  1265.  
  1266. EXAMPLES:
  1267.  
  1268.      \MOVE 32000 TO #48
  1269.      \DIVIDE #48 BY (34*55) +16000 REM A
  1270.      \DISPLAY #48,A
  1271.      
  1272.      1 and  14130 are  displayed on  the screen.  First, the
  1273.      portion referenced  by the word BY is evaluated so that
  1274.      the program knows what to divide #48 by.  (34*55)+16000
  1275.      is equal  to 17870.   Dividing  32000 by  17870 gives 1
  1276.      with a remainder of 14130.
  1277.                               
  1278.  
  1279.  
  1280.                         **** DOT ****
  1281.  
  1282.  
  1283. FORMAT: \DOT #,#,#{,X or A or O}
  1284.  
  1285.  
  1286.      The first  two numbers are the X, Y location for the
  1287.      dot.   The third  number is  the color  of the  dot,
  1288.      where zero  is the background color. The optional ,X
  1289.      (comma X) will XOR the dot onto the screen.  ,X will
  1290.      also turn  on XOR  mode for  future \DRAW  and \LINE
  1291.      commands.   Similarly, A will turn on AND mode and O
  1292.      will turn  on OR  mode.   Another  \DOT  command  is
  1293.      needed to turn off XOR, AND and OR.  To just turn on
  1294.      XOR or  OR without actually drawing anything, draw a
  1295.      background dot:   This  command  writes  a  dot  but
  1296.      background (0)  XORs to  produce no change.  To just
  1297.      turn on  AND, write  a foreground  dot (whatever the
  1298.      current screen  mode allows  as  the  highest  value
  1299.      dot.)   If the  third option  is a question mark (?)
  1300.      the color  of the  dot at  the location specified is
  1301.      put in  variable "A".   In this case do not use XOR,
  1302.      AND, or OR.
  1303.  
  1304.      \PEN can  also be  used to  turn on XOR, AND, and OR
  1305.      mode.
  1306.                               
  1307.  
  1308.  
  1309.                        **** DRAW ****
  1310.  
  1311.  
  1312. FORMAT: \DRAW {UDLREFGH}#, C#, J#,#, M{+,-}#,{+,-}#, P
  1313.           #,{UDLRHVA}, S{X,Y or A}
  1314.  
  1315.  
  1316.      All parameters  here are  one letter  and then  some
  1317.      numbers or  letters or  whatever.   The options that
  1318.      belong  to  each  parameter  follow  that  parameter
  1319.      immediately without spaces, except P (Paint).
  1320.  
  1321.      Commas are  not necessary  to separate  the elements
  1322.      providing the  syntax is  still understandable.  For
  1323.      example the two values that follow the "J", "P", and
  1324.      "M" options must be separated by commas, but options
  1325.      need not be.
  1326.  
  1327.      \DRAW functions  more or  less as  a series  of line
  1328.      segments.
  1329.  
  1330. J#,# will   Jump  to that  spot on  the screen without
  1331.      drawing.
  1332.  
  1333. UDLREFGH# will move # dots in the direction specified-
  1334.      -Up, Down,  Left, Right  and E, F, G, and H which
  1335.      go at  angles.   For example  one dot to the left
  1336.      and one  up is  H while  one dot to the right and
  1337.      one down is F.
  1338.  
  1339. C# is  a Color,  but C  followed by  just a comma (C,)
  1340.      sets the current color to clear (which is not the
  1341.      same as blank.)
  1342.  
  1343. S{X, Y or A}# is the Scale amount. X changes the scale
  1344.      for the  X-axis, Y  changes the scale for Y-axis,
  1345.      and A  changes them  both.  A number follows X, Y
  1346.      or A.   8  is unscaled, so 4 is half scale and 16
  1347.      is double  scale.  The X, Y or A must immediately
  1348.      follow the S with no spaces.
  1349.  
  1350. P is  the only draw command that should be followed by
  1351.      one or  more spaces  after the letter.  It stands
  1352.      for Paint  and IS the Paint command, but use only
  1353.      one letter to describe it.  (See \Paint).
  1354.  
  1355. M {+,-}#,{+,-}# is Move.  M will draw from the current
  1356.      cursor  location   to  the   spot  named  by  the
  1357.      coordinates #,#  that follow the M. The line will
  1358.      be in  the current  color   If  you  precede  the
  1359.      numbers with  a +  or  a  -,  the  move  will  be
  1360.      relative to  the initial cursor position.  Both X
  1361.      and Y must be specified even if they are 0.
  1362.  
  1363.  
  1364.  
  1365. EXAMPLES:
  1366.  
  1367.      \DRAW P 2,D,C2R33M+20,-35J40,43C,R22
  1368.      
  1369.      IS THE SAME AS:
  1370.      
  1371.      \DRAW P 2,D,C2,R33,M+20,-35,J40,43,C3,D4,C,R22
  1372.      
  1373.      In the  above example,  Paint mode is first set to a
  1374.      border color  of two (2) (red in palette 0 of CGA 4-
  1375.      color mode),  and aimed down.  Then the color is set
  1376.      to two  (2) and  the cursor is moved to the right 33
  1377.      units, painting  as it  goes.  The starting position
  1378.      was not  specified so  the  command  would  use  the
  1379.      current position.   Then the cursor moves to a point
  1380.      20 dots  to  the  right  AND  35  dots  down,  still
  1381.      painting as  it goes.   Next  it jumps  to  location
  1382.      40,43 WITHOUT  DRAWING ANYTHING.  Then  we  set  the
  1383.      color to  3 (yellow  in CGA palette 0) and draw down
  1384.      four dots.   Then  the color  is set to clear and we
  1385.      move right  22 units,  perhaps so  that another draw
  1386.      command can do something there.
  1387.                               
  1388.  
  1389.  
  1390.                      **** ELIMINATE ****
  1391.  
  1392.  
  1393. FORMAT: \ELIMINATE #,#,# TO #,# TO # etc..
  1394.  
  1395.  
  1396.      Eliminates auxboxes  from the  auxfile in  RAM.  You
  1397.      can delete one (1) or all (except the 32767th, which
  1398.      is TIME&DATE).  Commas are used to separate boxes to
  1399.      be removed.   When  the word TO separates the auxbox
  1400.      numbers, the  range, inclusive,  is removed.   It is
  1401.      important to remember two things about this command:
  1402.      First,  you   cannot  use  symbolic  names  or  math
  1403.      equations or  variables to  specify the locations to
  1404.      be eliminated.   The expressions must be #23, #45 TO
  1405.      #87, and  so on.   They are NOT evaluated--the first
  1406.      one just  listed would remove auxbox 23, not the one
  1407.      represented by  the value stored in 23.  Second, the
  1408.      symbolic name  is NOT  removed.   It still refers to
  1409.      this box. (Names are removed with \CLEAR NAMES.)
  1410.  
  1411.      A \READ  will NOT  read the  aux file  if it  is the
  1412.      exact same name as the aux file already in RAM.
  1413.  
  1414.  
  1415. EXAMPLES:
  1416.  
  1417.      \* this command clears all auxboxes except,
  1418.      \* of course, the TIME&DATE auxbox.
  1419.      \ELIMINATE #1 TO #32766
  1420.                               
  1421.  
  1422.  
  1423.                        **** ELSE ****
  1424.  
  1425.  
  1426. FORMAT: \ELSE
  1427.  
  1428.  
  1429.      Part of IF-THEN-ELSE statements.  See \IF.  When \IF
  1430.      statements are  evaluated, they  are either  TRUE or
  1431.      FALSE.     If  they   are  false,  they  go  to  the
  1432.      corresponding   \ELSE    statement   (skipping   any
  1433.      subordinate \IF's  and the  \THEN's and \ELSE's that
  1434.      accompany them).
  1435.  
  1436.      Either  the  \THEN  or  the  \ELSE  clause  and  any
  1437.      accompanying actions  can be  left off, but to leave
  1438.      both off would be totally useless.
  1439.  
  1440.  
  1441. EXAMPLES:
  1442.  
  1443.      \IF #34 = 233
  1444.      \ELSE
  1445.      \JUMP NEXT_CHECK
  1446.      \ENDIF
  1447.      \IF #54 = "5"
  1448.      \MOVE 4 TO G
  1449.      \ENDIF
  1450.      \X NEXT_CHECK
  1451.      \IF T = 76
  1452.      \THEN \MOVE 6 TO Q
  1453.      \ELSE \MOVE 4 TO Q
  1454.      \ENDIF
  1455.                               
  1456.  
  1457.  
  1458.                         **** END ****
  1459.  
  1460.  
  1461. FORMAT: \END
  1462.  
  1463.  
  1464.      Stops processing  and returns  you to the editor, or
  1465.      returns processing  to  DOS  if  using  the  runtime
  1466.      version.
  1467.  
  1468.      When the  program returns  to DOS it passes a return
  1469.      code as follows:
  1470.  
  1471.      
  1472.      0--Normal   exit--either    with   this    command   or
  1473.      interactively through F6.
  1474.      
  1475.      1--An error  occurred (errors are listed in the back of
  1476.      this manual).
  1477.      
  1478.      2--A critical error occurred--most likely a disk error,
  1479.      but possibly a character device error.
  1480.      
  1481.      3--Both an  error and  a critical error occurred.  This
  1482.      is difficult if not impossible to achieve.
  1483.      
  1484.                               
  1485.  
  1486.  
  1487.                        **** ENDIF ****
  1488.  
  1489.  
  1490. FORMAT: \ENDIF
  1491.  
  1492.  
  1493.      Ends an  IF-THEN-ELSE   statement.   See \IF.   This
  1494.      statement must  come before an \X command (paragraph
  1495.      name) coded in-line (sequentially) in the text file.
  1496.      However, you  can \JUMP and \CALL your way out of an
  1497.      \IF statement  or even  read in  a new  text file or
  1498.      \END the program.
  1499.  
  1500.      \ENDIF ends all nested \IF statements that have been
  1501.      coded in-line.   It does NOT end \IF statements that
  1502.      were in process when a call occurred, only the one's
  1503.      SINCE the last call.
  1504.  
  1505.  
  1506. EXAMPLES:
  1507.  
  1508.      \IF #32<999
  1509.      \ADD 1 TO #32
  1510.      \ELSE
  1511.      \MOVE 0 TO #32
  1512.      \IF C=3
  1513.      \MOVE 0 TO C
  1514.      \ELSE
  1515.      \ADD 1 TO C
  1516.      \ENDIF
  1517.                               
  1518.  
  1519.  
  1520.                        **** ERROR ****
  1521.  
  1522.  
  1523. FORMAT: \ERROR ?
  1524.  
  1525.  
  1526.      Places the last (most recent) error code in variable
  1527.      "A".   It has  no other  purpose.  Use \ON ERROR for
  1528.      error trapping.
  1529.                               
  1530.  
  1531.  
  1532.                      **** EXCHANGE ****
  1533.  
  1534.  
  1535. FORMAT: \EXCHANGE SCREENS
  1536.  
  1537.  
  1538.      If you have saved a screen with \SAVE SCREEN you can
  1539.      exchange (swap)  the current  screen with  the saved
  1540.      screen using  this command.   The screen is saved to
  1541.      the background  screen, screen  1.  (See \ACTIVATE.)
  1542.      The background  screen is used for raster frame mask
  1543.      operations.
  1544.  
  1545.      If you  have set  B:0 in  the environmental variable
  1546.      P11FLAGS=  or  in  the  startup  parameters  on  the
  1547.      command line, then the screen will be exchanged with
  1548.      a previously saved version on disk, in the \P11\TEMP
  1549.      directory.   That directory  MUST exist and a screen
  1550.      must be  saved in  it before using \EXCHANGE SCREEN.
  1551.      This will  toggle the  name  of  the  current  saved
  1552.      screen between  SCRNDUMP.SV1  and  SCRNDUMP.SV2,  so
  1553.      there must  be enough  disk  space  for  two  entire
  1554.      screen images in order to use \EXCHANGE SCREEN.
  1555.                               
  1556.  
  1557.  
  1558.                       **** EXECUTE ****
  1559.  
  1560.  
  1561. FORMAT: \EXECUTE DOS> and then anything you would type at
  1562.           the DOS prompt, or \EXECUTE > and then a
  1563.           program you wish to load and execute (run).
  1564.  
  1565.  
  1566.      This command  does not  "exit" to  DOS.   Instead it
  1567.      will load  and execute  the named  program or load a
  1568.      second copy  of the COMMAND PROCESSOR (DOS) and give
  1569.      it the  command (if  any) that  follows the  greater
  1570.      than (>) sign.
  1571.  
  1572.      Legitimate commands  could be anything that will fit
  1573.      in  memory.     See  Appendix  "N"  for  a  complete
  1574.      discussion of  this powerful command.  What you code
  1575.      after the  >  is  not  evaluated  for  variables  or
  1576.      auxboxes.   It is  given directly to the second copy
  1577.      of DOS,  or  simply  used  to  load  and  execute  a
  1578.      program.   Therefore drive  specifications  are  NOT
  1579.      variables or auxboxes.  Drive "A" is drive 1,  drive
  1580.      "B" is  drive 2  and so on.  Use forward slashes (/)
  1581.      for  pathnames:   this  program  will  reverse  them
  1582.      automatically (up  to the first space).  A backslash
  1583.      would indicate  another command on the same line for
  1584.      this program.   If you want to use a backslash after
  1585.      a space,  you can  use  an  auxbox  to  specify  the
  1586.      command line:   Use  a parenthesis  and specify  the
  1587.      auxbox within the parenthesis: \EXECUTE >(#454)
  1588.  
  1589.      As of  version 7.30  you can  do an  \EXECUTE with a
  1590.      PRN, DAT,  or PIC  file open, but you should be sure
  1591.      to consider  the consequences  of this before you do
  1592.      it:   If a  file is  open and  you change  disks  or
  1593.      delete the  file, you  may mess up DOS's idea of the
  1594.      current file  status', damaging  that file.   It  is
  1595.      advised  that  you  never  do  an  \EXECUTE  without
  1596.      closing all files unless you HAVE TO have them open,
  1597.      in which  case you  should try  not to  let the user
  1598.      have control  during the  \EXECUTEd operation.  Just
  1599.      do what  you have  to do, like an HPRASTER print for
  1600.      example,  and come back.
  1601.  
  1602.      During an \EXECUTE you can do anything that will fit
  1603.      in RAM,  including formatting  disks.   However  you
  1604.      should only  format diskettes  or execute Terminate,
  1605.      Stay Resident programs if absolutely necessary as it
  1606.      is likely to take some base RAM to do this, and that
  1607.      memory will NOT be returned until you reboot.
  1608.      When  executing   the  command  processor,  use  the
  1609.      command EXIT there to return to this program (either
  1610.      at the DOS prompt or from a batch file).
  1611.  
  1612.      DOS returns  a code  upon completion  of an executed
  1613.      program.   You will  find this code in variable "A".
  1614.      The executed program may return it's own code.  This
  1615.      will be  in variable "C".  Both these variables will
  1616.      be changed  by \EXECUTE.  If the  command fails  for
  1617.      some  reason   variable  "A"  will  contain  -1  and
  1618.      variable "C" will contain the error code returned by
  1619.      DOS.   Possible reasons  would be  disk errors, file
  1620.      not found, etc.
  1621.                               
  1622.  
  1623.  
  1624.                        **** FRAME ****
  1625.  
  1626.  
  1627. FORMAT: \FRAME #,#,#,#{,M or O or OM or MO}  or \FRAME #
  1628.           or \FRAME ?
  1629.  
  1630.  
  1631.      Specifies that a frame should be added to the end of
  1632.      the current  picture file.   You must already have a
  1633.      picture file  in RAM or EMM.  This command will only
  1634.      add a  single frame at the end.  If you specify four
  1635.      numbers this  will add  a  raster  frame.    If  you
  1636.      specify just  one number  a  vector  frame  of  that
  1637.      number of dots will be added.  It will have "random"
  1638.      dot values  at the  start.  A question mark (?) will
  1639.      place the current total number of frames in variable
  1640.      "A".
  1641.  
  1642.      Specify four  numbers to get a raster image from the
  1643.      screen.   The first  two are  the upper  left  X,  Y
  1644.      location on  the  screen.    The  third  and  fourth
  1645.      numbers indicate  the  size  of  the  frame.    This
  1646.      command  will   round  the   first  value,   the  X-
  1647.      coordinate, down  to a  byte boundary.   In CGA mode
  1648.      there are  four dots  per byte so values of 0, 4, 8,
  1649.      12 etc.  would not  be changed  but 1, 2 and 3 would
  1650.      all be  rounded down,  having the  effect of  saving
  1651.      from the  zero position  on the  X-axis.  5, 6 and 7
  1652.      would all  round to  the fourth  dot position and so
  1653.      on.     The  right-hand   edge  will   be   adjusted
  1654.      accordingly so that the width will remain unchanged.
  1655.      See the \SCREEN command for a table of dots per byte
  1656.      for each available screen mode.
  1657.  
  1658.      ,M will  add a  masked frame,  while ,O  will add on
  1659.      onion skin  frame.   ,MO or  ,OM will  add a  masked
  1660.      onion skin frame.  Of course, onion skin mode is not
  1661.      available in monochrome modes!
  1662.  
  1663.      The base  location stored  in the  header of the new
  1664.      frame will  be 0,0  as will  the  base  time  value.
  1665.      Therefore,  you   will  need  to  use  the  location
  1666.      specified in the \FRAME command when you display the
  1667.      frame, for it to be in the same location.
  1668.  
  1669.      You can  save up  to a full screen--in CGA mode that
  1670.      would be  320 on  the X-axis  and 200 on the Y-axis.
  1671.      When testing a text file that contains this command,
  1672.      the command  will  add  a  frame  each  time  it  is
  1673.      encountered,  so  you  may  find  you  picture  file
  1674.      getting very big very quickly!
  1675.      If you  need to  allow more than the default maximum
  1676.      of about  1000 frames, use the P11FLAGS= environment
  1677.      string option or command line parameter:
  1678.  
  1679.  
  1680.                F:#          (where # is between 10 and
  1681.           8,000.)
  1682.  
  1683.  
  1684.  
  1685.                               
  1686.  
  1687.  
  1688.                       **** HEIGHT ****
  1689.  
  1690.  
  1691. FORMAT: \HEIGHT #
  1692.  
  1693.  
  1694.      Specifies the height of a text window on the screen.
  1695.      Used with \LOCATE and \WIDTH to define the area text
  1696.      will appear  in.  Text can be \SCROLLed or \OVERLAYd
  1697.      in the  window you  define and  place with  \HEIGHT,
  1698.      \WIDTH and \LOCATE.  (\CRAWL does not use \HEIGHT.)
  1699.                               
  1700.  
  1701.  
  1702.                         **** HUE ****
  1703.  
  1704.  
  1705. FORMAT: \HUE {COLOR=#,#} {SET=#,#,#} {INCREMENT=#,#,#}
  1706.           {HOLD={YES or NO}} {CY=YES or NO} GRAY={Y or N}
  1707.  
  1708.  
  1709.      Hues are  preset for  all colors, but on VGA systems
  1710.      you can  reset each  color to  a choice  of  262,144
  1711.      hues.   Each of  the three  portions of each color--
  1712.      red, green,  and blue,  can be set to numbers from 0
  1713.      to 63.
  1714.  
  1715.      By using  this command repeatedly in a text file you
  1716.      can do "color cycling."
  1717.  
  1718.      You can  set the internal hue table and not actually
  1719.      set the hue hardware registers by using HOLD=YES.
  1720.  
  1721.      INCREMENT= will  modify the  current hue values of a
  1722.      color.   The increment  values can each be positive,
  1723.      negative, or 0.
  1724.  
  1725.      The COLORS=  values  are  the  low  and  high  color
  1726.      numbers that are to be changed.
  1727.  
  1728.      CYCLES=YES does  color cycling.   It moves the color
  1729.      down 1  within the range and flips the bottom to the
  1730.      top.  Can be added to \RUN too.
  1731.  
  1732.      GRAY=YES the  colors are  changed but  NOT the color
  1733.      table.   To go back to non-grayscale, use \HUE C=#,#
  1734.      without any  other parameters.  If C=#,# is included
  1735.      with GRAY=Y, only those colors would be gray scaled.
  1736.      For gray scaling, S, I, and H are ignored.
  1737.                               
  1738.  
  1739.  
  1740.                         **** IF ****
  1741.  
  1742.  
  1743. FORMAT: \IF # {=><} # {{AND or OR} # {=><} #}
  1744.  
  1745.  
  1746.      This command  is used to compare two operands or two
  1747.      sets of two operands.
  1748.  
  1749.      The expression  is evaluated  and if  true the \THEN
  1750.      clause  is   executed,  then  the  \ELSE  clause  is
  1751.      skipped.  If it evaluates to false the \THEN portion
  1752.      is skipped  and the \ELSE clause is executed.  These
  1753.      can be  nested 32  deep, and  should be  ended  with
  1754.      \ENDIF.
  1755.  
  1756.      If the  two #'s  represent numbers they are compared
  1757.      arithmetically.   If they  represent  auxboxes  with
  1758.      alphanumerics in  them they  are compared  as  ASCII
  1759.      strings with  the exception  that lower-case letters
  1760.      are capitalized  for the  comparison.   If  the  two
  1761.      strings are  of unequal  length the  shorter one  is
  1762.      "padded" with  spaces.   The ASCII value of a single
  1763.      character in  quote marks  (single or double) can be
  1764.      compared arithmetically.   You may use two operators
  1765.      together (<=,  <>, or  >=)  if  desired.    You  may
  1766.      connect two sets of comparisons together with either
  1767.      AND or  OR, but only one such connection can be made
  1768.      (only one  keyword AND  or OR  will be evaluated per
  1769.      \IF command).
  1770.  
  1771.  
  1772. EXAMPLE:
  1773.  
  1774.      \IF (A + 4) < B\THEN\IF #44 <= #54\THEN\MOVE 44 TO #87
  1775.      \ELSE\IF S <> 99 OR V=88\THEN\CALL LOOP1\ELSE
  1776.      \JUMP   LOOP2\ELSE\MOVE   "APPLES   AND   ORANGES"   to
  1777.      #989\ENDIF
  1778.      
  1779.      NOTE: the  THEN command  is always optional.  Spaces
  1780.      after the  backslash are  ignored and  can sometimes
  1781.      make program logic easier to follow.
  1782.  
  1783.      You may  want to  consult the section on programming
  1784.      and  the  \ELSE,  \THEN,  and  \ENDIF  commands  for
  1785.      further descriptions of "if" statements.
  1786.                               
  1787.  
  1788.  
  1789.                         **** IN ****
  1790.  
  1791.  
  1792. FORMAT: \IN # {BYTE or WORD}
  1793.  
  1794.  
  1795.      IN will let you receive data from a hardware device,
  1796.      often called a PORT.  The byte or word input will be
  1797.      placed in  variable "A".   Generally, # is between 0
  1798.      and 255 and refers to a device in the system.
  1799.                               
  1800.  
  1801.  
  1802.                      **** JOYSTICK ****
  1803.  
  1804.  
  1805. FORMAT: \JOY (or \JOYSTICK) {OFF, ?} {INITIALIZE
  1806.           {CENTERED=#,# RESOLUTION=#,# SAMPLES=#}} {ZERO}
  1807.           {ACCURACY=#,#}
  1808.  
  1809.  
  1810.      If INITIALIZE  is used,  the same  thing happens  as
  1811.      when you  press  <CTRL>+j  while  creating  drawings
  1812.      except values  for RESOLUTION, SAMPLES, and CENTERED
  1813.      are taken  from the  command and  not asked  of  the
  1814.      user.   A message  appears near  the bottom  of  the
  1815.      screen instructing  the user  to move  the  joystick
  1816.      around and  press a key.  These keypresses do NOT go
  1817.      into variable "B".
  1818.  
  1819.      The numbers  that the  joystick returns are products
  1820.      of the  current cursor  location  plus  values  that
  1821.      correspond to the joystick positions.
  1822.  
  1823.      \JOYSTICK ON  or \JOYSTICK  with no  parameters will
  1824.      get joystick information and if the joystick was off
  1825.      but had  been previously  initialed, will turn it on
  1826.      again.
  1827.  
  1828.      OFF will  inhibit use  of the  joystick but does not
  1829.      actually send any signal to the input device.
  1830.  
  1831.      A question  mark (?)  will put  the  status  of  the
  1832.      joystick in  variable "A".    Any  other  parameters
  1833.      would be ignored.  The status is as follows:
  1834.  
  1835.      1 - port assumed to be available, not on.
  1836.      2 - port used, so definitely available.
  1837.      3 - currently in use (active).
  1838.      
  1839.      Initializing the  joystick turns  off the  digitizer
  1840.      but not  the mouse  if on.  Use \MOUSE OFF if you do
  1841.      not want both on.
  1842.  
  1843.      RESOLUTION is the maximum variation from the current
  1844.      position  that  the  joystick  can  return  (maximum
  1845.      deflection by the user) and is a number from 0 to 50
  1846.      (0 means no movement on that axis.)
  1847.  
  1848.      SAMPLES are the number of times to read the joystick
  1849.      value that  is returned before automatically summing
  1850.      the numbers,  throwing out  the highest  and  lowest
  1851.      values, and  averaging the  rest.    Sampling  is  a
  1852.      number from 4 to 50.
  1853.      The Centered  option will cause the joystick to move
  1854.      the cursor  around the  point specified.  It will be
  1855.      able  to   move  the   distance  specified   in  the
  1856.      RESOLUTION= parameter.  In this mode deflection will
  1857.      always be from the centered point, not from the last
  1858.      value returned.
  1859.  
  1860.      ACCURACY is  the units  of variation.   For example,
  1861.      A=5,5 will  return values  of  -15,-10,-5,0,5,10,15,
  1862.      etc. within  RESOLUTION maximums  (plus and  minus.)
  1863.      The accuracy rounds towards 0 to a multiple of these
  1864.      settings.
  1865.  
  1866.      The joystick  will simply  invert  the  #'s  if  the
  1867.      joystick is held upside down and initialized, but if
  1868.      at a  90 degree angle, you will get an error message
  1869.      (Error Code 3585.)
  1870.                               
  1871.  
  1872.  
  1873.                       **** JRCOLOR ****
  1874.  
  1875.  
  1876. FORMAT: \JRCOLOR #,#,#,#,#
  1877.  
  1878.  
  1879.      The IBM-PCjr,  as well  as most  TANDY (Radio Shack)
  1880.      PC-compatibles have  the ability to display any four
  1881.      of 16  colors in CGA mode.  To set these colors, use
  1882.      this command.
  1883.  
  1884.      Set the  background with  the first  value, then the
  1885.      three foreground colors.  The fifth value is for the
  1886.      border, which  can also  be set  to one  of  the  16
  1887.      available colors.
  1888.  
  1889.      On TANDY  machines you  may have  to execute the DOS
  1890.      command  MODE   with  the   option  COLORMAP  before
  1891.      executing this program for \JRCOLOR to work.
  1892.                               
  1893.  
  1894.  
  1895.                        **** JUMP ****
  1896.  
  1897.  
  1898. FORMAT: \JUMP NNNNNN
  1899.  
  1900.  
  1901.      NNNNNN is  a named place in your text file.  See the
  1902.      \X command.   The  name can  be one  (1) to 30 bytes
  1903.      long  and   cannot  contain   spaces.    \JUMPs  are
  1904.      different from  \CALLs because  they do not retain a
  1905.      return address  (the address  of the command after a
  1906.      \CALL statement is saved for a corresponding \RETURN
  1907.      statement to  use.)   Jumps just  go  somewhere  and
  1908.      processing continues from there.  The usual thing to
  1909.      code after  a \JUMP  is an \X command for some other
  1910.      \JUMP, \CALL, \ON KEY or \ON ERROR command to go to,
  1911.      or if  the \JUMP  was within the \THEN portion of an
  1912.      \IF statement,  an \ELSE  or \ENDIF command may also
  1913.      follow a \JUMP.
  1914.  
  1915.  
  1916. Example:
  1917.  
  1918.      \* This  routine waits  forever for  ANY key  and  then
  1919.      displays it's value.
  1920.      \MOVE 0 TO B
  1921.      \X NO_KEY_PRESSED_YET
  1922.      \IF B=0
  1923.      \   JUMP NO_KEY_PRESSED_YET
  1924.      \ENDIF
  1925.      \DISPLAY B
  1926.                               
  1927.  
  1928.  
  1929.                         **** KEY ****
  1930.  
  1931.  
  1932. FORMAT: \KEY CYCLE=# DECREASE=# END=# FORWARD=#
  1933.           INCREASE=# MINUS=# NEXT=# PLUS=# REVERSE=#
  1934.           SINGLES=#
  1935.  
  1936.  
  1937.      Lets you assign keyboard codes for various \SHOW and
  1938.      \RUN options.   The  numbers correspond  to DOS scan
  1939.      codes for various keypresses.
  1940.  
  1941. CYCLE=#
  1942.      Assigns a  key which will cause animation to stop at
  1943.      the end of the cycle.  Only used for \SHOW.
  1944.  
  1945. DECREASE=#
  1946.      Assigns a key for slowing down animation.
  1947.  
  1948. END=#
  1949.      Assigns an  alternate key for the ESC key.  Pressing
  1950.      the real  ESC key three times in a row will override
  1951.      this and  force the keycode anyway.  You cannot code
  1952.      the RET (return) keycode (7181) for this key.
  1953.  
  1954. FORWARD=#
  1955.      Assigns a  key for  single-stepping forward  through
  1956.      the frames.  Only used for \SHOW.
  1957.  
  1958. INCREASE=#
  1959.      Assigns a key for speeding up animation.
  1960.  
  1961. MINUS=#
  1962.      Assigns a  key for  making animation  run  backward.
  1963.      Only used for \SHOW.
  1964.  
  1965. NEXT=#
  1966.      Assigns a  key for ending animation and advancing to
  1967.      the next command.  Only used for \SHOW.
  1968.  
  1969. PLUS=#
  1970.      Assigns a  key for  making  animation  run  forward.
  1971.      Only used for \SHOW.
  1972.  
  1973. REVERSE=#
  1974.      Assigns a  key for single-stepping backwards through
  1975.      the frames.  Only used for \SHOW.
  1976.  
  1977. SINGLES=#
  1978.      Changes the  single-dot cursor  movement toggle key.
  1979.      Initially the  "5" key  on the numeric keypad serves
  1980.      this purpose  on XT-style  keyboards.   Setting this
  1981.      will toggle  it to  single-dot.   A value  of 0 will
  1982.      inhibit changing the dot travel distance.
  1983.  
  1984.      NOTE: +  and -  (plus  and  minus)  on  the  numeric
  1985.      keyboard are already assigned to PLUS= and MINUS=.
  1986.  
  1987.      For some  of  these  keys  we  recommend  using  the
  1988.      following keys:
  1989.  
  1990.                       DESCRIPTION                        KEY
  1991.     KEY VALUE
  1992.      
  1993.      CYCLE........SPACE BAR...................14624
  1994.      DECREASE.....DOWN ARROW..................20480
  1995.      FORWARD......RIGHT ARROW.................19712
  1996.      INCREASE.....UP ARROW....................18432
  1997.      NEXT.........RETURN KEY.................. 7181
  1998.      MINUS........MINUS KEY...................18989
  1999.      PLUS.........PLUS KEY....................20011
  2000.      REVERSE......LEFT ARROW..................19200
  2001.      SINGLES......"5" KEY ON KEYPAD (XT-STYLE)19456
  2002.      
  2003.  
  2004.      0 coded in any parameter turns off that option.
  2005.  
  2006.              NUM  LOCK  ON                    NUM  LOCK  OFF
  2007.     KEY VALUE
  2008.      
  2009.      PG DN........20787.......................20736
  2010.      PG UP........18745.......................18688
  2011.      HOME.........18231.......................18176
  2012.      END..........20273.......................20224
  2013.      LEFT ARROW...19252.......................19200
  2014.      RIGHT ARROW..19766.......................19712
  2015.      UP ARROW.....18488.......................18432
  2016.      DOWN ARROW...20530.......................20480
  2017.      
  2018.                               
  2019.  
  2020.  
  2021.                       **** LENGTH ****
  2022.  
  2023.  
  2024. FORMAT: \LENGTH #
  2025.  
  2026.  
  2027.      Gets the  length of the specified auxbox and puts it
  2028.      in variable  "A".   Numeric auxboxes  are always two
  2029.      bytes long.  If the auxbox does not exist the length
  2030.      will be zero (0).
  2031.  
  2032.  
  2033. Example:
  2034.  
  2035.      \MOVE "EAT MORE CHILI!" TO #32
  2036.      \LENGTH #32
  2037.      \DISPLAY A      ;15 would be displayed
  2038.      \MOVE 324 TO #33
  2039.      \LENGTH #33
  2040.      \DISPLAY A    ;2 would be displayed
  2041.                               
  2042.  
  2043.  
  2044.                        **** LINE ****
  2045.  
  2046.  
  2047. FORMAT: \LINE #,#,#,#,#{,B or ,BF} or \LINE ,#,#,#{,B or
  2048.           ,BF}
  2049.  
  2050.  
  2051.      Draws a line on the screen.
  2052.  
  2053.      The first  two numbers  are the  X, Y coordinates of
  2054.      one end of the line, the next two are the other end.
  2055.      The fifth  number is the color.  The second position
  2056.      given  will   become  the  "current"  endpoint  (see
  2057.      below).
  2058.  
  2059.      If you  use the second option (three values preceded
  2060.      by a  comma) a  line will  be drawn from the current
  2061.      endpoint (set  by a previous \LINE or \DRAW command)
  2062.      to the  endpoint given in the first two values.  The
  2063.      third value is the color.  The current endpoint will
  2064.      be updated to the new endpoint.
  2065.  
  2066.      ,B (comma  B) will  draw a rectangle with corners as
  2067.      specified, while  ,BF will  draw a  filled box.  The
  2068.      ,BF option will NOT be affected by the status of the
  2069.      XOR switch  nor will  it affect  that switch.    All
  2070.      other options  of \LINE  are affected by the current
  2071.      state of the XOR switch (set with \DOT).
  2072.  
  2073.      Some lines  are not clipped properly.  Specifically,
  2074.      if the  total separation  on either  axis of the two
  2075.      endpoints is  greater than  32767 and both endpoints
  2076.      are off  the screen  the displayed  line may  not be
  2077.      correct,  or  incorrect  lines  are  displayed  that
  2078.      should have  been completely  off the  screen.  This
  2079.      does not occur except on widely separated endpoints.
  2080.      These long lines are excessive values that cannot be
  2081.      coded in  vector draw  mode, and  are unlikely to be
  2082.      coded in  \LINE or  \DRAW commands.   But since it's
  2083.      documented, don't be surprised when--and if--it ever
  2084.      happens to  you.  Don't utilize it though--it may be
  2085.      inconsistent!
  2086.                               
  2087.  
  2088.  
  2089.                        **** LOAD ****
  2090.  
  2091.  
  2092. FORMAT: \LOAD NNNNNNNN.PIC
  2093.  
  2094.  
  2095.      This works as a combination of \OPEN and \READ.  You
  2096.      can \READ  and \LOAD  at the  same time.  You CANNOT
  2097.      \OPEN and \LOAD at the same time.
  2098.  
  2099.      Load will  not decompress  the file, but nor will it
  2100.      use EMM.   So,  if you are working in base RAM, this
  2101.      can save  space, BUT, and this is a big but, it will
  2102.      only do the things \OPEN can do - it won't work with
  2103.      \RUN, only with \SHOW.
  2104.                               
  2105.  
  2106.  
  2107.                       **** LOCATE ****
  2108.  
  2109.  
  2110. FORMAT: \LOCATE #,#
  2111.  
  2112.  
  2113.      #,# is  the X  and Y position for the text cursor to
  2114.      put text  lines, alphanumeric  auxboxes and literals
  2115.      on the  screen.   The X-axis  number may  be rounded
  2116.      down, because resolution is every byte on the X-axis
  2117.      and every  dot on  the Y-axis.   For example, in CGA
  2118.      mode there  are 4  dots per  byte on the X-axis.  In
  2119.      all bitplane modes, there are 8 dots per byte.
  2120.                               
  2121.  
  2122.  
  2123.                       **** MARQUE ****
  2124.  
  2125.  
  2126. FORMAT: \MARQUE #,#,#,#{,#{,#}}
  2127.  
  2128.  
  2129.      This forms  a moving  multi-colored rectangle on the
  2130.      screen.   The first  four numbers are the X, Y upper
  2131.      left corner  and the  X, Y  lower right corner.  The
  2132.      fifth number  is the  number of colors to use in the
  2133.      marque.   If a  sixth number  is included,  then the
  2134.      fifth and  sixth numbers  are the  "from"  and  "to"
  2135.      numbers for  the marque.   The  marque  will  remain
  2136.      running on  the screen  until any  key is pressed or
  2137.      until the  value set  with \ROUNDS  is exceeded (see
  2138.      \ROUNDS).  Speed of each cycle is set with the SPEED
  2139.      option of  \ROUNDS.   If ROUNDS is exceeded, -1 will
  2140.      be in  variable "B",  otherwise the value of the key
  2141.      pressed will  be there.   A  mouse button press will
  2142.      also exit  this routine.  Variable "C" will have the
  2143.      number of completed cycles.
  2144.  
  2145.      A good  use of  this command  might be  to  indicate
  2146.      where the  user is  to enter  a response--it doesn't
  2147.      "absorb" the  keypress.   If the  very next  command
  2148.      were \QUESTION  coded  on  the  same  line  the  key
  2149.      pressed would  go into  that routine.   \MARQUE gets
  2150.      the key  value and  puts it in variable "B" but does
  2151.      not get the key from the keyboard.  Pressing a mouse
  2152.      button would  simply exit  the \MARQUE  command  and
  2153.      enter the next command.
  2154.  
  2155.  
  2156. EXAMPLES:
  2157.  
  2158.      \MARQUE 20,27,44,78,2 \QUESTION #33
  2159.      
  2160.      The above  example would  give the  keypress (if one
  2161.      occurred before  either the  time ran out or a mouse
  2162.      button was  pressed) to  \QUESTION because  they are
  2163.      coded on the same line.
  2164.  
  2165.      \MARQUE 11,13,99,122,3
  2166.      \QUESTION W
  2167.      
  2168.      The above  example would NOT give the key that ended
  2169.      \MARQUE to \QUESTION.
  2170.                               
  2171.  
  2172.  
  2173.                       **** MEMORY ****
  2174.  
  2175.  
  2176. FORMAT: \MEMORY {?} {EMM}
  2177.  
  2178.  
  2179.      Places the  size of the largest piece of memory left
  2180.      for  pictures,   executing  subprograms,   etc.   in
  2181.      variable "A".   This  does not include space used by
  2182.      any pictures  already in RAM, so it is indicative of
  2183.      space left  to  \APPEND  frames  with.    The  value
  2184.      returned is  in K  (1024 bytes).   The question mark
  2185.      (?) is optional.
  2186.  
  2187.      If the second option, EMM, is used, this will return
  2188.      the total  number of  NEVER-USED  16K  (16384  byte)
  2189.      pages that  have been  allocated to the program.  It
  2190.      is NOT  necessarily the  available  amount,  but  is
  2191.      certainly  less   than  or   equal  to   the  amount
  2192.      available.   When pages  of EMM  are  taken  by  the
  2193.      program, they  are not  returned until  exiting  the
  2194.      program.   Therefore, for  example, if you read in a
  2195.      very large  picture  file  and  then  a  very  small
  2196.      picture file,  the number  of pages returned by this
  2197.      function will  be quite  a bit  less  than  what  is
  2198.      actually available  at the  time, since once you had
  2199.      read in  the large  file, the amount never used will
  2200.      be less.
  2201.                               
  2202.  
  2203.  
  2204.                        **** MOUSE ****
  2205.  
  2206.  
  2207. FORMAT: \MOUSE {INITIALIZE, OFF, or ?} {AND={YES or NO}
  2208.           ACCURACY=#,# END=#,#,#,# FRAME=#,# KEEP=Y (or
  2209.           anything for no) LOCATION=#,# OR={YES or NO}
  2210.           RESOLUTION=#,# ROUNDS=# SPEED=# WINDOW=#,#,#,#
  2211.           XOR={YES or NO or AUTOMATIC}}
  2212.  
  2213.  
  2214.      \MOUSE allows  input  of  the  cursor  location  and
  2215.      buttons pressed  from the  active input  device, and
  2216.      displays a cursor (either a frame, or crosshairs, or
  2217.      both) at  the current  position. Raster  frames,  if
  2218.      used as  a cursor,  are positioned with their center
  2219.      on the current cursor position.
  2220.  
  2221.      \MOUSE executes  until  exited  by  one  of  several
  2222.      methods.   To exit,  the timer can run out (which is
  2223.      set with  the ROUNDS=  option);   the user can press
  2224.      any mouse button;  they can press any active \ON KEY
  2225.      key; they  can enter  any active END window; or they
  2226.      can press RETURN.
  2227.  
  2228.      The user can use the cursor keys and the number keys
  2229.      to  move  the  cursor.  The  joystick,  keyboard  or
  2230.      digitizer  can   be  substituted   for  the   mouse.
  2231.      (Hardware limitations do not allow the digitizer and
  2232.      the cursor  keys to both work at the same time.)  To
  2233.      some extent,  the joystick and the mouse may be used
  2234.      together.
  2235.  
  2236.      If you  want the  user to  use the mouse buttons (or
  2237.      RETURN) to end the mouse activity then don't set any
  2238.      END= parameters  after a  \CLEAR MOUSE  command.  If
  2239.      you want  action to  end the  moment  they  enter  a
  2240.      "forbidden zone" (or zones) then END is the choice.
  2241.  
  2242.      You may  not need to know how the \MOUSE command was
  2243.      exited, but  that can  be discerned by examining the
  2244.      appropriate variables.   Variable  "F" will  contain
  2245.      the input  device button  value that  was pressed if
  2246.      that is  how the routine was exited, or it will have
  2247.      zero  and  variable  "B"  will  have  the  last  key
  2248.      pressed.   If variable  "F" is zero and variable "B"
  2249.      is unchanged from a non-valid key value that you had
  2250.      previously set  it to,  AND variable  "C"  indicates
  2251.      that ROUNDS=  had not  completed, then  the end MUST
  2252.      have been due to the mouse entering an "END" window.
  2253.      In any  case "D"  and "E" will have the mouse X- and
  2254.      Y- axis positions.
  2255. INITIALIZE
  2256.      INITIALIZE can  only be  used if  no editing changes
  2257.      exist  to  any  files  in  RAM,  or  the  mouse  has
  2258.      previously been  initialized.   However,  since  the
  2259.      program  initializes  the  mouse  immediately  after
  2260.      loading, this  problem  should  never  occur.    The
  2261.      reason the  program will  not let you initialize the
  2262.      mouse if  changes exist is that if mouse software is
  2263.      not installed you may have to "reboot" if you try to
  2264.      initialize the  mouse!   This in  not  very  likely,
  2265.      perhaps not  even possible,  but there is no way for
  2266.      the program  to be  absolutely sure.    The  program
  2267.      checks for  a valid  (non-zero)  address  where  the
  2268.      mouse software address should be.  If it's non-zero,
  2269.      the program "dips it's toe in the water" and sends a
  2270.      request to the mouse.  See Appendix "K" and Appendix
  2271.      "N" for more information.
  2272.  
  2273. ?
  2274.      ? (Question mark) will put the current status of the
  2275.      mouse in variable "A".  The meanings are as follows:
  2276.  
  2277.      0 -  mouse software definitely not installed yet, can't
  2278.      initialize.
  2279.      1 - can initialize, but are not connected yet.
  2280.      2 - mouse is already initialized.
  2281.      
  2282.  
  2283.      NOTE:
  2284.      ? sends a reset message to initialize the MOUSE.
  2285.      IF  THAT   SOFTWARE  IS  NOT  INSTALLED,  THE  PROBLEMS
  2286.      MENTIONED EARLIER MAY OCCUR.
  2287. OFF
  2288.      Will turn the mouse off if it is on.
  2289.  
  2290.      
  2291.  
  2292.      The other  options can  be entered in any order. For
  2293.      any that  are not included the previous settings are
  2294.      maintained.
  2295.  
  2296. AND=YES or NO
  2297.      AND will place the image on the screen with AND.  It
  2298.      will leave  a trail.   \CLEAR  MOUSE sets  AND to NO
  2299.      (off).
  2300.  
  2301. ACCURACY=#,#
  2302.      Sets the  X and  Y accuracy  in dots.    Useful when
  2303.      block-highlighting text.   To do this, set the mouse
  2304.      WINDOW= parameter width to 1 dot and the height to a
  2305.      multiple of  the text font height.  Set ACCURACY= to
  2306.      the text  font height.   Make  a frame  the  inverse
  2307.      color of the text you will use, the size of the text
  2308.      box to  be highlighted  and use it as a cursor.  Use
  2309.      the XOR=AUTOMATIC  option.  You could make a grid of
  2310.      text boxes this way too.  \CLEAR MOUSE sets ACCURACY
  2311.      to 1,1.   The  ACCURACY= calculations are done as if
  2312.      the starting  location was  0,0 then  the  X  and  Y
  2313.      offsets are added to get the "actual" current cursor
  2314.      location.
  2315.  
  2316. COLOR=#
  2317.      Allows  you   to  set   the  color   of  the  cursor
  2318.      crosshairs.   Valid colors in CGA mode are 1, 2 or 3
  2319.      (not 0).   In MCGA mode the highest color values are
  2320.      not available  (above 247).   In  all  modes,  color
  2321.      cannot be 0.
  2322.  
  2323. END=#,#,#,#
  2324.      This defines  a  window  that  will  end  the  mouse
  2325.      routine if  the mouse  ever enters it.  You may have
  2326.      up to  10 active END windows. \CLEAR MOUSE sets this
  2327.      to 0  (no end-windows).    Order  is  X-low,  Y-low,
  2328.      X-high, Y-high.   These  parameters are  not checked
  2329.      against each  other for  equivalency, so  don't code
  2330.      the same  one 11  times--you'll get  a CAN'T PROCEED
  2331.      error the  11th time.   To  avoid this, issue \CLEAR
  2332.      MOUSE prior to setting up the END parameters.
  2333.  
  2334. FRAME=#,#
  2335.      The  first   value  sets  the  size  of  the  cursor
  2336.      crosshairs and  the second value sets a frame to use
  2337.      as a  cursor.  If both are zero the cursor will be a
  2338.      single dot,  but if  the frame # is not zero and the
  2339.      crosshair value  is zero,  then  there  will  be  no
  2340.      crosshair. \CLEAR MOUSE sets this to 4,0.
  2341.  
  2342. KEEP=Y or anything else
  2343.      Only useful  if XOR=AUTO.   Leaves  the  last  frame
  2344.      (and/or crosshair)  on the  screen  when  \MOUSE  is
  2345.      exited (regardless of what causes the exit).
  2346.  
  2347. LOCATION=#,#
  2348.      This option  sets  the  starting  location  for  the
  2349.      mouse.   If not included, the position is decided by
  2350.      the current mouse location if the mouse is active or
  2351.      by  the  location  set  by  \DOT  or  several  other
  2352.      commands.
  2353.  
  2354. OR=YES or NO
  2355.      OR will  place the  image on the screen with OR.  It
  2356.      will leave  a trail.   \CLEAR  MOUSE sets  OR to  NO
  2357.      (off).
  2358.  
  2359. RESOLUTION=#,#
  2360.      Is the  maximum variation  from the current position
  2361.      that can  occur per  cycle.    First  value  is  the
  2362.      minimum change  and the  second value is the maximum
  2363.      change.  \CLEAR MOUSE sets RESOLUTION to 1,-1.
  2364.  
  2365. ROUNDS=#
  2366.      Sets an  upper limit  for how long the mouse will be
  2367.      active.   The number  of rounds  executed will be in
  2368.      variable "C"  at the  end.   A round is defined as a
  2369.      new location or one cycle, initially about 1/20th of
  2370.      a second.   If  you set  this value  to -1 the mouse
  2371.      will run  forever  unless  one  of  the  other  exit
  2372.      methods occurs.   \CLEAR  MOUSE sets this to -1.  If
  2373.      you set  it to  0  the  mouse  cursor  will  not  be
  2374.      displayed or used at all.
  2375.  
  2376. SPEED=#
  2377.      Sets the timing for each ROUND.  Initially it is set
  2378.      to 29, which is about 20 cycles per second.  At that
  2379.      rate  the   number  of   ROUNDS  divided  by  20  is
  2380.      approximately equal  to the  number of  seconds that
  2381.      the mouse  will be  active.  Zero (0) here means "as
  2382.      fast  as  possible".    Program  updates  the  mouse
  2383.      location once  per cycle.   \CLEAR MOUSE resets this
  2384.      to 29.   This  is the  speed  of  the  screen  image
  2385.      update.
  2386.  
  2387. WINDOW=#,#,#,#
  2388.      This sets  maximum and minimum values for the cursor
  2389.      in the  form X-low,  Y-low,  X-high,  Y-high.    The
  2390.      cursor will  appear whole  even if  parts of  it are
  2391.      outside of  this window but the cursor location will
  2392.      stay within  these values  (inclusive).    By  using
  2393.      narrow values  for one  of the axis you can make the
  2394.      cursor move  only up  and down  or back  and  forth,
  2395.      useful for choosing menu options.  \CLEAR MOUSE sets
  2396.      this to the full screen.
  2397.  
  2398. XOR=YES, NO, or AUTOMATIC
  2399.      The frame used as a cursor can be permanently placed
  2400.      at every  point it  touches if so desired (NO) or it
  2401.      can be  automatically XOR'ed  onto  the  screen  and
  2402.      XOR'ed off  again when moved (AUTO).  It can also be
  2403.      set to  be XORed  onto the  screen but not XORed off
  2404.      (YES).   The  crosshair  is  not  affected  by  this
  2405.      option--it is  always removed.   Set  to auto-xor by
  2406.      \CLEAR MOUSE.
  2407.  
  2408.  
  2409. EXAMPLES:
  2410.  
  2411.      \MOUSE INIT
  2412.      \MOUSE R=4444 W=33,44,104,199 L=12,13
  2413.      \MOUSE ROUNDS=44 WINDOW=0,22,319,23
  2414.      \MOUSE R=-1 A=10,1 W=33,10,33,190
  2415.      (The last  example would  run forever  until one of the
  2416.      exit methods discussed above is taken).
  2417.                               
  2418.  
  2419.  
  2420.                        **** MOVE ****
  2421.  
  2422.  
  2423. FORMAT: \MOVE #{[#,#]} TO #
  2424.  
  2425.  
  2426.      The first  # can  be a  literal in  single or double
  2427.      quotes.   The #  after TO  can be  a variable  or an
  2428.      auxbox.   Of course  if it's  a variable the first #
  2429.      has to  be numeric  data.   This command creates the
  2430.      auxbox if it has not been created yet and changes it
  2431.      to  numeric   or  alphanumeric   as  needed.     The
  2432.      destination  auxbox will always become the same type
  2433.      as the  source.   You can move variables to auxboxes
  2434.      and you can move auxboxes to variables if the auxbox
  2435.      is numeric.
  2436.  
  2437.      You can  move a portion of an alphanumeric auxbox by
  2438.      immediately following the auxbox name or number with
  2439.      brackets and  two values  separated by  commas.  The
  2440.      values are  the starting  position within the source
  2441.      auxbox and the length in characters to move.
  2442.  
  2443.      If  the   starting  string   is  shorter   than  the
  2444.      "destination" as  defined by  your offset and length
  2445.      values, it will pad with spaces.
  2446.  
  2447.      When moving  a literal  (in single  or double  quote
  2448.      marks) to  an  auxbox  the  maximum  length  of  the
  2449.      literal itself is 254 characters.
  2450.  
  2451.      
  2452.  
  2453.  
  2454. EXAMPLES:
  2455.  
  2456.      \MOVE 343 TO W
  2457.      \MOVE TIME&DATE[1,8] TO #32
  2458.      \MOVE "Hi! " TO #1
  2459.                               
  2460.  
  2461.  
  2462.                      **** MULTIPLY ****
  2463.  
  2464.  
  2465. FORMAT: \MULTIPLY # BY #
  2466.  
  2467.  
  2468.      Both values  must be numeric.  The second number can
  2469.      be an  expression that  evaluates to a value and the
  2470.      result goes  in the  first value,  which must  be  a
  2471.      variable or auxbox.
  2472.  
  2473. EXAMPLES:
  2474.      MULTIPLY G BY 23
  2475.      MULTIPLY W BY (#33 * 22)-44+(X*Y*Z)
  2476.                               
  2477.  
  2478.  
  2479.                        **** NAME ****
  2480.  
  2481.  
  2482. FORMAT: \NAME # = NNNNNNNN
  2483.  
  2484.  
  2485.      Defines a  symbolic name  which can  then be used to
  2486.      refer to an auxbox, instead of using its number.
  2487.  
  2488.      NNNNNNNN is  a  name  that  starts  with  three  (3)
  2489.      capital letters and is at least three (3) characters
  2490.      long.   It ends  with a  capital  letter  and  is  a
  2491.      maximum of  30   characters. It  cannot contain  any
  2492.      spaces.   The only  other legal  characters are  the
  2493.      numbers 0  through 9,  the  ampersand  (&)  and  the
  2494.      underline (_).   Each auxbox can have no name or one
  2495.      symbolic name,  and a  name can  refer to  only  one
  2496.      auxbox.   \NAME does  NOT establish the existence of
  2497.      an auxbox,  only its  name.  Use \MOVE to create the
  2498.      auxbox.   The name  TIME&DATE is already assigned to
  2499.      auxbox #32767.   All other names can be cleared with
  2500.      \CLEAR NAMES.
  2501.  
  2502.  
  2503. EXAMPLE:
  2504.  
  2505.      \NAME #2346=SAVE_THE_PLANET
  2506.      \MOVE "YES" TO SAVE_THE_PLANET
  2507.                               
  2508.  
  2509.  
  2510.                      **** ON ERROR ****
  2511.  
  2512. FORMAT: \ON ERROR [JUMP or CALL or CALLM]  NNNNN
  2513. FORMAT 2: \ON ERROR
  2514.  
  2515.      This will  do  a  jump  or  call  to  the  paragraph
  2516.      specified as  NNNNNN if  any error occurs other than
  2517.      those listed as SEVERE errors (see below.)  The line
  2518.      number where  the error occurred will be in variable
  2519.      "A".  To get the actual error code that occurred (or
  2520.      the last  one if  multiple errors  occurred  on  the
  2521.      line) use \ERROR.  If nothing is specified after \ON
  2522.      ERROR then  error trapping is turned off (format 2).
  2523.      Error trapping  is a  one-shot: once used, it is set
  2524.      off until  another \ON ERROR jump or call is issued.
  2525.      Therefore if an error occurs, you must issue another
  2526.      \ON ERROR  command to inhibit any errors again.  You
  2527.      may want  to do  this  in  the  error  trap  routine
  2528.      itself.
  2529.  
  2530.      IMPORTANT NOTE: Some errors, documented elsewhere in
  2531.      this manual, indicate that a reboot may be necessary
  2532.      after they  occur.   Although these errors SHOULD be
  2533.      impossible to get, it is noted here for completeness
  2534.      that the  controlled recovery  capabilities of  this
  2535.      command may  not work  in these  cases.  All efforts
  2536.      have been  made to  make the  program "bulletproof",
  2537.      that is,  it should  not be  possible to  crash your
  2538.      computer while  using this program.  However despite
  2539.      all the effort this may not be the case!
  2540.  
  2541.      The active screen will be the real screen (screen 0)
  2542.      after ANY error, even if it was trapped.
  2543.  
  2544.      The real  purpose of this command is not so that you
  2545.      can always  restart but  rather it  is to  provide a
  2546.      mechanism  to  handle  things  like  file-not-found,
  2547.      disk-full and so on.
  2548.  
  2549.      Errors  in   the  runtime  version  that  cannot  be
  2550.      restarted  (whose   SEVERITY  LEVEL   is  too  high)
  2551.      include:
  2552.  
  2553.      3562 & 3563 (wrong screen mode errors.)
  2554.  
  2555.      32767 & 32765 (load errors.)
  2556.  
  2557.      Both these  errors can only occur during the initial
  2558.      program load,  before  any  files  have  been  read.
  2559.      Other  errors   that  cannot  be  restarted  involve
  2560.      attempting to  change .i.screen modes; while picture
  2561.      files for other modes exist in RAM or EMM.
  2562.  
  2563.      The following  additional errors  are severe because
  2564.      they would  result in overlaying edit changes.  They
  2565.      can only occur in the editor version:
  2566.  
  2567.      5, 7, 525, 2624, 4522 & 9218.
  2568.  
  2569.      And these  errors are  also severe, and indicate you
  2570.      wrote your program with syntax errors:
  2571.  
  2572.      4 and 4004. (paragraph names not found.)
  2573.                               
  2574.  
  2575.  
  2576.                       **** ON KEY ****
  2577.  
  2578. FORMAT 1: \ON KEY= {YES or NO}
  2579.      Sets the program to jump to the second command of
  2580.      a text  file.    Format  is  an  equal  sign  (=)
  2581.      followed by YES or NO.
  2582.  
  2583. FORMAT 2: \ON KEY F# {{JUMP or CALL or CALLM} NNNNNN}
  2584.      This  format  sets  \ON  KEY  specifications  for
  2585.      function key  values.    Code  an  F  immediately
  2586.      followed by  a number  1 thru  10 (NOT  something
  2587.      that evaluates  to a  number, an  actual  number)
  2588.      with no space.  Follow with CALL or JUMP and then
  2589.      a  paragraph   name  (NNNNNN)   to  set  \ON  KEY
  2590.      processing.  Use just the function number to shut
  2591.      off a previously set \ON KEY specification.
  2592.  
  2593. FORMAT 3: \ON KEY # {{JUMP or CALL or CALLM} NNNNNN}
  2594.      \ON KEY # {JUMP, CALL or CALLM} NNNNNN where # is
  2595.      the decimal  value of  a  key  and  NNNNNN  is  a
  2596.      paragraph name  to jump  to or call when that key
  2597.      is pressed.   Leave  the name blank after the key
  2598.      value to  turn off  the specification.    Fifteen
  2599.      (15) individual  key specifications can be active
  2600.      at one time, plus function key specifications.
  2601.  
  2602.  
  2603. \ON KEY=YES
  2604.      Means any keypress (except ESCAPE) will cause a jump
  2605.      to the  second command of the text file. It will NOT
  2606.      jump to  the second  line of the command file unless
  2607.      the first  line has only one command.  =NO turns off
  2608.      this function.   You  will find  the  key  value  in
  2609.      variable "B".
  2610.  
  2611.      
  2612.  
  2613.      ON KEYs  are used to control branching within a text
  2614.      file based on user input.  An ON KEY command remains
  2615.      in affect until it is set off (or a new text file is
  2616.      read in.)   A maximum of 15 specific keys (format 3)
  2617.      plus 10  function keys  (format 2) can be set at one
  2618.      time.
  2619.  
  2620.      An important fact to keep in mind when using \ON KEY
  2621.      is that  all \CALL,  \CALLM, and \IF nesting is lost
  2622.      with execution  of an  \ON KEY  JUMP but NOT when an
  2623.      \ON KEY  CALL occurs.   An \ON KEY...JUMP works just
  2624.      like a  \JUMP  command  but  occurs  when  the  user
  2625.      presses the appropriate key, while an \ON KEY...CALL
  2626.      behaves like a \CALL or \CALLM command.
  2627.      There are  only two  ways to get back to a text file
  2628.      after an  \ON KEY jump into a macro file.  You could
  2629.      have coded  an \ON  KEY in  the text file that would
  2630.      still be  active, or you could issue a \READ command
  2631.      to read  a text  file and  processing will go to the
  2632.      start of  the text file.  Other than these two ways,
  2633.      you will be stuck in macros forever.
  2634.  
  2635.      It is possible to code values which do not represent
  2636.      any possible  keypress.   You can code a value which
  2637.      represents ESCAPE  to the  program (283)  but if the
  2638.      user presses that key three times in a row an escape
  2639.      option WILL  BE PROCESSED.  You can use \PASSWORD to
  2640.      prevent unauthorized exiting.
  2641.  
  2642.      The global  \ON KEY  specification (format 1) is NOT
  2643.      ACTIVE during  \QUESTION.   All other  \ON KEY's are
  2644.      checked with  each key  the user presses.  If an \ON
  2645.      KEY jump occurs while the user is editing a line the
  2646.      line is  accepted as is and then the \ON KEY process
  2647.      occurs.   Global \ON KEYs are also not active during
  2648.      "single-step" (debugging)  mode.  If both global and
  2649.      specific \ON  KEYs are  active the specific \ON KEYs
  2650.      take precedence.
  2651.  
  2652.      ON KEY...CALL's  exit the  current command  or  text
  2653.      line and will not reenter \MARQUE, \SHOW, \MOUSE and
  2654.      \RUN.   \RETURN will be to the command following the
  2655.      current command.  If you changed fonts and locations
  2656.      and so  on in  the \ON KEY called routine these will
  2657.      remain as  changed.  Paragraphs that are called with
  2658.      \ON KEY...CALL  should IMMEDIATELY  turn off the \ON
  2659.      KEY condition  that called them, on the same line as
  2660.      the paragraph name (or on a line connected with a \+
  2661.      command).   Otherwise if  pressed again it will "re-
  2662.      call" the  paragraph!   Just before  the \RETURN (on
  2663.      the same  or a  connected line)  turn  the  \ON  KEY
  2664.      condition on again.  Since \ON KEY's are NOT checked
  2665.      after  a   \RETURN  command   this  will  mean  that
  2666.      processing will  have a  chance  to  return  to  the
  2667.      original  calling  area  before  doing  another  \ON
  2668.      KEY...CALL.   In general, \ON KEY...JUMP's are quite
  2669.      a bit  simpler to  use and  are recommended whenever
  2670.      possible.
  2671.  
  2672.      Using \ON  KEY #  CALL NNNNN  can result  in a CAN'T
  2673.      PROCEED error  code 3  (Too many  calls), especially
  2674.      if taken  via a  mouse or  other user  input  device
  2675.      button.   This is because the program checks for the
  2676.      pressing of  the button  very rapidly;  it can do it
  2677.      many times  before the button is released.  To avoid
  2678.      this, turn  OFF the  \ON KEY CALL (\ON KEY # will do
  2679.      it) as  soon as  you get to the called paragraph (on
  2680.      the same  line as the paragraph name or connected to
  2681.      it with  a \+ command.)  Also be sure to connect the
  2682.      line that  turns \ON  KEY back  on with  the \RETURN
  2683.      that matches  the call.   Or, have the entire called
  2684.      paragraph be connected with \+ commands.
  2685.  
  2686.      ON KEY's  are checked once between each command line
  2687.      in the text file.  For text lines, once between each
  2688.      row or  column placed  on the  screen.   The  actual
  2689.      number of checks that will occur per text line would
  2690.      depend on the height or width of the font.  Checking
  2691.      will NOT occur between multiple commands on the same
  2692.      line,  except   prior  to  \"  commands.    You  can
  2693.      temporarily "inhibit"  \ON KEY  checking  by  coding
  2694.      commands on  the same line.  This can be significant
  2695.      help in insuring that several processes all occur if
  2696.      the first one occurs.  It also executes faster.  You
  2697.      can inhibit  \ON KEY  checking between command lines
  2698.      if the last command on the previous line is \+.  See
  2699.      that command  for more  information on  it's use and
  2700.      restrictions.   \ON KEY's are always checked after a
  2701.      \JUMP has occurred.
  2702.  
  2703.  
  2704. EXAMPLES:
  2705.  
  2706.      \ON KEY=YES
  2707.      \ON KEY F8    ;Turns off a specification for F8.
  2708.      \ON KEY #3071 JUMP BEGIN
  2709.      
  2710.      \ON KEY 16424 CALL SPACE_BAR_PRESSED
  2711.      \ON KEY F3 JUMP SOME_PLACE_NICE
  2712.      \ON KEY 7181 ;Turns off \ON KEY for the RETURN key.
  2713.      
  2714.      \ON KEY 7181 JUMP UP_AND_DOWN
  2715.                               
  2716.  
  2717.  
  2718.                        **** OPEN ****
  2719.  
  2720.  
  2721. FORMAT: \OPEN {NNNNNNNN.PIC} {NNNNNNNN.DAT} {NNNNNNNN.PRN
  2722.           {ADD}} {LPT1:} {LPT2:} {LPT3:} {LPT?:} {IGNORE}
  2723.  
  2724.  
  2725.      Use NNNNNNNN.PIC to open disk-based animation files.
  2726.      These are  animation sequences  for use by the \SHOW
  2727.      command.  It is a way to animate sequences of frames
  2728.      that  are   larger  (perhaps   much  larger!)   than
  2729.      available RAM  or EMM.   File should be closed after
  2730.      use.
  2731.  
  2732.      Use NNNNNNNN.DAT  to open  text-style data files for
  2733.      use with  the \DATA  command.  File should be closed
  2734.      after use.
  2735.  
  2736.      For print  files (output  ASCII  files),  \OPEN  can
  2737.      specify either  a disk  file (extension PRN), or the
  2738.      system printer; LPT1, LPT2, or LPT3, or any printer,
  2739.      LPT?.   Either LPT#,  or a print file MUST be opened
  2740.      before any  \PRINT statements  attempt to  write  to
  2741.      them.  You can use the option IGNORE after the LPT#:
  2742.      to ignore  the  return  code--the  printer  will  be
  2743.      considered opened  regardless  of  what  the  status
  2744.      value is.   We  recommend you DO NOT use this option
  2745.      without advising the user explicitly that the system
  2746.      could hang  if the program tries to access a printer
  2747.      that is not available.
  2748.  
  2749.      You can  only have  one print  file open  at a time.
  2750.      Use the \CLOSE statement to close them.  A disk file
  2751.      may be  reopened after  being closed, for additional
  2752.      \PRINT statements to use, by using the ADD option of
  2753.      \OPEN.  The "file pointer" will be at the end of the
  2754.      file, of course.
  2755.  
  2756.      Any CAN'T  PROCEED errors  in processing  will cause
  2757.      print, data,  and disk-based  animation files and/or
  2758.      LPT1, LPT2,  or LPT3  to be closed.  Opening a print
  2759.      file will  destroy an  old one  on the disk with the
  2760.      same name  unless you use the ADD option, so only do
  2761.      this with  files you  want this  to happen to!  When
  2762.      you open  LPT1, LPT2,  LPT3, or LPT? a reset code is
  2763.      sent  through  the  BIOS  to  the  printer  and  the
  2764.      printer's return  status code  is placed in variable
  2765.      "A".  The meaning of this code is documented in BIOS
  2766.      technical references.  The program  will wait  up to
  2767.      about 12  seconds for  the printer to return a valid
  2768.      (not busy) code.
  2769.      Picture files shown with \OPEN can use significantly
  2770.      less RAM since they use only the decompress area and
  2771.      take no additional RAM or EMM of their own.
  2772.  
  2773.      Note: Any  \ON KEY jumps leave the opened file open,
  2774.      so have the jumps go to places that close the opened
  2775.      files or  don't use \ON KEY jumps with \OPEN, or set
  2776.      it up so it expects files to be opened, or store the
  2777.      status of  the file  and  behave  accordingly.    Or
  2778.      something...
  2779.                               
  2780.  
  2781.  
  2782.                         **** OUT ****
  2783.  
  2784.  
  2785. FORMAT: \OUT #,# {BYTE or WORD}
  2786.  
  2787.  
  2788.      The first  value is  the port, usually 0 to 255, and
  2789.      the second  value is  the amount  to be \OUTed.  The
  2790.      second value  can be  \OUTed at the address given in
  2791.      the first  value as  a byte  or word,  depending  or
  2792.      which parameter  you use.   As  a byte  it  must  be
  2793.      between 0 and 255 and as a word, -32K to +32K.
  2794.  
  2795.      
  2796.  
  2797.      To use  this command,  you MUST  know what  you  are
  2798.      doing!   This can  directly affect  the hardware  of
  2799.      your system  and even cause damage to your system or
  2800.      that of  your users!   You  could  actually  harm  a
  2801.      monitor, disk  drive,  or  other  device  with  this
  2802.      command!   Of course,  you are  much more  likely to
  2803.      just  need   to  reboot   if  you   use  it  without
  2804.      understanding it, but...   DON'T USE \OUT UNLESS YOU
  2805.      UNDERSTAND WHAT IT DOES.
  2806.  
  2807.      Therefore, you  must use  \AUTHORITY HIGH  to enable
  2808.      this command.
  2809.  
  2810.      Do not,  REPEAT DO  NOT use  this command unless you
  2811.      are absolutely  sure that you understand the purpose
  2812.      of ports,  hardware devices,  the ASSEMBLER LANGUAGE
  2813.      OUT command (which this executes), and anything else
  2814.      that might be important, depending on which port you
  2815.      plan to OUT data to!
  2816.  
  2817.      And don't  come crying  to us  if you  disobey these
  2818.      cautions and  ruin your  system!   THIS  COMMAND  IS
  2819.      DANGEROUS DON'T  USE  IT  WITHOUT  UNDERSTANDING  IT
  2820.      FIRST.
  2821.  
  2822.      
  2823.                               
  2824.  
  2825.  
  2826.                       **** OVERLAY ****
  2827.  
  2828.  
  2829. FORMAT: \OVERLAY #{,X or O or A}
  2830.  
  2831.  
  2832.      Sets the text display mode to OVERLAY (as opposed to
  2833.      SCROLL or  CRAWL).  The number is the speed at which
  2834.      to overlay  text.   If a  question mark (?) is used,
  2835.      text mode  is changed  to overlay  and  the  current
  2836.      speed is  placed in variable "A".  IF ,X is included
  2837.      the text  is XORed  onto the screen, if ,A ANDed, if
  2838.      ,O ORed.
  2839.  
  2840.      AND, OR,  and XOR are most useful for fonts designed
  2841.      with just black (background) and the highest numeric
  2842.      color available for the screen mode.
  2843.  
  2844.      In bitplane  modes you  can AND,  OR, and  XOR  with
  2845.      color 1  only.   Use  TEXT  PLANE=  to  get  similar
  2846.      effects to what this would have given with XOR, AND,
  2847.      and OR in bitmapped modes.
  2848.                               
  2849.  
  2850.  
  2851.                        **** PAINT ****
  2852.  
  2853.  
  2854. FORMAT: \PAINT #,{UDLRVHBA}
  2855.  
  2856.  
  2857.      The #  specifies the  border color  to paint  up to.
  2858.      The program will paint in the current color (perhaps
  2859.      set with  \DOT until  it reaches  the border.    The
  2860.      UDLRVHBA indicates  in which direction to paint (up,
  2861.      down,  left,   right,  vertical,   horizontal,  both
  2862.      (vertical and horizontal) and all).  Painting occurs
  2863.      from the  current position.   When called from \DRAW
  2864.      just the  P should  be used  (not the  AINT).    The
  2865.      option  Small   Square,  available  in  the  picture
  2866.      editor, is not available as a command.
  2867.  
  2868.      Painting will  take place  in the  current color set
  2869.      with \LINE,  \DOT, \DRAW,  etc..   Except for option
  2870.      "A" \PAINT  will remain  active  until  turned  off.
  2871.      Only one  direction can  be used  at a time.  \PAINT
  2872.      without any parameters turns OFF paint mode.
  2873.  
  2874.      For the  "A" option,  the next dot drawn acts as the
  2875.      "seed" and painting occurs within an area bounded by
  2876.      the border color specified or the paint color.  This
  2877.      option shuts  off after  one use.   This option uses
  2878.      the same  storage area  that "tilt" (in the editor's
  2879.      draw mode)  uses, so  if you want to use a tilt line
  2880.      repeatedly, do  NOT paint  in between  uses.    (See
  2881.      tilt.)
  2882.  
  2883.      The paint  "all" option utilizes a temporary storage
  2884.      area in RAM to accomplish it's task.  It is possible
  2885.      to use  up this  area in a very "complex" paint job.
  2886.      If this  happens, some  areas will  not  get  filled
  2887.      completely.  The position of the original "seed" can
  2888.      have some  effect on  the result  in this  case.  If
  2889.      this is  a problem,  try to  divide the  area to  be
  2890.      painted into  two or  more  individual  sections  to
  2891.      paint.
  2892.                               
  2893.  
  2894.  
  2895.                      **** PASSWORD ****
  2896.  
  2897.  
  2898. FORMAT: \PASSWORD EXIT=# {or "NNNN" or 'NNNN'}  TIME=#
  2899.  
  2900.  
  2901.      This allows you to control runtime user's ability to
  2902.      return to DOS from within an application.
  2903.  
  2904.      The maximum  password length  in  single  or  double
  2905.      quotes is  10 characters.  It may be an alphanumeric
  2906.      auxbox or  literal in  quotes but  NOT a variable or
  2907.      numeric auxbox.   A  password of  a space  or spaces
  2908.      clears the option.
  2909.  
  2910.      Password checking  occurs  when  ESCAPE  (or  a  key
  2911.      assigned to  ESCAPE) is pressed.  The full length is
  2912.      taken even if a wrong key is pressed.  Passwords are
  2913.      only used  in  the  runtime  version.    The  editor
  2914.      version will parse the command but will not actually
  2915.      set up a password protection scheme.
  2916.  
  2917.      Time is  specified in  584ths (approx.)  of a second
  2918.      units.   The minimum  value of  118 is equivalent to
  2919.      about 1/5th second.  Time is per character.
  2920.  
  2921.      Return  must   be  pressed  after  the  password  is
  2922.      entered.
  2923.                               
  2924.  
  2925.  
  2926.                         **** PEN ****
  2927.  
  2928.  
  2929. FORMAT: \PEN {AIRBRUSH={NO or #{,#,#...}}} {COLOR=#}
  2930.           {WIDTH=#} {XOR={YES, NO, ON, OFF}} {CYCLE={NO
  2931.           or #{,#,#...}}}
  2932.  
  2933.  
  2934.      Sets pen options for \DOT, \DRAW, \LINE and \CIRCLE.
  2935.  
  2936. AIRBRUSH=NO or #{,#,#...}
  2937.      Turns airbrush  mode on  or off for subsequent \DOT,
  2938.      \DRAW, \LINE  and \CIRCLE  commands. Strength of the
  2939.      spray is set with the WIDTH option.  You can specify
  2940.      up to  ten different  colors and  these override the
  2941.      COLOR option  (see below).   Use  NO to turn off the
  2942.      airbrush.
  2943.  
  2944. COLOR=#
  2945.      Sets pen color for subsequent \DOT, \DRAW, \LINE and
  2946.      \CIRCLE commands.   Valid  options are 0 through the
  2947.      maximum color  for the  screen mode (3 in CGA mode).
  2948.      Use any  negative number  for clear.   No value will
  2949.      also evaluate to clear, but only if this is the last
  2950.      option in  the command.   (Otherwise the keyword for
  2951.      the next option will be evaluated as the number!)
  2952.  
  2953. CYCLE=NO or #{,#,#...}
  2954.      Turns color  cycle mode  on or  off  for  subsequent
  2955.      \DOT, \DRAW,  \LINE and  \CIRCLE commands.   You can
  2956.      specify up  to ten different colors.  Use NO to turn
  2957.      off the  color cycle  option.   Since C= would set a
  2958.      color, you  must type  at least  the CY=  portion of
  2959.      this parameter.
  2960.  
  2961. WIDTH=#
  2962.      Sets pen  size for subsequent \DOT, \DRAW, \LINE and
  2963.      \CIRCLE commands.  Valid options are 1 through 5.
  2964.  
  2965. XOR=YES or NO, ON or OFF, AND, OR, XOR
  2966.      Sets XOR,  AND, or  OR   on or  off  for  subsequent
  2967.      \DRAW, \LINE  and \CIRCLE  commands.   \DOT  is  not
  2968.      affected by this command's XOR setting.  Through the
  2969.      current release  7.24, XOR  is not  compatible  with
  2970.      wide pen  lines.   Only a  one-dot wide line will be
  2971.      drawn properly  in XOR  mode.  YES/ON and NO/OFF are
  2972.      exactly equivalent.
  2973.                               
  2974.  
  2975.  
  2976.                        **** PRINT ****
  2977.  
  2978.  
  2979. FORMAT: \PRINT #{,#,#,#...}
  2980.  
  2981.  
  2982.      Writes to  a print  file or  LPT#:.   You must first
  2983.      \OPEN the file or use \OPEN to initialize the system
  2984.      printer.
  2985.  
  2986.      The format  of \PRINT's  parameters work  just  like
  2987.      \DISPLAY, except  you may  specify numeric values to
  2988.      print with  brackets ([#]).   If you have a trailing
  2989.      comma    the     program    will     NOT    add    a
  2990.      carriage-return/line-feed after  whatever you print,
  2991.      but if  the comma is not there, then it WILL add the
  2992.      CR and LF characters (13,10).  Numeric values except
  2993.      those in brackets ([ ]) are converted to a string of
  2994.      ASCII characters  and then  the  string  is  printed
  2995.      Those inside of brackets are sent as 1-byte unsigned
  2996.      numbers and cannot be less than zero or greater than
  2997.      255.
  2998.  
  2999.      If you have not opened LPT#: \PRINT writes to a disk
  3000.      file previously  \OPENed and  does not  write to the
  3001.      printer.   It will actually write the record to disk
  3002.      whenever 512 bytes have been printed.  When the file
  3003.      is closed the rest, if any, is written.
  3004.  
  3005.      One way to print this file later might be to issue a
  3006.      command to  do so  from DOS with \EXECUTE.  You must
  3007.      close the disk file before you do this.
  3008.  
  3009.  
  3010. EXAMPLES:
  3011.  
  3012.      \PRINT [27],'  Prints the escape character, which has a
  3013.      decimal value  of 27,  and  then  prints  this  message
  3014.      followed by a cr/lf.'
  3015.      \PRINT #232,TIME&DATE," HAVE A NICE DAY",
  3016.      
  3017.      The second example would print whatever is in auxbox
  3018.      #232 immediately  followed by  the TIME&DATE auxbox,
  3019.      followed by  the phrase HAVE A NICE DAY which starts
  3020.      with a  space.   No cr/lf is added since the command
  3021.      ends with a comma.
  3022.                               
  3023.  
  3024.  
  3025.                      **** QUESTION ****
  3026.  
  3027.      FORMAT: \QUESTION #,#{,#{,LOWER}}
  3028.  
  3029.      Gets keyboard  input from  the user and places their
  3030.      response in a variable or auxbox.
  3031.  
  3032.      If the  value of  the second  number is 0, this asks
  3033.      for a  number from  the user  and puts it's value in
  3034.      the location  mentioned in  the first  number, which
  3035.      must be an auxbox or variable.  Otherwise it gets an
  3036.      ASCII string  of the  length specified by the second
  3037.      number (1  thru  80)  and  puts  it  in  the  auxbox
  3038.      specified by  the  first  number.    If  the  auxbox
  3039.      already contains alphanumeric data its contents will
  3040.      appear in  the user's  edit window  for them to make
  3041.      additional changes  to.    The  user's  edit  window
  3042.      location is  set with  the \CURSOR  command.   \WAIT
  3043.      LIMIT sets  how long,  in seconds, this command will
  3044.      wait for  user input.   The  user exits \QUESTION by
  3045.      pressing the  RETURN key or any mouse button (unless
  3046.      the button  has been reassigned to a different key.)
  3047.      \QUESTION uses the DOS standard font for user input,
  3048.      and  the  actual  screen.    It  will  not  use  the
  3049.      background screen.
  3050.  
  3051.      The third  parameter is the cursor position when the
  3052.      routine begins.   If not specified it will be on the
  3053.      first character in the line.  After getting numerics
  3054.      the cursor will be advanced seven positions.  If you
  3055.      specified a  text window  with \CURSOR  #,#,#,# then
  3056.      the line  will  be  kept  inside  that  window  with
  3057.      automatic scrolling  if necessary.    After  getting
  3058.      alphanumerics the cursor position will be set to the
  3059.      beginning of the line.
  3060.  
  3061.      When entering  alphanumerics users  can  only  enter
  3062.      capitalized letters  unless LOWER has been specified
  3063.      as the  fourth parameter.   The third parameter must
  3064.      be included to use this fourth parameter.
  3065.  
  3066.      Numeric data  outside the  valid  range  (-32768  to
  3067.      +32767)  will   be  forced  into  the  valid  range.
  3068.      Numbers entered  which are  less than -32768 will be
  3069.      returned as  -32768, and  numbers greater than 32767
  3070.      will become  32767.. In  both instances, the speaker
  3071.      will beep  if the  sound is  not toggled  off.  When
  3072.      getting numeric  data, this  will blank  the six (6)
  3073.      characters forward from (to the left of) the current
  3074.      cursor position FIRST.
  3075.                               
  3076.  
  3077.  
  3078.                        **** READ ****
  3079.  
  3080.  
  3081. FORMAT: \READ {drive:}{/path/}NNNNNNNN.EXT
  3082.  
  3083.  
  3084.      Reads  a   picture,  font,   text,  macro,  hue,  or
  3085.      auxiliary file into RAM or EMM.
  3086.  
  3087.      The  filename  (NNNNNNNN)  can  be  proceeded  by  a
  3088.      numeric literal, variable or auxbox and a colon (:).
  3089.      This will  force a  new  default  drive.    You  are
  3090.      probably used  to referring  to the  drives as  "A",
  3091.      "B", and  "C".   Within this  program use  numbers--
  3092.      Drive "A" is 1, "B" is 2, etc.
  3093.       You may optionally include a path specification,
  3094.           this will  change the  default path.   Since
  3095.           the  program  uses  the  backslash  (\)  for
  3096.           commands  you  cannot  use  that  slash  for
  3097.           pathnames in command lines!  Use the forward
  3098.           slash (/) for pathnames instead.
  3099.  
  3100.  
  3101.       EXT determines most of what this command does:
  3102.  
  3103.  
  3104.       TXT will  read in  a new  text  file  and  start
  3105.           executing  that  file  from  the  beginning.
  3106.           Your previous  text file  is overlaid.  (You
  3107.           cannot overlay  edit  changes,  of  course.)
  3108.           Any \ON  KEY specifications that were active
  3109.           for  text   will  be  eliminated  when  this
  3110.           command is  executed, but  NOT any macro \ON
  3111.           KEY specifications.
  3112.  
  3113.  
  3114.       FON will  read a  font file  into the font area,
  3115.           overlaying any  previous font.   It will NOT
  3116.           move the  font into  the picture area.  This
  3117.           can only be done manually.  The font area is
  3118.           normally 20K  bytes, but  can be  set before
  3119.           loading P11  to any  value from  3K  to  63K
  3120.           bytes with  a  parameter  in  the  P11FLAGS=
  3121.           environment string (or on the command line).
  3122.           To do so, use:
  3123.  
  3124.  
  3125.                FONT:#        (# is from 3 to 63)
  3126.  
  3127.  
  3128.       HUE will  read a  hue file  into the  hue  table
  3129.           area, overlaying  any hue  information  that
  3130.           was  already  there    (you  cannot  overlay
  3131.           changes in  the editor.)   Each  screen mode
  3132.           has it's  own hue  table where  the hue data
  3133.           will go.   You  should only  read a HUE file
  3134.           for the mode you are in.
  3135.  
  3136.  
  3137.       AUX will  read an  auxiliary file  into the  aux
  3138.           area overlaying any auxfile that was already
  3139.           there.
  3140.  
  3141.  
  3142.       PIC reads  a picture  file providing  no changes
  3143.           were made  to the  current one.  The picture
  3144.           will be  read into RAM, or EMM if available.
  3145.           The number  of frames  read in  will  be  in
  3146.           variable "A"  after this option is executed.
  3147.           If the  picture is  in a different mode from
  3148.           the current  one the  screen  mode  will  be
  3149.           changed to  the new picture mode.  EMM usage
  3150.           can be  disabled or  limited by  setting the
  3151.           P11FLAGS= environment  string or the command
  3152.           line parameter:
  3153.  
  3154.  
  3155.                EMM:#         (0 to inhibit EMM, or any
  3156.           desired # of EMM pages.)
  3157.  
  3158.  
  3159.       MAC reads a macro file if the name is not one of
  3160.           the nine  (maximum) stored names.  Reading a
  3161.           macro does  NOT clear \ON KEY specifications
  3162.           for other  macros.  \CLEAR MACROS will.  All
  3163.           paragraph names  in all  macros in memory at
  3164.           any  one  time  must  be  different  or  the
  3165.           program will  only access  the first  one it
  3166.           encounters.   This will  not necessarily  be
  3167.           the first  one in  the file.   It may be the
  3168.           closest, the  first, the  next,  etc.    The
  3169.           easiest way  to insure  that the proper name
  3170.           is found  is to give all the paragraph names
  3171.           in each macro a unique prefix.
  3172.  
  3173.      You may  specify the drive as a variable, number, or
  3174.      numeric auxbox.    You  can  specify  the  path  and
  3175.      filename (with  the extension)  as auxboxes too.  To
  3176.      do this,  put the  auxbox in  parenthesis.  The path
  3177.      must  ALSO  be  within  slashes  (NOT  backslashes).
  3178.      Within  the   auxboxes,  put   the  period  and  the
  3179.      extension with  the filename  (example:  HORSE.TXT).
  3180.      Within the pathname auxbox include slashes (forward-
  3181.      or back-slashes  are okay within auxboxes).  You may
  3182.      use a  single auxbox  which includes drive, path and
  3183.      filename.
  3184.  
  3185.      NOTE:   These commands  will only  read the file off
  3186.      the disk if the file is not already in RAM.
  3187.  
  3188.  
  3189. EXAMPLES:
  3190.  
  3191.      \READ #3:/(#4)/(#5)
  3192.      \READ 3:/FROG/(#6)
  3193.      \READ /FROG/PIG.PIC
  3194.      \READ (#7)
  3195.      
  3196.      In the  first example  all three  elements--drive, path
  3197.      and filename with extension--are specified symbolically
  3198.      through the  use of  auxboxes.  In the next example the
  3199.      path and drive are "hardcoded" and the filename.ext are
  3200.      in auxbox  #6.   In the third example the current drive
  3201.  
  3202.      is used  and the path and filename are "hardcoded".  In
  3203.      the last  example auxbox  #7  may  contain  the  entire
  3204.      drive, path  and filename, or the path and filename, or
  3205.      the drive  and filename, or just the filename.  Current
  3206.      values will be used for unspecified elements.
  3207.                               
  3208.  
  3209.  
  3210.                       **** RESTORE ****
  3211.  
  3212.  
  3213. FORMAT: \RESTORE {SCREEN}
  3214.  
  3215.  
  3216.      The entire  screen can  be stored  in  a  background
  3217.      area.   This will get a screen previously saved with
  3218.      \SAVE SCREEN.   The background area is the same area
  3219.      used by the raster frame mask option.
  3220.  
  3221.      You can also restore the screen from disk by setting
  3222.      B:0 in   environment  variable P11FLAGS=  or on  the
  3223.      command line.   This will cause the entire screen to
  3224.      be read  from a  file called SCRNDUMP.SV# (#=1 or 2)
  3225.      in the directory \P11\TEMP.
  3226.  
  3227.      
  3228.                               
  3229.  
  3230.  
  3231.                       **** RETURN ****
  3232.  
  3233.  
  3234. FORMAT: \RETURN
  3235.  
  3236.  
  3237.      Will cause  processing  to  return  to  the  command
  3238.      immediately after  the last  call.   A call  can  be
  3239.      established with  \CALL, \CALLM,  \ON KEY...CALL  or
  3240.      \ON ERROR...CALL.  The place returned to could be in
  3241.      the midst  of an  \IF  statement,  but  the  \RETURN
  3242.      itself  cannot  be  between  an  \IF  statement  and
  3243.      \ENDIF.   No \ON  KEY  processing  or  input  device
  3244.      checking occurs  between a  \RETURN command  and the
  3245.      next command.
  3246.                               
  3247.  
  3248.  
  3249.                       **** ROTATE ****
  3250.  
  3251.  
  3252. FORMAT: \ROTATE {ANGLE=# FRAME=# LOCATION=#,#}
  3253.  
  3254.  
  3255.      Lets you rotate a vector frame anywhere from 0 to 90
  3256.      degrees.  The parameters can appear in any order and
  3257.      should be separated by at least one space.  Location
  3258.      refers to  the center  dot location  about which the
  3259.      rotation should  take place.  The location  must  be
  3260.      between -2000  and +2000  inclusive  on  each  axis.
  3261.      Angle is degrees of clockwise rotation.
  3262.                               
  3263.  
  3264.  
  3265.                       **** ROUNDS ****
  3266.  
  3267.  
  3268. FORMAT: \ROUNDS # {SPEED # or [#{,REPEAT}] {FIXED}
  3269.           {REVERSIBLE} {WAVING}} {RANGE #,#} {RETRACE}
  3270.  
  3271.  
  3272.      Sets the  number of  cycles that  \MARQUE, \SHOW  or
  3273.      \RUN will  execute.   SPEED refers  to the  time for
  3274.      each cycle.   Each  unit represents a small fraction
  3275.      (about 1/584th)  of a second.  The larger the number
  3276.      the longer the pause.  If a question mark appears in
  3277.      SPEED or  RUN, the  current value  will be placed in
  3278.      variable "A".  When the program starts ROUNDS is set
  3279.      to -1  (cycle forever), and SPEED is set to [0] (use
  3280.      frame speed controls).
  3281.  
  3282.      If the  speed value  is enclosed  in brackets  ([ ])
  3283.      then the  frame number  specified will  be  used  to
  3284.      control the  speed.   If non-0, frame must be in RAM
  3285.      or EMM:  it cannot  be part of a disk-based picture.
  3286.      This must be a vector frame.  The Y-axis values will
  3287.      be the  timing units  for each frame.  The first and
  3288.      last dots  will not be used.  If the frame number is
  3289.      followed by  the word  REPEAT then the cycle will be
  3290.      repeated.   Otherwise the  last value  will be  used
  3291.      repeatedly after  cycling through the frame once.  A
  3292.      value of  0 in  brackets ([0])  will  use  the  base
  3293.      timing values  for each  frame   This is the default
  3294.      when the  program starts.   Base timing values of -1
  3295.      will wait for a keypress or mouse press.
  3296.  
  3297.      The following additional words may be included after
  3298.      the SPEED parameter.  They do not affect \MARQUE.
  3299.  
  3300. FIXED (F)
  3301.      When specified  the user CANNOT change the animation
  3302.      speed with  the up and down arrow keys (or any other
  3303.      keys  that  might  have  been  set  with  the  \KEYs
  3304.      command.)  The default is not FIXED.
  3305.  
  3306. REVERSIBLE (R)
  3307.      Allows  the  user  to  reverse  any  animation  that
  3308.      following \SHOW  commands  display  (not  used  with
  3309.      \RUN).  To do this they must press "-" (minus).  "+"
  3310.      (plus) makes  animation run  forward again.    These
  3311.      keys may  be reassigned  with \KEY.   The default is
  3312.      not REVERSIBLE.
  3313.  
  3314. WAVING (W)
  3315.      Used with  \SHOW.   Animation goes  from  the  first
  3316.      frame to  the last  and then back down again a frame
  3317.      at a time.  The default is NOT waving.
  3318.  
  3319. RANGE (RA)
  3320.      The user  can speed  the animation  up to as fast as
  3321.      the first  number and  as slow as the second number.
  3322.      The defaults  are 0  (as fast  as possible)  and  -1
  3323.      (stopped).  Whatever you set these to will remain in
  3324.      effect until the next \ROUNDS command, where it will
  3325.      be set  to the  defaults unless  reset by you.  Note
  3326.      that a  "wrong" initial  value for SPEED in terms of
  3327.      being OUTSIDE  the max/min  speeds in RANGE will NOT
  3328.      be checked  - but the first time speed is CHANGED by
  3329.      the user - POOF! it must fit in the boundaries!
  3330.  
  3331.      
  3332.  
  3333. RETRACE (RET)
  3334.      For \SHOW, this will start placing each frame on the
  3335.      screen at  the START  of the  next vertical  retrace
  3336.      period.   This MIGHT  make some  bitplane animations
  3337.      smoother.   The default  is NOT paying any attention
  3338.      to retrace timing.
  3339.                               
  3340.  
  3341.  
  3342.                         **** RUN ****
  3343.  
  3344.  
  3345. FORMAT: \RUN {FROM #} {TEXT} {MOUSE}  {HUES} {NUMBERS or
  3346.           FACTS {#}}
  3347.  
  3348.  
  3349.      Runs animation  sequences set  up with  \SPRITE  and
  3350.      \SPRINT for \ROUNDS number of cycles unless an exit,
  3351.      such as  an \ON  KEY keypress, occurs.  The user can
  3352.      adjust the  speed if the FIXED option of \ROUNDS has
  3353.      not been issued.
  3354.  
  3355.      FROM #  causes the \ROUNDS cycle counter to start at
  3356.      the  value  specified  rather  than  at  zero.    No
  3357.      actions, such  as string or position increments etc.
  3358.      prior to  that cycle  will take  place.   The  cycle
  3359.      counter  counts  up  until  it  reaches  the  number
  3360.      specified in \ROUNDS.
  3361.  
  3362.      With each  cycle of  \RUN animation,  vector  images
  3363.      with \SPRITE  XOR=AUTO will XOR off the previous one
  3364.      before XORing  on the new frame.  With raster images
  3365.      it does these two operations concurrently.
  3366.       HUES     will execute  the previous HUES command
  3367.           once with  each cycle.  This is for use with
  3368.           CY=YES in the \HUES command.
  3369.  
  3370.  
  3371.       MOUSE will  execute a  previous  \MOUSE  command
  3372.           concurrent with  the sprite  activity.   The
  3373.           ROUNDS= and  SPEED= options  of  \MOUSE  are
  3374.           ignored in  this case.   This  lets a  mouse
  3375.           cursor be  moved around  on the  screen with
  3376.           the \RUN  animation, but  can leave  unusual
  3377.           pieces of  images  on  the  screen  in  some
  3378.           cases.
  3379.  
  3380.  
  3381.       TEXT will  cause lines  of text  to be displayed
  3382.           concurrently.   The lines to be shown follow
  3383.           \RUN in the text file, and will be placed on
  3384.           the screen  according to  the  current  text
  3385.           display  mode.     If   a  command  line  is
  3386.           encountered the  text display  will stop and
  3387.           the \RUN  command will  finish it's  cycles.
  3388.           If on  the other hand the \RUN cycles finish
  3389.           first, the  text line  display will complete
  3390.           before going  on to  the next  text line  or
  3391.           command.
  3392.  
  3393.      The number  of cycles  completed will be in variable
  3394.      "C" when  this command  is exited  regardless of how
  3395.      the exit  occurred (finished, \ON KEY pressed, etc.)
  3396.      Through the  current release,  if  more  than  32767
  3397.      rounds have  passed negative  numbers will  be used,
  3398.      counting up from -32768.
  3399.  
  3400.      NUMBERS and  FACTS are debugging aids available only
  3401.      in the editor version.  If either is included with a
  3402.      FROM parameter, FROM must be coded first.
  3403.  
  3404. NUMBERS will display five numbers on the bottom of the
  3405.      screen.   The first  is the  \SPRINT number being
  3406.      shown.   The second number is the frame number in
  3407.      the picture file.  The next number is the current
  3408.      round, and  the last  two numbers are the current
  3409.      position of the sprite.
  3410.  
  3411.  
  3412. FACTS displays  the current  values for sprite motion.
  3413.      It shows  two number  columns and  one  character
  3414.      column.    The top line on the screen is the same
  3415.      as that  displayed by  the NUMBERS  option at the
  3416.      bottom of  the screen.   See  Appendix "A"  for a
  3417.      complete listing  of what  each value  refers to.
  3418.      Press Pg  Dn to  show more  numbers for  the same
  3419.      frame and  HOME to go back to the first screen of
  3420.  
  3421.      information.   Use the  left and right arrow keys
  3422.      to see  other sprite  values without advancing to
  3423.      the next  frame.   Press any other key to advance
  3424.      to the  next frame.   \ON KEY jumps and calls are
  3425.      partially inhibited  in this  mode.  You may have
  3426.      to press  the key  repeatedly or  hold it down to
  3427.      get it to "take".
  3428.  
  3429.      FACTS and  NUMBERS can  be followed  by at least one
  3430.      space and  a number.   If present then facts/numbers
  3431.      will not  be displayed  until after  that round  has
  3432.      occurred.   If left in a RUNTIME version, these must
  3433.      be the  last parameters  on the  line  and  will  be
  3434.      ignored.  It is better to remove them after use.
  3435.  
  3436.  
  3437. EXAMPLES:
  3438.  
  3439.      \RUN FROM 23 NUMBERS 44
  3440.      \RUN MOUSE FACTS
  3441.      \RUN
  3442.      \RUN TEXT MOUSE FROM 23 NUMBERS 30
  3443.                               
  3444.  
  3445.  
  3446.                        **** SAVE ****
  3447.  
  3448.  
  3449. FORMAT: \SAVE {SCREEN}
  3450.  
  3451.  
  3452.      The entire  screen can  be copied to its own storage
  3453.      area.  The screen can then be restored with \RESTORE
  3454.      SCREEN.   This uses  the same  area that is used for
  3455.      raster pictures with masks.
  3456.  
  3457.      You can  also save  the screen  to disk by using the
  3458.      option B:0  in the environment variable P11FLAGS= or
  3459.      on the  command line.   This  will cause  the entire
  3460.      screen to  be "dumped" to a file called SCRNDUMP.SV#
  3461.      (#=1  or  2)  in  the  directory  \P11\TEMP.    This
  3462.      directory MUST  exist to  use this option!  The disk
  3463.      name will  end in  either a  1 or  a 2.    \EXCHANGE
  3464.      SCREEN will  toggle the  name since  it first writes
  3465.      out a new screen dump, then reads the old one.
  3466.                               
  3467.  
  3468.  
  3469.                       **** SCREEN ****
  3470.  
  3471.  
  3472. FORMAT \SCREEN #,#{,#} or MODE=# or ?
  3473.  
  3474.  
  3475.      The first number is the background color, the second
  3476.      is the palette, and the third number, if present, is
  3477.      the screen mode.  The default screen mode is 4, CGA.
  3478.      If the  parameter form is used, only the mode number
  3479.      is changed.   Since only CGA uses the background and
  3480.      palette values,  MODE=# is  sufficient for all other
  3481.      modes.   Note:   Do NOT use  the MODE= option in the
  3482.      environmental variables  or on the command line.  It
  3483.      is not able to parse that option.  Use the three #'s
  3484.      version instead.
  3485.  
  3486.      If a  question mark  (?) is used the current mode is
  3487.      placed in variable "A".
  3488.  
  3489.      This command  can  be  entered  from  the  P11FLAGS=
  3490.      environment string  or from  the  command  line,  in
  3491.      brackets.   If it  is found  there, the mode will be
  3492.      set before any files are read in.  In the editor you
  3493.      can use  this option  to  convert  images  from  one
  3494.      screen mode to another.  Enter the mode you want the
  3495.      picture to  end up  as in the environment string and
  3496.      then read the picture file into the editor.
  3497.  
  3498.                SCREEN:#,#,#
  3499.      
  3500.      
  3501.      In CGA  there are  two palettes,  0 and  1,  and  16
  3502.      background colors,  0 through  15.   Background  and
  3503.      palette values  are passed to DOS, which changes the
  3504.      screen.
  3505.  
  3506.      If the  screen mode  is  actually  changed  by  this
  3507.      command, \CLEAR  MOUSE and  \CLEAR SHOW commands are
  3508.      executed automatically.   It  is a  good idea to re-
  3509.      initialize  the  digitizer  if  it  is  being  used,
  3510.      because the  dimensions may  not match  the  current
  3511.      screen mode.
  3512.  
  3513.      Valid modes are:
  3514.      
  3515. Screen        Dot
  3516. Character
  3517. Mode   Dimensions  Colors   Dots/byte   Dimensions
  3518. Comments
  3519.     4.......320 X 200.4..4.....40 X 24   CGA-the
  3520. original P11 mode.
  3521.     5.......320 X 200.4..4.....40 X 24   CGA, but a
  3522. different palette.
  3523.     6.......640 X 200.2..8.....80 X 24   CGA monochrome
  3524. mode.
  3525.     9.......320 X 200.16.2.....40 X 24   PCjr or TECMAR
  3526. depending on hardware.
  3527.    10.......640 X 200.4..4.....80 X 24   TECMAR 4-color
  3528. mode.
  3529.    13.......320 X 200.16.2.....40 X 24   EGA 16-color
  3530. low-res mode.
  3531.    14.......640 X 200.16.2.....80 X 24   TECMAR 16-color
  3532. mode.
  3533.    16.......640 X 350.16.8.....80 X 24   EGA 16-color
  3534. high-res mode.
  3535.    17.......640 X 480.2..8.....80 X 30   MCGA high-
  3536. density monochrome mode.
  3537.    18.......640 X 480.16.8.....80 X 24   VGA 16-color
  3538. mode.
  3539.    19.......320 X 200.2561.....40 X 24   MCGA rainbow
  3540. mode.
  3541.      
  3542.      
  3543.      NOTE 1: With third party software, mode 4 can be run in
  3544.      monochrome on HERCULES hardware.
  3545.      
  3546.      NOTE 2:  PCjr modes  are also  called extended  CGA and
  3547.      available from many TANDY machines.
  3548.                               
  3549.  
  3550.  
  3551.                       **** SCROLL ****
  3552.  
  3553.  
  3554. FORMAT: \SCROLL #{,{AOX},#}
  3555.  
  3556.  
  3557.      Similar to  \OVERLAY and  \CRAWL but  sets the  text
  3558.      display mode  to scroll all text up the screen.  The
  3559.      first parameter  sets the  speed of the scroll.  The
  3560.      second parameter, if included, will cause text to be
  3561.      XOR'ed, AND'ed, or OR'ed with the color specified in
  3562.      the third parameter before it appears on the screen.
  3563.      Unlike \OVERLAY  this will  not XOR, AND, or OR with
  3564.      what is already on the screen--that gets scrolled up
  3565.      and lost.
  3566.  
  3567.      AND, OR,  and XOR are most useful for fonts designed
  3568.      with just black (background) and the highest numeric
  3569.      color available for the screen mode.
  3570.  
  3571.      As with  \CRAWL and  \OVERLAY in bitplane modes, you
  3572.      can only  XOR, AND,  or OR  text with  color 1.  Use
  3573.      TEXT PLANES= to get additional colors.
  3574.                               
  3575.  
  3576.  
  3577.                         **** SET ****
  3578.  
  3579.  
  3580. FORMAT: \SET COLOR=# DOT={# or ?} FRAME=# LOCATION=#,#
  3581.           MODE={GET or SET}
  3582.  
  3583.  
  3584.      Lets you  manipulate individual  dots  of  a  vector
  3585.      drawing from  within a  command file.   COLOR is the
  3586.      dot's new  color.   DOT is the dot number.  FRAME is
  3587.      the frame  number the  dot belongs  in.  LOCATION is
  3588.      the new  X-axis and Y-axis values for the dot.  MODE
  3589.      lets you choose to GET information about the current
  3590.      dot's location  and color,  or SET  it.  (SET is the
  3591.      default.   If GET  is used  it must be specified for
  3592.      EACH \SET command.)
  3593.  
  3594.      IF the  DOT=? option  is used, then the MODE= option
  3595.      will be  ignored, the current dot will be set to dot
  3596.      1 (the  first dot  in the file) and the total number
  3597.      of dots  in frame  specified in  the FRAME=#  option
  3598.      will be  placed in  variable "A".   The vector image
  3599.      will NOT be changed at all.  If you use this command
  3600.      on a RASTER image it results in an error.
  3601.  
  3602.      This command  does not  create a  frame or insert or
  3603.      delete  dots.    It  only  changes  dots  within  an
  3604.      existing frame.   Use  \FRAME  to  create  a  vector
  3605.      frame.   You cannot  execute this command if changes
  3606.      exist to the picture file currently in memory.
  3607.  
  3608.      You can let values default.  Any value not specified
  3609.      will default to the value in a previous \SET, except
  3610.      DOT will increment by 1 if not specified explicitly.
  3611.                               
  3612.  
  3613.  
  3614.                        **** SHOW ****
  3615.  
  3616.  
  3617. FORMAT 1: \SHOW #,#,#,#{,A}{,O}{,X}{,S}
  3618.  
  3619.  
  3620.  
  3621. FORMAT 2: \SHOW  AND={YES or NO} FRAME=#,# LOCATE=#,#
  3622.           MOTION=#,# OR={YES or NO} PATH=#{,#} SAVE={YES
  3623.           or NO} WINDOW=#,#,#,# XOR={YES or NO}
  3624.  
  3625.  
  3626.      Does animation  on the  screen, saves  a frame whose
  3627.      space has already been allocated, or AND's, OR's, or
  3628.      XOR's a  frame onto the screen.  For raster drawings
  3629.      accuracy is  to the  nearest byte  boundary  on  the
  3630.      horizontal axis.  In CGA  mode it is every 4 dots, 8
  3631.      dots in  monochrome modes,  etc.   See \SCREEN for a
  3632.      table of  dots per  byte.    For vector drawings the
  3633.      location specified  is NOT offset by the first dot's
  3634.      value.   If a  disk-based animation  file  is  open,
  3635.      \SHOW will  use it,  but any  vector paths or timing
  3636.      frames must be in RAM or EMM.
  3637.  
  3638.      In format  1, the  first two values set the location
  3639.      on the  screen.   The next values are the "from" and
  3640.      "to" frames,  and the  fifth value  if present  is A
  3641.      (and), O  (or), X  (xor) or S (save).  These options
  3642.      are valid  only when  the "from" and "to" frames are
  3643.      the same.   See  the descriptions  in  format  2  to
  3644.      understand how each of these options function.
  3645.  
  3646.      If you  just want  to show  one frame  on the screen
  3647.      without AND,  OR, or  XOR you  can  just  use  three
  3648.      numbers  (the  X  and  Y  locations  and  the  frame
  3649.      number).
  3650.  
  3651.      In format 2, parameters are specified with keywords.
  3652.      Their meanings follow:
  3653.  
  3654. AND={YES or NO}
  3655.      When placing  only one  frame on  the  screen  (both
  3656.      FRAME= values  are the  same) you may use AND.  This
  3657.      is a  mathematical function  which ANDs  the picture
  3658.      into the screen.
  3659.  
  3660. FRAME=#,#
  3661.      Indicates the  "from" and "to" frames, respectively,
  3662.      to animate.   If  the second number is less than the
  3663.      first, the  animation  will  run  in  reverse  order
  3664.      unless the  second number  is  -1,  which  means  to
  3665.      animate all frames from the first number to the last
  3666.      frame in the file.
  3667.  
  3668. LOCATE=#,#
  3669.      The upper  left corner of the animation.  For raster
  3670.      frames  add  the  base  offset  to  get  the  actual
  3671.      location, rounded to a byte boundary.  (In CGA mode,
  3672.      every 4 dots.)
  3673.  
  3674. MOTION=#,#
  3675.      Indicates X-  and Y-axis increments to the beginning
  3676.      location.  Incrementing occurs each cycle.
  3677.  
  3678. OR={YES or NO}
  3679.      When placing  only one  frame on  the  screen  (both
  3680.      FRAME= values are the same) you may use OR.  This is
  3681.      a mathematical function which will OR the frame into
  3682.      the screen.
  3683.  
  3684. PATH=#,# or PATH=NO
  3685.      Indicates a  vector frame  to use  as a  path.   The
  3686.      second #  indicates a  dot to  start at.   Use NO to
  3687.      specify no  path.   This will  repeat from the first
  3688.      active dot  (the second dot of the frame) if it gets
  3689.      to the penultimate dot of the frame.
  3690.  
  3691. SAVE={YES or NO}
  3692.      Saves rather  than displays a frame.  Only one frame
  3693.      can be saved at a time: FRAME=#,# must indicate only
  3694.      one frame--both  numbers must  be the  same.  If the
  3695.      frame dimensions  and the location specified cause a
  3696.      portion to  be outside  the screen  or  the  current
  3697.      window, only  that portion  visible would  be saved.
  3698.      The frame must already exist in the file.  This will
  3699.      overwrite it but will not be considered a change for
  3700.      editing purposes.   It  will not  execute if changes
  3701.      exist.
  3702.  
  3703. WINDOW=#,#,#,#
  3704.      Indicates a viewing window.  Lower X-axis values are
  3705.      rounded to byte boundaries.
  3706.  
  3707. XOR={YES or NO}
  3708.      When placing  only one  frame on  the  screen  (both
  3709.      FRAME= values  are the  same) you may use XOR.  This
  3710.      is a  mathematical function which will XOR the frame
  3711.      with the screen.  If you XOR the same image into the
  3712.      screen twice  in the same place, the original screen
  3713.      image will be unchanged.
  3714.  
  3715.  
  3716. Animation runs  for \ROUNDS number of cycles unless the user
  3717. exits by  pressing an  active \ON KEY or the \KEY NEXT= key.
  3718. A parameter  of \ROUNDS sets the speed.  The user can change
  3719. the speed  if the  FIXED option  of \ROUNDS  was not issued.
  3720. When exited  the number  of  cycles  completed  will  be  in
  3721. variable "C".
  3722.  
  3723.  
  3724. EXAMPLES:
  3725.  
  3726.      \SHOW 22,88,3,3,X
  3727.      \SHOW 37,45,4,8
  3728.      
  3729.      Parameters 1 and 2 are screen position.
  3730.      Parameter 3 is the beginning frame.
  3731.      Parameter 4  is the  ending frame.   This should be the
  3732.      same as parameter 3 for the ,A ,O, ,X and ,S options.
  3733.      Parameter 5,  if included,  is either  A for AND, O for
  3734.      OR, X for XOR or S for SAVE.
  3735.      
  3736.      
  3737.      \SHOW FRAME=7,-1 MOTION=4,0
  3738.      
  3739.      This example  uses the  keyword format  of \SHOW.    It
  3740.      would animate  from frame  seven through the last frame
  3741.      in the file.  These frames would move to the right four
  3742.      dots for each frame shown.
  3743.                               
  3744.  
  3745.  
  3746.                        **** SOUND ****
  3747.  
  3748.  
  3749. FORMAT: \SOUND ON or OFF
  3750.  
  3751.  
  3752.      Toggles the  sound capabilities  on and off. It does
  3753.      not produce  any noise  but will  inhibit  \BEEP  if
  3754.      \SOUND is  set OFF.  If you  execute \SOUND  OFF all
  3755.      beeps will be inhibited including any you issue with
  3756.      \BEEP and any the program would issue itself.
  3757.                               
  3758.  
  3759.  
  3760.                       **** SPRINT ****
  3761.  
  3762.  
  3763. FORMAT \SPRINT #{,# TO #...}
  3764.  
  3765.  
  3766.      Indicates the  frames to be used with current sprite
  3767.      motion parameters.  First, set up the desired motion
  3768.      parameters with \SPRITE.  Then indicate which frames
  3769.      should follow  those parameters with \SPRINT.  After
  3770.      you have  set up  all the  images with  their motion
  3771.      parameters,  use   \RUN  to  display  the  animation
  3772.      sequence.
  3773.  
  3774.      The word  SPRINT was  chosen because  the command is
  3775.      similar to  \PRINT in  syntax,  and  because  SPRITE
  3776.      characters can be made to SPRINT across the screen.
  3777.  
  3778.      To "sprint" animation you must list each frame to be
  3779.      sprinted or  use "  TO "  to indicate  a  series  of
  3780.      frames.
  3781.  
  3782.  
  3783. EXAMPLES:
  3784.  
  3785.      \SPRITE TYPE=R ANIMATE=3
  3786.      \SPRINT 1,2,3,4,5,6,7
  3787.      \RUN
  3788.      
  3789.      \SPRITE T=R A=3\SPRINT 1 TO 7\RUN
  3790.      
  3791.      \SPRITE T=R A=3 \MOVE 1 TO G
  3792.      \X LOOP1
  3793.      \SPRINT G
  3794.      \IF G<7 \ADD 1 TO G \JUMP LOOP1
  3795.      \ENDIF
  3796.      \RUN
  3797.      
  3798.      (These three examples produce the exact same image.)
  3799.                               
  3800.  
  3801.  
  3802.                       **** SPRITE ****
  3803.  
  3804.  
  3805. FORMAT: \SPRITE AND=YES or NO ANIMATE={# or NO}
  3806.           CONNECT={YES or NO} INCREMENT=#,# END=#,#,#,#
  3807.           FAST={Y or anything} MOTION=#,# OPEN=#,#,#,#
  3808.           TYPE={R or anything} PATH={#,# or NO}
  3809.           ROUNDS=#,# STRING=#,# WINDOW=#,#,#,# WPATH={#,#
  3810.           or NO} XOR={N, A or Y} ZING={#,#,# or NO}
  3811.  
  3812.  
  3813.      Sets up  animation parameters  for \SPRINT frames to
  3814.      use.
  3815.  
  3816.      The keywords  are used  to control a wide variety of
  3817.      animation  activities.    After  using  \SPRITE  and
  3818.      \SPRINT commands  to set  up the  action use \RUN to
  3819.      activate  everything.    Motion  will  continue  for
  3820.      \ROUNDS number of cycles at a chosen SPEED.
  3821.  
  3822. EXAMPLE:
  3823.  
  3824. \SPRITE WINDOW=33,22,37,145 ROUNDS=33,76
  3825.  
  3826.      Would set  a display  window that would apply to any
  3827.      frames  that   are  set   with  subsequent   \SPRINT
  3828.      commands.   This would  change if  you issue another
  3829.      window value  or a \CLEAR SPRITES command.  It would
  3830.      also  set   the  elements  to  become  "active"  (be
  3831.      displayed if  in the  window) at round 33 and become
  3832.      inactive after round 76.
  3833.  
  3834.      
  3835.  
  3836.      Following are  the keywords (which can be entered as
  3837.      just  the   first  letter   or  letters)  and  their
  3838.      meanings:
  3839.  
  3840. AND=YES or NO
  3841.      The image  can be  ANDed, ORed,  or XORed  onto  the
  3842.      screen.  This will cause it to be ANDed.
  3843.  
  3844. ANIMATE=# or NO
  3845.      The value is the number of cycles to hold each frame
  3846.      on  the  screen.    Sometimes  you  do  not  want  a
  3847.      particular group  of animated  frames to  change  as
  3848.      frequently as other action occurs within a cycle, in
  3849.      that case  you would  use a  number greater  than  1
  3850.      here.   NO sets  this option  off.  Animation frames
  3851.      must follow one another with no intervening elements
  3852.      when created  with  \SPRINT.    Other  elements  can
  3853.      appear but each animation sequence must run together
  3854.      and be  separated from  other animation  by at least
  3855.      one non-animated  \SPRINT frame.   Only  one of  the
  3856.      frames in the sequence is shown per cycle.
  3857.  
  3858.      If the animation reaches a END= window or the end of
  3859.      a PATH, then if TYPE is not REPEAT but KEEP=YES, the
  3860.      animation will continue in place at the end location
  3861.      until the  ROUNDS= ending  cycle is reached.  MOTION
  3862.      amounts are  added  only  when  an  element  of  the
  3863.      animation sequence  is  displayed,  NOT  necessarily
  3864.      every round  (it depends  on the  value ANIMATION is
  3865.      set to.)  \CLEAR SPRITES sets animation to OFF (NO).
  3866.  
  3867. CONNECT=YES or NO
  3868.      This turns  on the  connected dot  mode  for  vector
  3869.      images.   Line segments  are drawn between each dot:
  3870.      the first  dot is drawn and subsequent line segments
  3871.      are the  color of  their endpoint. Their startpoints
  3872.      (the previous  line  segment's  endpoints)  are  not
  3873.      redrawn.   The lines  are clipped to the screen edge
  3874.      then the  individual dots  are drawn  or  not  drawn
  3875.      depending on  whether  they  are  within  an  active
  3876.      window.
  3877.  
  3878. END=#,#,#,#
  3879.      If the  sprite reaches  the window  defined by these
  3880.      four values  the sprite  action ends.    Values  are
  3881.      X-low, Y-low,  X-high, Y-high.   (The  actual  value
  3882.      stored is  offset by  the values in the first dot of
  3883.      the frame  (if vector)  or 0,0  (if  raster).)    If
  3884.      TYPE=R the sprite repeats in place if it gets to the
  3885.      END window.  The END= window is initialized to 5000,
  3886.      5000, 4999,  4999 by \CLEAR SPRITES, which indicates
  3887.      NO end area.
  3888.  
  3889. FAST=YES or NO
  3890.      This only  affects raster drawings.  When set to YES
  3891.      (or "Y")  images are  placed on  the screen  at byte
  3892.      boundaries for much faster operation.  Auto-xor will
  3893.      be treated  as XOR=YES  if FAST=YES.   FAST  must be
  3894.      equal to  YES to  use a  frame mask.   The  mask  is
  3895.      automatically ANDed and the image ORed together with
  3896.      the  background   screen  and   the  combined  image
  3897.      displayed on the screen.  Use this to move an object
  3898.      across a background image.
  3899.  
  3900. INCREMENT=#,#
  3901.      When using  the STRING= option for displaying vector
  3902.      frames these  values will  be added to the beginning
  3903.      and ending string values each round.  They represent
  3904.      the number  of bytes  to add.   Since each dot takes
  3905.      four bytes  in memory  a  value  of  four  (4)  will
  3906.      increment by  one dot  each cycle.   This  allows an
  3907.      increment of  less  than  one  dot  per  cycle,  for
  3908.      instance a  value of  1 will  increment by  one  dot
  3909.      every  four   cycles  while  a  value  of  two  will
  3910.      increment by  one dot  every other  cycle.    \CLEAR
  3911.      SPRITES sets this to 0,0.
  3912.  
  3913. KEEP=Y or anything else
  3914.      When  the   sprite  reaches  an  end  of  some  sort
  3915.      (location, round, etc.) it will NOT be xor'ed off if
  3916.      this is  set to Yes, even if Auto-xor is on.  If the
  3917.      sprite is  part of an animation sequence (ANIMATE=#)
  3918.      then the  animation will  continue  to  run  at  the
  3919.      stopped location until the ending round.  If the end
  3920.      was achieved  by reaching  the end  of a  path or an
  3921.      END=  window,   animation  at  the  ending  location
  3922.      continues.   (If  TYPE=REPEAT  then  animation  will
  3923.      continue at  the starting  location or  at the first
  3924.      dot of  a path.)   If  not animating, this option is
  3925.      only useful for auto-xor.
  3926.  
  3927. LOCATION=#,#
  3928.      This sets  the starting  location.  The first dot in
  3929.      the  image   (if  vector)  or  0,0  (if  raster)  is
  3930.      subtracted from  this value  and then all subsequent
  3931.      dots (if vector) are offset by the resultant amount.
  3932.      For raster  images, add  the base  offset to get the
  3933.      actual location.  Set to 0,0 by \CLEAR SPRITES.
  3934.  
  3935. MOTION=#,#
  3936.      This sets  up values  to be  added to the location X
  3937.      and Y  values each round.  (If animating, each cycle
  3938.      that an  image is changed).  With this option things
  3939.      can move  in any  direction including onto, off, and
  3940.      around the screen.  \CLEAR SPRITES sets this to 0,0.
  3941.  
  3942. OPEN=#,#,#,#
  3943.      This lets  you  adjust  the  corners  of  a  viewing
  3944.      window; the four values are the X-low, Y-low, X-high
  3945.      and Y-high  amounts to add to the base window values
  3946.      each time  the frame  is shown.  You may want to use
  3947.      negative numbers  for the  X-low and Y-low increment
  3948.      amounts and  positive numbers  of the  X-high and Y-
  3949.      high increment  amounts.  If any value becomes below
  3950.      0 or  greater than  the screen size it will cease to
  3951.      change.   If you  use a  window path  (WPATH=)  this
  3952.      option will not be utilized.  \CLEAR SPRITES sets it
  3953.      to 0,0,0,0.
  3954.  
  3955. OR=YES or NO
  3956.      The image  can be  ANDed, ORed,  or XORed  onto  the
  3957.      screen.  This will cause it to be ORed.
  3958.  
  3959. PATH=#,# or NO
  3960.      This indicates  a vector  frame to use as a path (or
  3961.      "track").   If the frame is raster it will be caught
  3962.      as an  error when  you use \SPRINT.  The first value
  3963.      is which  frame to  use as a path.  The second value
  3964.      is which  dot within  that path to start on.  If you
  3965.      choose the  REPEAT option of TYPE=, repetition along
  3966.      the path  will be  from the  beginning, NOT from the
  3967.      specified dot.   Repeat  begins when  you reach  the
  3968.      second-to-last dot  in the  path frame  or  an  END=
  3969.      window.   The second  value is  ONLY valid  for  the
  3970.      first time  around the  path.  The starting location
  3971.      will be  the sum  of the  values  in  the  LOCATION=
  3972.      parameters,  the   current  path   dot  chosen   and
  3973.      additionally, if  vector, the first dot (the one NOT
  3974.      shown) of the frame (NOT of the path).  To start the
  3975.      path at  the first  active dot (the second dot) of a
  3976.      vector image  code a one (1) in the second parameter
  3977.      of this option.  To turn off this parameter code the
  3978.      word NO  after the  equal sign.  \CLEAR SPRITES sets
  3979.      this option off.
  3980.  
  3981. ROUNDS=#,#
  3982.      Sets the starting and ending cycles that a sprite is
  3983.      to be shown from and until, respectively.  No string
  3984.      incrementing, motion,  etc.  will  occur  until  the
  3985.      starting round and the image will not be shown. Once
  3986.      the starting round is passed values will be adjusted
  3987.      once each  round based  on the options that were set
  3988.      with other  \SPRITE keywords.   Each  \SPRINT  frame
  3989.      will be  adjusted unless the frame becomes inactive.
  3990.      \CLEAR SPRITES  sets ROUNDS  to 0,-1.   -1  will run
  3991.      forever.   If the  -1 round  is reached  it will  be
  3992.      ignored and the sprite will continue to be active.
  3993.  
  3994. STRING=#,#
  3995.      This is  only useful for vector drawings.  It is the
  3996.      dots (not  including the  first and  last) that  are
  3997.      actually to be shown on the screen.  The first value
  3998.      is the  first dot  to show  and the  second  is  the
  3999.      number of dots to show.  If these values are changed
  4000.      with INCREMENT=  and reach  the next-to-last dot the
  4001.      string that  is shown  will work it's way completely
  4002.      off the  screen unless TYPE=REPEAT.  In that case it
  4003.      will repeat  from the  first active dot in the image
  4004.      for  a   length  specified,  NOT  from  the  initial
  4005.      starting dot.   That  dot is  only effective for the
  4006.      first pass.  The first active dot (the second actual
  4007.      dot) is  number 1.   \CLEAR  SPRITES  sets  this  to
  4008.      0,16384.
  4009.  
  4010. TYPE={R or anything else}
  4011.      Sets up  repeat-sequences.   Repeat  resets  to  the
  4012.      beginning values  and starts  over if  the  sprinted
  4013.      frame gets to the position given in END=. If a PATH=
  4014.      or STRING=  option gets  to the  last active  dot it
  4015.      will reset  to the  first active  dot.    Repetition
  4016.      stops if  the ending  ROUNDS= value is reached.  Any
  4017.      character except R sets this option off.
  4018.  
  4019. WINDOW=#,#,#,#
  4020.      Sets a  window smaller than full screen size. Images
  4021.      will scroll  out of  these windows  as if  they were
  4022.      scrolling off  the screen.   Window  is reset to the
  4023.      full screen size with \CLEAR SPRITES.
  4024.  
  4025. WPATH=#,# or NO
  4026.      Sets a path for a window to follow.  If you use this
  4027.      option the WINDOW= values will be the base (initial)
  4028.      window location and it's size.  You cannot use OPEN=
  4029.      with WPATH.  \CLEAR SPRITES sets this to NO.
  4030.  
  4031. XOR={A, N, X or Y}
  4032.      When set  to "N" (NO), objects are simply put on the
  4033.      screen where you say to.  If moving, they will leave
  4034.      a trail  unless the edges are the same color as what
  4035.      they move  across--experimentation will explain this
  4036.      better.   When set  to "A"  (Automatic) the  program
  4037.      will XOR  off the last position as it is drawing the
  4038.      new position.  This has the useful effect of leaving
  4039.      the background  image unchanged.   When  set to  "Y"
  4040.      (Yes) or  "X" the  drawing will be XOR'ed on, but if
  4041.      you want  to remove  it YOU  must XOR the frame onto
  4042.      the screen  a second  time.   XOR=NO is the fastest.
  4043.      \CLEAR SPRITES sets this to NO.
  4044.  
  4045.      You can't  mix vector and raster XOR=A animation and
  4046.      get what  you might  expect.  Animation in this mode
  4047.      can be  very useful--images  are removed  as the new
  4048.      ones are put on.  If you were to manually XOR frames
  4049.      on and  off they  will not  be  XORed  concurrently.
  4050.      Auto-xor works  fine for  all-vector  or  all-raster
  4051.      groups,  but  if  you  mix  types  in  an  animation
  4052.      sequence it  will XOR  off one frame THEN XOR on the
  4053.      next in AUTO mode.
  4054.  
  4055. ZING=#,#,# or ZING=NO
  4056.      The third  value here  sets a  raster frame  to  the
  4057.      location specified  by the  first two  values.   The
  4058.      frame's base  values are  added to the X- and Y-axis
  4059.      values specified to determine the actual location of
  4060.      the upper left corner of the image.
  4061.  
  4062.      This does  not by  itself  cause  the  frame  to  be
  4063.      displayed--yet.   When a  subsequent vector frame is
  4064.      passed over  the raster  frame, the  raster frame is
  4065.      displayed rather  than the  vector dots.  Works with
  4066.      XOR but not with AUTO-XOR.  ZING works with the FAST
  4067.      option to  display a  byte  at  a  time  (four  dots
  4068.      horizontally in CGA mode.)
  4069.  
  4070.  
  4071. EXAMPLES:
  4072.  
  4073.      \READ GALLOP.PIC\ROUNDS 50 SPEED 33\CLEAR SPRITES
  4074.      \SPRITE M=0,4 F=Y A=1\SPRINT 1 TO 15\RUN
  4075.      
  4076.      This would  make a  horse gallop across the screen from
  4077.      left to right.
  4078.                               
  4079.  
  4080.  
  4081.                      **** SUBTRACT ****
  4082.  
  4083.  
  4084. FORMAT: \SUBTRACT # FROM #
  4085.  
  4086.  
  4087.      The first  value can be an expression that evaluates
  4088.      to a  number.   The answer  will be  placed  in  the
  4089.      second value.   The  first value  can be  a  number,
  4090.      variable or auxbox but the second must be a variable
  4091.      or auxbox.  Both values must be numeric.
  4092.  
  4093.      Remember that  the maximum  and minimum  values of a
  4094.      number or  32767 and  -32768 respectively,  and that
  4095.      results  of   mathematical  operations   will  "wrap
  4096.      around"  in   order  to   stay  within  this  range.
  4097.      Internal calculations are double-word signed values,
  4098.      accurate to 31 bits.
  4099.  
  4100.  
  4101. EXAMPLES:
  4102.  
  4103.      \SUBTRACT A FROM B
  4104.      \SUBTRACT 99 FROM #767
  4105.      \SUBTRACT (W-55) FROM Q
  4106.                               
  4107.  
  4108.  
  4109.                        **** THEN ****
  4110.  
  4111.  
  4112. FORMAT: \THEN
  4113.  
  4114.  
  4115.      Follows an \IF statement and begins the portion that
  4116.      will be  executed when  the  condition  in  the  \IF
  4117.      statement evaluates  as true.   The \ELSE statement,
  4118.      which can  follow  the  \THEN  clause,  starts  that
  4119.      portion that  will be  executed if the \IF statement
  4120.      proves false.    Both  the  \THEN  statement  itself
  4121.      and/or any accompanying commands to execute, or text
  4122.      to display,  are optional.   In  that case you would
  4123.      code the  \ELSE portion  directly following  the \IF
  4124.      statement.   The \THEN statement doesn't actually do
  4125.      anything and  is totally  ignored, even if it is out
  4126.      of position,  but it can sometimes make your program
  4127.      a little easier to read.
  4128.  
  4129.  
  4130. EXAMPLES:
  4131.  
  4132.      \IF APPLES=ORANGES
  4133.      \THEN
  4134.      \    MOVE "OH MY GOSH!!" TO #21
  4135.      \ELSE
  4136.      \    IF PIGS_HAVE_WINGS = "TRUE"
  4137.      \    THEN
  4138.      \        MOVE "NO WAY!!" TO #21
  4139.      \    ELSE
  4140.      \        MOVE "ALL IS WELL" TO #21
  4141.      \ENDIF
  4142.      \DISPLAY #21
  4143.      
  4144.      In this  example APPLES,  ORANGES, and  PIGS_HAVE_WINGS
  4145.      are all named auxboxes.
  4146.                               
  4147.  
  4148.  
  4149.                        **** TEXT ****
  4150.  
  4151.  
  4152. FORMAT: \TEXT {PLANES=1111}
  4153.  
  4154.  
  4155.      PLANES=is a binary number.  It is only applicable to
  4156.      bitplane modes  and should contain as many digits as
  4157.      bitplanes.   By changing  active bitplanes the color
  4158.      of the text will be changed.  It is set to all one's
  4159.      (1111 for  four plane mode) whenever the screen mode
  4160.      is changed.
  4161.  
  4162.  
  4163. EXAMPLE:
  4164.  
  4165.      \TEXT PLANE=1011   ;This will set planes zero, two, and
  4166.      three active and plane one will be off.
  4167.                               
  4168.  
  4169.  
  4170.                        **** WAIT ****
  4171.  
  4172.  
  4173. FORMAT: \WAIT LIMIT # or NOW # or RETURN # {"NNNNNN"}
  4174.  
  4175.  
  4176.      Sets how  long the program will wait for the user to
  4177.      respond (LIMIT),  how long  to wait for a return key
  4178.      to be  pressed (RETURN),  or how  long to  just WAIT
  4179.      (NOW).   The larger the number specified, the longer
  4180.      the wait.
  4181.  
  4182.      For LIMIT and RETURN, the time units are in seconds.
  4183.      For NOW,  it is  the same as for the SPEED option of
  4184.      \ROUNDS--about 1/584th  of a  second if you have not
  4185.      reset the  clock speed  with \CLOCK.   A value of -1
  4186.      will wait forever (until a keypress.)
  4187.  
  4188.      \WAIT LIMIT  # is  the amount  of time in seconds to
  4189.      wait for  the user  to press  the return  key during
  4190.      user input  with \QUESTION.   Unless reassigned to a
  4191.      different key  any mouse button is equivalent to the
  4192.      RETURN key.
  4193.  
  4194.      For the  \WAIT RETURN  # option the value (#) can be
  4195.      followed by a comma and an alphanumeric "literal" in
  4196.      single or  double quote marks (both quote marks must
  4197.      be the same).  This literal will replace the message
  4198.      normally displayed  (maximum 78 characters).  If two
  4199.      quote marks are coded next to each other, no message
  4200.      will appear  (a cursor  will still appear, however.)
  4201.      The location  of the  message cannot  be changed (it
  4202.      starts at  the left edge of the second line from the
  4203.      bottom.)
  4204.  
  4205.      If \WAIT  RETURN exceeds the time specified, -1 will
  4206.      be placed in variable "B", otherwise 7181, the value
  4207.      of the  return key,  will be  there.   Pressing  any
  4208.      mouse button  will also end \WAIT RETURN and in that
  4209.      case  variable   "F"  will  hold  the  mouse  button
  4210.      pressed.   (Unless reassigned  with \BUTTONS,  mouse
  4211.      buttons are equivalent to the RETURN key.)
  4212.  
  4213.      WAIT NOW  simply suspends  all  processing  for  the
  4214.      specified time  or until a key is pressed.  Use this
  4215.      option to  give the  user a  fixed amount of time to
  4216.      read the screen.
  4217.  
  4218.  
  4219. EXAMPLE:
  4220.      \WAIT RETURN 20  "SHOW BEGINS WHEN YOU PRESS RETURN"
  4221.      \WAIT NOW 584   ;waits about one second.
  4222.                               
  4223.  
  4224.  
  4225.                        **** WIDTH ****
  4226.  
  4227.  
  4228. FORMAT: \WIDTH # {DOTS} {LEFT, RIGHT, BOTH, or CENTERED}
  4229.           {PROPORTIONAL}
  4230.  
  4231.  
  4232.      Sets the  width in  either characters  or dots  that
  4233.      will be displayed on the screen when text statements
  4234.      are encountered.  Words are wrapped to the next line
  4235.      for  \OVERLAY   and  \SCROLL.     If   specified  in
  4236.      characters the  actual  width  of  the  text  as  it
  4237.      appears on  the screen  will be  the product of this
  4238.      value and the width of the current font.
  4239.  
  4240.      You  can   specify  justification  other  than  left
  4241.      justified  (the   default).    When  not  specified,
  4242.      justification will be LEFT after this command.
  4243.  
  4244.      You can  specify  the  width  in  dots  rather  than
  4245.      characters.   Proportional font widths should always
  4246.      be specified  this way.    The  number  of  dots  is
  4247.      rounded down  to a  2-byte (word)  boundary (in  CGA
  4248.      mode there are 8 dots per word.)
  4249.  
  4250.      You can  use the proportional option even when using
  4251.      a non-proportional  font.   For example  when  using
  4252.      BOTH  text   justification  you   need  to   specify
  4253.      proportional so  that it  will  adjust  the  spacing
  4254.      between  words  correctly.    (BOTH  option  is  not
  4255.      available for non-proportional fonts.)
  4256.  
  4257.      Proportional text  processing can  be  significantly
  4258.      slower than  non-proportional, but  usually looks  a
  4259.      lot better.
  4260.  
  4261.      As of version 7, justified BOTH will justify LEFT if
  4262.      it is the last line (or only line.)  Thus, just BOTH
  4263.      only works for lines >1 line.
  4264.                               
  4265.  
  4266.  
  4267.                        **** WRITE ****
  4268.  
  4269.  
  4270. FORMAT: \WRITE {drive:}{/path/}NNNNNNNN.EXT
  4271.  
  4272.  
  4273.      The only  valid file  that can  be written with this
  4274.      command is  an auxiliary file so the EXT must always
  4275.      be AUX.   All  other files  will be ignored.  (Print
  4276.      files are  automatically written  out 512 bytes at a
  4277.      time with \PRINT.)
  4278.  
  4279.      Text, hue,  picture and  font files  that you create
  4280.      cannot be  written to  disk this  way.  They must be
  4281.      written out manually with function key 6.
  4282.  
  4283.      As with  \READ, \OPEN and \CLOSE you may specify the
  4284.      filename, path,  etc. symbolically.  See  \READ  for
  4285.      examples and explanations.
  4286.                               
  4287.  
  4288.  
  4289.                          **** X ****
  4290.  
  4291.  
  4292. FORMAT: \X NNNNNN
  4293.  
  4294.  
  4295.      NNNNNN is  a one  (1) to  30 byte  name.   This is a
  4296.      place that  \CALL, \CALLM and \JUMP go to.  The name
  4297.      must be exactly the same everywhere it is used.  \ON
  4298.      KEY and  \ON ERROR  also jump  or call these places.
  4299.      This  command  cannot  appear  in  an  \IF  sequence
  4300.      (between the \IF and the \ENDIF).
  4301.                               
  4302.  
  4303.  
  4304.                        **** ZING ****
  4305.  
  4306.  
  4307. FORMAT: \ZING AXIS={X,Y or B} CORNERS=#,#,#,# FRAME=#
  4308.           LOCATION=#,# MODE={B, F or X, A, O}
  4309.  
  4310.  
  4311.      Displays all  or a  portion of a raster frame to the
  4312.      active screen.  ZING lets you display a single image
  4313.      with more  features  than  \SHOW  or  \RUN,  but  is
  4314.      slower.
  4315.  
  4316. AXIS={X,Y or B}
  4317.      The area  to be  shown can  be flipped  on either or
  4318.      both (B)  axis.  This can be combined with all other
  4319.      ZING options.
  4320.  
  4321. CORNERS=#,#,#,#
  4322.      Specifies the  upper left  and lower  right  corners
  4323.      within the frame to be displayed. The values are the
  4324.      X-low, Y-low, X-high and Y-high dots.
  4325.  
  4326. FRAME=#
  4327.      The frame to be \ZINGed onto the screen.  Frame must
  4328.      be a  raster image.  (Before release 7 the parameter
  4329.      LOCATION was  ignored if FRAME followed the LOCATION
  4330.      parameter.)
  4331.  
  4332. LOCATION=#,#
  4333.      Location is  the upper  left corner of the screen to
  4334.      start placing  the image.   The  base X- and Y- axis
  4335.      values for  the frame  are  added  to  the  location
  4336.      specified to determine the actual location.
  4337.  
  4338. MODE={X,A, O, B or F}
  4339.      Mode puts  this command  in XOR  mode (X),  AND mode
  4340.      (A),  OR   mode  (O),   "background"  mode  (B),  or
  4341.      "foreground" mode (F). The X, A, O, B, and F options
  4342.      are exclusive:  you may  only use  one of  them at a
  4343.      time (or  none).  Background means only the non-zero
  4344.      dots will  be moved,  and only to pixels which are 0
  4345.      on the screen.  Foreground means again only the non-
  4346.      zero dots  will be  moved, but  they will  be  moved
  4347.      regardless of what is on the screen.
  4348.  
  4349.      In XOR  mode the image to be placed on the screen is
  4350.      XOR'ed with whatever is currently on the screen.  In
  4351.      both "foreground"  and "background"  modes only dots
  4352.      in the foreground colors (color numbers greater than
  4353.      color number  0) are  transferred to the screen.  In
  4354.      background mode  these dots  are only transferred if
  4355.      the current  screen dot is the background color (0).
  4356.      This allows  objects to  be placed in the foreground
  4357.      or background of a current image.
  4358.                               
  4359.  
  4360.  
  4361.                    **** * (asterisk) ****
  4362.  
  4363.  
  4364. FORMAT: \*
  4365.  
  4366.  
  4367.      Any command  that starts  with \*  is a  comment and
  4368.      does not  affect processing.   This  command must be
  4369.      the last  or only  command on  the line.    Anything
  4370.      after it (until the CR/LF) will be ignored, even a \
  4371.      (backslash).
  4372.  
  4373.  
  4374. EXAMPLES:
  4375.  
  4376.      \* this paragraph shows horse gaits.
  4377.      \READ TROT.PIC
  4378.      \APPEND CANTER.PIC 1,9
  4379.      \APPEND GALLOP.PIC 1,13
  4380.      \APPEND PACE.PIC 1,12
  4381.      \X NEXT_HORSE
  4382.      \LOCATE 20,20
  4383.      \DISPLAY "WHAT GAIT DO YOU WANT TO SEE?"
  4384.      \CURSOR 10,5
  4385.      \QUESTION #4,0
  4386.      \IF #4 = 99
  4387.      \END
  4388.      \ENDIF
  4389.      \IF #4 = 1
  4390.      \* TROT
  4391.      \SHOW 80,80,1,12
  4392.      \ELSE
  4393.      \IF #4 = 2
  4394.      \* CANTER
  4395.      \SHOW 80,80,13,21
  4396.      \ELSE
  4397.      \IF #4 = 3
  4398.      \* GALLOP
  4399.      \SHOW 80,80,22,34
  4400.      \ELSE
  4401.      \* PACE IF NOT 1-3 OR 99
  4402.      \SHOW 80,80,35,46
  4403.      \ENDIF
  4404.      \JUMP NEXT_HORSE
  4405.                               
  4406.  
  4407.  
  4408.                  **** " (double quote) ****
  4409.  
  4410.  
  4411. FORMAT: \"
  4412.  
  4413.  
  4414.      The double  quote mark allows you to display a blank
  4415.      line on  the screen  in \CRAWL,  \OVERLAY or \SCROLL
  4416.      mode.   It is preferable to creating a blank line in
  4417.      the text file, which cannot be done anyway using the
  4418.      built-in editor.   The  program  will  handle  blank
  4419.      lines if it encounters them (presumably created with
  4420.      another text editor).
  4421.  
  4422.      Any text  appearing after  the  quote  (")  WILL  BE
  4423.      DISPLAYED.   You can use this command to display any
  4424.      text with  a backslash (\) in the first column.  For
  4425.      this reason  this command CANNOT have other commands
  4426.      following it  on the  same  line.    They  would  be
  4427.      treated as  text.  \ON KEY checking for this command
  4428.      is the  same as  for text  lines.  The number of \ON
  4429.      KEY checks  that will occur during execution of this
  4430.      command will  depend on  the height  in dots  of the
  4431.      current font.
  4432.  
  4433.      Just blank  lines (13,  10) can  be used  after text
  4434.      lines or  after a  \" command,  but not  after other
  4435.      command lines.  Therefore, use this command.
  4436.                               
  4437.  
  4438.  
  4439.                   **** + ((plus sign) ****
  4440.  
  4441.  
  4442. FORMAT: \+
  4443.  
  4444.  
  4445.      Indicates that no keyboard check is to occur between
  4446.      command lines.   This  command is  only valid as the
  4447.      last command  on a multiple-command line.  Therefore
  4448.      it is  not compatible with \" and \* commands on the
  4449.      same line.   This  command causes  multiple  command
  4450.      lines to  "behave" as  though they  were all  on the
  4451.      same line.   No  \ON KEY  jumps will  occur  between
  4452.      lines connected  with \+  so you  can guarantee that
  4453.      several processes  (commands) will  all occur if the
  4454.      first one  occurs.  If the line after the \+ command
  4455.      is a  text line  (or a  \" command  line) \ON KEY or
  4456.      keyboard checking  will only  be inhibited  for  the
  4457.      first row or column (one dot high or wide).
  4458.  
  4459.      This command  is useful  when setting  up or turning
  4460.      off multiple \ON KEY specifications.  Also it can be
  4461.      significantly faster,  particularly if  a  mouse  is
  4462.      active, since  calls  to  the  mouse  manufacturer's
  4463.      software often take a noticeable amount of time.
  4464.                               
  4465.  
  4466.  
  4467.                               
  4468.  
  4469.  
  4470.                  \RUN Information Displays
  4471.  
  4472.      This program  can do  very complex  animation.  You can
  4473. use  combinations   of  windows,  paths,  masks,  controlled
  4474. motion, xor  and animation  sequences to  display raster  or
  4475. vector pictures, or strings within vector pictures.
  4476.      \SPRITE  information   remains  set  until  either  you
  4477. restart your  text file  (in the editor, from line 1) or use
  4478. \CLEAR SPRITES.  For example if you enter a path for sprites
  4479. to follow  all \SPRINT  commands that  are executed  will be
  4480. assigned that  path until  you either  reset to  a new or no
  4481. path or  execute \CLEAR SPRITES, which sets PATH equal to NO
  4482. (none).
  4483.      The program  uses over  140  bytes  of  data  for  each
  4484. \SPRINT'ed character.  The program uses a "work area" to set
  4485. up the  data.   This area,  called the  sprite table, can be
  4486. viewed when  running the editor when \RUN FACTS {#} is used.
  4487. Some data  changes with  each cycle.   Viewing  the data can
  4488. help you  verify that what you want to occur in an animation
  4489. sequence is actually occurring--at least mathematically.
  4490.      FACTS displays  values including  the current status of
  4491. all the  parameters  you  set  with  \SPRITE.    Also,  such
  4492. information as the address of the sprite in RAM, the current
  4493. location, etc..
  4494.      Most sprite  values, including  current  location,  are
  4495. "word" (2-byte)  values.  In the case of location this means
  4496. that the "virtual" location can be any value from 0 to 32767
  4497. and additionally from -32768 to -1 on each axis.  The screen
  4498. only occupies a small portion of this range: for CGA 4-color
  4499. mode, positive  numbers 0-319 on the X-axis and 0-199 on the
  4500. Y-axis with  0,0 being the upper left corner.  If you scroll
  4501. a sprite  far enough off the screen in any direction it will
  4502. reappear on  the opposite  edge.   You can use the offscreen
  4503. area to  "store" sprites  that are active but not located on
  4504. the screen  or to  scroll sprites  off the  screen.  If  the
  4505. WINDOW= parameter  has been  entered for  a sprite  then the
  4506. "active" area  is defined  by the  window  rather  than  the
  4507. screen dimensions.
  4508.      On the following pages is a listing of where the values
  4509. for each  sprite are kept in the data area.  The data can be
  4510. shown with the FACTS option of \RUN, when running the editor
  4511. version.   First the  program displays  the image  (if it is
  4512. supposed to)  and then it displays the first screen of data,
  4513. which may overlay the sprite.  Press any key except the HOME
  4514. key, the  PG DN  key, the arrow on the four (left arrow) and
  4515. the arrow  on the  six (right  arrow) to advance to the next
  4516. sprite (NOT  one cycle--unless  you only  have one sprite in
  4517. your table).
  4518.      Information  is   displayed  for  each  sprite  whether
  4519. "active" or  not.  Press Pg Dn (the three key on the numeric
  4520. pad) to  see beyond  the first  screen of data.  Pressing it
  4521. repeatedly will put you past the current frame and on to the
  4522. next one,  but it  will NOT  "wrap around"  after  the  last
  4523. sprite-it will  just show  unrelated areas  of  memory  that
  4524. follow the  "sprite table".   Byte values are displayed both
  4525. numerically and  as a  character if  possible.   If an ASCII
  4526. character cannot  be displayed,  a period (.) will appear in
  4527. the third  column.  If a word value is at the location to be
  4528. displayed only the first two columns are used.
  4529.      Press the  HOME key  (the seven key on the numeric pad)
  4530. to return to the information at the beginning of the current
  4531. sprite.   Press the  left and  right arrow keys (on the four
  4532. and the  six)  to  see,  respectively,  the  last  and  next
  4533. sprite's information.
  4534.  
  4535.                               
  4536.  
  4537.  
  4538.               Values at Sprite Table Addresses
  4539.  
  4540. Offset Type Meaning
  4541.  
  4542.   0  Word Offset from RAM base address for this frame.
  4543.   2  Word X-location of first dot.
  4544.   4  Word Y-location of first dot.
  4545.   6  Word X-location of last dot.
  4546.   8  Word Y-location of last dot.
  4547.  10  Word X-starting location.
  4548.  12  Word Y-starting location.
  4549.  14  Word X-current location.
  4550.  16  Word Y-current location.
  4551.  18  Word X-increment amount.
  4552.  20  Word Y-increment amount.
  4553.  22  Word picture size.
  4554.  24  Word X-low ending position (adjusted by first dot
  4555.           value).
  4556.  26  Word Y-low ending position (adjusted by first dot
  4557.           value).
  4558.  28  Word Starting cycle.
  4559.  30  Byte Type.  R or anything else.
  4560.  31  Byte Frame type byte.
  4561.  32  Word Animation cycles limit plus three (3).
  4562.  34  Word Animation current cycle (>1 is currently  active).
  4563.  36  Word Scroll horizontal recycle amount.
  4564.  38  Word Scroll vertical recycle amount.
  4565.  40  Byte Was this frame onscreen last cycle (n, y)?
  4566.  41  Byte Is this an animation frame (A or not A)?
  4567.  42  Word Ending Cycle.
  4568.  44  Byte Does this frame follow a path (P)?
  4569.  45  Byte Xor? (not capitalized--is a, o, x, or R for AUTO
  4570.           REMOVE, or n or y).
  4571.  46  Word Path offset of first dot.
  4572.  48  Word Path offset of last dot.
  4573.  50  Word Path offset of current dot.
  4574.  52  Word Screen address of first byte for Auto-xor (X16).
  4575.  54  Word Offset of first byte from 52 (Auto-xor).
  4576.  56  Word RAM base address of frame (X16).
  4577.  58  Word Frame number for this sprite.
  4578.  60  Word Window lower-right X-value.
  4579.  62  Word Window upper-left Y-value.
  4580.  64  Word Window lower-right Y-value.
  4581.  66  Word Starting vector string dot number position.
  4582.  68  Word Ending vector string dot number position.
  4583.  70  Word Address of path frame (X16).
  4584.  72  Word Path frame number.
  4585.  74  Word Window upper-left X-value.
  4586.  76  Word Previous cycle X-location.
  4587.  78  Word Previous cycle Y-location.
  4588.  80  Word Add-amount for vector string starting dot.
  4589.  82  Word Previous cycle starting position for string
  4590.           display.
  4591.  84  Word Add-amount for vector string ending dot.
  4592.  86  Word Previous cycle ending position for string display.
  4593.  88  Word Height of image to be Auto-XOR'ed off.
  4594.  90  Word If raster, Auto-XOR bytes to skip (not shown).
  4595.           If vector starting string dot address.
  4596.  92  Word If raster, Auto-XOR source address of first byte.
  4597.           If vector, ending address for string repeat.
  4598.  94  Byte Auto-XOR bit mask for the left edge. (Raster.)
  4599.  95  Byte Auto-XOR bit mask for the right edge (Raster.)
  4600.  96  Byte Auto-XOR number of bits to shift image.(Raster.)
  4601.  97  Byte Unused.
  4602.  98  Word Address of last "active" dot (next-to-last dot).
  4603. 100  Word X-high end window value (adjusted if vector).
  4604. 102  Word Y-high end window value (adjusted if vector).
  4605. 104  Byte Keep? (Y).
  4606. 105  Byte Connect line segments? (Y) (Vector).
  4607. 106  Byte Fast display? (Y) (Raster).
  4608. 107  Byte Zing? (Y).
  4609. 108  Word Zing offset address.
  4610. 110  Word Zing base address.
  4611. 112  Word X-location for Zing.
  4612. 114  Word Y-location for Zing.
  4613. 116  Word X-low increment for OPEN or WPATH current dot
  4614.           address.
  4615. 118  Word Y-low increment for OPEN or WPATH first dot
  4616.           address.
  4617. 120  Word X-high increment for OPEN or WPATH last dot
  4618.           address.
  4619. 122  Word Y-high increment for OPEN or WPATH base address.
  4620. 124  Word WPATH path frame number.
  4621. 126  Word WPATH X-width of window.
  4622. 128  Word WPATH Y-width of window.
  4623. 130  Word WPATH X base window location.
  4624. 132  Word WPATH Y base window location.
  4625. 134  Word ZING word width of image.
  4626. 136  Word ZING dot width of image.
  4627. 138  Word ZING dot height of image.
  4628. 140  Word Auto-XOR bytes to show (raster).
  4629. 142  Word Sprite ZING frame.
  4630. 144  Byte Pattern-foreground mode (F) or not F.
  4631. 145  Byte Not used.  Reserved.
  4632. 146  Word Sprite ZING bitplane size.
  4633. 148  WORD Bitplane size.
  4634.                               
  4635.  
  4636.  
  4637.                               
  4638.  
  4639.  
  4640.                Picture and Font File Formats
  4641.  
  4642.  
  4643.      Picture and  font files  are designed  with  a  "header
  4644. record" of  at least  26 bytes  followed by the data for the
  4645. frames themselves.   Each  picture frame  has a sixteen-byte
  4646. frame header.   Proportional  fonts have  a ten-byte header.
  4647. Standard fonts have no frame header at all.
  4648.  
  4649.      
  4650.  
  4651.      The font  file header  is 26  bytes.   The picture file
  4652. header is 26 bytes plus 2 bytes per frame.  These additional
  4653. bytes hold  the size  of each frame:  \APPEND reads this and
  4654. then calculates  the locations in the file of the frames you
  4655. ask for.  If the file is compressed, whether font or picture
  4656. format, the header will have an additional 2 bytes per frame
  4657. containing the  frame's compressed  size.   A value  greater
  4658. than or  equal to the non-compressed size means the frame is
  4659. not compressed.  Vector frames are not compressed.
  4660.  
  4661.      The format  of the  26-byte file  header is as follows.
  4662. Bytes not used are reserved for future use.
  4663.  
  4664.      
  4665. Offset Type Meaning
  4666.  
  4667.  0   Word Unsigned low-order word for the total size of this
  4668.           file.  If non-proportional font this is the frame
  4669.           X width.
  4670.  2   Word Unsigned high-order word for the total size of
  4671.           this file.  Always zero prior to release 6.00.  If
  4672.           non-proportional font this is the Y height.
  4673.  4   Word Width in words of the last frame used.
  4674.  6   Word Picture size of the last frame used.
  4675.  8   Word Total frames in the file.
  4676. 10   Byte Total number of "sectors" in the file. (This value
  4677.           is not used after release 3.46).
  4678. 11   Word Size of this header record.
  4679. 13   Word Size of each frame header record.
  4680. 15   Byte Bytes per dot for vector frames.
  4681. 16-19     Bytes     Release number of program that wrote the
  4682.           file.
  4683. 20   Byte Graphics mode the picture file is for.  CGA is
  4684.           represented by a 4 and is the only valid mode
  4685.           before release 6.00.
  4686. 21   Byte Compressed? ("h" before release 4.80, 0 (no) or 1
  4687.           (yes) after.)
  4688. 22   Byte Palette for this picture file.
  4689. 23   Byte Background for this picture file.
  4690. 24   Byte Dots per byte for raster images.
  4691. 25   Byte Picture bitplanes.
  4692.  
  4693.  
  4694.  
  4695. The format of the frame header is as follows:
  4696.  
  4697. Offset Type Meaning
  4698.  
  4699.  0   Word Width in dots (0=1 so one less than actual).
  4700.  2   Word Height in dots (0=1 so one less than actual).
  4701.  4   Word Width in words (dots per word depends on frame
  4702.           resolution).
  4703.  6   Word Picture size in bytes (less than approximately
  4704.           64016).
  4705.  8   Byte This is a bit-mapped field.  The lowest (0th or
  4706.           rightmost) bit is the image type, Vector (1) or
  4707.           Raster (0).  The next bit to the left is the mask
  4708.           bit if raster.  Next, a bit indicating whether the
  4709.           mask was manually edited.  (1 if it was, 0 if it
  4710.           wasn't.)  Next is a bit indicating whether the
  4711.           frame is an onion skin frame (1) or not (0).  Then
  4712.           a bit
  4713.           which is currently unused but reserved--set to 0.
  4714.           Then, two
  4715.           bits which are also currently not used except by
  4716.           SCRNSAVE--
  4717.           They indicate that the frame should be a
  4718.           continuation frame
  4719.           or a base frame.  The low order bit is set to 1 if
  4720.           a base frame and the high order of these two is
  4721.           set to 0, then the
  4722.           continuation frames are both 1's, then the LAST
  4723.           continuation
  4724.           frame is a 1 in the high order and a 0 in the low
  4725.           order bit.
  4726.           Lastly is a bit used in RAM, indicating that the
  4727.           frame has
  4728.           been changed in the editor.  Normally this bit is
  4729.           set to 0.
  4730.  9   Byte Header size for the individual frames.  (16 for
  4731.           pictures, 10 for proportional fonts.)
  4732. 10   Word Base X-location coordinate.  (If picture file.)
  4733. 12   Word Base Y-location coordinate.  (If picture file.)
  4734. 14   Word Base timing value.  (If picture file.)
  4735.  
  4736.      For a vector frame the total size is the number of dots
  4737. times the  bytes per  dot, plus  the header.   For  a raster
  4738. frames with  a mask  the mask immediately follows the actual
  4739. frame data.   Thus  the frame  size is  the header, plus the
  4740. picture data size (calculated from the horizontal word value
  4741. and the  vertical height),  plus the  mask if  a mask exists
  4742. (same size as the picture data).
  4743.  
  4744.      Raster images  are normally  compressed when written to
  4745. disk. The program calculates the bytes that can be saved (if
  4746. any)  and   if  the   value  is  significant  it  recommends
  4747. compression.  You need not compress but the disk savings can
  4748. be substantial.   Decompression usually takes less time than
  4749. reading the  larger file  so it  is seldom  desirable not to
  4750. compress if the program recommends it.
  4751.  
  4752.      The compression format is a standard algorithm:  If the
  4753. top two bits (high-order or left-most) of the first byte are
  4754. both ON  (11xxxxxx) then  the other  six bits  indicate  the
  4755. number of bytes that the next byte is repeated.  In CGA mode
  4756. each byte represents four dots.
  4757.  
  4758.      The six bits that indicate the number of times that the
  4759. next byte  is repeated  is one  less than  the actual count.
  4760. The binary  value 11000000  would indicate  one byte of data
  4761. (use the  following data byte one time) while 11000001 would
  4762. indicate two bytes that are the same.
  4763.  
  4764.      If the top two bits are not both on then the byte is an
  4765. actual data  byte.   In this  case the  following byte would
  4766. then be checked to see if its top two bits are both on.
  4767.  
  4768.      The header  portion of each frame and the header for
  4769. the entire file are never compressed.
  4770.                               
  4771.  
  4772.  
  4773.                               
  4774.  
  4775.  
  4776.                Format for the Auxiliary File
  4777.  
  4778.      The auxiliary  file has  a 9  byte header  and then the
  4779. individual  auxboxes.     Each  auxbox  also  has  a  header
  4780. containing the  number of  the auxbox, it's type and length.
  4781. The last  auxbox is  always #32767 and contains the time and
  4782. date that  the auxfile was written out to disk.  This auxbox
  4783. must be included in the auxfile.
  4784.      The format of the header record is as follows:
  4785.  
  4786.  
  4787. Offset Type Meaning:
  4788.  
  4789.   0  Word Size in bytes of the auxfile.
  4790.   2  Word Size of this header record (always 9).
  4791.   4  Byte Not used in release 6.00.  Set to 0.
  4792.   5  Byte Major release number of program that wrote file.
  4793.   6  Byte A period (.).
  4794.   7  Byte Tenth's digit of minor release number.
  4795.   8  Byte Hundredth's digit of minor release number.
  4796.  
  4797.      The individual  auxboxes are  stored in  the  following
  4798. format:
  4799. Offset Type Meaning:
  4800.  
  4801.   0  Word Number of this auxbox (auxboxes are always stored
  4802.           in numerical order).
  4803.   2  Byte Type of this auxbox.  Either # or L in release
  4804.           6.00.
  4805.   3  Byte Size of this auxbox.  For numeric auxboxes (type
  4806.           #) this is always 2.  For alphanumeric auxboxes,
  4807.           it is the length of the data within the auxbox.
  4808.   4  .... The data follows the 4-byte header info for each
  4809.           auxbox.  For numeric auxboxes (type #), this is a
  4810.           signed binary word value.  For alphanumeric
  4811.           auxboxes it is the ASCII characters that are
  4812.           stored.
  4813.  
  4814.                               
  4815.  
  4816.  
  4817.                               
  4818.  
  4819.  
  4820.                   Format for the Hue File
  4821.  
  4822.      The hue  file (extension  .HUE) contains  a sequence of
  4823. hue color  definitions.  It is specifically for a particular
  4824. screen mode,  and it's  maximum size  is  dependent  on  the
  4825. number of  colors in  that screen mode.  The header contains
  4826. the "from" and "to" colors that the hue file contains.
  4827.      The format of the header record is as follows:
  4828.  
  4829.  
  4830. Offset Type Meaning:
  4831.  
  4832.   0  Word Size in bytes of the hue file.
  4833.   2  Word Size of this header record (always 16).
  4834.   4  Byte Not used (reserved).  Set to 0.
  4835.   5  Byte Major release number of program that wrote file.
  4836.   6  Byte A period (.).
  4837.   7  Byte Tenth's digit of minor release number.
  4838.   8  Byte Hundredth's digit of minor release number.
  4839.   9  Byte Screen mode this hue file is for.
  4840.  10  Byte Dot mask for above screen mode (maximum color
  4841.           number).
  4842.  11  Byte Palette.
  4843.  12  Byte Background color.
  4844.  13  Byte Hue low-color.
  4845.  14  Byte Hue high-color.
  4846.  15  Byte Reserved.  Set to 0.
  4847.  
  4848.      The individual hues are stored in the following format:
  4849.  
  4850. Offset Type Meaning:
  4851.  
  4852.   0  Byte Red component of color.
  4853.   1  Byte Green component.
  4854.   2  Byte Blue component.
  4855.  
  4856.      Each component  should be  between 0  and 63.   If  any
  4857. value is  greater than  63  that  component  value  will  be
  4858. ignored.
  4859.                               
  4860.  
  4861.  
  4862.                               
  4863.  
  4864.  
  4865.                     Space Considerations
  4866.  
  4867.      When using  RAM for  pictures, this  program uses space
  4868. for pictures  "as needed."   When a picture file is read all
  4869. previously  allocated   RAM  memory   is  returned  to  DOS.
  4870. Whatever amount of memory is needed for the new file is then
  4871. requested  from  DOS.    Whenever  space  is  requested  DOS
  4872. allocates an  additional 16 bytes for it's own use.  Also it
  4873. rounds the  request for  space up  to the  nearest  16  byte
  4874. boundary in  RAM.   The effect  is  simply  that  allocating
  4875. memory for  a lot  of frames  at once is more efficient than
  4876. allocating one  chunk at a time.  When you \APPEND frames to
  4877. a picture  file the  frames that  are to be appended will be
  4878. put in  as few requests to DOS for space as possible, so you
  4879. may save  a few  bytes by  appending all the frames you will
  4880. want at  once.  You also reduce disk access by not having to
  4881. access      the      file      as      frequently.      When
  4882. creating/inserting/deleting frames in the picture editor the
  4883. program will  return memory  to DOS  if possible, but if the
  4884. frame was  part of  a group  of frames  the memory  will  be
  4885. "lost" until  a new picture file is read in, or until all of
  4886. the frames in that allocation block are deleted.
  4887.      Since the  program can  use as  much memory  as DOS can
  4888. give it  (up to  640K), it  can take  a long  time to use up
  4889. memory in  a "loaded"  machine.   If you  start running into
  4890. errors whose explanation is that you have run out of memory,
  4891. try writing  out your  picture file  and reading  it back in
  4892. because any  changes to  the frame  count  may  have  wasted
  4893. space.
  4894.      If EMM  memory is available and it's use by the program
  4895. has not  been inhibited though the use of startup variables,
  4896. the memory  is always used in 16K (16384 byte) chunks called
  4897. pages.   Again it  is worthwhile to read as many frames at a
  4898. time as possible to conserve space.
  4899.      Disk-based animation  uses two  64K-byte areas  to read
  4900. and decompress the frames.
  4901.      You can  use the  startup variables  to set the maximum
  4902. font size  to the  minimum,3K bytes, but then you may not be
  4903. able to  read larger fonts into RAM.  (For many screen modes
  4904. 3K is not enough to read even a very small font.)
  4905.      When the  program initially  loads the  total amount of
  4906. RAM available  for pictures  is in  variable "A" (in K), and
  4907. the amount  of EMM  (if any)  is in  variable "O" (in 16,384
  4908. byte "pages").   You can get some information about how much
  4909. is still available at any time using \MEMORY.
  4910.      If you still can't get enough memory for the program to
  4911. run  properly,   there  are   several  third-party  software
  4912. packages such as QEMM from QUARTERDECK OFFICE SYSTEMS, Santa
  4913. Monica, CA, which will maximize RAM usage.
  4914.                               
  4915.  
  4916.  
  4917.                               
  4918.  
  4919.  
  4920.              Tips On Making Your Program Faster
  4921.  
  4922.      Text file  design can  have a significant effect on how
  4923. fast a  program runs--or  appears to  run.   There are  many
  4924. things to  consider.   In order to make the program run fast
  4925. at the  right times  you might  try reading disk files while
  4926. the user  is looking  at text  or non-moving  images on  the
  4927. screen.  If you set the text pause length to something other
  4928. than zero that pause occurs between each line (one dot high)
  4929. during display of text.
  4930.      \ON KEY  commands store  the actual address in the text
  4931. or macro  area that  the keypress  should bring  you to  and
  4932. therefore  execute   very  rapidly--except  for  the  "human
  4933. element" of course!
  4934.      Variables  can   be  evaluated  a  little  faster  than
  4935. auxboxes.   Single-digit auxbox  numbers (#1, #2, etc.) will
  4936. evaluate faster than named or high-number auxboxes.
  4937.      Use \+  commands often.   The keyboard and input device
  4938. check can  take a noticeable amount of time, especially if a
  4939. mouse, joystick,  or digitizer is active.  Turning the input
  4940. device  off   when  not   in  use   can  speed  you  program
  4941. significantly.   Some mouse  software (usually supplied with
  4942. the mouse) is notoriously slow.
  4943.      \SHOW is generally faster than \RUN.
  4944.      If raster  frame widths  are evenly divisible into word
  4945. boundaries they  can be  displayed especially  fast.   \SHOW
  4946. automatically places  such frames  on the  screen at maximum
  4947. speed.   Use \SPRITE  FAST=YES to speed \RUN.  Masked frames
  4948. are substantially slower than non-masked images.
  4949.      The speed of animation is largely dependent on the size
  4950. of the  pictures being shown.  To increase the speed be sure
  4951. to use  as small  an image as possible for the portion being
  4952. animated.
  4953.      For maximum  speed set  \CLOCK SPEED=  to 1,  which  is
  4954. about 18.2  times per  second.   This will  give very coarse
  4955. speed control but if that's okay, it will use less processor
  4956. time for the asynchronous clock interrupts because they will
  4957. occur less  often than at the default (584 times per second)
  4958. or some other speed.  The minimum is 18.2.
  4959.                               
  4960.  
  4961.  
  4962.                               
  4963.  
  4964.  
  4965.                   Uses of the "escape" key
  4966.  
  4967.      The escape key performs many related functions.  When a
  4968. text file is running in the editor version or at any time in
  4969. the runtime  version ESCAPE  allows you to end the execution
  4970. of the  text file.   In the runtime version this will return
  4971. you to  DOS.  In the editor version you are given the option
  4972. of single-stepping  the file  or you  can return to the text
  4973. editor.   The messages  displayed are non-destructive of the
  4974. screen.
  4975.      If  you  choose  to  restart  the  program  nothing  is
  4976. changed.  Variable "B", which holds the last keystroke, will
  4977. NOT be  changed and  no \ON  KEY jumps  or calls  will  have
  4978. occurred.   If you  choose "single-step"  in the  editor the
  4979. program will  pause for  input before each line is executed.
  4980. Whatever key  you press  is treated  as a regular keystroke.
  4981. To stop  "single-step" mode  press ESCAPE  and do not select
  4982. single-step as the option.
  4983.      In the  editor ESCAPE  lets you  get out  of text lines
  4984. unchanged or resets picture frames.
  4985.      Functions that require answering additional prompts let
  4986. you  use   ESCAPE  to   leave  the  option  unused.    While
  4987. transferring between  text and  draw mode ESCAPE substitutes
  4988. the default answer (usually "Y").
  4989.      In the  editor version  ESCAPE is  for stopping, giving
  4990. up, changing your mind, backing out, etc.
  4991.                               
  4992.  
  4993.  
  4994.                               
  4995.  
  4996.  
  4997.            F10-"Instant" commands & DOS functions
  4998.  
  4999.      In the  editor version function key 10 gives you access
  5000. to "instant"  commands.   Most commands such as \DRAW, \LINE
  5001. and so  on are  allowed.   Since only  one command  will  be
  5002. executed, commands  that send  you to different areas of the
  5003. program  are  not  valid  (\CALL,  \JUMP,  etc.).    Invalid
  5004. commands will  produce an error message.  Certain "powerful"
  5005. commands such as \DELETE are also inhibited.
  5006.      If you  press F10  twice in a row you will get a choice
  5007. of DOS  options including Rename a file, Copy a file, change
  5008. the current  drive or path (P), Erase a file, check Space on
  5009. disk drives,  take a  directory of  a drive,  or  execute  a
  5010. second copy  of COMMAND.COM.   Copy,  Directory,  Erase  and
  5011. Rename can  all be  stopped  before  execution  by  pressing
  5012. ESCAPE.  Directory can also be stopped during execution with
  5013. ESCAPE.
  5014.      When a  directory is  being displayed  pressing any key
  5015. will  freeze   the  display.    Pressing  another  key  will
  5016. continue. ?  and *  ("global" characters)  are valid in file
  5017. names here.  When all entries for the current directory have
  5018. been displayed the total number of files and the total bytes
  5019. used by those files are displayed.
  5020.      The Copy  function copies only one file at a time.  The
  5021. name  must   be  completely   specified   without   "global"
  5022. characters (* and ?).  (Asterisks (*) and question marks (?)
  5023. may be  used in  the  output  file  name.)  Drive  and  path
  5024. specifications may be included.
  5025.      You can  change both  the current  path and  drive with
  5026. 'P'.
  5027.      For the  COPY, DIRECTORY,  and RENAME  commands you can
  5028. specify ,H  (Hidden) ,R (Read Only) and ,S (System) options.
  5029. This will  set or  search for  these attributes.  To include
  5030. these options  separate them  from the  filename by  a comma
  5031. with no  intervening spaces.   ,H  ,R ,HRS  and ,RH  are all
  5032. valid.  For input files and directory searches the ,H option
  5033. will allow  the handling  of "hidden"  files, which normally
  5034. are not  displayable or  copyable.   If these attributes are
  5035. not specified  for output  files they  will not  be  applied
  5036. regardless of the input file's attributes.
  5037.                               
  5038.  
  5039.  
  5040.                               
  5041.  
  5042.  
  5043.                     Future Enhancements
  5044.  
  5045.  
  5046.      This product continues to evolve.  Your suggestions are
  5047. the most  important input  for future  enhancements.    Some
  5048. expected, or possible, future enhancements include:
  5049.  
  5050.      Decimal  numbers  are  certainly  an  important  future
  5051. enhancement.   The variables  and default  types of  numeric
  5052. auxboxes will  undoubtedly remain whole numbers between -32K
  5053. and +32K to maintain speed of operation.
  5054.  
  5055.      Greater  than   64K  pictures.     This   is  partially
  5056. implemented in the SCRNSAVE utility but then not used in the
  5057. main program in release 7.
  5058.  
  5059.      Three-dimensional vector  images,  and  object-oriented
  5060. images.
  5061.  
  5062.      Better mouse  cursors.   (Mask capabilities  for cursor
  5063. crosshairs.)
  5064.  
  5065.      What would  YOU like  to see in future versions of this
  5066. program?  Send a letter to the author! (S.A.S.E. preferred.)
  5067. All requests  will be  considered plus  you'll  get  on  the
  5068. company mailing  list, useful  for learning about additional
  5069. products that may be of interest to our users.
  5070.                               
  5071.  
  5072.  
  5073.                               
  5074.  
  5075.  
  5076.             Of Mice and Joysticks and Digitizers
  5077.  
  5078.  
  5079.      This program  will use  any of  these devices for input
  5080. while drawing  or for  \MOUSE.   Even if  an input device is
  5081. active the  eight cursor  direction keys around the 5 key on
  5082. the numeric  keypad can  be used (on PC and XT type machines
  5083. the 5  key can  also be  used.)   The numeric keys above the
  5084. QWERTY portion  of the  keyboard can also be used for faster
  5085. travel around  the screen.   If you have installed the mouse
  5086. software prior  to loading  this program it will utilize the
  5087. mouse automatically.
  5088.  
  5089.      Only one input device can be "active" at a time, except
  5090. that the  MOUSE and  JOYSTICK can  both  be  used  together,
  5091. although  this  can  require  significant  amounts  of  time
  5092. (overhead.)
  5093.  
  5094.      The mouse  uses Microsoft  compatible software calls to
  5095. accomplish it's  job.  This software should be loaded before
  5096. loading this  program.    It  can be loaded after processing
  5097. starts with  \EXECUTE but  shouldn't be.    See  your  mouse
  5098. documentation for  how to load your mouse "driver" software.
  5099. In the editor, you cannot initialize the mouse for the first
  5100. time if  changes exist  to any  files in RAM.  The following
  5101. example would  load the  mouse software named mouse.com from
  5102. drive "A":
  5103.  
  5104. \EXECUTE >A:MOUSE.COM
  5105.  
  5106.      The entire  name including  the  extension  has  to  be
  5107. specified.  Again, mouse software should be loaded first!
  5108.  
  5109.      The reason it is not a good idea to load mouse software
  5110. from within  this  program  is  because  mouse  software  is
  5111. usually "TSR"  (Terminate, Stay  Resident) software.    Such
  5112. software will (probably) load in the first available spot in
  5113. memory and  stay there.   Thus  it will probably divide your
  5114. computer memory  into two  chunks if loaded from within this
  5115. program (until you reboot).
  5116.                               
  5117.  
  5118.  
  5119.                               
  5120.  
  5121.  
  5122.                    Timing Considerations
  5123.  
  5124.  
  5125.      This program  utilizes the  system clock at an enhanced
  5126. rate for  most timed  activities.   This way the timings you
  5127. set will  be approximately  the same  on any  machine of any
  5128. speed.  Not all functions are timed.  Timing values of 0 and
  5129. -1 have  special meaning.    0  (zero)  means  "as  fast  as
  5130. possible" and  will run at different speeds on machines with
  5131. different speeds.   -1  generally means  "run  forever"  (or
  5132. until ESCAPE or "any key" is pressed).
  5133.  
  5134.      The values  you code for timing have different meanings
  5135. for different  commands.   Specifically those  that  are  in
  5136. effect during  user input are in seconds, and those that are
  5137. for animation and other graphics are in small fractions of a
  5138. second (approximately 584 "beats" per second).  In the SPEED
  5139. parameter of \ROUNDS, and in \OVERLAY, \SCROLL and \WAIT NOW
  5140. a value  of 584 would be about one second.  For \WAIT RETURN
  5141. # and  \WAIT LIMIT  # the  value coded  refers to seconds to
  5142. wait.  -1 is forever.
  5143.  
  5144.      
  5145.      Remember two things about creating animation for a wide
  5146. range of  machine speeds:  First, when setting up artwork on
  5147. a fast  machine remember  to consider  how it will look on a
  5148. slower machine.  Second, if creating on a slow machine don't
  5149. forget that  some things  will go TOO FAST on a fast machine
  5150. unless  you  limit  their  speed  with  the  various  timing
  5151. controls.   For example  if a \ROUNDS # SPEED 10 value looks
  5152. good on  a plain  PC find  out if  \ROUNDS #  SPEED 20 looks
  5153. exactly the  same.   If it  does then  on a fast machine the
  5154. action might  be twice  as fast!   This  is because  you are
  5155. displaying something  that can't be done (on a slow machine)
  5156. in  less   than  20   ticks  of  the  timer  (each  tick  is
  5157. approximately 1/584th of a second.)
  5158.      The speed control values you choose should be the one's
  5159. you actually  want.   0, which  is "as fast as possible" may
  5160. look fine on a PC, but on an AT or 80386 type machine it may
  5161. be too fast.
  5162.                               
  5163.  
  5164.  
  5165.                               
  5166.  
  5167.  
  5168.            Converting Images Between Screen Modes
  5169.  
  5170.      Conversion is  done by  reading a  picture of  one mode
  5171. into the program while in another mode.  You can specify the
  5172. mode to  become in  the P11FLAGS= SCREEN:#,#,# environmental
  5173. variable or  on the  command line  as [SCREEN:#,#,#].   When
  5174. moving "down"  in  number  of  colors,  you  can  chose  the
  5175. "clipped" or  "modulo" method.   Clipped  makes  all  colors
  5176. higher than  the maximum  color equal  to the maximum color,
  5177. while modulo  makes the highest+1=0, highest+2=1, and so on.
  5178. When converting, the new picture will, as the old one was in
  5179. it's screen  mode, be  on a  byte boundary on the left edge.
  5180. Therefore, when  going to  a higher  X-axis resolution, some
  5181. frames may not match up correctly with other frames and will
  5182. need to be manually adjusted afterwards.
  5183.      Only  frames  up  to  screen  size  will  be  converted
  5184. completely. Vector  frames will  not be converted, so colors
  5185. may be  unusual when  moving "down" from more colors to less
  5186. colors.
  5187.                               
  5188.  
  5189.  
  5190.                               
  5191.  
  5192.  
  5193.            Executing DOS from within the program
  5194.  
  5195.  
  5196.      This feature gives you a lot of power, but can cost you
  5197. dearly if misused.  It is best NEVER to use it when you have
  5198. changes in  RAM, especially  with earlier  (2.X) versions of
  5199. DOS.   You  can  do  anything  you  have  the  memory  (RAM)
  5200. available for.   You  can run  any program,  execute any DOS
  5201. command, format  disks, etc. etc. etc..  There is NO limit--
  5202. you can  even run a second copy of this program. (If it will
  5203. fit.)
  5204.  
  5205.      From DOS,  return to this program either by typing EXIT
  5206. at the  DOS prompt  or by having that word in a "BATCH" file
  5207. that DOS  executes.  You cannot execute a batch file without
  5208. loading the  command processor  so you  must  use  the  DOS>
  5209. option of  \EXECUTE for batch files.  You can also exit to a
  5210. second copy of the command processor by typing F10 (function
  5211. key 10) twice from the editor and then pressing "X" (EXIT).
  5212.  
  5213.      When processing  returns to  this program it will reset
  5214. the screen mode if necessary.  However if some other program
  5215. changed the  palette and/or  background, or  the  hues,  the
  5216. program will  not be  aware of this change.  If this command
  5217. fails variable "A" will normally contain -1 and variable "C"
  5218. may contain an error code.
  5219.  
  5220.      The clock,  which is  speeded up to about 584 ticks per
  5221. second (or  some other value you set with \CLOCK SPEED=), is
  5222. temporarily reset to normal for \EXECUTE.
  5223.  
  5224.      Any program  you run  that destroys  the current screen
  5225. memory  area   would  also   have  destroyed   your  screen.
  5226. Therefore you  may want to execute \CLEAR SCREEN immediately
  5227. upon return in those instances.
  5228.  
  5229.      Although you  can "theoretically"  execute any  program
  5230. with this command you should avoid certain types of programs
  5231. known as  "TSR" (Terminate,  Stay Resident)  programs.  When
  5232. loaded these  programs usually take the next available chunk
  5233. of memory  and remain there until you reboot.  The result is
  5234. that when you return to this program, and evermore until you
  5235. reboot, you  will have  your memory divided into two pieces.
  5236. Keyboard enhancement programs are generally TSR programs, as
  5237. are most mouse utilities.  They should be loaded BEFORE this
  5238. program.
  5239.      The DOS command FORMAT may act much like a TSR program,
  5240. dividing memory if executed.  FORMAT should not be used from
  5241. within this  program unless  you plan  to reboot afterwards.
  5242. Of course,  if your  only other  choice is to loose valuable
  5243. work, by  all means  format a  disk, save  your  files,  and
  5244. reboot!
  5245.                               
  5246.  
  5247.  
  5248.                               
  5249.  
  5250.  
  5251.                       About the Author
  5252.  
  5253.  
  5254.      Version 1.0  of Russell  Hoffman was released in August
  5255. of 1956.  He has  been involved  with  microcomputers  since
  5256. 1980.   In 1984  he started  writing P11  in response  to  a
  5257. client request  for an  interactive tutorial about the human
  5258. heart.
  5259.  
  5260.      Prior to  starting P11  he designed randomized computer
  5261. art programs  that create two-dimensional artwork on digital
  5262. plotters.   Each drawing  is different from every other.  He
  5263. claims they  are examples  of "imitation  intelligence."  By
  5264. using random  numbers to  vary the  sizes, colors, and other
  5265. aspects of  each drawing,  an infinite artistic variation is
  5266. possible.     The  software   concept  behind  this  art  is
  5267. applicable to engineering, physics, architecture, etc..  For
  5268. example, row-style  housing developments need not all be the
  5269. same.   Random variation-within-a-range  can  make  it  more
  5270. likely that a purchaser will find the exact house they want.
  5271.  
  5272.      About 20,000  random art drawings have been created and
  5273. given away  at computer trade shows throughout the Northeast
  5274. as of  this  writing.    Completing  this  project  required
  5275. writing an  interactive drawing  program (thus  it  was  the
  5276. precursor to  P11) for  the NEC  8201-A (a  lap-top computer
  5277. similar to  the TANDY  100) as well as many display routines
  5278. for driving  both the LCD display on the NEC and a PANASONIC
  5279. VP-6801 P30  six-pen plotter.  This led to other assignments
  5280. creating artwork  for various  devices  including  monitors,
  5281. printers, plotters,  lasers, oscilloscopes, LED-matrix, etc.
  5282. etc.
  5283.  
  5284.       In  his spare  time (something  he had  a lot  more of
  5285. before starting P11), Russell creates comedy radio routines,
  5286. which have been played on the Dr. Demento Show and elsewhere
  5287. (1979, 1986).   He  is an avid aviation buff and is learning
  5288. to fly  a Cessna  172 Skyhawk,  having soloed  in 1988.   He
  5289. likes ocean and lake swimming, reading, photography and loud
  5290. music. Also  quiet music,  dancing and  chocolate.  He likes
  5291. watching  Jai  Alai,  listening  to  baseball,  and  playing
  5292. softball.   It goes  without saying  that he  likes  playing
  5293. video games!
  5294.  
  5295.      Over 200  of  his  commentaries,  humorous  essays  and
  5296. letters have  been published  in and out (mostly out) of the
  5297. computer field.   He  lectures to  computer user  groups, as
  5298. many as 50 lectures/year.
  5299.      He has  several listings in various biographical titles
  5300. for his work, and is a member of the Boston Computer Society
  5301. and the  Connecticut Computer  Society.  He is also a member
  5302. of the  International Platform  Association, WINGS fun club,
  5303. Debbie Gibson fan club, and The Demento Society.
  5304.  
  5305.      Russ attended  the  Computer  Processing  Institute  in
  5306. Bridgeport, CT.  in 1980, Connecticut School Of Broadcasting
  5307. in Stratford,  CT in  1979, County School of Tractor Trailer
  5308. Driving in  Bridgeport in  1978, and  Penn State University,
  5309. State College,  PA in  1974.   (P.S.U. was  the only  one he
  5310. didn't graduate  from.) He  attended  (and  graduated  from)
  5311. Greens Farms  Academy in  Greens Farms,  CT, where  he first
  5312. made contact with a computer via a Teletype machine.
  5313.  
  5314.      He has  dabbled extensively  in electronics  but claims
  5315. that everything  he builds  either smokes, or shocks him, or
  5316. doesn't work.
  5317.