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