'=========================================================================== ' Subject: TAGGED MENU Date: 06-22-92 (05:45) ' Author: Ray Carson Code: QB, QBasic, PDS ' Keys: TAGGED,MENU Packet: MENU.ABC '=========================================================================== DEFINT A-Z DECLARE SUB TagMenu (UpperRow, LowerRow, LeftColumn, FgNormal, BgNormal, FgHlight, BgHlight, FgMarker, Keycode, N, QtySelected, Array$(), Tagged()) REDIM Array$(50), Tagged(50) CALL TagMenu(5, 20, 32, 15, 1, 4, 7, 4, Keycode, N, QtySelected, Array$(), Tagged()) COLOR 0, 3: CLS DEF SEG = &HB800 FOR X = 0 TO 4000 STEP 2 POKE X, 176 NEXT DEF SEG FOR X = 1 TO 50 Array$(X) = "Item No." + STR$(X) NEXT N = 50 CALL TagMenu(5, 20, 32, 15, 1, 4, 7, 4, Keycode, N, QtySelected, Array$(), Tagged()) COLOR 7, 0: CLS IF Keycode = 27 THEN PRINT "User Aborted": END PRINT LTRIM$(STR$(QtySelected)); " items selected:" FOR X = 1 TO N IF Tagged(X) THEN LOCATE , 5 PRINT Array$(X) END IF NEXT END SUB TagMenu (UpperRow, LowerRow, LeftColumn, FgNormal, BgNormal, FgHlight, BgHlight, FgMarker, Keycode, N, QtySelected, Array$(), Tagged()) SelChr$ = CHR$(16) MaxLength = 0 FOR X = 1 TO N Q = LEN(Array$(X)) IF Q > MaxLength THEN MaxLength = Q NEXT COLOR FgNormal, BgNormal LOCATE 25, 1: PRINT SPACE$(80); LOCATE 25, 2 PRINT "Mark/Clear Mark All Clear All Exit"; UR = UpperRow - 1 LR = LowerRow + 1 LC = LeftColumn - 2 RC = LeftColumn + MaxLength + 3 Top$ = CHR$(218) + STRING$(((RC - 1) - LC), 196) + CHR$(191) Middle$ = CHR$(179) + STRING$(((RC - 1) - LC), 32) + CHR$(179) Bottom$ = CHR$(192) + STRING$(((RC - 1) - LC), 196) + CHR$(217) LOCATE UR, LC: PRINT Top$; FOR Q = UR + 1 TO LR - 1 LOCATE Q, LC: PRINT Middle$; NEXT LOCATE LR, LC: PRINT Bottom$; SetupTagMenu: Row = UpperRow: Column = LeftColumn COLOR FgNormal, BgNormal X = 1 DO LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = Row GOSUB CheckTagged Row = Row + 1 IF Row = LowerRow + 1 THEN EXIT DO X = X + 1 LOOP UNTIL X > N Row = UpperRow X = 1 COLOR FgHlight, BgHlight LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; GetKey: DO k$ = INKEY$ LOOP UNTIL LEN(k$) Keycode = ASC(k$) IF LEN(k$) = 2 THEN Keycode = ASC(RIGHT$(k$, 1)) IF Keycode = 13 OR Keycode = 27 THEN 'Return or Escape COLOR FgNormal, BgNormal LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; COLOR 7, 0 EXIT SUB END IF IF Keycode = 60 THEN 'F2 QtySelected = N 'Mark all Files FOR Q = 1 TO N Tagged(Q) = -1 NEXT COLOR FgMarker, BgNormal FOR Q = UpperRow TO LowerRow IF SCREEN(Q, Column + 1) <> 32 THEN LOCATE Q, Column - 1 PRINT SelChr$; END IF NEXT END IF IF Keycode = 61 THEN 'F3 QtySelected = 0 'Clear all Files FOR X = 1 TO N Tagged(X) = 0 NEXT COLOR FgNormal, BgNormal FOR X = UpperRow TO LowerRow LOCATE X, Column - 1: PRINT " "; NEXT END IF IF Keycode = 71 THEN 'Home GOTO SetupTagMenu END IF IF Keycode = 79 THEN 'End COLOR FgNormal, BgNormal LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; Row = UpperRow X = N - (LowerRow - UpperRow) IF X < 1 THEN X = 1 DO LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = Row GOSUB CheckTagged Row = Row + 1 IF Row = LowerRow + 1 THEN EXIT DO X = X + 1 LOOP UNTIL X > N X = N Row = Row - 1 COLOR FgHlight, BgHlight LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; END IF IF Keycode = 80 OR Keycode = 32 THEN 'Down IF Keycode = 32 THEN 'Spacebar LOCATE Row, Column - 1 IF Tagged(X) THEN COLOR FgNormal, BgNormal PRINT " "; Tagged(X) = 0 QtySelected = QtySelected - 1 ELSE COLOR FgMarker, BgNormal PRINT SelChr$; COLOR FgNormal, BgNormal Tagged(X) = -1 QtySelected = QtySelected + 1 END IF END IF IF X = N THEN GOTO GetKey COLOR FgNormal, BgNormal LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; Row = Row + 1 IF Row = LowerRow + 1 THEN X = X + 1 COLOR FgHlight, BgHlight Row = Row - 1 LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = Row GOSUB CheckTagged Temp = X X = X - 1 COLOR FgNormal, BgNormal FOR j = LowerRow - 1 TO UpperRow STEP -1 LOCATE j, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = j GOSUB CheckTagged X = X - 1 NEXT X = Temp ELSE X = X + 1 COLOR FgHlight, BgHlight LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = Row GOSUB CheckTagged END IF END IF IF Keycode = 72 THEN 'Up IF X = 1 THEN GOTO GetKey COLOR FgNormal, BgNormal LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; Row = Row - 1 IF Row = UpperRow - 1 THEN X = X - 1 COLOR FgHlight, BgHlight Row = Row + 1 LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = Row GOSUB CheckTagged Temp = X: X = X + 1 COLOR FgNormal, BgNormal FOR j = UpperRow + 1 TO LowerRow LOCATE j, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = j GOSUB CheckTagged X = X + 1 NEXT X = Temp ELSE X = X - 1 COLOR FgHlight, BgHlight LOCATE Row, Column PRINT " " + Array$(X) + SPACE$(MaxLength - LEN(Array$(X))) + " "; RowI = Row GOSUB CheckTagged END IF END IF GOTO GetKey CheckTagged: LOCATE RowI, Column - 1 IF Tagged(X) THEN COLOR FgMarker, BgNormal PRINT SelChr$; COLOR FgNormal, BgNormal ELSE COLOR FgNormal, BgNormal PRINT " "; END IF RETURN END SUB