home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 401-425 / apd410 / modplayerv1.2.amos.pp / modplayerv1.2.amos / modplayerv1.2.amosSourceCode < prev    next >
AMOS Source Code  |  1994-01-01  |  8KB  |  370 lines

  1. '
  2. 'Soundtracker module player v1.2 
  3. 'Relase version 1.1  
  4. 'Read rems for more info!
  5. '
  6. 'Needs AMOS v1.34 or higher to run!!!!!!!! 
  7. '
  8. ' STORM 1992 
  9. '
  10. A#=0.0
  11. Screen Open 0,640,256,8,Hires
  12. Curs Off : Pen 2 : Paper 0 : 
  13. Colour 17,$FFF : Colour 18,$1AA
  14. Cls 0
  15. '
  16. Break Off 
  17. Amos Lock 
  18. '
  19. Dim DLIST$(25),NPT(128),CMP$(25),VUM(5)
  20. Global DLIST$(),NPT(),DF$,JEN,DAW,TAW,CMP$(),VUM()
  21. Shared JEN,DAW,TAW,DF$
  22. '
  23. 'Best to reserve memory if you have a lot to spare!
  24. 'Can work without crashes on compiled version! 
  25. '
  26. 'Reserve As Work 5,180000
  27. '
  28. Flash 1,"(011,4)(022,4)(044,4)(066,4)(088,4)(0aa,4)(0cc,4)(0ee,4)(0cc,4)(0aa,4)(088,4)(066,4)(044,4)(022,4)"
  29. Pen 1
  30. Centre "SOUNDTRACKER MUSIC PLAYER V1.2 BY EJBER OZKAN @1992" : Print 
  31. Pen 2
  32. Set Rainbow 1,0,280,"","",""
  33.    Rainbow 1,0,0,280
  34.    For C=0 To 279
  35.       Rain(1,C)=0
  36.    Next C
  37. Rain(1,12)=$A0A
  38. Rain(1,180)=$A0A
  39. View 
  40. Change Mouse 4
  41. Limit Mouse 
  42. Do 
  43. LIST
  44. CHOOSE
  45. JEN=0 : DAW=0 : TAW=0 : JAY=0
  46. For I=0 To 25 : DLIST$(I)="" : Next I
  47. Screen 0
  48. Cls 0 : Home 
  49. Pen 1
  50. Centre "SOUNDTRACKER MUSIC PLAYER V1.2 BY EJBER OZKAN @1992" : Print 
  51. Pen 2
  52. Loop 
  53. '
  54. Procedure LIST
  55. '
  56. 'get directory list
  57. '
  58. Flash 3,"(000,4)"
  59. SCUM:
  60. On Error Goto PISS
  61. Pen 2
  62. Print "Select a path (i.e DF1: or DF0: or DF1:MODULES/ ect.)"
  63. Pen 1
  64. Input "PATHNAME:";DF$
  65. If DF$="" Then Goto SCUM
  66. If DF$="QUIT" Then Print : Print "BYE BYE!!" : Wait 90 : End 
  67. If DF$="quit" Then Print : Print "BYE BYE!!" : Wait 90 : End 
  68. If Exist(DF$)=False Then Goto SCUM
  69. '
  70. 'search for mod files only (change to suite!)
  71. '
  72. Pen 2
  73. Print "Searching for all 'mod.' files!"
  74. S$=Dir First$(DF$+"mod.*")
  75. If Left$(S$,4)=" mod" Then SNAKE=1
  76. If Left$(S$,4)=" MOD" Then SNAKE=1
  77. If SNAKE=1 Then JEN=1 : DLIST$(JEN)=S$ : Add JEN,1
  78. '
  79. 'Build directory of files in ram .leave out sub dirs 
  80. '
  81. While S$<>""
  82. S$=Dir Next$
  83. If Left$(S$,1)="*" Then Goto SUM2 Else Add JEN,1 : DLIST$(JEN)=S$
  84. DLIST$(JEN)=S$
  85. SUM2:
  86. Wend 
  87. '
  88. 'Check to see if there are any mod files!
  89. '
  90. For U=0 To JEN-1
  91. If Left$(DLIST$(U),4)=" mod" Then NHS=1
  92. If Left$(DLIST$(U),4)=" MOD" Then NHS=1
  93. Next U
  94. If NHS=>1 Then Pop Proc Else Goto RIP
  95. '
  96. 'Error file not found! 
  97. '
  98. PISS:
  99. If Errn=81 Then Print "Nope could not find path!" : Resume SCUM
  100. '
  101. 'No  mod files found!
  102. '
  103. RIP:
  104. Print "Oh no !I couldnt find any files with 'mod.' in it!"
  105. Goto SCUM
  106. End Proc
  107. Procedure CHOOSE
  108. '
  109. 'Reserve zones for mods! 
  110. '
  111. Reserve Zone JEN
  112. Cls 0 : Home : JAY=0 : Curs Off 
  113. Print "click on the modulename of the song you wish to here"
  114. '
  115. 'Construct on screen zones!  
  116. '
  117. For I=1 To JEN-1 : 
  118. Add JAY,1
  119. Locate 1,JAY : Print Zone$(DLIST$(I),I)
  120. Next I
  121. Locate 1,JAY+1 : Inverse On : Print Zone$(" select another path",JEN) : Inverse Off 
  122. '
  123. 'Wait for user input!  
  124. '
  125. Do 
  126. If Key State(80)=True Then Gosub PROGM
  127. DAW=Mouse Zone
  128. For TAW=1 To JEN-1
  129. If DAW=TAW and Mouse Key=1 Then Locate 1,TAW : Pen 1 : Print DLIST$(TAW) : JINGLE : Pen 2 : Locate 1,TAW : Print DLIST$(TAW)
  130. Next TAW
  131. If DAW=JEN and Mouse Key=1 Then Pop Proc
  132. Loop 
  133. '
  134. 'program mode on!
  135. '
  136. PROGM:
  137. Clear Key : JAKE=0
  138. Locate 1,JEN+1
  139. Print "Programming mode ON (Press F2 once completed choices)"
  140. Do 
  141.    PAW=Mouse Zone
  142.    For EAW=1 To JEN-1
  143.    If PAW=EAW and Mouse Key=1 Then Gosub KLL
  144.    FARM:
  145.    Next EAW
  146.    If Key State(81)=True and JAKE=>1 Then Gosub PLG : Gosub CLEAN : Return 
  147. Loop 
  148. '
  149. KLL:
  150. If CMP$(JAKE)=DLIST$(EAW) Then Return 
  151. Locate 1,EAW
  152. Pen 1
  153. CMP$(JAKE)=DLIST$(EAW)
  154. Print CMP$(JAKE);" Play No:";JAKE
  155. Add JAKE,1
  156. Wait 20
  157. Return 
  158. '
  159. ' play tunes in selected order!
  160. '
  161. PLG:
  162. CV=0 : CLIS=0
  163. Repeat 
  164.    Screen Open 1,640,100,4,Hires
  165.    Screen Display 1,140,200,640,100
  166.    Palette $0,$111,$444,$888,$333
  167.    Curs Off : Pen 3 : Cls 0 : Paper 0 : CLI=0
  168.    Flash 3,"(110,4)(220,4)(440,4)(660,4)(880,4)(aa0,4)(cc0,4)(ee0,4)(cc0,4)(aa0,4)(880,4)(660,4)(440,4)(220,4)"
  169.    Rain(1,180)=$A0A
  170.    TEMP1$=CMP$(CV)
  171.    TEMP2$=Mid$(TEMP1$,2,30)
  172.    F=Instr(TEMP2$,"  ")
  173.    TEMP3$=Mid$(TEMP2$,1,F-1)
  174.    TEMP4$=DF$+TEMP3$
  175.    Centre "Now playing file:"+TEMP4$
  176.    Track Load TEMP4$,5
  177.    Track Play 5,0
  178.    Track Loop Of 
  179.       Repeat 
  180.          Wait 40
  181.          If Key State(69)=True Then Gosub PRICE
  182.          If Key State(89)=True Then Screen Close 1 : Track Stop : Return 
  183.          For TCC=0 To 3
  184.          VUM(TCC)=Vumeter(TCC)
  185.          Next TCC
  186.          Wait 40
  187.          If Key State(69)=True Then Gosub PRICE
  188.          If Key State(89)=True Then Screen Close 1 : Track Stop : Return 
  189.          If VUM(0)=<0 and VUM(1)=<0 and VUM(2)=<0 and VUM(3)=<0 Then CMPA=1
  190.      Until CMPA=1
  191.    Add CV,1 : CMPA=0
  192. Screen Close 1
  193. Until CMP$(CV)=""
  194. Return 
  195. '
  196. PRICE:
  197. If CLIS=0 Then CLIS=1 : Amos To Back : Return 
  198. If CLIS=1 Then CLIS=0 : Amos To Front : Return 
  199. Return 
  200. '
  201. 'clean up mess again!  
  202. '
  203. CLEAN:
  204. Screen 0 : Cls 0 : Home : JAY=0 : Curs Off : Pen 2
  205. Print "click on the modulename of the song you wish to here"
  206. For I=1 To JEN-1 : 
  207.    Add JAY,1
  208.    Locate 1,JAY : Print DLIST$(I)
  209. Next I
  210. Locate 1,JAY+1 : Inverse On : Print " select another path" : Inverse Off 
  211. For I=0 To 25
  212. CMP$(I)=""
  213. Next I
  214. Return 
  215. End Proc
  216. Procedure JINGLE
  217. '
  218. 'Play jingle 
  219. '
  220. On Error Goto FISH
  221. Screen Open 1,640,100,4,Hires
  222. Screen Display 1,140,200,640,100
  223. Palette $0,$111,$444,$888,$333
  224. Curs Off : Pen 3 : Cls 0 : Paper 0 : CLI=0
  225. Flash 3,"(110,4)(220,4)(440,4)(660,4)(880,4)(aa0,4)(cc0,4)(ee0,4)(cc0,4)(aa0,4)(880,4)(660,4)(440,4)(220,4)"
  226. Rain(1,180)=$A0A
  227. '
  228. 'Construct REAL filename from original in memory 
  229. '
  230. TEMP1$=DLIST$(TAW)
  231. TEMP2$=Mid$(TEMP1$,2,30)
  232. F=Instr(TEMP2$,"  ")
  233. TEMP3$=Mid$(TEMP2$,1,F-1)
  234. TEMP4$=DF$+TEMP3$
  235. '
  236. 'load and play!
  237. '
  238. Centre "Now playing file:"+TEMP4$
  239. Track Load TEMP4$,5
  240. Track Play 5,0
  241. Track Loop On 
  242. '
  243. 'Show scanlines and wait fro possible mouse or F1 key! 
  244. '
  245. Repeat 
  246. VURAIN
  247. If Key State(89)=True Then TRACKER_DETAIL
  248. VURAIN
  249. If Key State(69)=True Then Gosub PRIMEA
  250. VURAIN
  251. VURAIN
  252. VURAIN
  253. If Key State(89)=True Then TRACKER_DETAIL
  254. VURAIN
  255. If Key State(69)=True Then Gosub PRIMEA
  256. VURAIN
  257. VURAIN
  258. VURAIN
  259. Until Mouse Key=1
  260. Track Stop 
  261. Erase 5
  262. JIF:
  263. Screen Close 1
  264. Screen 0
  265. CLEAN
  266. Pop Proc
  267. FISH:
  268. If Errn=94 Then Print : Print "Sorry couldnt load file!" : Wait 65 : Resume JIF
  269. If Errn=24 Then Print : Print "Not enough memory sorry!" : Wait 65 : Resume JIF
  270. PRIMEA:
  271. If CLI=0 Then Amos To Back : CLI=1 : Return 
  272. If CLI=1 Then CLI=0 : Amos To Front : Return 
  273. Return 
  274. End Proc
  275. Procedure VURAIN
  276. '
  277. 'Straight forward VU show! 
  278. 'A bit slow though!
  279. '
  280. 'V1=Vumeter(1) : V0=Vumeter(0) : V2=Vumeter(2) : V3=Vumeter(3) 
  281. If Vumeter(0)>=1 Then Rain(1,200)=$48 : Rain(1,201)=$48 : Else Rain(1,200)=$3 : Rain(1,201)=$2 : View 
  282. If Vumeter(1)>=1 Then Rain(1,210)=$48 : Rain(1,211)=$48 : Else Rain(1,210)=$3 : Rain(1,211)=$2 : View 
  283. If Vumeter(2)>=1 Then Rain(1,220)=$48 : Rain(1,221)=$48 : Else Rain(1,220)=$3 : Rain(1,221)=$2 : View 
  284. If Vumeter(3)>=1 Then Rain(1,230)=$48 : Rain(1,231)=$48 : Else Rain(1,230)=$3 : Rain(1,231)=$2 : View 
  285. End Proc
  286. Procedure CLEAN
  287. For I=180 To 240 : Rain(1,I)=$0 : Next I
  288. View 
  289. End Proc
  290. Procedure P0INTER
  291. '
  292. 'a nice pointer grabber! 
  293. '
  294. Screen Open 0,640,256,4,Hires
  295. Cls 0 : Flash Off 
  296. Ink 2
  297. Draw 1,1 To 16,1
  298. Draw 16,1 To 10,4
  299. Draw 10,4 To 16,10
  300. Draw 16,10 To 10,10
  301. Draw 10,10 To 6,6
  302. Draw 6,6 To 1,7
  303. Draw 1,7 To 1,1
  304. Ink 1
  305. Paint 2,2
  306. Get Bob 0,1,1,1 To 16,11
  307. Change Mouse 4
  308. End 
  309. End Proc
  310. Procedure TRACKER_DETAIL
  311. On Error Goto NOPE
  312. Screen Open 2,640,286,4,Hires
  313. Screen Display 2,140,40,640,256
  314. Pen 2 : Paper 0 : Curs Off : Flash Off 
  315. Cls 0 : NO=0
  316. Paper 0 : Pen 2
  317. CLEAN
  318. ST=Start(5)
  319. '702 
  320. Print 
  321. Print "Songname  :";
  322. For I=0 To 19
  323. AW=Peek(ST+I)
  324. If AW=0 Then Print "."; : Else Print Chr$(AW);
  325. Next I
  326. Print 
  327. For I=20 To 440 Step 30
  328. Add NO,1
  329. Locate 0, : Print "instrNo";Hex$(NO);" :";
  330. For U=0 To 21
  331. AW=Peek(ST+I+U)
  332. If AW=0 Then Print "."; : Else Print Chr$(AW);
  333. Next U
  334. Print 
  335. Next I
  336. Home : Print 
  337. For I=470 To 940 Step 30
  338.    Add NO,1
  339.    Locate 35, : Print "instrNo";Hex$(NO);" :";
  340.    For U=0 To 21
  341.       AW=Peek(ST+I+U)
  342.       Locate 50+U,
  343.       If AW=0 Then Print "."; : Else Print Chr$(AW);
  344.    Next U
  345.    Print 
  346. Next I
  347. STL=Peek(ST+950) : Print 
  348. Print "Position length : ";Hex$(STL)
  349. For T=0 To STL
  350. PT=Peek(ST+952+T)
  351. NPT(T)=PT
  352. Next T
  353. Sort NPT(0)
  354. BIGPT=NPT(128)
  355. Print "Amount of Patterns :";Hex$(BIGPT)
  356. Print "Press mouse button to continue             - STORM 1992 -"
  357. Repeat 
  358. Until Mouse Key=1
  359. Screen Close 2
  360. Screen 0
  361. For T=0 To 128 : NPT(T)=0 : Next T
  362. Rain(1,180)=$A0A
  363. View 
  364. Pop Proc
  365. NOPE:
  366. If Errn=24 Then Screen 1 : Print "Not enough memory!"
  367. Resume GOAT
  368. '
  369. GOAT:
  370. End Proc