home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / qb / qbdos.lzh / QBDOS.DOC < prev    next >
Text File  |  1987-10-14  |  60KB  |  2,905 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                                    Q B W A R E / 1
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.                                       QBDOS.LIB
  24.  
  25.                          THE QUICKBASIC DOS INTERFACE LIBRARY
  26.  
  27.  
  28.  
  29.                                      Version 1.0
  30.  
  31.  
  32.  
  33.  
  34.  
  35.                            R E F E R E N C E    M A N U A L
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.                                      AJM Software
  48.                                     P.O. Box 5303
  49.                                 Arvada, Co. 80005-0303
  50.  
  51.  
  52.  
  53.  
  54.  
  55.                            Copyright (c) 1987 AJM Software
  56.                                  All Rights Reserved
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.                                   TABLE OF CONTENTS
  74.  
  75.  
  76.       I.    Introduction to QBDOS.LIB ...........................    2
  77.  
  78.       II.   A word about User supported software ................    3
  79.  
  80.       III.  Warranty Information ................................    5
  81.  
  82.       IV.   Registration and License Information ................    6
  83.  
  84.       V.    Product Support .....................................   10
  85.  
  86.       VI.   AJM Software Shareware Products .....................   11
  87.  
  88.       VII.  Using QBDOS.LIB .....................................   12
  89.  
  90.       VIII. PRECAUTIONS (READ THIS SECTION) .....................   14
  91.  
  92.       IX.   Miscellaneous DOS services ..........................   15
  93.  
  94.       X.    The Print Spooler ...................................   25
  95.  
  96.       XI.   DOS Memory Management ...............................   31
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.                        Copyright (c) 1987, AJM Software 
  128.                                     -Page 1-
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.                               Introduction to QBDOS.LIB
  141.  
  142.  
  143.       QBDOS.LIB is the part 2 of the 3-part QBWARE/1 package.  The entire
  144.       package also includes QBFILE.LIB and QBBIOS.LIB.  The other packages will
  145.       are described briefly in this documentation and are available immediately
  146.       through AJM Software or should be available through normal shareware chan-
  147.       nels before November 1, 1987.  All of these products are sold together as
  148.       QBWARE/1, but because of the wide functional differences between each
  149.       library, the documentation and library routines are being kept separate.
  150.       Any mention of QBWARE/1 in this documentation references all three
  151.       libraries.
  152.  
  153.       QBDOS.LIB is a series of assembler language subroutines specifically
  154.       designed to provide an easy to use interface between Quickbasic programs
  155.       and certain DOS facilities that would normally be unavailable to a
  156.       Quickbasic program.  These include access to the DOS print spooler and
  157.       memory management routines.  It is very important to read the manual
  158.       before using any of these services, as proper setup is important.
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.       Quickbasic is a registered trademark of Microsoft.
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.                        Copyright (c) 1987, AJM Software 
  194.                                     -Page 2-
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.                          A Word about User-supported Software
  208.  
  209.     User-supported software is a means for the computing community to receive
  210.     quality software while directly supporting software authors.  It is based
  211.     on the ideas that:
  212.  
  213.           The value and utility of software is best assessed by the
  214.           user on his or her own system.  Only after using a program
  215.           can one really determine whether it serves personal
  216.           applications, needs and tastes.
  217.  
  218.           The creation of independent personal computer software can
  219.           and should be supported by the computing community.
  220.  
  221.           Copying of programs should be encouraged, rather than
  222.           restricted.  The ease with which software can be distributed
  223.           outside traditional commercial channels reflects the
  224.           strength, rather than the weakness, of electronic
  225.           information.
  226.  
  227.     Under the user supported concept, anyone may request a copy of a
  228.     user-supported program by sending a blank, formatted disk to the program
  229.     author together with an addressed, postage-paid return mailer.  A copy of
  230.     the program, along with documentation on disk, will be sent by return
  231.     mail on the user's disk.
  232.  
  233.     The program carries a notice suggesting registration for the program. You
  234.     should register if you are going to use the program on a regular basis.
  235.     Regardless of whether you register and use the program, you are
  236.     encouraged to copy and distribute the program for the private,
  237.     non-commercial, trial use of others.
  238.  
  239.     User supported software is generally not public domain material; most
  240.     programs of this nature carry a copyright notice.  Rather, the author has
  241.     licensed you to copy and use the program under certain conditions.
  242.     Likewise, user supported software is not intended to be free software; it
  243.     is an experiment in economics, not altruism.  It is intended to provide
  244.     quality software at a low price, while directly supporting the author,
  245.     without the overhead of distributors, dealers and advertising that
  246.     produces $500 software packages.
  247.  
  248.     User supported software is having a hard time.  More and more packages
  249.     are being taken out of this market, and offered as more traditional, and
  250.     expensive, products.  The reason for this is simple: lots of people are
  251.     using the packages but very few are paying for them.  And without the
  252.     support of the users, there is absolutely no incentive for software
  253.     authors to provide their programs in this fashion.
  254.  
  255.  
  256.  
  257.  
  258.  
  259.                        Copyright (c) 1987, AJM Software 
  260.                                     -Page 3-
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.     There are many good reasons to register.  Besides supporting the author
  275.     (that is, paying for the software you use), you generally get better
  276.     support and receive mailed notification of updates and other products.
  277.  
  278.     In conclusion, if you regularly use a user supported program (sometimes
  279.     called Freeware or Shareware) and have not sent in a registration to the
  280.     author, please do so now.  Only through the financial support of users
  281.     will this kind of inexpensive software continue to be available.
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.                        Copyright (c) 1987, AJM Software 
  326.                                     -Page 4-
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.                                     WARRANTY
  340.  
  341.  
  342.     AJM Software makes no warranty of any kind, express or implied,
  343.     including without limitation, any warranties of merchantability
  344.     and/or fitness for a particular purpose.  AJM Software shall
  345.     not be liable for any damages, whether direct, indirect, special or
  346.     consequential arising from a failure of this program to operate in the
  347.     manner desired by the user.  AJM Software shall not be liable
  348.     for any damage to data or property which may be caused directly or
  349.     indirectly by use of the program.
  350.  
  351.     IN NO EVENT WILL AJM Software BE LIABLE TO YOU FOR ANY DAMAGES,
  352.     INCLUDING ANY LOST PROFITS, LOST SAVINGS OR OTHER INCIDENTAL OR
  353.     CONSEQUENTIAL DAMAGES ARISING OUT OF YOUR USE OR INABILITY TO USE
  354.     THE PROGRAM, OR FOR ANY CLAIM BY ANY OTHER PARTY.
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.                        Copyright (c) 1987, AJM Software 
  392.                                     -Page 5-
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.                         Registration and ordering information
  406.  
  407.  
  408.     A QBWARE/1 registration licenses you to use the product on a regular
  409.     basis.  Registration includes mailed notification of updates and priority
  410.     support.
  411.     Users need register only one version of QBWARE/1 - registration includes
  412.     licensed use of all upgrades.
  413.  
  414.     Individual registrations for QBWARE/1 are available from AJM Software
  415.     at a cost of $39.00.  AJM will provide you with the most current release
  416.     of QBDOS.LIB in both object and assembly source code form on 5 1/4 inch
  417.     diskette.  The reference manual will also be included on the diskette.
  418.     A bound reference manual is available for an additional $25.00.
  419.  
  420.     Registration entitles you to include any QBWARE/1 routine in your
  421.     applications for distribution without royalty.  Including QBWARE/1
  422.     in your applications without registration is strictly prohibited.
  423.  
  424.     Quantity discounts are available.  Please see the section titled
  425.     'Corporate and quantity purchases'.
  426.  
  427.     In addition, evaluation disks are available at any time for $10.  These
  428.     disks do not include registration.  The fee covers diskette, postage and
  429.     handling.
  430.  
  431.     Please use the enclosed order form when placing an order.
  432.  
  433.     ORDERS OUTSIDE THE US: Please include an additional $10.00 to cover
  434.     additional postage and handling costs.  No C.O.D.'s will be accepted
  435.     on orders delivered outside the US.
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.                        Copyright (c) 1987, AJM Software 
  458.                                     -Page 6-
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.     Remit to:                     AJM Software                     Order Form
  472.                                   P.O. Box 5303
  473.                               Arvada, CO 80005-0303
  474.  
  475.     Please send:
  476.  
  477.     ____ QBWARE/1 Disk (Evaluation only) ........... @ $ 10.00 ea  $ ______
  478.          (includes QBBIOS,QBDOS,QBDOS routines and manual on disk)
  479.  
  480.     ____ QBWARE/1 Registration ..................... @ $ 39.00 ea  $ ______
  481.          (includes QBWARE/1 disk and source code)
  482.  
  483.     ____ QBWARE/1 Bound Reference Manual ........... @ $ 25.00 ea  $ ______
  484.             (includes only the reference manual)
  485.                                                          Subtotal    ______
  486.  
  487.                                                     Less Discount   <______>
  488.  
  489.                                                C.O.D. Fee ($5.00)    ______
  490.  
  491.                                                              Total $ ______
  492.  
  493.     Payment by:   ( ) Check   ( ) C.O.D.
  494.  
  495.        Name: ____________________________________________________________
  496.  
  497.     Company: ____________________________________________________________
  498.  
  499.     Address: ____________________________________________________________
  500.  
  501.            : ____________________________________________________________
  502.  
  503.            : ____________________________________________________________
  504.  
  505.     Day Phone: _________________________ Eve: ___________________________
  506.  
  507.  
  508.  
  509.     ORDERS OUTSIDE THE US: Please include an additional $10.00 to cover
  510.     additional postage and handling costs.  No C.O.D.'s will be accepted
  511.     on orders delivered outside the US.
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.                        Copyright (c) 1987, AJM Software 
  524.                                     -Page 7-
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.                         Corporate and Quantity Purchases
  539.  
  540.  
  541.     All corporate, business, government or other commercial users of QBDOS.LIB
  542.     must be registered.  We offer quantity discounts starting at the sixth
  543.     copy.
  544.  
  545.     Orders in quantities of less than 50 units are handled as bulk purchases.
  546.     Purchases of over 50 units may be handled as quantity purchases or as
  547.     corporate licensing agreements.  Licensing agreements allow duplication
  548.     and distribution of specific numbers of copies within the licensed
  549.     institution.  Duplication of multiple copies is not allowed except
  550.     through execution of a licensing agreement.  Please write for
  551.     details.
  552.  
  553.     The quantity purchase discounts are as follows:
  554.  
  555.             0- 5  copies:      no discount
  556.             6- 20 copies:     20% discount
  557.            21+    copies:     40% discount
  558.  
  559.     ALL PRICES AND DISCOUNTS ARE SUBJECT TO CHANGE WITHOUT NOTICE.  Discounts
  560.     are not cumulative; they apply to single orders of like products only.
  561.     Unit prices are the same as for individual users.
  562.  
  563.     WARNING: YOU MAY NOT USE QBWARE/1 WITHIN YOUR ORGANIZATION WITHOUT A PRIOR
  564.     PURCHASE OR LICENSE ARRANGEMENT.
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.                        Copyright (c) 1987, AJM Software 
  590.                                     -Page 8-
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.                                      LICENSE
  604.  
  605.     All versions of QBWARE/1, including version 1.0, are not public domain
  606.     software, nor are they free software.
  607.  
  608.     QBWARE/1 is copyright (C) 1987 by AJM Software
  609.  
  610.     Non-registered users are granted a limited license to use QBWARE/1 on a
  611.     trial basis for the purpose of determining whether it is suitable
  612.     for their needs.  Use of QBWARE/1, except for this limited purpose,
  613.     requires registration.  Use of non-registered copies of QBWARE/1 by any
  614.     person, business, corporation, governmental agency or other entity
  615.     institution is strictly forbidden.
  616.  
  617.     Registration permits a user the license to use QBWARE/1 for development
  618.     purposes, only on a single computer.  QBWARE/1 can be included into any
  619.     program and distributed in library form only without royalty.
  620.     A registered user may use the program on a different computer,
  621.     but may not use the program on more than one computer at the same time.
  622.  
  623.     All users are granted a limited license to copy QBWARE/1 only for the
  624.     trial use of others subject to the above limitations, and also the
  625.     following:
  626.  
  627.           QBWARE/1 must be copied in unmodified form, complete with the file
  628.           containing this license information.
  629.  
  630.           The full QBWARE/1 documentation must be included with the copy.
  631.  
  632.           No fee, charge or other compensation may be accepted or requested
  633.           by any licensee, except a handling fee not to exceed $10.00
  634.  
  635.           QBWARE/1 may not be distributed in conjunction with any other
  636.           product.
  637.  
  638.           The ASSEMBLY source code for QBWARE/1 may NOT be distributed under
  639.           any circumstances.
  640.  
  641.           The object modules supplied with a registered copy of QBWARE/1
  642.           may NOT be distributed under any circumstances.
  643.  
  644.     Operators of electronic bulletin board systems (Sysops) may post QBWARE/1
  645.     for downloading by their users only as long as the above conditions are
  646.     met.
  647.  
  648.     Distributors of public domain or user supported software, other than
  649.     operators of electronic bulletin board systems, may distribute
  650.     copies of QBWARE/1 subject to the above conditions only after obtaining
  651.     written permission from AJM Software.
  652.  
  653.  
  654.  
  655.                        Copyright (c) 1987, AJM Software 
  656.                                     -Page 9-
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.                                    Product Support
  670.  
  671.     If you have any questions or comments about the use of QBWARE/1, please
  672.     fill out a problem log and send it to us.
  673.  
  674.     In your note, describe as completely as possible the problem you
  675.     are having.  Let us know your machine configuration, which routine
  676.     you are questioning, the version of QBDOS.LIB, and any resident software
  677.     installed.  If possible, include a copy (on paper) of your source code.
  678.  
  679.     Describe what steps you take before the problem occurs, and exactly what
  680.     the program does when it occurs.  If you do not provide us with a
  681.     complete description of the problem there is little we can do to help.
  682.     We'll do our best to get you past the problem, but if you are not a
  683.     registered user we do not guarantee to provide support of any kind.
  684.  
  685.     Please be patient.  We usually respond to registered users within 3
  686.     working days at the most.
  687.  
  688.     We will provide support to non-registered users at our discretion.  It
  689.     generally depends on how the request is worded and the mental disposition
  690.     of the staff person assigned to handle requests on that day.
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.                        Copyright (c) 1987, AJM Software 
  722.                                    -Page 10-
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.                            AJM Software Shareware Products
  736.  
  737.       AJM Software has developed several software products being released
  738.       through Shareware channels.  These are:
  739.  
  740.                         QBWARE/1
  741.  
  742.       QBBIOS.LIB        The Quickbasic BIOS interface library
  743.       QBDOS.LIB         The Quickbasic DOS interface library
  744.       QBDOS.LIB        The Quickbasic DOS File Mgmt interface library
  745.  
  746.                         QBWARE/2
  747.  
  748.       QBWINDOW.LIB      The Quickbasic windowing system library
  749.       QBFUNC.LIB        The Quickbasic function library
  750.  
  751.  
  752.       QBBIOS.LIB is the Quickbasic - BIOS interface library.  This is a collec-
  753.       tion of assembler routines that can be called from Quickbasic to gain
  754.       direct access to video, keyboard, disk, and printer services.  It also
  755.       provides a method of determining the computer's configuration, including
  756.       amount of RAM - conventional, extended, and LIMM expanded, number of hard
  757.       disks and floppy disks, and more.
  758.  
  759.  
  760.       QBDOS.LIB is the Quickbasic - DOS interface library.  This is a collection
  761.       of assembler routines that can be called from Quickbasic to gain access to
  762.       most of the DOS facilities.  Services include access to the print spooler
  763.       (DOS V3.00 or higher only), acquisition of an additional 64KB of string
  764.       space, access to the DOS Video routines, and routines to provide DOS redi-
  765.       rection in a Quickbasic program, and more.
  766.  
  767.  
  768.       QBDOS.LIB is the Quickbasic - DOS File Manager interface library.  This
  769.       is a collection of assembly language routines that can be called from
  770.       Quickbasic to gain access to the DOS File Manager facilities.  Services
  771.       include file open, close, and various versions of create, get, set or
  772.       change current drive or directory, read or write individual sectors, read
  773.       or write individual records within a file, get or change disk volume
  774.       names, rename or copy files, get or set file creation dates or times,
  775.       directly access the disk directory or sub-directories, and more.
  776.  
  777.       QBWARE/2 will be released as a Shareware product on December 1, 1987.
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.                        Copyright (c) 1987, AJM Software 
  788.                                    -Page 11-
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.                                    Using QBDOS.LIB
  802.  
  803.       All of the QBDOS.LIB routines can be accessed via the Quickbasic 'Call'
  804.       statement.  The format of this statement is as follows:
  805.  
  806.          Call Function(Parm1%, Parm2%, Parm3$)
  807.  
  808.       Function is the name of the routine to be executed.  It must be spelled
  809.       exactly as shown in the following chapters.  The parameters to be passed
  810.       to the routine will also be explained in the following chapters.  You must
  811.       use the exact number of parameters shown in each function description and
  812.       each parameter must be the type (i.e. character or integer) shown in each
  813.       function description.  Using an incorrect number of parameters or using a
  814.       parameter of the wrong type (i.e. using character instead of integer) will
  815.       generally result in the abnormal termination of your program.  Usually you
  816.       will get either a 'String Space Corrupt' error or you will start executing
  817.       the wrong statements in your program.  In any event, it is almost impos-
  818.       sible to predict the results of these two types of errors, so it is criti-
  819.       cal that you be very careful in coding the call statements.
  820.  
  821.       The parameters passed to QBDOS.LIB routines will be either character or
  822.       numeric integers.  There are no special requirements for passing integers
  823.       and constants may also be used.  There is no functional difference between
  824.       these two sets of statements:
  825.  
  826.          Example 1
  827.  
  828.               Drive$ = "A"                      'Indicate drive a
  829.               Vol$ = "DISK LABEL "              'New volume label
  830.               Call FlPVol(Drive$, Vol$, Rc%)    'Call QBWARE/1 routine
  831.  
  832.          Example 2
  833.  
  834.               Call FlPVol("A", "DISK LABEL ", Rc%)
  835.  
  836.       Note that Rc% must not be defined as a constant because the QBDOS routine
  837.       will return a value in this field and your Quickbasic program cannot
  838.       access this field if it is defined as a constant.  All character fields
  839.       must be initialized to the proper length before calling a QBDOS.LIB func-
  840.       tion.  Failing to do so may result in a 'String Space Corrupt' condition.
  841.       The following two examples appear similar but Example 1 will fail and
  842.       Example 2 will succeed because 'Char$' has been properly initialized.
  843.  
  844.          Example 1 (incorrect)
  845.  
  846.               Char$ = ""                        'clear work field
  847.               Call FlGDrv(Char$)                'get the current drive
  848.  
  849.  
  850.  
  851.  
  852.  
  853.                        Copyright (c) 1987, AJM Software 
  854.                                    -Page 12-
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.          Example 2 (correct)
  869.  
  870.               Char$ = space$(1)                 'clear work field
  871.               Call FlGDrv(Char$,)               'get the current drive
  872.  
  873.  
  874.       Including the QBDOS.LIB routines in your programs can be accomplished in
  875.       a variety of ways.  The non-registered user can do one of the following:
  876.  
  877.        1)  compile the program from within the Quickbasic interactive develop-
  878.            ment environment
  879.  
  880.        2)  compile the program from the DOS prompt
  881.  
  882.       In order to use method 1, place the file QBDOS.EXE in the directory con-
  883.       taining your Quickbasic files (i.e. QB.EXE and BRUN20.LIB).  When starting
  884.       Quickbasic, enter the following command at the DOS prompt:
  885.  
  886.          QB /L QBDOS.EXE
  887.  
  888.       You may now use any of the QBDOS.LIB functions in your programs.  If you
  889.       compile your program using the 'Exe' output option, the appropriate
  890.       QBDOS.LIB functions will be available to the EXE file.
  891.  
  892.       In order to use method 2, place the file QBDOS.EXE in the directory con-
  893.       taining your Quickbasic system files.  The following example shows how to
  894.       create an executable file from the Basic source code in the file
  895.       'FILECHK.BAS':
  896.  
  897.          QB FILECHK /L QBDOS.EXE;
  898.          LINK FILECHK;
  899.  
  900.       Doing this will create the executable file 'FILECHK.EXE'
  901.  
  902.       Additionally, registered users will have the ability to create their own
  903.       custom user library (see the file BUILDLIB.QBD on the QBDOS.LIB disk for
  904.       instructions) or they can include the appropriate functions into their
  905.       program when it is linked.  For example, if the program 'TEST.BAS' uses
  906.       the QBDOS.LIB routines DOSVER and BOOT, an executable file can be
  907.       created using the following commands at the DOS prompt:
  908.  
  909.          QB TEST;
  910.          LINK TEST DOSVER BOOT;
  911.  
  912.       This assumes that all of the files on the QBDOS.LIB disk have been placed
  913.       into the directory containing the Quickbasic system files.
  914.  
  915.  
  916.  
  917.  
  918.  
  919.                        Copyright (c) 1987, AJM Software 
  920.                                    -Page 13-
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.                                   PRECAUTIONS!!!!!!
  934.  
  935.  
  936.       These routines were designed to used with Quickbasic on an IBM  PC or com-
  937.       patible computer.  Using this product with any Basic compiler or inter-
  938.       preter other than Quickbasic version 2 or 3 may probably not work and may
  939.       cause loss of data.
  940.  
  941.       Using this product on a non-IBM compatible computer will give hit or miss
  942.       results.  Some things will work, some things won't work.  The only way to
  943.       find out is to try.
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.                        Copyright (c) 1987, AJM Software 
  986.                                    -Page 14-
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.                              Miscellaneous DOS Services
  1000.  
  1001.  
  1002.       Function Summary
  1003.  
  1004.  
  1005.       BOOT     - Initiate a cold or warm boot
  1006.  
  1007.       DOSCHOUT - Write a string to the standard output device
  1008.  
  1009.       DOSCHRIN - Read a character from the standard input device
  1010.  
  1011.       DOSSTRIN - Read a string from the standard input device
  1012.  
  1013.       DOSRED   - Redirect a DOS standard handle
  1014.  
  1015.       DOSPRSC  - Print the screen
  1016.  
  1017.       DOSVER   - Get the DOS version
  1018.  
  1019.       DOSVRFY  - Turn verify mode on and off
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.                        Copyright (c) 1987, AJM Software 
  1052.                                    -Page 15-
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.       BOOT    - Initiate a cold or ward boot
  1067.  
  1068.       Usage - Call Boot(Function%)
  1069.  
  1070.          Function%      0 - Perform a warm boot
  1071.                         1 - perform a cold boot
  1072.  
  1073.  
  1074.       Programming notes:
  1075.  
  1076.       There is no return from this function - it restarts the machine.
  1077.  
  1078.       A warm boot is the equivalent of pressing Alt-Ctrl-Del - a cold boot is
  1079.       the equivalent of turning the machine off and then on again.
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.                        Copyright (c) 1987, AJM Software 
  1118.                                    -Page 16-
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.       DOSCHOUT - Write a string to the standard output device
  1132.  
  1133.       Usage - Call DosChOut(Str.Out$)
  1134.  
  1135.          Str.Out$       Text to be written
  1136.  
  1137.  
  1138.       Programming notes:
  1139.  
  1140.       If the standard output device is CON (monitor), the text is written to the
  1141.       current cursor location.
  1142.  
  1143.       Printing control characters(i.e. carriage return, line feeds) will cause
  1144.       the cursor to move accordingly.
  1145.  
  1146.       All data is written in 'raw' mode - this bypasses certain checking that
  1147.       DOS normally would do and increases output speed a little.
  1148.  
  1149.       Do not print chr$(255) as this will cause a keyboard read to occur.
  1150.  
  1151.       This service, like the other DOS keyboard/con services, can be
  1152.       re-directed.
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.                        Copyright (c) 1987, AJM Software 
  1184.                                    -Page 17-
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.       DOSCHRIN - Read a character from the standard input device
  1198.  
  1199.       Usage - Call DosChrIn(Char.In$, Echo%, Rc%)
  1200.  
  1201.          Char.In$       Character returned from the standard input device.
  1202.  
  1203.          Echo%          0 - do not echo to standard output
  1204.                         1 - echo to standard output
  1205.  
  1206.          Rc%            0 - indicates no character was found
  1207.                         1 - indicates character returned in Char.In$
  1208.                         2 - indicates an extended ASCII character was returned
  1209.                             in Char.In$
  1210.  
  1211.  
  1212.       Programming notes:
  1213.  
  1214.       Extended ASCII characters will not echo.
  1215.  
  1216.       No special action is taken if Ctrl-C or Ctrl-Break is detected.
  1217.  
  1218.       Char.In$ must be initialized to a space.  If it is not, the service will
  1219.       fail and a "String Space Corrupt' condition may occur.
  1220.  
  1221.       If an extended ASCII code is entered, Char.In$ will contain the second
  1222.       character of the code.
  1223.  
  1224.       This service, like the other DOS keyboard/con services, can be
  1225.       re-directed.
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.                        Copyright (c) 1987, AJM Software 
  1250.                                    -Page 18-
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.       DOSSTRIN - Read a string from the standard input device
  1264.  
  1265.       Usage - Call DosStrIn(Text.In$, Count%)
  1266.  
  1267.          Text.In$       input string
  1268.  
  1269.          Count%         length of input string
  1270.  
  1271.  
  1272.       Programming notes:
  1273.  
  1274.       Use this function only for input of a single string on a screen.  The
  1275.       editing characteristics of this service do not lend themselves to full
  1276.       screen input.
  1277.  
  1278.       No extended ASCII codes are allowed by this function.
  1279.  
  1280.       The maximum input length is the length of Text.In$ - 3.  For example, if
  1281.       you wanted input with a maximum length of 12 characters, use the following
  1282.       code:
  1283.  
  1284.                         Text.In$ = Space$(15)  'Maximum length + 3
  1285.                         call DosStrIn(Text.In$, Count%)
  1286.  
  1287.       End of input is signaled by pressing the [Enter] key.
  1288.  
  1289.       If you type in more than the maximum number of characters, the beep will
  1290.       sound until [Enter] is pressed.
  1291.  
  1292.       No cursor will be displayed while characters are being entered.
  1293.  
  1294.       The characters entered at the keyboard will echo on the monitor at the
  1295.       current cursor position.
  1296.  
  1297.       This service, like the other DOS keyboard/con services, can be
  1298.       re-directed.
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.                        Copyright (c) 1987, AJM Software 
  1316.                                    -Page 19-
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.       DOSRED   - Redirect a DOS standard handle
  1330.  
  1331.       Usage - Call DosRed(Device%, FileSpec$, Rc%)
  1332.  
  1333.          Device%        Device to redirect
  1334.                         0 - Standard input
  1335.                         1 - Standard output
  1336.                         3 - Standard AUX device
  1337.                         4 - Standard list device
  1338.  
  1339.          Filespec$      Standard ASCIIZ string
  1340.  
  1341.          Rc%            Return code
  1342.  
  1343.  
  1344.       Programming notes:
  1345.  
  1346.       See the Appendix in the documentation for QBFILE.LIB for an explanation
  1347.       of return codes.
  1348.  
  1349.       The standard input device is CON, or the keyboard.  If you redirect this
  1350.       device to accept from a file, you cannot detect end-of-file.  If you play
  1351.       with this device, be prepared to reboot quite a bit while testing - incor-
  1352.       rect handling can easily cause the keyboard to lock up.
  1353.  
  1354.       The standard output device is CON, or the monitor.  You can redirect this
  1355.       device either to a file or printer.  Once redirected, all PRINT statements
  1356.       will print to FileSpec$.  See the sample program TYPER.BAS included with
  1357.       this package.
  1358.  
  1359.       The standard auxiliary device is AUX - generally COM1.
  1360.  
  1361.       The standard list device is PRN - generally LPT1.  Unfortunately, Basic
  1362.       does not use the standard list device for LPRINT statements or for
  1363.       PRINT# statements, thereby making redirection of this handle a little less
  1364.       useful than it could be.
  1365.  
  1366.       If FileSpec$ is NUL (i.e. FileSpec$ = ""), DOSRED will reset the device to
  1367.       its default value. these are:
  1368.  
  1369.               Device%          Default
  1370.                 0                CON
  1371.                 1                CON
  1372.                 3                AUX
  1373.                 4                PRN
  1374.  
  1375.       If FIleSpec$ is CHR$(255), DOSRED will simply close that handle.  This is
  1376.       useful if you're not using DOS 3.3 and you need more than fifteen files
  1377.       open at one time (the Quickbasic limit).  Simply close one of the devices,
  1378.       and that allows you to open another file.  If you close the standard input
  1379.  
  1380.  
  1381.                        Copyright (c) 1987, AJM Software 
  1382.                                    -Page 20-
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.       device, be sure to reopen it as you won't be able to get any input from
  1397.       the keyboard.  Rumor has it that under DOS 3.3, you can have up to 255
  1398.       files open at any one time.
  1399.  
  1400.       If FileSpec$ is a disk file, and it already exists, DOSRED will simply
  1401.       write over it.  If it does not exist, DOSRED will create it.  You must
  1402.       close any disk files used for redirection before terminating your program.
  1403.       Otherwise, the file's directory entry (length) will not be updated and you
  1404.       will not be able to process that file.  A file close is done automatically
  1405.       when you issue a reset (FileSpec$ = "").
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.                        Copyright (c) 1987, AJM Software 
  1448.                                    -Page 21-
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.       DOSPRSC  - Print the screen
  1462.  
  1463.       Call DosPrSc
  1464.  
  1465.  
  1466.       Programming notes:
  1467.  
  1468.       This service will print the contents of the screen buffer.  It is really a
  1469.       BIOS service, but because of it's usefulness, it is included here.
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.                        Copyright (c) 1987, AJM Software 
  1514.                                    -Page 22-
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.       DOSVER   - Get the DOS version
  1528.  
  1529.  
  1530.       Usage - Call DosVer(Version%)
  1531.  
  1532.          Version%       the version of DOS currently running
  1533.  
  1534.  
  1535.       Programming notes:
  1536.  
  1537.       Version is returned as an integer.  DOS 3.10 would be returned as 310, and
  1538.       so on.  To display it properly, use the following code:
  1539.  
  1540.  
  1541.          Call DosVer(Version%)
  1542.          Print Using "#.##";Version%/100
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.                        Copyright (c) 1987, AJM Software 
  1580.                                    -Page 23-
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.  
  1593.       DOSVRFY  - Turn verify mode on and off
  1594.  
  1595.       Usage - Call DosVrfy(Function%)
  1596.  
  1597.          Function%      0 - turn verify off
  1598.                         1 - turn verify on
  1599.                        -1 - get status of verify
  1600.  
  1601.  
  1602.       Programming notes:
  1603.  
  1604.       When verify is on, every write request made through DOS will cause DOS to
  1605.       reread the sector just written to insure that it is readable.
  1606.  
  1607.       No verification is done when BIOS is used to write a sector.
  1608.  
  1609.       DOS does NOT perform a verify by checking that the sector written matches
  1610.       the data in the output buffer.  It simply insures that the sector written
  1611.       can be read and that it passes the CRC.
  1612.  
  1613.       Verify does add overhead when it is turned on.  Use this service when the
  1614.       output media is questionable.
  1615.  
  1616.       When using Function% = -1, DOSVRFY will return a 0 is Function% if Verify
  1617.       is off and a 1 if Verify is on.
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.                        Copyright (c) 1987, AJM Software 
  1646.                                    -Page 24-
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.                                   The Print Spooler
  1661.  
  1662.  
  1663.                YOU MUST HAVE VERSION 3.XX OF DOS TO USE THESE SERVICES
  1664.  
  1665.  
  1666.       Function Summary
  1667.  
  1668.  
  1669.       DOSPSTAT - Request spooler status
  1670.  
  1671.       DOSPCAN  - Cancel all spooled files
  1672.  
  1673.       DOSPDEL  - Delete a file from the queue
  1674.  
  1675.       DOSPLST  - List all files in the queue
  1676.  
  1677.       DOSPSUB  - Submit a file to the queue
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.                        Copyright (c) 1987, AJM Software 
  1712.                                    -Page 25-
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.       DOSPSTAT - Request spooler status
  1728.  
  1729.       Usage - Call DosPStat(Rc%)
  1730.  
  1731.          Rc%            0 - Normal status - okay to use spooler
  1732.                         1 - Spooler is inactive
  1733.                         2 - Spooler unavailable
  1734.                       255 - Invalid request (invalid DOS version)
  1735.  
  1736.  
  1737.       Programming notes:
  1738.  
  1739.       This service simply provides the spooler status.  Each service in this
  1740.       section also checks the spooler status.
  1741.  
  1742.       The only good return code is 0.  Any of the other return codes indicate
  1743.       that the spooler is not useable.
  1744.  
  1745.       A return code of 1 indicates the spooler is not running, but it could
  1746.       be started from the DOS prompt.
  1747.  
  1748.       A return code of 2 indicates that the spooler is not active and it cannot
  1749.       be started because some other process has captured the spooler interrupt.
  1750.  
  1751.       A return code of 255 indicates that the wrong version of DOS is installed
  1752.       - version 3.00 or higher is needed.
  1753.  
  1754.       See Appendix A for a discussion on starting the print spooler.
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.                        Copyright (c) 1987, AJM Software 
  1778.                                    -Page 26-
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.       DOSPCAN  - Cancel all spooled files
  1793.  
  1794.       Usage - Call DosPCan(Rc%)
  1795.  
  1796.          Rc%            Return code
  1797.  
  1798.  
  1799.       Programming notes:
  1800.  
  1801.       See Appendix A for an explanation of return codes.
  1802.  
  1803.       This service will delete all files from the print queue.  Please remember
  1804.       that most printers have a print buffer - some as large as 256k.  This
  1805.       function will not clear the print buffer.
  1806.  
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.                        Copyright (c) 1987, AJM Software 
  1844.                                    -Page 27-
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.       DOSPDEL  - Delete a file from the queue
  1859.  
  1860.       Usage - Call DosPDel(FileSpec$, Rc%)
  1861.  
  1862.          Filespec$             ASCIIZ string
  1863.  
  1864.          Rc%                   Return code
  1865.  
  1866.  
  1867.       Programming notes:
  1868.  
  1869.       Filespec$ should be the name of a file in the print queue in ASCIIZ for-
  1870.       mat.  ASCIIZ format is simply the file name followed by a CHR$(0), for
  1871.       example:
  1872.  
  1873.               Filespec$  = "C:\SPOOLDIR\TEXTFILE.DAT" +CHR$(0)
  1874.  
  1875.       You must use the entire filename (including drive and path) when deleting
  1876.       a file from the queue.
  1877.  
  1878.       See Appendix A for an explanation of return codes.
  1879.  
  1880.       This service will delete a files from the print queue.  Please remember
  1881.       that most printers have a print buffer - some as large as 256k.  This
  1882.       function will not clear the print buffer, so if the deleted file is print-
  1883.       ing, it will continue to print until the buffer is emptied.
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.                        Copyright (c) 1987, AJM Software 
  1910.                                    -Page 28-
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.       DOSPLST  - List all files in the queue
  1925.  
  1926.       Usage - Call DosPLst(File.Array$(0), Rc%)
  1927.  
  1928.          File.Array$           Array that will contain the names of all the
  1929.                                files in the print queue
  1930.  
  1931.          Rc%                   Return code
  1932.  
  1933.  
  1934.       Programming notes:
  1935.  
  1936.       See Appendix A for a explanation of return codes.
  1937.  
  1938.       File.Array$ must be initialized and have the proper number of elements
  1939.       prior to calling DOSPLST.  Failing to initialize it properly will cause
  1940.       DOSPLST to fail and probably freeze up your computer.
  1941.  
  1942.       The maximum number of entries depends on what parameters were used when
  1943.       the print spooler was started.  The absolute maximum is 32.  I would
  1944.       strongly recommend that you plan for the maximum.  The following code seg-
  1945.       ment shows the proper method of using DOSPLST.
  1946.  
  1947.               MaxQueue%  = 31                   'This is really 32 entries when
  1948.                                                 'using Option Base 0
  1949.               Dim File.Array$(MaxQueue%)        'plan for max number of entries
  1950.  
  1951.               For X% = 0 to MaxQueue%           'initialize the array
  1952.                         File.Array$ = Space$(64) 'max length of a filename
  1953.               Next
  1954.  
  1955.               Call DosPLst(File.Array$(0), Rc%) 'go get list
  1956.  
  1957.               If Rc% <> 0 then goto YOUR.ERROR.ROUTINE
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.                        Copyright (c) 1987, AJM Software 
  1976.                                    -Page 29-
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986.  
  1987.  
  1988.  
  1989.  
  1990.       DOSPSUB  - Submit a file to the queue
  1991.  
  1992.  
  1993.       Usage - Call DosPSub(FileSpec$, Rc%)
  1994.  
  1995.          FileSpec$             ASCIIZ string
  1996.  
  1997.          Rc%                   Return code
  1998.  
  1999.  
  2000.       Programming notes:
  2001.  
  2002.       FileSpec$ is the name of the file to be submitted to the print queue.
  2003.  
  2004.       See Appendix A for an explanation of return codes.
  2005.  
  2006.       The file is placed at the tail of the print queue.  It will not print
  2007.       until all other files ahead of it have already printed.  There is no way
  2008.       of prioritizing the files with the services presented here.
  2009.  
  2010.  
  2011.  
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.  
  2020.  
  2021.  
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.                        Copyright (c) 1987, AJM Software 
  2042.                                    -Page 30-
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055.  
  2056.  
  2057.                                 DOS Memory Management
  2058.  
  2059.  
  2060.               PLEASE READ APPENDIX B BEFORE USING ANY OF THESE SERVICES
  2061.  
  2062.  
  2063.       Function Summary
  2064.  
  2065.  
  2066.       DOSMALLC - Allocate additional memory
  2067.  
  2068.       DOSMFREE - Free memory
  2069.  
  2070.       DOSMGET  - Get some data from allocated memory
  2071.  
  2072.       DOSMPUT  - Put some data in allocated memory
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.  
  2083.  
  2084.  
  2085.  
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.                        Copyright (c) 1987, AJM Software 
  2108.                                    -Page 31-
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.  
  2120.  
  2121.       DOSMALLC - Allocate additional memory
  2122.  
  2123.       Usage - Call DosMAllc(Block, MemSize%, Element.Size%, Rc%)
  2124.  
  2125.          Block%         Reserved for future use
  2126.  
  2127.          MemSize%       Amount of memory to acquire (in Kilobytes)
  2128.                         valid ranges are 1-64
  2129.  
  2130.          Element.Size%  Size of each array element.
  2131.  
  2132.          Rc%            Return code
  2133.  
  2134.  
  2135.       Programming notes:
  2136.  
  2137.       See Appendix B before using this service.
  2138.  
  2139.       Return code is explained in Appendix B.
  2140.  
  2141.       MemSize% is the memory size in KB - 64 would get 64,000 additional bytes.
  2142.  
  2143.       The area of memory returned by this service is initialized to
  2144.       nulls - CHR$(0).
  2145.  
  2146.       Only 1 area of memory can be allocated at any one time.  If this service
  2147.       is attempted twice without an intervening call to DOSMFREE, the second
  2148.       call to DOSMALLC will fail.
  2149.  
  2150.       This service is the equivalent of the BASIC function DIM when used with a
  2151.       dynamic array.
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.                        Copyright (c) 1987, AJM Software 
  2174.                                    -Page 32-
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187.  
  2188.       DOSMFREE - Free memory
  2189.  
  2190.       Call DosMFree(Block%, Rc%)
  2191.  
  2192.          Block%         Reserved for future use
  2193.  
  2194.          Rc%            Return code
  2195.  
  2196.  
  2197.       Programming notes:
  2198.  
  2199.       See Appendix B before using this service.
  2200.  
  2201.       Return code is explained in Appendix B.
  2202.  
  2203.       This service will free all memory obtained with DOSMALLC.
  2204.  
  2205.       This service is the equivalent of the BASIC function ERASE when used with
  2206.       a dynamic array.
  2207.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231.  
  2232.  
  2233.  
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.                        Copyright (c) 1987, AJM Software 
  2240.                                    -Page 33-
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.  
  2253.       DOSMGET  - Get some data from allocated memory
  2254.  
  2255.       Usage Call DosMGet(Block%, Index%, Text$, Rc%)
  2256.  
  2257.          Block%         Reserved for future use
  2258.  
  2259.          Index%         Array element number to retrieve
  2260.  
  2261.          Text$          String that will contain the data returned from memory
  2262.  
  2263.          Rc%            Return code
  2264.  
  2265.  
  2266.       Programming notes:
  2267.  
  2268.       See Appendix B before using this service.
  2269.  
  2270.       Return code is explained in Appendix B.
  2271.  
  2272.       Text$ must be initialized to the proper length prior to using this ser-
  2273.       vice.  It's length must equal the value of Element.Size% used in DOSMALLC.
  2274.  
  2275.       Index% the offset into the array where the requested data resides.  The
  2276.       minimum value for Index% is 0 - the maximum value is determined by the
  2277.       following formula:
  2278.  
  2279.          MaxIdx%  = Int(Max.Size%/Element.Size% *1000) - 1
  2280.  
  2281.  
  2282.  
  2283.  
  2284.  
  2285.  
  2286.  
  2287.  
  2288.  
  2289.  
  2290.  
  2291.  
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.                        Copyright (c) 1987, AJM Software 
  2306.                                    -Page 34-
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.  
  2319.       DOSMPUT  - Put some data in allocated memory
  2320.  
  2321.       Usage Call DosMPut(Block%, Index%, Text$, Rc%)
  2322.  
  2323.          Block%         Reserved for future use
  2324.  
  2325.          Index%         Array element number where data will be placed
  2326.  
  2327.          Text$          String containing the data to be placed into the array
  2328.  
  2329.          Rc%            Return code
  2330.  
  2331.  
  2332.       Programming notes:
  2333.  
  2334.       See Appendix B before using this service.
  2335.  
  2336.       Return code is explained in Appendix B.
  2337.  
  2338.       The length of Text$ cannot exceed the value of Element.Size%.
  2339.  
  2340.       Index% the offset into the array where the data will be placed.  The
  2341.       minimum value for Index% is 0 - the maximum value is determined by the
  2342.       following formula:
  2343.  
  2344.          MaxIdx%  = Int(Max.Size%/Element.Size% *1000) - 1
  2345.  
  2346.  
  2347.  
  2348.  
  2349.  
  2350.  
  2351.  
  2352.  
  2353.  
  2354.  
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.                        Copyright (c) 1987, AJM Software 
  2372.                                    -Page 35-
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.  
  2385.                                       Appendix A
  2386.  
  2387.                                   The Print Spooler
  2388.  
  2389.  
  2390.       Version 3.00 of DOS brought with it a remarkable new program - the print
  2391.       spooler.  The spooler is remarkable because it allows you to print files
  2392.       in the background while the computer is free to do other tasks.  It is
  2393.       somewhat limited in that it does automatically capture data going to the
  2394.       printer and spool it for you and it must be used from the DOS prompt.  In
  2395.       order to use it, you must write your report to a file and subsequently go
  2396.       to the DOS prompt and submit it to the print queue - either manually or
  2397.       through a batch file.  The services provided in QBDOS.LIB will assist in
  2398.       incorporating the spooler into any Quickbasic system.  You must still
  2399.       write each report to a file, but we can, with DOSPSUB, submit the file to
  2400.       the print queue directly from a Quickbasic program.
  2401.  
  2402.  
  2403.       In order to use QBDOS.LIB spooler service, we must start the spooler
  2404.       before your Quickbasic basic program executes.  The spooler can be started
  2405.       from the DOS prompt or from your AUTOEXEC.BAT file (any BAT file will do).
  2406.       The spooler program is called PRINT.EXE and is available on your DOS ver-
  2407.       sion 3.XX diskettes.  When starting the spooler, there are several options
  2408.       that can be used.  These are:
  2409.  
  2410.          /D   Device that all files will be printed on - if omitted, the spooler
  2411.               will prompt you for a device name
  2412.  
  2413.          /Q   Maximum number of files that can be in the print queue - the
  2414.               default is 4 and the absolute maximum that can be used is 32
  2415.  
  2416.          /B   Buffersize of the internal buffer used by the spooler - the
  2417.               default is 512 bytes - we always use 2048 bytes, but the correct
  2418.               value will depend on overall system usage
  2419.  
  2420.          /S   Timeslice for the spooler - this defines the number of clock ticks
  2421.               that the spooler will use - the default is 8 and the values can
  2422.               range from 1-255
  2423.  
  2424.          /M   Specifies the maximum number of clockticks that the spooler will
  2425.               use to print a character - values can be 1-255 and the default is
  2426.               2
  2427.  
  2428.          /U   Specifies the number of clockticks that the spooler will wait for
  2429.               the printer to become available - values can range from 1-255 and
  2430.               the default is 1
  2431.  
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.                        Copyright (c) 1987, AJM Software 
  2438.                                    -Page 36-
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448.  
  2449.  
  2450.  
  2451.  
  2452.       The command
  2453.  
  2454.          PRINT /D:LPT1 /B:2048 /Q:32
  2455.  
  2456.       will activate the spooler with an internal buffer of 2048 bytes and cause
  2457.       all output to be spooled to LPT1.  The maximum number of files that can be
  2458.       in the queue at one time is 32.  Once this is completed, the routines in
  2459.       QBDOS.LIB can be used.
  2460.  
  2461.       Return codes from the spooler are as follows:
  2462.  
  2463.          Rc             Reason
  2464.  
  2465.          0              Successful
  2466.          1              Spooler inactive
  2467.          2              Spooler inactive (DOSPSTAT only)
  2468.          2              File not found
  2469.          3              Path not found
  2470.          4              Too many open files
  2471.          5              Access denied
  2472.          8              Queue full
  2473.          9              Spooler busy
  2474.          12             Name too long
  2475.          15             Invalid drive
  2476.          255            Invalid DOS version
  2477.  
  2478.  
  2479.  
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486.  
  2487.  
  2488.  
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  
  2496.  
  2497.  
  2498.  
  2499.  
  2500.  
  2501.  
  2502.  
  2503.                        Copyright (c) 1987, AJM Software 
  2504.                                    -Page 37-
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.  
  2513.  
  2514.  
  2515.  
  2516.  
  2517.                                       Appendix B
  2518.  
  2519.                             Using the DOS Memory Services
  2520.  
  2521.  
  2522.       General info
  2523.  
  2524.  
  2525.       The Dos Memory Services provided in QBDOS.LIB will allow you to allocate
  2526.       an array of up to 64,000 characters in length.  This array is handled like
  2527.       text data, but unlike BASIC, QBDOS.LIB does not allow variable length
  2528.       strings.  This data resides outside of the Quickbasic data segment, so it
  2529.       has no effect on the amount of string space normally provided by Quickba-
  2530.       sic.  This array is handled a little bit differently than a Quickbasic
  2531.       array would be.  Let's look at some examples.
  2532.  
  2533.       In Quickbasic, we could allocate an array and initialize a single element
  2534.       with the following code segment:
  2535.  
  2536.          Option Base 0
  2537.          Dim Array$(400)
  2538.  
  2539.          Array$(0) = "This is the first element of the array"
  2540.  
  2541.  
  2542.  
  2543.       Using the services in QBDOS.LIB, we could do this:
  2544.  
  2545.          Mem.Size% = 64        'Allocate 64,000 bytes
  2546.          Element.Size% = 100   'Need element size because QBDOS.LIB does not
  2547.                                'support variable length text
  2548.  
  2549.          Call DosMAllc(Block%, Mem.Size%, Element.Size%, Rc%)
  2550.          If Rc% <> 0 then Goto Error.Routine
  2551.  
  2552.          Text$ = "This is the first element of the array"
  2553.          Index% = 0
  2554.          Call DosMPut(Block%, Index%, Text$, Rc%)
  2555.  
  2556.  
  2557.  
  2558.  
  2559.       In the Quickbasic example, we first allocate enough memory for 400 items
  2560.       in the array called Array$ (Note that this doesn't mean that you can actu-
  2561.       ally use all 400.  If you tried to initialized each element of Array$ to
  2562.       200 spaces, your program would run out of string space long before you
  2563.       completed the initialization).  All this actually does is set aside 1600
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.                        Copyright (c) 1987, AJM Software 
  2570.                                    -Page 38-
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.  
  2579.  
  2580.  
  2581.  
  2582.  
  2583.  
  2584.  
  2585.       bytes within Quickbasic.  This 1600 bytes is used as a series of 'string
  2586.       descriptors' - you can read the Quickbasic manual for a discussion of
  2587.       string descriptors.  Next, we assign a value to the first element in the
  2588.       array.  Quickbasic allocates some space in it's own data segment for this
  2589.       value and updates the string descriptor accordingly.  The descriptor con-
  2590.       tains the length of the string and it's location within the Quickbasic
  2591.       data segment.
  2592.  
  2593.       In the QBDOS.LIB example, we first need to allocate some space.  The
  2594.       amount of space needed is 64,000 characters, or bytes.  This is done by
  2595.       setting 
  2596.               Mem.Size = 64
  2597.  
  2598.       Next, because QBDOS.LIB will not support variable length text, we need to
  2599.       determine the length of each element.  For all practical purposes, this is
  2600.       the length of the longest element that we will place into the array.  Next
  2601.       we allocate space for the array using DOSMALLC.  This service actually
  2602.       allocates the entire 64,000 bytes.  In order to initialize on of the ele-
  2603.       ments of our new array, all we need do is specify the element number, or
  2604.       index, and the text itself - DOSMPUT will do the rest.  Keep in mind that
  2605.       if the length of the Text$ that you're storing to the array is longer than
  2606.       Element.Size%, DOSMPUT will not store the data and it will pass a return
  2607.       code of 252 back to the calling program.  If the length of Text$ is
  2608.       less or equal to than Element.Size%, DOSMPUT will store all of the text.
  2609.  
  2610.       Text$ can be retrieved from the array by using the same technique with
  2611.       DOSMGET.  DOSMGET will always return a string of length Element.Size%.  If
  2612.       the length of the original string stored with DOSMPUT was less than Ele-
  2613.       ment.Size%, DOSMGET will still return a string of length Element.Size%.
  2614.       The back end of the string will be padded with nulls (CHR$(0)).
  2615.  
  2616.       If you transfer control from the program that allocates memory to another
  2617.       Quickbasic program, you may still be able to use the array allocated in
  2618.       the first program.  If the first program "CHAIN"'s to the second program,
  2619.       the array allocated in the first program will be intact - no data will be
  2620.       lost.  Additionally, the special linking requirements explained later in
  2621.       this Appendix apply only to the first program.  If, however, the first
  2622.       program "RUN"'s the second program, then the array allocated in the first
  2623.       program is lost.  If the second program needs to allocate memory, then it
  2624.       must be linked using the guidelines discussed later in this Appendix.
  2625.  
  2626.  
  2627.  
  2628.  
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  
  2634.  
  2635.                        Copyright (c) 1987, AJM Software 
  2636.                                    -Page 39-
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.  
  2645.  
  2646.  
  2647.  
  2648.  
  2649.       Who can use the memory allocation services?
  2650.  
  2651.  
  2652.       Memory is a severely limited resource in most computers from large IBM
  2653.       mainframes to the PC.  Whether or not you can use the QBDOS.LIB memory
  2654.       services depends on several factors.  We'll discuss each of these factors
  2655.       in detail to help you decide whether or not QBDOS.LIB is viable for you.
  2656.  
  2657.       The first constraint is the amount physical conventional memory installed
  2658.       on your computer - this does not include extended or expanded memory.  The
  2659.       maximum amount of conventional memory that can be installed in any DOS
  2660.       computer is, of course, 640,000 bytes.  The rules to follow here are:
  2661.  
  2662.               - If you have less than 256K of memory, you probably cannot run
  2663.                 applications that use the QBDOS.LIB memory services
  2664.  
  2665.               - If you have 256K of memory, you MIGHT be able to run these
  2666.                 applications, but you probably cannot write your own applica-
  2667.                 tions.  The Quickbasic integrated development requires to much
  2668.                 memory to allow testing.
  2669.  
  2670.               -If you have more than 256K of memory, you can probably run and
  2671.                test applications written with QBDOS.LIB memory management facil-
  2672.                ities.  Read on for further information.
  2673.  
  2674.  
  2675.       The next constraint is the amount of memory used by things other than
  2676.       Quickbasic.  DOS requires a minimum of around 26K - and that is for a
  2677.       plain vanilla DOS.  I generally install several drivers and have my files
  2678.       and buffers parameters set pretty high so DOS requires 55K on my machine.
  2679.       If you have a great deal of TSR's (SideKick for example) installed, you
  2680.       may be giving up a lot of memory to them - the more memory used by TSR's,
  2681.       the less available to Quickbasic and QBDOS.LIB.  Both DOS and TSR's
  2682.       decrease the amount of memory available.  If you're having a problem using
  2683.       QBDOS.LIB and you have TSR's installed, try removing them.
  2684.  
  2685.       The next constraint is the amount of memory used by Quickbasic.  The fig-
  2686.       ures presented here have been arrived at by analysis performed by us and
  2687.       in no way reflect any information received by Microsoft.  There are sev-
  2688.       eral factors that determine the amount of memory that a Quickbasic program
  2689.       needs to execute.  These are:
  2690.  
  2691.               - The amount of code that you write.  Quickbasic needs about 68K
  2692.                 of memory for the its' own routines.  Any code that you write
  2693.                 would be over and above this 68K.
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.                        Copyright (c) 1987, AJM Software 
  2702.                                    -Page 40-
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715.  
  2716.               - The data area used by Quickbasic is always 64K - no more, no
  2717.                 less.
  2718.  
  2719.               - The size of the user library increases memory requirement by the
  2720.                 size of the code segments in the library.
  2721.  
  2722.               - Communication programs will require storage for buffers.  This,
  2723.                 of course, is allocated by the programmer.
  2724.  
  2725.               - All remaining memory gets allocated to the far heap.  If you use
  2726.                 large numeric arrays, they would be allocated here.  This is the
  2727.                 area of memory used by QBDOS.LIB.
  2728.  
  2729.       From this info, we can see that a very simple one-line Quickbasic program
  2730.       will need about 132K to run.  An approximation of memory requirements can
  2731.       be calculated with:
  2732.  
  2733.               Data segment size                 64K  +
  2734.               QB runtime library                68K  +
  2735.               Size of far arrays                ??   +           (1)
  2736.               User library code size            ??   +           (2)
  2737.               Size of EXE file                  ??   +           (3)
  2738.               Size of communication buffers     ??   +           (4)
  2739.  
  2740.               = memory requirements
  2741.  
  2742.       Add about 124K if you're running programs out of the QB editor. For
  2743.       programs compiled with the /o option, do not include the QB runtime
  2744.       library size.
  2745.  
  2746.       (1)  Far arrays are large numeric arrays defined in your program.  You can
  2747.            determine size using the following:
  2748.  
  2749.               Integer arrays - Size = Number of elements * 2
  2750.  
  2751.               Single precision - Size = Number of elements * 4
  2752.  
  2753.               Double precision - Size = Number of elements * 8
  2754.  
  2755.       (2) This is tough, but to be on the safe side, just use the size of your
  2756.           USERLIB.EXE file (or whatever your user library is named).
  2757.  
  2758.       (3) This is simply the size of the EXE file as reported by the DOS dir
  2759.           command.
  2760.  
  2761.       (4) This one is easy because you as the programmer allocate these with the
  2762.           /c:buffersize parameter.
  2763.  
  2764.  
  2765.  
  2766.  
  2767.                        Copyright (c) 1987, AJM Software 
  2768.                                    -Page 41-
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.  
  2777.  
  2778.  
  2779.  
  2780.  
  2781.  
  2782.       If, after adding these numbers together, we come up with a memory require-
  2783.       ment that is close to the size of memory installed in that computer, you
  2784.       probably cannot use the memory management facilities in QBDOS.  If there
  2785.       is room in your program, read on (Remember, when you run a program from
  2786.       the Quickbasic editor, add about 124K).
  2787.  
  2788.  
  2789.  
  2790.  
  2791.       Preparing to use the memory allocation services
  2792.  
  2793.       When a Quickbasic program is linked, the linker tells DOS the minimum and
  2794.       maximum amounts of memory required by the program.  When you execute the
  2795.       program, DOS will attempt to allocate the maximum amount of memory needed
  2796.       by the program.  For Quickbasic programs, this maximum is always all of
  2797.       available memory.  Before using the memory allocation services, we must
  2798.       first adjust the amount of memory that DOS allocates for the program.
  2799.       This can be done in three ways:
  2800.  
  2801.          1) When linking your Quickbasic program, use the CP parameter to limit
  2802.             maximum memory size.  You can tell the assembler how much memory to
  2803.             allocate in units of 16 byte paragraphs.  For example, if we wanted
  2804.             a program to use 256k, we would link it like this:
  2805.  
  2806.                         qb testprog;
  2807.                         link testprog /cp:16000
  2808.  
  2809.            We can determine the number of paragraphs by taking the memory size
  2810.            and dividing by 16 (256,000 / 16 = 16000)
  2811.  
  2812.          2) For those of you who have Microsoft's MASM, you can use the EXEMOD
  2813.             utility.  EXEMOD will do the same thing that the CP parameter of
  2814.             link does except that we must specify the paragraph count in Hexa-
  2815.             decimal.  If we wanted a program to use 256k of memory, we could do
  2816.             this:
  2817.  
  2818.                         qb testprog;
  2819.                         link testprog;
  2820.                         exemod testprog /max 4000
  2821.  
  2822.              4000 is about the number of paragraphs, in hex, that we need to get
  2823.              256K - it's actually a little high, but it's easier to remember
  2824.              than 3E80.
  2825.  
  2826.          3)  The program QBTMOD.BAS, provided with QBDOS.LIB, will change the
  2827.              maximum memory requirement to 256K.  Source code is provided so you
  2828.              can modify it as you wish.
  2829.  
  2830.  
  2831.  
  2832.  
  2833.                        Copyright (c) 1987, AJM Software 
  2834.                                    -Page 42-
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.  
  2843.  
  2844.  
  2845.  
  2846.  
  2847.  
  2848.  
  2849.  
  2850.  
  2851.  
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858.  
  2859.       Using the memory allocation services in the Quickbasic editor is a
  2860.       little trickier.  We must take the following steps in order to do this.
  2861.  
  2862.          1) Make a BACKUP of QB.EXE
  2863.  
  2864.          2) Make another BACKUP of QB.EXE
  2865.  
  2866.          3) Do one of the following:
  2867.  
  2868.                - EXEMOD QB /MAX 4000 (if you have EXEMOD)
  2869.  
  2870.                - QBTMOD QB /MAX 16000
  2871.  
  2872.       This will allow you to execute DOSMALLC once while in the Quickbasic edi-
  2873.       tor.  When you start Quickbasic, it will not allocate all of memory, how-
  2874.       ever, if you run a program (Ctrl-R) or SHELL from the editor, when you
  2875.       return to Quickbasic, it acquires all available memory.  This means that
  2876.       you can only run DOSMALLC once while in the editor.  If you need to run it
  2877.       again, you must first exit Quickbasic, and then start it again.
  2878.  
  2879.       This does cause some problems in debugging our programs, but if you need
  2880.       the additional string space and you don't have expanded memory, then your
  2881.       options are limited.
  2882.  
  2883.  
  2884.  
  2885.  
  2886.  
  2887.  
  2888.  
  2889.  
  2890.  
  2891.  
  2892.  
  2893.       NOTE - IF ALL OF THIS IS TOO MUCH TO SWALLOW, WRITE US ABOUT OUR
  2894.       QUICKBASIC - LIMM EXPANDED MEMORY INTERFACE.
  2895.  
  2896.  
  2897.  
  2898.  
  2899.                        Copyright (c) 1987, AJM Software 
  2900.                                    -Page 43-
  2901.  
  2902.  
  2903.  
  2904.  
  2905.