home *** CD-ROM | disk | FTP | other *** search
/ TopWare 18: Liquid / Image.iso / liquid / top1002 / svgademo.bas < prev    next >
Encoding:
BASIC Source File  |  1993-06-10  |  33.7 KB  |  884 lines

  1. '****************************************************************************
  2. '*     
  3. '*      'SVGAQB10' A Super Vga Graphics Library for use with MS
  4. '*      QuickBasic 4.X
  5. '*      Copyright 1993 by Stephen L. Balkum and Daniel A. Sill
  6. '*
  7. '*      MS and QuickBasic are registered trademarks of Microsoft Corporation.
  8. '*      GIF and 'Graphics Intechange Format' are trademarks (tm) of
  9. '*      Compuserve, Incorporated, an H&R Block Company.
  10. '*
  11. '*    **************** UNREGISTERD SHAREWARE VERSION ***********************
  12. '*    * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN  *
  13. '*    * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
  14. '*    * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY.  *
  15. '*    **********************************************************************
  16. '*
  17. '*    **************** NO WARRANTIES AND NO LIABILITY **********************
  18. '*    * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
  19. '*    * expressed or implied, of merchantability, or fitness, for a        *
  20. '*    * particular use or purpose of this SOFTWARE and documentation.      *
  21. '*    * In no event shall Stephen L. Balkum or Daniel A. Sill be held      *
  22. '*    * liable for any damages resulting from the use or misuse of the     * 
  23. '*    * SOFTWARE and documentation.                                        *
  24. '*    **********************************************************************
  25. '*
  26. '*    ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
  27. '*    * Use, duplication, or disclosure of the SOFTWARE and documentation  *
  28. '*    * by the U.S. Government is subject to the restictions as set forth  *
  29. '*    * in subparagraph (c)(1)(ii) of the Rights in Technical Data and     *
  30. '*    * Computer Software cluse at DFARS 252.227-7013.                     *
  31. '*    * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill,   *
  32. '*    * P.O. Box 7704, Austin, Texas 78713-7704                            *
  33. '*    **********************************************************************
  34. '*
  35. '*    **********************************************************************
  36. '*    * By using this SOFTWARE or documentation, you agree to the above    *
  37. '*    * terms and conditions.                                              *
  38. '*    **********************************************************************
  39. '*
  40. '****************************************************************************
  41.     
  42.  
  43.     REM $INCLUDE: 'SVGAQB10.BI'
  44.     REM $INCLUDE: 'SVGADEMO.BI'
  45.  
  46.     DIM POINTARRY3D(0 TO 13) AS P3Dtype
  47.     DIM PLAYARRY(0 TO 13) AS P3Dtype
  48.     DIM PLOTARRY(0 TO 13) AS P2DType
  49.     DIM OPLOTARRY(0 TO 13) AS P2DType
  50.     DIM GFXBLK(0 TO 10000) AS INTEGER
  51.     DIM SPRITEDATA(0 TO 1040) AS INTEGER
  52.     DIM SPRITEBKGND(0 TO 130) AS INTEGER
  53.    
  54.  
  55.     '*************************************************************************
  56.     '* SAVE THE STARTING VIDEOMODE AND SET IT TO MODE 3.
  57.     '*************************************************************************
  58.     STARTVIDEOMODE = VIDEOMODEGET
  59.     RESTEXT
  60.     CLS
  61.  
  62.     FOR A = 0 TO 33
  63.         Dummy$ = INKEY$  '* CLEAR THE KEYBOARD BUFFER
  64.     NEXT A
  65.     '*************************************************************************
  66.     '* MOVE THE DOS CURSOR TO THE TOP LEFT TO START THE PROGRAM AND SAY HELLO
  67.     '*************************************************************************
  68.     LOCATE 1, 1
  69.     PRINT "'SVGAQB10.LIB' A SuperVGA Graphics Library For Use With MS QuickBASIC 4.5"
  70.     LOCATE 2, 10
  71.     PRINT "Copyright 1993 by Stephen L. Balkum and Daniel A. Sill"
  72.     LOCATE 12, 25
  73.     PRINT "Demonstration/Example Program"
  74.     LOCATE 23, 1
  75.     PRINT "Press a key to begin the demo..."
  76.     GETKEY (RET$)
  77.     CLS
  78.    
  79.     '*************************************************************************
  80.     '* LET'S ID THE PROCESSOR FIRST AS THE LIBRARY REQUIRES A 386 OR BETTER.
  81.     '*************************************************************************
  82.     LOCATE 1, 1
  83.     CPU = WHICHCPU
  84.     CPU$ = STR$(CPU)
  85.     L = LEN(CPU$)
  86.     CPU$ = RIGHT$(CPU$, L - 1)
  87.     IF CPU < 386 THEN
  88.         PRINT "Sorry, this library requires a 80386 or better processor."
  89.         PRINT "Processor is identified as a 80"; CPU$; "."
  90.         PRINT "Demo program will be terminated."
  91.         PRINT
  92.         PRINT "Press a key..."
  93.         SOUND 100, 5
  94.         WHILE INKEY$ = ""
  95.         WEND
  96.         VIDEOMODESET (STARTVIDEOMODE)
  97.         END
  98.     ELSE
  99.         PRINT "Microprocessor is identified as a 80"; CPU$; "."
  100.     END IF
  101.     PRINT
  102.  
  103.     '*************************************************************************
  104.     '* LET'S ID THE VIDEO CARD/CHIP AS THE LIBRARY REQUIRES A SUPERVGA ADAPTER.
  105.     '*************************************************************************
  106.     VGA = WHICHVGA
  107.     SELECT CASE VGA
  108.         CASE IS = 1
  109.             VGA$ = "Acumos SuperVGA"
  110.         CASE IS = 2
  111.             VGA$ = "ATI Technologies SuperVGA"
  112.         CASE IS = 3
  113.             VGA$ = "Ahead V5000 ver A SuperVGA"
  114.         CASE IS = 4
  115.             VGA$ = "Ahead V5000 ver B SuperVGA"
  116.         CASE IS = 5
  117.             VGA$ = "Chips and Technologies SuperVGA"
  118.         CASE IS = 6
  119.             VGA$ = "Cirrus Logic CL-GD 500/600 SuperVGA"
  120.         CASE IS = 7
  121.             VGA$ = "Everex Micro Enhancer SuperVGA"
  122.         CASE IS = 8
  123.             VGA$ = "Genoa SuperVGA"
  124.         CASE IS = 9
  125.             VGA$ = "NCR 77C22E SuperVGA"
  126.         CASE IS = 10
  127.             VGA$ = "Oak Technologies OTI-067/037C SuperVGA"
  128.         CASE IS = 11
  129.             VGA$ = "Paridise/Western Digital SuperVGA"
  130.         CASE IS = 13
  131.             VGA$ = "Trident 8800/8900 SuperVGA"
  132.         CASE IS = 14
  133.             VGA$ = "Tseng Labs 3000 SuperVGA"
  134.         CASE IS = 15
  135.             VGA$ = "Tseng Labs 4000 SuperVGA"
  136.         CASE IS = 16
  137.             VGA$ = "VESA compatable SuperVGA"
  138.         CASE IS = 17
  139.             VGA$ = "Video 7 SuperVGA"
  140.         CASE ELSE
  141.             VGA$ = "Unidentified"
  142.             VGA = 0
  143.     END SELECT
  144.     IF VGA < 1 THEN
  145.         PRINT "Sorry, unable to identify video card or it is not a SuperVGA video adapter."
  146.         PRINT "Demo program will be terminated."
  147.         PRINT
  148.         PRINT "Press a key..."
  149.         SOUND 100, 5
  150.         WHILE INKEY$ = ""
  151.         WEND
  152.         VIDEOMODESET (STARTVIDEOMODE)
  153.         END
  154.     ELSE
  155.         PRINT "Video card/chip is identified as a "; VGA$; "."
  156.     END IF
  157.    
  158.     '*************************************************************************
  159.     '* LET'S SEE THE HOW MUCH MEMORY IS INSTALLED ON THE SUPER VGA ADAPTER.
  160.     '*************************************************************************
  161.     VIDEOMEMORY = WHICHMEM
  162.     MEM$ = STR$(VIDEOMEMORY)
  163.     MEM$ = RIGHT$(MEM$, LEN(MEM$) - 1) + " kB"
  164.     IF VIDEOMEMORY < 1 THEN
  165.         PRINT "Sorry, unable to identify the amount of installed video memory."
  166.         PRINT "Demo program will be terminated."
  167.         PRINT
  168.         PRINT "Press a key..."
  169.         SOUND 100, 5
  170.         WHILE INKEY$ = ""
  171.         WEND
  172.         VIDEOMODESET (STARTVIDEOMODE)
  173.         END
  174.     ELSE
  175.         PRINT "Installed video memory identified as "; MEM$; "."
  176.     END IF
  177.    
  178.     '*************************************************************************
  179.     '* LET'S TELL THE USER WHAT THE HIGHEST RESOLUTION THAT THE VIDEO CARD
  180.     '* AND ITS INSTALLED MEMORY CARD IS CABABLE OF. THE MONITOR MUST BE ABLE
  181.     '* TO SUPPORT THOSE MODES TOO !
  182.     '*************************************************************************
  183.     PRINT "Video card and installed memory is capable of the following resolutions:"
  184.     SELECT CASE VIDEOMEMORY
  185.         CASE IS > 1023
  186.             PRINT TAB(4); "320x200 in 256 colors"
  187.             PRINT TAB(4); "640x480 in 256 colors"
  188.             PRINT TAB(4); "800x600 in 256 colors"
  189.             PRINT TAB(4); "1024x768 in 256 colors"
  190.             MAX = 4
  191.         CASE IS > 511
  192.             PRINT TAB(4); "320x200 in 256 colors"
  193.             PRINT TAB(4); "640x480 in 256 colors"
  194.             PRINT TAB(4); "800x600 in 256 colors"
  195.             MAX = 3
  196.         CASE ELSE
  197.             PRINT TAB(4); "320x200 in 256 colors"
  198.             MAX = 1
  199.     END SELECT
  200.     PRINT
  201.     PRINT "PLEASE keep in mind that not all monitors support all resolutions."
  202.     PRINT
  203.  
  204.     '*************************************************************************
  205.     '* LET'S LOOK FOR A MOUSE. IF WE FIND ONE, TELL ALL ABOUT IT
  206.     '*************************************************************************
  207.     MOUSE = WHICHMOUSE
  208.     IF MOUSE > 0 THEN
  209.         MOUSEINFO MJV, MNV, TP, I
  210.         VER$ = STR$(MNV)
  211.         L = LEN(VER$)
  212.         VER$ = STR$(MJV) + "." + RIGHT$(VER$, L - 1)
  213.         VER$ = "Software driver version is" + VER$ + " (Microsoft equalvalent version)."
  214.         SELECT CASE TP
  215.             CASE IS = 1
  216.                 TYPE$ = "bus mouse"
  217.             CASE IS = 2
  218.                 TYPE$ = "serial mouse"
  219.             CASE IS = 3
  220.                 TYPE$ = "Inport mouse"
  221.             CASE IS = 4
  222.                 TYPE$ = "PS/2 mouse"
  223.             CASE IS = 5
  224.                 TYPE$ = "HP mouse"
  225.             CASE ELSE
  226.                 TYPE$ = "unknown type"
  227.         END SELECT
  228.         PRINT "Microsoft compatable " + TYPE$ + " detected with" + STR$(MOUSE) + " buttons on IRQ" + STR$(I) + "."
  229.         PRINT VER$
  230.     ELSE
  231.         PRINT "No Microsoft compatable mouse detected."
  232.     END IF
  233.     PRINT
  234.  
  235.     '*************************************************************************
  236.     '* LET'S LOOK FOR JOYSTICKS
  237.     '*************************************************************************
  238.     JOYSTICK = WHICHJOYSTICK
  239.     SELECT CASE JOYSTICK
  240.         CASE IS = -1
  241.             A$ = "No joystick port detected or no joystick BIOS support present."
  242.         CASE IS = 0
  243.             A$ = "No joystick detected."
  244.         CASE IS = 1
  245.             A$ = "Joystick A is present and available."
  246.         CASE IS = 2
  247.             A$ = "Joystick B is present and available."
  248.         CASE IS = 3
  249.             A$ = "Both Joystick A and Joystick B are present and available."
  250.     END SELECT
  251.     PRINT A$
  252.     PRINT
  253.     PRINT "Press a key..."
  254.     GETKEY RET$
  255.    
  256.     '*************************************************************************
  257.     '* LET'S GET DOWN TO BUISNESS!
  258.     '*************************************************************************
  259.     RES = 1
  260.     ENDIT = 0
  261.    
  262.     '*************************************************************************
  263.     '* INIT ALTERNATE MOUSE CURSORS
  264.     '*************************************************************************
  265.     FOR I = 1 TO 386
  266.         READ A
  267.         MID$(MAGMOUSECURSOR, I, 1) = CHR$(A)
  268.     NEXT I
  269.     FOR I = 1 TO 386
  270.         READ A
  271.         MID$(BIGMOUSECURSOR, I, 1) = CHR$(A)
  272.     NEXT I
  273.     FOR I = 1 TO 386
  274.         READ A
  275.         MID$(STWMOUSECURSOR, I, 1) = CHR$(A)
  276.     NEXT I
  277.  
  278.     '*************************************************************************
  279.     '* INIT THE SPRITE DATA ARRAY
  280.     '*************************************************************************
  281.     FOR I = 0 TO 7
  282.         FOR J = 0 TO 129
  283.             READ SPRITEDATA(I * 130 + J)
  284.         NEXT J
  285.     NEXT I
  286.  
  287.  
  288.     '*************************************************************************
  289.     '* INIT ALTERNATE COLOR PALETTES
  290.     '*************************************************************************
  291.     RES320
  292.     PALGET ORGPAL, 0, 255
  293.     PAL = ORGPAL
  294.     PAL2 = ORGPAL
  295.     MYPI! = 8 * ATN(1) / 240
  296.     FOR Colr = 0 TO 239
  297.         R1 = 32 + SIN((Colr + 0) * MYPI!) * 31
  298.         G1 = 32 + SIN((Colr + 80) * MYPI!) * 31
  299.         B1 = 32 + SIN((Colr + 160) * MYPI!) * 31
  300.         R2 = 32 + SIN((Colr + 10) * MYPI!) * 31
  301.         G2 = 32 + SIN((Colr + 30) * MYPI!) * 31
  302.         B2 = 32 + SIN((Colr + 50) * MYPI!) * 31
  303.         OFFSET = ((Colr + 16) * 3)
  304.         MID$(PAL, OFFSET + 1, 1) = CHR$(R1)  '* RED
  305.         MID$(PAL, OFFSET + 2, 1) = CHR$(G1)  '* GREEN
  306.         MID$(PAL, OFFSET + 3, 1) = CHR$(B1)  '* BLUE
  307.         MID$(PAL2, OFFSET + 1, 1) = CHR$(R2)  '* RED
  308.         MID$(PAL2, OFFSET + 2, 1) = CHR$(G2)  '* GREEN
  309.         MID$(PAL2, OFFSET + 3, 1) = CHR$(B2)  '* BLUE
  310.     NEXT Colr
  311.     RESTEXT
  312.  
  313.     '*************************************************************************
  314.     '* HERE IS THE MAIN SELECTOR LOOP
  315.     '*************************************************************************
  316.     WHILE ENDIT = 0
  317.         RetVal$ = ""
  318.         CLS
  319.         SOUND 700, .75
  320.         SELECT CASE RES
  321.             CASE IS = 1
  322.                 MAXX = 319
  323.                 MAXY = 199
  324.                 RES$ = "320x200x256"
  325.             CASE IS = 2
  326.                 MAXX = 639
  327.                 MAXY = 479
  328.                 RES$ = "640x480x256"
  329.             CASE IS = 3
  330.                 MAXX = 799
  331.                 MAXY = 599
  332.                 RES$ = "800x600x256"
  333.             CASE IS = 4
  334.                 MAXX = 1023
  335.                 MAXY = 767
  336.                 RES$ = "1024x768x256"
  337.         END SELECT
  338.         PRINT "Please select the demo you would like to see in the " + RES$ + " resolution:"
  339.         PRINT
  340.         PRINT "(0)  Exit This Program"
  341.         PRINT
  342.         PRINT "(1)  Demo #1  The Primitive Drawing Routines"
  343.         PRINT "(2)  Demo #2  The Clipping Capibilities"
  344.         PRINT "(3)  Demo #3  The Fill Routines"
  345.         PRINT "(4)  Demo #4  The Palette Routines"
  346.         PRINT "(5)  Demo #5  The Block Routines"
  347.         PRINT "(6)  Demo #6  The Text Routines"
  348.         PRINT "(7)  Demo #7  The Scrolling Routines"
  349.         PRINT "(8)  Demo #8  The GIF (tm) Routines"
  350.         PRINT "(9)  Demo #9  The Mouse Routines"
  351.         PRINT "(10) Demo #10 The Joystick Routines"
  352.         PRINT "(11) Demo #11 The Two Dimensional Routines"
  353.         PRINT "(12) Demo #12 The Three Dimensional Routines"
  354.         PRINT "(13) The Grand Tour Of All Demos"
  355.         PRINT
  356.         SELECT CASE VIDEOMEMORY
  357.             CASE IS > 1023
  358.                 PRINT "(14) Use 320x200x256  Resolution"
  359.                 PRINT "(15) Use 640x480x256  Resolution"
  360.                 PRINT "(16) Use 800x600x256  Resolution"
  361.                 PRINT "(17) Use 1024x768x256 Resolution"
  362.                 MAX = 17
  363.             CASE IS > 511
  364.                 PRINT "(14) Use 320x200x256  Resolution"
  365.                 PRINT "(15) Use 640x480x256  Resolution"
  366.                 PRINT "(16) Use 800x600x256  Resolution"
  367.                 MAX = 16
  368.             CASE ELSE
  369.                 PRINT "(14) Use 320x200x256  Resolution"
  370.                 MAX = 14
  371.         END SELECT
  372.         A$ = ""
  373.         INPUT "Your Choice"; A$
  374.         KY = VAL(A$)
  375.         IF (A$ > "9") OR (A$ < "0") THEN
  376.             KY = -1
  377.         END IF
  378.         IF KY > MAX THEN
  379.             KY = -1
  380.         END IF
  381.         SELECT CASE KY
  382.             CASE IS = 0
  383.                 ENDIT = 1
  384.             CASE IS = 1
  385.                 'DEMO #1
  386.                 SELECT CASE RES
  387.                     CASE IS = 1
  388.                         RES320
  389.                     CASE IS = 2
  390.                         RES640
  391.                     CASE IS = 3
  392.                         RES800
  393.                     CASE IS = 4
  394.                         RES1024
  395.                 END SELECT
  396.                 DOPRIMS RetVal$, MAXX, MAXY
  397.                 RESTEXT
  398.             CASE IS = 2
  399.                 'DEMO #2
  400.                 SELECT CASE RES
  401.                     CASE IS = 1
  402.                         RES320
  403.                     CASE IS = 2
  404.                         RES640
  405.                     CASE IS = 3
  406.                         RES800
  407.                     CASE IS = 4
  408.                         RES1024
  409.                 END SELECT
  410.                 DOCLIP RetVal$, MAXX, MAXY
  411.                 RESTEXT
  412.             CASE IS = 3
  413.                 'DEMO #3
  414.                 SELECT CASE RES
  415.                     CASE IS = 1
  416.                         RES320
  417.                     CASE IS = 2
  418.                         RES640
  419.                     CASE IS = 3
  420.                         RES800
  421.                     CASE IS = 4
  422.                         RES1024
  423.                 END SELECT
  424.                 DOFILL RetVal$, MAXX, MAXY
  425.                 RESTEXT
  426.             CASE IS = 4
  427.                 'DEMO #4
  428.                 SELECT CASE RES
  429.                     CASE IS = 1
  430.                         RES320
  431.                     CASE IS = 2
  432.                         RES640
  433.                     CASE IS = 3
  434.                         RES800
  435.                     CASE IS = 4
  436.                         RES1024
  437.                 END SELECT
  438.                 DOPAL RetVal$, MAXX, MAXY
  439.                 RESTEXT
  440.             CASE IS = 5
  441.                 'DEMO #5
  442.                 SELECT CASE RES
  443.                     CASE IS = 1
  444.                         RES320
  445.                     CASE IS = 2
  446.                         RES640
  447.                     CASE IS = 3
  448.                         RES800
  449.                     CASE IS = 4
  450.                         RES1024
  451.                 END SELECT
  452.                 DOBLOCK RetVal$, MAXX, MAXY
  453.                 RESTEXT
  454.             CASE IS = 6
  455.                 'DEMO #6
  456.                 SELECT CASE RES
  457.                     CASE IS = 1
  458.                         RES320
  459.                     CASE IS = 2
  460.                         RES640
  461.                     CASE IS = 3
  462.                         RES800
  463.                     CASE IS = 4
  464.                         RES1024
  465.                 END SELECT
  466.                 DOTEXT RetVal$, MAXX, MAXY
  467.                 RESTEXT
  468.             CASE IS = 7
  469.                 'DEMO #7
  470.                 SELECT CASE RES
  471.                     CASE IS = 1
  472.                         RES320
  473.                     CASE IS = 2
  474.                         RES640
  475.                     CASE IS = 3
  476.                         RES800
  477.                     CASE IS = 4
  478.                         RES1024
  479.                 END SELECT
  480.                 DOSCROLL RetVal$, MAXX, MAXY
  481.                 RESTEXT
  482.             CASE IS = 8
  483.                 'DEMO #8
  484.                 SELECT CASE RES
  485.                     CASE IS = 1
  486.                         RES320
  487.                     CASE IS = 2
  488.                         RES640
  489.                     CASE IS = 3
  490.                         RES800
  491.                     CASE IS = 4
  492.                         RES1024
  493.                 END SELECT
  494.                 DOGIF RetVal$, MAXX, MAXY
  495.                 RESTEXT
  496.             CASE IS = 9
  497.                 'DEMO #9
  498.                 SELECT CASE RES
  499.                     CASE IS = 1
  500.                         RES320
  501.                     CASE IS = 2
  502.                         RES640
  503.                     CASE IS = 3
  504.                         RES800
  505.                     CASE IS = 4
  506.                         RES1024
  507.                 END SELECT
  508.                 DOMOUSE RetVal$, MAXX, MAXY
  509.                 RESTEXT
  510.             CASE IS = 10
  511.                 'DEMO #10
  512.                 SELECT CASE RES
  513.                     CASE IS = 1
  514.                         RES320
  515.                     CASE IS = 2
  516.                         RES640
  517.                     CASE IS = 3
  518.                         RES800
  519.                     CASE IS = 4
  520.                         RES1024
  521.                 END SELECT
  522.                 DOJOYSTICK RetVal$, MAXX, MAXY
  523.                 RESTEXT
  524.             CASE IS = 11
  525.                 'DEMO #11
  526.                 SELECT CASE RES
  527.                     CASE IS = 1
  528.                         RES320
  529.                     CASE IS = 2
  530.                         RES640
  531.                     CASE IS = 3
  532.                         RES800
  533.                     CASE IS = 4
  534.                         RES1024
  535.                 END SELECT
  536.                 DO2D RetVal$, MAXX, MAXY
  537.                 RESTEXT
  538.             CASE IS = 12
  539.                 'DEMO #12
  540.                 SELECT CASE RES
  541.                     CASE IS = 1
  542.                         RES320
  543.                     CASE IS = 2
  544.                         RES640
  545.                     CASE IS = 3
  546.                         RES800
  547.                     CASE IS = 4
  548.                         RES1024
  549.                 END SELECT
  550.                 DO3D RetVal$, MAXX, MAXY
  551.                 RESTEXT
  552.             CASE IS = 13
  553.                 'DO THE GRAND TOUR OF ALL DEMOS!
  554.                 CLS
  555.                 PRINT "Press 'Q' To End Grand Tour At Any Time. Press 'S' To Skip To The Next"
  556.                 PRINT "Demo At Any Time. Press Any Other Key to Begin The Grand Tour..."
  557.                 GETKEY RET$
  558.                 IF RET$ = "Q" THEN
  559.                     GOTO EXITGRANDTOUR
  560.                 END IF
  561.                 SELECT CASE RES
  562.                     CASE IS = 1
  563.                         RES320
  564.                     CASE IS = 2
  565.                         RES640
  566.                     CASE IS = 3
  567.                         RES800
  568.                     CASE IS = 4
  569.                         RES1024
  570.                 END SELECT
  571.                 'DEMO #1
  572.                 DOPRIMS RetVal$, MAXX, MAXY
  573.                 IF RetVal$ = "Q" THEN
  574.                     GOTO EXITGRANDTOUR
  575.                 END IF
  576.                 'DEMO #2
  577.                 DOCLIP RetVal$, MAXX, MAXY
  578.                 IF RetVal$ = "Q" THEN
  579.                     GOTO EXITGRANDTOUR
  580.                 END IF
  581.                 'DEMO #3
  582.                 DOFILL RetVal$, MAXX, MAXY
  583.                 IF RetVal$ = "Q" THEN
  584.                     GOTO EXITGRANDTOUR
  585.                 END IF
  586.                 'DEMO #4
  587.                 DOPAL RetVal$, MAXX, MAXY
  588.                 IF RetVal$ = "Q" THEN
  589.                     GOTO EXITGRANDTOUR
  590.                 END IF
  591.                 'DEMO #5
  592.                 DOBLOCK RetVal$, MAXX, MAXY
  593.                 IF RetVal$ = "Q" THEN
  594.                     GOTO EXITGRANDTOUR
  595.                 END IF
  596.                 'DEMO #6
  597.                 DOTEXT RetVal$, MAXX, MAXY
  598.                 IF RetVal$ = "Q" THEN
  599.                     GOTO EXITGRANDTOUR
  600.                 END IF
  601.                 'DEMO #7
  602.                 DOSCROLL RetVal$, MAXX, MAXY
  603.                 IF RetVal$ = "Q" THEN
  604.                     GOTO EXITGRANDTOUR
  605.                 END IF
  606.                 'DEMO #8
  607.                 DOGIF RetVal$, MAXX, MAXY
  608.                 IF RetVal$ = "Q" THEN
  609.                     GOTO EXITGRANDTOUR
  610.                 END IF
  611.                 'DEMO #9
  612.                 DOMOUSE RetVal$, MAXX, MAXY
  613.                 IF RetVal$ = "Q" THEN
  614.                     GOTO EXITGRANDTOUR
  615.                 END IF
  616.                 IF RetVal$ = "Q" THEN
  617.                     GOTO EXITGRANDTOUR
  618.                 END IF
  619.                 'DEMO #10
  620.                 DOJOYSTICK RetVal$, MAXX, MAXY
  621.                 IF RetVal$ = "Q" THEN
  622.                     GOTO EXITGRANDTOUR
  623.                 END IF
  624.                 'DEMO #11
  625.                 DO2D RetVal$, MAXX, MAXY
  626.                 IF RetVal$ = "Q" THEN
  627.                     GOTO EXITGRANDTOUR
  628.                 END IF
  629.                 'DEMO #12
  630.                 DO3D RetVal$, MAXX, MAXY
  631. EXITGRANDTOUR:
  632.                 RetVal$ = ""
  633.                 RESTEXT
  634.             CASE IS = 14
  635.                 RES = 1
  636.             CASE IS = 15
  637.                 RES = 2
  638.             CASE IS = 16
  639.                 RES = 3
  640.             CASE IS = 17
  641.                 RES = 4
  642.             CASE ELSE
  643.                 SOUND 100, 5
  644.         END SELECT
  645.         IF RetVal$ = "Q" THEN
  646.             ENDIT = 1
  647.         END IF
  648.     WEND
  649.  
  650.     '*************************************************************************
  651.     '* THAT'S ALL FOLKS! END THE PROGRAM
  652.     '*************************************************************************
  653.     RESTEXT '* FORCE THE VGA PALETTE TO RESET
  654.     VIDEOMODESET STARTVIDEOMODE '*RESTORE THE VIDEOMODE WE STARTED IN
  655.     RESTEXT '* FORCE THE VGA PALETTE TO RESET
  656.     END
  657.  
  658.  
  659.     '*************************************************************************
  660.     '* DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA
  661.     '*************************************************************************
  662.    
  663.     REM *MAGNIFIER MOUSE CURSOR DATA
  664.     DATA 7,6
  665.     DATA 255,255,255,255,255,7,7,7,7,255,255,255,255,255,255,255
  666.     DATA 255,255,255,7,7,255,255,255,255,7,7,255,255,255,255,255
  667.     DATA 255,255,7,255,255,255,255,255,255,255,255,7,255,255,255,255
  668.     DATA 255,7,255,255,255,255,255,255,255,255,255,255,7,255,255,255
  669.     DATA 255,7,255,255,255,255,255,255,255,255,255,255,7,255,255,255
  670.     DATA 7,255,255,255,255,255,255,255,255,255,255,255,255,7,255,255
  671.     DATA 7,255,255,255,255,255,255,255,255,255,255,255,255,7,255,255
  672.     DATA 7,255,255,255,255,255,255,255,255,255,255,255,255,7,255,255
  673.     DATA 7,255,255,255,255,255,255,255,255,255,255,255,255,7,255,255
  674.     DATA 255,7,255,255,255,255,255,255,255,255,255,255,7,255,255,255
  675.     DATA 255,7,255,255,255,255,255,255,255,255,255,255,7,255,255,255
  676.     DATA 255,7,7,255,255,255,255,255,255,255,255,7,7,255,255,255
  677.     DATA 255,255,7,7,7,255,255,255,255,7,7,7,255,255,255,255
  678.     DATA 255,255,255,7,7,7,7,7,7,8,8,255,255,255,255,255
  679.     DATA 255,255,255,255,255,7,7,7,7,7,8,8,255,255,255,255
  680.     DATA 255,255,255,255,255,255,255,255,255,7,8,8,255,255,255,255
  681.     DATA 255,255,255,255,255,255,255,255,255,255,7,8,8,255,255,255
  682.     DATA 255,255,255,255,255,255,255,255,255,255,7,8,8,255,255,255
  683.     DATA 255,255,255,255,255,255,255,255,255,255,255,7,8,8,255,255
  684.     DATA 255,255,255,255,255,255,255,255,255,255,255,7,8,8,255,255
  685.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,7,8,8,255
  686.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,7,8,8,255
  687.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,7,8,8
  688.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,7,7,7
  689.  
  690.     REM *BIG ARROW MOUSE CURSOR DATA
  691.     DATA 1,1
  692.     DATA 0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255
  693.     DATA 0,15,15,0,0,255,255,255,255,255,255,255,255,255,255,255
  694.     DATA 0,15,15,15,15,0,0,0,255,255,255,255,255,255,255,255
  695.     DATA 0,15,15,15,15,15,15,15,0,0,255,255,255,255,255,255
  696.     DATA 0,15,15,15,15,15,15,15,15,15,0,0,0,255,255,255
  697.     DATA 0,15,15,15,15,15,15,15,15,15,15,15,15,0,0,255
  698.     DATA 0,15,15,15,15,15,15,15,15,15,15,15,15,15,0,255
  699.     DATA 0,15,15,15,15,15,15,15,15,15,15,15,0,0,255,255
  700.     DATA 0,15,15,15,15,15,15,15,15,15,15,0,255,255,255,255
  701.     DATA 0,15,15,15,15,15,15,15,15,0,0,255,255,255,255,255
  702.     DATA 0,15,15,15,15,15,15,15,15,0,255,255,255,255,255,255
  703.     DATA 0,15,15,15,15,15,0,15,15,15,0,255,255,255,255,255
  704.     DATA 0,15,15,15,15,0,0,15,15,15,0,255,255,255,255,255
  705.     DATA 0,15,15,0,0,255,255,0,15,15,15,0,255,255,255,255
  706.     DATA 0,15,0,255,255,255,255,0,15,15,15,0,255,255,255,255
  707.     DATA 0,0,255,255,255,255,255,255,0,15,15,15,0,255,255,255
  708.     DATA 255,255,255,255,255,255,255,255,255,0,15,15,15,0,255,255
  709.     DATA 255,255,255,255,255,255,255,255,255,0,15,15,15,0,255,255
  710.     DATA 255,255,255,255,255,255,255,255,255,255,0,15,15,15,0,255
  711.     DATA 255,255,255,255,255,255,255,255,255,255,255,0,15,15,15,0
  712.     DATA 255,255,255,255,255,255,255,255,255,255,255,0,15,15,15,0
  713.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,0,15,15,0
  714.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0
  715.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  716.    
  717.     REM *STOPWATCH MOUSE CURSOR DATA
  718.     DATA 8,11
  719.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  720.     DATA 255,255,255,255,255,255,15,15,15,15,255,255,255,255,255,255
  721.     DATA 255,255,255,255,255,255,15,15,15,15,255,255,255,255,255,255
  722.     DATA 255,255,255,255,255,255,255,15,15,255,255,255,255,255,255,255
  723.     DATA 255,255,255,255,255,255,15,15,15,15,255,255,255,255,255,255
  724.     DATA 255,255,255,255,15,15,15,7,7,15,15,15,255,255,255,255
  725.     DATA 255,255,255,15,15,7,7,7,7,7,7,15,15,255,255,255
  726.     DATA 255,255,15,15,7,7,7,7,7,7,7,7,15,15,255,255
  727.     DATA 255,15,15,7,0,7,7,7,7,7,7,7,7,15,15,255
  728.     DATA 255,15,7,7,7,0,7,7,7,7,7,7,7,7,15,255
  729.     DATA 15,15,7,7,7,7,0,7,7,7,0,0,7,7,15,15
  730.     DATA 15,7,7,7,7,7,7,0,0,0,7,7,7,7,7,15
  731.     DATA 15,7,7,7,7,7,7,0,0,7,7,7,7,7,7,15
  732.     DATA 15,15,7,7,7,7,7,7,7,7,7,7,7,7,15,15
  733.     DATA 255,15,7,7,7,7,7,7,7,7,7,7,7,7,15,255
  734.     DATA 255,15,15,7,7,7,7,7,7,7,7,7,7,15,15,255
  735.     DATA 255,255,15,15,7,7,7,7,7,7,7,7,15,15,255,255
  736.     DATA 255,255,255,15,15,7,7,7,7,7,7,15,15,255,255,255
  737.     DATA 255,255,255,255,15,15,15,7,7,15,15,15,255,255,255,255
  738.     DATA 255,255,255,255,255,255,15,15,15,15,255,255,255,255,255,255
  739.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  740.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  741.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  742.     DATA 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  743.  
  744.       
  745.     REM *SPRITE DATA
  746.     DATA  15, 15, 0, 0, 0, 2304, 0, 0, 0, 0
  747.     DATA  0, 0, 0, 265, 9, 0, 0, 0, 0, 0
  748.     DATA  2304, 2305, 2305, 0, 0, 0, 0, 0, 0, 2304
  749.     DATA  0, 0, 0, 0, 0, 0, 0, 2304, 0, 0
  750.     DATA  0, 0, 0, 0, 0, 2570, 10, 0, 0, 0
  751.     DATA  0, 0, 2560, 3588, 2564, 0, 0, 0, 0, 0
  752.     DATA  2560, 1038, 2574, 0, 0, 0, 0, 0, 2560, 3588
  753.     DATA  2564, 0, 0, 0, 0, 0, 1280, 2570, 1290, 0
  754.     DATA  0, 0, 0, 0, 5, 2304, 0, 5, 0, 0
  755.     DATA  0, 0, 5, 2304, 0, 5, 0, 0, 0, 1280
  756.     DATA  0, 265, 9, 1280, 0, 0, 0, 1280, 2304, 2049
  757.     DATA  2305, 1280, 0, 0, 0, 5, 2304, 2049, 2305, 0
  758.     DATA  5, 0, 0, 0, 0, 0, 0, 0, 0, 0
  759.  
  760.     DATA  15, 15, 0, 0, 0, 0, 0, 0, 0, 0
  761.     DATA  0, 0, 0, 0, 0, 2313, 2313, 0, 0, 0
  762.     DATA  0, 0, 0, 256, 2305, 0, 0, 0, 0, 0
  763.     DATA  0, 2304, 2305, 0, 0, 0, 0, 0, 0, 9
  764.     DATA  2304, 0, 0, 0, 0, 2570, 2314, 0, 0, 0
  765.     DATA  0, 0, 2560, 1038, 2574, 0, 0, 0, 0, 1280
  766.     DATA  2565, 1028, 2564, 0, 0, 0, 1280, 5, 2560, 1038
  767.     DATA  2574, 0, 0, 0, 5, 0, 2304, 2570, 10, 0
  768.     DATA  0, 0, 0, 2313, 9, 1280, 0, 0, 0, 0
  769.     DATA  2304, 257, 9, 1280, 0, 0, 0, 0, 265, 264
  770.     DATA  9, 5, 0, 0, 0, 0, 2048, 2305, 0, 5
  771.     DATA  0, 0, 0, 0, 0, 9, 1280, 0, 0, 0
  772.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  773.  
  774.     DATA  15, 15, 0, 0, 0, 0, 0, 0, 0, 0
  775.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 5, 0
  776.     DATA  0, 0, 0, 0, 0, 0, 1280, 5, 0, 0
  777.     DATA  0, 0, 0, 0, 0, 1280, 5, 0, 0, 0
  778.     DATA  0, 0, 2313, 0, 1280, 2570, 10, 0, 9, 0
  779.     DATA  257, 9, 2560, 3588, 2564, 0, 2305, 0, 2056, 2305
  780.     DATA  2569, 1038, 2574, 2313, 265, 9, 257, 9, 2560, 3588
  781.     DATA  2564, 0, 2305, 0, 2313, 0, 1280, 2570, 10, 0
  782.     DATA  9, 0, 0, 1280, 5, 0, 0, 0, 0, 0
  783.     DATA  1280, 5, 0, 0, 0, 0, 0, 0, 5, 0
  784.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  785.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  786.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  787.  
  788.     DATA  15, 15, 0, 9, 1280, 0, 0, 0, 0, 0
  789.     DATA  2048, 2305, 0, 5, 0, 0, 0, 0, 265, 264
  790.     DATA  9, 5, 0, 0, 0, 0, 2304, 257, 9, 1280
  791.     DATA  0, 0, 0, 0, 0, 2313, 9, 1280, 0, 0
  792.     DATA  0, 0, 5, 0, 2304, 2570, 10, 0, 0, 0
  793.     DATA  1280, 5, 2560, 1038, 2574, 0, 0, 0, 0, 1280
  794.     DATA  2565, 1028, 2564, 0, 0, 0, 0, 0, 2560, 1038
  795.     DATA  2574, 0, 0, 0, 0, 0, 0, 2570, 2314, 0
  796.     DATA  0, 0, 0, 0, 0, 0, 0, 9, 2304, 0
  797.     DATA  0, 0, 0, 0, 0, 2304, 2305, 0, 0, 0
  798.     DATA  0, 0, 0, 256, 2305, 0, 0, 0, 0, 0
  799.     DATA  0, 2313, 2313, 0, 0, 0, 0, 0, 0, 0
  800.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  801.  
  802.     DATA  15, 15, 0, 5, 2304, 2049, 2305, 0, 5, 0
  803.     DATA  0, 1280, 2304, 2049, 2305, 1280, 0, 0, 0, 1280
  804.     DATA  0, 265, 9, 1280, 0, 0, 0, 0, 5, 2304
  805.     DATA  0, 5, 0, 0, 0, 0, 5, 2304, 0, 5
  806.     DATA  0, 0, 0, 0, 1280, 2570, 1290, 0, 0, 0
  807.     DATA  0, 0, 2560, 3588, 2564, 0, 0, 0, 0, 0
  808.     DATA  2560, 1038, 2574, 0, 0, 0, 0, 0, 2560, 3588
  809.     DATA  2564, 0, 0, 0, 0, 0, 0, 2570, 10, 0
  810.     DATA  0, 0, 0, 0, 0, 2304, 0, 0, 0, 0
  811.     DATA  0, 0, 0, 2304, 0, 0, 0, 0, 0, 0
  812.     DATA  2304, 2305, 2305, 0, 0, 0, 0, 0, 0, 265
  813.     DATA  9, 0, 0, 0, 0, 0, 0, 2304, 0, 0
  814.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  815.  
  816.     DATA  15, 15, 0, 0, 0, 0, 1280, 0, 9, 0
  817.     DATA  0, 0, 0, 0, 5, 2304, 2049, 0, 0, 0
  818.     DATA  0, 0, 5, 265, 264, 9, 0, 0, 0, 1280
  819.     DATA  0, 265, 2305, 0, 0, 0, 0, 1280, 0, 2313
  820.     DATA  9, 0, 0, 0, 0, 2570, 2314, 0, 0, 5
  821.     DATA  0, 0, 2560, 1038, 2574, 0, 1285, 0, 0, 0
  822.     DATA  2560, 1028, 2564, 1285, 0, 0, 0, 0, 2560, 1038
  823.     DATA  2574, 0, 0, 0, 0, 0, 2304, 2570, 10, 0
  824.     DATA  0, 0, 2304, 0, 9, 0, 0, 0, 0, 0
  825.     DATA  2304, 2305, 0, 0, 0, 0, 0, 0, 2304, 257
  826.     DATA  0, 0, 0, 0, 0, 0, 2304, 2313, 9, 0
  827.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  828.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  829.  
  830.     DATA  15, 15, 0, 0, 0, 0, 0, 0, 0, 0
  831.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  832.     DATA  0, 0, 0, 0, 0, 5, 0, 0, 0, 0
  833.     DATA  0, 0, 1285, 0, 0, 0, 0, 0, 0, 1285
  834.     DATA  0, 0, 0, 9, 0, 2570, 1290, 0, 2304, 9
  835.     DATA  2304, 1, 2560, 3588, 2564, 0, 265, 1, 265, 2313
  836.     DATA  2569, 1038, 2574, 2313, 2049, 8, 2304, 1, 2560, 3588
  837.     DATA  2564, 0, 265, 1, 0, 9, 0, 2570, 1290, 0
  838.     DATA  2304, 9, 0, 0, 0, 0, 0, 1285, 0, 0
  839.     DATA  0, 0, 0, 0, 0, 0, 1285, 0, 0, 0
  840.     DATA  0, 0, 0, 0, 0, 5, 0, 0, 0, 0
  841.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  842.     DATA  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  843.  
  844.     DATA  15, 15, 0, 0, 0, 0, 0, 0, 0, 0
  845.     DATA  2304, 2313, 9, 0, 0, 0, 0, 0, 2304, 257
  846.     DATA  0, 0, 0, 0, 0, 0, 2304, 2305, 0, 0
  847.     DATA  0, 0, 0, 0, 2304, 0, 9, 0, 0, 0
  848.     DATA  0, 0, 0, 0, 2304, 2570, 10, 0, 0, 0
  849.     DATA  0, 0, 2560, 1038, 2574, 0, 0, 0, 0, 0
  850.     DATA  2560, 1028, 2564, 1285, 0, 0, 0, 0, 2560, 1038
  851.     DATA  2574, 0, 1285, 0, 0, 0, 0, 2570, 2314, 0
  852.     DATA  0, 5, 0, 0, 0, 1280, 0, 2313, 9, 0
  853.     DATA  0, 0, 0, 1280, 0, 265, 2305, 0, 0, 0
  854.     DATA  0, 0, 5, 265, 264, 9, 0, 0, 0, 0
  855.     DATA  5, 2304, 2049, 0, 0, 0, 0, 0, 1280, 0
  856.     DATA  9, 0, 0, 0, 0, 0, 0, 0, 0, 0
  857.  
  858. REM $DYNAMIC
  859.     SUB GETKEY (KEY$)
  860.  
  861.     '*************************************************************************
  862.     '* THIS ROUTINE WAITS FOR A KEY STROKE
  863.     '*************************************************************************
  864.    
  865.     FOR A = 0 TO 7 '* CLEAR THE KBD BUFFER
  866.         A$ = INKEY$
  867.     NEXT A
  868.    
  869.     SOUND 700, .75
  870.     A$ = ""
  871.     WHILE A$ = ""
  872.         A$ = INKEY$
  873.         IF A$ = "q" THEN
  874.             A$ = "Q"
  875.         END IF
  876.         IF A$ = "s" THEN
  877.             A$ = "S"
  878.         END IF
  879.     WEND
  880.     KEY$ = A$
  881.    
  882.     END SUB
  883.  
  884.