home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
q
/
qmap25.zip
/
QMAP.BAS
next >
Wrap
BASIC Source File
|
1992-12-21
|
10KB
|
335 lines
'QMAP: PopUp list of Network Drive Mappings.
'Written: Joseph J. Byrne 10/92
'Copyright: Business Enhancement Partnership Group
'---------------------------------------------------
'* This Software May be Freely Used and Distributed *
Mode$ = UCASE$(COMMAND$)
IF Mode$ <> "/NOTSR" THEN
POPUP KEY CHR$(08,50,&H73) 'alt-M
POPUP MULTIPLEX &HC000, 252 'reg AX and DX get this pattern as an ID
REG 1, &HC000 : REG 4, 252 'set pattern to check for already installed
CALL INTERRUPT &H2F
IF REG(1)<>&HC000 AND REG(4)<>252 THEN END
END IF
%FLAGS=0: %AX=1: %BX=2: %CX=3: %DX=4: %SI=5: %DI=6: %BP=7: %DS=8: %ES=9
Yellow% = 14: Red% = 4: White% = 7: Black% = 0: HWhite% = 15
IF PEEK(&H0040) = 7 THEN_
Yellow% = 10: Red% = 0
SaveScreen ScrnX$,h%,y%
MAKEBOX 6,15,16,65,""
COLOR Yellow%, Black%
LOCATE 7,17: PRINT "QMAP:";
COLOR White%,Black%
PRINT " v2.5 Copyright (c) 19"+RIGHT$(DATE$,2)
LOCATE 9,17: PRINT " Business Enhancement Partnership Group"
LOCATE 10,17: PRINT " 3410 F. La Sierra Ave. Suite #181"
LOCATE 11,17: PRINT " Riverside, CA. 92503"
COLOR HWhite%,Black%
LOCATE 12,17: PRINT "Call for Free Catalog:";
COLOR White%,Black%
PRINT " (714) 354 - 5251"
LOCATE 13,15: PRINT CHR$(195); STRING$(49,196);CHR$(180);
LOCATE 14,17: PRINT "This program may be freely used and distributed"
COLOR Yellow%, Red%
IF Mode$ <> "/NOTSR" THEN_
LOCATE 15,17: PRINT " Installed. Press <ALT>+M to activate. "
COLOR White%, Black%
DELAY 3
SLEEP 7
DO: X$=INKEY$: LOOP UNTIL x$ = ""
RestoreScreen ScrnX$,h%,y%
DO
x& = setmem(-600000): ' RELEASE MEMORY
x& = setmem(5000)
IF Mode$ <> "/NOTSR" THEN
REG 1, &HC001 : REG 4, 251
SwapFile$ = LEFT$(CURDIR$(""),3)+"QMAP.SWP"
POPUP SLEEP USING EMS, SwapFile$
IF REG(1)=&HC000 AND REG(4)=252 THEN
SOUND 1000, 1: SOUND 2000, 1: SOUND 3000, 1
PRINT "ERROR! FONEFILE Already installed. Use <ALT> + M to Popup"
GOTO CONT
END IF
END IF
SaveScreen Scrn$, vv%,hh%
DIM DLIST$(30)
MAPNETDRIVES DList$()
SrchDrives$ = DList$(0)
Selection% = ListBox%(Dlist$())
RestoreScreen Scrn$, vv%,hh%
SELECT CASE Selection%
CASE 2: END
CASE >1: CHDRIVE(LEFT$(DList$(Selection%),1))
LOCATE MAX(vv%,1), 1
COLOR White%, Black%
END SELECT
IF Mode$<>"/NOTSR" THEN POPUP STUFF CHR$(13),0,0
ERASE DList$
IF Mode$ = "/NOTSR" THEN SYSTEM
CONT:
LOOP
SUB MapNetDrives(DriveList$()) SHARED PUBLIC
'-------------------------------------------
LOCAL AX%, DX%, x%, Drive%, Drive$, Mp$
OrgDrive$ = CURDIR$
OrgDrive% = ASC(LEFT$(OrgDrive$,1))-65
AX% = 1: DX% = 4: x% = 0
EE$ = ENVIRON$("PATH")
FOR Drive% = 2 TO 25 'Circulate through drives A-Z.
REG %AX, &HE00 'Function 0EH (AH = 0EH).
REG %DX, Drive%
CALL Interrupt &H21 'Select a drive, if it's there.
REG %AX, &H1900 'Function 19H (AH = 19H).
CALL Interrupt &H21 'Get currently selected drive.
IF (REG (%AX) AND &HFF) = Drive% THEN '(Regs.ax AND &HFF) = AL.
Drive$ = CHR$(Drive% + 65)+":" 'If current drive = last drive
VolName$ = DIR$(Drive$+"\*.*",8)+"\"
VolName$ = REMOVE$(VolName$, ANY ".")
IF VolName$ = "\" OR VolName$ = "MS-RAMDRIVE\" THEN_
VolName$ = "" 'Local Drive
x$ = CURDIR$(Drive$)
Mp$ = LEFT$(x$,3)+VolName$+MID$(x$,4)
INCR x%
DriveList$(x%) = MP$
IF INSTR(EE$,Drive$+".") > 0 THEN_ 'Search Drives
DriveList$(0) = DriveList$(0)+LEFT$(Drive$,1)
END IF
NEXT Drive%
REG %AX, &HE00 'Function 0EH (AH = 0EH).
REG %DX, OrgDrive%
CALL Interrupt &H21 'Select a drive, if it's there.
REG %AX, &H1900 'Function 19H (AH = 19H).
CALL Interrupt &H21 'Get currently selected drive.
END SUB
SUB SaveScreen(ScreenSave$,x%,y%) SHARED PUBLIC
'═══════════════════════════════════════════════
x% = MAX(CSRLIN,1): y% = MAX(1,POS(0))
IF Reg(1) - (Reg(1)\256) * 256 = 7 THEN
Address&=&HB000
ELSE
Address&=&HB800
END IF
DEF SEG = ADDRESS&
ScreenSave$ = PEEK$(0,4000)
END SUB
SUB RestoreScreen(ScreenSave$,x%,y%) SHARED PUBLIC
'══════════════════════════════════════════════════
IF Reg(1) - (Reg(1)\256) * 256 = 7 THEN
Address&=&HB000
ELSE
Address&=&HB800
END IF
DEF SEG = ADDRESS&
POKE$ 0,ScreenSave$
IF x%< 1 OR x% > 25 THEN x% = 1
IF y%< 1 OR y% > 80 THEN y% = 1
LOCATE x%, y%
END SUB
SUB MakeBox (BoxTop%, BoxLft%, BoxBotm%, BoxRt%, BoxTitle$) PUBLIC
'══════════════════════════════════════════════════════
REG 1, 15*256
CALL INTERRUPT &H10
IF Reg(1) - (Reg(1)\256) * 256 = 7 THEN
Address&=&HB000
ELSE
Address&=&HB800
END IF
DEF SEG = ADDRESS&
LOCATE BoxTop%, BoxLft%
PRINT CHR$(213) + STRING$((BoxRt% - BoxLft%)-1,205)+CHR$(184)
LOCATE BoxBotm%, BoxLft%
PRINT CHR$(212) + STRING$((BoxRt% - BoxLft%)-1,205)+CHR$(190)
FOR zxy% = 1 TO BoxBotm% - BoxTop% - 1
LOCATE BoxTop% + zxy%, BoxLft%
PRINT CHR$(179) + SPACE$((BoxRt% - BoxLft%) - 1) + CHR$(179)
' right side of the box is Wa+zxy *80 + Wd + 1
' stuff an attribute into there
POKE ( (BoxTop%+Zxy%) * 160 ) + (BoxRt%*2) + 1,8
FOR i%=(BoxBotm% * 160) + ((BoxLft%+2)*2)-1 TO_
(BoxBotm% * 160) + ((BoxRt% *2)+2)-1 STEP 2
' What this does is calculate the memory locations of the characters
' in video ram
POKE i%, 8
NEXT i%
NEXT zxy%
IF BoxTitle$ >"" THEN
LOCATE BoxTop%, BoxLft%+1
PRINT BoxTitle$
END IF
DEF SEG
END SUB
FUNCTION ListBox%( ListArray$() )
'---------------------------------
STATIC LastChoice%, LastTopLine%
Noise
Yy%=0
ARRAY INSERT ListArray$(1), " ** Un-Install TSR **"
ARRAY INSERT ListArray$(1), "Un-Install TSR"
DO
INCR Yy%
IF LEN(ListArray$(Yy%)) > MaxLen% THEN MaxLen%=LEN(ListArray$(Yy%))
IF LEN(ListArray$(Yy%)) = 0 THEN ListLen%=Yy%: EXIT LOOP
LOOP
INCR MaxLen%,2
WinTop% = MAX (5,12 - INT((ListLen% / 2)))
WinBot% = MIN (22,WinTop% + ListLen%-1)
WinLeft% = 38 - (MaxLen%\2)
WinRight%= 42 + (MaxLen%\2)
WinDisplay% = WinBot% - WinTop% - 1 '# Items Per Page
COLOR 0,7
MakeBox WinTop%, WinLeft%, WinBot%, WinRight%, "[Select a Drive]"
TopLine% = 1 ' the first element to appear inside the box
PickLine% = 1 ' the offset box line you are pointing at
IF LastChoice% > 0 THEN
IF LastChoice% < WinDisplay% THEN
TopLine% = 1
PickLine% = LastChoice%
ELSE
TopLine% = LastChoice% - (LastChoice% - LastTopLine%)
PickLine% = LastChoice% - TopLine% + 1
END IF
ELSE
LastChoice% = 1
END IF
DO ' Main loop start
For Yy% = WinTop% + 1 TO WinBot%-1
Locate Yy%, WinLeft%+1
IF Yy% = WinTop% + PickLine% THEN COLOR 7,0 ELSE COLOR 0,7
PRINT " " + ListArray$(Yy%-WinTop%+TopLine%)_
+ SPACE$(MaxLen%-LEN(ListArray$(Yy%-WinTop%+TopLine%))+2)
IF Yy% - WinTop% + TopLine% < ListLen% THEN
IF INSTR(ListArray$(0),LEFT$(ListArray$(Yy%-WinTop%+TopLine%),1))_
>0 THEN LOCATE Yy%,WinLeft%+1: PRINT "s";
END IF
Next Yy%
LastTopLine% = TopLine%
DO:A$=INKEY$:LOOP WHILE A$=""
Pick:
SELECT CASE A$
CASE CHR$(0,&H48) 'up arrow
DECR PickLine%
CASE CHR$(0,&H50) 'dn arrow
INCR PickLine%
IF PickLine% + TopLine% >= ListLen% THEN
SOUND 500,.1
DECR PickLine%
END IF
CASE CHR$(0,&H4B) 'rt arrow
CASE CHR$(0,&H4D) 'lf arrow
CASE CHR$(0,&H47) 'home
PickLine%=1
CASE CHR$(0,&H4F) 'end
IF TopLine% + PickLine% > ListLen% THEN
PickLine% = ListLen% - TopLine% -1
SOUND 500,.1
ELSE
PickLine%=WinBot%-WinTop%-1
END IF
CASE CHR$(0,&H49) 'page up
IF PickLine%=1 then_
TopLine%=TopLine%-(WinBot%-winTop%)+2 else_
PickLine%=1
CASE CHR$(0,&H51) 'page dn
If PickLine%=WinBot%-WinTop%-1 THEN_
TopLine%=TopLine%+(WinBot%-WinTop%)-2 else_
PickLine%=WinBot%-WinTop%-1
CASE CHR$(27) ' Escape ESC
xSelect% = TopLine% + PickLine%
ListBox% = -1
LastChoice% = TopLine% + PickLine% -1
EXIT FUNCTION
CASE CHR$(13) ' Selection Made
xz$ = ListArray$(TopLine%+PickLine%)
IF REMOVE$(xz$, ANY ".()- ") = "" THEN
BEEP
ELSE
ListBox% = (TopLine%+PickLine%)
LastChoice% = TopLine% + PickLine% -1
EXIT FUNCTION
END IF
CASE ELSE
ARRAY SCAN ListArray$(1), FROM 1 TO 1,_
COLLATE UCASE, = UCASE$(a$), TO Indx%
IF Indx% < 2 THEN_
ARRAY SCAN ListArray$(1), FROM 1 TO 1,_
COLLATE UCASE, >= UCASE$(a$), TO Indx%
IF Indx% < WinDisplay% THEN
TopLine% = 1
PickLine% = Indx% -1
ELSE
TopLine% = Indx% - WinDisplay% +1
PickLine%= Indx% - TopLine%
END IF
END SELECT
IF PickLine%<1 THEN
PickLine%=1
DECR TopLine%
END IF
IF topLine%<1 THEN
TopLine%=1
PickLine%=1
THUD
END IF
IF PickLine%=>WinBot%-WinTop% THEN
PickLine%=WinBot%-WinTop% - 1
INCR TopLine%
END IF
IF TopLine% > ListLen% - (Winbot%-WinTop%) THEN
TopLine%=ListLen%-(Winbot%-WinTop%)
PickLine%=WinBot%-WinTop%-1
THUD
END IF
LastChoice% = TopLine% + PickLine% -1
LOOP
END FUNCTION
SUB ALERT
FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
END SUB
SUB ALERT2
FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
FOR i=100 TO 3000 STEP 250:SOUND i,.05:NEXT i
FOR i=2100 TO 400 STEP 250:SOUND i,.05:NEXT i
FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
FOR i=2100 TO 400 STEP 250:SOUND i,.05:NEXT i
FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
END SUB
SUB Noise
SOUND 1000, 1: SOUND 2000, 1: SOUND 3000, 1
END SUB
SUB Thud
SOUND 100,1
END SUB