Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 4.67 KB | None | 0 0
  1. #COMPILE EXE
  2. #DIM NONE
  3.  
  4. FUNCTION PBMAIN () AS LONG
  5.     PRINT "XM2ESF - Convert XM to Echo Stream Format"
  6.     PRINT ""
  7.     PRINT "
  8.    IF COMMAND$ = "" THEN
  9.        PRINT "usage: xm2esf <infile> <outfile>"
  10.    END IF
  11.  
  12.    OPEN COMMAND$(1) FOR INPUT AS #1
  13.  
  14.    DIM xmfm&(1 TO 6)
  15.    DIM xmpsg&(1 TO 3)
  16.    DIM fm&
  17.    DIM psg&
  18.  
  19.  
  20.    WHILE setting$ <> "[Instruments]"
  21.        LINE INPUT #1, setting$
  22.        IF MID$(setting$, 1, 1) <> "#" THEN
  23.           SELECT CASE spleft(setting$)
  24.  
  25.              CASE "FILE"
  26.                xm$ = param(setting$, 1)
  27.                PRINT "XM File: " + xm$
  28.              CASE "TYPE"
  29.                SELECT CASE param(setting$, 1)
  30.                CASE "BGM"
  31.                filetype& = 1
  32.                CASE "SFX"
  33.                filetype& = 2
  34.                END SELECT
  35.                SELECT CASE param(setting$, 2)
  36.                CASE "LOOP"
  37.  
  38.                esfloop& = 1
  39.                IF filetype& = 2 THEN
  40.                    PRINT "INPUT file errorneously declares LOOP WHILE being a SFX. File rejected."
  41.                    PRINT "Press ANY KEY!"
  42.                    WAITKEY$
  43.                    CLOSE
  44.                    EXIT FUNCTION
  45.                END IF
  46.                CASE "NOLOOP"
  47.                esfloop& = 0
  48.  
  49.  
  50.                END SELECT
  51.  
  52.  
  53.              CASE "FM"
  54.                  fm& = VAL(param(setting$, 1))
  55.                  IF fm > 6 THEN
  56.                      PRINT "Declared more than 6 FM channels. Press ANY KEY!"
  57.                  
  58.                  WAITKEY$:CLOSE:EXIT FUNCTION
  59.                  END IF
  60.              CASE "PSG"
  61.                  psg& = VAL(param(setting$, 1))
  62.                  IF psg& > 3 THEN
  63.                      PRINT "Declared more than 3 PSG channels. Press ANY KEY!"
  64.                      PRINT "Press ANY KEY!"
  65.                      WAITKEY$
  66.                      CLOSE
  67.                      EXIT FUNCTION
  68.                  END IF
  69.              CASE "PCM"
  70.                  IF fm& = 6 THEN
  71.                      PRINT "INPUT file errorneously declares PCM even though 6 FM channels are used"
  72.                      PRINT "Press ANY KEY!"
  73.                      WAITKEY$
  74.                      CLOSE
  75.                      EXIT FUNCTION
  76.  
  77.                  END IF
  78.              CASE "NOISE"
  79.                  noise& = VAL(param(setting$, 1))
  80.              CASE "FM1"
  81.                  xmfm&(1) = VAL(param(setting$, 1))
  82.              CASE "FM2"
  83.                  xmfm&(2) = VAL(param(setting$, 1))
  84.              CASE "FM3"
  85.                  xmfm&(3) = VAL(param(setting$, 1))
  86.              CASE "FM4"
  87.                  xmfm&(4) = VAL(param(setting$, 1))
  88.              CASE "FM5"
  89.                  xmfm&(5) = VAL(param(setting$, 1))
  90.              CASE "FM6"
  91.                  xmfm&(6) = VAL(param(setting$, 1))
  92.              CASE "PCMC"
  93.                  xmpcm& = VAL(param(setting$,1))
  94.              CASE "PSG1"
  95.                  xmpsg&(1) = VAL(param(setting$, 1))
  96.              CASE "PSG2"
  97.                  xmpsg&(2) = VAL(param(setting$, 1))
  98.              CASE "PSG3"
  99.                  xmpsg&(3) = VAL(param(setting$, 1))
  100.              CASE "PSGN"
  101.                  xmnoise& = VAL(param(setting$, 1))
  102.  
  103.           END SELECT
  104.        END IF
  105.        
  106.    WEND
  107.                          
  108.    s$ = "loadxm " + xm$
  109.    PRINT "SHELL STEP: " + s$
  110.    
  111.    SHELL s$
  112.  
  113.    'INSTRUMENT ASSIGNMENTS TODO
  114.    'PITCH TODO
  115.    'ACTUAL CONVERSION TODO ROFL
  116.    
  117.    
  118.    
  119. END FUNCTION
  120.  
  121. FUNCTION param(strn$, b&) AS STRING
  122.    c& = 0
  123.    i& = 1
  124.    car$ = MID$(strn$, 1, 1)
  125.    IF car$ = CHR$(34) THEN
  126.        comp$ = CHR$(34)
  127.        i& = 2
  128.        car$ = MID$(strn$, 2, 1)
  129.    ELSE
  130.        comp$ = " "
  131.    END IF
  132.    WHILE c& <> b&
  133.    WHILE car$ <> comp$
  134.          SPEFT$ = SPEFT$ + car$
  135.          i& = i& + 1
  136.          car$ = MID$(strn$, i&, 1)
  137.          IF i& > LEN(strn$) THEN
  138.              SPEFT$ = ""
  139.              param = SPEFT$
  140.              EXIT FUNCTION
  141.          END IF
  142.    WEND
  143.  
  144.   i& = i& + 1
  145.   c& = c& + 1
  146.   ' SPEFT$ = MID$(strn$, i&, 1)
  147.    car$ = SPEFT$
  148.    WEND
  149.  
  150.  
  151.    param = RTRIM$(spleft(MID$(strn$,i&)))
  152.  
  153. END FUNCTION
  154.  
  155. FUNCTION SPLEFT(strn$) AS STRING
  156.  
  157.    i& = 1
  158.    car$ = MID$(strn$, 1, 1)
  159.    IF car$ = CHR$(34) THEN
  160.        comp$ = CHR$(34)
  161.        i& = 2
  162.        car$ = MID$(strn$, 2, 1)
  163.    ELSE
  164.        comp$ = " "
  165.    END IF
  166.    WHILE car$ <> comp$
  167.          SPEFT$ = SPEFT$ + car$
  168.          i& = i& + 1
  169.          car$ = MID$(strn$, i&, 1)
  170.          IF i& > LEN(strn$) THEN
  171.              SPLEFT = SPEFT$ + cars$
  172.              EXIT FUNCTION
  173.          END IF
  174.    WEND
  175.              SPLEFT = SPEFT$
  176. END FUNCTION
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement