home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 15
/
CD_ASCQ_15_070894.iso
/
vrac
/
dnalib7a.zip
/
PICKBOX.BAS
< prev
next >
Wrap
BASIC Source File
|
1994-05-16
|
20KB
|
567 lines
DECLARE SUB Popwind(Title$,Toprow%,Leftcolumn%,Bottomrow%,Rightcolumn%,Attr%,Shadow%,Border%)
DECLARE SUB RestoreScreen(ScreenID$,TopRow%,LeftColumn%)
DECLARE SUB SaveScreen(ScreenID$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Shadow%)
DECLARE SUB CalcByte(Attr%,LowByte%,HiByte%)
DECLARE SUB Clicked(Rgt%,Lft%,Row%,Col%)
DECLARE SUB HideCursor()
DECLARE SUB ShowCursor()
DECLARE SUB LocateCursor(Row%,Col%)
DECLARE FUNCTION LeftButtonReleased%()
DECLARE FUNCTION AltKey%()
SUB PickBox(StringArray$(),ReturnedArray$,Title$,TopRow%,Tag%,Mouse%,Attr%,BarAttr%,ButtonAttr%,Shadow%,Border%)PUBLIC
$CODE SEG "DNASEG2"
CalcByte Attr%,FGround%,BGround%
CalcByte BarAttr%,BarFG%,BarBG%
CalcByte ButtonAttr%,BtFG%,BtBG%
PickStart% = 1: PickFinish% = 60: PickPointer% = 1
DO
INCR i%
INCR j%
'strings there are and the
IF LEN (StringArray$(i%)) = 0 THEN
DECR i%
ELSE
StringArray$(i%) = " " + StringArray$(i%)
END IF
LOOP WHILE i% = j%
PickCount% = i%
IF Mouse% THEN HideCursor
SaveScreen PickScreen$,TopRow%,3 - Shadow%,TopRow% + 18,78 - Shadow%,Shadow%
Popwind Title$,TopRow%,3 - Shadow%,TopRow% + 18,78 - Shadow%,Attr%,Shadow%,Border%
Popwind "",TopRow% + 1,5 - Shadow%,TopRow% + 14,76 - Shadow%,Attr%,0,1
IF Tag% AND ISFALSE Mouse% THEN
COLOR FGround%,BGround%
LOCATE TopRow% + 18,27 - Shadow%,0: PRINT "[ Space Bar to Tag - UnTag ]";
END IF
IF Mouse% THEN
COLOR FGround%,BGround%
LOCATE TopRow%,4 - Shadow%,0
PRINT CHR$(91,254,93);
IF Tag% THEN
COLOR FGround%,BGround%
LOCATE TopRow% + 18,17 - Shadow%,0: PRINT "[ Space Bar or Left Mouse button to Tag - UnTag ]";
END IF
END IF
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,7 - Shadow%,0: PRINT " Enter ";
COLOR 0,BGround%: LOCATE TopRow% + 16,14 - Shadow%,0: PRINT "▄";
COLOR 0,BGround%: LOCATE TopRow% + 17,8 - Shadow%,0: PRINT "▀▀▀▀▀▀▀";
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,18 - Shadow%,0: PRINT " Esc ";
COLOR 0,BGround%: LOCATE TopRow% + 16,23 - Shadow%,0: PRINT "▄";
COLOR 0,BGround%: LOCATE TopRow% + 17,19 - Shadow%,0: PRINT "▀▀▀▀▀"
DO
MouseJump:
IF Tag% THEN
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,27 - Shadow%,0: PRINT " Tag All ";
COLOR 0,BGround%: LOCATE TopRow% + 16,36 - Shadow%,0: PRINT "▄";
COLOR 0,BGround%: LOCATE TopRow% + 17,28 - Shadow%,0: PRINT "▀▀▀▀▀▀▀▀▀";
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,40 - Shadow%,0: PRINT " UnTag All ";
COLOR 0,BGround%: LOCATE TopRow% + 16,51 - Shadow%,0: PRINT "▄";
COLOR 0,BGround%: LOCATE TopRow% + 17,41 - Shadow%,0: PRINT "▀▀▀▀▀▀▀▀▀▀▀";
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,55 - Shadow%,0: PRINT " Reverse Tags ";
COLOR 0,BGround%: LOCATE TopRow% + 16,69 - Shadow%,0: PRINT "▄";
COLOR 0,BGround%: LOCATE TopRow% + 17,56 - Shadow%,0: PRINT "▀▀▀▀▀▀▀▀▀▀▀▀▀▀";
END IF
GOSUB PrintRoutine
WHILE NOT INSTAT
IF Mouse% THEN
IF SaveMouse% THEN LocateCursor MouseRow%,MouseCol%
ShowCursor
Rgt% = 0:Lft% = 0:MRow% = 0:MCol% = 0:SaveMouse% = 0
Clicked Rgt%,Lft%,MRow%,MCol%
IF MRow% >= TopRow% AND MRow% <= TopRow% + 18 AND MCol% >= 3 - Shadow% AND MCol% <= 78 - Shadow% THEN
IF MRow% > TopRow% + 1 AND MRow% < TopRow% + 14 AND MCol% > 5 - Shadow% AND MCol% < 76 - Shadow% THEN
SELECT CASE MCol%
CASE 6 - Shadow% TO 19 - Shadow%
IF PickPointer% = PickStart% + (MRow% - (TopRow% + 2)) THEN
IF LeftButtonReleased% THEN
IF Tag% THEN
Chose% = 32: GOTO KeyBoardRoutine
ELSE
Chose% = 13: GOTO KeyBoardRoutine
END IF
END IF
ELSE
IF PickStart% + (MRow% - (TopRow% + 2)) <= PickCount% THEN
PickPointer% = PickStart% + (MRow% - (TopRow% + 2))
GOTO MouseJump
END IF
END IF
CASE 20 - Shadow% TO 33 - Shadow%
IF PickPointer% = PickStart% + 12 + (MRow% - (TopRow% + 2)) THEN
IF LeftButtonReleased% THEN
IF Tag% THEN
Chose% = 32: GOTO KeyBoardRoutine
ELSE
Chose% = 13: GOTO KeyBoardRoutine
END IF
END IF
ELSE
IF PickStart% + 12 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
PickPointer% = PickStart% + 12 + (MRow% - (TopRow% + 2))
GOTO MouseJump
END IF
END IF
CASE 34 - Shadow% TO 47 - Shadow%
IF PickPointer% = PickStart% + 24 + (MRow% - (TopRow% + 2)) THEN
IF LeftButtonReleased% THEN
IF Tag% THEN
Chose% = 32: GOTO KeyBoardRoutine
ELSE
Chose% = 13: GOTO KeyBoardRoutine
END IF
END IF
ELSE
IF PickStart% + 24 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
PickPointer% = PickStart% + 24 + (MRow% - (TopRow% + 2))
GOTO MouseJump
END IF
END IF
CASE 48 - Shadow% TO 61 - Shadow%
IF PickPointer% = PickStart% + 36 + (MRow% - (TopRow% + 2)) THEN
IF LeftButtonReleased% THEN
IF Tag% THEN
Chose% = 32: GOTO KeyBoardRoutine
ELSE
Chose% = 13: GOTO KeyBoardRoutine
END IF
END IF
ELSE
IF PickStart% + 36 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
PickPointer% = PickStart% + 36 + (MRow% - (TopRow% + 2))
GOTO MouseJump
END IF
END IF
CASE 62 - Shadow% TO 75 - Shadow%
IF PickPointer% = PickStart% + 48 + (MRow% - (TopRow% + 2)) THEN
IF LeftButtonReleased% THEN
IF Tag% THEN
Chose% = 32: GOTO KeyBoardRoutine
ELSE
Chose% = 13: GOTO KeyBoardRoutine
END IF
END IF
ELSE
IF PickStart% + 48 + (MRow% - (TopRow% + 2)) <= PickCount% THEN
PickPointer% = PickStart% + 48 + (MRow% - (TopRow% + 2))
GOTO MouseJump
END IF
END IF
END SELECT
ELSE
SELECT CASE MRow%
CASE TopRow%
IF MCol% = 5 - Shadow% THEN
IF LeftButtonReleased% THEN Chose% = 27: GOTO KeyBoardRoutine
END IF
CASE TopRow% + 14
SELECT CASE MCol%
CASE 11 - Shadow% TO 12 - Shadow%
IF Lft% THEN Chose% = -72: GOTO KeyBoardRoutine
CASE 69 - Shadow% TO 70 - Shadow%
IF Lft% THEN Chose% = -80: GOTO KeyBoardRoutine
END SELECT
CASE TopRow% + 16
SELECT CASE MCol%
CASE 7 - Shadow% TO 13 - Shadow% 'Enter
IF LeftButtonReleased% THEN Chose% = 13: GOTO KeyBoardRoutine
CASE 18 - Shadow% TO 22 - Shadow% 'Esc
IF LeftButtonReleased% THEN Chose% = 27: GOTO KeyBoardRoutine
CASE 27 - Shadow% TO 35 - Shadow% 'Tag All
IF LeftButtonReleased% THEN Chose% = -20: GOTO KeyBoardRoutine
CASE 40 - Shadow% TO 50 - Shadow% 'UnTag All
IF LeftButtonReleased% THEN Chose% = -22: GOTO KeyBoardRoutine
CASE 55 - Shadow% TO 68 - Shadow% 'Reverse Tags
IF LeftButtonReleased% THEN Chose% = -19: GOTO KeyBoardRoutine
END SELECT
END SELECT
END IF
ELSE
IF LeftButtonReleased% THEN Chose% = 27: GOTO KeyBoardRoutine
END IF
END IF
IF AltKey% THEN
IF Tag% THEN
COLOR BarFG%,BtBG%: LOCATE TopRow% + 16,28 - Shadow%,0: PRINT "T";
COLOR BarFG%,BtBG%: LOCATE TopRow% + 16,41 - Shadow%,0: PRINT "U";
COLOR BarFG%,BtBG%: LOCATE TopRow% + 16,56 - Shadow%,0: PRINT "R";
END IF
END IF
WEND
Ky$ = INKEY$
IF LEN(Ky$) = 1 THEN
Chose% = ASC(Ky$)
ELSE
Chose% = -ASC(RIGHT$(Ky$,1))
END IF
KeyBoardRoutine:
IF Mouse% THEN
IF MRow% > TopRow% + 1 AND MRow% < TopRow% + 14 AND_
MCol% > 5 - Shadow% AND MCol% < 76 - Shadow% THEN
SaveMouse% = 1
LocateCursor 1,1
END IF
END IF
SELECT CASE Chose%
CASE -19 'Alt R
IF Tag% THEN
IF Mouse% THEN HideCursor
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,56 - Shadow%,0: PRINT " Reverse Tags ";
COLOR 0,BGround%: LOCATE TopRow% + 16,55 - Shadow%,0: PRINT " ";
COLOR 0,BGround%: LOCATE TopRow% + 17,56 - Shadow%,0: PRINT " ";
DELAY .2
FOR i% = 1 TO PickCount%
IF INSTR(StringArray$(i%),CHR$(Tag%)) THEN
ReturnedArray$ = REMOVE$(ReturnedArray$,StringArray$(i%))
StringArray$(i%) = " " + LTRIM$(StringArray$(i%),CHR$(Tag%))
ELSE
StringArray$(i%) = CHR$(Tag%) + LTRIM$(StringArray$(i%))
ReturnedArray$ = ReturnedArray$ + StringArray$(i%)
END IF
NEXT i%
END IF
CASE -22 'Alt U
IF Tag% THEN
IF Mouse% THEN HideCursor
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,41 - Shadow%,0: PRINT " UnTag All ";
COLOR 0,BGround%: LOCATE TopRow% + 16,40 - Shadow%,0: PRINT " ";
COLOR 0,BGround%: LOCATE TopRow% + 17,41 - Shadow%,0: PRINT " ";
DELAY .2
FOR i% = 1 TO PickCount%
IF INSTR(StringArray$(i%),CHR$(Tag%)) THEN
ReturnedArray$ = REMOVE$(ReturnedArray$,StringArray$(i%))
StringArray$(i%) = " " + LTRIM$(StringArray$(i%),CHR$(Tag%))
END IF
NEXT i%
END IF
CASE -20 'Alt T
IF Tag% THEN
IF Mouse% THEN HideCursor
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,28 - Shadow%,0: PRINT " Tag All ";
COLOR 0,BGround%: LOCATE TopRow% + 16,27 - Shadow%,0: PRINT " ";
COLOR 0,BGround%: LOCATE TopRow% + 17,28 - Shadow%,0: PRINT " ";
DELAY .2
FOR i% = 1 TO PickCount%
IF INSTR(StringArray$(i%),CHR$(32)) THEN
StringArray$(i%) = CHR$(Tag%) + LTRIM$(StringArray$(i%))
ReturnedArray$ = ReturnedArray$ + StringArray$(i%)
END IF
NEXT i%
END IF
CASE -71 ' home
IF PickCount% < 60 THEN
PickPointer% = 1
ELSE
PickPointer% = 1
PickStart% = 1
PickFinish% = 60
END IF
CASE -72 ' up arrow
IF PickPointer% > 1 THEN
DECR PickPointer%
IF PickPointer% < PickStart% THEN
DECR PickStart%:DECR PickFinish%
END IF
END IF
CASE -73 ' page up
IF PickPointer% - 60 > 0 THEN
IF PickStart% - 60 > 0 THEN
DECR PickPointer%,60
DECR PickStart%,60
DECR PickFinish%,60
ELSE
DECR PickPointer%,60
PickStart% = 1
PickFinish% = 60
END IF
ELSE
PickStart% = 1
PickFinish% = 60
END IF
CASE -75 ' left arrow
IF PickPointer% - 12 > 0 THEN
DECR PickPointer%,12
IF PickPointer% < PickStart% THEN
IF PickStart% - 12 > 0 THEN
DECR PickStart%,12:DECR PickFinish%,12
ELSE
PickStart% = 1
PickFinish% = 60
END IF
END IF
ELSE
IF PickCount% > 60 THEN
PickStart% = 1
PickFinish% = 60
END IF
END IF
CASE -77 ' right arrow
IF PickPointer% + 12 <= PickCount% THEN
INCR PickPointer%,12
IF PickPointer% > PickFinish% THEN
IF PickFinish% + 12 < PickCount% THEN
INCR PickStart%,12:INCR PickFinish%,12
ELSE
PickFinish% = PickCount%
PickStart% = PickFinish% - 59
END IF
END IF
ELSE
IF PickCount% > 60 THEN
PickFinish% = PickCount%
PickStart% = PickFinish% - 59
END IF
END IF
CASE -79 ' end key
IF PickCount% < 60 THEN
PickPointer% = PickCount%
ELSE
PickPointer% = PickCount%
PickStart% = PickCount% - 59
PickFinish% = PickCount%
END IF
CASE -80 ' down arrow
IF PickPointer% < PickCount% THEN
INCR PickPointer%
IF PickPointer% > PickFinish% THEN
INCR PickStart%:INCR PickFinish%
END IF
END IF
CASE -81 ' page down
IF PickCount% > 60 THEN
IF PickPointer% + 60 <= PickCount% THEN
IF PickFinish% + 60 <= PickCount% THEN
INCR PickPointer%,60
INCR PickStart%,60
INCR PickFinish%,60
ELSE
INCR PickPointer%,60
PickFinish% = PickCount%
PickStart% = PickFinish% - 59
END IF
ELSE
PickFinish% = PickCount%
PickStart% = PickFinish% - 59
END IF
END IF
CASE 13 ' enter
IF Tag% THEN
IF LEN(ReturnedArray$) THEN
ReturnedArray$ = ReturnedArray$
ELSE
ReturnedArray$ = ""
END IF
ELSE
ReturnedArray$ = LTRIM$(StringArray$(PickPointer%))
END IF
EXIT LOOP
CASE 27 ' Esc
ReturnedArray$ = ""
EXIT LOOP
CASE 32 'Space Bar
IF Tag% THEN
IF INSTR(StringArray$(PickPointer%),CHR$(Tag%)) THEN
ReturnedArray$ = REMOVE$(ReturnedArray$,StringArray$(PickPointer%))
StringArray$(PickPointer%) = " " + LTRIM$(StringArray$(PickPointer%),CHR$(Tag%))
ELSE
StringArray$(PickPointer%) = CHR$(Tag%) + LTRIM$(StringArray$(PickPointer%))
ReturnedArray$ = ReturnedArray$ + StringArray$(PickPointer%)
END IF
IF PickPointer% < PickFinish% AND PickPointer% < PickCount% THEN
INCR PickPointer%
ELSEIF PickFinish% < PickCount% THEN 'check to see if we have
INCR PickPointer% 'any more choices waiting
INCR PickStart%
INCR PickFinish%
END IF
END IF
CASE 65 TO 90,97 TO 122
Found% = 0
Marker% = PickPointer%
IF PickPointer% + 1 <= PickCount% THEN 'search forward from pointer
FOR i% = PickPointer% + 1 TO PickCount%
Temp$ = LEFT$(StringArray$(i%),2) 'get two characters
TestKey$ = UCASE$(RIGHT$(Temp$,1)) 'char after the space or tag
IF TestKey$ = UCASE$(CHR$(Chose%)) THEN 'compare first char to key
Found% = 1
PickPointer% = i%
IF PickPointer% + 60 <= PickCount% THEN
PickFinish% = PickPointer% + 59
PickStart% = PickFinish% - 59
ELSE
IF PickCount% > 60 THEN
PickFinish% = PickCount%
PickStart% = PickFinish% - 59
END IF
END IF
EXIT FOR
END IF
NEXT i%
END IF
IF Found% = 0 THEN
FOR j% = 1 TO PickPointer%
Temp$ = LEFT$(StringArray$(j%),2)
TestKey$ = UCASE$(RIGHT$(Temp$,1))
IF TestKey$ = UCASE$(CHR$(Chose%)) THEN
Found% = 1
PickPointer% = j%
IF PickPointer% = Marker% THEN
BEEP:EXIT FOR
ELSE
IF PickPointer% + 60 <= PickCount% THEN
PickFinish% = PickPointer% + 59
PickStart% = PickFinish% - 59
ELSE
IF PickCount% > 60 THEN
PickFinish% = PickCount%
PickStart% = PickFinish% - 59
END IF
END IF
END IF
EXIT FOR
END IF
NEXT j%
END IF
IF Found% = 0 THEN
BEEP
END IF
CASE ELSE
BEEP
END SELECT
LOOP
SELECT CASE Chose%
CASE 13
IF Mouse% THEN HideCursor
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,8 - Shadow%,0: PRINT " Enter ";
COLOR 0,BGround%: LOCATE TopRow% + 16,7 - Shadow%,0: PRINT " ";
COLOR 0,BGround%: LOCATE TopRow% + 17,8 - Shadow%,0: PRINT " ";
CASE 27
IF Mouse% THEN HideCursor
COLOR BtFG%,BtBG%: LOCATE TopRow% + 16,19 - Shadow%,0: PRINT " Esc ";
COLOR 0,BGround%: LOCATE TopRow% + 16,18 - Shadow%,0: PRINT " ";
COLOR 0,BGround%: LOCATE TopRow% + 17,19 - Shadow%,0: PRINT " "
END SELECT
FOR i% = 1 TO PickCount%
IF INSTR(StringArray$(i%),CHR$(Tag%)) THEN
StringArray$(i%) = LTRIM$(StringArray$(i%),CHR$(Tag%)) 'remove tag char
ELSE
StringArray$(i%) = LTRIM$(StringArray$(i%)) 'remove the space
END IF
NEXT i%
IF SaveMouse% THEN LocateCursor MouseRow%,MouseCol%
IF Mouse% THEN HideCursor
DELAY .5
RestoreScreen PickScreen$,TopRow%,3 - Shadow%
EXIT SUB
'----------------------------------------------------------------------------
PrintRoutine:
Row% = TopRow% + 2
Col% = 6 - Shadow%
IF Mouse% THEN HideCursor
FOR a% = PickStart% TO PickFinish%
IF a% = PickStart% + 12 OR a% = PickStart% + 24 _
OR a% = PickStart% + 36 OR a% = PickStart% + 48 _
THEN Row% = TopRow% + 2:INCR Col%,14
IF a% = PickPointer% THEN
COLOR BarFG%,BarBG%
LOCATE Row%,Col%,0
IF SaveMouse% THEN MouseRow% = Row%: MouseCol% = Col% + 6
PRINT StringArray$(a%) + SPACE$(14 - LEN(StringArray$(a%)));
ELSE
COLOR FGround%,BGround%
LOCATE Row%,Col%,0
IF LEN(StringArray$(a%)) THEN PRINT StringArray$(a%) + SPACE$(14 - LEN(StringArray$(a%)));
END IF
INCR Row%
NEXT a%
PickScrollBar% = PickCount% \ 58
IF PickScrollBar% < 1 THEN PickScrollBar% = 1
Bar% = 0
Col% = 11 - Shadow%
IF PickPointer% THEN
ScrollPickPointer% = PickPointer%
ELSE
ScrollPickPointer% = 1
END IF
COLOR FGround%,BGround%
LOCATE TopRow% + 1,61 - Shadow%,0
PRINT "┤ ├";
COLOR BarFG%,BGround%
LOCATE TopRow% + 1,62 - Shadow%,0
PRINT ScrollPickPointer%; "of"; PickCount%;
FOR a% = PickStart% TO PickFinish%
COLOR FGround%,BGround%
LOCATE TopRow% + 14,Col%,0
IF a% = PickStart% THEN
PRINT CHR$(27);
ELSEIF a% = PickFinish% THEN
PRINT CHR$(26);
ELSE
IF Bar% = 0 THEN
c% = ScrollPickPointer%
FOR i% = 1 TO PickScrollBar%
b% = c% \ PickScrollBar%
IF a% = b% + PickStart% THEN
Bar% = 1
EXIT FOR
ELSE
INCR c%
END IF
NEXT i%
IF Bar% THEN
PRINT CHR$(219);
ELSE
IF Bar% = 0 AND a% = PickFinish% - 1 THEN
PRINT CHR$(219);
ELSE
PRINT CHR$(176);
END IF
END IF
ELSE
PRINT CHR$(176);
END IF
END IF
INCR Col%
NEXT a%
RETURN
'----------------------------------------------------------------------------
END SUB