home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / sound2 / modshell.zip / MODSHELL.BAS next >
BASIC Source File  |  1993-07-02  |  3KB  |  137 lines

  1. 'ModShell by T. Wendell Martin, Jr.
  2. 'Public domain 7/2/93
  3.  
  4. DECLARE SUB PlayShell ()
  5. DECLARE SUB Display (Disp1%)
  6. DECLARE SUB Pick ()
  7. DECLARE SUB GetMods ()
  8. DEFINT A-Z
  9. COMMON SHARED ModNum
  10. COMMON SHARED ModNextPick
  11. COMMON SHARED ModDir$
  12. COMMON SHARED Player$
  13. DIM SHARED ModName$(1024)
  14. DIM SHARED ModDesc$(1024)
  15. DIM SHARED ModPick(1024)
  16. DIM SHARED ModPlayList$(1024)
  17.  
  18. ModNextPick = 1
  19. space = INSTR(COMMAND$, " ")
  20. IF space = 0 THEN
  21.  PRINT : PRINT "ModShell <ModPath> <PlayerPath,Name,&Parameters>"
  22.  PRINT "(ex: ModShell \mod \dmp\dmp -s20000 -c2 -q @ModList)"
  23.  PRINT "(The list of selected Mods is stored in ModList)"
  24.  END
  25. END IF
  26. ModDir$ = LEFT$(COMMAND$, space - 1)
  27. Player$ = MID$(COMMAND$, space + 1)
  28. CALL GetMods
  29. DO
  30.  CALL Display(1)
  31.  CALL Pick
  32.  CALL PlayShell
  33.  ERASE ModPick, ModPlayList$
  34.  ModNextPick = 1
  35. LOOP
  36.  
  37. SUB Display (Disp1)
  38. Disp2 = Disp1 + 20
  39. CLS
  40. FOR c = Disp1 TO Disp2
  41.  IF ModPick(c) THEN COLOR 15, 1 ELSE COLOR 7, 1
  42.  IF ModName$(c) <> "" THEN PRINT ModPick(c); TAB(5); ModName$(c); TAB(19); ModDesc$(c)
  43. NEXT c
  44. END SUB
  45.  
  46. DEFSNG A-Z
  47. SUB GetMods
  48. COLOR 15, 1: CLS
  49. PRINT "TWM's .Mod Shell"
  50. COLOR 7, 1
  51. PRINT : INPUT "Do you want descriptions (y/N)"; yn$
  52. IF yn$ = "" THEN yn$ = "n"
  53. yn$ = UCASE$(LEFT$(yn$, 1))
  54. IF yn$ = "Y" THEN PRINT "Loading descriptions, ";  ELSE PRINT "Finding modules . . ."
  55. SHELL "dir " + ModDir$ + "\*.mod >ModPath.$$$ /b/l/on"
  56. OPEN "ModPath.$$$" FOR INPUT AS #1
  57. ModNum = 1
  58. DO WHILE NOT EOF(1)
  59.  LINE INPUT #1, ModName$(ModNum)
  60.  IF yn$ = "Y" THEN
  61.   PRINT "o";
  62.   OPEN ModDir$ + "\" + ModName$(ModNum) FOR BINARY AS #2
  63.   ModDesc$(ModNum) = SPACE$(20)
  64.   GET #2, , ModDesc$(ModNum)
  65.   CLOSE #2
  66.  END IF
  67.  ModNum = ModNum + 1
  68. LOOP
  69. CLOSE #1
  70. KILL "ModPath.$$$"
  71. END SUB
  72.  
  73. DEFINT A-Z
  74. SUB Pick
  75. Posit = 1
  76. Disp1 = 1
  77. DO
  78.  LOCATE Posit, 1, 1
  79.  DO
  80.   DO
  81.    A$ = INKEY$
  82.   LOOP UNTIL A$ <> ""
  83.   IF LEN(A$) = 2 THEN A$ = MID$(A$, 2)
  84.   SELECT CASE ASC(A$)
  85.    CASE 72: IF Posit <> 1 THEN Posit = Posit - 1: Change$ = "up"
  86.    CASE 80: IF Posit <> 21 THEN Posit = Posit + 1: Change$ = "dn"
  87.    CASE 73: IF Disp1 <> 1 THEN Disp1 = Disp1 - 20: Change$ = "pgup"
  88.    CASE 81: IF Disp1 <> 1001 THEN Disp1 = Disp1 + 20: Change$ = "pgdn"
  89.    CASE 32: Change$ = "pick"
  90.    CASE 13: Change$ = "play"
  91.    CASE 27: Change$ = "quit"
  92.   END SELECT
  93.  LOOP UNTIL Change$ <> ""
  94.  IF Change$ = "pgup" OR Change$ = "pgdn" THEN CALL Display(Disp1)
  95.  IF Change$ = "pick" THEN
  96.   IF ModPick(Posit + Disp1 - 1) = 0 THEN 'set a new one
  97.    ModPick(Posit + Disp1 - 1) = ModNextPick
  98.    ModPlayList$(ModNextPick) = ModName$(Posit + Disp1 - 1)
  99.    ModNextPick = ModNextPick + 1
  100.   ELSE 'remove an old one
  101.    DeletedNum = ModPick(Posit + Disp1 - 1)
  102.    ModPick(Posit + Disp1 - 1) = 0
  103.    FOR cc = DeletedNum TO ModNextPick
  104.     ModPlayList$(cc) = ModPlayList$(cc + 1)
  105.    NEXT
  106.    FOR cc = 1 TO 1024
  107.     IF ModPick(cc) > DeletedNum THEN ModPick(cc) = ModPick(cc) - 1
  108.    NEXT
  109.  
  110.    ModNextPick = ModNextPick - 1
  111.   END IF
  112.   CALL Display(Disp1)
  113.  END IF
  114. LOOP UNTIL Change$ = "play" OR Change$ = "quit"
  115. IF Change$ = "quit" THEN
  116.  OPEN "o", #1, "ModPlay.Bat"
  117.  CLOSE #1
  118.  OPEN "o", #1, "ModList"
  119.  CLOSE #1
  120.  KILL "ModList"
  121.  COLOR 7, 0
  122.  CLS
  123.  END
  124. END IF
  125. END SUB
  126.  
  127. SUB PlayShell
  128.  COLOR 7, 1: CLS : PRINT "Loading player . . ."
  129.  OPEN "ModList" FOR OUTPUT AS #1
  130.  FOR c = 1 TO ModNextPick - 1
  131.   PRINT #1, ModDir$ + "\" + ModPlayList$(c)
  132.  NEXT
  133.  CLOSE #1
  134.  SHELL Player$
  135. END SUB
  136.  
  137.