home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib40a.dsk / APRIL.1991 / HANDY.MOUSE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  110 lines

  1. 10  REM  ***********************
  2. 20  REM  * HANDY MOUSE         *
  3. 30  REM  * BY CLAY CARR        *
  4. 40  REM  * COPYRIGHT (C) 1991  *
  5. 50  REM  * MINDCRAFT PUBL. CORP*
  6. 60  REM  * CONCORD, MA 01742   *
  7. 70  REM  ***********************
  8. 80  REM 
  9. 90  GOSUB 960: GOTO 810
  10. 100  VTAB XOLD *SPACE/2 +3 -(SPACE/2 *(YOLD = 29)): HTAB YOLD -9: PRINT  TAB( YOLD +9): PRINT 
  11. 110  HTAB YOLD -9: PRINT  TAB( YOLD - LEN(MENU$(XOLD))/2)MENU$(XOLD) TAB( YOLD +9): PRINT : HTAB YOLD -9: PRINT  TAB( YOLD +9): RETURN 
  12. 120  REM  < BEGIN MOUSE SBR >
  13. 130 UP$ =  CHR$(8):DWN$ =  CHR$(21):RTN$ =  CHR$(13):ESC$ =  CHR$(27):SPACE$ =  CHR$(32)
  14. 140  IF MOUSE$ = "M"  THEN Z$ =  CHR$(127): GOTO 470
  15. 150  ON (MOUSE$ = "N") +1 GOSUB 730,780
  16. 160  GOTO 390
  17. 170  REM  < CHARACTER PRINT SBR >
  18. 180  HTAB XOLD: VTAB YOLD
  19. 190 CHAR$ =  CHR$(32 +13 *(YOLD >1  OR YOLD = 0) +20 *(YOLD >2) +13 *(YOLD >3) +(XOLD -2)/3): IF CHAR$ = "/"  AND YOLD = 0  THEN CHAR$ = "$"
  20. 200  PRINT CHAR$;: RETURN 
  21. 210  REM  <ALPHANUMERIC MOUSE>
  22. 220  REM  RETURN OF KEYBOARD INPUT
  23. 230  IF  PEEK( -16384) >127  THEN  NORMAL :GT$ =  CHR$( PEEK( -16384) -128): POKE  -016368,0: RETURN 
  24. 240  REM  BRANCH ON BUTTONS
  25. 250  ON ( PEEK( -16287) >127) +2 *( PEEK( -16286) >127) GOTO 330,360
  26. 260  REM  LOOP IF NO CHANGE
  27. 270 XNU =  INT( PDL(0) *.05) *3 +2:YNU = ( INT( PDL(1) *.015625) +1) *(YOLD >0): IF XNU = XOLD  AND YNU = YOLD  THEN 230
  28. 280  REM  MOVE THE NEW CHAR
  29. 290  NORMAL : IF MOUSE$ = "N"  THEN  HTAB HT: VTAB VT: GOSUB 190:XOLD = XNU: HTAB HT: VTAB VT: GOSUB 190: GOTO 310
  30. 300  GOSUB 180:XOLD = XNU:YOLD = YNU: INVERSE : GOSUB 180
  31. 310  NORMAL : GOTO 250
  32. 320  REM  PRINT PDL CHARACTER
  33. 330 GT$ =  CHR$(32 +13 *(YOLD >1  OR YOLD = 0) +20 *(YOLD >2) +13 *(YOLD >3) +(XNU -2)/3): IF GT$ = "/"  AND YOLD = 0  THEN GT$ = "$"
  34. 340  IF  PEEK( -16287) >127  THEN 340
  35. 350  RETURN 
  36. 360 GT$ = RTN$
  37. 370  RETURN 
  38. 380  REM  INPUT ANYTHING SUBROUTINE
  39. 390 IN$ = ""
  40. 400  GOSUB 230: IF GT$ = RTN$  OR GT$ = ESC$ GOTO 370
  41. 410  VTAB VT: HTAB HT: IF GT$ < >UP$  THEN 450
  42. 420  IF IN$ = ""  THEN 400
  43. 430  PRINT UP$" "UP$;: IF  LEN(IN$) = 1  THEN IN$ = "":HT = HT -1: GOTO 400
  44. 440 IN$ =  LEFT$(IN$, LEN(IN$) -1):HT = HT -1: GOTO 400
  45. 450  PRINT GT$;:IN$ = IN$ +GT$:HT = HT +1: GOTO 400
  46. 460  REM  MENU MOUSE
  47. 470 SPACE = 2 +(I <13) +(I <9) +(I <7)
  48. 480  FOR J = 1 TO I -1  STEP 2: VTAB J *SPACE/2 +4: HTAB 11 - LEN(MENU$(J))/2: PRINT MENU$(J) TAB( 29 - LEN(MENU$(J +1))/2);MENU$(J +1): NEXT 
  49. 490 HT = 0: IF J = I  THEN HT = 1: VTAB I *SPACE/2 +4: HTAB 29 -9 *((I/2) < > INT(I/2)) - LEN(MENU$(I))/2: PRINT MENU$(I)
  50. 500 LN = 1/(256/(I *.5))
  51. 510 P1 =  PDL(1):PZ =  PDL(0):IN =  INT(P1 *LN) *2 +1 +(PZ >127):YNU = 11 +18 *(PZ >127): IF IN = I  AND HT = 1  THEN YNU = 20
  52. 520 XOLD = IN:YOLD = YNU: GOTO 560
  53. 530  VTAB IN *SPACE/2 +3 -(SPACE/2 *(YNU = 29)): HTAB YNU -9: PRINT Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$;: PRINT : HTAB YNU -9: PRINT Z$;: HTAB YNU +8: PRINT Z$
  54. 540  HTAB YNU -9: PRINT Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$
  55. 550  REM  < BRANCH IF KEYBOARD >
  56. 560  IF  PEEK( -16384) >127  THEN 650
  57. 570  REM  <RETURN ON BUTTONS >
  58. 580  IF ( PEEK( -16286) >127)  OR ( PEEK( -16287) >127)  THEN 370
  59. 590  REM  NEXT ITEM IF PADDLE
  60. 600  IF P1 > PDL(1) -384/I  AND P1 < PDL(1) +384/I  AND PZ > PDL(0) -128  AND PZ < PDL(0) +128  THEN 560
  61. 610 P1 =  PDL(1):PZ =  PDL(0):IN =  INT(P1 *LN) *2 +1 +(PZ >128):YNU = 11 +18 *(PZ >128): IF IN > = I  AND HT = 1  THEN YNU = 20:IN = I
  62. 620  GOSUB 100
  63. 630 XOLD = IN:YOLD = YNU: GOTO 530
  64. 640  REM  GET CHR & RETURN
  65. 650 GT$ =  CHR$( PEEK( -16384) -128): POKE  -16368,0: ON 1 +(GT$ = UP$) +(GT$ = DWN$) +(GT$ = SPACE$) +2 *(GT$ = RTN$) GOTO 560,670,370
  66. 660  REM  MOVE FROM KEYBOARD
  67. 670  GOSUB 100
  68. 680  IF GT$ < >SPACE$  THEN YNU = YNU +18 *(YNU <20) -18 *(YNU >20):IN = IN +(YNU >20) -(YNU <20): GOTO 630
  69. 690  IF YNU = 20  THEN IN = 1:YNU = 11: GOTO 630
  70. 700 IN = IN +2 -I *(IN > = I -(YNU <22)): IF IN > = I  AND HT = 1  THEN IN = I:YNU = 20
  71. 710  GOTO 630
  72. 720  REM  PRIT ALPHA CHOICES
  73. 730  VTAB 1: HTAB 1: PRINT "    !  " CHR$(34)"  #  $  %  &  '  (  )  *  +  ,"
  74. 740  VTAB 2: HTAB 1: PRINT " -  .  /  0  1  2  3  4  5  6  7  8  9 "
  75. 750  VTAB 3: HTAB 1: PRINT " A  B  C  D  E  F  G  H  I  J  K  L  M "
  76. 760  VTAB 4: HTAB 1: PRINT " N  O  P  Q  R  S  T  U  V  W  X  Y  Z "
  77. 770  VTAB 5: FOR J = 1 TO 20: PRINT "==";: NEXT 
  78. 780 XNU =  INT( PDL(0) *.05) *3 +2:YNU = ( INT( PDL(1) *.0117) +1) *2 *(MOUSE$ = "A"):XOLD = XNU:YOLD = YNU: POKE 34,6
  79. 790  RETURN 
  80. 800  REM  < DEMO >
  81. 810  DIM MENU$(16)
  82. 820  FOR J = 1 TO 16:MENU$(J) = "": NEXT :IN = 0
  83. 830  RESTORE : FOR I = 1 TO 4: READ MENU$(I): NEXT :I = I -1
  84. 840  TEXT : HOME : INVERSE : PRINT  TAB( 11)"WHICH DO YOU WANT?" TAB( 41)
  85. 850  VTAB 22: HTAB 2: PRINT " USE KEYBOARD OR JOYSTICK TO SELECT ": HTAB 2: PRINT "   OPTION, THEN RETURN OR BUTTON 1  ";: NORMAL 
  86. 860 MOUSE$ = "M": GOSUB 130
  87. 870  ON (IN = 1) +2 *(IN = 2) +3 *(IN = 3) +4 *(IN = 4) GOTO 910,890,1050
  88. 880  END 
  89. 890  TEXT : HOME : VTAB 23: HTAB 6: INVERSE : PRINT " ENTER ANYTHING YOU CHOOSE ": NORMAL :MOUSE$ = "A":VT = 12:HT = 13: VTAB VT: PRINT "RIGHT HERE->": GOSUB 130
  90. 900  PRINT "<": FOR J = 1 TO 2000: NEXT J: GOTO 830
  91. 910  TEXT : HOME : VTAB 12:MOUSE$ = "N": PRINT "THE NUMBER GOES HERE->";:VT = 12:HT = 23: GOSUB 130
  92. 920  PRINT "<": FOR J = 1 TO 2000: NEXT J: GOTO 830
  93. 930  DATA  NUMERIC MENU,ALPHA MENU,SUB MENU,EXIT TO BASIC
  94. 940  DATA  ALPHA MENU,NUMERIC MENU,MAIN MENU
  95. 950  REM  < INTRO SCREEN >
  96. 960  PRINT  CHR$(12) CHR$(21)
  97. 970  TEXT : HOME 
  98. 980  VTAB 10: HTAB 12: PRINT "HANDY MOUSE DEMO"
  99. 990  VTAB 12: HTAB 14: PRINT "BY: CLAY CARR"
  100. 1000  VTAB 14: HTAB 6: PRINT "(C) 1991 MINDCRAFT PUBL. CORP."
  101. 1010  VTAB 23: HTAB 5: PRINT "PRESS A KEY TO BEGIN THE DEMO."
  102. 1020 X =  PEEK( -16384): IF X >127  THEN  POKE  -16368,0: RETURN 
  103. 1030  GOTO 1020
  104. 1040  REM  < SUB MENU >
  105. 1050  FOR I = 1 TO 16:MENU$(I) = "": NEXT 
  106. 1060  FOR I = 1 TO 3: READ MENU$(I): NEXT :I = I -1
  107. 1070  TEXT : HOME : INVERSE : PRINT  TAB( 16)"SUB MENU" TAB( 41): PRINT  TAB( 11)"WHICH DO YOU WANT?" TAB( 41)
  108. 1080  VTAB 22: HTAB 2: PRINT " USE KEYBOARD OR JOYSTICK TO SELECT ": HTAB 2: PRINT "   OPTION, THEN RETURN OR BUTTON 1  ";: NORMAL 
  109. 1090 MOUSE$ = "M": GOSUB 130
  110. 1100  ON (IN = 1) +2 *(IN = 2) +3 *(IN = 3) +4 *(IN = 4) GOTO 890,910,820