home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / TUR6_101.ZIP / VIDEO.DOC < prev   
Encoding:
Text File  |  1986-06-07  |  67.8 KB  |  1,924 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.       TURBO ENHANCEMENT TOOLKIT DOCUMENTATION
  15.  
  16.                 User-Supported Software
  17.  
  18.  
  19.                 Programmer's Utilities
  20.  
  21.                           by
  22.  
  23.                       Kevin Dahl
  24.  
  25.                      1711 4th St N
  26.              Wahpeton, North Dakota  58075
  27.  
  28.  
  29.                 Version 1.0 - June 1986
  30.  
  31.           (C) Copyright 1986 by Kevin W. Dahl
  32. ..page
  33. ..foot48Ri
  34.                      INTRODUCTION
  35.  
  36. This product is hereby released to the public domain
  37. for personal, non-commercial use only.  I will
  38. appreciate any feedback.
  39.  
  40.                         NOTICE:
  41.  
  42. A limited license is granted to all users of these
  43. routines, to make copies of these routines and
  44. distribute them to other users, on the following
  45. conditions:
  46.    1. The notices contained in lines 2 and 3 of each
  47.       routine listing is not to be altered or removed.
  48.    2. The routines are not to be distributed to others
  49.       in modified form.
  50.    3. No fee is to be charged for copying or
  51.       distributing these routines without an express
  52.       written agreement with the author, Kevin W. Dahl,
  53.       Copyright (C) 1986
  54.  
  55. (To keep these routines fairly standard, it is
  56. requested that any special modifications be kept for
  57. personal use only. - K.D.)
  58.  
  59. The number of global type and variable declarations
  60. have been kept to a minimum, so most of these routines
  61. do not require any global declarations. You will find
  62. the routines included here work primarily with the
  63. video display screen.
  64.  
  65. While these procedures and functions work only with the
  66. video display I hope to add more procedures and
  67. functions to this library that work with other areas of
  68. the PC.  Your comments and suggestions on how to
  69. improve and extend the usefulness of this library will
  70. be greatly appreciated.
  71.  
  72. I hope these routines make your programming efforts
  73. easier and more enjoyable.
  74.                                             Kevin
  75. ..page
  76. ..foot48Rii
  77.                    Table of Contents
  78.  
  79.     CHAPTER 1
  80.        System Requirements ......................  1-1
  81.        File Requirements ........................  1-1
  82.  
  83.     CHAPTER 2 - PROCEDURES AND FUNCTIONS
  84.  
  85.        BoarderColor .............................  2-1
  86.        ClrWin ...................................  2-2
  87.        ColorMsg .................................  2-3
  88.        FillCol ..................................  2-4
  89.        FillColAttrib ............................  2-5
  90.        FillRow ..................................  2-6
  91.        FillRowAttrib ............................  2-7
  92.        FrameWin .................................  2-8
  93.        GetCursorSize ............................ 2-10
  94.        GetScrn .................................. 2-11
  95.        GetVideoMode ............................. 2-13
  96.        GotoXYAbs ................................ 2-14
  97.        InitVideo ................................ 2-15
  98.        PutScrn .................................. 2-16
  99.        RvsVideo ................................. 2-18
  100.        ScrollDn ................................. 2-19
  101.        ScrollLeft ............................... 2-21
  102.        ScrollUp ................................. 2-23
  103.        ScrollRight .............................. 2-25
  104.        SetCursorSize ............................ 2-27
  105.        WaitMsg .................................. 2-29
  106.        WhereXAbs ................................ 2-30
  107.        WhereYAbs ................................ 2-31
  108.        WriteSt .................................. 2-32
  109.        WriteStLn ................................ 2-33
  110.  
  111.     APPENDIX A
  112.        Summary of Procedures and Functions ......  A-1
  113.  
  114.     APPENDIX B
  115.        Keyboard codes ...........................  B-1
  116. ..page
  117. ..foot48Riii
  118.     APPENDIX C
  119.        Keyboard element codes ...................  C-1
  120.  
  121.     APPENDIX D
  122.        Keyboard return codes ....................  D-1
  123.  
  124.     APPENDIX E
  125.        Keyboard scan codes ......................  E-1
  126.  
  127.     APPENDIX F
  128.        User-Supported Concept ...................  F-1
  129.  
  130.     APPENDIX G
  131.        Future Enhancements & Update Policy ......  G-1
  132. ..page
  133. ..pgno01
  134. ..foot48R1-##
  135.                   SYSTEM REQUIREMENT:
  136.  
  137.     IBM-PC or true compatible
  138.     64k RAM
  139.     1 disk drive
  140.     DOS 2.0 or greater
  141.     Turbo Pascal 3.0 or greater
  142.  
  143.                    FILE REQUIREMENTS
  144.  
  145.     Since these include routines are written in
  146.     assembly language the compiled modules are included
  147.     on the disk.
  148.  
  149.     Only the routines you use in your programs must be
  150.     on the disk during compliation of your program.  To
  151.     determine which external routine must be on your
  152.     disk refer to the Filename listed in the
  153.     documentation on the procedure you are using.  For
  154.     example, if you were using the procedure RvsVideo,
  155.     then the file V15.ENH must be on your disk and you
  156.     would also need the procedure declaration:
  157.  
  158.           Procedure RvsVideo;       External 'V15.ENH'
  159.  
  160.     at the beginning of your source code in your
  161.     program.
  162. ..page
  163. ..pgno01
  164. ..head03RBOARDERCOLOR
  165. ..head04RProcedure
  166. ..head05R_______________________________________________________
  167. ..foot48R2-##
  168. Purpose  :  Sets the color for the boarder screen.
  169.  
  170. Versions :  2.00   3.00    3.01B
  171.              **     **      **
  172.  
  173. Filename :  V1.ENH
  174.  
  175. Format   :  BoarderColor(Color);
  176.  
  177. Remarks  :  Color      is an integer in the range 0 to
  178.                        15. It is the color for the
  179.                        border screen.
  180.  
  181.             With a Color/Graphics Adapter the following
  182.             colors are allowed colors are allowed for
  183.             the boarder screen.
  184.  
  185.             0  Black         8  Gray
  186.             1  Blue          9  Light Gray
  187.             2  Green        10  Light Green
  188.             3  Cyan         11  Light Cyan
  189.             4  Red          12  Light Red
  190.             5  Magenta      13  Light Magenta
  191.             6  Brown        14  Yellow
  192.             7  White        15  High-intensity White
  193.  
  194.  
  195. Example  :  BoarderColor(1);
  196.  
  197.             This example will display a blue boarder on
  198.             a color monitor.
  199. ..page
  200. ..head03RCLRWIN
  201. ..head04RProcedure
  202. ..head05R_______________________________________________________
  203. Purpose  :  Clears the current window area.
  204.  
  205. Versions :  2.00   3.00    3.01B
  206.                     **      **
  207.  
  208. Filename :  V2.ENH
  209.  
  210. Format   :  ClrWin;
  211.  
  212. Remarks  :  This procedure will blank the window area
  213.             that is currently defined by turbo.  ClrWin
  214.             will use the text color and the text back
  215.             ground color, currently defined by turbo, as
  216.             the color to use for the window area. Also
  217.             ClrWin do not affect the position of the
  218.             cursor.
  219.  
  220. Example  :  Window(5,5,40,20);
  221.             TextColor(Black);
  222.             TextBackGround(Blue);
  223.             ClrWin;
  224.  
  225.             This example will clear the window area to a
  226.             blue background color.
  227. ..page
  228. ..head03RCOLORMSG
  229. ..head04RProcedure
  230. Purpose  :  Display a message to the screen using the
  231.             color attribute specified.
  232.  
  233. Versions :  2.00   3.00    3.01B
  234.              **     **      **
  235.  
  236. Filename :  V3.ENH
  237.  
  238. Format   :  ColorMsg(X,Y,Color,Message)
  239.  
  240. Remarks  :  X          is an integer in the range 1 to
  241.                        40 or 1 to 80, depending upon the
  242.                        screen width.  It gives the
  243.                        absolute column coordinate on the
  244.                        screen.
  245.  
  246.             Y          is an integer in the range 1 to
  247.                        25.  It gives the absolute row
  248.                        coordinate on the screen.
  249.  
  250.             Color      is an integer in the range 0 to
  251.                        255.  It gives the attribute
  252.                        color to be used for displaying
  253.                        the message.
  254.  
  255.             Message    is any string expression.
  256.  
  257.             ColorMsg is NOT sensitive to Turbo's
  258.             currently defined window and will wrap
  259.             around to column one on the next line of the
  260.             screen when necessary.
  261.  
  262.             ColorMsg will not scroll the screen if the
  263.             data to be displayed is to extend beyond the
  264.             last row of the screen.
  265.  
  266. Special Note :  ColorMsg requires a global type
  267.                 definition for a string of 255
  268.                 characters.
  269.  
  270.                 Str255 = String[255];
  271. ..page
  272. ..head03RFILLCOL
  273. ..head04RProcedure
  274. Purpose  :  Display a column of the character passed to
  275.             the display screen.
  276.  
  277. Versions :  2.00   3.00    3.01B
  278.              **     **      **
  279.  
  280. Filename :  V4.ENH
  281.  
  282. Format   :  FillCol(X,Y,Num,Ch);
  283.  
  284. Remarks  :  X          is an integer in the range 1 to
  285.                        40 or 1 to 80, depending upon the
  286.                        screen width.  It gives the
  287.                        absolute column coordinate on the
  288.                        screen.
  289.  
  290.             Y          is an integer in the range 1 to
  291.                        25.  It gives the absolute row
  292.                        coordinate on the screen.
  293.  
  294.             Num        is an integer in the range 1 to
  295.                        25 for the number of rows to
  296.                        display the character in.
  297.  
  298.             Ch         is the character to be displayed
  299.                        Num times in the column on the
  300.                        screen.
  301.  
  302.             FillCol always acts on the entire screen and
  303.             is NOT sensitive to Turbo's currently
  304.             defined window.
  305.  
  306.  
  307. Example  :  FillCol(1,1,20,'-');
  308.  
  309.             In this example 20 minus sign characters
  310.             will be displayed in column 1 starting on
  311.             row one of the screen.
  312. ..page
  313. ..head03RFILLCOLATTRIB
  314. ..head04RProcedure
  315. Purpose  :  Display a column of attribute bytes to the
  316.             display screen.
  317.  
  318. Versions :  2.00   3.00    3.01B
  319.              **     **      **
  320.  
  321. Filename :  V5.ENH
  322.  
  323. Format   :  FillColAttrib(X,Y,Num,Color);
  324.  
  325. Remarks  :  X          is an integer in the range 1 to
  326.                        40 or 1 to 80, depending upon the
  327.                        screen width.  It gives the
  328.                        absolute column coordinate on the
  329.                        screen.
  330.  
  331.             Y          is an integer in the range 1 to
  332.                        25.  It gives the absolute row
  333.                        coordinate on the screen.
  334.  
  335.             Num        is an integer in the range 1 to
  336.                        25 for the number of rows to
  337.                        display the attribute byte on.
  338.  
  339.             Color      is the color to be displayed Num
  340.                        times in the column on the
  341.                        screen.
  342.  
  343.             FillColAttrib always acts on the entire
  344.             screen and is NOT sensitive to Turbo's
  345.             currently defined window.
  346.  
  347.  
  348. Example  :  FillColAttrib(1,1,20,48);
  349.  
  350.             In this example the attribute color 48 will
  351.             be displayed 20 times in column 1 starting
  352.             on row one of the screen.
  353. ..page
  354. ..head03RFILLROW
  355. ..head04RProcedure
  356. Purpose  :  Write one or more copies of a single
  357.             character to the screen starting at the X,Y
  358.             coordinates passed.
  359.  
  360. Versions :  2.00   3.00    3.01B
  361.              **     **      **
  362.  
  363. Filename :  V6.ENH
  364.  
  365. Format   :  FillRow(X,Y,Num,Ch);
  366.  
  367. Remarks  :  X          is an integer in the range 1 to
  368.                        40 or 1 to 80, depending upon the
  369.                        screen width.  It gives the
  370.                        absolute column coordinate on the
  371.                        screen.
  372.  
  373.             Y          is an integer in the range 1 to
  374.                        25.  It gives the absolute row
  375.                        coordinate on the screen.
  376.  
  377.             Num        is the number of times to display
  378.                        the character to the screen.
  379.  
  380.             Ch         is the character to be displayed
  381.                        Num times on the screen.
  382.  
  383.             FillRow always acts on the entire screen and
  384.             is NOT sensitive to Turbo's currently
  385.             defined window.
  386.  
  387. Example  :  FillRow(1,1,80,'-');
  388.  
  389.             In this example 80 minus sign characters
  390.             will be displayed starting on row one,
  391.             column one of the screen.
  392. ..page
  393. ..head03RFILLROWATTRIB
  394. ..head04RProcedure
  395. Purpose  :  Write one or more copies of the color
  396.             attribute byte to the screen starting at the
  397.             X,Y coordinates passed.
  398.  
  399. Versions :  2.00   3.00    3.01B
  400.              **     **      **
  401.  
  402. Filename :  V7.ENH
  403.  
  404. Format   :  FillRowAttrib(X,Y,Num,Color);
  405.  
  406. Remarks  :  X          is an integer in the range 1 to
  407.                        40 or 1 to 80, depending upon the
  408.                        screen width.  It gives the
  409.                        absolute column coordinate on the
  410.                        screen.
  411.  
  412.             Y          is an integer in the range 1 to
  413.                        25.  It gives the absolute row
  414.                        coordinate on the screen.
  415.  
  416.             Num        is the number of times to display
  417.                        the character to the screen.
  418.  
  419.             Color      is the color to be displayed Num
  420.                        times on the screen.
  421.  
  422.             FillRowAttrib always acts on the entire
  423.             screen and is NOT sensitive to Turbo's
  424.             currently defined window.
  425.  
  426.  
  427. Example  :  FillRowAttrib(1,1,80,48);
  428.  
  429.             In this example, starting at row one, column
  430.             one of the screen the color attribute byte
  431.             48 will be used.
  432. ..page
  433. ..head03RFRAMEWIN
  434. ..head04RProcedure
  435. Purpose  :  Frames the window currently defined by Turbo
  436.             with the characters passed.
  437.  
  438. Versions :  2.00   3.00    3.01B
  439.                     **      **
  440.  
  441. Filename :  V8.ENH
  442.  
  443. Format   :  FrameWin(UL,UR,LL,LR,Hor,Ver);
  444.  
  445. Remarks  :  UL         is the character in the upper
  446.                        left corner of the window.
  447.  
  448.             UR         is the character in the upper
  449.                        right corner of the window.
  450.  
  451.             LL         is the character in the lower
  452.                        left corner of the window.
  453.  
  454.             LR         is the character in the lower
  455.                        right corner of the window.
  456.  
  457.             Hor        is the horizontal character for
  458.                        the top and bottom lines of the
  459.                        window.
  460.  
  461.             Ver        is the vertical character for the
  462.                        left and right vertical lines of
  463.                        the window.
  464.  
  465.             FrameWin will outline the window that is
  466.             currently defined by Turbo with the
  467.             characters passed.
  468.  
  469.             Once the window frame has been displayed the
  470.             active window will be adjusted to fit within
  471.             the framed area.
  472. ..page
  473. ..head05R
  474.             For example if the current window is defined
  475.             as 1,1,80,25 then after FrameWin the current
  476.             window will be 2,2,79,24.
  477.  
  478. Example  :  FrameWin('-','-','-','-','-','|');
  479.  
  480.             The above statement will use minus signs for
  481.             the top and bottom lines and the single bar
  482.             for the two sides.
  483.  
  484.  
  485.             FrameWin('L','R','l','r','H','V');
  486.  
  487.             The frame this statement will draw is shown
  488.             below:
  489.  
  490.  
  491.             LHHHHHHHHHHHHHHHHHHHHHHHHHHR
  492.             V                          V
  493.             V                          V
  494.             V                          V
  495.             V                          V
  496.             V                          V
  497.             V                          V
  498.             V                          V
  499.             lHHHHHHHHHHHHHHHHHHHHHHHHHHr
  500. ..page
  501. ..head03RGETCURSORSIZE
  502. ..head04RFunction
  503. ..head05R_______________________________________________________
  504. Purpose  :  Returns the starting and ending scan lines
  505.             for the current cursor.
  506.  
  507. Versions :  2.00   3.00    3.01B
  508.              **     **      **
  509.  
  510. Filename :  V9.ENH
  511.  
  512. Format   :  GetCursorSize;
  513.  
  514. Remarks  :  Returns an integer with:
  515.  
  516.                Hi byte -- starting scan line
  517.                Lo byte -- ending scan line
  518.  
  519. Example  :  Write(Hi(GetCursorSize),Lo(GetCursorSize));
  520.  
  521.             This example will print on one line the
  522.             current starting scan line and ending scan
  523.             line respectively.
  524.  
  525.             i := GetCursorSize;
  526.  
  527.             In this example i will receive the starting
  528.             and ending scan line of the cursor.  The hi
  529.             byte will be the starting scan line of the
  530.             cursor and the lo byte will be the ending
  531.             scan line of the cursor.
  532. ..page
  533. ..head03RGETSCRN
  534. ..head04RProcedure
  535. Purpose  :  Read the character and attribute bytes from
  536.             the screen into a character array.
  537.  
  538. Versions :  2.00   3.00    3.01B
  539.              **     **      **
  540.  
  541. Filename :  V10.ENH
  542.  
  543. Format   :  GetScrn(X,Y,NumChars,ChArray);
  544.  
  545. Remarks  :  X          is an integer in the range 1 to
  546.                        40 or 1 to 80, depending upon the
  547.                        screen width.  It gives the
  548.                        absolute column coordinate on the
  549.                        screen.
  550.  
  551.             Y          is an integer in the range 1 to
  552.                        25.  It gives the absolute row
  553.                        coordinate on the screen.
  554.  
  555.             NumChars   is an integer in the range 1 to
  556.                        1000 or 1 to 2000, depending upon
  557.                        the screen width.  It gives the
  558.                        number of words to get from the
  559.                        display screen. Its value is the
  560.                        total number of bytes to get
  561.                        divided by 2.
  562.  
  563.             ChArray    is any character or string array
  564.                        that will receive the character
  565.                        and attribute bytes from the
  566.                        screen.  The minimum size of
  567.                        ChArray is NumChars*2.
  568.  
  569.             This procedure works much like Turbo's move
  570.             statement but in addition checks for the
  571.             vertical retrace of the video adapter to
  572.             eliminate the snow effect that the move
  573.             statement would produce on a Color/Graphics
  574.             Adapter.
  575. ..page
  576. ..head05R
  577.             GetScrn is the inverse of the PutScrn
  578.             procedure.
  579.  
  580.  
  581. Example  :  GetScrn(1,1,80,ChArray[1]);
  582.  
  583.             In this example the size of ChArray is at
  584.             least 160 bytes long.  A copy of row one on
  585.             the screen will be placed in ChArray.
  586.             ChArray will contain both the attribute and
  587.             character bytes from the screen.
  588.  
  589.             In the next example the size of ChArray must
  590.             be at least 320 bytes in size, and the first
  591.             two rows of the screen will be placed into
  592.             ChArray.
  593.  
  594.             GetScrn(1,1,160,ChArray);
  595.  
  596.             Notice that in the first example the address
  597.             of ChArray[1] was passed as the parameter
  598.             and in the second example ChArray was not
  599.             subscripted.  Both examples will work
  600.             because the ChArray parameter is defined as
  601.             an untyped variable.
  602. ..page
  603. ..head03RGETVIDEOMODE
  604. ..head04RFunction
  605. ..head05R_______________________________________________________
  606. Purpose  :  Returns the current video mode.
  607.  
  608. Versions :  2.00   3.00    3.01B
  609.              **     **      **
  610.  
  611. Filename :  V11.ENH
  612.  
  613. Format   :  GetVideoMode;
  614.  
  615. Remarks  :  Returns an integer giving the current video
  616.             mode the system is in.  Use the guide on
  617.             video modes under INITVIDEO.
  618.  
  619. Example  :  Writeln(GetVideoMode);
  620.  
  621.             This example will print the current video
  622.             mode the system is in.
  623. ..page
  624. ..head03RGOTOXYABS
  625. ..head04RProcedure
  626. Purpose  :  Positions the cursor at the absolute X,Y
  627.             coordinates on the screen.
  628.  
  629. Versions :  2.00   3.00    3.01B
  630.              **     **      **
  631.  
  632. Filename :  V12.ENH
  633.  
  634. Format   :  GotoxyAbs(X,Y);
  635.  
  636. Remarks  :  X          is an integer in the range 1 to
  637.                        40 or 1 to 80, depending upon the
  638.                        screen width.  It gives the
  639.                        absolute column coordinate on the
  640.                        screen.
  641.  
  642.             Y          is an integer in the range 1 to
  643.                        25.  It gives the absolute row
  644.                        coordinate on the screen.
  645.  
  646.             This procedure will place the cursor at the
  647.             X,Y coordinates of the actual screen.
  648.             GotoxyAbs is NOT sensitive to the window
  649.             that is currently defined by turbo.
  650. ..page
  651. ..head03RINITVIDEO
  652. ..head04RProcedure
  653. Purpose  :  Initialize the video mode.
  654.  
  655. Versions :  2.00   3.00    3.01B
  656.              **     **      **
  657.  
  658. Filename :  V13.ENH
  659.  
  660. Format   :  InitVideo(Mode);
  661.  
  662. Remarks  :  To set the screen to the appropriate video
  663.             mode use the following table as a guide.
  664.  
  665.          ---------------------------------------------
  666.          |  Mode |         Type           | Adapter  |
  667.          |    0  |  Text - 40 x 25 B/W    |   CGA    |
  668.          |    1  |  Text - 40 x 25 COLOR  |   CGA    |
  669.          |    2  |  Text - 80 x 25 B/W    |   CGA    |
  670.          |    3  |  Text - 80 x 25 COLOR  |   CGA    |
  671.          |    4  |  Graphics - 320 x 200  |   CGA    |
  672.          |    5  |  Graphics - 320 x 200  |   CGA    |
  673.          |    6  |  Graphics - 640 x 200  |   CGA    |
  674.          |    7  |  Text - 80 x 25        |   MA     |
  675.          ---------------------------------------------
  676.  
  677. Example  :  InitVideo(3);
  678.  
  679.             This example will initialize the video mode
  680.             to 80 x 25 color text.
  681. ..page
  682. ..head03RPUTSCRN
  683. ..head04RProcedure
  684. ..head05R_______________________________________________________
  685. Purpose  :  Display character and attribute data to the
  686.             screen.
  687.  
  688. Versions :  2.00   3.00    3.01B
  689.              **     **      **
  690.  
  691. Filename :  V14.ENH
  692.  
  693. Format   :  PutScrn(X,Y,NumChars,ChArray);
  694.  
  695. Remarks  :  X          is an integer in the range 1 to
  696.                        40 or 1 to 80, depending upon the
  697.                        screen width.  It gives the
  698.                        absolute column coordinate on the
  699.                        screen.
  700.  
  701.             Y          is an integer in the range 1 to
  702.                        25.  It gives the absolute row
  703.                        coordinate on the screen.
  704.  
  705.             NumChars   is the number of words to
  706.                        display.  Its value is the number
  707.                        of words to display.
  708.  
  709.             ChArray    is the character array that
  710.                        contains the bytes to display on
  711.                        the screen.  The minimum size of
  712.                        ChArray is NumChars*2.
  713.  
  714.             This procedure works much like Turbo's move
  715.             statement but in addition checks for the
  716.             vertical retrace of the video adapter to
  717.             eliminate the snow effect that the move
  718.             statement would produce on a Color/Graphics
  719.             Adapter.
  720.  
  721.             PutScrn is the inverse of the GetScrn
  722.             procedure.
  723. ..page
  724. ..head05R
  725. Example  :  PutScrn(1,1,80,ChArray[1]);
  726.  
  727.             In this example the size of ChArray is at
  728.             least 160 bytes long.  The first 160 bytes
  729.             of ChArray will be placed on the screen
  730.             starting at row one column one of the
  731.             screen.  Both the attribute and character
  732.             bytes will be written to the screen.
  733.  
  734.             In the next example the size of ChArray must
  735.             be at least 320 bytes in size, and will
  736.             write 320 bytes to the first two rows of the
  737.             screen.
  738.  
  739.             PutScrn(1,1,160,ChArray);
  740.  
  741.  
  742.             Notice that in the first example the address
  743.             of ChArray[1] was passed as the parameter
  744.             and in the second example ChArray was not
  745.             subscripted.  Both examples will work
  746.             because the ChArray parameter is defined as
  747.             an untyped variable.
  748. ..page
  749. ..head03RRVSVIDEO
  750. ..head04RProcedure
  751. ..head05R_______________________________________________________
  752. Purpose  :  Reverses current video attribute bytes.
  753.  
  754. Versions :  2.00   3.00    3.01B
  755.                     **      **
  756.  
  757. Filename :  V15.ENH
  758.  
  759. Format   :  RvsVideo;
  760.  
  761.  
  762. Remarks  :  RvsVideo exchanges the foreground and
  763.             background attribute bytes defined by Turbo.
  764.  
  765. Example  :  Foreground color --> white.
  766.             Background color --> black.
  767.  
  768.             If the above is true for the foreground and
  769.             background colors then after calling
  770.             RvsVideo the foreground and background
  771.             colors will be as follows:
  772.  
  773.             Foreground color --> black.
  774.             background color --> white.
  775. ..page
  776. ..head03RSCROLLDN
  777. ..head04RProcedure
  778. Purpose  :  Scroll the window down N lines filling in
  779.             blank lines at the top of the window with
  780.             the color passed.
  781.  
  782. Versions :  2.00   3.00    3.01B
  783.              **     **      **
  784.  
  785. Filename :  V16.ENH
  786.  
  787. Format   :  ScrollDn(Lines,Color,X1,Y1,X2,Y2);
  788.  
  789. Remarks  :  Lines      is an integer in the range 0 to
  790.                        25.  If gives the number of lines
  791.                        the window is to be scrolled.
  792.  
  793.             Color      is an integer in the range 0 to
  794.                        255.  It gives the attribute
  795.                        color to be used when filling in
  796.                        the blank lines at the top of the
  797.                        window.
  798.  
  799.             X1         is an integer in the range 1 to
  800.                        40 or 1 to 80, depending upon the
  801.                        screen width.  It gives the left
  802.                        column of the window on the
  803.                        screen.
  804.  
  805.             Y1         is an integer in the range 1 to
  806.                        25.  It gives the top row of the
  807.                        window on the screen.
  808.  
  809.             X2         is an integer in the range 1 to
  810.                        40 or 1 to 80, depending upon the
  811.                        screen width.  It gives the right
  812.                        column of the window on the
  813.                        screen.
  814. ..page
  815. ..head05R
  816.             Y2         is an integer in the range 1 to
  817.                        25.  It gives the bottom row of
  818.                        the window on the screen.
  819.  
  820. Example  :  ScrollDn(1,48,4,5,15,20);
  821.  
  822.             In this example one line will be scrolled
  823.             down in the window with the top line (row 4)
  824.             being filled in with a light blue blank
  825.             line.
  826.  
  827.             ScrollDn(0,7,4,5,15,20);
  828.  
  829.             In this example the entire window will be
  830.             cleared.
  831. ..page
  832. ..head03RSCROLLLEFT
  833. ..head04RProcedure
  834. ..head05R_______________________________________________________
  835. Purpose  :  Scroll the window to the left N columns
  836.             filling in blank columns at the right of the
  837.             window with the color passed.
  838.  
  839. Versions :  2.00   3.00    3.01B
  840.              **     **      **
  841.  
  842. Filename :  V17.ENH
  843.  
  844. Format   :  ScrollLeft(Cols,Color,X1,Y1,X2,Y2);
  845.  
  846. Remarks  :  Lines      is an integer in the range 0 to
  847.                        25.  If gives the number of lines
  848.                        the window is to be scrolled.
  849.  
  850.             Color      is an integer in the range 0 to
  851.                        255.  It gives the attribute
  852.                        color to be used when filling in
  853.                        the blank lines at the top of the
  854.                        window.
  855.  
  856.             X1         is an integer in the range 1 to
  857.                        40 or 1 to 80, depending upon the
  858.                        screen width.  It gives the left
  859.                        column of the window on the
  860.                        screen.
  861.  
  862.             Y1         is an integer in the range 1 to
  863.                        25.  It gives the top row of the
  864.                        window on the screen.
  865.  
  866.             X2         is an integer in the range 1 to
  867.                        40 or 1 to 80, depending upon the
  868.                        screen width.  It gives the right
  869.                        column of the window on the
  870.                        screen.
  871. ..page
  872. ..head05R
  873.             Y2         is an integer in the range 1 to
  874.                        25.  It gives the bottom row of
  875.                        the window on the screen.
  876.  
  877.  
  878. Example  :  ScrollLeft(1,48,4,5,15,20);
  879.  
  880.             In this example one column will be scrolled
  881.             left in the window with the right column
  882.             (col 15) being filled in with a light blue
  883.             blank column.
  884.  
  885.             ScrollLeft(0,7,4,5,15,20);
  886.  
  887.             In this example the entire window will be
  888.             cleared.
  889. ..page
  890. ..head03RSCROLLUP
  891. ..head04RProcedure
  892. ..head05R_______________________________________________________
  893. Purpose  :  Scroll the window up N lines filling in
  894.             blank lines at the bottom of the window with
  895.             the color passed.
  896.  
  897. Versions :  2.00   3.00    3.01B
  898.              **     **      **
  899.  
  900. Filename :  V18.ENH
  901.  
  902. Format   :  ScrollUp(Lines,Color,X1,Y1,X2,Y2);
  903.  
  904. Remarks  :  Lines      is an integer in the range 0 to
  905.                        25.  If gives the number of lines
  906.                        the window is to be scrolled.
  907.  
  908.             Color      is an integer in the range 0 to
  909.                        255.  It gives the attribute
  910.                        color to be used when filling in
  911.                        the blank lines at the top of the
  912.                        window.
  913.  
  914.             X1         is an integer in the range 1 to
  915.                        40 or 1 to 80, depending upon the
  916.                        screen width.  It gives the left
  917.                        column of the window on the
  918.                        screen.
  919.  
  920.             Y1         is an integer in the range 1 to
  921.                        25.  It gives the top row of the
  922.                        window on the screen.
  923.  
  924.             X2         is an integer in the range 1 to
  925.                        40 or 1 to 80, depending upon the
  926.                        screen width.  It gives the right
  927.                        column of the window on the
  928.                        screen.
  929. ..page
  930. ..head05R
  931.             Y2         is an integer in the range 1 to
  932.                        25.  It gives the bottom row of
  933.                        the window on the screen.
  934.  
  935.  
  936. Example  :  ScrollUp(1,48,4,5,15,20);
  937.  
  938.             In this example one line will be scrolled up
  939.             in the window with the bottom line (row 20)
  940.             being filled in with a light blue blank
  941.             line.
  942.  
  943.             ScrollUp(0,7,4,5,15,20);
  944.  
  945.             In this example the entire window will be
  946.             cleared.
  947. ..page
  948. ..head03RSCROLLRIGHT
  949. ..head04RProcedure
  950. ..head05R_______________________________________________________
  951. Purpose  :  Scroll the window right N columns filling in
  952.             blank columns at the left of the window with
  953.             the color passed.
  954.  
  955. Versions :  2.00   3.00    3.01B
  956.              **     **      **
  957.  
  958. Filename :  V19.ENH
  959.  
  960. Format   :  ScrollRight(Cols,Color,X1,Y1,X2,Y2);
  961.  
  962. Remarks  :  Lines      is an integer in the range 0 to
  963.                        25.  If gives the number of lines
  964.                        the window is to be scrolled.
  965.  
  966.             Color      is an integer in the range 0 to
  967.                        255.  It gives the attribute
  968.                        color to be used when filling in
  969.                        the blank lines at the top of the
  970.                        window.
  971.  
  972.             X1         is an integer in the range 1 to
  973.                        40 or 1 to 80, depending upon the
  974.                        screen width.  It gives the left
  975.                        column of the window on the
  976.                        screen.
  977.  
  978.             Y1         is an integer in the range 1 to
  979.                        25.  It gives the top row of the
  980.                        window on the screen.
  981.  
  982.             X2         is an integer in the range 1 to
  983.                        40 or 1 to 80, depending upon the
  984.                        screen width.  It gives the right
  985.                        column of the window on the
  986.                        screen.
  987. ..page
  988. ..head05R
  989.             Y2         is an integer in the range 1 to
  990.                        25.  It gives the bottom row of
  991.                        the window on the screen.
  992.  
  993.  
  994. Example  :  ScrollRight(1,48,4,5,15,20);
  995.  
  996.             In this example one column will be scrolled
  997.             to the right in the window with the left
  998.             column (col 4) being filled in with a light
  999.             blue blank column.
  1000.  
  1001.             ScrollRight(0,7,4,5,15,20);
  1002.  
  1003.             In this example the entire window will be
  1004.             cleared.
  1005. ..page
  1006. ..head03RSETCURSORSIZE
  1007. ..head04RProcedure
  1008. ..head05R_______________________________________________________
  1009. Purpose  :  Set the size of the cursor.
  1010.  
  1011. Versions :  2.00   3.00    3.01B
  1012.              **     **      **
  1013.  
  1014. Filename :  V20.ENH
  1015.  
  1016. Format   :  SetCursorSize(StartLine,EndLine);
  1017.  
  1018. Remarks  :  StartLine  is an integer giving the starting
  1019.                        scan line to be used for the
  1020.                        cursor.
  1021.  
  1022.             EndLine    is an integer giving the ending
  1023.                        scan line to be used for the
  1024.                        cursor.
  1025.  
  1026.             StartLine and EndLine must be of Data Type
  1027.             Byte or Integer.
  1028.  
  1029.             The scan lines are numbered from 0 at the
  1030.             top (StartLine) to N at the bottom (EndLine)
  1031.             where N applies to the following video
  1032.             adapter.
  1033.  
  1034.                 7 - Color/Graphics Adapter
  1035.                14 - Monochrome Adapter
  1036.  
  1037. Example  :  The following examples are for the
  1038.             Color/Graphics Adapter:
  1039.  
  1040.             SetCursorSize(32,32);
  1041.  
  1042.             Makes the cursor invisible on the screen.
  1043.  
  1044.             SetCursorSize(0,7);
  1045.  
  1046.             Enlarges the cursor, covering the entire
  1047.             character cell.
  1048. ..page
  1049. ..head03RWAITMSG
  1050. ..head04RProcedure
  1051. Purpose  :  Display a message on the screen and wait
  1052.             until the specified key is pressed to
  1053.             continue.
  1054.  
  1055. Versions :  2.00   3.00    3.01B
  1056.              **     **      **
  1057.  
  1058. Filename :  V21.ENH
  1059.  
  1060. Format   :  WaitMsg(X,Y,Msg,TCSet,TC);
  1061.  
  1062. Remarks  :  X          is an integer in the range 1 to
  1063.                        40 or 1 to 80, depending upon the
  1064.                        screen width.  It gives the
  1065.                        absolute column coordinate on the
  1066.                        screen.
  1067.  
  1068.             Y          is an integer in the range 1 to
  1069.                        25.  It gives the absolute row
  1070.                        coordinate on the screen.
  1071.  
  1072.             Msg        is any string expression.  It
  1073.                        gives the message that is to be
  1074.                        displayed on the screen.
  1075.  
  1076.             TCSet      is the set of key combination
  1077.                        elements that are allowed to
  1078.                        terminate this procedure.
  1079.                        (Refer to appendix C)
  1080.  
  1081.             Ch         is a two character string
  1082.                        variable the returns the keyboard
  1083.                        code of the terminating key.
  1084.                        (Refer to appendix B)
  1085. ..page
  1086. ..head03
  1087. ..head04
  1088. ..head05
  1089. Example  :  WaitMsg(1,25,'Printer error',[1,13],TC);
  1090.  
  1091.             This example will print the message 'Printer
  1092.             error' starting in column one on line 25.
  1093.             After the message is displayed the procedure
  1094.             will wait until either the ESC or ENTER key
  1095.             is pressed before continuing.
  1096.  
  1097.             Global type definitions for TCSet and TC
  1098.             are:
  1099.  
  1100.                TCSet = Set of 0..255;
  1101.                TC    = String[2];
  1102. ..page
  1103. ..head03RWHEREXABS
  1104. ..head04RFunction
  1105. ..head05R_______________________________________________________
  1106. Purpose  :  Returns the absolute column coordinate of
  1107.             the cursor in the physical window.
  1108.  
  1109. Versions :  2.00   3.00    3.01B
  1110.              **     **      **
  1111.  
  1112. Filename :  V22.ENH
  1113.  
  1114. Format   :  WhereXAbs;
  1115.  
  1116. Remarks  :  This function will return an integer in the
  1117.             range of 1 to 80 for 80 column text modes,
  1118.             and 1 to 40 for 40 column text modes.
  1119.  
  1120. Example  :  i := WhereXAbs;
  1121.  
  1122.             The variable i will receive the absolute
  1123.             column coordinate of the cursor on the total
  1124.             screen regardless of Turbo's current window
  1125.             definition.
  1126. ..page
  1127. ..head03RWHEREYABS
  1128. ..head04RFunction
  1129. Purpose  :  Returns the absolute row coordinate of the
  1130.             cursor in the physical window.
  1131.  
  1132. Versions :  2.00   3.00    3.01B
  1133.              **     **      **
  1134.  
  1135. Filename :  V23.ENH
  1136.  
  1137. Format   :  WhereYAbs;
  1138.  
  1139. Remarks  :  This function will return an integer in the
  1140.             range of 1 to 25.
  1141.  
  1142. Example  :  i := WhereYAbs;
  1143.  
  1144.             The variable i will receive the absolute row
  1145.             coordinate of the cursor on the total screen
  1146.             regardless of Turbo's current window
  1147.             definition.
  1148. ..page
  1149. ..head03RWRITEST
  1150. ..head04RProcedure
  1151. ..head05R_______________________________________________________
  1152. Purpose  :  Display data to the screen
  1153.  
  1154. Versions :  2.00   3.00    3.01B
  1155.              **     **      **
  1156.  
  1157. Filename :  V24.ENH
  1158.  
  1159. Format   :  WriteSt(St);
  1160.  
  1161. Remarks  :  St         is any string expression.
  1162.  
  1163.             WriteSt positions the cursor after the newly
  1164.             displayed string.
  1165.  
  1166.             WriteSt is NOT sensitive to Turbo's
  1167.             currently defined window and will wrap
  1168.             around to the next line of column one on the
  1169.             screen when necessary.
  1170.  
  1171.             WriteSt will not scroll the screen if the
  1172.             data to be displayed is to extend beyond the
  1173.             last row of the screen.
  1174.  
  1175. Special Note :  WriteSt requires a global type
  1176.                 definition for a string of 255
  1177.                 characters.
  1178.  
  1179.                 Str255 = String[255];
  1180. ..page
  1181. ..head03RWRITESTLN
  1182. ..head04RProcedure
  1183. Purpose  :  Display data to the screen
  1184.  
  1185. Versions :  2.00   3.00    3.01B
  1186.              **     **      **
  1187.  
  1188. Filename :  V25.ENH
  1189.  
  1190. Format   :  WriteStln(St);
  1191.  
  1192.  
  1193. Remarks  :  St         is any string expression.
  1194.  
  1195.             The cursor is positioned in column one on
  1196.             the next line of the physical screen after
  1197.             the data has been displayed.
  1198.  
  1199.             WriteStln is NOT sensitive to Turbo's
  1200.             currently defined window and will wrap
  1201.             around to the next row of column one when
  1202.             necessary.
  1203.  
  1204.             WriteSt will not scroll the screen if the
  1205.             data to be displayed is to extend beyond the
  1206.             last row of the screen.
  1207.  
  1208. Special Note :  WriteStln requires a global type
  1209.                 definition for a string of 255
  1210.                 characters.
  1211.  
  1212.                 Str255 = String[255];
  1213. ..page
  1214. ..pgno01
  1215. ..head03R
  1216. ..head04CSUMMARY OF PROCEDURES AND FUNCTIONS
  1217. ..head05R_______________________________________________________
  1218. ..foot48RA-##
  1219. Screen Related Procedures and Functions
  1220.  
  1221. Procedure
  1222.  
  1223.   BoarderColor(Color : Integer);
  1224.   ClrWin;
  1225.   ColorMsg(X,Y,Color : Integer; Message : Str255);
  1226.   FillCol(X,Y,Num : Integer; Ch : Char);
  1227.   FillColAttrib(X,Y,Num,Color : Integer);
  1228.   FillRow(X,Y,Num : Integer; Ch : Char);
  1229.   FillRowAttrib(X,Y,Num,Color : Integer);
  1230.   FrameWin(UL,UR,LL,LR,Hor,Ver : Char);
  1231.   GetScrn(X,Y,NumChars : Integer; Var ChArray);
  1232.   GotoXYAbs(X,Y : Integer);
  1233.   InitVideo(Mode : Integer);
  1234.   PutScrn(X,Y,NumChars : Integer; Var ChArray);
  1235.   RvsVideo;
  1236.   ScrollDn(Lines,Color,X1,Y1,X2,Y2 : Integer);
  1237.   ScrollLeft(Columns,Color,X1,Y1,X2,Y2 : Integer);
  1238.   ScrollUp(Lines,Color,X1,Y1,X2,Y2 : Integer);
  1239.   ScrollRight(Columns,Color,X1,Y1,X2,Y2 : Integer);
  1240.   SetCursorSize(StartLine,EndLine : Integer);
  1241.   WaitMsg(    X,Y   : Integer;
  1242.               St    : Str255;
  1243.               TESet : TCSet;
  1244.           Var TC    : Str2);
  1245.   WriteSt(St : Str255);
  1246.   WriteStLn(St : Str255);
  1247.  
  1248. Function
  1249.  
  1250.   GetCursorSize : Integer;
  1251.   GetVideoMode  : Integer;
  1252.   WhereXAbs     : Integer;
  1253.   WhereYAbs     : Integer;
  1254. ..page
  1255. ..pgno01
  1256. ..head03R
  1257. ..head04CKEYBOARD CODES
  1258. ..head05R_______________________________________________________
  1259. ..foot48RB-##
  1260. This appendix lists the keyboard codes for all the key
  1261. combinations for the entire keyboard, as they are seen
  1262. by the procedures READKBD and INKEY.  All keys are
  1263. turned into either a one or two character code.
  1264.  
  1265. To understand the table below assume St is a two
  1266. character string.  St[0] is the length of the character
  1267. code returned.  If the length of St is one then a normal
  1268. ASCII character was pressed, otherwise an extended code
  1269. is generated.  Notice that some of the keyboard codes do
  1270. produce a two character code with the first character
  1271. being null.
  1272.  
  1273. If the length of St is one then a normal ASCII character
  1274. code was read from the keyboard.  This basically covers
  1275. the ASCII values 32-127.
  1276.  
  1277. If the length of St is two then one of the keys, that
  1278. are usually used for cursor control, was read from the
  1279. keyboard.  If this is the case then St[1] will be either
  1280. a 0 or 27 depending on the key combination read from the
  1281. keyboard.
  1282.  
  1283. Use of the case statement works well with this type of
  1284. setup to determine which keyboard keys were read from
  1285. the keyboard.
  1286.  
  1287. Case Ch[1] Of
  1288.    #00       : Writeln('Control code used.');
  1289.    #27       : Writeln('Other code used.');
  1290.    #32..#127 : Writeln('Print Char code used.');
  1291. End;
  1292. ..page
  1293. ..head04R
  1294. ..head05R
  1295. Key                         Key
  1296. Pressed   CH[0] CH[1] CH[2] Pressed   CH[0] CH[1] CH[2]
  1297. --------- ----- ----- ----- --------- ----- ----- -----
  1298. (space)      1    32     0  E            1    69     0
  1299. !            1    33     0  F            1    70     0
  1300. "            1    34     0  G            1    71     0
  1301. #            1    35     0  H            1    72     0
  1302. $            1    36     0  I            1    73     0
  1303. %            1    37     0  J            1    74     0
  1304. &            1    38     0  K            1    75     0
  1305. '            1    39     0  L            1    76     0
  1306. (            1    40     0  M            1    77     0
  1307. )            1    41     0  N            1    78     0
  1308. *            1    42     0  O            1    79     0
  1309. +            1    43     0  P            1    80     0
  1310. ,            1    44     0  Q            1    81     0
  1311. -            1    45     0  R            1    82     0
  1312. .            1    46     0  S            1    83     0
  1313. /            1    47     0  T            1    84     0
  1314. 0            1    48     0  U            1    85     0
  1315. 1            1    49     0  V            1    86     0
  1316. 2            1    50     0  W            1    87     0
  1317. 3            1    51     0  X            1    88     0
  1318. 4            1    52     0  Y            1    89     0
  1319. 5            1    53     0  Z            1    90     0
  1320. 6            1    54     0  [            1    91     0
  1321. 7            1    55     0  \            1    92     0
  1322. 8            1    56     0  ]            1    93     0
  1323. 9            1    57     0  ^            1    94     0
  1324. :            1    58     0  _            1    95     0
  1325. ;            1    59     0  `            1    96     0
  1326. <            1    60     0  a            1    97     0
  1327. =            1    61     0  b            1    98     0
  1328. >            1    62     0  c            1    99     0
  1329. ?            1    63     0  d            1   100     0
  1330. @            1    64     0  e            1   101     0
  1331. A            1    65     0  f            1   102     0
  1332. B            1    66     0  g            1   103     0
  1333. C            1    67     0  h            1   104     0
  1334. D            1    68     0  i            1   105     0
  1335. ..page
  1336. Key                         Key
  1337. Pressed   Ch[0] Ch[1] Ch[2] Pressed   Ch[0] Ch[1] Ch[2]
  1338. --------- ----- ----- ----- --------- ----- ----- -----
  1339. j            1   106     0  Alt-I        2    27    23
  1340. k            1   107     0  Alt-O        2    27    24
  1341. l            1   108     0  Alt-P        2    27    25
  1342. m            1   109     0  Alt-A        2    27    30
  1343. n            1   110     0  Alt-S        2    27    31
  1344. o            1   111     0  Alt-D        2    27    32
  1345. p            1   112     0  Alt-F        2    27    33
  1346. q            1   113     0  Alt-G        2    27    34
  1347. r            1   114     0  Alt-H        2    27    35
  1348. s            1   115     0  Alt-J        2    27    36
  1349. t            1   116     0  Alt-K        2    27    37
  1350. u            1   117     0  Alt-L        2    27    38
  1351. v            1   118     0  Alt-Z        2    27    44
  1352. w            1   119     0  Alt-X        2    27    45
  1353. x            1   120     0  Alt-C        2    27    46
  1354. y            1   121     0  Alt-V        2    27    47
  1355. z            1   122     0  Alt-B        2    27    48
  1356. {            1   123     0  Alt-N        2    27    49
  1357. |            1   124     0  Alt-M        2    27    50
  1358. }            1   125     0  F1           2    27    59
  1359. ~            1   126     0  F2           2    27    60
  1360. Ctrl-Break   2    27     0  F3           2    27    61
  1361. Esc          2    27     1  F4           2    27    62
  1362. Ctrl-2       2    27     3  F5           2    27    63
  1363. BackSp       2    27     8  F6           2    27    64
  1364. Tab          2    27     9  F7           2    27    65
  1365. Ctrl-Enter   2    27    10  F8           2    27    66
  1366. Enter        2    27    13  F9           2    27    67
  1367. Ctrl-BS      2    27    14  F10          2    27    68
  1368. Shft-Tab     2    27    15  Home         2    27    71
  1369. Alt-Q        2    27    16  UArr         2    27    72
  1370. Alt-W        2    27    17  PgUp         2    27    73
  1371. Alt-E        2    27    18  LArr         2    27    75
  1372. Alt-R        2    27    19  RArr         2    27    77
  1373. Alt-T        2    27    20  End          2    27    79
  1374. Alt-Y        2    27    21  DArr         2    27    80
  1375. Alt-U        2    27    22  PgDn         2    27    81
  1376. ..page
  1377. Key                         Key
  1378. Pressed   Ch[0] Ch[1] Ch[2] Pressed   Ch[0] Ch[1] Ch[2]
  1379. --------- ----- ----- ----- --------- ----- ----- -----
  1380. Ins          2    27    82  Alt-1        2    27   120
  1381. Del          2    27    83  Alt-2        2    27   121
  1382. Shft-F1      2    27    84  Alt-3        2    27   122
  1383. Shft-F2      2    27    85  Alt-4        2    27   123
  1384. Shft-F3      2    27    86  Alt-5        2    27   124
  1385. Shft-F4      2    27    87  Alt-6        2    27   125
  1386. Shft-F5      2    27    88  Alt-7        2    27   126
  1387. Shft-F6      2    27    89  Alt-8        2    27   127
  1388. Shft-F7      2    27    90  Alt-9        2    27   128
  1389. Shft-F8      2    27    91  Alt-0        2    27   129
  1390. Shft-F9      2    27    92  Alt--        2    27   130
  1391. Shft-F10     2    27    93  Alt-=        2    27   131
  1392. Ctrl-F1      2    27    94  Ctrl-PgUp    2    27   132
  1393. Ctrl-F2      2    27    95  Ctrl-A       2     0     1
  1394. Ctrl-F3      2    27    96  Ctrl-B       2     0     2
  1395. Ctrl-F4      2    27    97  Ctrl-C       2     0     3
  1396. Ctrl-F5      2    27    98  Ctrl-D       2     0     4
  1397. Ctrl-F6      2    27    99  Ctrl-E       2     0     5
  1398. Ctrl-F7      2    27   100  Ctrl-F       2     0     6
  1399. Ctrl-F8      2    27   101  Ctrl-G       2     0     7
  1400. Ctrl-F9      2    27   102  Ctrl-H       2     0     8
  1401. Ctrl-F10     2    27   103  Ctrl-I       2     0     9
  1402. Alt-F1       2    27   104  Ctrl-J       2     0    10
  1403. Alt-F2       2    27   105  Ctrl-K       2     0    11
  1404. Alt-F3       2    27   106  Ctrl-L       2     0    12
  1405. Alt-F4       2    27   107  Ctrl-M       2     0    13
  1406. Alt-F5       2    27   108  Ctrl-N       2     0    14
  1407. Alt-F6       2    27   109  Ctrl-O       2     0    15
  1408. Alt-F7       2    27   110  Ctrl-P       2     0    16
  1409. Alt-F8       2    27   111  Ctrl-Q       2     0    17
  1410. Alt-F9       2    27   112  Ctrl-R       2     0    18
  1411. Alt-F10      2    27   113  Ctrl-S       2     0    19
  1412. Ctrl-LArr    2    27   115  Ctrl-T       2     0    20
  1413. Ctrl-RArr    2    27   116  Ctrl-U       2     0    21
  1414. Ctrl-End     2    27   117  Ctrl-V       2     0    22
  1415. Ctrl-PgDn    2    27   118  Ctrl-W       2     0    23
  1416. Ctrl-Home    2    27   119  Ctrl-X       2     0    24
  1417. ..page
  1418. Key
  1419. Pressed   Ch[0] Ch[1] Ch[2]
  1420. --------- ----- ----- -----
  1421. Ctrl-Y       2     0    25
  1422. Ctrl-Z       2     0    26
  1423. Ctrl-[       2     0    27
  1424. Ctrl-\       2     0    28
  1425. Ctrl-]       2     0    29
  1426. Ctrl-6       2     0    30
  1427. Ctrl--       2     0    31
  1428. ..page
  1429. ..pgno01
  1430. ..head04CKEYBOARD ELEMENT CODES
  1431. ..head05R_______________________________________________________
  1432. ..foot48RC-##
  1433. This appendix lists the element codes for all the key
  1434. combinations for the entire keyboard, as they are seen
  1435. by the procedures WAITMSG and INPUTST.  All keys are
  1436. turned into a one byte element code number.
  1437.  
  1438. The Global type definition required for this table is:
  1439.  
  1440.     TermChSet = Set of 0..255;
  1441.  
  1442. The unit or element number in the set defines which key
  1443. or key combination was pressed.  This table was created
  1444. for use as the Terminating Character Set with the
  1445. procedures WAITMSG and INPUTST
  1446.  
  1447. For example if you were to use the procedure WAITMSG and
  1448. you wanted either the Esc or Enter keys to terminate the
  1449. procedure the following call to WAITMSG could be used:
  1450.  
  1451.    WaitMsg(1,1,'Message here',[1,13],TC);
  1452.  
  1453. ** The element number for the ESC key is 1.
  1454. ** The element number for the ENTER key is 13.
  1455.  
  1456. ** Use the value in the column Element Number to
  1457. ** determine the element number of the terminating keys.
  1458.  
  1459. This procedure would then display the message and would
  1460. wait until either the ESC or ENTER key was pressed
  1461. before continuing.
  1462. ..page
  1463. ..head04R
  1464. ..head05R
  1465.                    Element                    Element
  1466. Key code   AH   AL Number   Key code   AH  AL Number
  1467. --------- ---  --- -------  --------- --- --- -------
  1468. Ctrl-Break  0    0    0     Alt-K      37   0    37
  1469. Esc         1   27    1     Alt-L      38   0    38
  1470.                       2                          39
  1471. Ctrl-2      3    0    3                          40
  1472.                       4                          41
  1473.                       5                          42
  1474.                       6                          43
  1475.                       7     Alt-Z      44   0    44
  1476. BackSp     14    8    8     Alt-X      45   0    45
  1477. Tab        15    9    9     Alt-C      46   0    46
  1478. Ctrl-Enter 28   10   10     Alt-V      47   0    47
  1479.                      11     Alt-B      48   0    48
  1480.                      12     Alt-N      49   0    49
  1481. Enter      28   13   13     Alt-M      50   0    50
  1482. Ctrl-BS    14  127   14                          51
  1483. Shft-Tab   15    0   15                          52
  1484. Alt-Q      16    0   16                          53
  1485. Alt-W      17    0   17                          54
  1486. Alt-E      18    0   18                          55
  1487. Alt-R      19    0   19                          56
  1488. Alt-T      20    0   20                          57
  1489. Alt-Y      21    0   21                          58
  1490. Alt-U      22    0   22     F1         59   0    59
  1491. Alt-I      23    0   23     F2         60   0    60
  1492. Alt-O      24    0   24     F3         61   0    61
  1493. Alt-P      25    0   25     F4         62   0    62
  1494.                      26     F5         63   0    63
  1495.                      27     F6         64   0    64
  1496.                      28     F7         65   0    65
  1497.                      29     F8         66   0    66
  1498. Alt-A      30    0   30     F9         67   0    67
  1499. Alt-S      31    0   31     F10        68   0    68
  1500. Alt-D      32    0   32                          69
  1501. Alt-F      33    0   33                          70
  1502. Alt-G      34    0   34     Home       71   0    71
  1503. Alt-H      35    0   35     UArr       72   0    72
  1504. Alt-J      36    0   36     PgUp       73   0    73
  1505. ..page
  1506.                    Element                    Element
  1507. Key code   AH   AL Number   Key code   AH  AL Number
  1508. --------- ---  --- -------  --------- --- --- -------
  1509.                       74    Alt-F8    111   0   111
  1510. LArr       75    0    75    Alt-F9    112   0   112
  1511.                       76    Alt-F10   113   0   113
  1512. RArr       77    0    77                        114
  1513.                       78    Ctrl-LArr 115   0   115
  1514. End        79    0    79    Ctrl-RArr 116   0   116
  1515. DArr       80    0    80    Ctrl-End  117   0   117
  1516. PgDn       81    0    81    Ctrl-PgDn 118   0   118
  1517. Ins        82    0    82    Ctrl-Home 119   0   119
  1518. Del        83    0    83    Alt-1     120   0   120
  1519. Shft-F1    84    0    84    Alt-2     121   0   121
  1520. Shft-F2    85    0    85    Alt-3     122   0   122
  1521. Shft-F3    86    0    86    Alt-4     123   0   123
  1522. Shft-F4    87    0    87    Alt-5     124   0   124
  1523. Shft-F5    88    0    88    Alt-6     125   0   125
  1524. Shft-F6    89    0    89    Alt-7     126   0   126
  1525. Shft-F7    90    0    90    Alt-8     127   0   127
  1526. Shft-F8    91    0    91    Alt-9     128   0   128
  1527. Shft-F9    92    0    92    Alt-0     129   0   129
  1528. Shft-F10   93    0    93    Alt--     130   0   130
  1529. Ctrl-F1    94    0    94    Alt-=     131   0   131
  1530. Ctrl-F2    95    0    95    Ctrl-PgUp 132   0   132
  1531. Ctrl-F3    96    0    96
  1532. Ctrl-F4    97    0    97
  1533. Ctrl-F5    98    0    98
  1534. Ctrl-F6    99    0    99
  1535. Ctrl-F7   100    0   100
  1536. Ctrl-F8   101    0   101
  1537. Ctrl-F9   102    0   102
  1538. Ctrl-F10  103    0   103
  1539. Alt-F1    104    0   104
  1540. Alt-F2    105    0   105
  1541. Alt-F3    106    0   106
  1542. Alt-F4    107    0   107
  1543. Alt-F5    108    0   108
  1544. Alt-F6    109    0   109
  1545. Alt-F7    110    0   110
  1546. ..page
  1547.           AL+      Element            AL+     Element
  1548. Key code  132   AL Number   Key code  132  AL Number
  1549. --------- ---  --- -------  --------- --- --- -------
  1550. Ctrl-A    133    1   133    &         170  38    170
  1551. Ctrl-B    134    2   134    '         171  39    171
  1552. Ctrl-C    135    3   135    (         172  40    172
  1553. Ctrl-D    136    4   136    )         173  41    173
  1554. Ctrl-E    137    5   137    *         174  42    174
  1555. Ctrl-F    138    6   138    +         175  43    175
  1556. Ctrl-G    139    7   139    ,         176  44    176
  1557. Ctrl-H    140    8   140    -         177  45    177
  1558. Ctrl-I    141    9   141    .         178  46    178
  1559. Ctrl-J    142   10   142    /         179  47    179
  1560. Ctrl-K    143   11   143    0         180  48    180
  1561. Ctrl-L    144   12   144    1         181  49    181
  1562. Ctrl-M    145   13   145    2         182  50    182
  1563. Ctrl-N    146   14   146    3         183  51    183
  1564. Ctrl-O    147   15   147    4         184  52    184
  1565. Ctrl-P    148   16   148    5         185  53    185
  1566. Ctrl-Q    149   17   149    6         186  54    186
  1567. Ctrl-R    150   18   150    7         187  55    187
  1568. Ctrl-S    151   19   151    8         188  56    188
  1569. Ctrl-T    152   20   152    9         189  57    189
  1570. Ctrl-U    153   21   153    :         190  58    190
  1571. Ctrl-V    154   22   154    ;         191  59    191
  1572. Ctrl-W    155   23   155    <         192  60    192
  1573. Ctrl-X    156   24   156    =         193  61    193
  1574. Ctrl-Y    157   25   157    >         194  62    194
  1575. Ctrl-Z    158   26   158    ?         195  63    195
  1576. Ctrl-[    159   27   159    @         196  64    196
  1577. Ctrl-\    160   28   160    A         197  65    197
  1578. Ctrl-]    161   29   161    B         198  66    198
  1579. Ctrl-6    162   30   162    C         199  67    199
  1580. Ctrl--    163   31   163    D         200  68    200
  1581. (space)   164   32   164    E         201  69    201
  1582. !         165   33   165    F         202  70    202
  1583. "         166   34   166    G         203  71    203
  1584. #         167   35   167    H         204  72    204
  1585. $         168   36   168    I         205  73    205
  1586. %         169   37   169    J         206  74    206
  1587. ..page
  1588.           AL+      Element            AL+     Element
  1589. Key code  132   AL Number   Key code  132  AL Number
  1590. --------- ---  --- -------  --------- --- --- -------
  1591. K         207   75   207    p         244 112    244
  1592. L         208   76   208    q         245 113    245
  1593. M         209   77   209    r         246 114    246
  1594. N         210   78   210    s         247 115    247
  1595. O         211   79   211    t         248 116    248
  1596. P         212   80   212    u         249 117    249
  1597. Q         213   81   213    v         250 118    250
  1598. R         214   82   214    w         251 119    251
  1599. S         215   83   215    x         252 120    252
  1600. T         216   84   216    y         253 121    253
  1601. U         217   85   217    z         254 122    254
  1602. V         218   86   218    {         255 123    255
  1603. W         219   87   219
  1604. X         220   88   220
  1605. Y         221   89   221
  1606. Z         222   90   222
  1607. [         223   91   223
  1608. \         224   92   224
  1609. ]         225   93   225
  1610. ^         226   94   226
  1611. _         227   95   227
  1612. `         228   96   228
  1613. a         229   97   229
  1614. b         230   98   230
  1615. c         231   99   231
  1616. d         232  100   232
  1617. e         233  101   233
  1618. f         234  102   234
  1619. g         235  103   235
  1620. h         236  104   236
  1621. i         237  105   237
  1622. j         238  106   238
  1623. k         239  107   239
  1624. l         240  108   240
  1625. m         241  109   241
  1626. n         242  110   242
  1627. o         243  111   243
  1628. ..page
  1629. ..pgno01
  1630. ..head04CKEYBOARD RETURN CODES
  1631. ..head05R_______________________________________________________
  1632. ..foot48RD-##
  1633. This appendix lists the keyboard codes that are
  1634. returned by the computer system when a key or key
  1635. combination is pressed.
  1636.  
  1637. The column headings AH and AL refer to the hi and lo
  1638. registers within the AX register.
  1639.  
  1640. These are the actual values returned by accesing the
  1641. BIOS interrupt 16H in assembly language.
  1642.  
  1643.  
  1644. Key                         Key
  1645. Pressed    AH    AL         Pressed    AH    AL
  1646. --------- ----- -----       --------- ----- -----
  1647. (space)     57    32        :           39    58
  1648. !            2    33        ;           39    59
  1649. "           40    34        <           51    60
  1650. #            4    35        =           13    61
  1651. $            5    36        >           52    62
  1652. %            6    37        ?           53    63
  1653. &            8    38        @            3    64
  1654. '           40    39        A           30    65
  1655. (           10    40        B           48    66
  1656. )           11    41        C           46    67
  1657. *            9    42        D           32    68
  1658. +           13    43        E           18    69
  1659. ,           51    44        F           33    70
  1660. -           12    45        G           34    71
  1661. .           52    46        H           35    72
  1662. /           53    47        I           23    73
  1663. 0           11    48        J           36    74
  1664. 1            2    49        K           37    75
  1665. 2            3    50        L           38    76
  1666. 3            4    51        M           50    77
  1667. 4            5    52        N           49    78
  1668. 5            6    53        O           24    79
  1669. 6            7    54        P           25    80
  1670. 7            8    55        Q           16    81
  1671. 8            9    56        R           19    82
  1672. 9           10    57        S           31    83
  1673. ..page
  1674. ..head03
  1675. ..head04
  1676. ..head05
  1677. Key                         Key
  1678. Pressed    AH    AL         Pressed    AH    AL
  1679. --------- ----- -----       --------- ----- -----
  1680. T           20    84        z           44   122
  1681. U           22    85        {           26   123
  1682. V           47    86        |           43   124
  1683. W           17    87        }           27   125
  1684. X           48    88        ~           41   126
  1685. Y           21    89        Ctrl-2       3     0
  1686. Z           44    90        BackSp      14     8
  1687. [           26    91        Tab         15     9
  1688. \           43    92        Ctrl-Enter  28    10
  1689. ]           27    93        Enter       28    13
  1690. ^            7    94        Shft-Tab    15     0
  1691. _           12    95        Alt-Q       16     0
  1692. `           41    96        Alt-W       17     0
  1693. a           30    97        Alt-E       18     0
  1694. b           48    98        Alt-R       19     0
  1695. c           46    99        Alt-T       20     0
  1696. d           32   100        Alt-Y       21     0
  1697. e           18   101        Alt-U       22     0
  1698. f           33   102        Alt-I       23     0
  1699. g           34   103        Alt-O       24     0
  1700. h           35   104        Alt-P       25     0
  1701. i           23   105        Esc          1    27
  1702. j           36   106        Alt-A       30     0
  1703. k           37   107        Alt-S       31     0
  1704. l           38   108        Alt-D       32     0
  1705. m           50   109        Alt-F       33     0
  1706. n           49   110        Alt-G       34     0
  1707. o           24   111        Alt-H       35     0
  1708. p           25   112        Alt-J       36     0
  1709. q           16   113        Alt-K       37     0
  1710. r           19   114        Alt-L       38     0
  1711. s           31   115        Alt-Z       44     0
  1712. t           20   116        Alt-X       45     0
  1713. u           22   117        Alt-C       46     0
  1714. v           47   118        Alt-V       47     0
  1715. w           17   119        Alt-B       48     0
  1716. x           48   120        Alt-N       49     0
  1717. y           21   121        Alt-M       50     0
  1718. ..page
  1719. Key                         Key
  1720. Pressed    AH    AL         Pressed    AH    AL
  1721. --------- ----- -----       --------- ----- -----
  1722. F1          59     0        Ctrl-F8    101     0
  1723. F2          60     0        Ctrl-F9    102     0
  1724. F3          61     0        Ctrl-F10   103     0
  1725. F4          62     0        Alt-F1     104     0
  1726. F5          63     0        Alt-F2     105     0
  1727. F6          64     0        Alt-F3     106     0
  1728. F7          65     0        Alt-F4     107     0
  1729. F8          66     0        Alt-F5     108     0
  1730. F9          67     0        Alt-F6     109     0
  1731. F10         68     0        Alt-F7     110     0
  1732. Home        71     0        Alt-F8     111     0
  1733. UArr        72     0        Alt-F9     112     0
  1734. PgUp        73     0        Alt-F10    113     0
  1735. LArr        75     0        Ctrl-LArr  115     0
  1736. RArr        77     0        Ctrl-RArr  116     0
  1737. End         79     0        Ctrl-End   117     0
  1738. DArr        80     0        Ctrl-PgDn  118     0
  1739. PgDn        81     0        Ctrl-Home  119     0
  1740. Ins         82     0        Alt-1      120     0
  1741. Del         83     0        Alt-2      121     0
  1742. Shft-F1     84     0        Alt-3      122     0
  1743. Shft-F2     85     0        Alt-4      123     0
  1744. Shft-F3     86     0        Alt-5      124     0
  1745. Shft-F4     87     0        Alt-6      125     0
  1746. Shft-F5     88     0        Alt-7      126     0
  1747. Shft-F6     89     0        Alt-8      127     0
  1748. Shft-F7     90     0        Alt-9      128     0
  1749. Shft-F8     91     0        Alt-0      129     0
  1750. Shft-F9     92     0        Alt--      130     0
  1751. Shft-F10    93     0        Alt-=      131     0
  1752. Ctrl-F1     94     0        Ctrl-PgUp  132     0
  1753. Ctrl-F2     95     0        Ctrl-A      30     1
  1754. Ctrl-F3     96     0        Ctrl-B      48     2
  1755. Ctrl-F4     97     0        Ctrl-C      46     3
  1756. Ctrl-F5     98     0        Ctrl-D      32     4
  1757. Ctrl-F6     99     0        Ctrl-E      18     5
  1758. Ctrl-F7    100     0        Ctrl-F      33     6
  1759. ..page
  1760. Key
  1761. Pressed    AH    AL
  1762. --------- ----- -----
  1763. Ctrl-G      34     7
  1764. Ctrl-H      35     8
  1765. Ctrl-I      23     9
  1766. Ctrl-J      36    10
  1767. Ctrl-K      37    11
  1768. Ctrl-L      38    12
  1769. Ctrl-M      50    13
  1770. Ctrl-N      49    14
  1771. Ctrl-O      24    15
  1772. Ctrl-P      25    16
  1773. Ctrl-Q      16    17
  1774. Ctrl-R      19    18
  1775. Ctrl-S      31    19
  1776. Ctrl-T      20    20
  1777. Ctrl-U      22    21
  1778. Ctrl-V      47    22
  1779. Ctrl-W      17    23
  1780. Ctrl-X      48    24
  1781. Ctrl-Y      21    25
  1782. Ctrl-Z      44    26
  1783. Ctrl-[      26    27
  1784. Ctrl-\      43    28
  1785. Ctrl-]      27    29
  1786. Ctrl-6       7    30
  1787. Ctrl--      12    31
  1788. Ctrl-BS     14   127
  1789. Ctrl-Break   0     0
  1790. ..page
  1791. ..pgno01
  1792. ..head03CKEYBOARD SCAN CODES
  1793. ..head04R_______________________________________________________
  1794. ..foot48RE-##
  1795.                      FUNCTION KEYS
  1796.  
  1797.          Scan |      Scan |      Scan |      Scan |
  1798.     Key  Code | Key  Code | Key  Code | Key  Code |
  1799.     ---  ---- | ---  ---- | ---  ---- | ---  ---- |
  1800.      F1    59 |  F4    62 |  F7    65 | F10   68  |
  1801.      F2    60 |  F5    63 |  F8    66 |           |
  1802.      F3    61 |  F6    64 |  F9    67 |           |
  1803.  
  1804.  
  1805.                     NUMERIC KEYPAD
  1806.  
  1807.          Scan |      Scan |      Scan |      Scan |
  1808.     Key  Code | Key  Code | Key  Code | Key  Code |
  1809.     ---  ---- | ---  ---- | ---  ---- | ---  ---- |
  1810.      7    71  |  4    76  |  1    79  |  .    83  |
  1811.      8    72  |  5    76  |  2    80  |           |
  1812.      9    73  |  6    77  |  3    81  |           |
  1813.      -    74  |  +    78  |  0    82  |           |
  1814.  
  1815.  
  1816.                      CONTROL KEYS
  1817.  
  1818.                       Scan |              Scan
  1819.          Key          Code | Key          Code
  1820.          ---          ---- | ---          ----
  1821.          Esc            1  | Ctrl          29
  1822.          Backspace     14  | Left Shft     42
  1823.          Num Lock      69  | Right Shft    54
  1824.          Scroll Lock   70  | Alt           56
  1825.          Tab           15  | Caps Lock     58
  1826.          Enter         28  |
  1827. ..page
  1828. ..head03R
  1829. ..head04R
  1830.          LETTER, NUMBER, AND PUNCTUATION KEYS
  1831.  
  1832.         Scan |      Scan |      Scan |         Scan
  1833.    Key  Code | Key  Code | Key  Code | Key     Code
  1834.    ---  ---- | ---  ---- | ---  ---- | ---     ----
  1835.     1     2  |  W    17  |  D    32  |  C       46
  1836.     2     3  |  E    18  |  F    33  |  V       47
  1837.     3     4  |  R    19  |  G    34  |  B       48
  1838.     4     5  |  T    20  |  H    35  |  N       49
  1839.     5     6  |  Y    21  |  J    36  |  M       50
  1840.     6     7  |  U    22  |  K    37  |  ,       51
  1841.     7     8  |  I    23  |  L    38  |  .       52
  1842.     8     9  |  O    24  |  ;    39  |  /       53
  1843.     9    10  |  P    25  |  '    40  |  (PrtSc) 55
  1844.     0    11  |  [    26  |  `    41  |  (Space) 57
  1845.     -    12  |  ]    27  |  \    43  |
  1846.     =    13  |  A    30  |  Z    44  |
  1847.     Q    16  |  S    31  |  X    45  |
  1848. ..page
  1849. ..pgno01
  1850. ..foot48RF-##
  1851. =============== User-Supported Software ===============
  1852.  
  1853.  
  1854.  If you have received these routines from another user
  1855.     and find them to be of value, your contribution
  1856.              will be greatly appreciated.
  1857.  
  1858.                  ( $25.00 suggested ).
  1859.  
  1860.  
  1861.             ------------------------------
  1862.  
  1863.                      Kevin W. Dahl
  1864.                      1711 4th St N
  1865.                   Wahpeton, ND  58075
  1866.  
  1867.             ------------------------------
  1868.  
  1869.  Regardless of whether you make a contribution, you are
  1870.    encouraged to copy and distribute these routines.
  1871.  
  1872. =======================================================
  1873.  
  1874. The user-supported concept:
  1875.  
  1876. Anyone may request a copy of a user-supported program
  1877. by sending a blank, formatted disk to the author of the
  1878. program.  An addressed, postage-paid return mailer must
  1879. accompany the disk (no exceptions, please).
  1880.  
  1881. A copy of the program, with documentation, will be sent
  1882. by return mail. The program will carry a notice
  1883. suggesting a contribution to the program's author.
  1884. Making a contribution is completely voluntary on the
  1885. part of the user.
  1886.  
  1887. Regardless of whether a contribution is made, the user
  1888. is encouraged to copy and share the program with
  1889. others. Payment for use is discretionary on the part of
  1890. each subsequent user.
  1891. ..page
  1892. ..pgno01
  1893. ..foot48RG-##
  1894.         FUTURE ENHANCEMENTS AND UPDATE POLICY:
  1895.  
  1896. These routines are being distributed under the user-
  1897. supported concept and will only be improved if you make
  1898. suggestions for improvements and enhancements you would
  1899. like to see.
  1900.  
  1901. Provided users support these routines, the following
  1902. will apply.  Any time there are revisions or updates to
  1903. the routines all Registered Owners will be notified.
  1904. The user may then obtain a copy of the new disk for a
  1905. $10.00 fee.  The fee is for covering the cost of the
  1906. disk, postage and handling.  If you are NOT a
  1907. Registered owner you will be charged a fee of $25.00
  1908. and your name will be added to the list of registered
  1909. owners.
  1910.  
  1911. I would also like to mention that I have spent a
  1912. considerable amount of time researching and developing
  1913. these routines, I hope to benefit from User
  1914. contributions. If you do not contribute, the public
  1915. domain programs and routines will diminish. Help all
  1916. public domain contributors by sending your contribution
  1917. for the programs and routines you find useful.
  1918.  
  1919. If users find these routines of use and send their
  1920. contributions to me, I will add more procedures and
  1921. functions to this library.  If I do not hear from you I
  1922. will assume that you find these routines to be useless,
  1923. and will discontinue my efforts in this area.
  1924.