Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #COMPILE EXE
- #DIM NONE
- FUNCTION PBMAIN () AS LONG
- PRINT "XM2ESF - Convert XM to Echo Stream Format"
- PRINT ""
- PRINT ""
- IF COMMAND$ = "" THEN
- PRINT "usage: xm2esf <infile> <outfile>"
- END IF
- OPEN COMMAND$(1) FOR INPUT AS #1
- DIM xmfm&(1 TO 6)
- DIM xmpsg&(1 TO 3)
- DIM fm&
- DIM psg&
- tempo& = 7 ' Default tempo :P
- WHILE setting$ <> "[Instruments]"
- LINE INPUT #1, setting$
- IF MID$(setting$, 1, 1) <> "#" THEN
- SELECT CASE spleft(setting$)
- CASE "FILE"
- xm$ = param(setting$, 1)
- PRINT "XM File: " + xm$
- CASE "TYPE"
- SELECT CASE param(setting$, 1)
- CASE "BGM"
- filetype& = 1
- CASE "SFX"
- filetype& = 2
- END SELECT
- SELECT CASE param(setting$, 2)
- CASE "LOOP"
- esfloop& = 1
- IF filetype& = 2 THEN
- PRINT "Input file errorneously declares loop while being a SFX. File rejected."
- PRINT "Press any key!"
- WAITKEY$
- CLOSE
- EXIT FUNCTION
- END IF
- CASE "NOLOOP"
- esfloop& = 0
- END SELECT
- CASE "TEMPO"
- tempo& = VAL(param(setting$, 1))
- CASE "FM"
- fm& = VAL(param(setting$, 1))
- IF fm > 6 THEN
- PRINT "Declared more than 6 FM channels. Press any key!"
- WAITKEY$:CLOSE:EXIT FUNCTION
- END IF
- CASE "PSG"
- psg& = VAL(param(setting$, 1))
- IF psg& > 3 THEN
- PRINT "Declared more than 3 PSG channels. Press any key!"
- PRINT "Press any key!"
- WAITKEY$
- CLOSE
- EXIT FUNCTION
- END IF
- CASE "PCM"
- pcm& = 1
- IF fm& = 6 THEN
- PRINT "Input file errorneously declares PCM even though 6 FM channels are used"
- PRINT "Press any key!"
- WAITKEY$
- CLOSE
- EXIT FUNCTION
- END IF
- CASE "NOISE"
- noise& = VAL(param(setting$, 1))
- CASE "FM1"
- xmfm&(1) = VAL(param(setting$, 1))
- CASE "FM2"
- xmfm&(2) = VAL(param(setting$, 1))
- CASE "FM3"
- xmfm&(3) = VAL(param(setting$, 1))
- CASE "FM4"
- xmfm&(4) = VAL(param(setting$, 1))
- CASE "FM5"
- xmfm&(5) = VAL(param(setting$, 1))
- CASE "FM6"
- xmfm&(6) = VAL(param(setting$, 1))
- CASE "PCMC"
- xmpcm& = VAL(param(setting$,1))
- CASE "PSG1"
- xmpsg&(1) = VAL(param(setting$, 1))
- CASE "PSG2"
- xmpsg&(2) = VAL(param(setting$, 1))
- CASE "PSG3"
- xmpsg&(3) = VAL(param(setting$, 1))
- CASE "PSGN"
- xmnoise& = VAL(param(setting$, 1))
- END SELECT
- END IF
- WEND
- s$ = "loadxm " + xm$
- PRINT "Shell step: " + s$
- SHELL s$
- 'INSTRUMENT ASSIGNMENTS
- DIM xmins&(1 TO 256)
- WHILE setting$ <> "[Pitch]"
- IF MID$(setting$,1,1) <> "#" THEN
- LINE INPUT #1, setting$
- xmins&(VAL(spleft(setting$))) = VAL("&H" + param(setting$,1))
- END IF
- WEND
- 'PITCH
- ' 123456 = FM
- ' 789 = PSG
- ' 10 = PCM
- ' 11 = NSE
- DIM pitch&(1 TO 11)
- WHILE setting$ <> "[END]"
- IF MID$(setting$,1,1) <> "#" THEN
- SELECT CASE spleft(setting$)
- CASE "FM1"
- pitch&(1) = VAL(param(setting$,1))
- CASE "FM2"
- pitch&(2) = VAL(param(setting$,1))
- CASE "FM3"
- pitch&(3) = VAL(param(setting$,1))
- CASE "FM4"
- pitch&(4) = VAL(param(setting$,1))
- CASE "FM5"
- pitch&(5) = VAL(param(setting$,1))
- CASE "FM6"
- pitch&(6) = VAL(param(setting$,1))
- CASE "PSG1"
- pitch&(7) = VAL(param(setting$,1))
- CASE "PSG2"
- pitch&(8) = VAL(param(setting$,1))
- CASE "PSG3"
- pitch&(9) = VAL(param(setting$,1))
- END IF
- WEND
- '
- CLOSE
- OPEN COMMAND$(2) FOR BINARY AS #9999
- DIM i AS INTEGER
- DIM present&(1 TO 11)
- FOR i = 1 TO fm&
- present&(i) = 1
- OPEN "temp\C" + TRIM$(VAL(xmfm&(i)) + ".tmp" FOR BINARY AS #i
- NEXT i
- FOR i = 7 TO psg& + 6
- present&(i) = 1
- OPEN "temp\C" + TRIM$(VAL(xmpsg&(i-6)) + ".tmp" FOR BINARY AS #i
- WEND
- IF pcm& = 1 THEN
- present&(10) = 1
- OPEN "temp\C" + TRIM$(VAL(xmpcm&)) + ".tmp" FOR BINARY AS #10
- END IF
- IF noise& = 1 THEN
- present&(11) = 1
- OPEN "temp\C" + TRIM$(VAL(xmnoise&)) + ".tmp" FOR BINARY AS #11
- END IF
- ' $00nn ..... Note on FM channel #1
- ' $01nn ..... Note on FM channel #2
- ' $02nn ..... Note on FM channel #3
- ' $04nn ..... Note on FM channel #4
- ' $05nn ..... Note on FM channel #5
- ' $06nn ..... Note on FM channel #6
- ' $08nn ..... Note on PSG channel #1
- ' $09nn ..... Note on PSG channel #2
- ' $0Ann ..... Note on PSG channel #3
- ' $0Bnn ..... Note on PSG channel #4
- ' $0Cnn ..... Note on PCM channel
- '
- '
- DIM esfchan&(1 TO 11)
- esfchan&(1) = 0
- esfchan&(2) = 1
- esfchan&(3) = 2
- esfchan&(4) = 4
- esfchan&(5) = 5
- esfchan&(6) = 6
- esfchan&(7) = 8
- esfchan&(8) = 9
- esfchan&(9) = 10
- esfchan&(10) = 11
- esfchan&(11) = 12
- OPEN "temp\file.inf" FOR INPUT AS #1234
- LINE INPUT #1, a$
- LINE INPUT #1, a$
- restart& = VAL(a$)
- LINE INPUT #1, a$
- total& = VAL(a$)
- CLOSE #1234
- DIM effectdat&(1 TO 11)
- DIM effectval&(1 TO 11)
- DIM row$(1 TO 11)
- FOR i = 1 TO 11
- row$(i) = " "
- NEXT i
- DIM currow AS LONG
- FOR currow = 1 TO total&
- NEXT currow
- PRINT "Conversion done!"
- CLOSE
- END FUNCTION
- FUNCTION param(strn$, b&) AS STRING
- c& = 0
- i& = 1
- car$ = MID$(strn$, 1, 1)
- IF car$ = CHR$(34) THEN
- comp$ = CHR$(34)
- i& = 2
- car$ = MID$(strn$, 2, 1)
- ELSE
- comp$ = " "
- END IF
- WHILE c& <> b&
- WHILE car$ <> comp$
- SPEFT$ = SPEFT$ + car$
- i& = i& + 1
- car$ = MID$(strn$, i&, 1)
- IF i& > LEN(strn$) THEN
- SPEFT$ = ""
- param = SPEFT$
- EXIT FUNCTION
- END IF
- WEND
- i& = i& + 1
- c& = c& + 1
- ' SPEFT$ = MID$(strn$, i&, 1)
- car$ = SPEFT$
- WEND
- param = RTRIM$(spleft(MID$(strn$,i&)))
- END FUNCTION
- FUNCTION SPLEFT(strn$) AS STRING
- i& = 1
- car$ = MID$(strn$, 1, 1)
- IF car$ = CHR$(34) THEN
- comp$ = CHR$(34)
- i& = 2
- car$ = MID$(strn$, 2, 1)
- ELSE
- comp$ = " "
- END IF
- WHILE car$ <> comp$
- SPEFT$ = SPEFT$ + car$
- i& = i& + 1
- car$ = MID$(strn$, i&, 1)
- IF i& > LEN(strn$) THEN
- SPLEFT = SPEFT$ + cars$
- EXIT FUNCTION
- END IF
- WEND
- SPLEFT = SPEFT$
- END FUNCTION
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement