home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / Q4TOOL.ZIP / Q4T-DEMO.BAS next >
BASIC Source File  |  1990-06-27  |  21KB  |  463 lines

  1. '----------------------------------------------------------------------------
  2. '                         **    Q4T-DEMO.BAS    **
  3. '      Demonstration of the capabilities of the Q4Tool Library routines
  4. '     Written for and compiled with Microsoft (R), QuickBASIC  4.00b (C)
  5. '                       By R. J. Crouch  -  June 1990
  6. '                      Copyright  -  1990  -  CareWare
  7. '                            All Rights Reserved
  8. '----------------------------------------------------------------------------
  9.  
  10. ' For Q4tool v.1.1
  11.  
  12. REM $INCLUDE: 'Q4T.BI'                            ' Contains declarations for
  13.                                                   '  Ctr() and Delay()
  14. DEFINT A-Z
  15.  
  16. TYPE RegType                                      ' Necessary for the CALL to
  17.    ax    AS INTEGER                               '  the QB's Interrupt()
  18.    bx    AS INTEGER                               '  routine
  19.    cx    AS INTEGER                               '
  20.    dx    AS INTEGER                               ' Generally placed in the
  21.    bp    AS INTEGER                               '  "$INCLUDE:" file
  22.    si    AS INTEGER                               '
  23.    di    AS INTEGER                               '
  24.    flags AS INTEGER                               '
  25. END TYPE                                          '
  26.                                                   
  27. DIM InReg AS RegType, OutReg AS RegType               ' Typed for Interrupt()
  28.  
  29. DIM ScrnBuf(8) AS STRING * 4000                          ' Room for 9 screens
  30.                                                          '  w/ option base 0
  31. FALSE = 0: TRUE = NOT FALSE                                           ' Flags
  32. CONST CONT = "Press any key to continue"                            ' Prompts
  33. CONST MCONT = "Left mouse button to continue"                       '
  34.  
  35. b1$ = CHR$(221) + " ": b2$ = " " + CHR$(222)                       ' Brackets
  36. cpyr$ = b1$ + "Copyright - 1990 - CareWare" + b2$
  37. mpos1$ = b1$ + "Row ## - Col ##" + b2$                         ' Formats for
  38. mpos2$ = b1$ + "Y ###  -  X ###" + b2$                         '  PRINT USING
  39. buttons = 0
  40.  
  41. 'ON KEY(10) GOSUB Terminate                                 ' For programming
  42. 'KEY(10) ON                                                 '  purposes only
  43.  
  44. '----------------------------------------------------------------------------
  45. 'Title Screen
  46. '----------------------------------------------------------------------------
  47.  
  48.    COLOR 0, 1, 0: CLS
  49.    CALL DoWindow(2, 6, 23, 69, 14, 6, 5, 0, "Q4Tool Demo", 2)
  50.    CALL PrtScrn(cpyr$, 24, 25, 110)
  51.    CALL DoWindow(5, 13, 16, 55, 15, 0, 5, 3, CONT, 3)
  52.    FOR row = 7 TO 16
  53.       READ line$: lctr = Ctr(line$)
  54.       IF row < 10 THEN att = 12 ELSE att = 14
  55.       CALL PrtScrn(line$, row, lctr, att)
  56.    NEXT row
  57.    READ line$
  58.    CALL PrtScrn(line$, row + 1, lctr, 10)
  59.    CALL PutScrn(ScrnBuf(0))
  60.    CALL Delay(0, 0)
  61.    CALL MouseStatus(have)                         ' Check for mouse interrupt
  62.    IF have THEN                                            ' Ask to use mouse
  63.       CALL DoWindow(7, 16, 12, 49, 12, 0, 1, 0, "", 0)
  64.       CALL PrtScrn(STRING$(29, 220), 20, 26, 15)
  65.       CALL MouseVersion(ver$)
  66.       FOR row = 9 TO 14
  67.          READ line$: lcrt = Ctr(line$)
  68.          CALL PrtScrn(line$, row, lctr, 14)
  69.          IF row = 10 THEN CALL PrtScrn(ver$, row, lctr + 26, 10)
  70.       NEXT row
  71.       finish! = TIMER + 30
  72.       DO
  73.          i$ = UCASE$(INKEY$)                                   ' Wait for key
  74.          now! = TIMER                                          '  or 30 sec.
  75.       LOOP UNTIL i$ = "N" OR i$ = "Y" OR now! > finish!
  76.       IF i$ = "Y" THEN                              ' Initialize mouse driver
  77.          prompt$ = MCONT: pctr = Ctr(MCONT)                ' Use mouse prompt
  78.          CALL MouseReset(buttons)                       ' Return # of buttons
  79.          mouse = TRUE
  80.       ELSE                                                 ' Mouse not wanted
  81.          prompt$ = CONT: pctr = Ctr(CONT)                    ' Use key prompt
  82.          mouse = FALSE
  83.       END IF
  84.       CALL PrtScrn(prompt$, 16, pctr, 10)
  85.       CALL Delay(30, 0)
  86.    ELSE                                                   ' No mouse detected
  87.       FOR x = 1 TO 6: READ nul$: NEXT x                ' Skip mouse text data
  88.    END IF
  89.    CALL GetScrn(ScrnBuf(0))                         ' Retrieve opening screen
  90.    IF mouse THEN CALL PrtScrn(b1$ + prompt$ + b2$, 20, pctr - 2, 15)
  91.    CALL Delay(60, 0)
  92.    CLS
  93.    CALL DoWindow(8, 14, 9, 53, 13, 0, 5, 3, prompt$, 3)
  94.    FOR row = 11 TO 13
  95.       READ line$: lctr = Ctr(line$)
  96.       CALL PrtScrn(line$, row, lctr, 15)
  97.    NEXT row
  98.    CALL Delay(60, 0)
  99.  
  100. '----------------------------------------------------------------------------
  101. 'Frame types and screen save/restore
  102. '----------------------------------------------------------------------------
  103.  
  104.    COLOR 0, 0, 0: CLS
  105.    col = 0: frm = -1: scrn = -1
  106.    bgd = 0: fgd = 15
  107.    FOR row = 2 TO 14 STEP 3
  108.       col = col + 6: bgd = bgd + 1
  109.       frm = frm + 1: fgd = fgd - 1
  110.       CALL DoWindow(row, col, 10, 20, fgd, bgd, frm, 0, "Window", 2)
  111.       scrn = scrn + 1
  112.       CALL PutScrn(ScrnBuf(scrn))                   ' Screen save w/PutScrn()
  113.    NEXT row
  114.    FOR row = 11 TO 2 STEP -3
  115.       col = col + 6: bgd = bgd + 1
  116.       frm = frm + 1: fgd = fgd - 1
  117.       IF frm = 6 THEN frm = 1
  118.       IF fgd = 9 THEN fgd = 14
  119.       CALL DoWindow(row, col, 10, 20, fgd, bgd, frm, 0, "Q4Tool", 3)
  120.       IF scrn < 8 THEN                             ' Save all but last screen
  121.          scrn = scrn + 1
  122.          CALL PutScrn(ScrnBuf(scrn))             ' Save screens for later use
  123.       END IF
  124.    NEXT row
  125.    FOR row = 3 TO 9
  126.       READ line$
  127.       CALL PrtScrn(line$, row, col + 2, 31)
  128.    NEXT row
  129.    CALL PrtScrn(prompt$, 25, pctr, 10)
  130.    CALL Delay(60, 0)
  131.    CALL DoWindow(9, 12, 7, 56, 15, 0, 5, 0, "", 3)
  132.    FOR row = 11 TO 13
  133.       READ line$: lctr = Ctr(line$)
  134.       CALL PrtScrn(line$, row, lctr, 10)
  135.    NEXT row
  136.    CALL Delay(60, 0)
  137.    FOR show = 7 TO 0 STEP -1
  138.       CALL GetScrn(ScrnBuf(show))                    ' Retrieve saved screens
  139.    NEXT show
  140.    FOR row = 5 TO 7
  141.       CALL PrtScrn("*  Fast  *", row, 11, 16)
  142.    NEXT row
  143.    CALL Delay(2, 0)
  144.    CALL DoWindow(10, 12, 7, 56, 15, 0, 5, 0, prompt$, 3)
  145.    FOR row = 12 TO 13
  146.       READ line$: lctr = Ctr(line$)
  147.       CALL PrtScrn(line$, row, lctr, 10)
  148.    NEXT row
  149.    CALL Delay(60, 0)
  150.    FOR show = 1 TO 8
  151.       CALL GetScrn(ScrnBuf(show))                ' Screen restore w/GetScrn()
  152.       CALL Delay(.33, 0)                         '  .33 second delay added
  153.    NEXT show
  154.    CALL PrtScrn("Now a three", 5, 58, 31)
  155.    CALL PrtScrn("second delay", 7, 58, 31)
  156.    CALL Delay(3, 0)
  157.    FOR show = 8 TO 0 STEP -1
  158.       CALL GetScrn(ScrnBuf(show))
  159.       CALL Delay(.33, 0)
  160.    NEXT show
  161.    CALL DoWindow(2, 6, 10, 20, 4, 7, 5, 0, "Q4Tool", 2)
  162.    CALL PrtScrn("*  Next  *", 5, 11, 112)
  163.    CALL PrtScrn("Shadow Styles", 7, 10, 112)
  164.    CALL PrtScrn(prompt$, 25, pctr, 10)
  165.    CALL Delay(60, 0)
  166.  
  167. '----------------------------------------------------------------------------
  168. 'Shadowing
  169. '----------------------------------------------------------------------------
  170.  
  171.    CLS
  172.    CALL DoWindow(1, 1, 25, 80, 9, 3, 5, 0, prompt$, 3)
  173.    CALL DoWindow(2, 21, 3, 38, 0, 7, 1, 0, "", 0)
  174.    CALL DoWindow(6, 41, 18, 35, 1, 1, 0, 0, "", 0)
  175.    READ line$: lctr = Ctr(line$)
  176.    CALL PrtScrn(line$, 3, lctr, 117)
  177.    FOR row = 7 TO 16 STEP 9
  178.       FOR col = 8 TO 43 STEP 35
  179.          shadow = shadow + 1: back = back + 1
  180.          CALL DoWindow(row, col, 7, 30, 14, back, back, shadow, "", 0)
  181.          FOR x = row + 2 TO row + 4
  182.             READ line$
  183.             CALL PrtScrn(line$, x, col + 5, back * 16)
  184.          NEXT x
  185.       NEXT col
  186.       back = back + 1
  187.    NEXT row
  188.    CALL PutScrn(ScrnBuf(0))
  189.    CALL Delay(60, 0)
  190.    CALL DoWindow(8, 9, 10, 62, 14, 0, 5, 0, prompt$, 3)
  191.    FOR row = 10 TO 14
  192.       READ line$: lctr = Ctr(line$)
  193.       IF row < 12 THEN att = 15 ELSE att = 10
  194.       CALL PrtScrn(line$, row, lctr, att)
  195.    NEXT row
  196.    CALL Delay(60, 0)
  197.    CALL GetScrn(ScrnBuf(0))
  198.    CALL DoWindow(11, 12, 6, 57, 11, 0, 5, 0, prompt$, 3)
  199.    FOR row = 13 TO 14
  200.       READ line$
  201.       CALL PrtScrn(line$, row, 18, 15)
  202.    NEXT row
  203.    CALL Delay(60, 0)
  204.  
  205. '----------------------------------------------------------------------------
  206. 'MenuDemo
  207. '----------------------------------------------------------------------------
  208.  
  209.    CALL ShowMenu                         ' Separate module linked to Q4T-DEMO
  210.    COLOR 1, 1, 0: CLS
  211.    CALL DoWindow(9, 12, 7, 57, 13, 0, 5, 3, prompt$, 3)
  212.    FOR row = 11 TO 12
  213.       READ line$
  214.       CALL PrtScrn(line$, row, 18, 15)         ' The source code SHOWMENU.BAS
  215.    NEXT row                                    '  is provided with your
  216.    CALL Delay(60, 0)                           '  registration of Q4Tool
  217.    
  218. '----------------------------------------------------------------------------
  219. 'Mouse Services
  220. '----------------------------------------------------------------------------
  221.  
  222.    mver$ = b1$ + "Mouse Driver ver. " + ver$ + "  -  "
  223.    mstat$ = mver$ + "With" + STR$(buttons) + " buttons installed" + b2$
  224.    sctr = Ctr(mstat$)
  225.  
  226.    CLS
  227.    CALL DoWindow(1, 1, 25, 80, 14, 1, 5, 0, "Q4Tool", 2)
  228.    CALL DoWindow(2, 31, 3, 20, 15, 1, 1, 0, "", 0)
  229.    CALL PrtScrn("Mouse Services", 3, 34, 31)
  230.    CALL DoWindow(5, 5, 10, 35, 12, 0, 5, 0, "Mouse State #1", 2)
  231.    CALL DoWindow(7, 14, 3, 18, 12, 0, 1, 0, "", 0)
  232.    CALL DoWindow(5, 42, 10, 35, 12, 0, 5, 0, "Mouse State #2", 2)
  233.    CALL DoWindow(16, 7, 6, 68, 3, 7, 5, 3, "", 0)
  234.    FOR row = 17 TO 20
  235.       READ line$
  236.       CALL PrtScrn(line$, row, 10, 112)
  237.    NEXT row
  238.    CALL PutScrn(ScrnBuf(0))
  239.    IF mouse THEN
  240.       CALL PrtScrn(mstat$, 25, sctr, 30)
  241.       CALL MouseLimits(6, 6, 13, 38, 1)                 ' -------------------
  242.       CALL MouseLocate(11, 22, 1)                       '
  243.       CALL MouseCursor(9, 7, 30)                        '
  244.       CALL MouseReset(2)                                ' Save mouse state #1
  245.  
  246.       CALL MouseVisible(1)                                 ' Mouse pointer on
  247.       DO
  248.          CALL MouseClick(lft, mid, rgt)                  ' Typical wait for a
  249.       LOOP UNTIL lft OR rgt                              '  mouse button
  250.  
  251.       IF rgt THEN
  252.          CALL MouseLimits(6, 43, 13, 75, 1)             ' -------------------
  253.          CALL MouseLocate(11, 59, 1)                    '
  254.          CALL MouseCursor(14, 0, 24)                    '
  255.          CALL MouseReset(4)                             ' Save mouse state #2
  256.  
  257.          pos$ = mpos1$: mode = 1
  258.          DO                                             ' Loop conditional to
  259.             CALL MouseClick(lft, mid, rgt)              '  mouse button
  260.             IF rgt AND switch THEN
  261.                CALL MouseVisible(0)                     ' Turn old cursor off
  262.                CALL MouseReset(5)                     ' Recall mouse state #2
  263.                CALL MouseVisible(1)                      ' Turn new cursor on
  264.                switch = FALSE
  265.             ELSEIF rgt THEN
  266.                CALL MouseVisible(0)                     ' Turn old cursor off
  267.                CALL MouseReset(3)                     ' Recall mouse state #1
  268.                CALL MouseVisible(1)                      ' Turn new cursor on
  269.                CALL PrtScrn("Black Hole", 8, 18, 12)
  270.                switch = TRUE
  271.             END IF
  272.             IF switch THEN                                   ' Mouse state #1
  273.                CALL MouseExclude(7, 14, 9, 31, 1)           ' Black hole area
  274.                CALL MousePosition(mr, mc, 1)                 ' Turn cursor on
  275.                IF mr < 7 OR mr > 9 OR mc < 14 OR mc > 31 THEN ' outside of
  276.                   CALL MouseVisible(1)                        ' excluded area
  277.                END IF
  278.             ELSE                                             ' Mouse state #2
  279.                IF lft THEN                                     ' Toggle modes
  280.                   IF mode = 0 THEN
  281.                      pos$ = mpos1$: mode = 1
  282.                   ELSE
  283.                      pos$ = mpos2$: mode = 0
  284.                   END IF
  285.                END IF
  286.                CALL MousePosition(r, c, mode)         ' Return mouse position
  287.                LOCATE 14, 50: COLOR 12, 0: PRINT USING pos$; r; c
  288.             END IF
  289.          LOOP UNTIL lft AND switch
  290.       END IF
  291.       CALL MouseVisible(0)
  292.       READ line$, line$
  293.    ELSE                                                 ' Print no mouse text
  294.       CALL PrtScrn("Black Hole", 8, 18, 12)
  295.       CALL DoWindow(21, 7, 4, 68, 12, 0, 1, 0, CONT$, 3)
  296.       FOR row = 22 TO 23
  297.          READ line$: lctr = Ctr(line$)
  298.          CALL PrtScrn(line$, row, lctr, 14)
  299.       NEXT row
  300.       CALL Delay(60, 0)
  301.       CALL GetScrn(ScrnBuf(0))
  302.    END IF
  303.    CALL DoWindow(8, 12, 11, 56, 6, 0, 5, 0, prompt$, 3)
  304.    FOR row = 10 TO 16
  305.       READ line$: lctr = Ctr(line$)
  306.       IF row < 12 THEN att = 15 ELSE att = 10
  307.       CALL PrtScrn(line$, row, lctr, att)
  308.    NEXT row
  309.    CALL Delay(60, 0)
  310.  
  311. '----------------------------------------------------------------------------
  312. 'Closing
  313. '----------------------------------------------------------------------------
  314.  
  315.    CLS
  316.    CALL DoWindow(1, 1, 25, 80, 15, 4, 5, 0, "Q4Tool Demo", 2)
  317.    CALL DoWindow(3, 6, 21, 69, 15, 0, 5, 0, "", 3)
  318.    CALL PrtScrn(cpyr$, 25, 25, 79)
  319.    READ line$: lctr = Ctr(line$)
  320.    CALL PrtScrn(line$, 5, lctr, 12)
  321.    FOR row = 7 TO 19
  322.       READ line$: lctr = Ctr(line$)
  323.       CALL PrtScrn(line$, row, lctr, 14)
  324.    NEXT row
  325.    CALL PrtScrn(prompt$, 21, pctr, 10)
  326.    CALL Delay(90, 0)
  327.  
  328. '----------------------------------------------------------------------------
  329. Terminate:
  330. '----------------------------------------------------------------------------
  331.   
  332.    IF mouse THEN CALL MouseReset(0)
  333.  
  334.    ah = 7: al = 25                              ' Example of system Interrupt
  335.    bh = 7: bl = 0                               '  to clear a screen window
  336.    ch = 0: cl = 0                               '  with int 10h function 7h
  337.    dh = 24: dl = 79                             '  (ah = scroll down)
  338.    InReg.ax = (ah * 256) + al                   ' Conversion of high and low
  339.    InReg.bx = (bh * 256) + bl                   '  byte for acceptance by QB
  340.    InReg.cx = (ch * 256) + cl                   '
  341.    InReg.dx = (dh * 256) + dl                   '
  342.    CALL Interrupt(&H10, InReg, OutReg)          ' Returns nothing
  343.  
  344.    END
  345.  
  346.  
  347.    DATA "Welcome to the world of the"
  348.    DATA "Q4Tool Library [Q4T]"
  349.    DATA "═══════════════════════════"," "
  350.    DATA "This program is set up to demonstrate  the"
  351.    DATA "features of the Q4T Library.  This library"
  352.    DATA "is  designed  to  work with Microsoft (R),"
  353.    DATA "QuickBASIC 4.xx (C).   The source code for"
  354.    DATA "this demo is provided so you  can  examine"
  355.    DATA "the  actual  usage  of these Q4T routines."
  356.    DATA "              Shall we begin?             "
  357.    DATA "This  program  detects  the presence of a"
  358.    DATA "mouse driver, version no.      .  Do  you"
  359.    DATA "wish  to  use your mouse throughout  this"
  360.    DATA "demonstration?                           "," "
  361.    DATA "               (Y)  -  (N)               "
  362.    DATA "First you will see the various windowing"
  363.    DATA "frame  styles and a demonstration of the"
  364.    DATA "screen save and restore routines.       "
  365.    DATA "Q4Tool  offers a"
  366.    DATA "wide variety  of"
  367.    DATA "frame styles."
  368.    DATA "----------------"
  369.    DATA "The window title"
  370.    DATA "can be placed at"
  371.    DATA "top or bottom.  "
  372.    DATA "Each window screen was saved with PutScrn()."
  373.    DATA "We will now use  GetScrn()  and recall those"
  374.    DATA "nine screens.                               "
  375.    DATA "Now  we will add a .33 second delay  and"
  376.    DATA "again recycle through the saved screens."
  377.    DATA "**  Window Shadow Styles  **"
  378.    DATA "left side and bottom"," "
  379.    DATA "*  black in color  *"
  380.    DATA "right side and bottom"," "
  381.    DATA "*  black in  color  *"
  382.    DATA "left side and bottom"," "
  383.    DATA "*   tinted black   *"
  384.    DATA "right side and bottom"," "
  385.    DATA "*   tinted  black   *"
  386.    DATA "So far this demonstration has used  the  following"
  387.    DATA "routines with a combined number of 72 occurrences."," "
  388.    DATA "   MouseStatus() - DoWindow() - PrtScrn()   "
  389.    DATA "   Delay() - PutScrn() - GetScrn() - Ctr()  "
  390.    DATA "Next  is a demonstration of a mouse and key"
  391.    DATA "driven menu created with routines from Q4T."
  392.    DATA "Next will be a demonstration of  the  various"
  393.    DATA "mouse services offered in the Q4Tool Library."
  394.    DATA "The right mouse button will toggle between the separate mouse"
  395.    DATA "states.  While in mouse state #2,  the left mouse button will"
  396.    DATA "toggle  between  modes  for  MousePosition().  While in mouse"
  397.    DATA "state #1, the left mouse button will exit Mouse Services.    "
  398.    DATA "Sorry, but a mouse driver is not detected by this program."
  399.    DATA "A demonstration of the mouse services can not be done."
  400.    DATA "The following routines are used in the mouse"
  401.    DATA "services demonstration.                     ", " "
  402.    DATA "MouseStatus()    MouseReset()     MousePosition()"
  403.    DATA "MouseLocate()    MouseLimits()    MouseVersion() "
  404.    DATA "MouseVisible()   MouseExclude()   MouseCursor()  "
  405.    DATA "MouseClick()                                     "
  406.    DATA "  ==   Q4Tool Library (Q4T)   =="
  407.    DATA "This concludes the short demonstration of the features"
  408.    DATA "offered  by the Q4Tool Library.  Every  routine in Q4T"
  409.    DATA "was  used  in  this  demo.  One half  of the 252 lines"
  410.    DATA "of code in this program contain  a  Q4Tool  statement."
  411.    DATA "The  features  offered  in  this library are common to"
  412.    DATA "most programming needs.  The  prototypes  and  a  full"
  413.    DATA "description  of  these  routines are documented in the"
  414.    DATA "file Q4TOOL.DOC.  Information on the object files  and"
  415.    DATA "source codes for the routines in Q4T is also available"
  416.    DATA "in this file.                                         "," "
  417.    DATA "Microsoft is a registered  trademark of the  Microsoft"
  418.    DATA "Corporation.  Good Luck and Enjoy!                    "
  419.  
  420. '============================================================================
  421. '
  422. '      The source code for  this  demonstration  is  very  simple.   It
  423. '      should, however, give you a better idea as to the practical  use
  424. '      of  the  Q4Tool library routines.  Q4T is designed to be a small
  425. '      library containing the  routines  generally  needed  most.   The
  426. '      mouse  services  and windowing are the backbone of this library.
  427. '      There's few programs, large  or  small,  that  couldn't  utilize
  428. '      these features.
  429. '
  430. '      The   complete   Q4Tool  Library  is  distributed  as  the  file
  431. '      Q4TOOL.ZIP and contains the following files:
  432. '
  433. '                Q4T.LIB         Q4T.QLB           Q4T.BI
  434. '                Q4TOOL.DOC      Q4T-DEMO.BAS      Q4T-DEMO.EXE
  435. '                SHOWMENU.OBJ
  436. '
  437. '      Information  on  the availability of the source and object codes
  438. '      for Q4Tool is found in  the  file  Q4TOOL.DOC.  You  can  always
  439. '      obtain the latest version of Q4Tool from CompuServe (R), IBMPRO,
  440. '      LIB 4 (Browse Q4T) or directly from CareWare.
  441. '
  442. '      Q4Tool is copyrighted to the author with all rights reserved and
  443. '      is  distributed  as  a Shareware product.  If you acquire Q4Tool
  444. '      and decide to use its  services,  than  a  registration  fee  of
  445. '      $30.00  is  required.  This fee, when paid, entitles you to full
  446. '      usage and support of this product, and  the  latest  version  of
  447. '      Q4Tool, with OBJ modules and ShowMenu source, on disk.
  448. '
  449. '                                           _______
  450. '                                      ____|__     |                (R)
  451. '      R. J. Crouch                 --|       |    |-------------------
  452. '      CareWare                       |   ____|__  |  Association of
  453. '      10217 Ridge View Dr.           |  |       |_|  Shareware
  454. '      Grass Valley, CA  95945        |__|   o   |    Professionals
  455. '                                   -----|   |   |---------------------
  456. '                                        |___|___|    MEMBER
  457. '
  458. '
  459. '      Microsoft is registered trademark of the Microsoft Corporation.
  460. '
  461. '============================================================================
  462.  
  463.