home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib40a.dsk
/
APRIL.1991
/
HANDY.MOUSE.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
6KB
|
110 lines
10 REM ***********************
20 REM * HANDY MOUSE *
30 REM * BY CLAY CARR *
40 REM * COPYRIGHT (C) 1991 *
50 REM * MINDCRAFT PUBL. CORP*
60 REM * CONCORD, MA 01742 *
70 REM ***********************
80 REM
90 GOSUB 960: GOTO 810
100 VTAB XOLD *SPACE/2 +3 -(SPACE/2 *(YOLD = 29)): HTAB YOLD -9: PRINT TAB( YOLD +9): PRINT
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
120 REM < BEGIN MOUSE SBR >
130 UP$ = CHR$(8):DWN$ = CHR$(21):RTN$ = CHR$(13):ESC$ = CHR$(27):SPACE$ = CHR$(32)
140 IF MOUSE$ = "M" THEN Z$ = CHR$(127): GOTO 470
150 ON (MOUSE$ = "N") +1 GOSUB 730,780
160 GOTO 390
170 REM < CHARACTER PRINT SBR >
180 HTAB XOLD: VTAB YOLD
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$ = "$"
200 PRINT CHAR$;: RETURN
210 REM <ALPHANUMERIC MOUSE>
220 REM RETURN OF KEYBOARD INPUT
230 IF PEEK( -16384) >127 THEN NORMAL :GT$ = CHR$( PEEK( -16384) -128): POKE -016368,0: RETURN
240 REM BRANCH ON BUTTONS
250 ON ( PEEK( -16287) >127) +2 *( PEEK( -16286) >127) GOTO 330,360
260 REM LOOP IF NO CHANGE
270 XNU = INT( PDL(0) *.05) *3 +2:YNU = ( INT( PDL(1) *.015625) +1) *(YOLD >0): IF XNU = XOLD AND YNU = YOLD THEN 230
280 REM MOVE THE NEW CHAR
290 NORMAL : IF MOUSE$ = "N" THEN HTAB HT: VTAB VT: GOSUB 190:XOLD = XNU: HTAB HT: VTAB VT: GOSUB 190: GOTO 310
300 GOSUB 180:XOLD = XNU:YOLD = YNU: INVERSE : GOSUB 180
310 NORMAL : GOTO 250
320 REM PRINT PDL CHARACTER
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$ = "$"
340 IF PEEK( -16287) >127 THEN 340
350 RETURN
360 GT$ = RTN$
370 RETURN
380 REM INPUT ANYTHING SUBROUTINE
390 IN$ = ""
400 GOSUB 230: IF GT$ = RTN$ OR GT$ = ESC$ GOTO 370
410 VTAB VT: HTAB HT: IF GT$ < >UP$ THEN 450
420 IF IN$ = "" THEN 400
430 PRINT UP$" "UP$;: IF LEN(IN$) = 1 THEN IN$ = "":HT = HT -1: GOTO 400
440 IN$ = LEFT$(IN$, LEN(IN$) -1):HT = HT -1: GOTO 400
450 PRINT GT$;:IN$ = IN$ +GT$:HT = HT +1: GOTO 400
460 REM MENU MOUSE
470 SPACE = 2 +(I <13) +(I <9) +(I <7)
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
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)
500 LN = 1/(256/(I *.5))
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
520 XOLD = IN:YOLD = YNU: GOTO 560
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$
540 HTAB YNU -9: PRINT Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$
550 REM < BRANCH IF KEYBOARD >
560 IF PEEK( -16384) >127 THEN 650
570 REM <RETURN ON BUTTONS >
580 IF ( PEEK( -16286) >127) OR ( PEEK( -16287) >127) THEN 370
590 REM NEXT ITEM IF PADDLE
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
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
620 GOSUB 100
630 XOLD = IN:YOLD = YNU: GOTO 530
640 REM GET CHR & RETURN
650 GT$ = CHR$( PEEK( -16384) -128): POKE -16368,0: ON 1 +(GT$ = UP$) +(GT$ = DWN$) +(GT$ = SPACE$) +2 *(GT$ = RTN$) GOTO 560,670,370
660 REM MOVE FROM KEYBOARD
670 GOSUB 100
680 IF GT$ < >SPACE$ THEN YNU = YNU +18 *(YNU <20) -18 *(YNU >20):IN = IN +(YNU >20) -(YNU <20): GOTO 630
690 IF YNU = 20 THEN IN = 1:YNU = 11: GOTO 630
700 IN = IN +2 -I *(IN > = I -(YNU <22)): IF IN > = I AND HT = 1 THEN IN = I:YNU = 20
710 GOTO 630
720 REM PRIT ALPHA CHOICES
730 VTAB 1: HTAB 1: PRINT " ! " CHR$(34)" # $ % & ' ( ) * + ,"
740 VTAB 2: HTAB 1: PRINT " - . / 0 1 2 3 4 5 6 7 8 9 "
750 VTAB 3: HTAB 1: PRINT " A B C D E F G H I J K L M "
760 VTAB 4: HTAB 1: PRINT " N O P Q R S T U V W X Y Z "
770 VTAB 5: FOR J = 1 TO 20: PRINT "==";: NEXT
780 XNU = INT( PDL(0) *.05) *3 +2:YNU = ( INT( PDL(1) *.0117) +1) *2 *(MOUSE$ = "A"):XOLD = XNU:YOLD = YNU: POKE 34,6
790 RETURN
800 REM < DEMO >
810 DIM MENU$(16)
820 FOR J = 1 TO 16:MENU$(J) = "": NEXT :IN = 0
830 RESTORE : FOR I = 1 TO 4: READ MENU$(I): NEXT :I = I -1
840 TEXT : HOME : INVERSE : PRINT TAB( 11)"WHICH DO YOU WANT?" TAB( 41)
850 VTAB 22: HTAB 2: PRINT " USE KEYBOARD OR JOYSTICK TO SELECT ": HTAB 2: PRINT " OPTION, THEN RETURN OR BUTTON 1 ";: NORMAL
860 MOUSE$ = "M": GOSUB 130
870 ON (IN = 1) +2 *(IN = 2) +3 *(IN = 3) +4 *(IN = 4) GOTO 910,890,1050
880 END
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
900 PRINT "<": FOR J = 1 TO 2000: NEXT J: GOTO 830
910 TEXT : HOME : VTAB 12:MOUSE$ = "N": PRINT "THE NUMBER GOES HERE->";:VT = 12:HT = 23: GOSUB 130
920 PRINT "<": FOR J = 1 TO 2000: NEXT J: GOTO 830
930 DATA NUMERIC MENU,ALPHA MENU,SUB MENU,EXIT TO BASIC
940 DATA ALPHA MENU,NUMERIC MENU,MAIN MENU
950 REM < INTRO SCREEN >
960 PRINT CHR$(12) CHR$(21)
970 TEXT : HOME
980 VTAB 10: HTAB 12: PRINT "HANDY MOUSE DEMO"
990 VTAB 12: HTAB 14: PRINT "BY: CLAY CARR"
1000 VTAB 14: HTAB 6: PRINT "(C) 1991 MINDCRAFT PUBL. CORP."
1010 VTAB 23: HTAB 5: PRINT "PRESS A KEY TO BEGIN THE DEMO."
1020 X = PEEK( -16384): IF X >127 THEN POKE -16368,0: RETURN
1030 GOTO 1020
1040 REM < SUB MENU >
1050 FOR I = 1 TO 16:MENU$(I) = "": NEXT
1060 FOR I = 1 TO 3: READ MENU$(I): NEXT :I = I -1
1070 TEXT : HOME : INVERSE : PRINT TAB( 16)"SUB MENU" TAB( 41): PRINT TAB( 11)"WHICH DO YOU WANT?" TAB( 41)
1080 VTAB 22: HTAB 2: PRINT " USE KEYBOARD OR JOYSTICK TO SELECT ": HTAB 2: PRINT " OPTION, THEN RETURN OR BUTTON 1 ";: NORMAL
1090 MOUSE$ = "M": GOSUB 130
1100 ON (IN = 1) +2 *(IN = 2) +3 *(IN = 3) +4 *(IN = 4) GOTO 890,910,820