home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / Q4T15.ZIP / Q4TOOL.DOC < prev    next >
Text File  |  1992-01-10  |  53KB  |  1,242 lines

  1.  
  2.  
  3.                             The Q4Tool Library [Q4T]
  4.                                     Ver. 1.5
  5.                       Library Routines for QuickBASIC 4.xx
  6.                                 by  R. J. Crouch
  7.                          Copyright - 1990-92 - CareWare
  8.                               All Rights Reserved
  9.           ____________________________________________________________
  10.  
  11.  
  12.  
  13.                       **   What is the Q4Tool Library?  **
  14.                      ======================================
  15.  
  16.  
  17.           Q4Tool  is a collection of innovative and direct programming
  18.           tools, in the form of a user  library,  for  Microsoft  (R),
  19.           QuickBASIC  4.xx  [QB].  These library routines are intended
  20.           for use by individuals with some QB programming  experience.
  21.           The following files make up the Q4Tool Library.
  22.  
  23.             Primary:  Q4T.LIB  -  Q4T.QLB  -  Q4T.BI  -  Q4TOOL.DOC
  24.  
  25.             Support:  Q4T-DEMO.BAS  -  Q4T-DEMO.EXE
  26.  
  27.           Q4Tool [Q4T] has emerged from a necessity for  a  collection
  28.           of  comprehensive routines to supplement the BASIC language.
  29.           All of its routines are easily incorporated into almost  any
  30.           QuickBASIC   4.xx  source  without  greatly  increasing  the
  31.           efficient size of the  "stand-alone"  program.   The  Q4Tool
  32.           Library  is  intended  as  a  solid foundation from which to
  33.           build your own personal libraries.
  34.  
  35.  
  36.  
  37.                **   Things to know about the Q4Tool Library   **
  38.               ===================================================
  39.  
  40.  
  41.           Q4Tool is being distributed as a  Shareware  product.   This
  42.           program  is not free and is copyrighted to CareWare with all
  43.           rights reserved.  If you find Q4T of value and  continue  to
  44.           use  its services beyond a 30 day trial period, then you are
  45.           required  to  register  your  copy   with   CareWare.    The
  46.           registration  fee  for  Q4Tool, on disk with OBJ modules, is
  47.           $25.00 (US).  A  registration  form  is  provided  for  your
  48.           convenience.  Please see the last page of this document.
  49.  
  50.           Q4Tool  may  be  shared  with  others  as long as it remains
  51.           unaltered and distributed in its entirety.   A  distribution
  52.           fee,  not to exceed $8.00, may be imposed by disk vendors to
  53.           cover shipping and  handling  costs.   The  following  files
  54.           comprise  the  whole  of  this  product  and were originally
  55.           distributed as the self-extracting  file  Q4T15.EXE  or  the
  56.           ZIPed file Q4T15.ZIP.
  57.  
  58.                  Q4T.LIB        Q4T.QLB           Q4TOOL.DOC
  59.                  Q4T.BI         Q4T-DEMO.BAS      Q4T-DEMO.EXE
  60.  
  61.  
  62.  
  63.                **   Things to know about the Q4Tool Library   **
  64.               ===================================================
  65.  
  66.  
  67.           The Q4Tool Library is presented as-is and with no warranties
  68.           expressed or implied.  CareWare  assumes  no  responsibility
  69.           for  this products use, misuse, or lose of any kind incurred
  70.           by its use.
  71.  
  72.           Upon  your completed registration you are granted full usage
  73.           and support for this product.  Any comments  or  suggestions
  74.           are gratefully accepted and an honest attend will be made to
  75.           answer them.  Good Luck and Enjoy!
  76.  
  77.           Microsoft is a registered trademark of the Microsoft Corp.
  78.  
  79.  
  80.  
  81.                    **   What the Q4Tool Library provides   **
  82.                   ============================================
  83.  
  84.  
  85.           Mouse Services:  Mouse*()   ** FIXED **
  86.           -------------------------
  87.  
  88.           A  majority  of  the  routines  in  Q4T  pertain  to   mouse
  89.           functions.   These  functions  will  allow  a  programmer to
  90.           incorporate the much needed  mouse  services  into  any  de-
  91.           manding  application.   They  are  intelligently  written to
  92.           compensate for a few idiosyncrasies that tend to emerge from
  93.           the mouse interrupt (33H).
  94.  
  95.  
  96.           Windowing:  DoWindow()    ** CHANGED **
  97.           ----------------------
  98.  
  99.           Windowing  for  today's applications  is  not  new, but this
  100.           windowing routine adds a few features that will enhance  any
  101.           program.   The  screen write for this routine is serviced by
  102.           machine code for  a  fast  and  clean  appearance.   Select-
  103.           ability for title location, type and location of shadow, and
  104.           a solid frame, make this windowing routine unique from other
  105.           we have seen.
  106.  
  107.  
  108.           Screen save/restore:  PutScrn()/GetScrn()
  109.           -----------------------------------------
  110.  
  111.           The  ability  to  save and later restore a screen's contents
  112.           are  essential  for  contemporary  programming.   These  two
  113.           routines  are  designed  to  work within the QB environment.
  114.           They make use of QB's string descriptor block  for  ease  of
  115.           use.   This  pair of routines is written entirely of machine
  116.           code for instant results.
  117.  
  118.  
  119.  
  120.                    **   What the Q4Tool Library provides   **
  121.                   ============================================
  122.  
  123.  
  124.           Screen print:  PrtScrn()
  125.           ------------------------
  126.  
  127.           This is a little machine code routine that will print to the
  128.           screen,  at the location and color desired, any string vari-
  129.           able.  It's fast, compact, and incorporates  into  just  one
  130.           CALL,  QB's  LOCATE,  COLOR,  and  PRINT  statements.   This
  131.           routine is the heart of  the  windowing  procedure  and  the
  132.           reason for its speed.
  133.  
  134.  
  135.           Equipment Information:  Get*() and Set*()    ** NEW **
  136.           -----------------------------------------
  137.  
  138.           These  routines will retrieve and set various system  equip-
  139.           ment  information.   These  types  of  services  give   your
  140.           programs  the  kind  of  information  it  needs  for  proper
  141.           application and system interaction.
  142.  
  143.  
  144.           Pull-Down Bar Menu:  BarMenu()    ** NEW **
  145.           ------------------------------
  146.  
  147.           This  routine  provides  a  comprehensive and easy means for
  148.           establishing an application menu system.  BarMenu  is  fully
  149.           configurable  with five color attributes and is both key and
  150.           mouse driven.  (A great value to any Library)
  151.  
  152.  
  153.           Screen string centering:  Ctr()
  154.           -------------------------------
  155.  
  156.           This  is  a  handy  little  function that returns the column
  157.           position needed to center string data or  variables  on  the
  158.           screen.   It  can  easily  be  incorporated into QB's LOCATE
  159.           statement.  [ie. LOCATE 12, Ctr(strg$)]
  160.  
  161.  
  162.           Program delays:  Delay()
  163.           ------------------------
  164.  
  165.           This  is  a  smart  replacement for QB's new SLEEP statement
  166.           (which, by the way, takes over 2K of executable code).   The
  167.           delay   can   either  be  forced or user bypassed  with  any
  168.           key or mouse button.
  169.  
  170.  
  171.  
  172.                    **   What the Q4Tool Library provides   **
  173.                   ============================================
  174.  
  175.  
  176.           Access to system interrupts:  QB.QLB/QB.LIB/QB.BI (C)
  177.           -----------------------------------------------------
  178.  
  179.           Incorporated   (LINKed)   within   the  Q4Tool  Library  are
  180.           QuickBASIC's QB.QLB (C), QB.LIB (C) and  QB.BI  (C).   These
  181.           files were necessary in the writing of various routines that
  182.           make   use  QB's  Interrupt()  service.   Because  of  their
  183.           presence, you also have access to DOS service  calls.   This
  184.           is a powerful feature for any programmer.
  185.  
  186.  
  187.  
  188.                **   What the Q4Tool Library does not provide   **
  189.               ====================================================
  190.  
  191.  
  192.           Q4Tool  does  not  contain routines for data input or manip-
  193.           ulation.  It is felt these  type  of  procedures  should  be
  194.           handled  by  the programmer for their particular application
  195.           needs.  Absent also from this library is  the  abundance  of
  196.           routines  that  can't  possibly  be  incorporated into every
  197.           program.  Q4T is intended to be a quality library from which
  198.           to build from.
  199.  
  200.  
  201.  
  202.                **   The nuts and bolts of the Q4Tool Library   **
  203.               ====================================================
  204.  
  205.  
  206.           The following is a clarified description of  the  prototypes
  207.           used in the CALL's to these Q4Tool library routines.  Please
  208.           note  the  variable  types  used  for the arguments in these
  209.           routines.  The mouse service calls are designed to work with
  210.           a Microsoft (R) mouse driver or close  compatible.   Examin-
  211.           ation  of  the demo source code can aid in understanding the
  212.           use of these routines.
  213.  
  214.  
  215.           -------------------
  216.           MouseStatus(Ready%)
  217.           -------------------
  218.           This routine does a nondestructive interrupt vector check to
  219.           determine  the  existence  of  a mouse driver.  This routine
  220.           should be called prior to using any of the other  Q4T  mouse
  221.           routines  to  insure  the  presence  of  the mouse interrupt
  222.           (33H).
  223.  
  224.           Passed:  An integer variable
  225.  
  226.           Returns: 0 if a mouse driver is not detected
  227.                    1 if a mouse driver has been installed
  228.  
  229.           Example:  CALL MouseStatus(have%)
  230.  
  231.  
  232.           ----------------
  233.           MouseReset(Set%)
  234.           ----------------
  235.           This routine will initialize the mouse driver and will allow
  236.           the saving and restoring of two separate mouse states.
  237.  
  238.           Passed:  An initialized integer variable or constant
  239.                    0 = hard reset - initializes mouse driver, turns
  240.                        mouse pointer off and disables any prior
  241.                        user installed events (function 00H)
  242.                    1 = soft reset - reset mouse driver and turns
  243.                        pointer off (function 21H)
  244.                    2 = will save the current mouse state to mouse
  245.                        buffer #1
  246.                    3 = will restore the mouse state as saved in mouse
  247.                        buffer #1
  248.                    4 = will save the current mouse state to mouse
  249.                        buffer #2
  250.                    5 = will restore the mouse state as saved in mouse
  251.                        buffer #2
  252.  
  253.           Returns:  If passed a variable initialized to 0, will reset
  254.                     mouse and return number of buttons installed, else
  255.                     returns nothing
  256.  
  257.           Example:  buttons% = 0
  258.                     CALL MouseReset(buttons%)
  259.  
  260.  
  261.  
  262.           ----------------------
  263.           MouseVersion(Version$)
  264.           ----------------------
  265.           This routine will return both the major and minor version of
  266.           the mouse driver installed.
  267.  
  268.           Passed:  A string variable at lease 5 characters in length
  269.  
  270.           Returns:  A string containing the version of the mouse
  271.                     driver installed.  (ie. 6.123)
  272.  
  273.           Example:  CALL MouseVersion(ver$)
  274.  
  275.  
  276.           ---------------------
  277.           MouseVisible(Status%)
  278.           ---------------------
  279.           This routine will allow  the  mouse  pointer  to  be  either
  280.           turned  on  or  off.  This routine has been stabilized by an
  281.           internal variable to  compensate  for  the  mouse  interrupt
  282.           counter.   Recursive  calls  to  the  same  Status% will not
  283.           increase or decrease the mouse interrupt counter.  This will
  284.           only be done by opposing Status% calls.
  285.  
  286.           Passed:  An initialized integer variable or constant
  287.                    0 = mouse pointer off
  288.                    1 = mouse pointer on
  289.  
  290.           Returns:  Nothing
  291.  
  292.           Examples:  CALL MouseVisible(1)
  293.                      or
  294.                      CALL MouseVisible(off%)
  295.  
  296.  
  297.           ----------------------------------------
  298.           MouseLocate(ScrnRowY%, ScrnColX%, Mode%)
  299.           ----------------------------------------
  300.           This routine will place the  mouse  pointer  at  the  screen
  301.           location  indicated  by its arguments.  The Mode switch will
  302.           allow the location to be given  in  either  row/column  text
  303.           positions or X/Y pixel positions.
  304.  
  305.           Passed:  3 initialized integer variables or constants
  306.                    Mode 0 = pixel positions
  307.                       ScrnColX% = horizontal (X) position with a value
  308.                                   from 0 to 632
  309.                       ScrnRowY% = vertical (Y) position with a value
  310.                                   from 0 to 192
  311.                    note:  The pixel given is the upper left dot of
  312.                           the standard 8x8 mouse pointer.  Pixel
  313.                           positions start from 0,0.
  314.  
  315.                    Mode 1 = text positions
  316.                       ScrnColX% = text column position with a value
  317.                                   from 1 to 80
  318.                       ScrnRowY% = text row position with a value from
  319.                                   1 to 25
  320.  
  321.  
  322.  
  323.           Returns:  Nothing
  324.  
  325.           Examples:  CALL MouseLocate(12, 30, 1)
  326.                      or
  327.                      CALL MouseLocate(y%, x%, 0)
  328.  
  329.  
  330.           ------------------------------------------
  331.           MousePosition(ScrnRowY%, ScrnColX%, Mode%)
  332.           ------------------------------------------
  333.           This  routine  will return the current position of the mouse
  334.           pointer.  The Mode switch will allow the  location  returned
  335.           to be either given in row/column text positions or X/Y pixel
  336.           positions.
  337.  
  338.           Passed:  2 integer variables and 1 initialized integer
  339.                    variable or constant (Mode%)
  340.                    Mode 0 = returned values represent X/Y pixel
  341.                             positions
  342.                    Mode 1 = returned values represent row/column
  343.                             positions
  344.  
  345.           Returns:  An integer value
  346.                     Mode 0
  347.                        ScrnColX% = current horizontal (X) position of
  348.                                    mouse pointer as represented by
  349.                                    pixels (0 to 632)
  350.                        ScrnRowY% = current vertical (Y) position of
  351.                                    mouse pointer as represented by
  352.                                    pixels (0 to 192)
  353.                     note:  The pixel given is the upper left dot of
  354.                            the standard 8x8 mouse pointer.  Pixel
  355.                            positions start from 0,0.
  356.  
  357.                     Mode 1
  358.                        ScrnColX% = current column position of mouse
  359.                                    pointer (1 to 80)
  360.                        ScrnRowY% = current row position of mouse
  361.                                    pointer (1 to 25)
  362.  
  363.           Example:  CALL MousePosition(TextRow%, TextCol%, 1)
  364.  
  365.  
  366.  
  367.           ------------------------------------------------------------
  368.           MouseLimits(UpRowY%, LeftColX%, LowRowY%, RightColX%, Mode%)
  369.           ------------------------------------------------------------
  370.           This routine will let you limit  the  motion  of  the  mouse
  371.           pointer.    The   mouse   pointer  will  reside  within  the
  372.           boundaries  specified  by  the  arguments  passed  to   this
  373.           routine.  The  Mode switch will allow the limited area to be
  374.           either given in  row/column  text  positions  or  X/Y  pixel
  375.           positions.
  376.  
  377.           Passed:  5 initialized integer variables or constants
  378.                    Mode 0 = pixel positions
  379.                       LeftColX% = left horizontal (X) position with a
  380.                                   value from 0 to 632
  381.                       UpRowY% = upper vertical (Y) position with a
  382.                                 value from 0 to 192
  383.                       RightColX% = right horizontal (X) position with
  384.                                   a value from LeftColX% to 632
  385.                       LowRowX% = lower vertical (Y) position with a
  386.                                   value from UpRowY% to 192
  387.                    note:  The pixel given is the upper left dot of
  388.                           the standard 8x8 mouse pointer.  Pixel
  389.                           positions start from 0,0.
  390.  
  391.                    Mode 1 = text positions
  392.                       LeftColX% = left column position with a value
  393.                                   from 1 to 80
  394.                       UpRowY% = upper row position with a value from
  395.                                 1 to 25
  396.                       RightColX% = right column position with a value
  397.                                    from LeftColX% to 80
  398.                       LowRowY% = lower row position with a value from
  399.                                  UpRowY% to 25
  400.  
  401.           Returns:  Nothing
  402.  
  403.           Example:  CALL MouseLimits(10, 25, 15, 55, 1)
  404.  
  405.  
  406.  
  407.           -------------------------------------------------------------
  408.           MouseExclude(UpRowY%, LeftColX%, LowRowY%, RightColX%, Mode%)
  409.           -------------------------------------------------------------
  410.           This  routine  will  allow  the mouse pointer to be excluded
  411.           from any portion of the screen as specified by the arguments
  412.           passed to this routine.  When the mouse pointer  enters  the
  413.           excluded  boundaries,  the pointer is turned off.  The mouse
  414.           interrupt (33H)  does  not,  however,  reinstate  the  mouse
  415.           pointer  to the on condition upon exiting the excluded area.
  416.           This process must be performed within the  programming  code
  417.           itself.    The   excluded   area  cannot  be  saved  by  the
  418.           MouseReset() routines.  The mode switch will allow  the  ex-
  419.           cluded  area to be either given in row/column text positions
  420.           or X/Y pixel positions.
  421.  
  422.           Passed:  5 initialized integer variables or constants
  423.                    Mode 0 = pixel positions
  424.                       LeftColX% = left horizontal (X) position with a
  425.                                   value from 0 to 632
  426.                       UpRowY% = upper vertical (Y) position with a
  427.                                 value from 0 to 192
  428.                       RightColX% = right horizontal (X) position with
  429.                                    a value from LeftColX% to 632
  430.                       LowRowX% = lower vertical (Y) position with a
  431.                                  value from UpRowY% to 192
  432.                    note:  The pixel given is the upper left dot of
  433.                           the standard 8x8 mouse pointer.  Pixel
  434.                           positions start from 0,0.
  435.  
  436.                    Mode 1 = text positions
  437.                       LeftColX% = left column position with a value
  438.                                   from 1 to 80
  439.                       UpRowY% = upper row position with a value from
  440.                                 1 to 25
  441.                       RightColX% = right column position with a value
  442.                                    from LeftColX% to 80
  443.                       LowRowY% = lower row position with a value from
  444.                                  UpRowY% to 25
  445.  
  446.           Returns:  Nothing
  447.  
  448.           Example:  CALL MouseExclude(15, 20, 21, 35, 1)
  449.  
  450.  
  451.  
  452.           -------------------------------------------------
  453.           MouseClick(LeftClick%, MiddleClick%, RightClick%)
  454.           -------------------------------------------------
  455.           This  routine  will  return  a  value indicating the current
  456.           mouse button in use.  The value is only  returned  upon  the
  457.           release  of  the button, thus returning the value only once.
  458.           This allows the mouse button status to be  effectively  used
  459.           within a loop.
  460.  
  461.           Passed:  3 integer variables
  462.  
  463.           Returns:  0 = button not in use
  464.                     1 = button has been clicked
  465.  
  466.           Example:  CALL MouseClick(lft%, mid%, rgt%)
  467.  
  468.  
  469.           -----------------------------------------------------
  470.           MouseScroll(LeftButton%, MiddleButton%, RightButton%)
  471.           -----------------------------------------------------
  472.           This routine will return  a  value  indicating  the  current
  473.           mouse   button   being  pressed.   This  value  will  remain
  474.           constant until the button is released.
  475.  
  476.           Passed:  3 integer variables
  477.  
  478.           Returns:  0 = button not in use
  479.                     1 = button is being pressed
  480.  
  481.           Example:  CALL MouseScroll(lft%, mid%, rgt%)
  482.  
  483.  
  484.           --------------------------------
  485.           MouseCursor(Fore%, Back%, Char%)
  486.           --------------------------------
  487.           This routine allows you to change the character and color of
  488.           the mouse pointer.
  489.  
  490.           Passed:  3 initialized integer variables or constants
  491.                    Fore = foreground color for the new pointer
  492.                           (within a range of 0 to 15)
  493.                    Back = background color for the new pointer
  494.                           (within a range of 0 to 7)
  495.                    Char = ASCII decimal value for the character of the
  496.                           new pointer (within a range of 0 to 255)
  497.  
  498.           Returns:  Nothing
  499.  
  500.           Example:  CALL MouseCursor(12, 7, 30)
  501.  
  502.  
  503.           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  504.           Note:  Not  all mouse drivers support the MouseReset(2-5) or
  505.                  MouseCursor() routines.  If it is your intent to dis-
  506.                  tribute  programs  for  maximum  compatibility,  then
  507.                  you should consider not using these functions.
  508.           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  509.  
  510.  
  511.  
  512.           --------------------------------------------------------
  513.           DoWindow(UpR%, LfC%, VSz%, HSz%, Att%, Frm%, Shw%, Txt$,
  514.                    Lct%)
  515.           --------------------------------------------------------
  516.           This routine will create attractive application  windows  at
  517.           any  screen  position.  You have control over color, type of
  518.           frame and color, type and location of shadow,  and  location
  519.           of  window title and style.  This windowing routine offers a
  520.           wide variety of possibilities.
  521.  
  522.           Passed:  8 initialized integer variables or constants
  523.                    1 string variable or constant for title
  524.                    UpR = upper row position for start of window
  525.                          (within a range of 1 to 24)
  526.                    LfC = left column position for start of window
  527.                          (within a range of 1 to 79)
  528.                    VSz = vertical size of window (# of rows)
  529.                          (within a range of 26 minus UpR)
  530.                    HSz = horizontal size of window (# of columns)
  531.                          (within a range of 81 minus LfC)
  532.                    Att = attribute of window colors
  533.                          (within a range of 0 to 127)
  534.                          ( (background * 16) + foreground )
  535.                          Note:  Adding 128 to the attribute will
  536.                                 produce a blinking foreground
  537.                    Frm = frame type, if any
  538.                          0 = no frame
  539.                          1 = single line
  540.                          2 = double line
  541.                          3 = single vertical and double horizontal
  542.                          4 = single horizontal and double vertical
  543.                          5 = solid frame enclosing the window
  544.                    Shw = shadow location and type, if any
  545.                          0 = no shadow
  546.                          1 = shadow left side and bottom of window
  547.                              (black in color)
  548.                          2 = shadow right side and bottom of window
  549.                              (black in color)
  550.                          3 = shadow left side and bottom of window
  551.                              (tinted black)
  552.                          4 = shadow right side and bottom of window
  553.                              (tinted black)
  554.                          note:  Tinted black is a combination, with
  555.                                 ASCII character #177, of the color
  556.                                 attribute outside the window and black.
  557.                    Txt = string variable or constant used for the
  558.                          title of the window
  559.                          note: Empty double quotes ("") or a string
  560.                                initialized to null will not produce
  561.                                a title.
  562.                    Lct = determines the location of the title, if any
  563.                          0 = title at top without brackets
  564.                          1 = title at bottom without brackets
  565.                          2 = title at top with brackets
  566.                          3 = title at bottom with brackets
  567.                          note:  If a title is not present, the
  568.                                 location value has no effect.
  569.  
  570.  
  571.  
  572.                    note:  The horizontal and vertical size cannot be
  573.                           less then 2.
  574.  
  575.           Returns:  Nothing
  576.  
  577.           Examples:  CALL DoWindow(5, 10, 15, 60, 98, 5, 3, "", 0)
  578.                      or
  579.                      CALL DoWindow(Rw, Cl, Rn, Cn, 4, 0, 0, Text$, 2)
  580.  
  581.  
  582.           -----------------
  583.           PutScrn(ScrnBuf$)
  584.           -----------------
  585.           This routine will allow you to save the entire  contents  of
  586.           the  screen currently being displayed.  The screen saved can
  587.           later be retrieved and displayed with the companion  routine
  588.           GetScrn().  The screen's contents is saved to a string vari-
  589.           able or array initialized  to  4000  characters  in  length.
  590.           (ie. DIM ScrnBuf(3) AS STRING * 4000)
  591.  
  592.           Passed:  An initialized string variable or array at least
  593.                    4000 characters in length
  594.  
  595.           Returns:  current screen's contents
  596.  
  597.           Examples:  DIM ScrnBuf AS STRING * 4000
  598.                      CALL PutScrn(ScrnBuf)
  599.                      or
  600.                      DIM SHARED ScrnBufArr(2) AS STRING * 4000
  601.                      CALL PutScrn(ScrnBufArr(0))  [default option base]
  602.  
  603.  
  604.           -----------------
  605.           GetScrn(ScrnBuf$)
  606.           -----------------
  607.           This routine will allow you  to  retrieve  and  display  the
  608.           contents  of  the  screen  saved  by  its  companion routine
  609.           PutScrn().
  610.  
  611.           Passed:  The string variable or array that contains the
  612.                    screen to be displayed.
  613.  
  614.           Returns:  Nothing
  615.  
  616.           Examples:  CALL GetScrn(ScrnBuf)
  617.                      or
  618.                      CALL GetScrn(ScrnBufArr(1))
  619.  
  620.  
  621.  
  622.           ---------------------------------
  623.           PrtScrn(Strg$, Row%, Col%, Attr%)
  624.           ---------------------------------
  625.           This is a machine language routine that will print a  string
  626.           variable or constant to the screen at the location and color
  627.           indicated  by its arguments.  The attribute is a combination
  628.           of  the  foreground  and  background  colors  and   can   be
  629.           determined  by  the  following  formula: (background * 16) +
  630.           foreground.
  631.  
  632.           Passed:  3 initialized integer variables or constants
  633.                    1 initialized string variable or constant
  634.                    Strg = string variable or constant to be displayed
  635.                    Row  = screen row for display
  636.                           (within a range of 1 to 25)
  637.                    Col  = screen column for display
  638.                           (within a range of 1 to 80)
  639.                    Attr = attribute of color to be displayed
  640.                           (within a range of 0 to 127)
  641.                           Note:  Adding 128 to the attribute will
  642.                                  produce a blinking foreground
  643.  
  644.           Returns:  Nothing
  645.  
  646.           Examples:  CALL PrtScrn("Hello Universe", 12, 33, 110)
  647.                      or
  648.                      CALL PrtScrn(hello$, rw%, cl%, att%)
  649.  
  650.  
  651.           ----------------------------------------
  652.           GetDrive(TotDrives%, CurDrive%, CurDir$)
  653.           ----------------------------------------
  654.           This routine returns the total number of drives installed on
  655.           a system,  the  current  drive  location,  and  the  current
  656.           directory location.
  657.  
  658.           Passed:  2 integer variables
  659.                    1 string variable at least 65 characters in length
  660.  
  661.           Returns:  TotDrives% = total number of disk drives installed
  662.                                  on system
  663.  
  664.                     CurDirve% = numeric value indicating current drive
  665.                                 (1=A:, 2=B:, 3=C: and so on)
  666.  
  667.                     CurDir$  = string containing the current drive and
  668.                                directory location. (ie. C:\QB4\Q4TOOL)
  669.  
  670.                                Note:  maximum possible string length
  671.                                       returned is 65 characters
  672.  
  673.           Example:  CALL GetDrive(TotDrv%, CurDrv%, Dir$)
  674.  
  675.  
  676.  
  677.           -------------------
  678.           SetDrive(DriveNum%)
  679.           -------------------
  680.           This routine allows you to change the current drive location
  681.           within  an application.  Valid drive numbers range from 1 to
  682.           26.  No action is taken if the drive number supplied is  not
  683.           valid or the drive does not exist on the system.
  684.  
  685.           Passed:  An initialized integer variable or constant
  686.                    (1=A:, 2=B:, 3=C: and so on up to 26)
  687.  
  688.           Returns:  Nothing
  689.  
  690.           Examples:  CALL SetDrive(3)
  691.                      or
  692.                      NewDrv% = 2
  693.                      CALL SetDrive(NewDrv%)
  694.  
  695.  
  696.           --------------------
  697.           DriveSpc(Available&)
  698.           --------------------
  699.           This  routine  will  return the total bytes available on the
  700.           disk drive supplied.  The routine is useful when wanting  to
  701.           know  if  enough  disk  space  remains on a drive to write a
  702.           file.
  703.  
  704.           Passed:  A long integer containing the drive number to check
  705.                    (1=A:, 2=B:, 3=C: and so on)
  706.  
  707.           Returns:  The total bytes available on specified drive
  708.  
  709.           Example:  Drv& = 2
  710.                     CALL DriveSpc(Drv&)
  711.  
  712.  
  713.           -------------------------
  714.           GetSize(FileName$, Size&)
  715.           -------------------------
  716.           This routine returns the file size of the given file spec.
  717.  
  718.           Passed:  1 initialized string or constant containing  the
  719.                        file name and its location, if any
  720.                        (ie. C:\Q4T\Q4T-DEMO.EXE)
  721.                    1 long integer variable
  722.  
  723.           Returns:  Size& = size of specified file.  If 0 is returned,
  724.                             file was not found.
  725.  
  726.           Examples:  CALL GetSize("Q4T.LIB", FSize&)
  727.                      or
  728.                      FileSpec$ = "D:\WP\TEST.TXT"
  729.                      CALL GetSize(FileSpec$, FSize&)
  730.  
  731.  
  732.  
  733.           -------------------
  734.           GetDOS(VersionNum$)
  735.           -------------------
  736.           This routine return a string containing the version  of  DOS
  737.           currently  used  by a computer system.  The routine is handy
  738.           when wanting to know what  system  interrupts  you  can  use
  739.           based on the DOS version installed.
  740.  
  741.           Passed:  A string variable
  742.  
  743.           Returns:  VersionNum$ = current DOS version (ie. 5.0)
  744.  
  745.           Example:  CALL GetDOS(Ver$)
  746.  
  747.  
  748.           ----------------------------------------------------------
  749.           GetVideo(Mode%, Page%, Col%, CurStart%, CurStop%, CurAtt%)
  750.           ----------------------------------------------------------
  751.           This routine can provide you with necessary information on a
  752.           system's current video state.  If used at the beginning of a
  753.           program, the  information  retrieved  can  be  used  at  its
  754.           closing to restore a system's video status.
  755.  
  756.           Passed:  6 Integer variables
  757.  
  758.           Returns:  Mode% = current video mode as outlined by Int 10H,
  759.                             Function 00H
  760.  
  761.                     Page% = current video page number
  762.  
  763.                     Col% = number of columns for current video mode
  764.  
  765.                     CurStart% = starting scan line for cursor
  766.  
  767.                     CurStop% = ending scan line for cursor
  768.  
  769.                     CurAtt% = color attribute at cursor position
  770.  
  771.           Example:  CALL GetVideo(VMd%, VPg%, Col%, CSt%, CSp%, CAt%)
  772.  
  773.  
  774.           ---------------
  775.           SetVideo(Mode%)
  776.           ---------------
  777.           This  routine  allows you to set a desired video mode.  When
  778.           used in conjunction with the value returned by GetVideo(), a
  779.           system's video mode, if changed within  a  program,  can  be
  780.           restored to it initial state.
  781.  
  782.           Passed:   An  initialized  integer  variable  or constant as
  783.                     outlined by Int 10H, Function 00H
  784.  
  785.           Returns:  Nothing
  786.  
  787.           Examples:  CALL SetVideo(3)
  788.                      or
  789.                      VMode% = 1
  790.                      CALL SetVideo(VMode%)
  791.  
  792.  
  793.  
  794.           ------------------------------------------------------------
  795.           BarMenu(MenuStr(), A1%, A2%, A3%, A4%, A5%, Mice%, R1%, R2%)
  796.           ------------------------------------------------------------
  797.           This is a comprehensive top line pull down bar menu routine.
  798.           It's  configurable  with five color attributes, window frame
  799.           style, and mouse support.  This routine allows  you  to  add
  800.           a full and attractive menu to any application.
  801.  
  802.           Passed:  MenuStr() - a two dimensional string array contain-
  803.                                ing the menu items
  804.  
  805.                      Note:  The (0, 0) element of MenuStr() holds the
  806.                             upper limits of each second dimension.
  807.                             (ie.  MenuStr(0, 0) = "03050402").
  808.                             Each 2d dimension 0 element for each 1st
  809.                             dimension holds the level 1 menu item.
  810.  
  811.                    A1% - color attribute of level 1 menu bar
  812.  
  813.                    A2% - color attribute for highlighted first letter
  814.                          of level 1 menu bar
  815.  
  816.                      Note:  If these two attributes (A1 & A2) are NOT
  817.                             the same value and the first letter of
  818.                             all level 1 menu titles are different,
  819.                             then BarMenu() will pick the proper menu
  820.                             title by pressing the highlighted letter.
  821.  
  822.                    A3% - color attribute of level 2 menu window
  823.  
  824.                    A4% - color attribute of level 2 menu window text
  825.  
  826.                    A5% - color attribute of level 2 menu window
  827.                          highlighted test (item selected)
  828.  
  829.                    Mice% - a True (-1) or False (0) value indicating
  830.                            if a mouse is to be used
  831.  
  832.                      Note:  If a mouse is used, the mouse cursor is
  833.                             turned off upon entering BarMenu() and
  834.                             then turned on upon exiting.
  835.  
  836.                    R1% - an integer value indicating the number of
  837.                          spaces between each level 1 menu item
  838.  
  839.                    R2% - frame style used for the level 2 menu window
  840.                          (see DoWindow() for styles - default 5)
  841.  
  842.           Returns:  R1% - level 1 menu item picked
  843.  
  844.                     R2% - level 2 menu item picked
  845.  
  846.                       Note:  If the <ESC> key or RIGHT mouse button is
  847.                              pressed the values returned are 0 and the
  848.                              menu exits.
  849.  
  850.  
  851.  
  852.           Example:  DIM MenuStr(4, 5) AS STRING
  853.                     [ Initialize your array elements           ]
  854.                     [   MenuStr(0, 0) = "03050402"             ]
  855.                     [   MenuStr(1, 0) = " File Information "   ]
  856.                     [   MenuStr(1, 1) = " Get File Size "      ]
  857.                     [   MenuStr(1, 2) = " View File     "      ]
  858.                     [   Etc...                                 ]
  859.                     M% = -1: R1% = 3: R2% = 3
  860.                     CALL BarMenu(MenuStr(), 11, 4, 112, 113, 116,  M%,
  861.                                  R1%, R2%)
  862.  
  863.           Note:  Please  see  the  Demo source code (Q4T-DEMO.BAS) for
  864.                  additional information and an example on the  use  of
  865.                  this routine.
  866.  
  867.  
  868.           ------------
  869.           Ctr(String$)
  870.           ------------
  871.           This  is  a  handy  little  function that returns the column
  872.           position needed to screen center a string variable.  It  can
  873.           easily be incorporated into BASIC's LOCATE statement.
  874.  
  875.           Passed:  An initialized string variable
  876.  
  877.           Returns:  Column position needed to screen center a
  878.                     string variable.
  879.  
  880.           Examples:  LOCATE 12, Ctr(Strg$)
  881.                      or
  882.                      cntr = Ctr(Strg$)
  883.                      LOCATE 12, cntr
  884.  
  885.  
  886.           -----------------------
  887.           Delay(Length!, Forced%)
  888.           -----------------------
  889.           This routine is  a  smart  alternative  to  QB's  new  SLEEP
  890.           statement  or the numerous appearances of LOOPs.  This delay
  891.           can either be forced or user bypass  with  the  keyboard  or
  892.           mouse  buttons  (if installed).  The delay makes use of real
  893.           time so CPU speed has little effect.
  894.  
  895.           Passed:  1 initialized integer variable or constant
  896.                    1 initialized long variable or constant
  897.                    Length = single precision integer indicating the
  898.                             length of the delay in seconds
  899.                    Forced = integer indicating the type of delay
  900.                             0 = not forced (can be bypassed with
  901.                                 any key or mouse button)
  902.                             1 = delay is forced (remains in effect
  903.                                 until specified time has elapsed)
  904.                    note:  If both Length and Forced are 0, then
  905.                           Delay() will wait indefinitely until any
  906.                           key or mouse button is pressed.
  907.  
  908.  
  909.  
  910.           Returns:  Nothing
  911.  
  912.           Examples:  CALL Delay(.25, 0)
  913.                      or
  914.                      lgth! = 1.25
  915.                      CALL Delay(lgth1!, 1)
  916.  
  917.  
  918.           -----------------------------------
  919.           QB.QLB (C) - QB.LIB (C) - QB.BI (C)
  920.           -----------------------------------
  921.           These three QuickBASIC files  are  incorporated  into  Q4T's
  922.           libraries.   They  are necessary for the DOS interrupts used
  923.           by the mouse routines.  The  following  is  a  list  of  the
  924.           services   provided   by  these  files.   Because  of  their
  925.           presence, you also have access to these important  services.
  926.           Please  consult  your  QuickBASIC  4.x reference manuals for
  927.           information on the use of these  QB CALL's.  The  demonstra-
  928.           tion  source code (Q4T-DEMO.BAS) illustrates an example of a
  929.           CALL to the Interrupt() routine.
  930.  
  931.                CALL Absolute()
  932.                CALL Int86Old()
  933.                CALL Int86XOld()
  934.                CALL Interrupt()
  935.                CALL InterruptX()
  936.  
  937.  
  938.  
  939.                        **   The $INCLUDE file Q4T.BI   **
  940.                       ====================================
  941.  
  942.  
  943.           The  file Q4T.BI contains the declarations for the Ctr() and
  944.           Delay() routines.  If you intend to use these routines, this
  945.           file must be  used  in  QB's  metacommand  instructions  and
  946.           placed  at  the beginning of your code.  Generally, the TYPE
  947.           declarations for QB's Interrupt() and InperruptX() CALLs are
  948.           also placed in this  file.   Please  see  the  demonstration
  949.           source  code  (Q4T-DEMO.BAS) for an example of a metacommand
  950.           instruction  or  consult  your  QB  reference  manuals   for
  951.           information on $INCLUDE: files.
  952.  
  953.  
  954.  
  955.                 **   A demonstration of the Q4Tool Library   **
  956.                =================================================
  957.  
  958.  
  959.           There's  an  old  cliche  that states, "A picture is worth a
  960.           thousand words".  So, provided with  Q4Tool  is  the  source
  961.           code   [Q4T-DEMO.BAS]  for  a  short  demonstration  of  its
  962.           routines.   This  source  code  will  give  you   a   better
  963.           understanding  as  to  the actual usage of the Q4T routines.
  964.           The code is presented in an ASCII format and can  be  viewed
  965.           with  any  common  text editor or sent to your printer using
  966.           the syntax;  COPY Q4T-DEMO.BAS PRN.  This  demonstration  is
  967.           quite   simple   and   by  no  means  illustrates  the  only
  968.           application for the Q4Tool Library.  If you wish to  compile
  969.           this demo, the following command line syntax should be used.
  970.  
  971.           From the DOS command line for a stand-alone EXE:
  972.  
  973.                BC Q4T-DEMO/O;
  974.                LINK Q4T-DEMO,,,Q4T/E;
  975.  
  976.           To start QB and load Q4T-DEMO.BAS:
  977.  
  978.                QB /L Q4T Q4T-DEMO
  979.  
  980.  
  981.  
  982.            **   Compiling within the QuickBASIC 4.5 Environment   **
  983.           ===========================================================
  984.  
  985.  
  986.           When  starting  QB,  you will need to supply the name of the
  987.           library to look to for external references.   The  following
  988.           is an example of this command line using the Q4T library.
  989.  
  990.                QB /L Q4T [YOURFILE.BAS]
  991.  
  992.           Q4Tool was developed and  compiled  with  QuickBASIC  4.00b.
  993.           QuickBASIC,   when  compiling,  includes  the  name  of  the
  994.           standard library in the object module.  In  this  case,  the
  995.           library  BCOM41.LIB  was  used.   Due  to the syntax used by
  996.           QuickBASIC 4.5 within its environment, a  LINK  warning  may
  997.           result and is easily circumvented.
  998.  
  999.              LINK : warning L4051: BCOM41.LIB : cannot find library
  1000.              Enter new file spec:
  1001.  
  1002.           On  the  line  "Enter new file spec:"  you need to supply QB
  1003.           with the path and library for the version you are using.
  1004.  
  1005.           Examples for QB 4.5:
  1006.  
  1007.              For stand-alone EXE  -  C:\LIB\BCOM45.LIB
  1008.  
  1009.              For run-time EXE  -  C:\LIB\BRUN45.LIB
  1010.  
  1011.              Note:   If the location of your libraries is  within  the
  1012.                      current  directory  or  is  set  within  the  DOS
  1013.                      environment, then the path to your  libraries  is
  1014.                      not necessary.
  1015.  
  1016.           Q4Tool  also  can be linked to your object modules using the
  1017.           standard DOS command  line.   This  process  avoids  the  QB
  1018.           environment  entirely.   Your  source code (BAS) needs to be
  1019.           saved in text (ASCII) format in  order  for  BC  to  operate
  1020.           properly.   The  following  syntax has been tested and works
  1021.           quite well.
  1022.  
  1023.              For stand-alone EXE  -  BC YOURFILE.BAS/O;
  1024.                                      LINK YOURFILE.OBJ,,,Q4T.LIB/E;
  1025.  
  1026.              For run-time EXE  -  BC YOURFILE.BAS;
  1027.                                   LINK YOURFILE.OBJ,,,Q4T.LIB/E;
  1028.  
  1029.              Note:   Be  sure  you  supply  all necessary command line
  1030.                      switches  needed  for  your  source   code   when
  1031.                      compiling (BC).  [ie.  BC YOURFILE.BAS/O/E/X]
  1032.  
  1033.           Please  consult  your  QuickBASIC reference manuals for more
  1034.           detailed information on compiling and linking your  programs
  1035.           from the DOS command line.
  1036.  
  1037.  
  1038.  
  1039.                    **   A look inside the Q4Tool Library   **
  1040.                   ============================================
  1041.  
  1042.  
  1043.           The  Q4Tool  Library  is  comprised  of  eight  object  code
  1044.           modules.  With  this type of construction, it is possible to
  1045.           build libraries  containing  only  the  particular  routines
  1046.           desired, or incorporate them into existing libraries.  These
  1047.           modules are provided to you (on disk) upon your registration
  1048.           of  Q4Tool.   Below  is a list of the object modules and the
  1049.           routines contained in each.
  1050.  
  1051.                 Module Name         Routines          Source Type
  1052.                 -----------         --------          -----------
  1053.  
  1054.                 Q4TOOL.OBJ          Ctr()                 BAS
  1055.                                     Delay()               BAS
  1056.  
  1057.                 Q4WIND.OBJ          DoWindow()            BAS
  1058.  
  1059.                 Q4MOUSE.OBJ         Mouse*()              BAS
  1060.  
  1061.                 PRTSCRN.OBJ         PrtScrn()             ASM
  1062.  
  1063.                 PUTSCRN.OBJ         PutScrn()             ASM
  1064.  
  1065.                 GETSCRN.OBJ         GetScrn()             ASM
  1066.  
  1067.                 BMENU.OBJ           BarMenu()             BAS
  1068.  
  1069.                 EQUIPT.OBJ          GetDirve()            BAS
  1070.                                     SetDrive()            BAS
  1071.                                     DriveSpc()            BAS
  1072.                                     GetVideo()            BAS
  1073.                                     SetVideo()            BAS
  1074.                                     GetDOS()              BAS
  1075.                                     GetSize()             BAS
  1076.  
  1077.           The routine DoWindow() does make CALLs  to  PRTSCRN.OBJ  and
  1078.           must  have  access  to  its services.  When using the Q4WIND
  1079.           module, the PRTSCRN module should always be linked with  it.
  1080.  
  1081.           If  Q4MOUSE.OBJ  is  used separately, it must have access to
  1082.           QB.LIB or QB.QLB if used within the QB environment.
  1083.  
  1084.           The BarMenu() routine makes CALLs to the following  routines
  1085.           and  must  have  access  to  their  services.  If a mouse in
  1086.           intended for use with BarMenu() then Q4MOUSE.OBJ  also  must
  1087.           be accessible.
  1088.  
  1089.                DoWindow()    PrtScrn()   GetScrn()   PutScrn()
  1090.  
  1091.  
  1092.  
  1093.                    **   A look inside the Q4Tool Library   **
  1094.                   ============================================
  1095.  
  1096.  
  1097.           The screen  handling  modules  (ASM)  employ  direct  memory
  1098.           access and assume the segment address of the regen buffer to
  1099.           be the following:
  1100.  
  1101.                       Card Type             Segment Address
  1102.                      -----------           -----------------
  1103.  
  1104.                       Monochrome                 B000H
  1105.  
  1106.                       Color                      B800H
  1107.  
  1108.           The  following  is  a list of internal variables used in the
  1109.           mouse routines.  These variable names should not be used  by
  1110.           your  program  structure  in  conjunction with the COMMON or
  1111.           SHARED Statements.
  1112.  
  1113.                visible33%       mouse1buf33%()     mouse2buf33%()
  1114.  
  1115.           The  remaining  variables  within  the  Q4T   routines   are
  1116.           initialized upon their CALL and are not defined as SHARED.
  1117.  
  1118.  
  1119.  
  1120.               **   A few final notes about the Q4Tool Library   **
  1121.              ======================================================
  1122.  
  1123.  
  1124.           This documentation is not written to be a tutorial and makes
  1125.           the  assumption  you  have  some  knowledge  of  the calling
  1126.           conventions for QuickBASIC.  The demonstration  source  code
  1127.           (Q4T-DEMO.BAS)  was  written  to  provide you with a working
  1128.           example of the Q4T routines and  is  a  valuable  source  of
  1129.           information.
  1130.  
  1131.           A  bug which resulted in a run-time "subscript out of range"
  1132.           error with QB4.5 and MouseReset(2 or  4)  is  now  for  sure
  1133.           fixed.
  1134.  
  1135.           The  DoWindow()  routine  now  supports  a  color  attribute
  1136.           instead  of  the  separate background and foreground colors.
  1137.           This allows better compatibility with the PrtScrn() routine.
  1138.  
  1139.           Q4Tool was  developed  and  tested  on  both  8088  machine,
  1140.           running  at 8 mhz, and a 80386sx machine, running at 16 mhz,
  1141.           and should perform as expected on most computers within  the
  1142.           "86" family.
  1143.  
  1144.  
  1145.  
  1146.                 **   The Shareware principle works for you   **
  1147.                =================================================
  1148.  
  1149.  
  1150.           R. J. Crouch
  1151.           CareWare
  1152.           10217 Ridge View Dr.
  1153.           Grass Valley, CA  95945
  1154.           (916) 477-6024 * CIS 74270,516
  1155.  
  1156.  
  1157.           This program is produced by a member of the  Association  of
  1158.           Shareware  Professionals (ASP).  ASP wants to make sure that
  1159.           the shareware principle works for you.  If you are unable to
  1160.           resolve a shareware-related problem with an  ASP  member  by
  1161.           contacting the member directly, ASP may be able to help. The
  1162.           ASP Ombudsman can help you resolve a dispute or problem with
  1163.           an  ASP  member,  but does not provide technical support for
  1164.           members' products.  Please write to  the  ASP  Ombudsman  at
  1165.           545 Grover Road,  Muskegon, MI  49442  or  send a CompuServe
  1166.           message via easyplex to ASP Ombudsman 70007,3536.
  1167.  
  1168.  
  1169.                   _______
  1170.              ____|__     |                (R)
  1171.           --|       |    |-------------------
  1172.             |   ____|__  |  Association of
  1173.             |  |       |_|  Shareware
  1174.             |__|   o   |    Professionals
  1175.           -----|   |   |---------------------
  1176.                |___|___|    MEMBER
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.                             The Q4Tool Library [Q4T]
  1183.                                     Ver. 1.5
  1184.                                Registration Form
  1185.                 _______________________________________________
  1186.  
  1187.  
  1188.          CareWare
  1189.          10217 Ridge View Dr.
  1190.          Grass Valley, CA  95945
  1191.  
  1192.  
  1193.          Quantity        Type of registration          Cost      Total
  1194.          --------        --------------------          ----      -----
  1195.  
  1196.           ______    Registration of your current      $20.00    _______
  1197.                     copy
  1198.  
  1199.           ______    Registration & latest ver. of     $25.00    _______
  1200.                     Q4Tool & OBJ modules on disk
  1201.  
  1202.           ______    All the above plus all OBJ        $50.00    _______
  1203.                     module source codes on disk
  1204.  
  1205.                                                     Subtotal    _______
  1206.  
  1207.  
  1208.           Disk size:  [ ] 5.25 (360)  -  [ ] 3.5 (720)          _______
  1209.                        (please add $1.00 for ea. 3.5)
  1210.  
  1211.           Please add $4.00 for disk shipping outside of U.S.    _______
  1212.  
  1213.  
  1214.                                              Amount Enclosed    _______
  1215.  
  1216.  
  1217.           All  registered  user  will  receive  prompt  and  courteous
  1218.           support for this  product.   Notification  of  upgrades  are
  1219.           provided when available.  Thank you for your support.
  1220.  
  1221.  
  1222.           Name ________________________________________________
  1223.  
  1224.           Address _____________________________________________
  1225.  
  1226.                   _____________________________________________
  1227.  
  1228.           City, State, Zip ____________________________________
  1229.  
  1230.           Phone (optional) ____________________________________
  1231.  
  1232.           Where did you find Q4T? _____________________________
  1233.  
  1234.  
  1235.           Please make payable to the author  -  R. J. Crouch
  1236.  
  1237.           ORDERS OUTSIDE OF U.S.  -  Please  send  international money
  1238.           orders in U.S. dollars.
  1239.  
  1240.  
  1241.  
  1242.