home *** CD-ROM | disk | FTP | other *** search
- 'ModShell by T. Wendell Martin, Jr.
- 'Public domain 7/2/93
-
- DECLARE SUB PlayShell ()
- DECLARE SUB Display (Disp1%)
- DECLARE SUB Pick ()
- DECLARE SUB GetMods ()
- DEFINT A-Z
- COMMON SHARED ModNum
- COMMON SHARED ModNextPick
- COMMON SHARED ModDir$
- COMMON SHARED Player$
- DIM SHARED ModName$(1024)
- DIM SHARED ModDesc$(1024)
- DIM SHARED ModPick(1024)
- DIM SHARED ModPlayList$(1024)
-
- ModNextPick = 1
- space = INSTR(COMMAND$, " ")
- IF space = 0 THEN
- PRINT : PRINT "ModShell <ModPath> <PlayerPath,Name,&Parameters>"
- PRINT "(ex: ModShell \mod \dmp\dmp -s20000 -c2 -q @ModList)"
- PRINT "(The list of selected Mods is stored in ModList)"
- END
- END IF
- ModDir$ = LEFT$(COMMAND$, space - 1)
- Player$ = MID$(COMMAND$, space + 1)
- CALL GetMods
- DO
- CALL Display(1)
- CALL Pick
- CALL PlayShell
- ERASE ModPick, ModPlayList$
- ModNextPick = 1
- LOOP
-
- SUB Display (Disp1)
- Disp2 = Disp1 + 20
- CLS
- FOR c = Disp1 TO Disp2
- IF ModPick(c) THEN COLOR 15, 1 ELSE COLOR 7, 1
- IF ModName$(c) <> "" THEN PRINT ModPick(c); TAB(5); ModName$(c); TAB(19); ModDesc$(c)
- NEXT c
- END SUB
-
- DEFSNG A-Z
- SUB GetMods
- COLOR 15, 1: CLS
- PRINT "TWM's .Mod Shell"
- COLOR 7, 1
- PRINT : INPUT "Do you want descriptions (y/N)"; yn$
- IF yn$ = "" THEN yn$ = "n"
- yn$ = UCASE$(LEFT$(yn$, 1))
- IF yn$ = "Y" THEN PRINT "Loading descriptions, "; ELSE PRINT "Finding modules . . ."
- SHELL "dir " + ModDir$ + "\*.mod >ModPath.$$$ /b/l/on"
- OPEN "ModPath.$$$" FOR INPUT AS #1
- ModNum = 1
- DO WHILE NOT EOF(1)
- LINE INPUT #1, ModName$(ModNum)
- IF yn$ = "Y" THEN
- PRINT "o";
- OPEN ModDir$ + "\" + ModName$(ModNum) FOR BINARY AS #2
- ModDesc$(ModNum) = SPACE$(20)
- GET #2, , ModDesc$(ModNum)
- CLOSE #2
- END IF
- ModNum = ModNum + 1
- LOOP
- CLOSE #1
- KILL "ModPath.$$$"
- END SUB
-
- DEFINT A-Z
- SUB Pick
- Posit = 1
- Disp1 = 1
- DO
- LOCATE Posit, 1, 1
- DO
- DO
- A$ = INKEY$
- LOOP UNTIL A$ <> ""
- IF LEN(A$) = 2 THEN A$ = MID$(A$, 2)
- SELECT CASE ASC(A$)
- CASE 72: IF Posit <> 1 THEN Posit = Posit - 1: Change$ = "up"
- CASE 80: IF Posit <> 21 THEN Posit = Posit + 1: Change$ = "dn"
- CASE 73: IF Disp1 <> 1 THEN Disp1 = Disp1 - 20: Change$ = "pgup"
- CASE 81: IF Disp1 <> 1001 THEN Disp1 = Disp1 + 20: Change$ = "pgdn"
- CASE 32: Change$ = "pick"
- CASE 13: Change$ = "play"
- CASE 27: Change$ = "quit"
- END SELECT
- LOOP UNTIL Change$ <> ""
- IF Change$ = "pgup" OR Change$ = "pgdn" THEN CALL Display(Disp1)
- IF Change$ = "pick" THEN
- IF ModPick(Posit + Disp1 - 1) = 0 THEN 'set a new one
- ModPick(Posit + Disp1 - 1) = ModNextPick
- ModPlayList$(ModNextPick) = ModName$(Posit + Disp1 - 1)
- ModNextPick = ModNextPick + 1
- ELSE 'remove an old one
- DeletedNum = ModPick(Posit + Disp1 - 1)
- ModPick(Posit + Disp1 - 1) = 0
- FOR cc = DeletedNum TO ModNextPick
- ModPlayList$(cc) = ModPlayList$(cc + 1)
- NEXT
- FOR cc = 1 TO 1024
- IF ModPick(cc) > DeletedNum THEN ModPick(cc) = ModPick(cc) - 1
- NEXT
-
- ModNextPick = ModNextPick - 1
- END IF
- CALL Display(Disp1)
- END IF
- LOOP UNTIL Change$ = "play" OR Change$ = "quit"
- IF Change$ = "quit" THEN
- OPEN "o", #1, "ModPlay.Bat"
- CLOSE #1
- OPEN "o", #1, "ModList"
- CLOSE #1
- KILL "ModList"
- COLOR 7, 0
- CLS
- END
- END IF
- END SUB
-
- SUB PlayShell
- COLOR 7, 1: CLS : PRINT "Loading player . . ."
- OPEN "ModList" FOR OUTPUT AS #1
- FOR c = 1 TO ModNextPick - 1
- PRINT #1, ModDir$ + "\" + ModPlayList$(c)
- NEXT
- CLOSE #1
- SHELL Player$
- END SUB
-
-