Guest User

Untitled

a guest
Jan 15th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. declare FUNCTION LDWORD(a$) AS LONG
  2. declare FUNCTION RWORD(a$) AS LONG
  3. declare FUNCTION PBMAIN () AS LONG
  4.  
  5. TYPE PATTERNDATA
  6.     note AS STRING * 1
  7.     INST AS STRING * 1
  8.     VC AS STRING * 1
  9.     ET AS STRING * 1
  10.     EP AS STRING * 1
  11. END TYPE
  12.  
  13. pbMAIN
  14.  
  15. END
  16.  
  17. FUNCTION PBMAIN () AS LONG
  18.  
  19. a$ = COMMAND$(1)
  20. IF a$ = "" THEN EXIT FUNCTION
  21.  
  22. MKDIR "temp"
  23. KILL "temp\*.*"
  24.  
  25. OPEN "temp\file.inf" FOR OUTPUT AS #222
  26.  
  27. ' XM LOADER ROUTINE
  28. filerrr$ = COMMAND$(1)
  29. OPEN COMMAND$(1) FOR BINARY AS #1
  30.  
  31. a$ = SPACE$(17)
  32. GET #1,1 , a$
  33. print a$
  34. IF a$ <> "Extended Module: " THEN
  35.     PRINT "File not an XM"
  36.     CLOSE
  37.     EXIT FUNCTION
  38. END IF
  39. modname$ = SPACE$(20)
  40. GET #1, , modname$
  41. a$ = SPACE$(1)
  42. GET #1, , a$
  43. trakername$ = SPACE$(20)
  44. GET #1, , trakername$
  45. a$ = SPACE$(2)
  46. GET #1, , a$
  47. a$ = SPACE$(4)
  48. GET #1, , a$
  49. DIM lunghider AS LONG
  50.  
  51. LUNGHIDER = LDWORD(a$)
  52. HIDER$ = SPACE$(LUNGHIDER - 4)
  53. GET #1, , HIDER$
  54. DIM songlung AS LONG
  55. DIM restart AS LONG
  56. DIM canali AS LONG
  57. DIM numpatterns AS LONG
  58. DIM numinstruments AS LONG
  59. DIM freqtable AS LONG
  60. DIM deftempo AS LONG
  61. DIM defbpm AS LONG
  62.  
  63. songlung = RWORD(MID$(HIDER$, 1, 2))
  64. restart = RWORD(MID$(HIDER$, 3, 2))
  65. canali = RWORD(MID$(HIDER$, 5, 2))
  66. 'Form7.Label1.Caption = canali
  67. PRINT #222, canali
  68.  
  69. numpatterns = RWORD(MID$(HIDER$, 7, 2))
  70. numinstruments = RWORD(MID$(HIDER$, 9, 2))
  71. freqtable = RWORD(MID$(HIDER$, 11, 2))
  72. deftempo = RWORD(MID$(HIDER$, 13, 2))
  73. defbpm = RWORD(MID$(HIDER$, 15, 2))
  74.  
  75. REDIM tpattern(0 TO songlung - 1) AS LONG
  76. REDIM Lunpa(0 TO numpatterns - 1) AS INTEGER ' LUNGHEZZA DEL PATTERN
  77. DIM i AS LONG
  78.  
  79. FOR i = 0 TO songlung - 1
  80. tpattern(i) = ASC(MID$(HIDER$, 17 + i, 1))
  81. NEXT
  82.  
  83.  
  84. FOR i = 0 TO numpatterns - 1
  85.  
  86. 7646 'USELESS LABEL FOR DEBUG PURPOSES
  87.  
  88. DIM crow AS LONG
  89. DIM ccan AS LONG
  90. DIM ff AS LONG
  91.  
  92. crow = 0
  93. CCAN = 1
  94. ff = 0
  95. a$ = SPACE$(4)
  96. GET #1, , a$
  97. DIM lider AS LONG
  98. DIM nrow AS LONG
  99.  
  100. LIDER = LDWORD(a$)
  101.  
  102. PIDER$ = SPACE$(LIDER - 4)
  103. GET #1, , PIDER$
  104. nrow = RWORD(MID$(PIDER$, 2, 2))
  105. Lunpa(i) = nrow
  106. DIM psize AS LONG
  107.  
  108. PSIZE = RWORD(MID$(PIDER$, 4, 2))
  109.  
  110. REDIM PDATA(1 TO canali, 0 TO (nrow - 1)) AS PATTERNDATA
  111.  
  112. 703 IF crow = nrow THEN GOTO 704
  113.  
  114. a$ = SPACE$(1)
  115. GET #1, , a$
  116. DIM done AS LONG
  117.  
  118. DONE = 0
  119.  
  120. DIM bitss AS INTEGER
  121.  
  122. IF ASC(a$) > 127 THEN
  123.     bitss = ASC(a$)
  124.     IF (bitss AND 1) = 1 THEN
  125.         a$ = SPACE$(1)
  126.         GET #1, , a$
  127.         PDATA(CCAN, crow).note = a$
  128.     ELSE
  129.         PDATA(CCAN, crow).note = CHR$(0)
  130.     END IF
  131.     IF (bitss AND 2) = 2 THEN
  132.         a$ = SPACE$(1)
  133.         GET #1, , a$
  134.         PDATA(CCAN, crow).INST = a$
  135.     ELSE
  136.         PDATA(CCAN, crow).INST = CHR$(0)
  137.     END IF
  138.     IF (bitss AND 4) = 4 THEN
  139.         a$ = SPACE$(1)
  140.         GET #1, , a$
  141.         PDATA(CCAN, crow).VC = a$
  142.     ELSE
  143.         PDATA(CCAN, crow).VC = CHR$(0)
  144.     END IF
  145.     IF (bitss AND 8) = 8 THEN
  146.         a$ = SPACE$(1)
  147.         GET #1, , a$
  148.         PDATA(CCAN, crow).ET = a$
  149.     ELSE
  150.         PDATA(CCAN, crow).ET = CHR$(0)
  151.     END IF
  152.     IF (bitss AND 16) = 16 THEN
  153.         a$ = SPACE$(1)
  154.         GET #1, , a$
  155.         PDATA(CCAN, crow).EP = a$
  156.     ELSE
  157.         PDATA(CCAN, crow).EP = CHR$(0)
  158.     END IF
  159.     DONE = 1
  160. END IF
  161. DIM j AS LONG
  162.  
  163.  
  164. IF DONE = 1 THEN
  165.     CCAN = CCAN + 1
  166.     IF CCAN > canali THEN
  167.         CCAN = 1
  168.         IF (crow < nrow) AND (ff = 0) THEN
  169.         FOR j = 1 TO canali
  170.         IF PDATA(j, crow).ET = CHR$(13) THEN Lunpa(i) = crow + 1: ff = 1
  171.         NEXT j
  172.         END IF
  173.         crow = crow + 1
  174.     END IF
  175. END IF
  176. IF DONE = 1 THEN GOTO 703
  177.  
  178. PDATA(CCAN, crow).note = a$
  179. a$ = SPACE$(4)
  180. GET #1, , a$
  181. PDATA(CCAN, crow).INST = (MID$(a$, 1, 1))
  182. PDATA(CCAN, crow).VC = (MID$(a$, 2, 1))
  183. PDATA(CCAN, crow).ET = (MID$(a$, 3, 1))
  184. PDATA(CCAN, crow).EP = (MID$(a$, 4, 1))
  185.  
  186. CCAN = CCAN + 1
  187. IF CCAN > canali THEN
  188.     CCAN = 1
  189.     IF (crow < nrow) AND (ff = 0) THEN
  190.     FOR j = 1 TO canali
  191.     IF PDATA(j, crow).ET = CHR$(13) THEN Lunpa(i) = crow + 1: ff = 1
  192.     NEXT j
  193.     END IF
  194.     crow = crow + 1
  195. END IF
  196. GOTO 703
  197. 704
  198. DIM x AS LONG
  199. DIM y AS LONG
  200.  
  201. FOR X = 1 TO canali
  202. OPEN "temp\P" + LTRIM$(STR$(i)) + "C" + LTRIM$(STR$(X)) + ".tmp" FOR BINARY AS (X + 1)
  203. FOR Y = 0 TO Lunpa(i) - 1
  204. a$ = PDATA(X, Y).note + PDATA(X, Y).INST + PDATA(X, Y).VC + PDATA(X, Y).ET + PDATA(X, Y).EP
  205. PUT #(X + 1), , a$
  206. NEXT Y
  207. CLOSE (X + 1)
  208. NEXT X
  209. NEXT i
  210. CLOSE #1
  211.  
  212. ' NOW THE XM FILE IS READ AND I DON'T NEED IT ANYMORE
  213.  
  214. FOR i = 1 TO canali
  215. OPEN "temp\C" + LTRIM$(STR$(i)) + ".tmp" FOR BINARY AS #2
  216. FOR X = 0 TO songlung - 1
  217. OPEN "temp\P" + LTRIM$(STR$(tpattern(X))) + "C" + LTRIM$(STR$(i)) + ".tmp" FOR BINARY AS #1
  218. a$ = SPACE$(Lunpa(tpattern(X)) * 5)
  219. GET #1, , a$
  220. PUT #2, , a$
  221. CLOSE #1
  222. NEXT X
  223. CLOSE #2
  224. NEXT i
  225.  
  226. DIM lrestart AS LONG
  227.  
  228. DIM lunall AS LONG
  229.  
  230. FOR X = 0 TO songlung - 1
  231. IF X = restart THEN lrestart = lunall
  232. lunall = lunall + Lunpa(tpattern(X))
  233. NEXT X
  234.  
  235. PRINT #222, lrestart
  236. PRINT #222, lunall
  237. CLOSE
  238.  
  239. END FUNCTION
  240.  
  241.  
  242. FUNCTION LDWORD(a$) AS LONG
  243. LDWORD = (ASC(MID$(a$, 4, 1)) * 16777216) + (ASC(MID$(a$, 3, 1)) * 65536) + (ASC(MID$(a$, 2, 1)) * 256&) + (ASC(MID$(a$, 1, 1)))
  244. END FUNCTION
  245.  
  246. FUNCTION RWORD(a$) AS LONG
  247. RWORD = ((ASC(MID$(a$, 2, 1)) * 256) + ASC(MID$(a$, 1, 1)))
  248. END FUNCTION
Add Comment
Please, Sign In to add comment