Home » Archimedes archive » Acorn Computing » 1994 02 subscription disc.adf » 9402s » PD/PlayTrack/!PlayTrack/!RunImage
PD/PlayTrack/!PlayTrack/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn Computing » 1994 02 subscription disc.adf » 9402s |
Filename: | PD/PlayTrack/!PlayTrack/!RunImage |
Read OK: | ✔ |
File size: | D4A2 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >$.!PlayTrack.!RunImage 20REM PD 30REM 1992 40 50ON ERROR PROCtellemoff("Fatal error: (type="+STR$ERL+") "+REPORT$+" Re-run & try again."):SYS "Wimp_CloseDown":END 60REM errors in this bit of code cannot be dealt with - quit immediately 70REM If you try, templates might not be loaded, menus not defined etc. 80DIM q% 800,useful% 700,ind% &200,ind2% &300,menu% 300,pointer% 400 90DIM icontext% 36,iconvalid% 36,ind3% &200,ind4% &300,open% 650 100DIM indtext% 256:indptr%=0 110DIM ind5% &200,channel(8),ind6% &150,ind7% &100,ind8% &200,ind9% &200 120DIM ind10% &100,ind11% &20,code% 700,ind12% &100,ind13% &20,ind14% &20 130DIM samps% 32*31,volume% 4*31,samplen% 6*31,valid% 3,text% 30:$valid%="z4" 140$text%="No:":$(text%+8)="Name:":$(text%+16)="Vol:":$(text%+24)="Len:" 150edited%=FALSE:playing%=FALSE:speaker=FALSE:buffersize%=0:lenbytes%=0 160copen%=FALSE:topen%=FALSE:sopen%=FALSE:vopen%=FALSE:type=0:newicn%=FALSE 170sicn%=0:nscn%=FALSE:cmos%=42:cmos2%=43:oopen%=FALSE:lap%=TRUE:scr%=FALSE 180dos%=TRUE:afs%=FALSE:vuopen%=FALSE:mute%=FALSE:mak%=FALSE:wopen%=FALSE 190show%=FALSE:cropen%=FALSE:track%=1:com%=TRUE:ap%=TRUE:clock$="48":buff%=0 200workspc%=0 210$q%="TASK" 220SYS "Wimp_Initialise",200,!q%,"PlayTrack" TO ,taskh% 230SYS "Interface_Initialise",,taskh%:REM claim Interface pointers 240lock%=RND(2000):SYS "Tracker_Lock",lock% 250SYS "Wimp_OpenTemplate",,"<PlayTrack$Dir>.Templates" 260SYS "Wimp_LoadTemplate",,q%,ind%,ind%+&200,-1,"info",0 270SYS "Wimp_CreateWindow",,q% TO infowind% 280SYS "Wimp_LoadTemplate",,q%,ind2%,ind2%+&300,-1,"saveas",0 290SYS "Wimp_CreateWindow",,q% TO saveas% 300SYS "Wimp_LoadTemplate",,q%,ind3%,ind3%+&200,-1,"control",0 310SYS "Wimp_CreateWindow",,q% TO control% 320SYS "Wimp_LoadTemplate",,q%,ind4%,ind4%+&300,-1,"tuneinfo",0 330SYS "Wimp_CreateWindow",,q% TO tuneinfo% 340SYS "Wimp_LoadTemplate",,q%,ind5%,ind5%+&200,-1,"stereo",0 350SYS "Wimp_CreateWindow",,q% TO stereo% 360SYS "Wimp_LoadTemplate",,q%,ind6%,ind6%+&150,-1,"buffer",0 370SYS "Wimp_CreateWindow",,q% TO buffer% 380SYS "Wimp_LoadTemplate",,q%,ind7%,ind7%+&100,-1,"oddformat",0 390SYS "Wimp_CreateWindow",,q% TO odd% 400SYS "Wimp_LoadTemplate",,q%,ind8%,ind8%+&200,-1,"helptext",0 410SYS "Wimp_CreateWindow",,q% TO help% 420SYS "Wimp_LoadTemplate",,q%,ind9%,ind9%+&200,-1,"register",0 430SYS "Wimp_CreateWindow",,q% TO register% 440SYS "Wimp_LoadTemplate",,q%,ind10%,ind10%+&100,-1,"options",0 450SYS "Wimp_CreateWindow",,q% TO options% 460SYS "Wimp_LoadTemplate",,q%,ind11%,ind11%+&20,-1,"vumeter",0 470SYS "Wimp_CreateWindow",,q% TO vumeter% 480SYS "Wimp_LoadTemplate",,q%,ind12%,ind12%+&100,-1,"waveform",0 490SYS "Wimp_CreateWindow",,q% TO waveform% 500SYS "Wimp_LoadTemplate",,q%,ind13%,ind13%+&20,-1,"wavepane",0 510SYS "Wimp_CreateWindow",,q% TO wavepane% 520SYS "Wimp_LoadTemplate",,q%,ind14%,ind14%+&20,-1,"cro",0 530SYS "Wimp_CreateWindow",,q% TO cro% 540SYS "Wimp_CloseTemplate" 550PROCsamps_wind 560PROCget_register 570PROCload_opts 580IF scr% SYS "Sound_Configure",,,VALclock$ 590PROCbuffer(VALbuffer$) 600PROCmenu 610PROCassemble:!vu_block%=pointer% 620SYS "Sound_Speaker",0 TO oldspeak%:SYS "Sound_Enable",0 TO oldmute% 630volunit=0.442708333:REM 1 discrete volume unit 640cvol%=255:REM Volume at 100% 650SYS "XOS_Module",18,"TrackerModule" TO ,,,start%;flags% 660IF (flags% AND 1)=1 THEN 670 PROCtellemoff("Cannot initialise TrackerModule address offsets! I must exit immediately (check that TrackerModule is loaded).") 680 PROCtidy 690 SYS "Wimp_CloseDown":SYS "Interface_CloseDown",taskh% 700 SYS "Tracker_Unlock",lock% 710 END 720ENDIF 730sccb%=start%+&1850:REM Start of SCCB in TrackerModule 740h%=OPENUP("<PlayTrack$Dir>.Font"):len%=EXT#h%:CLOSE#h%:fontlen%=len%-1 750DIM font% len%:SYS "OS_File",&FF,"<PlayTrack$Dir>.Font",font% 760icon%=FNiconbar("!PlayTrack","",-1):REM icon on iconbar 770 REM -1 = Utility (RHS) 780 REM -2 = Service (LHS) 790 800quit%=FALSE:REM Nothing happened yet! 810SYS "Tracker_Stereo",4,,,,lock%:FOR I=1 TO 8:PROCstereo(I,4):channel(I)=4:NEXT 820IF registered%=FALSE AND pirate%=FALSE THEN 830 PROCsetup_mess1:PROChold_it(help%) 840 SYS "Wimp_CreateMenu",,register%,640,900 850ENDIF 860 870ONERROR IFFNerror("Error: "+REPORT$+" (code "+STR$ERL+") Quit ? (Buffer="+STR$~workspc%+")",3)=1:SYS "Interface_CloseDown",,taskh%:SYS "Tracker_Stop",,,,,lock%:SYS "Sound_Speaker",oldspeak%:SYS "Sound_Enable",oldmute%:SYS "Tracker_Unlock",lock%:PROCtidy:SYS "Wimp_CloseDown":END 880REM Error handler drops through to wimp_poll loop, AFTER wimp_initialise 890REPEAT 900PROCvolfill 910SYS "Wimp_Poll",,q% TO reason%:REM and poll the wimp. 920SYS "Interface_PreProcessKey",reason%,q%,taskh% 930SYS "Interface_Poll",reason%,,taskh%:REM Ensure pointer up to date 940CASE reason% OF 950WHEN 0 : IF newicn% THEN 960 TIME=0:REPEAT UNTIL TIME>=20 970 CASE type OF 980 WHEN TRUE : PROCputiconsprite(win%,icn%,"selon") 990 WHEN FALSE: PROCputiconsprite(win%,icn%,"seloff") 1000 ENDCASE 1010 newicn%=FALSE 1020 ENDIF 1030 MOUSE x%,y%,b%:IF nscn% AND b%=0 THEN 1040 TIME=0:REPEAT UNTIL TIME>=15 1050 CASE sicn% OF 1060 WHEN 0 : PROCputiconsprite(control%,0,"rev") 1070 WHEN 4 : PROCputiconsprite(control%,4,"fwd") 1080 ENDCASE 1090 nscn%=FALSE 1100 ENDIF 1110 pointer%!0=vumeter%:SYS "Wimp_GetWindowState",,pointer% 1120 IF (pointer%!32 AND 1<<16)<>0 THEN 1130 SYS "Wimp_ForceRedraw",vumeter%,0,-280,310,0 1140 ENDIF 1150 IF cropen% THEN 1160 SYS "Wimp_ForceRedraw",cro%,0,-200,150,0 1170 ENDIF 1180WHEN 1 : PROCredraw 1190WHEN 2 : SYS "Wimp_OpenWindow",,q% 1200 IF !q%=waveform% THEN 1210 !q%=wavepane%:q%!4+=20:q%!8+=20:q%!12-=20:q%!16-=80 1220 !pointer%=wavepane%:SYS "Wimp_GetWindowState",,pointer% 1230 q%!20=pointer%!20:q%!24=pointer%!24 1240 SYS "Wimp_OpenWindow",,q% 1250 ENDIF 1260WHEN 3 : SYS "Wimp_CloseWindow",,q% 1270 IF !q%=control% THEN 1280 copen%=FALSE 1290 PROCtickmenu(open%,0) 1300 PROCshut(control%) 1310 ENDIF 1320 IF !q%=tuneinfo% THEN 1330 topen%=FALSE 1340 PROCtickmenu(open%,1) 1350 PROCshut(tuneinfo%) 1360 ENDIF 1370 IF !q%=stereo% THEN 1380 sopen%=FALSE 1390 PROCtickmenu(open%,2) 1400 PROCshut(stereo%) 1410 ENDIF 1420 IF !q%=samples% THEN 1430 vopen%=FALSE 1440 PROCtickmenu(open%,3) 1450 PROCshut(samples%) 1460 ENDIF 1470 IF !q%=buffer% THEN 1480 bopen%=FALSE 1490 PROCtickmenu(open%,4) 1500 PROCshut(buffer%) 1510 ENDIF 1520 IF !q%=options% THEN 1530 oopen%=FALSE 1540 PROCtickmenu(open%,5) 1550 PROCshut(options%) 1560 ENDIF 1570 IF !q%=vumeter% THEN 1580 vuopen%=FALSE 1590 PROCtickmenu(open%,6) 1600 PROCshut(vumeter%) 1610 ENDIF 1620 IF !q%=waveform% THEN 1630 wopen%=FALSE 1640 PROCtickmenu(open%,7) 1650 PROCshut(waveform%) 1660 PROCshut(wavepane%) 1670 ENDIF 1680 IF !q%=cro% THEN 1690 cropen%=FALSE 1700 PROCtickmenu(open%,8) 1710 PROCshut(cro%) 1720 ENDIF 1730WHEN 4 : SYS "Wimp_SetCaretPosition",-1 1740WHEN 5 : SYS "Wimp_SetCaretPosition",q%!0,-1 1750WHEN 6 : PROCcheckmouse 1760WHEN 7 : f$=FNlastbit(f$):PROCdragend 1770WHEN 8 : PROCkp 1780WHEN 9 : PROCprocess_menu 1790WHEN 17,18 : PROCmessage 1800ENDCASE 1810IF playing% THEN 1820 SYS "Tracker_ReadPos",,,,,lock% TO c 1830 c1=VAL(FNgeticondata(control%,9)) 1840 IF c<>c1 PROCputicondata(control%,9,STR$c) 1850 SYS "Tracker_TuneInfo",,,,,lock% TO ,,s 1860 s1=VAL(FNgeticondata(tuneinfo%,7)) 1870 IF s<>s1 PROCputicondata(tuneinfo%,7,STR$s) 1880 PROCvolfill 1890ENDIF 1900UNTIL quit% 1910SYS "Interface_CloseDown",,taskh% 1920SYS "Sound_Speaker",oldspeak%:SYS "Sound_Enable",oldmute% 1930SYS "Tracker_Stop",,,,,lock%:VDU7 1940SYS "Tracker_Unlock",lock% 1950PROCtidy 1960SYS "Wimp_CloseDown":END:REM leave gracefully 1970 1980DEF FNiconbar(v$,t$,handle%) 1990LOCAL i% 2000IF handle%=-2 THEN :REM Service or Utility? 2010$iconvalid%="S"+v$:$icontext%=t$ 2020ENDIF 2030q%!0=handle% 2040q%!4=0 2050IF handle%=-1 q%!8=0 ELSE q%!8=-16 :REM Set up proper co-ords 2060IF handle%=-1 q%!12=68 ELSE q%!12=78 2070IF handle%=-1 q%!16=96 ELSE q%!16=90 2080IF handle%=-1 THEN :REM And proper icon flags 2090q%!20=&2002 2100ELSE 2110q%!20=%00010111000000000011000100101011 2120ENDIF 2130IF handle%=-1 THEN :REM Indirected? 2140$(q%+24)=v$ 2150ELSE 2160q%!24=icontext% 2170q%!28=iconvalid% 2180q%!32=LEN($icontext%)+1 2190ENDIF 2200SYS "Wimp_CreateIcon",,q% TO i% :REM And draw the icon 2210=i% 2220 2230DEF PROCmessage 2240yr%=q%!8 2250CASE (q%!16) OF 2260WHEN 0 : quit%=TRUE:REM Message_Quit ? 2270WHEN 2 : PROCds:REM Message_DataSave ? 2280WHEN 3 : PROCdl:REM Message_DataLoad ? 2290WHEN 5 : PROCdo:REM Message_DataOpen ? 2300WHEN 8 : PROCpq:REM Message_PreQuit ? 2310WHEN &502 : PROCsendhelp:REM Message_Help ? 2320ENDCASE 2330ENDPROC 2340 2350DEF PROCcheckmouse 2360handle=(q%!12) 2370icon=(q%!16) 2380CASE (q%!12) OF 2390WHEN -2:REM iconbar ? 2400CASE (q%!8) OF 2410WHEN 4 : IF registered%=FALSE AND pirate%=FALSE SYS "Wimp_CreateMenu",,register%,640,900 2420WHEN 2 : SYS "Wimp_CreateMenu",,menu%,!q%-64,319 2430WHEN 1 : REM Adjust ? 2440ENDCASE 2450WHEN saveas% 2460CASE q%!8 OF 2470WHEN 4 : CASE q%!16 OF 2480WHEN 1 : PROCslabicon:f$=FNgeticondata(saveas%,0):PROCquicksave 2490WHEN 3 : f$=FNgeticondata(saveas%,0):PROCdragbox(saveas%,2) 2500WHEN 4 : com%=NOTcom%:PROCtoggleopts(com%,saveas%,4) 2510WHEN 6 : ap%=NOTap%:PROCtoggleopts(ap%,saveas%,6) 2520ENDCASE 2530ENDCASE 2540WHEN control% 2550CASE q%!8 OF 2560WHEN 4 : CASE q%!16 OF 2570WHEN 0 : PROCputiconsprite(control%,0,"rev1"):sicn%=0:nscn%=TRUE 2580 IF playing%SYS "Tracker_ReadPos",,,,,lock% TO c,,m:c-=1:IF c=-1 c=m 2590 IF playing% SYS "Tracker_SetPos",c,,,,lock% 2600WHEN 1 : SYS "Tracker_Pause",,,,,lock% 2610 PROCputiconsprite(control%,1,"pause1") 2620 PROCputiconsprite(control%,2,"stop") 2630 PROCputiconsprite(control%,3,"play") 2640WHEN 2 : IF dos% THEN 2650 SYS "Tracker_Stop",,,,,lock% 2660 PROCputiconsprite(control%,1,"pause") 2670 PROCputiconsprite(control%,2,"stop1") 2680 PROCputiconsprite(control%,3,"play") 2690 PROCputicondata(control%,9,"0") 2700 PROCputicondata(control%,10,"0") 2710 PROCclear:playing%=FALSE 2720 ELSE 2730 SYS "Tracker_Pause",,,,,lock% 2740 SYS "Tracker_SetPos",0,,,,lock% 2750 PROCputiconsprite(control%,1,"pause") 2760 PROCputiconsprite(control%,2,"stop1") 2770 PROCputiconsprite(control%,3,"play") 2780 PROCputicondata(control%,9,"0") 2790 ENDIF 2800WHEN 3 : SYS "Tracker_Play",,,,,lock% 2810 PROCputiconsprite(control%,1,"pause") 2820 PROCputiconsprite(control%,2,"stop") 2830 PROCputiconsprite(control%,3,"play1") 2840WHEN 4 : PROCputiconsprite(control%,4,"fwd1"):sicn%=4:nscn%=TRUE 2850 IF playing%SYS "Tracker_ReadPos",,,,,lock% TO c,,m:c+=1:IF c>m c=0 2860 IF playing% SYS "Tracker_SetPos",c,,,,lock% 2870WHEN 12: speaker=NOT speaker 2880 PROCtoggleopts(speaker,control%,12) 2890 IF speaker SYS "Sound_Speaker",2 ELSE SYS "Sound_Speaker",1 2900WHEN 15: mute%=NOT mute% 2910 PROCtoggleopts(mute%,control%,15) 2920 IF mute% SYS "Sound_Enable",1 ELSE SYS "Sound_Enable",2 2930WHEN 19: PROCvolume 2940ENDCASE 2950WHEN 1 : CASE q%!16 OF 2960WHEN 0 : PROCputiconsprite(control%,0,"fwd1"):sicn%=0:nscn%=TRUE 2970 IF playing% SYS "Tracker_ReadPos",,,,,lock% TO c,,m:c+=1:IF c>m c=0 2980 IF playing% SYS "Tracker_SetPos",c,,,,lock% 2990WHEN 4 : PROCputiconsprite(control%,4,"rev1"):sicn%=4:nscn%=TRUE 3000 IF playing% SYS "Tracker_ReadPos",,,,,lock% TO c,,m:c-=1:IF c=-1 c=m 3010 IF playing% SYS "Tracker_SetPos",c,,,,lock% 3020ENDCASE 3030ENDCASE 3040WHEN stereo% 3050CASE q%!8 OF 3060WHEN 4 : CASE q%!16 OF 3070WHEN 0 : channel(1)-=1:IF channel(1)<1 channel(1)=1 3080 PROCstereo(1,channel(1)) 3090 PROCputiconsprite(stereo%,1,"stereo"+STR$channel(1)):PROCslabicon 3100WHEN 2 : channel(1)+=1:IF channel(1)>7 channel(1)=7 3110 PROCstereo(1,channel(1)) 3120 PROCputiconsprite(stereo%,1,"stereo"+STR$channel(1)):PROCslabicon 3130WHEN 3 : channel(2)-=1:IF channel(2)<1 channel(2)=1 3140 PROCstereo(2,channel(2)) 3150 PROCputiconsprite(stereo%,4,"stereo"+STR$channel(2)):PROCslabicon 3160WHEN 5 : channel(2)+=1:IF channel(2)>7 channel(2)=7 3170 PROCstereo(2,channel(2)) 3180 PROCputiconsprite(stereo%,4,"stereo"+STR$channel(2)):PROCslabicon 3190WHEN 6 : channel(3)-=1:IF channel(3)<1 channel(3)=1 3200 PROCstereo(3,channel(3)) 3210 PROCputiconsprite(stereo%,7,"stereo"+STR$channel(3)):PROCslabicon 3220WHEN 8 : channel(3)+=1:IF channel(3)>7 channel(3)=7 3230 PROCstereo(3,channel(3)) 3240 PROCputiconsprite(stereo%,7,"stereo"+STR$channel(3)):PROCslabicon 3250WHEN 9 : channel(4)-=1:IF channel(4)<1 channel(4)=1 3260 PROCstereo(4,channel(4)) 3270 PROCputiconsprite(stereo%,10,"stereo"+STR$channel(4)):PROCslabicon 3280WHEN 11: channel(4)+=1:IF channel(4)>7 channel(4)=7 3290 PROCstereo(4,channel(4)) 3300 PROCputiconsprite(stereo%,10,"stereo"+STR$channel(4)):PROCslabicon 3310WHEN 20: channel(5)-=1:IF channel(5)<1 channel(5)=1 3320 PROCstereo(5,channel(5)) 3330 PROCputiconsprite(stereo%,21,"stereo"+STR$channel(5)):PROCslabicon 3340WHEN 22: channel(5)+=1:IF channel(5)>7 channel(5)=7 3350 PROCstereo(5,channel(5)) 3360 PROCputiconsprite(stereo%,21,"stereo"+STR$channel(5)):PROCslabicon 3370WHEN 23: channel(6)-=1:IF channel(6)<1 channel(6)=1 3380 PROCstereo(6,channel(6)) 3390 PROCputiconsprite(stereo%,24,"stereo"+STR$channel(6)):PROCslabicon 3400WHEN 25: channel(6)+=1:IF channel(6)>7 channel(6)=7 3410 PROCstereo(6,channel(6)) 3420 PROCputiconsprite(stereo%,24,"stereo"+STR$channel(6)):PROCslabicon 3430WHEN 26: channel(7)-=1:IF channel(7)<1 channel(7)=1 3440 PROCstereo(7,channel(7)) 3450 PROCputiconsprite(stereo%,27,"stereo"+STR$channel(7)):PROCslabicon 3460WHEN 28: channel(7)+=1:IF channel(7)>7 channel(7)=7 3470 PROCstereo(7,channel(7)) 3480 PROCputiconsprite(stereo%,27,"stereo"+STR$channel(7)):PROCslabicon 3490WHEN 29: channel(8)-=1:IF channel(8)<1 channel(8)=1 3500 PROCstereo(8,channel(8)) 3510 PROCputiconsprite(stereo%,30,"stereo"+STR$channel(8)):PROCslabicon 3520WHEN 31: channel(8)+=1:IF channel(8)>7 channel(8)=7 3530 PROCstereo(8,channel(8)) 3540 PROCputiconsprite(stereo%,30,"stereo"+STR$channel(8)):PROCslabicon 3550ENDCASE 3560ENDCASE 3570WHEN buffer% 3580CASE q%!8 OF 3590WHEN 4 : CASE q%!16 OF 3600WHEN 5 : PROCslabicon:PROCbuffer(VAL(FNgeticondata(buffer%,3))) 3610ENDCASE 3620ENDCASE 3630WHEN register% 3640CASE q%!8 OF 3650WHEN 4 : CASE q%!16 OF 3660WHEN 9 : PROCslabicon:PROCregister_copy 3670ENDCASE 3680ENDCASE 3690WHEN options% 3700CASE q%!8 OF 3710WHEN 4 : CASE q%!16 OF 3720WHEN 2 : lap%=NOTlap%:PROCtoggleopts(lap%,options%,2) 3730WHEN 4 : scr%=NOTscr%:PROCtoggleopts(scr%,options%,4) 3740WHEN 6 : dos%=NOTdos%:PROCtoggleopts(dos%,options%,6) 3750WHEN 8 : afs%=NOTafs%:PROCtoggleopts(afs%,options%,8) 3760WHEN 11: mak%=NOTmak%:PROCtoggleopts(mak%,options%,11) 3770WHEN 10: PROCslabicon:PROCsave_opts 3780ENDCASE 3790ENDCASE 3800WHEN waveform% 3810CASE q%!8 OF 3820WHEN 4 : CASE q%!16 OF 3830WHEN 2 : PROCslabicon:PROCplaynote 3840ENDCASE 3850ENDCASE 3860WHEN cro%: 3870CASE q%!8 OF 3880WHEN 4 : track%+=1:IF track%=9 track%=1 3890 pointer%!0=cro%:SYS "Wimp_GetWindowInfo",,pointer% 3900 $(pointer%!76)=STR$track% 3910 SYS "Wimp_GetWindowState",,pointer% 3920 SYS "Wimp_CloseWindow",,pointer% 3930 SYS "Wimp_OpenWindow",,pointer% 3940WHEN 1 : track%-=1:IF track%=0 track%=8 3950 pointer%!0=cro%:SYS "Wimp_GetWindowInfo",,pointer% 3960 $(pointer%!76)=STR$track% 3970 SYS "Wimp_GetWindowState",,pointer% 3980 SYS "Wimp_CloseWindow",,pointer% 3990 SYS "Wimp_OpenWindow",,pointer% 4000ENDCASE 4010ENDCASE 4020ENDPROC 4030 4040DEF PROCmenu 4050REM Setup menus and menu block 4060P%=menu% 4070flags=&7000021 4080PROCmenu_header("PlayTrack",9) 4090PROCmenu_item(&00,infowind%,flags,"Info") 4100IF registered% PROCmenu_item(&00,open%,flags,"Open") ELSE PROCmenu_item(&00,open%,&2000021,"Open") 4110IF registered% PROCmenu_item(&00,saveas%,flags,"Save F3") ELSE PROCmenu_item(&00,saveas%,&2000021,"Save F3") 4120PROCmenu_item(&00,-1,flags,"Stop F6") 4130PROCmenu_item(&80,-1,flags,"Quit") 4140P%=open% 4150PROCmenu_header("Open",14) 4160PROCmenu_item(&00,-1,flags,"Control �F1") 4170PROCmenu_item(&00,-1,flags,"Info �F2") 4180PROCmenu_item(&00,-1,flags,"Stereo �F3") 4190PROCmenu_item(&00,-1,flags,"Samples �F4") 4200PROCmenu_item(&00,-1,flags,"Buffer �F5") 4210PROCmenu_item(&00,-1,flags,"Options �F6") 4220PROCmenu_item(&00,-1,flags,"Vu-Meter �F7") 4230PROCmenu_item(&00,-1,flags,"Waveform �F8") 4240PROCmenu_item(&00,-1,flags,"CRO �F9") 4250PROCmenu_item(&80,-1,flags,"Monitor �F10") 4260IF registered%=FALSE THEN 4270 FOR I%=0 TO 9:PROCgreymenu(open%,I%):NEXT 4280 PROCdisable(saveas%,1):PROCdisable(saveas%,3) 4290ENDIF 4300ENDPROC 4310 4320DEF PROCmenu_header(T$,w) 4330$P%=T$ 4340P%!12=&70207 4350P%!16=w*16 4360P%!20=40 4370P%!24=0 4380P%+=28 4390ENDPROC 4400 4410DEF PROCmenu_item(A%,B%,C%,T$) 4420P%!0=A% 4430P%!4=B% 4440P%!8=C% 4450IF LEN(T$)<13 THEN 4460 $(P%+12)=T$ 4470ELSE 4480 $(indtext%+indptr%)=T$ 4490 P%!12=indtext%+indptr% 4500 P%!16=-1 4510 P%!20=LEN(T$)+1 4520 P%!8=P%!8 OR 1<<8 4530 indptr%+=LEN(T$)+1 4540ENDIF 4550P%+=24 4560ENDPROC 4570 4580DEF FNerror(e$,b%):!q%=0:$(q%+4)=e$+CHR$0 4590SYS "Wimp_ReportError",q%,b%,"PlayTrack" TO ,b% 4600=b% 4610 4620DEF PROCdl 4630LOCAL f$,T% 4640f$=STRING$(250," "):f$="":T%=q%+44 4650WHILE ?T%<>0:f$+=CHR$?T%:T%+=1:ENDWHILE 4660CASE q%!40 OF 4670WHEN &CB6,&001,&CC5,&701 : IF q%!20=-2 PROCtracker_loadit(f$) 4680OTHERWISE : PROChold_it(odd%) 4690ENDCASE 4700q%!12=q%!8:q%!16=4:SYS "Wimp_SendMessage",17,q% 4710ENDPROC 4720 4730DEF PROCdo 4740LOCAL f$,T% 4750f$=STRING$(250," "):f$="":f$=FNrtoz(q%+44) 4760CASE q%!40 OF 4770WHEN &CB6,&001,&CC5,&701 : PROCtracker_loadit(f$) 4780OTHERWISE : ENDPROC 4790ENDCASE 4800q%!12=q%!8:q%!16=4:SYS "Wimp_SendMessage",17,q% 4810ENDPROC 4820 4830DEF PROCredraw 4840SYS "Wimp_RedrawWindow",,q% TO flag 4850x%=q%!4-q%!20:y%=q%!16-q%!24 4860WHILE flag<>0 4870IF !q%=vumeter% AND playing% THEN 4880 SYS "Tracker_SoundInfo",pointer%,,,,lock% 4890 !vu_x%=x%:!vu_y%=y%-280 4900 CALL code% 4910ENDIF 4920IF !q%=wavepane% AND show% AND FNgeticondata(waveform%,1)<>"" AND playing% THEN 4930 SYS "Hourglass_On" 4940 samp%=VAL(FNgeticondata(waveform%,1)):IF samp%=0 SYS "Hourglass_Smash":ENDPROC 4950 SYS "Tracker_ReadSampleTable",samp%,,,,lock% TO ,,len1%,len%,rpt%,rptlen%,addr% 4960 SYS "Wimp_SetColour",7 4970 IF len1%>0 AND addr%>0 THEN 4980 scale%=len%/len1%:rpt%=rpt%/scale%:rptlen%=rptlen%/scale% 4990 sx=0:sy%=0:dist=2112/len1%:mid%=0 5000 MOVE x%,y%-256 5010 FOR I%=0 TO len1% 5020 sx+=dist:sy%=addr%?I%:mid%+=sy% 5030 DRAW x%+sx,(y%-256)+sy% 5040 NEXT I% 5050 mid%=mid%/len1% 5060 SYS "Wimp_SetColour",11 5070 MOVE x%,(y%-256)+mid%:DRAW x%+2112,(y%-256)+mid% 5080 SYS "Wimp_SetColour",10 5090 MOVE x%+rpt%*dist,(y%-256):DRAW x%+rpt%*dist,y% 5100 SYS "Wimp_SetColour",13 5110 MOVE x%+(rpt%+rptlen%)*dist,(y%-256):DRAW x%+(rpt%+rptlen%)*dist,y% 5120 ENDIF 5130 SYS "Hourglass_Off" 5140ENDIF 5150IF !q%=cro% THEN 5160 SYS "Wimp_SetColour",14 5170 FOR I%=0 TO 150 STEP 50:MOVE x%+I%,(y%-200):DRAW x%+I%,y%:NEXT I% 5180 FOR I%=0 TO 200 STEP 50:MOVE x%,(y%-I%):DRAW x%+150,(y%-I%):NEXT I% 5190 IF playing% THEN 5200 SYS "Wimp_SetColour",0 5210 SYS "Tracker_SoundInfo",pointer%,,,,lock%:boff%=(pointer%!((track%-1)*32)>>>16) 5220 samp%=(pointer%!(((track%-1)*32)+16)) 5230 IF samp%>0 THEN 5240 SYS "Tracker_ReadSampleTable",samp%,,,,lock% TO ,,,len%,,,addr%:IF boff%>len%-15 boff%=len%-15 5250 IF boff%<len%+15 bof%=len%+15 5260 MOVE x%,(y%-200)+addr%?(boff%-1):sx%=0:sy=0:FOR I%=boff%-15 TO boff%+15:sy=(addr%?I%)/1.28:DRAW x%+sx%,(y%-200)+sy:sx%+=(150/30):NEXT 5270 ELSE 5280 MOVE x%,(y%-100):DRAW x%+150,(y%-100) 5290 ENDIF 5300 ENDIF 5310ENDIF 5320IF !q%<>vumeter% SYS "Interface_Render3dWindow",,q% 5330SYS "Wimp_GetRectangle",,q% TO flag 5340ENDWHILE 5350ENDPROC 5360 5370DEF PROCassemble:REM redraw code in assembler for speed: 5380FOR pass%=8 TO 11 STEP 2 5390P%=code%:L%=code%+700 5400[OPT pass% 5410LDR R0,vu_block% 5420LDR R1,[R0,#24]:STR R1,chan1% 5430LDR R1,[R0,#32+24]:STR R1,chan2% 5440LDR R1,[R0,#64+24]:STR R1,chan3% 5450LDR R1,[R0,#96+24]:STR R1,chan4% 5460LDR R1,[R0,#128+24]:STR R1,chan5% 5470LDR R1,[R0,#160+24]:STR R1,chan6% 5480LDR R1,[R0,#192+24]:STR R1,chan7% 5490LDR R1,[R0,#224+24]:STR R1,chan8% 5500MOV R0,#11 5510SWI "Wimp_SetColour" 5520LDR R2,vu_y% 5530LDR R1,vu_x%:MOV R0,#4 5540SWI "OS_Plot" 5550MOV R1,#30:LDR R3,chan1%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5560MOV R0,#97:SWI "OS_Plot" 5570LDR R2,vu_y% 5580LDR R1,vu_x%:ADD R1,R1,#40:MOV R0,#4 5590SWI "OS_Plot" 5600MOV R1,#30:LDR R3,chan2%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5610MOV R0,#97:SWI "OS_Plot" 5620LDR R2,vu_y% 5630LDR R1,vu_x%:ADD R1,R1,#80:MOV R0,#4 5640SWI "OS_Plot" 5650MOV R1,#30:LDR R3,chan3%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5660MOV R0,#97:SWI "OS_Plot" 5670LDR R2,vu_y% 5680LDR R1,vu_x%:ADD R1,R1,#120:MOV R0,#4 5690SWI "OS_Plot" 5700MOV R1,#30:LDR R3,chan4%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5710MOV R0,#97:SWI "OS_Plot" 5720LDR R2,vu_y% 5730LDR R1,vu_x%:ADD R1,R1,#160:MOV R0,#4 5740SWI "OS_Plot" 5750MOV R1,#30:LDR R3,chan5%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5760MOV R0,#97:SWI "OS_Plot" 5770LDR R2,vu_y% 5780LDR R1,vu_x%:ADD R1,R1,#200:MOV R0,#4 5790SWI "OS_Plot" 5800MOV R1,#30:LDR R3,chan6%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5810MOV R0,#97:SWI "OS_Plot" 5820LDR R2,vu_y% 5830LDR R1,vu_x%:ADD R1,R1,#240:MOV R0,#4 5840SWI "OS_Plot" 5850MOV R1,#30:LDR R3,chan7%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5860MOV R0,#97:SWI "OS_Plot" 5870LDR R2,vu_y% 5880LDR R1,vu_x%:ADD R1,R1,#280:MOV R0,#4 5890SWI "OS_Plot" 5900MOV R1,#30:LDR R3,chan8%:MOV R2,R3,LSL #3:SUB R2,R2,R3 5910MOV R0,#97:SWI "OS_Plot" 5920MOV PC,R14 5930.vu_block% EQUD 0:.chan1% EQUD 0:.chan2% EQUD 0:.chan3% EQUD 0 5940.chan4% EQUD 0:.chan5% EQUD 0:.chan6% EQUD 0:.chan7% EQUD 0 5950.chan8% EQUD 0:.vu_x% EQUD 0:.vu_y% EQUD 0 5960] 5970NEXT pass% 5980ENDPROC 5990 6000DEF PROCprocess_menu 6010SYS "Wimp_GetPointerInfo",,pointer%:j%=(pointer%!8=1) 6020CASE handle OF 6030WHEN -2 6040CASE q%!0 OF 6050WHEN 1 : CASE q%!4 OF 6060 WHEN 0 : copen%=NOTcopen%:PROCtickmenu(open%,0) 6070 IF copen% PROCopenup(control%,0,1024,625,325) 6080 IF NOT copen% PROCshut(control%) 6090 WHEN 1 : topen%=NOTtopen%:PROCtickmenu(open%,1) 6100 IF topen% PROCopenup(tuneinfo%,580,530,700,430) 6110 IF NOT topen% PROCshut(tuneinfo%) 6120 WHEN 2 : sopen%=NOTsopen%:PROCtickmenu(open%,2) 6130 IF sopen% PROCwindow_centre(stereo%,1110,250) 6140 IF NOT sopen% PROCshut(stereo%) 6150 WHEN 3 : vopen%=NOTvopen%:PROCtickmenu(open%,3) 6160 IF vopen% PROCopenback(samples%,0,1000,700,850) 6170 IF NOT vopen% PROCshut(samples%) 6180 WHEN 4 : bopen%=NOTbopen%:PROCtickmenu(open%,4) 6190 IF bopen% PROCwindow_centre(buffer%,700,475) 6200 IF NOT bopen% PROCshut(buffer%) 6210 WHEN 5 : oopen%=NOToopen%:PROCtickmenu(open%,5) 6220 IF oopen% PROCwindow_centre(options%,768,367) 6230 IF NOT oopen% PROCshut(options%) 6240 WHEN 6 : vuopen%=NOTvuopen%:PROCtickmenu(open%,6) 6250 IF vuopen% PROCopenup(vumeter%,970,900,310,280) 6260 IF NOT vuopen% PROCshut(vumeter%) 6270 WHEN 7 : wopen%=NOTwopen%:PROCtickmenu(open%,7) 6280 IF wopen% PROCopenlinked(waveform%,wavepane%,1280,390,2112,256) 6290 IF NOT wopen% PROCshut(waveform%):PROCshut(wavepane%) 6300 WHEN 8 : cropen%=NOT cropen%:PROCtickmenu(open%,8) 6310 IF cropen% PROCopenup(cro%,700,500,150,200) 6320 IF NOT cropen% PROCshut(cro%) 6330 WHEN 9 : PROCmonitor 6340 ENDCASE 6350WHEN 3 : IF dos% THEN 6360 SYS "Tracker_Stop",,,,,lock% 6370 PROCputiconsprite(control%,1,"pause") 6380 PROCputiconsprite(control%,2,"stop1") 6390 PROCputiconsprite(control%,3,"play") 6400 PROCputicondata(control%,9,"0") 6410 PROCputicondata(control%,10,"0") 6420 PROCclear:playing%=FALSE 6430 ELSE 6440 SYS "Tracker_Pause",,,,,lock% 6450 SYS "Tracker_SetPos",0,,,,lock% 6460 PROCputiconsprite(control%,1,"pause") 6470 PROCputiconsprite(control%,2,"stop1") 6480 PROCputiconsprite(control%,3,"play") 6490 PROCputicondata(control%,9,"0") 6500 ENDIF 6510WHEN 4 : IF edited%=TRUE THEN 6520 IF FNok("File(s) edited but not saved. Really quit ?") THEN 6530 quit%=TRUE 6540 ELSE 6550 quit%=FALSE 6560 ENDIF 6570 ELSE 6580 IF edited%=FALSE THEN 6590 quit%=TRUE 6600 ENDIF 6610 ENDIF 6620ENDCASE 6630IF j% SYS "Wimp_CreateMenu",,menu%,pointer%!0,pointer%!4 6640ENDCASE 6650ENDPROC 6660 6670DEF PROCopenup(handle,x,y,w,h) 6680pointer%!0=handle 6690pointer%!4=x:pointer%!8=y-h 6700pointer%!12=x+w:pointer%!16=y 6710pointer%!20=0:pointer%!24=0 6720pointer%!28=-1 6730SYS "Wimp_OpenWindow",,pointer% 6740ENDPROC 6750 6760DEF PROCopenback(handle,x,y,w,h) 6770pointer%!0=handle 6780pointer%!4=x:pointer%!8=y-h 6790pointer%!12=x+w:pointer%!16=y 6800pointer%!20=0:pointer%!24=0 6810pointer%!28=-2 6820SYS "Wimp_OpenWindow",,pointer% 6830ENDPROC 6840 6850DEF PROCslabicon 6860SYS "Interface_SlabButton",,q%:REM Slab in... 6870q%!8=0 6880SYS "Interface_SlabButton",,q%:REM ...and out 6890ENDPROC 6900 6910DEF PROCshut(h%) 6920pointer%!0=h%:SYS "Wimp_CloseWindow",,pointer% 6930ENDPROC 6940 6950DEF PROCsendhelp 6960q%!12=q%!8:q%!16=&503:help%=q%+20 6970help%=FNhelp(q%!32,q%!36,q%!20,q%!24,help%):IF help%=0 ENDPROC 6980?help%=0:REM No, so send application help 6990!q%=(help%+4-q%)ANDNOT3:REM Setup help block 7000SYS "Wimp_SendMessage",17,q%,q%!4:REM and send it 7010ENDPROC 7020 7030DEF FNhelp(window%,icon%,x%,y%,to%) 7040$to%="" 7050CASE window% OF 7060 WHEN -2 : REM iconbar ? 7070 CASE icon% OF 7080 WHEN icon% : REM my icon ? 7090 $to%="This is the PlayTrack icon.|MDrag Tracker tunes to it to play them." 7100 ENDCASE 7110 WHEN infowind% : REM info window ? 7120 CASE icon% OF 7130 WHEN -1,0,1,2,3,4,5,6,7,8 : REM not over 'Click here...' icon ? 7140 $to%="This is the Info window.|MIt provides information on PlayTrack." 7150 OTHERWISE : SYS "Interface_SendHelp",,q%:=0:REM Send Interface help 7160 ENDCASE 7170 WHEN saveas% : REM 'Save as:' window ? 7180 CASE icon% OF 7190 WHEN -1 : REM over work area ? 7200 $to%="This is the 'Save' window.|MIt is used to save a file." 7210 OTHERWISE : SYS "Interface_SendHelp",,q%:=0:REM Send Interface help 7220 ENDCASE 7230ENDCASE 7240=to%+LEN($to%) 7250 7260DEF FNgeticondata(window%,icon%) 7270pointer%!0=window% 7280pointer%!4=icon% 7290SYS "Wimp_GetIconState",,pointer% 7300=$(pointer%!28) 7310 7320DEF PROCputicondata(window%,icon%,t$) 7330pointer%!0=window%:pointer%!4=icon% 7340SYS "Wimp_GetIconState",,pointer% 7350$(pointer%!28)=t$ 7360pointer%!12=0:pointer%!8=0 7370SYS "Wimp_SetIconState",,pointer% 7380ENDPROC 7390 7400DEF PROCputiconsprite(window%,icon%,t$) 7410pointer%!0=window%:pointer%!4=icon% 7420SYS "Wimp_GetIconState",,pointer% 7430SYS "Wimp_DeleteIcon",,pointer% 7440pointer%!4=window%:$(pointer%+28)=t$ 7450pointer%+=4:SYS "Wimp_CreateIcon",,pointer% 7460SYS "Wimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16 7470pointer%-=4 7480ENDPROC 7490 7500DEF PROCtellemoff(e$) 7510er%=pointer% 7520!er%=0 7530$(er%+4)=e$+CHR$0 7540SYS "Wimp_ReportError",er%,1,"PlayTrack" 7550ENDPROC 7560 7570DEF FNrtoz(T%):LOCAL q$:WHILE ?T%<>0:q$+=CHR$?T%:T%+=1:ENDWHILE:=q$ 7580 7590DEF PROCpq 7600IF edited% THEN 7610IF NOT FNok("File(s) edited but not saved. Really quit ?"):PROCno_quit 7620ENDIF 7630ENDPROC 7640 7650DEF FNok(e$) 7660er%=pointer% 7670!er%=0 7680$(er%+4)=e$+CHR$0 7690SYS "Wimp_ReportError",er%,&17,"Message from !PlayTrack" TO ,b% 7700=(b%=1) 7710 7720DEF PROCno_quit 7730q%!12=q%!8:q%!16=8:SYS "Wimp_SendMessage",17,q%,q%!4:ENDPROC 7740 7750DEF PROCdragend 7760d%=pointer% 7770SYS "Wimp_GetPointerInfo",,d% 7780d%!32=d%!4 :tt%=d%!32 7790d%!28=!d% :te%=d%!28 7800d%!24=d%!16 :tf%=d%!24 7810d%!20=d%!12 :tw%=d%!20 7820d%!16=1 :d%!12=0 :d%!36=0 7830d%!40=0 :!d%=64 :$(d%+44)=f$ 7840SYS "Wimp_SendMessage",17,d%,d%!20,d%!24 7850mr%=d%!8 7860ENDPROC 7870 7880DEF FNlastbit(s$) 7890WHILE INSTR(s$,":")>0 7900s$=MID$(s$,INSTR(s$,":")+1) 7910ENDWHILE 7920WHILE INSTR(s$,".")>0 7930s$=MID$(s$,INSTR(s$,".")+1) 7940ENDWHILE 7950=s$ 7960 7970DEF PROCds 7980PROCputicondata(saveas%,0,FNrtoz(q%+44)) 7990f$=FNrtoz(q%+44) 8000PROCsd(&FFA) 8010ENDPROC 8020 8030DEF PROCdragbox(w%,i%) 8040d%=pointer% 8050!d%=w% 8060SYS "Wimp_GetWindowState",,d% 8070ys%=d%!16-d%!8:x%=d%!4:y%=d%!8 8080d%!4=i% 8090SYS "Wimp_GetIconState",,d% 8100f$=FNlastbit(f$) 8110d%!8+=x% 8120d%!12+=y%+ys% 8130d%!16+=x% 8140d%!20+=y%+ys% 8150d%!24=0 8160d%!28=0 8170SYS "OS_ReadModeVariable",MODE,4 TO ,,h%:h%=FNextracth(h%) 8180SYS "OS_ReadModeVariable",MODE,5 TO ,,v%:v%=FNextractv(v%) 8190d%!32=(h%*2) 8200d%!36=(v%*4) 8210!d%=0 8220d%!4=5 8230SYS "Wimp_DragBox",,d% 8240ENDPROC 8250 8260DEF PROCquicksave 8270IF INSTR(f$,":")<1 AND INSTR(f$,".")<1 THEN 8280PROCtellemoff("To save, drag icon to a directory viewer") 8290ELSE 8300PROCsd(&FFA) 8310ENDIF 8320ENDPROC 8330 8340DEF PROCsd(t%) 8350PROCsave_rm(f$) 8360d%=pointer% 8370!d%=64 8380d%!20=tw% 8390d%!24=tf% 8400d%!28=te% 8410d%!32=tt% 8420d%!12=yr% 8430d%!16=3 8440d%!36=0 8450d%!40=t% 8460$(d%+44)=f$ 8470SYS "Wimp_SendMessage",17,d%,d%!20 8480SYS "OS_File",18,f$,t% 8490SYS "Wimp_CreateMenu",,-1 8500ENDPROC 8510 8520DEF FNextracth(a%) 8530CASE a% OF 8540 WHEN 0 : =1280 8550 WHEN 1 : =640 8560 WHEN 2 : =320 8570 WHEN 3 : =160 8580ENDCASE 8590 8600DEF FNextractv(a%) 8610CASE a% OF 8620 WHEN 1 : =512 8630 WHEN 2 : =256 8640ENDCASE 8650 8660DEF PROCtoggleopts(flag,w%,i%):win%=w%:icn%=i% 8670PROCputiconsprite(w%,i%,"selclick") 8680CASE flag OF 8690 WHEN TRUE : newicn%=TRUE:type=flag 8700 WHEN FALSE : newicn%=TRUE:type=flag 8710ENDCASE 8720ENDPROC 8730 8740DEF PROCtoggleradio(flag,w%,i%,i2%) 8750CASE flag OF 8760 WHEN TRUE : PROCputiconsprite(w%,i%,"radon") 8770 PROCputiconsprite(w%,i2%,"radoff") 8780 WHEN FALSE : PROCputiconsprite(w%,i%,"radoff") 8790 PROCputiconsprite(w%,i2%,"radon") 8800ENDCASE 8810ENDPROC 8820 8830DEF PROChackflags(w%,i%,eor%,or%) 8840pointer%!0=w%:pointer%!4=i% 8850pointer%!8=eor%:pointer%!12=or% 8860SYS "Wimp_SetIconState",,pointer% 8870ENDPROC 8880 8890DEF PROCenable(w%,i%) 8900PROChackflags(w%,i%,0,&400000) 8910ENDPROC 8920 8930DEF PROCdisable(w%,i%) 8940PROChackflags(w%,i%,&400000,&400000) 8950ENDPROC 8960 8970DEF PROCselect(w%,i%) 8980PROChackflags(w%,i%,&200000,&200000) 8990ENDPROC 9000 9010DEF PROCdeselect(w%,i%) 9020PROChackflags(w%,i%,0,&200000) 9030ENDPROC 9040 9050DEF PROCtoedit(file$) 9060!pointer%=(48+LENfile$)ANDNOT3 9070pointer%!12=0 9080pointer%!16=5 9090pointer%!36=-2 9100pointer%!40=&FFF 9110$(pointer%+44)=file$+CHR$0 9120SYS "Wimp_SendMessage",18,pointer%,0 9130ENDPROC 9140 9150DEF PROCtocursor(text$) 9160FOR key%=1 TO LEN(text$) 9170SYS "Wimp_ProcessKey",ASC(MID$(text$,key%,1)) 9180SYS "Wimp_Poll",,q% TO reason% 9190SYS "Interface_PreProcessKey",reason%,q%,taskh% 9200SYS "Interface_Poll",reason%,,taskh% 9210CASE reason% OF 9220 WHEN 1 : PROCredraw 9230 WHEN 2 : SYS "Wimp_OpenWindow",,q% 9240 WHEN 3 : SYS "Wimp_CloseWindow",,q% 9250 WHEN 6 : PROCcheckmouse 9260 WHEN 7 : f$=FNlastbit(f$):PROCdragend 9270 WHEN 9 : PROCprocess_menu 9280 WHEN 17,18 : PROCmessage 9290ENDCASE 9300NEXT 9310ENDPROC 9320 9330DEF PROCtickmenu(b%,n%) 9340b%!(28+24*n%)=b%!(28+24*n%) EOR &01 9350ENDPROC 9360 9370DEF PROCgreymenu(b%,n%) 9380b%!((28+24*n%)+8)=b%!((28+24*n%)+8) EOR &400000 9390ENDPROC 9400 9410DEF PROCwindow_centre(handle%,w%,h%) 9420x%=((1280-w%)/2) 9430y%=(((1024-h%)/2)+h%) 9440PROCopenup(handle%,x%,y%,w%,h%) 9450ENDPROC 9460 9470DEF PROCforce_redraw 9480SYS "Wimp_ForceRedraw",fontselect%,0,0-400,700,0 9490ENDPROC 9500 9510DEF PROCtracker_loadit(f$):tune$=f$ 9520SYS "Tracker_Stop",,,,,lock%:REM Release so next call won't corrupt 9530IF workspc%>0 SYS "OS_Heap",3,buff%,workspc% 9540h%=OPENUP(f$):len%=EXT#h%:CLOSE#h% 9550SYS "OS_Heap",2,buff%,,len% TO ,,workspc%;flags% 9560IF (flags% AND 1)=1 PROCtellemoff("Buffer size is inadequate: Please extend"):ENDPROC 9570SYS "OS_File",&FF,f$,workspc% 9580SYS "Tracker_MemoryLoad",workspc%,len%,,,lock% 9590SYS "Sound_Speaker",1:speaker=FALSE 9600IF lap% SYS "Tracker_Play",,,,,lock% 9610IF registered% PROCopenup(control%,0,1024,625,325) 9620PROCputiconsprite(control%,0,"rev") 9630PROCputiconsprite(control%,1,"pause") 9640IF lap% PROCputiconsprite(control%,2,"stop") ELSE PROCputiconsprite(control%,2,"stop1") 9650IF lap% PROCputiconsprite(control%,3,"play1") ELSE PROCputiconsprite(control%,3,"play") 9660PROCputiconsprite(control%,4,"fwd") 9670SYS "Tracker_ReadPos",,,,,lock% TO current,,max 9680PROCputicondata(control%,10,STR$max) 9690IF registered% PROCopenup(tuneinfo%,580,530,700,430) 9700PROCputicondata(tuneinfo%,1,f$) 9710h%=OPENUP(f$):len%=EXT#h%:CLOSE#h% 9720PROCputicondata(tuneinfo%,3,STR$len%+" bytes -- "+STR$(FNint((len%/1024)+0.4))+"K"):lenbytes%=len% 9730SYS "Tracker_TuneInfo",,,,,lock% TO len1%,voices%,speed%,name$,a% 9740IF a%>0 author$=FNrtoz(a%) ELSE author$="" 9750name$=FNstrip(name$) 9760PROCputicondata(tuneinfo%,5,STR$voices%) 9770PROCputicondata(tuneinfo%,7,STR$speed%) 9780PROCputicondata(tuneinfo%,9,STR$len1%) 9790PROCputicondata(tuneinfo%,11,name$) 9800PROCputicondata(tuneinfo%,13,author$) 9810PROCputicondata(tuneinfo%,15,FNfmat(f$)) 9820PROCputicondata(control%,14,name$) 9830SYS "OS_File",5,f$ TO ,,load%:type%=(load%>>>8)AND&FFF:CASE type% OF 9840WHEN &001 : PROCputicondata(tuneinfo%,17,"STracker") 9850WHEN &CB6 : PROCputicondata(tuneinfo%,17,"STModule") 9860WHEN &CC5 : PROCputicondata(tuneinfo%,17,"TeqMusic") 9870WHEN &701 : PROCputicondata(tuneinfo%,17,"ProTrack") 9880ENDCASE 9890IF afs% SYS "OS_File",18,f$,&CB6 9900PROCsamples_draw 9910PROCredo_buff(lenbytes%) 9920IF copen%=FALSE copen%=TRUE:PROCtickmenu(open%,0) 9930IF topen%=FALSE topen%=TRUE:PROCtickmenu(open%,1) 9940playing%=TRUE 9950ENDPROC 9960 9970DEF PROCredo_buff(len%) 9980IF buffersize%>0 THEN 9990 PROCputicondata(buffer%,10,STR$len%+" bytes -- "+STR$(FNint(len%/1024))+"K") 10000 SYS "OS_Heap",1,buff% TO ,,,free% 10010 PROCputicondata(buffer%,11,STR$(free%)+" bytes -- "+STR$(FNint(free%/1024))+"K") 10020ELSE 10030 PROCputicondata(buffer%,10,"No buffer defined") 10040 PROCputicondata(buffer%,11,"No buffer defined") 10050ENDIF 10060ENDPROC 10070 10080DEF PROCclear 10090PROCputicondata(tuneinfo%,1,"No Tune Loaded") 10100PROCputicondata(tuneinfo%,3,"No Tune Loaded") 10110PROCputicondata(tuneinfo%,5,"0") 10120PROCputicondata(tuneinfo%,7,"0") 10130PROCputicondata(tuneinfo%,9,"0") 10140PROCputicondata(tuneinfo%,11,"No Tune Loaded") 10150PROCputicondata(tuneinfo%,13,"No Tune Loaded") 10160PROCputicondata(tuneinfo%,15,"0") 10170PROCputicondata(tuneinfo%,17,"No Tune Loaded") 10180PROCputicondata(control%,14,"") 10190ENDPROC 10200 10210DEF FNstrip(text$) 10220WHILE ASC(RIGHT$(text$,1))<33:text$=LEFT$(text$,(LENtext$)-1):ENDWHILE 10230WHILE ASC(LEFT$(text$,1))<33:text$=RIGHT$(text$,(LENtext$)-1):ENDWHILE 10240=text$ 10250 10260DEF FNfmat(f$) 10270CASE mak% OF 10280WHEN TRUE : =FNmandk(f$) 10290WHEN FALSE: =FNxbyte(f$) 10300ENDCASE 10310 10320DEF FNxbyte(f$) 10330h%=OPENUP(f$) 10340PTR#h%=471 10350a=BGET#h% 10360CLOSE#h% 10370IF a=&78 ="15" ELSE ="31" 10380 10390DEF FNmandk(f$) 10400h%=OPENUP(f$) 10410PTR#h%=1080 10420q$="":FOR I%=1 TO 4:q$+=CHR$(BGET#h%):NEXT 10430CLOSE#h% 10440IF q$="M.K." OR q$="FLT4" OR q$="FLT8" ="31" ELSE ="15" 10450REM Check for Startrekker as well as ProTracker ID 10460 10470DEF PROCstereo(ch,pos) 10480SYS "Sound_Stereo",ch,FNpos(pos) 10490ENDPROC 10500 10510DEF FNpos(pos) 10520CASE pos OF 10530 WHEN 1 : =-127 10540 WHEN 2 : =-79 10550 WHEN 3 : =-47 10560 WHEN 4 : =0 10570 WHEN 5 : =47 10580 WHEN 6 : =79 10590 WHEN 7 : =127 10600ENDCASE 10610 10620DEF FNcreate(ww,wh,tf,tb,sc,T$,wf,wb,flags) 10630pointer%!24=-1:pointer%!28=flags 10640pointer%?32=tf:pointer%?33=tb 10650pointer%?34=wf:pointer%?35=wb 10660pointer%?36=3:pointer%?37=1 10670pointer%?38=sc:pointer%?39=0 10680pointer%!40=0:pointer%!44=wh 10690pointer%!48=ww:pointer%!52=0 10700pointer%!56=&3D:pointer%!60=0 10710pointer%!64=0:pointer%!68=0 10720$(pointer%+72)=T$ 10730pointer%!84=0 10740SYS "Wimp_CreateWindow",,pointer% TO h% 10750=h% 10760 10770DEF PROCcreate_icon(handle,addr,minx,maxx,miny,ht,t$,flags,len) 10780pointer%!0=handle:pointer%!4=minx 10790pointer%!8=miny:pointer%!12=maxx 10800pointer%!16=miny+ht:pointer%!20=flags 10810IF addr=0 THEN 10820$(pointer%+24)=t$ 10830ELSE 10840pointer%!24=addr 10850IF t$="�" pointer%!28=valid% ELSE pointer%!28=-1 10860pointer%!32=len 10870ENDIF 10880SYS "Wimp_CreateIcon",,pointer% 10890ENDPROC 10900 10910DEF PROCsamps_wind 10920start%=samps% 10930volstart%=volume% 10940sampstart%=samplen% 10950samples%=FNcreate(700,-1200,7,2,12,"Samples",7,1,%111) 10960miny=-60 10970PROCcreate_icon(samples%,text%,10,80,miny,52,"�",&17000121,0) 10980PROCcreate_icon(samples%,text%+8,90,200,miny,52,"�",&17000121,0) 10990PROCcreate_icon(samples%,text%+16,500,590,miny,52,"�",&17000121,0) 11000PROCcreate_icon(samples%,text%+24,600,690,miny,52,"�",&17000121,0) 11010miny-=60 11020count%=1 11030FOR I=1 TO 31 11040$samps%="" 11050$volume%="" 11060$samplen%="" 11070PROCcreate_icon(samples%,0,10,80,miny,36,STR$I,&7000021,0) 11080PROCcreate_icon(samples%,samps%,90,490,miny,36,"",&7016121,32) 11090PROCcreate_icon(samples%,volume%,500,590,miny,36,"",&7000121,32) 11100PROCcreate_icon(samples%,samplen%,600,690,miny,36,"",&7000121,32) 11110miny-=36:samps%+=32:volume%+=4:samplen%+=6:count%+=1 11120NEXT 11130samps%=start% 11140volume%=volstart% 11150samplen%=sampstart% 11160ENDPROC 11170: 11180DEF PROCsamples_draw 11190sampsnum=0 11200start%=samps% 11210volstart%=volume% 11220sampstart%=samplen% 11230FOR I=1 TO 31 11240SYS "Tracker_ReadSampleTable",I,,,,lock% TO no%,a$,vol%,len% 11250PROCputicontext(samples%,(2*I)+3,samps%,a$) 11260IF vol%<>0 PROCputicontext(samples%,(2*I)+4,volume%,STR$vol%) ELSE PROCputicontext(samples%,(2*I)+4,volume%,"") 11270IF len%<>0 PROCputicontext(samples%,(2*I)+5,samplen%,STR$len%) ELSE PROCputicontext(samples%,(2*I)+5,samplen%,""):sampsnum+=1 11280samps%+=32:volume%+=4:samplen%+=6 11290NEXT 11300samps%=start% 11310volume%=volstart% 11320samplen%=sampstart% 11330ENDPROC 11340 11350DEF PROCputicontext(window%,icon%,buffer%,text$) 11360$buffer%=text$ 11370pointer%!0=window%:pointer%!4=icon% 11380pointer%!8=0:pointer%!12=0 11390SYS "Wimp_SetIconState",,pointer% 11400ENDPROC 11410 11420DEF PROCkp 11430SYS "Wimp_ProcessKey",q%!24 11440CASE q%!0 OF 11450 WHEN buffer% 11460 CASE q%!4 OF 11470 WHEN 3 11480 CASE q%!24 OF 11490 WHEN 13 : q%!8=4:q%!12=buffer%:q%!16=5:PROCslabicon 11500 PROCbuffer(VAL(FNgeticondata(buffer%,3))) 11510 ENDCASE 11520 ENDCASE 11530 WHEN waveform% 11540 CASE q%!4 OF 11550 WHEN 1 11560 CASE q%!24 OF 11570 WHEN 13 : show%=TRUE:SYS "Wimp_ForceRedraw",wavepane%,0,-256,2112,0 11580 ENDCASE 11590 ENDCASE 11600ENDCASE 11610CASE q%!24 OF 11620 WHEN 385 : speaker=NOTspeaker:PROCtoggleopts(speaker,control%,12) 11630 IF speaker SYS "Sound_Speaker",2 ELSE SYS "Sound_Speaker",1 11640 WHEN 386 : mute%=NOTmute%:PROCtoggleopts(mute%,control%,15) 11650 IF mute% SYS "Sound_Enable",1 ELSE SYS "Sound_Enable",2 11660 WHEN 387 : IF register% THEN 11670 SYS "Wimp_GetPointerInfo",,pointer% 11680 SYS "Wimp_CreateMenu",,saveas%,pointer%!0-64,pointer%!4+64 11690 ENDIF 11700 WHEN 388 : PROCputiconsprite(control%,0,"rev1"):sicn%=0:nscn%=TRUE 11710 SYS "Tracker_ReadPos",,,,,lock% TO c,,m:c-=1:IF c<0 c=m 11720 SYS "Tracker_SetPos",c,,,,lock% 11730 WHEN 389 : SYS "Tracker_Pause",,,,,lock% 11740 PROCputiconsprite(control%,1,"pause1") 11750 PROCputiconsprite(control%,2,"stop") 11760 PROCputiconsprite(control%,3,"play") 11770 WHEN 390 : IF dos% THEN 11780 SYS "Tracker_Stop",,,,,lock% 11790 PROCputiconsprite(control%,1,"pause") 11800 PROCputiconsprite(control%,2,"stop1") 11810 PROCputiconsprite(control%,3,"play") 11820 PROCputicondata(control%,9,"0") 11830 PROCputicondata(control%,10,"0") 11840 PROCclear:playing%=FALSE 11850 ELSE 11860 SYS "Tracker_Pause",,,,,lock% 11870 SYS "Tracker_SetPos",0,,,,lock% 11880 PROCputiconsprite(control%,1,"pause") 11890 PROCputiconsprite(control%,2,"stop1") 11900 PROCputiconsprite(control%,3,"play") 11910 ENDIF 11920 WHEN 391 : SYS "Tracker_Play",,,,,lock% 11930 PROCputiconsprite(control%,1,"pause") 11940 PROCputiconsprite(control%,2,"stop") 11950 PROCputiconsprite(control%,3,"play1") 11960 WHEN 392 : PROCputiconsprite(control%,4,"fwd1"):sicn%=4:nscn%=TRUE 11970 SYS "Tracker_ReadPos",,,,,lock% TO c,,m:c+=1:IF c>m c=0 11980 SYS "Tracker_SetPos",c,,,,lock% 11990 WHEN 401 : IF registered% THEN 12000 copen%=NOTcopen%:PROCtickmenu(open%,0) 12010 IF copen% PROCopenup(control%,0,1024,625,325) 12020 IF NOT copen% PROCshut(control%) 12030 ENDIF 12040 WHEN 402 : IF registered% THEN 12050 topen%=NOTtopen%:PROCtickmenu(open%,1) 12060 IF topen% PROCopenup(tuneinfo%,580,530,700,430) 12070 IF NOT topen% PROCshut(tuneinfo%) 12080 ENDIF 12090 WHEN 403 : IF registered% THEN 12100 sopen%=NOTsopen%:PROCtickmenu(open%,2) 12110 IF sopen% PROCwindow_centre(stereo%,1110,250) 12120 IF NOT sopen% PROCshut(stereo%) 12130 ENDIF 12140 WHEN 404 : IF registered% THEN 12150 vopen%=NOTvopen%:PROCtickmenu(open%,3) 12160 IF vopen% PROCopenback(samples%,0,1000,700,850) 12170 IF NOT vopen% PROCshut(samples%) 12180 ENDIF 12190 WHEN 405 : IF registered% THEN 12200 bopen%=NOTbopen%:PROCtickmenu(open%,4) 12210 IF bopen% PROCwindow_centre(buffer%,700,475) 12220 IF NOT bopen% PROCshut(buffer%) 12230 ENDIF 12240 WHEN 406 : IF registered% THEN 12250 oopen%=NOToopen%:PROCtickmenu(open%,5) 12260 IF oopen% PROCwindow_centre(options%,768,367) 12270 IF NOT oopen% PROCshut(options%) 12280 ENDIF 12290 WHEN 407 : IF registered% THEN 12300 vuopen%=NOTvuopen%:PROCtickmenu(open%,6) 12310 IF vuopen% PROCopenup(vumeter%,970,900,310,280) 12320 IF NOT vuopen% PROCshut(vumeter%) 12330 ENDIF 12340 WHEN 408 : IF registered% THEN 12350 wopen%=NOTwopen%:PROCtickmenu(open%,7) 12360 IF wopen% PROCopenlinked(waveform%,wavepane%,1280,390,2112,256) 12370 IF NOT wopen% PROCshut(waveform%):PROCshut(wavepane%) 12380 ENDIF 12390 WHEN 409 : IF registered% THEN 12400 cropen%=NOTcropen%:PROCtickmenu(open%,8) 12410 IF cropen% PROCopenup(cro%,700,500,150,200) 12420 IF NOT cropen% PROCshut(cro%) 12430 ENDIF 12440 WHEN 474 : IF registered% THEN 12450 PROCmonitor 12460 ENDIF 12470 WHEN 393 : cvol%-=5:IF cvol%<0 cvol%=0 12480 x%=FNint(cvol%/volunit) 12490 pointer%!0=control%:pointer%!4=18 12500 SYS "Wimp_GetIconState",,pointer% 12510 SYS "Wimp_DeleteIcon",,pointer% 12520 pointer%!16=pointer%!8+x% 12530 pointer%!4=control%:SYS "Wimp_CreateIcon",,pointer%+4 12540 pointer%!4=19:SYS "Wimp_GetIconState",,pointer% 12550 SYS "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 12560 WHEN 458 : cvol%+=5:IF cvol%>255 cvol%=255 12570 x%=FNint(cvol%/volunit) 12580 pointer%!0=control%:pointer%!4=18 12590 SYS "Wimp_GetIconState",,pointer% 12600 SYS "Wimp_DeleteIcon",,pointer% 12610 pointer%!16=pointer%!8+x% 12620 pointer%!4=control%:SYS "Wimp_CreateIcon",,pointer%+4 12630 pointer%!4=19:SYS "Wimp_GetIconState",,pointer% 12640 SYS "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 12650 WHEN 459 : cvol%=255 12660 x%=FNint(cvol%/volunit) 12670 pointer%!0=control%:pointer%!4=18 12680 SYS "Wimp_GetIconState",,pointer% 12690 SYS "Wimp_DeleteIcon",,pointer% 12700 pointer%!16=pointer%!8+x% 12710 pointer%!4=control%:SYS "Wimp_CreateIcon",,pointer%+4 12720 pointer%!4=19:SYS "Wimp_GetIconState",,pointer% 12730 SYS "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 12740 SYS "Tracker_SetPos",0,,,,lock% 12750 SYS "Tracker_Play",,,,,lock% 12760 PROCputiconsprite(control%,1,"pause") 12770 PROCputiconsprite(control%,2,"stop") 12780 PROCputiconsprite(control%,3,"play1") 12790 SYS "Sound_Speaker",1:SYS "Sound_Enable",2 12800 speaker=FALSE:mute%=FALSE 12810 PROCputiconsprite(control%,12,"seloff") 12820 PROCputiconsprite(control%,15,"seloff") 12830 WHEN 474 : IF registered% THEN 12840 pointer%!0=1:pointer%!4=9 12850 SYS "Wimp_SendMessage",9,pointer%,taskh% 12860 ENDIF 12870ENDCASE 12880ENDPROC 12890 12900DEF PROCbuffer(size%) 12910IF playing% PROCtellemoff("Can't alter buffer while playing"):ENDPROC 12920IF buff%>0 THEN PROCrelease_rma(buff%) 12930OSCLI("RMAFree "+STR$(size%)+" Error 0 Insufficent RMA") 12940buffersize%=(size%*1024) AND NOT 3 12950buff%=FNclaim_rma(buffersize%) 12960SYS "OS_Heap",0,buff%,,buffersize% 12970PROCredo_buff(lenbytes%) 12980ENDPROC 12990 13000DEF PROChold_it(window%) 13010LOCAL finish% 13020CASE window% OF 13030WHEN odd% : PROCwindow_centre(odd%,750,300) 13040WHEN help%: PROCwindow_centre(help%,800,400) 13050ENDCASE 13060pointer%!0=window%:SYS "Wimp_GetWindowOutline",,pointer% 13070xmin%=pointer%!4:ymin%=pointer%!8:xsize%=pointer%!12-pointer%!4 13080ysize%=pointer%!16-pointer%!8:MOUSE RECTANGLE xmin%,ymin%,xsize%,ysize% 13090finish%=FALSE 13100REPEAT 13110SYS "Wimp_Poll",,pointer% TO r% 13120CASE r% OF 13130WHEN 1 : PROCredraw2 13140WHEN 2 : SYS "Wimp_OpenWindow",,pointer% 13150WHEN 3 : SYS "Wimp_CloseWindow",,pointer% 13160WHEN 6 : PROCcheckmouse2 13170WHEN 17,18 : IF pointer%!16=0 SYS "Interface_CloseDown",taskh%:SYS "Sound_Speaker",oldspeak%:SYS "Sound_Enable",oldmute%:SYS "Tracker_Unlock",lock%:PROCtidy:SYS "Wimp_CloseDown":END 13180 IF pointer%!16=&400C1 MOUSE RECTANGLE xmin%,ymin%,xsize%,ysize% 13190ENDCASE 13200UNTIL finish% 13210PROCshut(window%) 13220SYS "OS_ReadModeVariable",-1,4 TO ,,Eig% 13230SYS "OS_ReadModeVariable",-1,11 TO ,,Extent% 13240xsize%=(Extent%+1)<<Eig% 13250SYS "OS_ReadModeVariable",-1,5 TO ,,Eig% 13260SYS "OS_ReadModeVariable",-1,12 TO ,,Extent% 13270ysize%=(Extent%+1)<<Eig% 13280MOUSE RECTANGLE 0,0,xsize%,ysize% 13290ENDPROC 13300 13310DEF PROCcheckmouse2 13320CASE pointer%!12 OF 13330WHEN odd% 13340CASE pointer%!8 OF 13350WHEN 4 : CASE pointer%!16 OF 13360WHEN 6 : PROCslabicon2:PROCtracker_loadit(f$):finish%=TRUE 13370WHEN 7 : PROCslabicon2:finish%=TRUE 13380WHEN 8 : PROCslabicon2:PROCsetup_help:PROChold_it(help%):finish%=TRUE 13390ENDCASE 13400ENDCASE 13410WHEN help% 13420CASE pointer%!8 OF 13430WHEN 4 : CASE pointer%!16 OF 13440WHEN 9 : PROCslabicon2:finish%=TRUE 13450ENDCASE 13460ENDCASE 13470ENDCASE 13480ENDPROC 13490 13500DEF PROCsetup_help 13510PROCclear_help 13520PROCputicondata(help%,3,"PlayTrack can only handle") 13530PROCputicondata(help%,4,"certain types of file.") 13540PROCputicondata(help%,5,"However, it may be able to") 13550PROCputicondata(help%,6,"load music files in formats") 13560PROCputicondata(help%,7,"it doesn't 'know' about,") 13570PROCputicondata(help%,8,"so you can still hear them.") 13580ENDPROC 13590 13600DEF PROCsetup_mess1 13610PROCclear_help 13620PROCputicondata(help%,3,"This is an unregistered") 13630PROCputicondata(help%,4,"copy of !PlayTrack, that is") 13640PROCputicondata(help%,5,"restricted in what it can do.") 13650PROCputicondata(help%,6,"If you want to use the more") 13660PROCputicondata(help%,7,"advanced facilities, then") 13670PROCputicondata(help%,8,"you can register.") 13680ENDPROC 13690 13700DEF PROCsetup_mess2 13710PROCclear_help 13720PROCputicondata(help%,3,"This copy of !PlayTrack is") 13730PROCputicondata(help%,4,"now registered to this") 13740PROCputicondata(help%,5,"machine. Please quit") 13750PROCputicondata(help%,6,"!PlayTrack and reload to") 13760PROCputicondata(help%,7,"use the more advanced") 13770PROCputicondata(help%,8,"facilities.") 13780ENDPROC 13790 13800DEF PROCsetup_mess3 13810PROCclear_help 13820PROCputicondata(help%,3,"Only PIN numbers up to") 13830PROCputicondata(help%,4,"#65280 are allowed.") 13840PROCputicondata(help%,6,"Please re-enter your") 13850PROCputicondata(help%,7,"PIN number.") 13860ENDPROC 13870 13880DEF PROCsetup_mess4 13890PROCclear_help 13900PROCputicondata(help%,3,"This copy of !PlayTrack is") 13910PROCputicondata(help%,4,"not registered to this") 13920PROCputicondata(help%,5,"machine.") 13930PROCputicondata(help%,7,"!PlayTrack will now run, but") 13940PROCputicondata(help%,8,"will not work fully.") 13950ENDPROC 13960 13970DEF PROCclear_help:FOR I%=3 TO 8:PROCputicondata(help%,I%,""):NEXT:ENDPROC 13980 13990DEF PROCredraw2 14000SYS "Wimp_RedrawWindow",,pointer% TO more% 14010WHILE more%<>0 14020SYS "Interface_Render3dWindow",,pointer% 14030SYS "Wimp_GetRectangle",,pointer% TO more% 14040ENDPROC 14050 14060DEF PROCslabicon2 14070SYS "Interface_SlabButton",,pointer% 14080pointer%!8=0 14090SYS "Interface_SlabButton",,pointer% 14100ENDPROC 14110 14120DEF PROCregister(string$) 14130PROCputicondata(infowind%,15,"Registered to: "+string$) 14140ENDPROC 14150 14160DEF PROCget_register 14170h%=OPENUP("<PlayTrack$Dir>.Register") 14180l%=EXT#h%:CLOSE#h% 14190block%=FNclaim_rma(l%) 14200SYS "OS_File",255,"<PlayTrack$Dir>.Register",block% 14210FOR I%=0 TO l%:block%?I%=block%?I% EOR ASC(LEFT$(STR$(I%),1)):NEXT 14220pirate%=FALSE:pin%=!block%:name$=FNrtoz(block%+4) 14230IF pin%=65281 OR pin%=65282 THEN 14240 IF pin%=65281 THEN 14250 PROCregister(name$):registered%=FALSE:PROCbeep 14260 ELSE 14270 PROCregister(name$):registered%=TRUE 14280 ENDIF 14290ELSE 14300 SYS "OS_Byte",161,cmos% TO ,,reg%:SYS "OS_Byte",161,cmos2% TO ,,reg2% 14310 reg%=(256*reg%)+reg2% 14320 IF reg%<>pin% THEN PROCsetup_mess4:PROChold_it(help%):registered%=FALSE:pirate%=TRUE:PROCregister("PIRATE COPY"):PROCrelease_rma(block%):ENDPROC 14330 PROCregister(name$):registered%=TRUE 14340ENDIF 14350PROCrelease_rma(block%) 14360ENDPROC 14370 14380DEF PROCbeep 14390FOR I=1 TO 7:VDU7:TIME=0:REPEAT UNTIL TIME=50:NEXT:ENDPROC 14400 14410DEF FNclaim_rma(size%) 14420SYS "XOS_Module",6,,,size% TO ,,addr%;flags% 14430IF (flags% AND 1)=1 THEN 14440 PROCtellemoff("Error during RMA claim") 14450 =0 14460ENDIF 14470=addr% 14480 14490DEF PROCrelease_rma(addr%) 14500SYS "OS_Module",7,,addr% 14510ENDPROC 14520 14530DEF PROCregister_copy 14540name$=FNgeticondata(register%,4) 14550pin%=VAL(FNgeticondata(register%,10)) 14560IF pin%>65280 THEN PROCsetup_mess3:PROChold_it(help%):PROCputicondata(register%,10,""):ENDPROC 14570len%=4+LENname$+1 14580addr%=FNclaim_rma(len%) 14590!addr%=pin%:block%=addr%+4:name$+=CHR$0:FOR I%=1 TO LENname$:?block%=ASC(MID$(name$,I%,1)):block%+=1:NEXT 14600FOR I%=0 TO len%:addr%?I%=addr%?I% EOR ASC(LEFT$(STR$I%,1)):NEXT 14610SYS "OS_File",10,"<PlayTrack$Dir>.Register",&FFD,,addr%,addr%+len% 14620SYS "OS_Byte",162,cmos%,pin% DIV 256 14630SYS "OS_Byte",162,cmos2%,pin% MOD 256 14640PROCsetup_mess2:PROChold_it(help%) 14650ENDPROC 14660 14670DEF PROCsave_opts 14680h%=OPENOUT("<PlayTrack$Dir>.Options") 14690clock$=FNgeticondata(options%,13) 14700buffer$=FNgeticondata(buffer%,3) 14710PRINT#h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$ 14720CLOSE#h% 14730ENDPROC 14740 14750DEF PROCload_opts 14760h%=OPENUP("<PlayTrack$Dir>.Options") 14770INPUT#h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$ 14780CLOSE#h% 14790lap$="":IF lap% lap$="selon" ELSE lap$="seloff" 14800scr$="":IF scr% scr$="selon" ELSE scr$="seloff" 14810dos$="":IF dos% dos$="selon" ELSE dos$="seloff" 14820afs$="":IF afs% afs$="selon" ELSE afs$="seloff" 14830mak$="":IF mak% mak$="selon" ELSE mak$="seloff" 14840PROCputiconsprite(options%,2,lap$) 14850PROCputiconsprite(options%,4,scr$) 14860PROCputiconsprite(options%,6,dos$) 14870PROCputiconsprite(options%,8,afs$) 14880PROCputiconsprite(options%,11,mak$) 14890PROCputicondata(options%,13,clock$) 14900PROCputicondata(buffer%,3,buffer$) 14910ENDPROC 14920 14930DEF PROCopenlinked(wh1%,wh2%,w1%,h1%,w2%,h2%) 14940x%=(1280-w1%)/2 14950y%=((1024-h1%)/2)+h1% 14960PROCopenup(wh1%,x%,y%,w1%,h1%) 14970PROCopenup(wh2%,x%+20,y%-80,w1%-40,h2%) 14980ENDPROC 14990 15000DEF PROCvolume 15010SYS "Wimp_GetPointerInfo",,pointer%:x%=pointer%!0 15020pointer%!0=control%:SYS "Wimp_GetWindowState",,pointer% 15030x%-=pointer%!4:pointer%!4=19:SYS "Wimp_GetIconState",,pointer% 15040x%-=pointer%!8:REM x% now is distance along icon #19 15050pointer%!0=control%:pointer%!4=18 15060SYS "Wimp_GetIconState",,pointer% 15070SYS "Wimp_DeleteIcon",,pointer% 15080pointer%!4=control%:pointer%!16=pointer%!8+x% 15090SYS "Wimp_CreateIcon",,pointer%+4 15100pointer%!0=control%:pointer%!4=19:SYS "Wimp_GetIconState",,pointer% 15110SYS "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 15120cvol%=FNint(x%*volunit):IF cvol%>255 cvol%=255 15130ENDPROC 15140 15150DEF FNint(int) 15160int+=0.5 15170=INT(int) 15180 15190DEF PROCvolfill 15200IF cvol%>10 THEN 15210 sc=cvol%/255 15220 sccb%!20=FNvol(sccb%!20,sc):sccb%!(32+20)=FNvol(sccb%!(32+20),sc) 15230 sccb%!(64+20)=FNvol(sccb%!(64+20),sc) 15240 sccb%!(96+20)=FNvol(sccb%!(96+20),sc) 15250 sccb%!(128+20)=FNvol(sccb%!(128+20),sc) 15260 sccb%!(160+20)=FNvol(sccb%!(160+20),sc) 15270 sccb%!(192+20)=FNvol(sccb%!(192+20),sc) 15280 sccb%!(224+20)=FNvol(sccb%!(224+20),sc) 15290ELSE 15300 FOR I%=0 TO 224 STEP 32:sccb%!(I%+20)=255:NEXT 15310ENDIF 15320ENDPROC 15330 15340DEF FNvol(vol%,scl) 15350vol1=255-vol%:vol1=vol1*scl:=FNint(255-vol1) 15360 15370DEF PROCplaynote 15380samp%=VAL(FNgeticondata(waveform%,1)):IF samp%=0 ENDPROC 15390SYS "Tracker_ReadSampleTable",samp%,,,,lock% TO ,,len%:IF len%=0 ENDPROC 15400SYS "Tracker_PlayNote",1,15,samp%,200,lock% 15410ENDPROC 15420 15430DEF PROCsave_rm(f$) 15440IF workspc%=0 PROCtellemoff("You have to have a Tracker tune loaded first!"):ENDPROC 15450base%=FNclaim_rma(lenbytes%+1000) 15460IF base%=0 PROCtellemoff("Cannot save Tracker tune as Relocatable Module"):ENDPROC 15470FOR pass%=12 TO 15 STEP 2 15480P%=0:O%=base%:L%=base%+lenbytes%+1500 15490[OPT pass% 15500EQUD 0 15510EQUD mod_initialise% 15520EQUD mod_finalise% 15530EQUD 0 15540EQUD mod_title% 15550EQUD mod_help% 15560] 15570IF com% THEN 15580 [OPT pass% 15590 EQUD mod_command% 15600 ] 15610ELSE 15620 [OPT pass% 15630 EQUD 0 15640 ] 15650ENDIF 15660[OPT pass% 15670EQUD 0 15680 15690.mod_initialise% 15700STMFD R13!,{R0-R8,R14} 15710SWI "OS_ReadMonotonicTime" 15720AND R0,R0,#256 15730STR R0,mod_lock% 15740SWI "Tracker_Lock" 15750ADR R0,mod_tunestart% 15760LDR R1,mod_tunelength% 15770LDR R4,mod_lock% 15780SWI "Tracker_MemoryLoad" 15790LDR R0,mod_autoplay% 15800CMP R0,#1 15810SWIEQ "Tracker_Play" 15820LDMFD R13!,{R0-R8,PC} 15830 15840.mod_finalise% 15850STMFD R13!,{R0-R8,R14} 15860LDR R4,mod_lock% 15870SWI "Tracker_Stop" 15880MOV R0,R4 15890SWI "Tracker_Unlock" 15900LDMFD R13!,{R0-R8,PC} 15910 15920.mod_title% 15930EQUS "MusicModule" 15940EQUB 0 15950ALIGN 15960 15970.mod_help% 15980EQUS "MusicModule"+CHR$9+"0.10 ("+MID$(TIME$,5,11)+")" 15990EQUB 0:ALIGN 16000 16010.mod_command% 16020EQUS "MusicOn" 16030EQUB 0 16040ALIGN 16050EQUD mod_musicon% 16060EQUD 0 16070EQUD mod_musicon_syntax% 16080EQUD mod_musicon_help% 16090EQUS "MusicOff" 16100EQUB 0 16110ALIGN 16120EQUD mod_musicoff% 16130EQUD 0 16140EQUD mod_musicoff_syntax% 16150EQUD mod_musicoff_help% 16160EQUS "MusicPause" 16170EQUB 0 16180ALIGN 16190EQUD mod_musicpause% 16200EQUD 0 16210EQUD mod_musicpause_syntax% 16220EQUD mod_musicpause_help% 16230EQUD 0 16240 16250.mod_musicon% 16260STMFD R13!,{R0-R8,R14} 16270LDR R4,mod_lock% 16280SWI "Tracker_Play" 16290LDMFD R13!,{R0-R8,PC} 16300 16310.mod_musicon_syntax% 16320EQUS "Syntax: *MusicOn" 16330EQUB 0 16340ALIGN 16350 16360.mod_musicon_help% 16370EQUS "*MusicOn switches the background Tracker music on." 16380EQUB 0 16390ALIGN 16400 16410.mod_musicoff% 16420STMFD R13!,{R0-R8,R14} 16430LDR R4,mod_lock% 16440SWI "Tracker_Pause" 16450MOV R0,#0 16460SWI "Tracker_SetPos" 16470LDMFD R13!,{R0-R8,PC} 16480 16490.mod_musicoff_syntax% 16500EQUS "Syntax: *MusicOff" 16510EQUB 0 16520ALIGN 16530 16540.mod_musicoff_help% 16550EQUS "*MusicOff switches the background Tracker music off." 16560EQUB 0 16570ALIGN 16580 16590.mod_musicpause% 16600STMFD R13!,{R0-R8,R14} 16610LDR R4,mod_lock% 16620SWI "Tracker_Pause" 16630LDMFD R13!,{R0-R8,PC} 16640 16650.mod_musicpause_syntax% 16660EQUS "Syntax: *MusicPause" 16670EQUB 0 16680ALIGN 16690 16700.mod_musicpause_help% 16710EQUS "*MusicPause pauses the background Tracker music." 16720EQUB 0 16730ALIGN 16740 16750.mod_autoplay% 16760EQUD 1 16770 16780.mod_lock% 16790EQUD 0 16800 16810.mod_tunelength% 16820EQUD 0 16830 16840.mod_tunestart% 16850] 16860SYS "OS_File",&FF,tune$,mod_tunestart%+base% 16870P%+=lenbytes%:O%+=lenbytes% 16880NEXT pass% 16890!(mod_tunelength%+base%)=lenbytes% 16900IF ap% THEN !(mod_autoplay%+base%)=1 ELSE !(mod_autoplay%+base%)=0 16910SYS "OS_File",&A,f$,&FFA,,base%,base%+P% 16920PROCrelease_rma(base%) 16930ENDPROC 16940 16950DEF PROCmonitor:oldmode%=MODE 16960LOCAL track% 16970MODE12:OFF:MOUSE OFF 16980FOR I%=0 TO fontlen%-1:VDU font%?I%:NEXT 16990SYS "Tracker_TuneInfo",,,,,lock% TO len%,voices%,speed%,name$,a% 17000PRINTTAB(0,0);"Track: "+name$ 17010PRINTTAB(48,1);"Voices: "+STR$voices%+" Speed: "+STR$speed% 17020PRINTTAB(48,2);"Patterns: "+STR$len%+STRING$(3-LEN(STR$len%)," ")+" Volume: "+STR$~cvol% 17030PRINTTAB(48,3);"Position: 0 of: "+STR$(len%-1)+STRING$(3-LEN(STR$(len%-1))," ")+" Event: 0" 17040PRINTTAB(12,5);"Pitch Acc Pitch Inc Byte Off Samp Len Samp No Volume Period" 17050SYS "OS_Heap",1,buff% TO ,,,size% 17060PRINTTAB(0,20);"Buffer size currently &"+STR$~size%+" bytes." 17070PRINTTAB(0,21);"Module loaded at &"+STR$~workspc%+", length &"+STR$~lenbytes% 17080PRINTTAB(0,29);"System PlayTrack by David J. Seery" 17090PRINTTAB(0,31);FNgeticondata(infowind%,15); 17100REPEAT:SYS "Tracker_ReadPos" TO cp%,ev% 17110PRINTTAB(48,3);"Position: "+STR$cp%+STRING$(3-LEN(STR$cp%)," ")+" of: "+STR$(len%-1)+STRING$(3-LEN(STR$(len%-1))," ")+" Event: "+STR$ev% 17120SYS "Tracker_SoundInfo",pointer% 17130FOR I%=0 TO 224 STEP 32:track%=I%/32 17140PRINTTAB(0,6+track%);"Channel "+STR$track% 17150acc%=pointer%!I%:inc%=pointer%!(I%+4):slen%=pointer%!(I%+12):sno%=pointer%!(I%+16):vol%=pointer%!(I%+20):note%=pointer%!(I%+24):per%=pointer%!(I%+28) 17160SYS"OS_ConvertHex8",acc%,pointer%+300,100:acc$=FNrtoz(pointer%+300) 17170SYS"OS_ConvertHex8",inc%,pointer%+300,100:inc$=FNrtoz(pointer%+300) 17180SYS"OS_ConvertHex8",acc%>>>16,pointer%+300,100:loop$=FNrtoz(pointer%+300) 17190SYS"OS_ConvertHex8",slen%,pointer%+300,100:slen$=FNrtoz(pointer%+300) 17200SYS"OS_ConvertHex8",sno%,pointer%+300,100:sno$=FNrtoz(pointer%+300) 17210SYS"OS_ConvertHex8",255-vol%,pointer%+300,100:vol$=FNrtoz(pointer%+300) 17220SYS"OS_ConvertHex8",per%,pointer%+300,100:per$=FNrtoz(pointer%+300) 17230PRINTTAB(12,6+track%);acc$+" "+inc$+" "+loop$+" "+slen$+" "+sno$+" "+vol$+" "+per$ 17240PRINTTAB((10*track%)+3,15);FNnote(note%) 17250NEXT 17260MOUSE x%,y%,z%:UNTIL z%<>0 17270OSCLI("Alphabet Latin1") 17280SYS "Wimp_SetMode",oldmode% 17290ENDPROC 17300 17310DEF FNnote(val%) 17320CASE val% OF 17330 WHEN 1 : ="C-1" 17340 WHEN 2 : ="C#1" 17350 WHEN 3 : ="D-1" 17360 WHEN 4 : ="D#1" 17370 WHEN 5 : ="E-1" 17380 WHEN 6 : ="F-1" 17390 WHEN 7 : ="F#1" 17400 WHEN 8 : ="G-1" 17410 WHEN 9 : ="G#1" 17420 WHEN 10: ="A-1" 17430 WHEN 11: ="A#1" 17440 WHEN 12: ="B-1" 17450 WHEN 13: ="B#1" 17460 WHEN 14: ="C-2" 17470 WHEN 15: ="C#2" 17480 WHEN 16: ="D-2" 17490 WHEN 17: ="D#2" 17500 WHEN 18: ="E-2" 17510 WHEN 19: ="F-2" 17520 WHEN 20: ="F#2" 17530 WHEN 21: ="G-2" 17540 WHEN 22: ="G#2" 17550 WHEN 23: ="A-2" 17560 WHEN 24: ="A#2" 17570 WHEN 25: ="B-2" 17580 WHEN 26: ="B#2" 17590 WHEN 27: ="C-3" 17600 WHEN 28: ="C#3" 17610 WHEN 29: ="D-3" 17620 WHEN 30: ="D#3" 17630 WHEN 31: ="E-3" 17640 WHEN 32: ="F-3" 17650 WHEN 33: ="F#3" 17660 WHEN 34: ="G-3" 17670 WHEN 35: ="G#3" 17680 WHEN 36: ="A-3" 17690ENDCASE 17700="0-0" 17710 17720DEF PROCtidy 17730IF buff%>0 PROCrelease_rma(buff%) 17740ENDPROC
� >$.!PlayTrack.!RunImage � PD � 1992 ( 2a� � �tellemoff("Fatal error: (type="+Þ+") "+�$+" Re-run & try again."):ș "Wimp_CloseDown":� <H� errors in this bit of code cannot be dealt with - quit immediately FG� If you try, templates might not be loaded, menus not defined etc. PD� q% 800,useful% 700,ind% &200,ind2% &300,menu% 300,pointer% 400 Z@� icontext% 36,iconvalid% 36,ind3% &200,ind4% &300,open% 650 d� indtext% 256:indptr%=0 nG� ind5% &200,channel(8),ind6% &150,ind7% &100,ind8% &200,ind9% &200 xH� ind10% &100,ind11% &20,code% 700,ind12% &100,ind13% &20,ind14% &20 �L� samps% 32*31,volume% 4*31,samplen% 6*31,valid% 3,text% 30:$valid%="z4" �I$text%="No:":$(text%+8)="Name:":$(text%+16)="Vol:":$(text%+24)="Len:" �<edited%=�:playing%=�:speaker=�:buffersize%=0:lenbytes%=0 �8copen%=�:topen%=�:sopen%=�:vopen%=�:type=0:newicn%=� �=sicn%=0:nscn%=�:cmos%=42:cmos2%=43:oopen%=�:lap%=�:scr%=� �3dos%=�:afs%=�:vuopen%=�:mute%=�:mak%=�:wopen%=� �?show%=�:cropen%=�:track%=1:com%=�:ap%=�:clock$="48":buff%=0 �workspc%=0 �$q%="TASK" �6ș "Wimp_Initialise",200,!q%,"PlayTrack" � ,taskh% �@ș "Interface_Initialise",,taskh%:� claim Interface pointers �)lock%=�(2000):ș "Tracker_Lock",lock% �7ș "Wimp_OpenTemplate",,"<PlayTrack$Dir>.Templates" 9ș "Wimp_LoadTemplate",,q%,ind%,ind%+&200,-1,"info",0 *ș "Wimp_CreateWindow",,q% � infowind% =ș "Wimp_LoadTemplate",,q%,ind2%,ind2%+&300,-1,"saveas",0 "(ș "Wimp_CreateWindow",,q% � saveas% ,>ș "Wimp_LoadTemplate",,q%,ind3%,ind3%+&200,-1,"control",0 6)ș "Wimp_CreateWindow",,q% � control% @?ș "Wimp_LoadTemplate",,q%,ind4%,ind4%+&300,-1,"tuneinfo",0 J*ș "Wimp_CreateWindow",,q% � tuneinfo% T=ș "Wimp_LoadTemplate",,q%,ind5%,ind5%+&200,-1,"stereo",0 ^(ș "Wimp_CreateWindow",,q% � stereo% h=ș "Wimp_LoadTemplate",,q%,ind6%,ind6%+&150,-1,"buffer",0 r(ș "Wimp_CreateWindow",,q% � buffer% |@ș "Wimp_LoadTemplate",,q%,ind7%,ind7%+&100,-1,"oddformat",0 �%ș "Wimp_CreateWindow",,q% � odd% �?ș "Wimp_LoadTemplate",,q%,ind8%,ind8%+&200,-1,"helptext",0 �&ș "Wimp_CreateWindow",,q% � help% �?ș "Wimp_LoadTemplate",,q%,ind9%,ind9%+&200,-1,"register",0 �*ș "Wimp_CreateWindow",,q% � register% �@ș "Wimp_LoadTemplate",,q%,ind10%,ind10%+&100,-1,"options",0 �)ș "Wimp_CreateWindow",,q% � options% �?ș "Wimp_LoadTemplate",,q%,ind11%,ind11%+&20,-1,"vumeter",0 �)ș "Wimp_CreateWindow",,q% � vumeter% �Aș "Wimp_LoadTemplate",,q%,ind12%,ind12%+&100,-1,"waveform",0 �*ș "Wimp_CreateWindow",,q% � waveform% �@ș "Wimp_LoadTemplate",,q%,ind13%,ind13%+&20,-1,"wavepane",0 �*ș "Wimp_CreateWindow",,q% � wavepane% ;ș "Wimp_LoadTemplate",,q%,ind14%,ind14%+&20,-1,"cro",0 %ș "Wimp_CreateWindow",,q% � cro% ș "Wimp_CloseTemplate" &�samps_wind 0�get_register :�load_opts D)� scr% ș "Sound_Configure",,,�clock$ N�buffer(�buffer$) X �menu b!�assemble:!vu_block%=pointer% lCș "Sound_Speaker",0 � oldspeak%:ș "Sound_Enable",0 � oldmute% v0volunit=0.442708333:� 1 discrete volume unit �cvol%=255:� Volume at 100% �9ș "XOS_Module",18,"TrackerModule" � ,,,start%;flags% �� (flags% � 1)=1 � �� �tellemoff("Cannot initialise TrackerModule address offsets! I must exit immediately (check that TrackerModule is loaded).") � �tidy �9 ș "Wimp_CloseDown":ș "Interface_CloseDown",taskh% � ș "Tracker_Unlock",lock% � � �� �7sccb%=start%+&1850:� Start of SCCB in TrackerModule �?h%=�("<PlayTrack$Dir>.Font"):len%=�#h%:�#h%:fontlen%=len%-1 �>� font% len%:ș "OS_File",&FF,"<PlayTrack$Dir>.Font",font% �8icon%=�iconbar("!PlayTrack","",-1):� icon on iconbar < � -1 = Utility (RHS) < � -2 = Service (LHS) #quit%=�:� Nothing happened yet! *Hș "Tracker_Stereo",4,,,,lock%:� I=1 � 8:�stereo(I,4):channel(I)=4:� 4!� registered%=� � pirate%=� � >" �setup_mess1:�hold_it(help%) H- ș "Wimp_CreateMenu",,register%,640,900 R� \ f�� �error("Error: "+�$+" (code "+Þ+") Quit ? (Buffer="+�~workspc%+")",3)=1:ș "Interface_CloseDown",,taskh%:ș "Tracker_Stop",,,,,lock%:ș "Sound_Speaker",oldspeak%:ș "Sound_Enable",oldmute%:ș "Tracker_Unlock",lock%:�tidy:ș "Wimp_CloseDown":� pJ� Error handler drops through to wimp_poll loop, AFTER wimp_initialise z� ��volfill �5ș "Wimp_Poll",,q% � reason%:� and poll the wimp. �2ș "Interface_PreProcessKey",reason%,q%,taskh% �Cș "Interface_Poll",reason%,,taskh%:� Ensure pointer up to date �Ȏ reason% � �� 0 : � newicn% � � �=0:� � �>=20 � Ȏ type � �< � � : �puticonsprite(win%,icn%,"selon") �< � �: �puticonsprite(win%,icn%,"seloff") � � � newicn%=� � � - ȗ x%,y%,b%:� nscn% � b%=0 � �=0:� � �>=15 Ȏ sicn% � $; � 0 : �puticonsprite(control%,0,"rev") .; � 4 : �puticonsprite(control%,4,"fwd") 8 � B nscn%=� L � VG pointer%!0=vumeter%:ș "Wimp_GetWindowState",,pointer% `- � (pointer%!32 � 1<<16)<>0 � j> ș "Wimp_ForceRedraw",vumeter%,0,-280,310,0 t � ~ � cropen% � �: ș "Wimp_ForceRedraw",cro%,0,-200,150,0 � � �� 1 : �redraw �&� 2 : ș "Wimp_OpenWindow",,q% �" � !q%=waveform% � �F !q%=wavepane%:q%!4+=20:q%!8+=20:q%!12-=20:q%!16-=80 �I !pointer%=wavepane%:ș "Wimp_GetWindowState",,pointer% �6 q%!20=pointer%!20:q%!24=pointer%!24 �+ ș "Wimp_OpenWindow",,q% � � �'� 3 : ș "Wimp_CloseWindow",,q% �! � !q%=control% � copen%=� $ �tickmenu(open%,0) ! �shut(control%) � (" � !q%=tuneinfo% � 2 topen%=� <$ �tickmenu(open%,1) F" �shut(tuneinfo%) P � Z � !q%=stereo% � d sopen%=� n$ �tickmenu(open%,2) x �shut(stereo%) � � �! � !q%=samples% � � vopen%=� �$ �tickmenu(open%,3) �! �shut(samples%) � � � � !q%=buffer% � � bopen%=� �$ �tickmenu(open%,4) � �shut(buffer%) � � �! � !q%=options% � � oopen%=� % �tickmenu(open%,5) " �shut(options%) � "! � !q%=vumeter% � , vuopen%=� 6% �tickmenu(open%,6) @" �shut(vumeter%) J � T" � !q%=waveform% � ^ wopen%=� h% �tickmenu(open%,7) r# �shut(waveform%) |# �shut(wavepane%) � � � � !q%=cro% � � cropen%=� �% �tickmenu(open%,8) � �shut(cro%) � � �+� 4 : ș "Wimp_SetCaretPosition",-1 �0� 5 : ș "Wimp_SetCaretPosition",q%!0,-1 �� 6 : �checkmouse �&� 7 : f$=�lastbit(f$):�dragend �� 8 : �kp �� 9 : �process_menu �� 17,18 : �message � � playing% � ' ș "Tracker_ReadPos",,,,,lock% � c &# c1=�(�geticondata(control%,9)) 0( � c<>c1 �puticondata(control%,9,�c) :* ș "Tracker_TuneInfo",,,,,lock% � ,,s D$ s1=�(�geticondata(tuneinfo%,7)) N) � s<>s1 �puticondata(tuneinfo%,7,�s) X �volfill b� l� quit% v$ș "Interface_CloseDown",,taskh% �;ș "Sound_Speaker",oldspeak%:ș "Sound_Enable",oldmute% �"ș "Tracker_Stop",,,,,lock%:�7 �ș "Tracker_Unlock",lock% � �tidy �,ș "Wimp_CloseDown":�:� leave gracefully � �� �iconbar(v$,t$,handle%) �� i% �=� handle%=-2 � :� Service or Utility? �$$iconvalid%="S"+v$:$icontext%=t$ �� �q%!0=handle% � q%!4=0 ?� handle%=-1 q%!8=0 � q%!8=-16 :� Set up proper co-ords $� handle%=-1 q%!12=68 � q%!12=78 $� handle%=-1 q%!16=96 � q%!16=90 ?� handle%=-1 � :� And proper icon flags *q%!20=&2002 4� >+q%!20=%00010111000000000011000100101011 H� R5� handle%=-1 � :� Indirected? \$(q%+24)=v$ f� pq%!24=icontext% zq%!28=iconvalid% �q%!32=�($icontext%)+1 �� �=ș "Wimp_CreateIcon",,q% � i% :� And draw the icon �=i% � �� �message �yr%=q%!8 �Ȏ (q%!16) � �%� 0 : quit%=�:� Message_Quit ? �%� 2 : �ds:� Message_DataSave ? �%� 3 : �dl:� Message_DataLoad ? �%� 5 : �do:� Message_DataOpen ? �$� 8 : �pq:� Message_PreQuit ? '� &502 : �sendhelp:� Message_Help ? � � $ .� �checkmouse 8handle=(q%!12) Bicon=(q%!16) LȎ (q%!12) � V� -2:� iconbar ? `Ȏ (q%!8) � jM� 4 : � registered%=� � pirate%=� ș "Wimp_CreateMenu",,register%,640,900 t0� 2 : ș "Wimp_CreateMenu",,menu%,!q%-64,319 ~� 1 : � Adjust ? �� � � saveas% � Ȏ q%!8 � �� 4 : Ȏ q%!16 � �9� 1 : �slabicon:f$=�geticondata(saveas%,0):�quicksave �8� 3 : f$=�geticondata(saveas%,0):�dragbox(saveas%,2) �0� 4 : com%=�com%:�toggleopts(com%,saveas%,4) �-� 6 : ap%=�ap%:�toggleopts(ap%,saveas%,6) �� �� �� control% � Ȏ q%!8 � � 4 : Ȏ q%!16 � ;� 0 : �puticonsprite(control%,0,"rev1"):sicn%=0:nscn%=� L � playing%ș "Tracker_ReadPos",,,,,lock% � c,,m:c-=1:� c=-1 c=m 6 � playing% ș "Tracker_SetPos",c,,,,lock% (&� 1 : ș "Tracker_Pause",,,,,lock% 20 �puticonsprite(control%,1,"pause1") <. �puticonsprite(control%,2,"stop") F. �puticonsprite(control%,3,"play") P� 2 : � dos% � Z* ș "Tracker_Stop",,,,,lock% d1 �puticonsprite(control%,1,"pause") n1 �puticonsprite(control%,2,"stop1") x0 �puticonsprite(control%,3,"play") �+ �puticondata(control%,9,"0") �, �puticondata(control%,10,"0") � �clear:playing%=� � � �+ ș "Tracker_Pause",,,,,lock% �- ș "Tracker_SetPos",0,,,,lock% �1 �puticonsprite(control%,1,"pause") �1 �puticonsprite(control%,2,"stop1") �0 �puticonsprite(control%,3,"play") �+ �puticondata(control%,9,"0") � � �%� 3 : ș "Tracker_Play",,,,,lock% �/ �puticonsprite(control%,1,"pause") . �puticonsprite(control%,2,"stop") / �puticonsprite(control%,3,"play1") ;� 4 : �puticonsprite(control%,4,"fwd1"):sicn%=4:nscn%=� "K � playing%ș "Tracker_ReadPos",,,,,lock% � c,,m:c+=1:� c>m c=0 ,6 � playing% ș "Tracker_SetPos",c,,,,lock% 6� 12: speaker=� speaker @- �toggleopts(speaker,control%,12) JB � speaker ș "Sound_Speaker",2 � ș "Sound_Speaker",1 T� 15: mute%=� mute% ^+ �toggleopts(mute%,control%,15) h> � mute% ș "Sound_Enable",1 � ș "Sound_Enable",2 r� 19: �volume |� �� 1 : Ȏ q%!16 � �;� 0 : �puticonsprite(control%,0,"fwd1"):sicn%=0:nscn%=� �L � playing% ș "Tracker_ReadPos",,,,,lock% � c,,m:c+=1:� c>m c=0 �6 � playing% ș "Tracker_SetPos",c,,,,lock% �;� 4 : �puticonsprite(control%,4,"rev1"):sicn%=4:nscn%=� �M � playing% ș "Tracker_ReadPos",,,,,lock% � c,,m:c-=1:� c=-1 c=m �6 � playing% ș "Tracker_SetPos",c,,,,lock% �� �� � � stereo% � Ȏ q%!8 � �� 4 : Ȏ q%!16 � �3� 0 : channel(1)-=1:� channel(1)<1 channel(1)=1 " �stereo(1,channel(1)) E �puticonsprite(stereo%,1,"stereo"+�channel(1)):�slabicon 3� 2 : channel(1)+=1:� channel(1)>7 channel(1)=7 &" �stereo(1,channel(1)) 0E �puticonsprite(stereo%,1,"stereo"+�channel(1)):�slabicon :3� 3 : channel(2)-=1:� channel(2)<1 channel(2)=1 D" �stereo(2,channel(2)) NE �puticonsprite(stereo%,4,"stereo"+�channel(2)):�slabicon X3� 5 : channel(2)+=1:� channel(2)>7 channel(2)=7 b" �stereo(2,channel(2)) lE �puticonsprite(stereo%,4,"stereo"+�channel(2)):�slabicon v3� 6 : channel(3)-=1:� channel(3)<1 channel(3)=1 �" �stereo(3,channel(3)) �E �puticonsprite(stereo%,7,"stereo"+�channel(3)):�slabicon �3� 8 : channel(3)+=1:� channel(3)>7 channel(3)=7 �" �stereo(3,channel(3)) �E �puticonsprite(stereo%,7,"stereo"+�channel(3)):�slabicon �3� 9 : channel(4)-=1:� channel(4)<1 channel(4)=1 �" �stereo(4,channel(4)) �F �puticonsprite(stereo%,10,"stereo"+�channel(4)):�slabicon �3� 11: channel(4)+=1:� channel(4)>7 channel(4)=7 �" �stereo(4,channel(4)) �F �puticonsprite(stereo%,10,"stereo"+�channel(4)):�slabicon �3� 20: channel(5)-=1:� channel(5)<1 channel(5)=1 �" �stereo(5,channel(5)) F �puticonsprite(stereo%,21,"stereo"+�channel(5)):�slabicon 3� 22: channel(5)+=1:� channel(5)>7 channel(5)=7 " �stereo(5,channel(5)) F �puticonsprite(stereo%,21,"stereo"+�channel(5)):�slabicon *3� 23: channel(6)-=1:� channel(6)<1 channel(6)=1 4" �stereo(6,channel(6)) >F �puticonsprite(stereo%,24,"stereo"+�channel(6)):�slabicon H3� 25: channel(6)+=1:� channel(6)>7 channel(6)=7 R" �stereo(6,channel(6)) \F �puticonsprite(stereo%,24,"stereo"+�channel(6)):�slabicon f3� 26: channel(7)-=1:� channel(7)<1 channel(7)=1 p" �stereo(7,channel(7)) zF �puticonsprite(stereo%,27,"stereo"+�channel(7)):�slabicon �3� 28: channel(7)+=1:� channel(7)>7 channel(7)=7 �" �stereo(7,channel(7)) �F �puticonsprite(stereo%,27,"stereo"+�channel(7)):�slabicon �3� 29: channel(8)-=1:� channel(8)<1 channel(8)=1 �" �stereo(8,channel(8)) �F �puticonsprite(stereo%,30,"stereo"+�channel(8)):�slabicon �3� 31: channel(8)+=1:� channel(8)>7 channel(8)=7 �" �stereo(8,channel(8)) �F �puticonsprite(stereo%,30,"stereo"+�channel(8)):�slabicon �� �� � � buffer% � Ȏ q%!8 � � 4 : Ȏ q%!16 � 7� 5 : �slabicon:�buffer(�(�geticondata(buffer%,3))) � $� .� register% 8 Ȏ q%!8 � B� 4 : Ȏ q%!16 � L"� 9 : �slabicon:�register_copy V� `� j� options% t Ȏ q%!8 � ~� 4 : Ȏ q%!16 � �1� 2 : lap%=�lap%:�toggleopts(lap%,options%,2) �1� 4 : scr%=�scr%:�toggleopts(scr%,options%,4) �1� 6 : dos%=�dos%:�toggleopts(dos%,options%,6) �1� 8 : afs%=�afs%:�toggleopts(afs%,options%,8) �2� 11: mak%=�mak%:�toggleopts(mak%,options%,11) �� 10: �slabicon:�save_opts �� �� �� waveform% � Ȏ q%!8 � �� 4 : Ȏ q%!16 � �� 2 : �slabicon:�playnote � � � cro%: Ȏ q%!8 � ('� 4 : track%+=1:� track%=9 track%=1 2> pointer%!0=cro%:ș "Wimp_GetWindowInfo",,pointer% <# $(pointer%!76)=�track% F/ ș "Wimp_GetWindowState",,pointer% P, ș "Wimp_CloseWindow",,pointer% Z+ ș "Wimp_OpenWindow",,pointer% d'� 1 : track%-=1:� track%=0 track%=8 n> pointer%!0=cro%:ș "Wimp_GetWindowInfo",,pointer% x# $(pointer%!76)=�track% �/ ș "Wimp_GetWindowState",,pointer% �, ș "Wimp_CloseWindow",,pointer% �+ ș "Wimp_OpenWindow",,pointer% �� �� �� � �� �menu � � Setup menus and menu block �P%=menu% �flags=&7000021 ��menu_header("PlayTrack",9) �*�menu_item(&00,infowind%,flags,"Info") \� registered% �menu_item(&00,open%,flags,"Open") � �menu_item(&00,open%,&2000021,"Open") h� registered% �menu_item(&00,saveas%,flags,"Save F3") � �menu_item(&00,saveas%,&2000021,"Save F3") '�menu_item(&00,-1,flags,"Stop F6") "#�menu_item(&80,-1,flags,"Quit") ,P%=open% 6�menu_header("Open",14) @+�menu_item(&00,-1,flags,"Control �F1") J+�menu_item(&00,-1,flags,"Info �F2") T+�menu_item(&00,-1,flags,"Stereo �F3") ^+�menu_item(&00,-1,flags,"Samples �F4") h+�menu_item(&00,-1,flags,"Buffer �F5") r+�menu_item(&00,-1,flags,"Options �F6") |+�menu_item(&00,-1,flags,"Vu-Meter �F7") �+�menu_item(&00,-1,flags,"Waveform �F8") �+�menu_item(&00,-1,flags,"CRO �F9") �,�menu_item(&80,-1,flags,"Monitor �F10") �� registered%=� � �& � I%=0 � 9:�greymenu(open%,I%):� �- �disable(saveas%,1):�disable(saveas%,3) �� �� � �� �menu_header(T$,w) � $P%=T$ �P%!12=&70207 �P%!16=w*16 P%!20=40 P%!24=0 P%+=28 &� 0 :� �menu_item(A%,B%,C%,T$) DP%!0=A% NP%!4=B% XP%!8=C% b� �(T$)<13 � l $(P%+12)=T$ v� � $(indtext%+indptr%)=T$ � P%!12=indtext%+indptr% � P%!16=-1 � P%!20=�(T$)+1 � P%!8=P%!8 � 1<<8 � indptr%+=�(T$)+1 �� � P%+=24 �� � �'� �error(e$,b%):!q%=0:$(q%+4)=e$+�0 �1ș "Wimp_ReportError",q%,b%,"PlayTrack" � ,b% �=b% � �dl � f$,T% f$=�250," "):f$="":T%=q%+44 *ȕ ?T%<>0:f$+=�?T%:T%+=1:� 4Ȏ q%!40 � >:� &CB6,&001,&CC5,&701 : � q%!20=-2 �tracker_loadit(f$) H% : �hold_it(odd%) R� \2q%!12=q%!8:q%!16=4:ș "Wimp_SendMessage",17,q% f� p z � �do �� f$,T% �&f$=�250," "):f$="":f$=�rtoz(q%+44) �Ȏ q%!40 � �/� &CB6,&001,&CC5,&701 : �tracker_loadit(f$) � : � �� �2q%!12=q%!8:q%!16=4:ș "Wimp_SendMessage",17,q% �� � � � �redraw �%ș "Wimp_RedrawWindow",,q% � flag � x%=q%!4-q%!20:y%=q%!16-q%!24 �ȕ flag<>0 � !q%=vumeter% � playing% � . ș "Tracker_SoundInfo",pointer%,,,,lock% !vu_x%=x%:!vu_y%=y%-280 $ � code% .� 8H� !q%=wavepane% � show% � �geticondata(waveform%,1)<>"" � playing% � B ș "Hourglass_On" LI samp%=�(�geticondata(waveform%,1)):� samp%=0 ș "Hourglass_Smash":� VS ș "Tracker_ReadSampleTable",samp%,,,,lock% � ,,len1%,len%,rpt%,rptlen%,addr% ` ș "Wimp_SetColour",7 j � len1%>0 � addr%>0 � tA scale%=len%/len1%:rpt%=rpt%/scale%:rptlen%=rptlen%/scale% ~) sx=0:sy%=0:dist=2112/len1%:mid%=0 � � x%,y%-256 � � I%=0 � len1% �' sx+=dist:sy%=addr%?I%:mid%+=sy% � � x%+sx,(y%-256)+sy% � � I% � mid%=mid%/len1% � ș "Wimp_SetColour",11 �2 � x%,(y%-256)+mid%:� x%+2112,(y%-256)+mid% � ș "Wimp_SetColour",10 �1 � x%+rpt%*dist,(y%-256):� x%+rpt%*dist,y% � ș "Wimp_SetColour",13 �E � x%+(rpt%+rptlen%)*dist,(y%-256):� x%+(rpt%+rptlen%)*dist,y% � ș "Hourglass_Off" � � !q%=cro% � ( ș "Wimp_SetColour",14 28 � I%=0 � 150 � 50:� x%+I%,(y%-200):� x%+I%,y%:� I% <: � I%=0 � 200 � 50:� x%,(y%-I%):� x%+150,(y%-I%):� I% F � playing% � P ș "Wimp_SetColour",0 ZV ș "Tracker_SoundInfo",pointer%,,,,lock%:boff%=(pointer%!((track%-1)*32)>>>16) d- samp%=(pointer%!(((track%-1)*32)+16)) n � samp%>0 � xe ș "Tracker_ReadSampleTable",samp%,,,,lock% � ,,,len%,,,addr%:� boff%>len%-15 boff%=len%-15 �& � boff%<len%+15 bof%=len%+15 �� � x%,(y%-200)+addr%?(boff%-1):sx%=0:sy=0:� I%=boff%-15 � boff%+15:sy=(addr%?I%)/1.28:� x%+sx%,(y%-200)+sy:sx%+=(150/30):� � � �) � x%,(y%-100):� x%+150,(y%-100) � � � � �� �5� !q%<>vumeter% ș "Interface_Render3dWindow",,q% �%ș "Wimp_GetRectangle",,q% � flag �� �� � �5� �assemble:� redraw code in assembler for speed: � pass%=8 � 11 � 2 P%=code%:L%=code%+700 [OPT pass% "LDR R0,vu_block% ,!LDR R1,[R0,#24]:STR R1,chan1% 6$LDR R1,[R0,#32+24]:STR R1,chan2% @$LDR R1,[R0,#64+24]:STR R1,chan3% J$LDR R1,[R0,#96+24]:STR R1,chan4% T%LDR R1,[R0,#128+24]:STR R1,chan5% ^%LDR R1,[R0,#160+24]:STR R1,chan6% h%LDR R1,[R0,#192+24]:STR R1,chan7% r%LDR R1,[R0,#224+24]:STR R1,chan8% |MOV R0,#11 �SWI "Wimp_SetColour" �LDR R2,vu_y% �LDR R1,vu_x%:MOV R0,#4 �SWI "OS_Plot" �:MOV R1,#30:LDR R3,chan1%:MOV R2,R3,LSL #3:SUB R2,R2,R3 �MOV R0,#97:SWI "OS_Plot" �LDR R2,vu_y% �(LDR R1,vu_x%:ADD R1,R1,#40:MOV R0,#4 �SWI "OS_Plot" �:MOV R1,#30:LDR R3,chan2%:MOV R2,R3,LSL #3:SUB R2,R2,R3 �MOV R0,#97:SWI "OS_Plot" �LDR R2,vu_y% �(LDR R1,vu_x%:ADD R1,R1,#80:MOV R0,#4 SWI "OS_Plot" :MOV R1,#30:LDR R3,chan3%:MOV R2,R3,LSL #3:SUB R2,R2,R3 MOV R0,#97:SWI "OS_Plot" &LDR R2,vu_y% 0)LDR R1,vu_x%:ADD R1,R1,#120:MOV R0,#4 :SWI "OS_Plot" D:MOV R1,#30:LDR R3,chan4%:MOV R2,R3,LSL #3:SUB R2,R2,R3 NMOV R0,#97:SWI "OS_Plot" XLDR R2,vu_y% b)LDR R1,vu_x%:ADD R1,R1,#160:MOV R0,#4 lSWI "OS_Plot" v:MOV R1,#30:LDR R3,chan5%:MOV R2,R3,LSL #3:SUB R2,R2,R3 �MOV R0,#97:SWI "OS_Plot" �LDR R2,vu_y% �)LDR R1,vu_x%:ADD R1,R1,#200:MOV R0,#4 �SWI "OS_Plot" �:MOV R1,#30:LDR R3,chan6%:MOV R2,R3,LSL #3:SUB R2,R2,R3 �MOV R0,#97:SWI "OS_Plot" �LDR R2,vu_y% �)LDR R1,vu_x%:ADD R1,R1,#240:MOV R0,#4 �SWI "OS_Plot" �:MOV R1,#30:LDR R3,chan7%:MOV R2,R3,LSL #3:SUB R2,R2,R3 �MOV R0,#97:SWI "OS_Plot" �LDR R2,vu_y% �)LDR R1,vu_x%:ADD R1,R1,#280:MOV R0,#4 SWI "OS_Plot" :MOV R1,#30:LDR R3,chan8%:MOV R2,R3,LSL #3:SUB R2,R2,R3 MOV R0,#97:SWI "OS_Plot" MOV PC,R14 *B.vu_block% EQUD 0:.chan1% EQUD 0:.chan2% EQUD 0:.chan3% EQUD 0 4?.chan4% EQUD 0:.chan5% EQUD 0:.chan6% EQUD 0:.chan7% EQUD 0 >..chan8% EQUD 0:.vu_x% EQUD 0:.vu_y% EQUD 0 H] R� pass% \� f p� �process_menu z8ș "Wimp_GetPointerInfo",,pointer%:j%=(pointer%!8=1) �Ȏ handle � �� -2 � Ȏ q%!0 � �� 1 : Ȏ q%!4 � �5 � 0 : copen%=�copen%:�tickmenu(open%,0) �@ � copen% �openup(control%,0,1024,625,325) �1 � � copen% �shut(control%) �5 � 1 : topen%=�topen%:�tickmenu(open%,1) �B � topen% �openup(tuneinfo%,580,530,700,430) �2 � � topen% �shut(tuneinfo%) �5 � 2 : sopen%=�sopen%:�tickmenu(open%,2) �@ � sopen% �window_centre(stereo%,1110,250) �0 � � sopen% �shut(stereo%) 5 � 3 : vopen%=�vopen%:�tickmenu(open%,3) B � vopen% �openback(samples%,0,1000,700,850) 1 � � vopen% �shut(samples%) $5 � 4 : bopen%=�bopen%:�tickmenu(open%,4) .? � bopen% �window_centre(buffer%,700,475) 80 � � bopen% �shut(buffer%) B5 � 5 : oopen%=�oopen%:�tickmenu(open%,5) L@ � oopen% �window_centre(options%,768,367) V1 � � oopen% �shut(options%) `7 � 6 : vuopen%=�vuopen%:�tickmenu(open%,6) jB � vuopen% �openup(vumeter%,970,900,310,280) t2 � � vuopen% �shut(vumeter%) ~5 � 7 : wopen%=�wopen%:�tickmenu(open%,7) �R � wopen% �openlinked(waveform%,wavepane%,1280,390,2112,256) �C � � wopen% �shut(waveform%):�shut(wavepane%) �8 � 8 : cropen%=� cropen%:�tickmenu(open%,8) �> � cropen% �openup(cro%,700,500,150,200) �. � � cropen% �shut(cro%) � � 9 : �monitor � � �� 3 : � dos% � �* ș "Tracker_Stop",,,,,lock% �1 �puticonsprite(control%,1,"pause") �1 �puticonsprite(control%,2,"stop1") �0 �puticonsprite(control%,3,"play") + �puticondata(control%,9,"0") , �puticondata(control%,10,"0") �clear:playing%=� � (+ ș "Tracker_Pause",,,,,lock% 2- ș "Tracker_SetPos",0,,,,lock% <1 �puticonsprite(control%,1,"pause") F1 �puticonsprite(control%,2,"stop1") P0 �puticonsprite(control%,3,"play") Z+ �puticondata(control%,9,"0") d � n� 4 : � edited%=� � xD � �ok("File(s) edited but not saved. Really quit ?") � � quit%=� � � � quit%=� � � � � � � edited%=� � � quit%=� � � � � �� �:� j% ș "Wimp_CreateMenu",,menu%,pointer%!0,pointer%!4 �� �� � �openup(handle,x,y,w,h) pointer%!0=handle "pointer%!4=x:pointer%!8=y-h ,!pointer%!12=x+w:pointer%!16=y 6pointer%!20=0:pointer%!24=0 @pointer%!28=-1 J"ș "Wimp_OpenWindow",,pointer% T� ^ h� �openback(handle,x,y,w,h) rpointer%!0=handle |pointer%!4=x:pointer%!8=y-h �!pointer%!12=x+w:pointer%!16=y �pointer%!20=0:pointer%!24=0 �pointer%!28=-2 �"ș "Wimp_OpenWindow",,pointer% �� � �� �slabicon �.ș "Interface_SlabButton",,q%:� Slab in... � q%!8=0 �.ș "Interface_SlabButton",,q%:� ...and out �� � �� �shut(h%) 1pointer%!0=h%:ș "Wimp_CloseWindow",,pointer% � &� �sendhelp 0%q%!12=q%!8:q%!16=&503:help%=q%+20 ::help%=�help(q%!32,q%!36,q%!20,q%!24,help%):� help%=0 � D+?help%=0:� No, so send application help N*!q%=(help%+4-q%)��3:� Setup help block X2ș "Wimp_SendMessage",17,q%,q%!4:� and send it b� l v$� �help(window%,icon%,x%,y%,to%) �$to%="" �Ȏ window% � � � -2 : � iconbar ? � Ȏ icon% � � � icon% : � my icon ? �P $to%="This is the PlayTrack icon.|MDrag Tracker tunes to it to play them." � � �" � infowind% : � info window ? � Ȏ icon% � �@ � -1,0,1,2,3,4,5,6,7,8 : � not over 'Click here...' icon ? �L $to%="This is the Info window.|MIt provides information on PlayTrack." �> : ș "Interface_SendHelp",,q%:=0:� Send Interface help � � & � saveas% : � 'Save as:' window ? Ȏ icon% � � -1 : � over work area ? C $to%="This is the 'Save' window.|MIt is used to save a file." *> : ș "Interface_SendHelp",,q%:=0:� Send Interface help 4 � >� H=to%+�($to%) R \!� �geticondata(window%,icon%) fpointer%!0=window% ppointer%!4=icon% z$ș "Wimp_GetIconState",,pointer% �=$(pointer%!28) � �$� �puticondata(window%,icon%,t$) �'pointer%!0=window%:pointer%!4=icon% �$ș "Wimp_GetIconState",,pointer% �$(pointer%!28)=t$ �pointer%!12=0:pointer%!8=0 �$ș "Wimp_SetIconState",,pointer% �� � �&� �puticonsprite(window%,icon%,t$) �'pointer%!0=window%:pointer%!4=icon% �$ș "Wimp_GetIconState",,pointer% "ș "Wimp_DeleteIcon",,pointer% (pointer%!4=window%:$(pointer%+28)=t$ .pointer%+=4:ș "Wimp_CreateIcon",,pointer% $Rș "Wimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16 .pointer%-=4 8� B L� �tellemoff(e$) Ver%=pointer% ` !er%=0 j$(er%+4)=e$+�0 t+ș "Wimp_ReportError",er%,1,"PlayTrack" ~� � �3� �rtoz(T%):� q$:ȕ ?T%<>0:q$+=�?T%:T%+=1:�:=q$ � � � �pq �� edited% � �C� � �ok("File(s) edited but not saved. Really quit ?"):�no_quit �� �� � � � �ok(e$) �er%=pointer% � !er%=0 $(er%+4)=e$+�0 Aș "Wimp_ReportError",er%,&17,"Message from !PlayTrack" � ,b% =(b%=1) (� �no_quit 29q%!12=q%!8:q%!16=8:ș "Wimp_SendMessage",17,q%,q%!4:� < F� �dragend Pd%=pointer% Z ș "Wimp_GetPointerInfo",,d% d+d%!32=d%!4 :tt%=d%!32 n+d%!28=!d% :te%=d%!28 x+d%!24=d%!16 :tf%=d%!24 �+d%!20=d%!12 :tw%=d%!20 �%d%!16=1 :d%!12=0 :d%!36=0 �)d%!40=0 :!d%=64 :$(d%+44)=f$ �+ș "Wimp_SendMessage",17,d%,d%!20,d%!24 �mr%=d%!8 �� � �� �lastbit(s$) �ȕ �s$,":")>0 �s$=�s$,�s$,":")+1) �� �ȕ �s$,".")>0 �s$=�s$,�s$,".")+1) � =s$ " � �ds ,(�puticondata(saveas%,0,�rtoz(q%+44)) 6f$=�rtoz(q%+44) @ �sd(&FFA) J� T ^� �dragbox(w%,i%) hd%=pointer% r !d%=w% | ș "Wimp_GetWindowState",,d% �"ys%=d%!16-d%!8:x%=d%!4:y%=d%!8 �d%!4=i% �ș "Wimp_GetIconState",,d% �f$=�lastbit(f$) �d%!8+=x% �d%!12+=y%+ys% � d%!16+=x% �d%!20+=y%+ys% �d%!24=0 �d%!28=0 �8ș "OS_ReadModeVariable",�,4 � ,,h%:h%=�extracth(h%) �8ș "OS_ReadModeVariable",�,5 � ,,v%:v%=�extractv(v%) �d%!32=(h%*2) d%!36=(v%*4) !d%=0 d%!4=5 &ș "Wimp_DragBox",,d% 0� : D� �quicksave N� �f$,":")<1 � �f$,".")<1 � X:�tellemoff("To save, drag icon to a directory viewer") b� l �sd(&FFA) v� �� � � � �sd(t%) ��save_rm(f$) �d%=pointer% � !d%=64 � d%!20=tw% � d%!24=tf% � d%!28=te% � d%!32=tt% � d%!12=yr% �d%!16=3 �d%!36=0 !d%!40=t% !$(d%+44)=f$ !%ș "Wimp_SendMessage",17,d%,d%!20 ! ș "OS_File",18,f$,t% !*ș "Wimp_CreateMenu",,-1 !4� !> !H� �extracth(a%) !RȎ a% � !\ � 0 : =1280 !f � 1 : =640 !p � 2 : =320 !z � 3 : =160 !�� !� !�� �extractv(a%) !�Ȏ a% � !� � 1 : =512 !� � 2 : =256 !�� !� !�-� �toggleopts(flag,w%,i%):win%=w%:icn%=i% !�$�puticonsprite(w%,i%,"selclick") !� Ȏ flag � !� � � : newicn%=�:type=flag !� � � : newicn%=�:type=flag "� "� " "$"� �toggleradio(flag,w%,i%,i2%) ". Ȏ flag � "8) � � : �puticonsprite(w%,i%,"radon") "B1 �puticonsprite(w%,i2%,"radoff") "L) � � : �puticonsprite(w%,i%,"radoff") "V0 �puticonsprite(w%,i2%,"radon") "`� "j� "t "~ � �hackflags(w%,i%,eor%,or%) "�pointer%!0=w%:pointer%!4=i% "�#pointer%!8=eor%:pointer%!12=or% "�$ș "Wimp_SetIconState",,pointer% "�� "� "�� �enable(w%,i%) "��hackflags(w%,i%,0,&400000) "�� "� "�� �disable(w%,i%) "�%�hackflags(w%,i%,&400000,&400000) "�� # # � �select(w%,i%) #%�hackflags(w%,i%,&200000,&200000) #� #( #2� �deselect(w%,i%) #<�hackflags(w%,i%,0,&200000) #F� #P #Z� �toedit(file$) #d!pointer%=(48+�file$)��3 #npointer%!12=0 #xpointer%!16=5 #�pointer%!36=-2 #�pointer%!40=&FFF #�$(pointer%+44)=file$+�0 #�'ș "Wimp_SendMessage",18,pointer%,0 #�� #� #�� �tocursor(text$) #�� key%=1 � �(text$) #�*ș "Wimp_ProcessKey",�(�text$,key%,1)) #� ș "Wimp_Poll",,q% � reason% #�2ș "Interface_PreProcessKey",reason%,q%,taskh% #�'ș "Interface_Poll",reason%,,taskh% #�Ȏ reason% � $ � 1 : �redraw $# � 2 : ș "Wimp_OpenWindow",,q% $$ � 3 : ș "Wimp_CloseWindow",,q% $" � 6 : �checkmouse $,# � 7 : f$=�lastbit(f$):�dragend $6 � 9 : �process_menu $@ � 17,18 : �message $J� $T� $^� $h $r� �tickmenu(b%,n%) $|%b%!(28+24*n%)=b%!(28+24*n%) � &01 $�� $� $�� �greymenu(b%,n%) $�1b%!((28+24*n%)+8)=b%!((28+24*n%)+8) � &400000 $�� $� $�#� �window_centre(handle%,w%,h%) $�x%=((1280-w%)/2) $�y%=(((1024-h%)/2)+h%) $� �openup(handle%,x%,y%,w%,h%) $�� $� $�� �force_redraw %3ș "Wimp_ForceRedraw",fontselect%,0,0-400,700,0 %� % %&"� �tracker_loadit(f$):tune$=f$ %0Dș "Tracker_Stop",,,,,lock%:� Release so next call won't corrupt %:.� workspc%>0 ș "OS_Heap",3,buff%,workspc% %Dh%=�(f$):len%=�#h%:�#h% %N2ș "OS_Heap",2,buff%,,len% � ,,workspc%;flags% %XM� (flags% � 1)=1 �tellemoff("Buffer size is inadequate: Please extend"):� %b ș "OS_File",&FF,f$,workspc% %l1ș "Tracker_MemoryLoad",workspc%,len%,,,lock% %v"ș "Sound_Speaker",1:speaker=� %�&� lap% ș "Tracker_Play",,,,,lock% %�2� registered% �openup(control%,0,1024,625,325) %�$�puticonsprite(control%,0,"rev") %�&�puticonsprite(control%,1,"pause") %�Q� lap% �puticonsprite(control%,2,"stop") � �puticonsprite(control%,2,"stop1") %�Q� lap% �puticonsprite(control%,3,"play1") � �puticonsprite(control%,3,"play") %�$�puticonsprite(control%,4,"fwd") %�1ș "Tracker_ReadPos",,,,,lock% � current,,max %�"�puticondata(control%,10,�max) %�4� registered% �openup(tuneinfo%,580,530,700,430) %� �puticondata(tuneinfo%,1,f$) %�h%=�(f$):len%=�#h%:�#h% %�\�puticondata(tuneinfo%,3,�len%+" bytes -- "+�(�int((len%/1024)+0.4))+"K"):lenbytes%=len% &Cș "Tracker_TuneInfo",,,,,lock% � len1%,voices%,speed%,name$,a% &)� a%>0 author$=�rtoz(a%) � author$="" &name$=�strip(name$) & &�puticondata(tuneinfo%,5,�voices%) &*%�puticondata(tuneinfo%,7,�speed%) &4$�puticondata(tuneinfo%,9,�len1%) &>$�puticondata(tuneinfo%,11,name$) &H&�puticondata(tuneinfo%,13,author$) &R(�puticondata(tuneinfo%,15,�fmat(f$)) &\#�puticondata(control%,14,name$) &fAș "OS_File",5,f$ � ,,load%:type%=(load%>>>8)�&FFF:Ȏ type% � &p2� &001 : �puticondata(tuneinfo%,17,"STracker") &z2� &CB6 : �puticondata(tuneinfo%,17,"STModule") &�2� &CC5 : �puticondata(tuneinfo%,17,"TeqMusic") &�2� &701 : �puticondata(tuneinfo%,17,"ProTrack") &�� &�"� afs% ș "OS_File",18,f$,&CB6 &��samples_draw &��redo_buff(lenbytes%) &�*� copen%=� copen%=�:�tickmenu(open%,0) &�*� topen%=� topen%=�:�tickmenu(open%,1) &�playing%=� &�� &� &�� �redo_buff(len%) &�� buffersize%>0 � 'G �puticondata(buffer%,10,�len%+" bytes -- "+�(�int(len%/1024))+"K") '$ ș "OS_Heap",1,buff% � ,,,free% 'K �puticondata(buffer%,11,�(free%)+" bytes -- "+�(�int(free%/1024))+"K") '$� '.1 �puticondata(buffer%,10,"No buffer defined") '81 �puticondata(buffer%,11,"No buffer defined") 'B� 'L� 'V '`� �clear 'j.�puticondata(tuneinfo%,1,"No Tune Loaded") 't.�puticondata(tuneinfo%,3,"No Tune Loaded") '~!�puticondata(tuneinfo%,5,"0") '�!�puticondata(tuneinfo%,7,"0") '�!�puticondata(tuneinfo%,9,"0") '�/�puticondata(tuneinfo%,11,"No Tune Loaded") '�/�puticondata(tuneinfo%,13,"No Tune Loaded") '�"�puticondata(tuneinfo%,15,"0") '�/�puticondata(tuneinfo%,17,"No Tune Loaded") '� �puticondata(control%,14,"") '�� '� '�� �strip(text$) '�1ȕ �(�text$,1))<33:text$=�text$,(�text$)-1):� '�1ȕ �(�text$,1))<33:text$=�text$,(�text$)-1):� ( =text$ ( (� �fmat(f$) ( Ȏ mak% � ((� � : =�mandk(f$) (2� �: =�xbyte(f$) (<� (F (P� �xbyte(f$) (Zh%=�(f$) (d�#h%=471 (n a=�#h% (x�#h% (�� a=&78 ="15" � ="31" (� (�� �mandk(f$) (�h%=�(f$) (� �#h%=1080 (�"q$="":� I%=1 � 4:q$+=�(�#h%):� (��#h% (�5� q$="M.K." � q$="FLT4" � q$="FLT8" ="31" � ="15" (�4� Check for Startrekker as well as ProTracker ID (� (�� �stereo(ch,pos) (�"ș "Sound_Stereo",ch,�pos(pos) (�� ) )� �pos(pos) )Ȏ pos � )" � 1 : =-127 ), � 2 : =-79 )6 � 3 : =-47 )@ � 4 : =0 )J � 5 : =47 )T � 6 : =79 )^ � 7 : =127 )h� )r )|,� �create(ww,wh,tf,tb,sc,T$,wf,wb,flags) )�$pointer%!24=-1:pointer%!28=flags )�!pointer%?32=tf:pointer%?33=tb )�!pointer%?34=wf:pointer%?35=wb )�pointer%?36=3:pointer%?37=1 )� pointer%?38=sc:pointer%?39=0 )� pointer%!40=0:pointer%!44=wh )� pointer%!48=ww:pointer%!52=0 )�!pointer%!56=&3D:pointer%!60=0 )�pointer%!64=0:pointer%!68=0 )�$(pointer%+72)=T$ )�pointer%!84=0 )�)ș "Wimp_CreateWindow",,pointer% � h% )�=h% * *>� �create_icon(handle,addr,minx,maxx,miny,ht,t$,flags,len) *%pointer%!0=handle:pointer%!4=minx *&$pointer%!8=miny:pointer%!12=maxx *0)pointer%!16=miny+ht:pointer%!20=flags *:� addr=0 � *D$(pointer%+24)=t$ *N� *Xpointer%!24=addr *b0� t$="�" pointer%!28=valid% � pointer%!28=-1 *lpointer%!32=len *v� *�"ș "Wimp_CreateIcon",,pointer% *�� *� *�� �samps_wind *�start%=samps% *�volstart%=volume% *�sampstart%=samplen% *�9samples%=�create(700,-1200,7,2,12,"Samples",7,1,%111) *�miny=-60 *�>�create_icon(samples%,text%,10,80,miny,52,"�",&17000121,0) *�A�create_icon(samples%,text%+8,90,200,miny,52,"�",&17000121,0) *�C�create_icon(samples%,text%+16,500,590,miny,52,"�",&17000121,0) *�C�create_icon(samples%,text%+24,600,690,miny,52,"�",&17000121,0) +miny-=60 +count%=1 +� I=1 � 31 + $samps%="" +*$volume%="" +4$samplen%="" +>8�create_icon(samples%,0,10,80,miny,36,�I,&7000021,0) +H?�create_icon(samples%,samps%,90,490,miny,36,"",&7016121,32) +RA�create_icon(samples%,volume%,500,590,miny,36,"",&7000121,32) +\B�create_icon(samples%,samplen%,600,690,miny,36,"",&7000121,32) +f8miny-=36:samps%+=32:volume%+=4:samplen%+=6:count%+=1 +p� +zsamps%=start% +�volume%=volstart% +�samplen%=sampstart% +�� +�: +�� �samples_draw +�sampsnum=0 +�start%=samps% +�volstart%=volume% +�sampstart%=samplen% +�� I=1 � 31 +�>ș "Tracker_ReadSampleTable",I,,,,lock% � no%,a$,vol%,len% +�,�puticontext(samples%,(2*I)+3,samps%,a$) +�f� vol%<>0 �puticontext(samples%,(2*I)+4,volume%,�vol%) � �puticontext(samples%,(2*I)+4,volume%,"") ,t� len%<>0 �puticontext(samples%,(2*I)+5,samplen%,�len%) � �puticontext(samples%,(2*I)+5,samplen%,""):sampsnum+=1 ,%samps%+=32:volume%+=4:samplen%+=6 ,� ,$samps%=start% ,.volume%=volstart% ,8samplen%=sampstart% ,B� ,L ,V/� �puticontext(window%,icon%,buffer%,text$) ,`$buffer%=text$ ,j'pointer%!0=window%:pointer%!4=icon% ,tpointer%!8=0:pointer%!12=0 ,~$ș "Wimp_SetIconState",,pointer% ,�� ,� ,� � �kp ,�ș "Wimp_ProcessKey",q%!24 ,� Ȏ q%!0 � ,� � buffer% ,� Ȏ q%!4 � ,� � 3 ,� Ȏ q%!24 � ,�4 � 13 : q%!8=4:q%!12=buffer%:q%!16=5:�slabicon ,�4 �buffer(�(�geticondata(buffer%,3))) ,� � - � - � waveform% - Ȏ q%!4 � - � 1 -( Ȏ q%!24 � -2C � 13 : show%=�:ș "Wimp_ForceRedraw",wavepane%,0,-256,2112,0 -< � -F � -P� -ZȎ q%!24 � -d> � 385 : speaker=�speaker:�toggleopts(speaker,control%,12) -nE � speaker ș "Sound_Speaker",2 � ș "Sound_Speaker",1 -x8 � 386 : mute%=�mute%:�toggleopts(mute%,control%,15) -�A � mute% ș "Sound_Enable",1 � ș "Sound_Enable",2 -� � 387 : � register% � -�4 ș "Wimp_GetPointerInfo",,pointer% -�K ș "Wimp_CreateMenu",,saveas%,pointer%!0-64,pointer%!4+64 -� � -�> � 388 : �puticonsprite(control%,0,"rev1"):sicn%=0:nscn%=� -�D ș "Tracker_ReadPos",,,,,lock% � c,,m:c-=1:� c<0 c=m -�. ș "Tracker_SetPos",c,,,,lock% -�) � 389 : ș "Tracker_Pause",,,,,lock% -�3 �puticonsprite(control%,1,"pause1") -�1 �puticonsprite(control%,2,"stop") -�1 �puticonsprite(control%,3,"play") -� � 390 : � dos% � .- ș "Tracker_Stop",,,,,lock% .4 �puticonsprite(control%,1,"pause") .4 �puticonsprite(control%,2,"stop1") ."3 �puticonsprite(control%,3,"play") .,. �puticondata(control%,9,"0") .6/ �puticondata(control%,10,"0") .@# �clear:playing%=� .J � .T. ș "Tracker_Pause",,,,,lock% .^0 ș "Tracker_SetPos",0,,,,lock% .h4 �puticonsprite(control%,1,"pause") .r4 �puticonsprite(control%,2,"stop1") .|3 �puticonsprite(control%,3,"play") .� � .�( � 391 : ș "Tracker_Play",,,,,lock% .�2 �puticonsprite(control%,1,"pause") .�1 �puticonsprite(control%,2,"stop") .�2 �puticonsprite(control%,3,"play1") .�> � 392 : �puticonsprite(control%,4,"fwd1"):sicn%=4:nscn%=� .�D ș "Tracker_ReadPos",,,,,lock% � c,,m:c+=1:� c>m c=0 .�. ș "Tracker_SetPos",c,,,,lock% .� � 401 : � registered% � .�3 copen%=�copen%:�tickmenu(open%,0) .�; � copen% �openup(control%,0,1024,625,325) .�, � � copen% �shut(control%) .� � / � 402 : � registered% � /3 topen%=�topen%:�tickmenu(open%,1) /= � topen% �openup(tuneinfo%,580,530,700,430) /&- � � topen% �shut(tuneinfo%) /0 � /: � 403 : � registered% � /D3 sopen%=�sopen%:�tickmenu(open%,2) /N; � sopen% �window_centre(stereo%,1110,250) /X+ � � sopen% �shut(stereo%) /b � /l � 404 : � registered% � /v3 vopen%=�vopen%:�tickmenu(open%,3) /�= � vopen% �openback(samples%,0,1000,700,850) /�, � � vopen% �shut(samples%) /� � /� � 405 : � registered% � /�3 bopen%=�bopen%:�tickmenu(open%,4) /�: � bopen% �window_centre(buffer%,700,475) /�+ � � bopen% �shut(buffer%) /� � /� � 406 : � registered% � /�3 oopen%=�oopen%:�tickmenu(open%,5) /�; � oopen% �window_centre(options%,768,367) /�, � � oopen% �shut(options%) /� � 0 � 407 : � registered% � 05 vuopen%=�vuopen%:�tickmenu(open%,6) 0= � vuopen% �openup(vumeter%,970,900,310,280) 0 - � � vuopen% �shut(vumeter%) 0* � 04 � 408 : � registered% � 0>3 wopen%=�wopen%:�tickmenu(open%,7) 0HM � wopen% �openlinked(waveform%,wavepane%,1280,390,2112,256) 0R> � � wopen% �shut(waveform%):�shut(wavepane%) 0\ � 0f � 409 : � registered% � 0p5 cropen%=�cropen%:�tickmenu(open%,8) 0z9 � cropen% �openup(cro%,700,500,150,200) 0�) � � cropen% �shut(cro%) 0� � 0� � 474 : � registered% � 0� �monitor 0� � 0�' � 393 : cvol%-=5:� cvol%<0 cvol%=0 0�& x%=�int(cvol%/volunit) 0�1 pointer%!0=control%:pointer%!4=18 0�0 ș "Wimp_GetIconState",,pointer% 0�. ș "Wimp_DeleteIcon",,pointer% 0�) pointer%!16=pointer%!8+x% 0�D pointer%!4=control%:ș "Wimp_CreateIcon",,pointer%+4 0�> pointer%!4=19:ș "Wimp_GetIconState",,pointer% 1_ ș "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 1+ � 458 : cvol%+=5:� cvol%>255 cvol%=255 1& x%=�int(cvol%/volunit) 1$1 pointer%!0=control%:pointer%!4=18 1.0 ș "Wimp_GetIconState",,pointer% 18. ș "Wimp_DeleteIcon",,pointer% 1B) pointer%!16=pointer%!8+x% 1LD pointer%!4=control%:ș "Wimp_CreateIcon",,pointer%+4 1V> pointer%!4=19:ș "Wimp_GetIconState",,pointer% 1`_ ș "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 1j � 459 : cvol%=255 1t& x%=�int(cvol%/volunit) 1~1 pointer%!0=control%:pointer%!4=18 1�0 ș "Wimp_GetIconState",,pointer% 1�. ș "Wimp_DeleteIcon",,pointer% 1�) pointer%!16=pointer%!8+x% 1�D pointer%!4=control%:ș "Wimp_CreateIcon",,pointer%+4 1�> pointer%!4=19:ș "Wimp_GetIconState",,pointer% 1�_ ș "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 1�. ș "Tracker_SetPos",0,,,,lock% 1�+ ș "Tracker_Play",,,,,lock% 1�2 �puticonsprite(control%,1,"pause") 1�1 �puticonsprite(control%,2,"stop") 1�2 �puticonsprite(control%,3,"play1") 1�8 ș "Sound_Speaker",1:ș "Sound_Enable",2 2 ! speaker=�:mute%=� 2 4 �puticonsprite(control%,12,"seloff") 24 �puticonsprite(control%,15,"seloff") 2 � 474 : � registered% � 2(+ pointer%!0=1:pointer%!4=9 229 ș "Wimp_SendMessage",9,pointer%,taskh% 2< � 2F� 2P� 2Z 2d� �buffer(size%) 2n?� playing% �tellemoff("Can't alter buffer while playing"):� 2x#� buff%>0 � �release_rma(buff%) 2�5�("RMAFree "+�(size%)+" Error 0 Insufficent RMA") 2�"buffersize%=(size%*1024) � � 3 2�!buff%=�claim_rma(buffersize%) 2�%ș "OS_Heap",0,buff%,,buffersize% 2��redo_buff(lenbytes%) 2�� 2� 2�� �hold_it(window%) 2� � finish% 2�Ȏ window% � 2�)� odd% : �window_centre(odd%,750,300) 2�*� help%: �window_centre(help%,800,400) 2�� 3;pointer%!0=window%:ș "Wimp_GetWindowOutline",,pointer% 3Cxmin%=pointer%!4:ymin%=pointer%!8:xsize%=pointer%!12-pointer%!4 3Aysize%=pointer%!16-pointer%!8:ȗ ȓ xmin%,ymin%,xsize%,ysize% 3" finish%=� 3,� 36!ș "Wimp_Poll",,pointer% � r% 3@Ȏ r% � 3J� 1 : �redraw2 3T(� 2 : ș "Wimp_OpenWindow",,pointer% 3^)� 3 : ș "Wimp_CloseWindow",,pointer% 3h� 6 : �checkmouse2 3r�� 17,18 : � pointer%!16=0 ș "Interface_CloseDown",taskh%:ș "Sound_Speaker",oldspeak%:ș "Sound_Enable",oldmute%:ș "Tracker_Unlock",lock%:�tidy:ș "Wimp_CloseDown":� 3|E � pointer%!16=&400C1 ȗ ȓ xmin%,ymin%,xsize%,ysize% 3�� 3� � finish% 3��shut(window%) 3�*ș "OS_ReadModeVariable",-1,4 � ,,Eig% 3�.ș "OS_ReadModeVariable",-1,11 � ,,Extent% 3�xsize%=(Extent%+1)<<Eig% 3�*ș "OS_ReadModeVariable",-1,5 � ,,Eig% 3�.ș "OS_ReadModeVariable",-1,12 � ,,Extent% 3�ysize%=(Extent%+1)<<Eig% 3�ȗ ȓ 0,0,xsize%,ysize% 3�� 3� 3�� �checkmouse2 4Ȏ pointer%!12 � 4 � odd% 4Ȏ pointer%!8 � 4&� 4 : Ȏ pointer%!16 � 402� 6 : �slabicon2:�tracker_loadit(f$):finish%=� 4:� 7 : �slabicon2:finish%=� 4D:� 8 : �slabicon2:�setup_help:�hold_it(help%):finish%=� 4N� 4X� 4b� help% 4lȎ pointer%!8 � 4v� 4 : Ȏ pointer%!16 � 4�� 9 : �slabicon2:finish%=� 4�� 4�� 4�� 4�� 4� 4�� �setup_help 4��clear_help 4�5�puticondata(help%,3,"PlayTrack can only handle") 4�2�puticondata(help%,4,"certain types of file.") 4�6�puticondata(help%,5,"However, it may be able to") 4�7�puticondata(help%,6,"load music files in formats") 4�4�puticondata(help%,7,"it doesn't 'know' about,") 57�puticondata(help%,8,"so you can still hear them.") 5� 5 5 � �setup_mess1 5*�clear_help 543�puticondata(help%,3,"This is an unregistered") 5>7�puticondata(help%,4,"copy of !PlayTrack, that is") 5H9�puticondata(help%,5,"restricted in what it can do.") 5R7�puticondata(help%,6,"If you want to use the more") 5\5�puticondata(help%,7,"advanced facilities, then") 5f-�puticondata(help%,8,"you can register.") 5p� 5z 5�� �setup_mess2 5��clear_help 5�6�puticondata(help%,3,"This copy of !PlayTrack is") 5�2�puticondata(help%,4,"now registered to this") 5�1�puticondata(help%,5,"machine. Please quit") 5�4�puticondata(help%,6,"!PlayTrack and reload to") 5�1�puticondata(help%,7,"use the more advanced") 5�'�puticondata(help%,8,"facilities.") 5�� 5� 5�� �setup_mess3 5��clear_help 5�2�puticondata(help%,3,"Only PIN numbers up to") 6/�puticondata(help%,4,"#65280 are allowed.") 60�puticondata(help%,6,"Please re-enter your") 6'�puticondata(help%,7,"PIN number.") 6$� 6. 68� �setup_mess4 6B�clear_help 6L6�puticondata(help%,3,"This copy of !PlayTrack is") 6V2�puticondata(help%,4,"not registered to this") 6`$�puticondata(help%,5,"machine.") 6j8�puticondata(help%,7,"!PlayTrack will now run, but") 6t0�puticondata(help%,8,"will not work fully.") 6~� 6� 6�:� �clear_help:� I%=3 � 8:�puticondata(help%,I%,""):�:� 6� 6�� �redraw2 6�,ș "Wimp_RedrawWindow",,pointer% � more% 6�ȕ more%<>0 6�+ș "Interface_Render3dWindow",,pointer% 6�,ș "Wimp_GetRectangle",,pointer% � more% 6�� 6� 6�� �slabicon2 6�'ș "Interface_SlabButton",,pointer% 7 pointer%!8=0 7 'ș "Interface_SlabButton",,pointer% 7� 7 7(� �register(string$) 728�puticondata(infowind%,15,"Registered to: "+string$) 7<� 7F 7P� �get_register 7Z$h%=�("<PlayTrack$Dir>.Register") 7dl%=�#h%:�#h% 7nblock%=�claim_rma(l%) 7x6ș "OS_File",255,"<PlayTrack$Dir>.Register",block% 7�4� I%=0 � l%:block%?I%=block%?I% � �(��(I%),1)):� 7�0pirate%=�:pin%=!block%:name$=�rtoz(block%+4) 7�� pin%=65281 � pin%=65282 � 7� � pin%=65281 � 7�, �register(name$):registered%=�:�beep 7� � 7�& �register(name$):registered%=� 7� � 7�� 7�G ș "OS_Byte",161,cmos% � ,,reg%:ș "OS_Byte",161,cmos2% � ,,reg2% 7� reg%=(256*reg%)+reg2% 7�y � reg%<>pin% � �setup_mess4:�hold_it(help%):registered%=�:pirate%=�:�register("PIRATE COPY"):�release_rma(block%):� 7�$ �register(name$):registered%=� 8� 8�release_rma(block%) 8� 8" 8,� �beep 86!� I=1 � 7:�7:�=0:� � �=50:�:� 8@ 8J� �claim_rma(size%) 8T.ș "XOS_Module",6,,,size% � ,,addr%;flags% 8^� (flags% � 1)=1 � 8h* �tellemoff("Error during RMA claim") 8r =0 8|� 8� =addr% 8� 8�� �release_rma(addr%) 8�ș "OS_Module",7,,addr% 8�� 8� 8�� �register_copy 8�#name$=�geticondata(register%,4) 8�&pin%=�(�geticondata(register%,10)) 8�O� pin%>65280 � �setup_mess3:�hold_it(help%):�puticondata(register%,10,""):� 8�len%=4+�name$+1 8�addr%=�claim_rma(len%) 8�\!addr%=pin%:block%=addr%+4:name$+=�0:� I%=1 � �name$:?block%=�(�name$,I%,1)):block%+=1:� 92� I%=0 � len%:addr%?I%=addr%?I% � �(��I%,1)):� 9Eș "OS_File",10,"<PlayTrack$Dir>.Register",&FFD,,addr%,addr%+len% 9%ș "OS_Byte",162,cmos%,pin% � 256 9&&ș "OS_Byte",162,cmos2%,pin% � 256 90 �setup_mess2:�hold_it(help%) 9:� 9D 9N� �save_opts 9X#h%=�("<PlayTrack$Dir>.Options") 9b$clock$=�geticondata(options%,13) 9l#buffer$=�geticondata(buffer%,3) 9v0�#h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$ 9��#h% 9�� 9� 9�� �load_opts 9�#h%=�("<PlayTrack$Dir>.Options") 9�0�#h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$ 9��#h% 9�/lap$="":� lap% lap$="selon" � lap$="seloff" 9�/scr$="":� scr% scr$="selon" � scr$="seloff" 9�/dos$="":� dos% dos$="selon" � dos$="seloff" 9�/afs$="":� afs% afs$="selon" � afs$="seloff" 9�/mak$="":� mak% mak$="selon" � mak$="seloff" 9�#�puticonsprite(options%,2,lap$) :#�puticonsprite(options%,4,scr$) :#�puticonsprite(options%,6,dos$) :#�puticonsprite(options%,8,afs$) : $�puticonsprite(options%,11,mak$) :*$�puticondata(options%,13,clock$) :4#�puticondata(buffer%,3,buffer$) :>� :H :R,� �openlinked(wh1%,wh2%,w1%,h1%,w2%,h2%) :\x%=(1280-w1%)/2 :fy%=((1024-h1%)/2)+h1% :p�openup(wh1%,x%,y%,w1%,h1%) :z(�openup(wh2%,x%+20,y%-80,w1%-40,h2%) :�� :� :� � �volume :�4ș "Wimp_GetPointerInfo",,pointer%:x%=pointer%!0 :�:pointer%!0=control%:ș "Wimp_GetWindowState",,pointer% :�Ax%-=pointer%!4:pointer%!4=19:ș "Wimp_GetIconState",,pointer% :�6x%-=pointer%!8:� x% now is distance along icon #19 :�%pointer%!0=control%:pointer%!4=18 :�$ș "Wimp_GetIconState",,pointer% :�"ș "Wimp_DeleteIcon",,pointer% :�1pointer%!4=control%:pointer%!16=pointer%!8+x% :�$ș "Wimp_CreateIcon",,pointer%+4 :�Fpointer%!0=control%:pointer%!4=19:ș "Wimp_GetIconState",,pointer% ;Sș "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20 ;0cvol%=�int(x%*volunit):� cvol%>255 cvol%=255 ;� ;$ ;.� �int(int) ;8int+=0.5 ;B=�(int) ;L ;V� �volfill ;`� cvol%>10 � ;j sc=cvol%/255 ;tE sccb%!20=�vol(sccb%!20,sc):sccb%!(32+20)=�vol(sccb%!(32+20),sc) ;~* sccb%!(64+20)=�vol(sccb%!(64+20),sc) ;�* sccb%!(96+20)=�vol(sccb%!(96+20),sc) ;�, sccb%!(128+20)=�vol(sccb%!(128+20),sc) ;�, sccb%!(160+20)=�vol(sccb%!(160+20),sc) ;�, sccb%!(192+20)=�vol(sccb%!(192+20),sc) ;�, sccb%!(224+20)=�vol(sccb%!(224+20),sc) ;�� ;�+ � I%=0 � 224 � 32:sccb%!(I%+20)=255:� ;�� ;�� ;� ;�� �vol(vol%,scl) ;�/vol1=255-vol%:vol1=vol1*scl:=�int(255-vol1) <