home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / bas / hanlin3 / aabas20 / aabas.doc < prev    next >
Text File  |  1994-11-03  |  35KB  |  1,194 lines

  1.          The Affordable Alternative Library for BASIC
  2.          =------------------------------------------=
  3.                          Version 2.0
  4.  
  5.      AABas  Copyright (c) 1992-1994  Thomas G. Hanlin III
  6.  
  7.  
  8.  
  9. This is a library for QuickBASIC 4.0 - 4.5.  It provides easy
  10. access to BIOS and DOS calls, covering display and keyboard,
  11. mouse, joystick, disk, printer, equipment information, XMS
  12. memory, and more.
  13.  
  14. AABas is copyrighted and may be distributed only according to
  15. the following simple rules:
  16.  
  17.    All AABas files must be distributed together as a unit.
  18.    No files may be left out, added, or altered.
  19.  
  20. You use this library at your own risk.  It has been tested by
  21. me on my own computer, but I will not assume any responsibility
  22. for any problems which AABas may cause you.  If you do
  23. encounter a problem, please let me know about it, and I will do
  24. my best to verify and repair the error.
  25.  
  26.                          Using AABas
  27.  
  28.  
  29.  
  30. The .QLB that comes with AABas was created with QuickBASIC 4.5.
  31. If you have one of the QuickBASIC 4.0 releases, you can still
  32. use AABas, but you must create a new .QLB file.  The following
  33. will do the trick:
  34.  
  35.    LINK AABAS.LIB/Q,AABAS.QLB,NUL,BQLB40
  36.  
  37. For some later releases of QB 4.0, you will need to specify
  38. BQLB41 instead of BQLB40.  Check your QB files to see whether
  39. you have BQLB40.LIB or BQLB41.LIB.
  40.  
  41. To use AABas routines, you must include the AABAS.BI file in
  42. your program.  You can do this directly with a text editor, if
  43. you like.  A simpler approach would be to place this line at
  44. the start of your program:
  45.  
  46.    REM $INCLUDE: 'AABAS.BI'
  47.  
  48. If you compile from the command line, using BC, you must
  49. specify AABas as a library when you LINK the program.  You can
  50. let LINK prompt you for what it wants or type in the entire set
  51. of parameters at once, like this:
  52.  
  53.    LINK program/EX,,NUL,AABAS
  54.  
  55. If you compile using the QuickBASIC environment, you must
  56. specify AABas as a library when you load QB:
  57.  
  58.    QB program /L AABAS
  59.  
  60. In this case, the program name is optional.  Once in the QB
  61. environment, you can load an existing program or create a new
  62. one.  The /L AABAS switch allows you to use AABas routines.
  63.  
  64.                         Assorted Notes
  65.  
  66.  
  67.  
  68. These routines are broken into two rough categories: BIOS and
  69. DOS.  I've included a few sets of routines in the BIOS category
  70. which perhaps don't entirely belong there: mouse and XMS memory
  71. routines.  Still, close enough.
  72.  
  73. The routines in the BIOS category will work on just about any
  74. machine, with the exception of a few of the odder and older
  75. machines.  How old is older?  Say, before mid-1984.  In other
  76. words, compatibility is not much of a problem.
  77.  
  78. The DOS routines will work on any machine that runs DOS 2.11 or
  79. later releases.  Compatibility is no problem at all there.
  80.  
  81. The source code for AABas is entirely in MASM-compatible
  82. assembly language.  They require negligible space in your
  83. program, and may even reduce the size of your program if their
  84. use allows BASIC to remove some of its own support code from
  85. the program.
  86.  
  87. The AABas library is based directly on BIOS and DOS routines,
  88. with no attempt to provide anything more fancy.  The library is
  89. intended to be small, convenient, and inexpensive-- just the
  90. thing for folks learning about libraries for the first time or
  91. on a budget.  You will find AABas quite powerful within these
  92. limitations.  If you find you need something a little more
  93. comprehensive, you may wish to examine my BasWiz and PBClone
  94. libraries.  See the CATALOG.TXT file for more information.
  95.  
  96. Please note that the AABas disk and file routines do not
  97. provide critical error handling.  If you expect to use them
  98. with drives which are prone to critical errors (drive door
  99. open, disk not formatted, etc-- the kind of errors which tend
  100. to happen on drives with removable media), you should provide
  101. your own ON ERROR handler.  Otherwise, depending on what the
  102. user answers to the "A>bort, R>etry, I>gnore, F>ail?" message,
  103. your program could be abruptly terminated by a critical error.
  104. If you have an ON ERROR handler, you can take care of such
  105. things in your program, rather than letting DOS handle it.
  106.  
  107.                         Reference List
  108.  
  109.  
  110.  
  111. BiosAlt%        return whether an ALT key is pressed
  112. BiosBaseMem%    return amount of base memory installed
  113. BiosCaps%       return whether CapsLock is on
  114. BiosCheckKey$   get key from keyboard buffer, if any
  115. BiosChkPrt%     check a printer
  116. BiosComPorts%   return the number of com (serial) ports
  117. BiosCtrl%       return whether a CTRL key is pressed
  118. BiosELAlt%      return whether Left ALT is pressed
  119. BiosELCtrl%     return whether Left CTRL is pressed
  120. BiosERAlt%      return whether Right ALT is pressed
  121. BiosERCtrl%     return whether Right CTRL is pressed
  122. BiosESysRq%     return whether SysRq is pressed
  123. BiosFloppies%   return the number of floppy drives
  124. BiosGetKeyW$    get a key from the keyboard (wait if need be)
  125. BiosGetVideo    get the screen width, mode, and active page
  126. BiosInitPrt%    initialize a printer
  127. BiosIns%        return whether Insert is on
  128. BiosJoyPosn     get joystick positions
  129. BiosJoyPress    get joystick buttons
  130. BiosKeyIn%      stuff a key into the keyboard buffer
  131. BiosKeyRep      change the key repeat rate
  132. BiosLShift%     return whether Left SHIFT is pressed
  133. BiosMHide       hide the mouse cursor
  134. BiosMInit%      initialize the mouse, return # of buttons
  135. BiosMLButton%   return whether left mouse button is pressed
  136. BiosMLClick     return left clicks & position at last click
  137. BiosMLocate     set the mouse cursor position
  138. BiosMLRelease   return left releases & pos'n at last release
  139. BiosMMButton%   return whether middle mouse button is pressed
  140. BiosMMClick     return middle clicks & pos'n at last click
  141. BiosMMRelease   return middle releases & pos'n at last release
  142. BiosMRButton%   return whether right mouse button is pressed
  143. BiosMRClick     return right clicks & position at last click
  144. BiosMRRelease   return right releases & pos'n at last release
  145. BiosMShow       make the mouse cursor visible
  146. BiosMWhereX%    return the X coordinate of the mouse cursor
  147. BiosMWhereY%    return the Y coordinate of the mouse cursor
  148. BiosMWindow     set the allowed range for the mouse cursor
  149. BiosNum%        return whether NumLock is on
  150. BiosPrintCh%    print a character (to a printer)
  151. BiosPrtPorts%   return the number of printer (parallel) ports
  152. BiosPrtSc       print the screen on the default printer
  153. BiosRShift%     return whether Right SHIFT is pressed
  154. BiosScroll%     return whether ScrollLock is on
  155. BiosScrollDn    scroll an area of the screen down
  156. BiosScrollUp    scroll an area of the screen up
  157.  
  158.                         Reference List
  159.  
  160.  
  161.  
  162. BiosXClose      close an area of XMS
  163. BiosXExists%    see if XMS memory is available
  164. BiosXLFree&     return the largest block of XMS memory
  165. BiosXOpen       open an area of XMS for use
  166. BiosXRead       get information from XMS memory
  167. BiosXResize     resize an area of XMS memory
  168. BiosXTFree&     return the amount of available XMS memory
  169. BiosXVer%       get the XMS driver version
  170. BiosXWrite      put information into XMS memory
  171.  
  172. DosBreak%       return Break level
  173. DosBreakOff     minimize Break checking
  174. DosBreakOn      maximize Break checking
  175. DosDelDir%      delete a directory
  176. DosDelFile%     delete a file
  177. DosDiskInfo     get space & capacity info about a disk drive
  178. DosGetDay$      get the current day name
  179. DosGetDir$      get a default disk directory
  180. DosGetDisk$     get the default disk drive
  181. DosGetFAttr%    get the attributes of a file
  182. DosGetKey$      get a key from standard input
  183. DosGetKeyW$     get a key from standard input (wait if needed)
  184. DosGetVersion%  get the DOS version
  185. DosMakeDir%     create a directory
  186. DosRenFile%     rename a file and/or move it to a new directory
  187. DosSetDir%      set default directory
  188. DosSetDisk%     set the default disk drive
  189. DosSetFAttr%    set the attributes of a file
  190. DosVerify%      return disk write verification status
  191. DosVerifyOff    turn off disk write verification
  192. DosVerifyOn     turn on disk write verification
  193. DosWriteSt      write a string to standard output
  194.  
  195. BiosAlt%
  196.  
  197. This function tells you whether an Alt key is pressed.
  198.  
  199.    Alt% = BiosAlt%
  200.  
  201.  
  202.  
  203. BiosBaseMem%
  204.  
  205. This function returns the amount of base memory installed, in
  206. kilobytes.  These days, it will typically be 640.
  207.  
  208.    Kbytes% = BiosBaseMem%
  209.  
  210.  
  211.  
  212. BiosCaps%
  213.  
  214. This function tells you whether the CapsLock toggle is on.
  215.  
  216.    CapsLock% = BiosCaps%
  217.  
  218.  
  219.  
  220. BiosChkEKey$
  221.  
  222. This function reads a character from the keyboard.  It works
  223. like INKEY$, but doesn't take the key from the keyboard
  224. buffer.  This is useful for handling control characters
  225. (Ctrl-S, Ctrl-Q, Ctrl-C, etc)-- you can have your program
  226. recognize them if pressed, without disturbing the keyboard
  227. buffer if someone is using type-ahead.
  228.  
  229. Actually, it doesn't work quite like INKEY$ in another fashion
  230. which is to its advantage.  It always returns a zero or
  231. two-character string, where the first character is the ASCII
  232. code (CHR$(0) for extended keys, like function keys and arrow
  233. keys) and the second character is the scan code.  For normal
  234. keys, the scan code is always the same regardless of the shift
  235. state of the key. That is, the scan code for "A" is the scan
  236. code for "a" is the scan code for Ctrl-A is the scan code for
  237. Alt-A.  Rose is a rose is a rose, eh?  This is an occasionally
  238. useful property.
  239.  
  240. Note that this keyboard service is for "enhanced" keyboards
  241. only.  Use BiosChkKey$ for older keyboards.
  242.  
  243.    Ky$ = BiosChkEKey$
  244.  
  245. BiosChkKey$
  246.  
  247. This function reads a character from the keyboard.  It works
  248. like INKEY$, but doesn't take the key from the keyboard
  249. buffer.  This is useful for handling control characters
  250. (Ctrl-S, Ctrl-Q, Ctrl-C, etc)-- you can have your program
  251. recognize them if pressed, without disturbing the keyboard
  252. buffer if someone is using type-ahead.
  253.  
  254. Actually, it doesn't work quite like INKEY$ in another fashion
  255. which is to its advantage.  It always returns a zero or
  256. two-character string, where the first character is the ASCII
  257. code (CHR$(0) for extended keys, like function keys and arrow
  258. keys) and the second character is the scan code.  For normal
  259. keys, the scan code is always the same regardless of the shift
  260. state of the key. That is, the scan code for "A" is the scan
  261. code for "a" is the scan code for Ctrl-A is the scan code for
  262. Alt-A.  Rose is a rose is a rose, eh?  This is an occasionally
  263. useful property.
  264.  
  265. Note that this keyboard service, for reasons known only to IBM,
  266. is designed to ignore the new key codes for "enhanced"
  267. keyboards.  This means it won't detect F11 or F12, for
  268. instance.  Use BiosChkEKey$ for enhanced keyboards.
  269.  
  270.    Ky$ = BiosChkKey$
  271.  
  272.  
  273.  
  274. BiosChkPrt%
  275.  
  276. This function returns the status of the selected printer.
  277. Status information is encoded at the bit level, as follows:
  278.  
  279.    7   not busy
  280.    6   acknowledge
  281.    5   out of paper
  282.    4   selected
  283.    3   I/O error
  284.    2   unused
  285.    1   unused
  286.    0   timeout
  287.  
  288.    Status% = BiosChkPrt%(Port%)
  289.  
  290.  
  291.  
  292. BiosComPorts%
  293.  
  294. This function returns the number of serial (com) ports
  295. installed.
  296.  
  297.    Ports% = BiosComPorts%
  298.  
  299. BiosCtrl%
  300.  
  301. This function tells you whether a Ctrl key is pressed.
  302.  
  303.    Ctrl% = BiosCtrl%
  304.  
  305.  
  306.  
  307. BiosELAlt%
  308.  
  309. This function tells you whether the left Alt key is pressed.
  310. It works only with "enhanced" keyboards.
  311.  
  312.    LAlt% = BiosELAlt%
  313.  
  314.  
  315.  
  316. BiosELCtrl%
  317.  
  318. This function tells you whether the left Ctrl key is pressed.
  319. It works only with "enhanced" keyboards.
  320.  
  321.    LCtrl% = BiosELCtrl%
  322.  
  323.  
  324.  
  325. BiosERAlt%
  326.  
  327. This function tells you whether the right Alt key is pressed.
  328. It works only with "enhanced" keyboards.
  329.  
  330.    RAlt% = BiosERAlt%
  331.  
  332.  
  333.  
  334. BiosERCtrl%
  335.  
  336. This function tells you whether the right Ctrl key is pressed.
  337. It works only with "enhanced" keyboards.
  338.  
  339.    RCtrl% = BiosERCtrl%
  340.  
  341.  
  342.  
  343. BiosESysRq%
  344.  
  345. This function tells you whether the SysRq key is pressed.  It
  346. works only with "enhanced" keyboards.
  347.  
  348.    SysRq% = BiosESysRq%
  349.  
  350. BiosFloppies%
  351.  
  352. This function returns the number of floppy drives installed.
  353.  
  354.    Floppies% = BiosFloppies%
  355.  
  356.  
  357.  
  358. BiosGetEKeyW$
  359.  
  360. This function reads a character from the keyboard.  It works
  361. like INKEY$, but waits until a key is pressed before returning.
  362.  
  363. Actually, it doesn't work quite like INKEY$, which is to its
  364. advantage.  It always returns a two-character string, where the
  365. first character is the ASCII code (CHR$(0) for extended keys,
  366. like function keys and arrow keys) and the second character is
  367. the scan code.  For normal keys, the scan code is always the
  368. same regardless of the shift state of the key.  That is, the
  369. scan code for "A" is the scan code for "a" is the scan code for
  370. Ctrl-A is the scan code for Alt-A.  Rose is a rose is a rose,
  371. eh?  This is an occasionally useful property.
  372.  
  373. Note that this keyboard service is for use with "enhanced"
  374. keyboards only. Use BiosGetKeyW$ for older keyboards.
  375.  
  376.    Ky$ = BiosGetEKeyW$
  377.  
  378.  
  379.  
  380. BiosGetKeyW$
  381.  
  382. This function reads a character from the keyboard.  It works
  383. like INKEY$, but waits until a key is pressed before returning.
  384.  
  385. Actually, it doesn't work quite like INKEY$, which is to its
  386. advantage.  It always returns a two-character string, where the
  387. first character is the ASCII code (CHR$(0) for extended keys,
  388. like function keys and arrow keys) and the second character is
  389. the scan code.  For normal keys, the scan code is always the
  390. same regardless of the shift state of the key.  That is, the
  391. scan code for "A" is the scan code for "a" is the scan code for
  392. Ctrl-A is the scan code for Alt-A.  Rose is a rose is a rose,
  393. eh?  This is an occasionally useful property.
  394.  
  395. Note that this keyboard service, for reasons known only to IBM,
  396. is designed to ignore the new key codes for "enhanced"
  397. keyboards.  This means it won't detect F11 or F12, for
  398. instance.  Use BiosGetEKeyW$ for enhanced keyboards.
  399.  
  400.    Ky$ = BiosGetKeyW$
  401.  
  402. BiosGetVideo
  403.  
  404. This routine returns information about the current video mode:
  405. the width of the screen (text columns), the screen mode, and
  406. the active display page.
  407.  
  408. The screen mode uses a different numbering system than BASIC
  409. (or, more properly, vice versa).  Standard BIOS screen modes
  410. are as follows:
  411.  
  412.   Mode    Type       Resolut.  Colr  Displ.      Adapter
  413.   ----  ---------    --------  ----  ------    -----------
  414.     0   text mode     40x25     16    mono     CGA/EGA/VGA
  415.     1   text mode     40x25     16    color    CGA/EGA/VGA
  416.     2   text mode     80x25     16    mono     CGA/EGA/VGA
  417.     3   text mode     80x25     16    color    CGA/EGA/VGA
  418.     4   graphics     320x200     4    color    CGA/EGA/VGA
  419.     5   graphics     320x200     4    mono     CGA/EGA/VGA
  420.     6   graphics     640x200     2    color    CGA/EGA/VGA
  421.     7   text mode     80x25     ..    mono     MDA/Herc
  422.    13   graphics     320x200    16    color    EGA/VGA
  423.    14   graphics     640x200    16    color    EGA/VGA
  424.    15   graphics     640x350     2    mono     EGA/VGA
  425.    16   graphics     640x350    16    color    EGA/VGA
  426.    17   graphics     640x480     4    mono     VGA
  427.    18   graphics     640x480    16    color    VGA
  428.    19   graphics     320x200   256    color    VGA
  429.  
  430.    BiosGetVideo Columns%, ScreenMode%, ActivePage%
  431.  
  432.  
  433.  
  434. BiosInitPrt%
  435.  
  436. This function initializes the selected printer.  It also
  437. returns the status of the printer. Status information is
  438. encoded at the bit level, as follows:
  439.  
  440.    7   not busy
  441.    6   acknowledge
  442.    5   out of paper
  443.    4   selected
  444.    3   I/O error
  445.    2   unused
  446.    1   unused
  447.    0   timeout
  448.  
  449.    Status% = BiosInitPrt%(Port%)
  450.  
  451. BiosIns%
  452.  
  453. This function tells you whether the Insert toggle is on.
  454.  
  455.    Ins% = BiosIns%
  456.  
  457.  
  458.  
  459. BiosJoyPosn
  460.  
  461. This routine returns the current joystick coordinates.  If only
  462. one joystick is installed, the second set of coordinates is
  463. meaningless, unless a FlightStick is in use.  The FlightStick
  464. has a "throttle" dial, the value for which is returned as the Y
  465. position of an imaginary second joystick.
  466.  
  467. Coordinates typically range from 0-400 or so.  It is a good
  468. idea to include a joystick calibration routine in your program
  469. since the numbers are likely to vary significantly.
  470.  
  471.    BiosJoyPosn Stick1X%, Stick1Y%, Stick2X%, Stick2Y%
  472.  
  473.  
  474.  
  475. BiosJoyPress
  476.  
  477. This routine tells you which joystick buttons are being
  478. pressed.  If only one joystick is installed, the second set of
  479. coordinates is meaningless.
  480.  
  481.    BiosJoyPress Stick1A%, Stick1B%, Stick2A%, Stick2B%
  482.  
  483.  
  484.  
  485. BiosKeyIn%
  486.  
  487. This function stuffs a key into the keyboard buffer.  It is for
  488. AT-type computers only.  You may stuff up to 15 keys into the
  489. normal buffer, depending on whether there are already any keys
  490. pending.  A -1 will be returned if the keyboard buffer was full
  491. and the key couldn't be stuffed.
  492.  
  493. The key specification must be as a two-character string.  The
  494. first character is the ASCII code and the second, the scan
  495. code.  In a pinch, you can usually get away with using CHR$(0)
  496. for the scan code, but it is better to include the scan code
  497. (use the BiosGetKeyW$ routine to find out the appropriate
  498. code).
  499.  
  500.    ErrCode% = BiosKeyIn%(Ky$)
  501.  
  502. BiosKeyRep
  503.  
  504. This routine allows you to change the key repeat rate on
  505. AT-type computers.  You must specify the delay before repeat:
  506. 0-3, for 250mS to 1 second.  You must also specify the repeat
  507. rate: 0-31, for 30/second to 2/second (12 is the default).
  508.  
  509.    BiosKeyRep RepDelay%, RepRate%
  510.  
  511.  
  512.  
  513. BiosLShift%
  514.  
  515. This function tells you whether the left Shift key is pressed.
  516.  
  517.    LShift% = BiosLShift%
  518.  
  519.  
  520.  
  521. BiosMHide
  522.  
  523. This routine hides the mouse cursor, making it invisible.
  524.  
  525.    BiosMHide
  526.  
  527.  
  528.  
  529. BiosMInit%
  530.  
  531. This function tells you whether a mouse is available.  If so,
  532. it returns the number of buttons the mouse has.  If not, it
  533. returns a zero.
  534.  
  535. This function should be used at the start of any program which
  536. expects to use a mouse.  You must not use any other mouse
  537. routine unless a mouse is available.  Besides that, BiosMInit%
  538. initializes the mouse driver to a proper starting state.
  539.  
  540.    Buttons% = BiosMInit%
  541.  
  542.  
  543.  
  544. BiosMLButton%
  545.  
  546. This function tells you whether the left mouse button is being
  547. pressed.
  548.  
  549.    Pressed% = BiosMLButton%
  550.  
  551. BiosMLClick
  552.  
  553. This routine tells you how many times the left mouse button has
  554. been pressed since the last time you checked.  It also returns
  555. the position of the mouse cursor as of the last left button
  556. press.
  557.  
  558. See BiosWhereX% and BiosWhereY% for information on the unusual
  559. handling of coordinates in text and CGA SCREEN 1 modes.
  560.  
  561.    BiosMLClick Clicks%, X%, Y%
  562.  
  563.  
  564.  
  565. BiosMLocate
  566.  
  567. This routine sets the position of the mouse cursor.  Note that
  568. coordinate handling is peculiar for text mode and SCREEN 1, for
  569. which a virtual screen of 640x200 is assumed.  This means that
  570. you will have to double your X coordinate when in SCREEN 1
  571. mode.  For text mode, first subtract one from each coordinate,
  572. then multiply the coordinate by eight.  Also keep in mind that
  573. for text mode the coordinates are normally Row, Column, but are
  574. here handled as if in graphics mode, so you need to use X, Y
  575. (or Column, Row) order instead.
  576.  
  577. This is another fine mess Microsoft's gotten us into!
  578.  
  579.    BiosMLocate X%, Y%
  580.  
  581.  
  582.  
  583. BiosMLRelease
  584.  
  585. This routine tells you how many times the left mouse button has
  586. been released since the last time you checked.  It also returns
  587. the position of the mouse cursor as of the last left button
  588. release.
  589.  
  590. See BiosWhereX% and BiosWhereY% for information on the unusual
  591. handling of coordinates in text and CGA SCREEN 1 modes.
  592.  
  593.    BiosMLRelease Releases%, X%, Y%
  594.  
  595.  
  596.  
  597. BiosMMButton%
  598.  
  599. This function tells you whether the middle mouse button is
  600. being pressed.  The results will not be meaningful on a
  601. two-button mouse.
  602.  
  603.    Pressed% = BiosMMButton%
  604.  
  605. BiosMMClick
  606.  
  607. This routine tells you how many times the middle mouse button
  608. has been pressed since the last time you checked.  It also
  609. returns the position of the mouse cursor as of the last middle
  610. button press.  The results will not be meaningful on a
  611. two-button mouse.
  612.  
  613. See BiosWhereX% and BiosWhereY% for information on the unusual
  614. handling of coordinates in text and CGA SCREEN 1 modes.
  615.  
  616.    BiosMMClick Clicks%, X%, Y%
  617.  
  618.  
  619.  
  620. BiosMMRelease
  621.  
  622. This routine tells you how many times the middle mouse button
  623. has been released since the last time you checked.  It also
  624. returns the position of the mouse cursor as of the last middle
  625. button release.  The results will not be meaningful on a
  626. two-button mouse.
  627.  
  628. See BiosWhereX% and BiosWhereY% for information on the unusual
  629. handling of coordinates in text and CGA SCREEN 1 modes.
  630.  
  631.    BiosMMRelease Releases%, X%, Y%
  632.  
  633.  
  634.  
  635. BiosMRButton%
  636.  
  637. This function tells you whether the right mouse button is being
  638. pressed.
  639.  
  640.    Pressed% = BiosMRButton%
  641.  
  642.  
  643.  
  644. BiosMRClick
  645.  
  646. This routine tells you how many times the right mouse button
  647. has been pressed since the last time you checked.  It also
  648. returns the position of the mouse cursor as of the last right
  649. button press.
  650.  
  651. See BiosWhereX% and BiosWhereY% for information on the unusual
  652. handling of coordinates in text and CGA SCREEN 1 modes.
  653.  
  654.    BiosMRClick Clicks%, X%, Y%
  655.  
  656. BiosMRRelease
  657.  
  658. This routine tells you how many times the right mouse button
  659. has been released since the last time you checked.  It also
  660. returns the position of the mouse cursor as of the last right
  661. button release.
  662.  
  663. See BiosWhereX% and BiosWhereY% for information on the unusual
  664. handling of coordinates in text and CGA SCREEN 1 modes.
  665.  
  666.    BiosMRRelease Releases%, X%, Y%
  667.  
  668.  
  669.  
  670. BiosMShow
  671.  
  672. This routine tries to make the mouse cursor visible.  However,
  673. the mouse driver maintains a visibility count, so if multiple
  674. calls were made to BiosMHide, it will take just as many calls to
  675. BiosMShow to really make the cursor visible.
  676.  
  677.    BiosMShow
  678.  
  679.  
  680.  
  681. BiosMWhereX%
  682.  
  683. This function tells you the X coordinate of the mouse cursor.
  684. This is expressed in graphics coordinates even when text mode
  685. is in use.  For normal text modes and both CGA modes, a virtual
  686. screen of 640x200 is assumed.  So, for 320x200 CGA mode, divide
  687. the coordinate by two.  For 80x25 text mode, divide it by
  688. eight.
  689.  
  690.    X% = BiosMWhereX%
  691.  
  692.  
  693.  
  694. BiosMWhereY%
  695.  
  696. This function tells you the Y coordinate of the mouse cursor.
  697. This is expressed in graphics coordinates even when text mode
  698. is in use.  For normal text modes and both CGA modes, a virtual
  699. screen of 640x200 is assumed.  So, for 80x25 text mode, divide
  700. it by eight.
  701.  
  702.    Y% = BiosMWhereY%
  703.  
  704.  
  705.  
  706. BiosMWindow
  707.  
  708. This routine restricts the mouse cursor to a specified area of
  709. the screen.  See BiosMLocate for a description of the unusual
  710. cursor handling in text modes and SCREEN 1 graphics mode.
  711.  
  712.    BiosMWindow X1%, Y1%, X2%, Y2%
  713.  
  714. BiosNum%
  715.  
  716. This function tells you whether the NumLock toggle is on.
  717.  
  718.    NumLock% = BiosNum%
  719.  
  720.  
  721.  
  722. BiosPrintCh%
  723.  
  724. This function sends a character to the selected printer.  It
  725. also returns the status of the printer. Status information is
  726. encoded at the bit level, as follows:
  727.  
  728.    7   not busy
  729.    6   acknowledge
  730.    5   out of paper
  731.    4   selected
  732.    3   I/O error
  733.    2   unused
  734.    1   unused
  735.    0   timeout
  736.  
  737.    Status% = BiosPrintCh%(Port%, Ch$)
  738.  
  739.  
  740.  
  741. BiosPrtPorts%
  742.  
  743. This function returns the number of parallel (printer) ports
  744. installed.
  745.  
  746.    Ports% = BiosPrtPorts%
  747.  
  748.  
  749.  
  750. BiosPrtSc
  751.  
  752. This routine sends the screen to the printer.  It works just
  753. like pressing PrtSc (PrintScreen) on your keyboard.
  754.  
  755. If you want to print a graphics screen, you need to load the
  756. GRAPHICS.COM TSR that came with DOS.  All versions of GRAPHICS
  757. support CGA graphics modes.  Not all of them support EGA or VGA.
  758.  
  759.    BiosPrtSc
  760.  
  761.  
  762.  
  763. BiosRShift%
  764.  
  765. This function tells you whether the right Shift key is pressed.
  766.  
  767.    RShift% = BiosRShift%
  768.  
  769. BiosScroll%
  770.  
  771. This function tells you whether the ScrollLock toggle is on.
  772.  
  773.    ScrollLock% = BiosScroll%
  774.  
  775.  
  776.  
  777. BiosScrollDn
  778.  
  779. This routine scrolls any part of the screen down.  You may
  780. specify the number of times to scroll.  If you specify 0, the
  781. area will be cleared instead of scrolled.  You must specify the
  782. colors to use on the new line(s) that was created by the
  783. scrolling action.
  784.  
  785.    BiosScrollDn TopRow%, LfCol%, BotRow%, RtCol%, Times%,
  786.       Fore%, Back%
  787.  
  788.  
  789.  
  790. BiosScrollUp
  791.  
  792. This routine scrolls any part of the screen up.  You may
  793. specify the number of times to scroll.  If you specify 0, the
  794. area will be cleared instead of scrolled.  You must specify the
  795. colors to use on the new line(s) that was created by the
  796. scrolling action.
  797.  
  798.    BiosScrollUp TopRow%, LfCol%, BotRow%, RtCol%, Times%,
  799.       Fore%, Back%
  800.  
  801.  
  802.  
  803. BiosXClose
  804.  
  805. This routine closes an area of XMS associated with a specified
  806. handle.  This must be done when you are finished using that
  807. area of XMS, so other routines and programs will be able to use
  808. it again later.
  809.  
  810.    BiosXClose Handle%
  811.  
  812.  
  813.  
  814. BiosXExists%
  815.  
  816. This function tells you whether an XMS driver is installed.
  817.  
  818.    XMS% = BiosXExists%
  819.  
  820. BiosXLFree&
  821.  
  822. This function tells you the size of the largest block of XMS
  823. memory that is available, in kilobytes.  Compare with
  824. BiosXTFree&.
  825.  
  826.    LargestFreeBlock& = BiosXLFree&
  827.  
  828.  
  829.  
  830. BiosXOpen
  831.  
  832. This routine opens an area of XMS memory for use.  The size is
  833. specified in kilobytes.  If the specified amount of space can
  834. be allocated, a handle is returned which you will use to access
  835. that block in the future.  If there is an error allocating that
  836. much memory, a non-zero error code will be returned.
  837.  
  838. Note that handles are a limited resource, so you should try to
  839. use as few of them as possible.
  840.  
  841. The maximum size theoretically possible under the XMS spec is
  842. 65,535 kilobytes (64 megabytes).  I haven't tried this in
  843. practice!
  844.  
  845.    BiosXOpen KBytes&, Handle%, ErrCode%
  846.  
  847.  
  848.  
  849. BiosXRead
  850.  
  851. This routine gets information from XMS memory.  You must
  852. specify the memory handle, the starting offset within the
  853. memory associated with that handle, and the number of bytes to
  854. transfer.  The number of bytes must be an EVEN number, but is
  855. not limited to 64k.  Finally, you must specify where to place
  856. the information as a segment and offset in conventional memory.
  857. For BASIC arrays and so forth, you can get this data using the
  858. VARSEG and VARPTR functions.
  859.  
  860. Another common place to put the data might be the display.  For
  861. text modes, this is a simple transfer.  Use an offset of 0 and
  862. a segment of either &HB000 (MDA/Herc) or &B800 (CGA/EGA/VGA).
  863.  
  864.    BiosXRead Handle%, Posn&, Bytes&, DSeg%, DOfs%
  865.  
  866. BiosXResize
  867.  
  868. This routine allows you to change the size of a previously
  869. allocated block of XMS memory.  You must specify the handle of
  870. the area to resize and the desired size, in kilobytes.  If
  871. unable to reallocate the block as specified, BiosXResize will
  872. return a non-zero error code.
  873.  
  874.    BiosXResize Handle%, Bytes&, ErrCode%
  875.  
  876.  
  877.  
  878. BiosXTFree&
  879.  
  880. This function returns the total amount of available XMS memory
  881. in kilobytes.  Compare with BiosXLFree&.
  882.  
  883.    TotalFree& = BiosXTFree&
  884.  
  885.  
  886.  
  887. BiosXVer%
  888.  
  889. This function returns the XMS driver version, multiplied by
  890. 100.  For instance, version 1.01 would be returned as 101.
  891.  
  892.    XMSver! = BiosXVer% / 100!
  893.  
  894.  
  895.  
  896. BiosXWrite
  897.  
  898. This routine puts information into XMS memory.  You must
  899. specify the memory handle, the starting offset within the
  900. memory associated with that handle, and the number of bytes to
  901. transfer.  The number of bytes must be an EVEN number, but is
  902. not limited to 64k.  Finally, you must specify where to get the
  903. information as a segment and offset in conventional memory. For
  904. BASIC arrays and so forth, you can get this data using the
  905. VARSEG and VARPTR functions.
  906.  
  907. Another common place from which to get the data might be the
  908. display.  For text modes, this is a simple transfer.  Use an
  909. offset of 0 and a segment of either &HB000 (MDA/Herc) or &B800
  910. (CGA/EGA/VGA).
  911.  
  912.    BiosXWrite Handle%, Posn&, Bytes&, DSeg%, DOfs%
  913.  
  914. DosBreak%
  915.  
  916. This function returns the current level of Break checking.  At
  917. level 0, DOS checks for Ctrl-C/Break only during keyboard input
  918. or screen output.  At level -1, DOS also checks during disk
  919. access.
  920.  
  921.    ExtendedBreak% = DosBreak%
  922.  
  923.  
  924.  
  925. DosBreakOff
  926.  
  927. This routine disables extended Break checking, so DOS only
  928. checks for Break during keyboard input or screen output.
  929.  
  930.    DosBreakOff
  931.  
  932.  
  933.  
  934. DosBreakOn
  935.  
  936. This routine enables extended Break checking, so DOS checks for
  937. Break during disk access as well as during keyboard input or
  938. screen output.
  939.  
  940.    DosBreakOn
  941.  
  942.  
  943.  
  944. DosDelDir%
  945.  
  946. This function deletes a directory.  The directory must be empty
  947. and must not be the current or root directory.  Unlike RMDIR,
  948. this function does not require an ON ERROR handler to cope with
  949. normal errors, as it returns an error code directly (0 if no
  950. error).  ON ERROR is only required if you need critical error
  951. handling.
  952.  
  953. The path name must be in ASCIIZ form, that is, with a CHR$(0)
  954. at the end.  This can be handled when the routine is called:
  955.  
  956.    ErrCode% = DosDelDir% (SubDir$ + CHR$(0))
  957.  
  958.  
  959.  
  960. DosDelFile%
  961.  
  962. This function deletes a file.  It takes up less space than the
  963. corresponding BASIC statement, KILL.  Unlike KILL, it does not
  964. require an ON ERROR handler to cope with normal errors, as it
  965. returns an error code directly (0 if no error).  ON ERROR is
  966. only required if you need critical error handling.
  967.  
  968. The filename must be in ASCIIZ form, that is, with a CHR$(0) at
  969. the end.  This can be handled when the routine is called:
  970.  
  971.    ErrCode% = DosDelFile% (File$ + CHR$(0))
  972.  
  973.  
  974.  
  975. DosDiskInfo
  976.  
  977. This routine returns an assortment of information about a given
  978. disk drive: sectors per cluster, free clusters, bytes per
  979. sector, and total clusters.  From this, you can derive further
  980. information such as how much disk space is available and the
  981. total disk space.
  982.  
  983. You may specify a null drive to get the information from the
  984. default drive.
  985.  
  986. If there was an error, SecsPerClus& will be -1.
  987.  
  988.    DosDiskInfo Drive$, SecsPerClus&, FreeClus&, BytesPerSec&,
  989.       TotalClus&
  990.  
  991.  
  992.  
  993. DosGetDay$
  994.  
  995. This function returns the current day of the week as a
  996. three-character string.  For instance, on Wednesday the result
  997. would be "Wed".
  998.  
  999.    Today$ = DosGetDay$
  1000.  
  1001. DosGetDir$
  1002.  
  1003. This function returns the default directory on the specified
  1004. drive.  If there was an error, a null string ("") will be
  1005. returned.
  1006.  
  1007. You may specify a null drive to get the directory of the
  1008. default drive.
  1009.  
  1010.    Subdir$ = DosGetDir$(Drive$)
  1011.  
  1012.  
  1013.  
  1014. DosGetDisk$
  1015.  
  1016. This function returns the letter of the currently selected
  1017. disk drive.
  1018.  
  1019.    Drive$ = DosGetDisk$
  1020.  
  1021.  
  1022.  
  1023. DosGetFAttr%
  1024.  
  1025. This function returns the file attributes of a specified file.
  1026. The file must be terminated by CHR$(0).  If there was an error,
  1027. -1 will be returned.  Otherwise, the result will be any
  1028. combination of the following, added together:
  1029.  
  1030.     1   read-only
  1031.     2   hidden
  1032.     4   system
  1033.     8   volume label
  1034.    16   subdirectory
  1035.    32   archive
  1036.  
  1037. The results can be most conveniently decoded using the AND
  1038. function.  For instance:
  1039.  
  1040.    IF DosGetFAttr%(File$ + CHR$(0)) AND 16 THEN
  1041.       PRINT "Subdirectory"
  1042.    END IF
  1043.  
  1044.  
  1045.  
  1046. DosGetKey$
  1047.  
  1048. This function attempts to read a character from DOS standard
  1049. input (normally the keyboard).  It works like INKEY$.
  1050.  
  1051. Standard input can be redirected from the command line, so it
  1052. may get information from a file or device instead of the
  1053. keyboard.  That is one of the advantages of this function.
  1054.  
  1055.    Ky$ = DosGetKey$
  1056.  
  1057. DosGetKeyW$
  1058.  
  1059. This function reads a character from DOS standard input
  1060. (normally the keyboard).  It works like INKEY$, but waits until
  1061. a key is pressed before returning.
  1062.  
  1063. Standard input can be redirected from the command line, so it
  1064. may get information from a file or device instead of the
  1065. keyboard.  That is one of the advantages of this function.
  1066.  
  1067.    Ky$ = DosGetKeyW$
  1068.  
  1069.  
  1070.  
  1071. DosGetVersion%
  1072.  
  1073. This function returns the DOS version multiplied by 100.  For
  1074. instance, DOS 2.11 would be returned as 211.
  1075.  
  1076.    DOSver! = DosGetVersion% / 100!
  1077.  
  1078.  
  1079.  
  1080. DosMakeDir%
  1081.  
  1082. This function creates a directory.  Unlike MKDIR, it does not
  1083. require an ON ERROR handler to cope with normal errors, as it
  1084. returns an error code directly (0 if no error).  ON ERROR is
  1085. only required if you need critical error handling.
  1086.  
  1087. The path name must be in ASCIIZ form, that is, with a CHR$(0)
  1088. at the end.  This can be handled when the routine is called:
  1089.  
  1090.    ErrCode% = DosMakeDir% (SubDir$ + CHR$(0))
  1091.  
  1092.  
  1093.  
  1094. DosRenFile%
  1095.  
  1096. This function renames a file, and/or moves it to a new
  1097. directory on the same drive.  It can't move a file across
  1098. drives.  It takes less space than NAME, and does not require an
  1099. ON ERROR handler to cope with normal errors, as it returns an
  1100. error code directly (0 if no error).  ON ERROR is only needed
  1101. if you require critical error handling.
  1102.  
  1103. The path name must be in ASCIIZ form, that is, with a CHR$(0)
  1104. at the end.  This can be handled when the routine is called:
  1105.  
  1106.    ErrCode% = DosRenFile% (OldFile$+CHR$(0), NewFile$+CHR$(0))
  1107.  
  1108.  
  1109.  
  1110. DosSetDir%
  1111.  
  1112. This function sets the default directory.  Unlike CHDIR, it
  1113. does not require an ON ERROR handler to cope with normal
  1114. errors, as it returns an error code directly (0 if no error).
  1115. ON ERROR is only required if you need critical error handling.
  1116.  
  1117. The path name must be in ASCIIZ form, that is, with a CHR$(0)
  1118. at the end.  This can be handled when the routine is called:
  1119.  
  1120.    ErrCode% = DosSetDir% (SubDir$ + CHR$(0))
  1121.  
  1122.  
  1123.  
  1124. DosSetDisk%
  1125.  
  1126. This function sets the default disk drive.  It also returns the
  1127. number of logical drives in the system.
  1128.  
  1129. Note that a logical drive may be considered being like a drive
  1130. letter-- it may refer to part of a larger physical drive, to a
  1131. RAMdisk, to some other device, or to nothing at all.
  1132.  
  1133.    LogicalDrives% = DosSetDisk% (Drive$)
  1134.  
  1135.  
  1136.  
  1137. DosSetFAttr%
  1138.  
  1139. This function sets the file attributes of a specified file.
  1140. The file must be terminated by CHR$(0).  If there was an error,
  1141. -1 will be returned.  Otherwise, 0 will be returned.
  1142.  
  1143. You may set any combination of the following attributes, added
  1144. together:
  1145.  
  1146.     1   read-only
  1147.     2   hidden
  1148.     4   system
  1149.    32   archive
  1150.  
  1151.    ErrCode% = DosSetFAttr%(File$ + CHR$(0), FAttr%)
  1152.  
  1153. DosVerify%
  1154.  
  1155. This function tells you whether disk write verification is
  1156. turned on.
  1157.  
  1158.    Verify% = DosVerify%
  1159.  
  1160.  
  1161.  
  1162. DosVerifyOff
  1163.  
  1164. This routine disables disk write verification.  Verification
  1165. provides better file security but slows things down.  It is
  1166. normally off by default.
  1167.  
  1168.    DosVerifyOff
  1169.  
  1170.  
  1171.  
  1172. DosVerifyOn
  1173.  
  1174. This routine enables disk write verification.  Verification
  1175. provides better file security but slows things down.  It is
  1176. normally off by default.
  1177.  
  1178.    DosVerifyOn
  1179.  
  1180.  
  1181.  
  1182. DosWriteSt
  1183.  
  1184. This routine writes a string to the DOS standard output
  1185. (normally the display).
  1186.  
  1187. Standard output can be redirected from the command line, so it
  1188. may write information to a file or device instead of the
  1189. display.  It also supports device drivers such as ANSI.SYS.
  1190. That is one of the advantages of this routine.
  1191.  
  1192.    DosWriteSt St$
  1193.  
  1194.