Category : BASIC Source Code
Archive   : JOYSTK.ZIP
Filename : JOYSTICK.BAS
CLS
PRINT " +----------------------------------------------------------------------+"
PRINT " | JOYSTICK |"
PRINT " | Version 4.1 4/23/1988 Steven Rich |"
PRINT " | 24162 Gleneyrie |"
PRINT " | Southfield, Mi. 48034 |"
PRINT " | |"
PRINT " | Released to the Public Domain for Non-Profit, Non-Commercial |"
PRINT " | Use ONLY. |"
PRINT " +----------------------------------------------------------------------+"
PRINT " WHICH JOYSTICK DO YOU WISH TO CHECK?"
PRINT " ENTER (1) or (2)"
CHOICE: REM Find Out Which Joystick to Test
WHILE IN$ <> "1" AND IN$ <> "2"
IN$ = INKEY$
IF IN$ <> "" THEN PRINT CHR$(7);
WEND
SETUP: REM Inital Value Setup
REM XPORT= X-coordinate value for STICK command
REM YPORT= Y=coordinate value for STICK command
REM BUTTONA= value for STRIG command for first joystick button
REM BUTTONB= value for STRIG command for second joystick button
REM
C9 = VAL(IN$)
IF C9 = 1 THEN
XPORT = 0: YPORT = 1: BUTTONA = 0: BUTTONB = 4
ELSEIF C9 = 2 THEN
XPORT = 2: YPORT = 3: BUTTONA = 2: BUTTONB = 6
END IF
BA = -1: BB = -1: REM Used to setup "Flip Flop" for Button Display
XMIN = 255: YMIN = 255: XMAX = 0: YMAX = 0: REM Setup Initial X & Y min. values
REM STRIG(BUTTONA) ON: STRIG(BUTTONB) ON
ON STRIG(BUTTONA) GOSUB BUTTON1
ON STRIG(BUTTONB) GOSUB BUTTON2
CLS
LOCATE 1, 1: PRINT " Joystick Test Program V 4.1 4/23/1987 S. Rich"
LOCATE 3, 1: PRINT " --- JOYSTICK "; IN$; " UNDER TEST ---"
LOCATE 5, 30: PRINT "JOYSTICK TREND"
REM Draw Box Around Trend
LOCATE 6, 30: PRINT CHR$(201); : FOR I = 1 TO 12: PRINT CHR$(205); : NEXT: PRINT CHR$(187);
LOCATE 14, 30: PRINT CHR$(200); : FOR I = 1 TO 12: PRINT CHR$(205); : NEXT: PRINT CHR$(188);
FOR I = 7 TO 13
LOCATE I, 30: PRINT CHR$(186); : LOCATE I, 43: PRINT CHR$(186);
NEXT
REM Draw Box Around Position
LOCATE 17, 25: PRINT CHR$(201); : FOR I = 1 TO 22: PRINT CHR$(205); : NEXT: PRINT CHR$(187);
LOCATE 19, 25: PRINT CHR$(200); : FOR I = 1 TO 22: PRINT CHR$(205); : NEXT: PRINT CHR$(188);
FOR I = 18 TO 18
LOCATE I, 25: PRINT CHR$(186); : LOCATE I, 48: PRINT CHR$(186);
NEXT
LOCATE 17, 37: PRINT CHR$(203); : LOCATE 19, 37: PRINT CHR$(202)
REM Draw Attention Arrows
LOCATE 19, 28: PRINT CHR$(203): LOCATE 20, 28: PRINT CHR$(186);
LOCATE 21, 25: PRINT CHR$(17); CHR$(205); CHR$(205); CHR$(188);
LOCATE 19, 44: PRINT CHR$(203): LOCATE 20, 44: PRINT CHR$(186);
LOCATE 21, 44: PRINT CHR$(200); CHR$(205); CHR$(205); CHR$(16);
LOCATE 10, 10: PRINT "BUTTON 1"
LOCATE 10, 60: PRINT "BUTTON 2"
LOCATE 18, 9: PRINT "X - AXIS": LOCATE 20, 4: PRINT "Min Max AVG"
LOCATE 18, 59: PRINT "Y - AXIS": LOCATE 20, 54: PRINT "AVG Min Max"
LOCATE 16, 30: PRINT "ABSOLUTE VALUE";
LOCATE 23, 1: PRINT "1) Move Joystick to MAX & MIN. 2) Adjust Pots. so that X&Y ABSOLUTE VALUE=AVG"
LOCATE 24, 1: PRINT " Press
START: REM MAIN PROGRAM LOOP
WHILE A = A
REM Stopping the button test avoids random screen printing
REM but "Traps" events for processing
STRIG(BUTTONA) STOP: STRIG(BUTTONB) STOP
DUMMY = STICK(0): ' MUST BE INCLUDED TO ACTIVATE STICK ROUTINES
X = STICK(XPORT)
Y = STICK(YPORT)
GOSUB CLDIS
GOSUB MAXMIN
XCHECK: 'CHECK X-COORDINATE OF JOYSTICK
IF X1 > X THEN
LOCATE 10, 32: PRINT CHR$(27);
ELSEIF X1 < X THEN
LOCATE 10, 42: PRINT CHR$(26);
END IF
YCHECK:
IF Y1 > Y THEN
LOCATE 7, 37: PRINT CHR$(24);
ELSEIF Y1 < Y THEN
LOCATE 13, 37: PRINT CHR$(25);
END IF
CENCHECK: 'CHECK Y-COORDINATE OF JOYSTICK
IF X = X1 AND Y = Y1 THEN LOCATE 10, 37: PRINT CHR$(233);
PRINTVAL: 'PRINT JOYSTICK VALUES
LOCATE 18, 27
PRINT X; " "; Y;
LOCATE 18, 37: PRINT CHR$(186);
X1 = X: Y1 = Y
REM Turn on Button Interrupt for processing
STRIG(BUTTONA) ON: STRIG(BUTTONB) ON
WEND: REM End of main program loop
CLDIS: REM Clear Trend Display
LOCATE 10, 32: PRINT " ": LOCATE 10, 42: PRINT " ": LOCATE 13, 37: PRINT " ":
LOCATE 10, 37: PRINT " ": LOCATE 7, 37: PRINT " ":
RETURN
BUTTON1: REM Button 1 Pressed Subroutine
STRIG(BUTTONB) STOP
BA = -BA: IF BA < 0 THEN C1 = 0: C2 = 7 ELSE C1 = 7: C2 = 0
LOCATE 10, 10: COLOR C1, C2: PRINT "BUTTON 1";
COLOR 7, 0
STRIG(BUTTONB) ON
RETURN
BUTTON2: REM Button 2 Pressed Subroutine
STRIG(BUTTONA) STOP
BB = -BB: IF BB < 0 THEN C1 = 0: C2 = 7 ELSE C1 = 7: C2 = 0
LOCATE 10, 60: COLOR C1, C2: PRINT "BUTTON 2";
COLOR 7, 0
STRIG(BUTTONA) ON
RETURN
MAXMIN: REM X & Y Axis Maximum & Minimum & Center Calcul.
IF X < XMIN THEN XMIN = X
IF Y < YMIN THEN YMIN = Y
IF X > XMAX THEN XMAX = X
IF Y > YMAX THEN YMAX = Y
XAVG = INT((XMIN + XMAX) / 2): YAVG = INT((YMIN + YMAX) / 2)
LOCATE 21, 3: PRINT XMIN; " "; XMAX; " "; XAVG
LOCATE 21, 53: PRINT YAVG; " "; YMIN; " "; YMAX; " "
RETURN
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/