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 >
BASIC Source File  |  1992-12-21  |  10KB  |  335 lines

  1.   'QMAP:       PopUp list of Network Drive Mappings.
  2.   'Written:    Joseph J. Byrne     10/92
  3.   'Copyright:  Business Enhancement Partnership Group
  4.   '---------------------------------------------------
  5.   '* This Software May be Freely Used and Distributed *
  6.  
  7.   Mode$ = UCASE$(COMMAND$)
  8.   IF Mode$ <> "/NOTSR" THEN
  9.     POPUP KEY CHR$(08,50,&H73)   'alt-M
  10.     POPUP MULTIPLEX &HC000, 252  'reg AX and DX get this pattern as an ID
  11.     REG 1, &HC000 : REG 4, 252   'set pattern to check for already installed
  12.     CALL INTERRUPT &H2F
  13.     IF REG(1)<>&HC000 AND REG(4)<>252 THEN END
  14.   END IF
  15.  
  16.   %FLAGS=0: %AX=1: %BX=2: %CX=3: %DX=4: %SI=5: %DI=6: %BP=7: %DS=8: %ES=9
  17.   Yellow% = 14: Red% = 4: White% = 7: Black% = 0: HWhite% = 15
  18.   IF PEEK(&H0040) = 7 THEN_
  19.      Yellow% = 10: Red% = 0
  20.  
  21.   SaveScreen ScrnX$,h%,y%
  22.   MAKEBOX 6,15,16,65,""
  23.   COLOR Yellow%, Black%
  24.   LOCATE  7,17: PRINT "QMAP:";
  25.   COLOR White%,Black%
  26.   PRINT " v2.5                   Copyright (c) 19"+RIGHT$(DATE$,2)
  27.   LOCATE 9,17: PRINT "         Business Enhancement Partnership Group"
  28.   LOCATE 10,17: PRINT "             3410 F. La Sierra Ave.  Suite #181"
  29.   LOCATE 11,17: PRINT "                          Riverside, CA.  92503"
  30.   COLOR HWhite%,Black%
  31.   LOCATE 12,17: PRINT "Call for Free Catalog:";
  32.   COLOR White%,Black%
  33.   PRINT "         (714) 354 - 5251"
  34.   LOCATE 13,15: PRINT CHR$(195); STRING$(49,196);CHR$(180);
  35.   LOCATE 14,17: PRINT "This program may be freely used and distributed"
  36.   COLOR Yellow%, Red%
  37.   IF Mode$ <> "/NOTSR" THEN_
  38.      LOCATE 15,17: PRINT "  Installed.        Press <ALT>+M to activate. "
  39.   COLOR White%, Black%
  40.    DELAY 3
  41.    SLEEP 7
  42.    DO: X$=INKEY$: LOOP UNTIL x$ = ""
  43.   RestoreScreen ScrnX$,h%,y%
  44.  
  45. DO
  46.   x& = setmem(-600000):        ' RELEASE MEMORY
  47.   x& = setmem(5000)
  48.   IF Mode$ <> "/NOTSR" THEN
  49.      REG 1, &HC001 : REG 4, 251
  50.      SwapFile$ = LEFT$(CURDIR$(""),3)+"QMAP.SWP"
  51.      POPUP SLEEP USING EMS, SwapFile$
  52.      IF REG(1)=&HC000 AND REG(4)=252 THEN
  53.           SOUND 1000, 1: SOUND 2000, 1: SOUND 3000, 1
  54.     PRINT "ERROR! FONEFILE Already installed.  Use <ALT> + M to Popup"
  55.     GOTO CONT
  56.      END IF
  57.   END IF
  58.  
  59.   SaveScreen Scrn$, vv%,hh%
  60.  
  61.   DIM DLIST$(30)
  62.   MAPNETDRIVES DList$()
  63.   SrchDrives$ = DList$(0)
  64.   Selection% = ListBox%(Dlist$())
  65.   RestoreScreen Scrn$, vv%,hh%
  66.   SELECT CASE Selection%
  67.      CASE  2: END
  68.      CASE >1: CHDRIVE(LEFT$(DList$(Selection%),1))
  69.           LOCATE MAX(vv%,1), 1
  70.           COLOR White%, Black%
  71.   END SELECT
  72.   IF Mode$<>"/NOTSR" THEN POPUP STUFF CHR$(13),0,0
  73.   ERASE DList$
  74.   IF Mode$ = "/NOTSR" THEN SYSTEM
  75. CONT:
  76. LOOP
  77.  
  78.   SUB MapNetDrives(DriveList$()) SHARED PUBLIC
  79.  '-------------------------------------------
  80.    LOCAL AX%, DX%, x%, Drive%, Drive$, Mp$
  81.    OrgDrive$ = CURDIR$
  82.    OrgDrive% = ASC(LEFT$(OrgDrive$,1))-65
  83.    AX% = 1: DX% = 4: x% = 0
  84.    EE$ = ENVIRON$("PATH")
  85.  
  86.    FOR Drive% = 2 TO 25                 'Circulate through drives A-Z.
  87.       REG %AX, &HE00                    'Function 0EH (AH = 0EH).
  88.       REG %DX, Drive%
  89.       CALL Interrupt &H21               'Select a drive, if it's there.
  90.       REG %AX, &H1900                   'Function 19H (AH = 19H).
  91.       CALL Interrupt &H21               'Get currently selected drive.
  92.       IF (REG (%AX) AND &HFF) = Drive% THEN  '(Regs.ax AND &HFF) = AL.
  93.      Drive$ = CHR$(Drive% + 65)+":"       'If current drive = last drive
  94.      VolName$ = DIR$(Drive$+"\*.*",8)+"\"
  95.      VolName$ = REMOVE$(VolName$, ANY ".")
  96.      IF VolName$ = "\" OR VolName$ = "MS-RAMDRIVE\" THEN_
  97.         VolName$ = ""                      'Local Drive
  98.      x$  = CURDIR$(Drive$)
  99.      Mp$ = LEFT$(x$,3)+VolName$+MID$(x$,4)
  100.      INCR x%
  101.      DriveList$(x%) = MP$
  102.      IF INSTR(EE$,Drive$+".") > 0 THEN_                'Search Drives
  103.         DriveList$(0) = DriveList$(0)+LEFT$(Drive$,1)
  104.       END IF
  105.    NEXT Drive%
  106.    REG %AX, &HE00                    'Function 0EH (AH = 0EH).
  107.    REG %DX, OrgDrive%
  108.    CALL Interrupt &H21               'Select a drive, if it's there.
  109.    REG %AX, &H1900                   'Function 19H (AH = 19H).
  110.    CALL Interrupt &H21               'Get currently selected drive.
  111.   END SUB
  112.  
  113.  
  114.  
  115.   SUB SaveScreen(ScreenSave$,x%,y%) SHARED PUBLIC
  116.  '═══════════════════════════════════════════════
  117.     x% = MAX(CSRLIN,1): y% = MAX(1,POS(0))
  118.     IF Reg(1) - (Reg(1)\256) * 256 = 7 THEN
  119.        Address&=&HB000
  120.     ELSE
  121.        Address&=&HB800
  122.     END IF
  123.     DEF SEG = ADDRESS&
  124.     ScreenSave$ = PEEK$(0,4000)
  125.   END SUB
  126.  
  127.  
  128.   SUB RestoreScreen(ScreenSave$,x%,y%) SHARED PUBLIC
  129.  '══════════════════════════════════════════════════
  130.     IF Reg(1) - (Reg(1)\256) * 256 = 7 THEN
  131.        Address&=&HB000
  132.     ELSE
  133.        Address&=&HB800
  134.     END IF
  135.     DEF SEG = ADDRESS&
  136.     POKE$ 0,ScreenSave$
  137.     IF x%< 1 OR x% > 25 THEN x% = 1
  138.     IF y%< 1 OR y% > 80 THEN y% = 1
  139.     LOCATE x%, y%
  140.   END SUB
  141.  
  142.  
  143.   SUB MakeBox (BoxTop%, BoxLft%, BoxBotm%, BoxRt%, BoxTitle$) PUBLIC
  144.  '══════════════════════════════════════════════════════
  145.   REG 1, 15*256
  146.   CALL INTERRUPT &H10
  147.   IF Reg(1) - (Reg(1)\256) * 256 = 7 THEN
  148.      Address&=&HB000
  149.   ELSE
  150.      Address&=&HB800
  151.   END IF
  152.   DEF SEG = ADDRESS&
  153.  
  154.   LOCATE BoxTop%, BoxLft%
  155.   PRINT CHR$(213) + STRING$((BoxRt% - BoxLft%)-1,205)+CHR$(184)
  156.   LOCATE BoxBotm%, BoxLft%
  157.   PRINT CHR$(212) + STRING$((BoxRt% - BoxLft%)-1,205)+CHR$(190)
  158.  
  159.   FOR zxy% = 1 TO BoxBotm% - BoxTop% - 1
  160.       LOCATE BoxTop% + zxy%, BoxLft%
  161.       PRINT CHR$(179) + SPACE$((BoxRt% - BoxLft%) - 1) + CHR$(179)
  162.         ' right side of the box is Wa+zxy *80 + Wd + 1
  163.         ' stuff an attribute into there
  164.       POKE ( (BoxTop%+Zxy%) * 160 ) + (BoxRt%*2) + 1,8
  165.       FOR i%=(BoxBotm% * 160) + ((BoxLft%+2)*2)-1 TO_
  166.              (BoxBotm% * 160) + ((BoxRt% *2)+2)-1 STEP 2
  167.         ' What this does is calculate the memory locations of the characters
  168.         ' in video ram
  169.           POKE i%, 8
  170.       NEXT i%
  171.   NEXT zxy%
  172.   IF BoxTitle$ >"" THEN
  173.      LOCATE BoxTop%, BoxLft%+1
  174.      PRINT BoxTitle$
  175.   END IF
  176.   DEF SEG
  177.   END SUB
  178.  
  179.  
  180.   FUNCTION ListBox%( ListArray$() )
  181.  '---------------------------------
  182.   STATIC LastChoice%, LastTopLine%
  183.   Noise
  184.   Yy%=0
  185.   ARRAY INSERT ListArray$(1), " ** Un-Install TSR **"
  186.   ARRAY INSERT ListArray$(1), "Un-Install TSR"
  187.   DO
  188.     INCR Yy%
  189.     IF LEN(ListArray$(Yy%)) > MaxLen% THEN MaxLen%=LEN(ListArray$(Yy%))
  190.     IF LEN(ListArray$(Yy%)) = 0 THEN ListLen%=Yy%: EXIT LOOP
  191.   LOOP
  192.  
  193.   INCR MaxLen%,2
  194.   WinTop%  = MAX (5,12 - INT((ListLen% / 2)))
  195.   WinBot% = MIN (22,WinTop% + ListLen%-1)
  196.   WinLeft% = 38 - (MaxLen%\2)
  197.   WinRight%= 42 + (MaxLen%\2)
  198.   WinDisplay% = WinBot% - WinTop% - 1    '# Items Per Page
  199.   COLOR 0,7
  200.   MakeBox WinTop%, WinLeft%, WinBot%, WinRight%, "[Select a Drive]"
  201.  
  202.   TopLine% = 1           ' the first element to appear inside the box
  203.   PickLine% = 1          ' the offset box line you are pointing at
  204.  
  205.   IF LastChoice% > 0 THEN
  206.      IF LastChoice% < WinDisplay% THEN
  207.     TopLine%  = 1
  208.     PickLine% = LastChoice%
  209.      ELSE
  210.     TopLine%  = LastChoice% - (LastChoice% - LastTopLine%)
  211.     PickLine% = LastChoice% - TopLine% + 1
  212.      END IF
  213.   ELSE
  214.      LastChoice% = 1
  215.   END IF
  216.  
  217.   DO                     ' Main loop start
  218.     For Yy% = WinTop% + 1 TO WinBot%-1
  219.     Locate Yy%, WinLeft%+1
  220.         IF Yy% = WinTop% + PickLine% THEN COLOR 7,0 ELSE COLOR 0,7
  221.         PRINT " " + ListArray$(Yy%-WinTop%+TopLine%)_
  222.           + SPACE$(MaxLen%-LEN(ListArray$(Yy%-WinTop%+TopLine%))+2)
  223.     IF Yy% - WinTop% + TopLine% < ListLen% THEN
  224.        IF INSTR(ListArray$(0),LEFT$(ListArray$(Yy%-WinTop%+TopLine%),1))_
  225.           >0 THEN LOCATE Yy%,WinLeft%+1: PRINT "s";
  226.     END IF
  227.     Next Yy%
  228.  
  229.    LastTopLine% = TopLine%
  230.  
  231.     DO:A$=INKEY$:LOOP WHILE A$=""
  232.  
  233.    Pick:
  234.     SELECT CASE A$
  235.      CASE CHR$(0,&H48) 'up arrow
  236.           DECR PickLine%
  237.      CASE CHR$(0,&H50) 'dn arrow
  238.           INCR PickLine%
  239.           IF PickLine% + TopLine% >= ListLen% THEN
  240.          SOUND 500,.1
  241.          DECR PickLine%
  242.           END IF
  243.      CASE CHR$(0,&H4B) 'rt arrow
  244.      CASE CHR$(0,&H4D) 'lf arrow
  245.      CASE CHR$(0,&H47) 'home
  246.           PickLine%=1
  247.      CASE CHR$(0,&H4F) 'end
  248.           IF TopLine% + PickLine% > ListLen% THEN
  249.           PickLine% = ListLen% - TopLine% -1
  250.           SOUND 500,.1
  251.           ELSE
  252.           PickLine%=WinBot%-WinTop%-1
  253.           END IF
  254.      CASE CHR$(0,&H49) 'page up
  255.           IF PickLine%=1 then_
  256.                  TopLine%=TopLine%-(WinBot%-winTop%)+2 else_
  257.               PickLine%=1
  258.      CASE CHR$(0,&H51) 'page dn
  259.           If PickLine%=WinBot%-WinTop%-1 THEN_
  260.          TopLine%=TopLine%+(WinBot%-WinTop%)-2 else_
  261.               PickLine%=WinBot%-WinTop%-1
  262.      CASE CHR$(27)  ' Escape ESC
  263.           xSelect% = TopLine% + PickLine%
  264.           ListBox% = -1
  265.           LastChoice% = TopLine% + PickLine% -1
  266.           EXIT FUNCTION
  267.      CASE CHR$(13)  ' Selection Made
  268.           xz$ = ListArray$(TopLine%+PickLine%)
  269.           IF REMOVE$(xz$, ANY ".()- ") = "" THEN
  270.          BEEP
  271.           ELSE
  272.          ListBox% = (TopLine%+PickLine%)
  273.          LastChoice% = TopLine% + PickLine% -1
  274.          EXIT FUNCTION
  275.           END IF
  276.        CASE ELSE
  277.         ARRAY SCAN ListArray$(1), FROM 1 TO 1,_
  278.                 COLLATE UCASE, = UCASE$(a$), TO Indx%
  279.         IF Indx% < 2 THEN_
  280.            ARRAY SCAN ListArray$(1), FROM 1 TO 1,_
  281.                 COLLATE UCASE, >= UCASE$(a$), TO Indx%
  282.         IF Indx% < WinDisplay% THEN
  283.            TopLine%  = 1
  284.            PickLine% = Indx% -1
  285.         ELSE
  286.            TopLine% = Indx% - WinDisplay% +1
  287.            PickLine%= Indx% - TopLine%
  288.         END IF
  289.      END SELECT
  290.  
  291.      IF PickLine%<1 THEN
  292.     PickLine%=1
  293.     DECR TopLine%
  294.      END IF
  295.  
  296.      IF topLine%<1 THEN
  297.     TopLine%=1
  298.     PickLine%=1
  299.     THUD
  300.      END IF
  301.  
  302.      IF PickLine%=>WinBot%-WinTop% THEN
  303.     PickLine%=WinBot%-WinTop% - 1
  304.     INCR TopLine%
  305.      END IF
  306.  
  307.      IF TopLine% > ListLen% - (Winbot%-WinTop%) THEN
  308.     TopLine%=ListLen%-(Winbot%-WinTop%)
  309.     PickLine%=WinBot%-WinTop%-1
  310.     THUD
  311.      END IF
  312.      LastChoice% = TopLine% + PickLine% -1
  313.   LOOP
  314.  END FUNCTION
  315.  
  316.   SUB ALERT
  317.     FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
  318.   END SUB
  319.  
  320.   SUB ALERT2
  321.     FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
  322.     FOR i=100 TO 3000 STEP 250:SOUND i,.05:NEXT i
  323.     FOR i=2100 TO 400 STEP 250:SOUND i,.05:NEXT i
  324.     FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
  325.     FOR i=2100 TO 400 STEP 250:SOUND i,.05:NEXT i
  326.     FOR i=100 TO 3000 STEP 150:SOUND i,.05:NEXT i
  327.   END SUB
  328.  
  329.   SUB Noise
  330.      SOUND 1000, 1: SOUND 2000, 1: SOUND 3000, 1
  331.   END SUB
  332.  
  333.   SUB Thud
  334.      SOUND 100,1
  335.   END SUB