Home » Archimedes archive » Acorn Computing » 1994 05 subscription disc.adf » 9405s » Miscellany/Eff/!Effex/!RunImage
Miscellany/Eff/!Effex/!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 05 subscription disc.adf » 9405s |
Filename: | Miscellany/Eff/!Effex/!RunImage |
Read OK: | ✔ |
File size: | C9BB bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > !RunImage 20REM Effex sample editor 30REM LEN Paul Mason, 1992 40 50SYS &10 TO env% 60env$=FNz(env%) 70a%=INSTR(env$,"Effex.!RunImage") 80a%+=LEN"Effex.!RunImage " 90env$=MID$(env$,a%+1) 100env$=MID$(env$,INSTR(env$,"-")+1) 110ON ERROR PROCerr(1) 120PROCinit 130PROCcre_menus(menus%,menus%+menu_size%) 140ON ERROR PROCerr(0) 150WHILE NOT quit% 160SYS &400C7,0,q% TO reason% 170PROChandle_reason(reason%,q%) 180IF env$<>"" PROCload(env$):env$="" 190ENDWHILE 200ON ERROR PROCerr(1) 210PROCquit_voice 220PROCXmem_quit 230END 240 250DEFPROChandle_reason(reason%,q%) 260CASE reason% OF 270WHEN 0 : IF sample_type%>=0 AND !Vcounter>0 AND tracking% PROCtrack 280WHEN 1 : PROCredraw 290WHEN 2 : PROCopen(q%) 300WHEN 3 : PROCclose(q%) 310WHEN 4 320WHEN 5 330WHEN 6 : PROCmclick 340WHEN 7 : PROCdragbox 350WHEN 8 : PROCkpress(q%!0,q%!4,q%!24) 360WHEN 9 : PROCmenusel 370WHEN 17,18 : PROCmess 380ENDCASE 390ENDPROC 400 410DEFPROCdragbox 420LOCAL a% 430SYS &400CF,,q% 440q%!24=q%!16 450q%!16=1:q%!20=q%!12:q%!28=q%!0:q%!32=q%!4 460q%!36=save_size%:q%!40=file_type% 470PROCextract_leaf:$(q%+44)=save_name$ 480q%!0=(44+LENsave_name$+5)AND(NOT3) 490q%!12=0:SYS &400E7,17,q%,q%!20 500saveref%=q%!8 510SYS &400D4,,-1 520ENDPROC 530 540DEFPROCdatasave_ack 550IF q%!12<>saveref% ENDPROC 560save_name$=FNz(q%+44) 570IF q%!36<>-1 PROCinsert_name:modified%=0 580CASE file_type% OF 590WHEN &631,&632,&633 600 SYS 8,10,save_name$,file_type%,,save_sample%,save_sample%+save_samp_size% 610WHEN &634 : PROCsave_eff(save_name$) 620WHEN &D3C : PROCsave_arm(save_name$) 630ENDCASE 640q%!12=q%!8:q%!16=3 650SYS &400E7,17,q%,q%!20 660ENDPROC 670 680DEFPROCsave_eff(name$) 690LOCAL file%,size%,rate% 700file%=OPENOUT(name$) 710BPUT#file%,sample_type% 720BPUT#file%,0:BPUT#file%,0:BPUT#file%,0 730PROCwput(save_samp_size%) 740PROCwput(28) 750PROCwput(save_caret%) 760PROCwput(save_sel_start%) 770PROCwput(save_sel_end%) 780rate%=VALFNXicon_getstr(win_main%,5)*(1<<24) 790PROCwput(rate%) 800SYS &C,2,file%,save_sample%,save_samp_size% 810CLOSE#file% 820OSCLI"SetType "+name$+" 634" 830ENDPROC 840 850DEFPROCsave_arm(name$) 860LOCAL file%,size%,rate% 870file%=OPENOUT(name$) 880BPUT#file%,VALFNXicon_getstr(win_main%,4) 890SYS &C,2,file%,save_sample%,save_samp_size% 900CLOSE#file% 910OSCLI"SetType "+name$+" D3C" 920ENDPROC 930 940DEFFNleaf(s$) 950LOCAL s2$:s2$="" 960IF INSTR(s$,".")=0 THEN =s$ 970WHILE RIGHT$(s$)<>"." AND RIGHT$(s$)<>":" 980s2$=RIGHT$(s$)+s2$ 990s$=LEFT$(s$) 1000ENDWHILE 1010=s2$ 1020 1030DEFFNpath(s$) 1040WHILE RIGHT$(s$)<>"." AND RIGHT$(s$)<>":" 1050s$=LEFT$(s$) 1060ENDWHILE 1070=s$ 1080 1090DEFPROCextract_leaf 1100save_name$=FNleaf(FNXicon_getstr(win_save%,1)) 1110ENDPROC 1120 1130DEFPROCinsert_name 1140CASE file_type% OF 1150WHEN &631 : sname_log$=save_name$ 1160WHEN &632 : sname_sgn$=save_name$ 1170WHEN &633 : sname_uns$=save_name$ 1180WHEN &634 : sname_eff$=save_name$ 1190WHEN &D3C : sname_arm$=save_name$ 1200WHEN &635 : sname_sel$=save_name$ 1210WHEN &636 : sname_lib$=save_name$ 1220ENDCASE 1230ENDPROC 1240 1250DEFPROCkpress(win%,icon%,key%) 1260CASE key% OF 1270WHEN 13 : IF win%=win_main%:PROCnext_caret(icon%) 1280 IF win%=win_save% PROCsave 1290WHEN &18F : PROCmove_caret(icon%,1) 1300WHEN &18E : PROCmove_caret(icon%,0) 1310OTHERWISE : IF NOT FNkey_ok(key%) SYS &400DC,key% 1320ENDCASE 1330ENDPROC 1340 1350DEFPROCsave 1360save_name$=FNXicon_getstr(win_save%,1) 1370PROCinsert_name 1380CASE file_type% OF 1390WHEN &631,&632,&633 1400 SYS 8,10,save_name$,file_type%,,save_sample%,save_sample%+save_samp_size% 1410WHEN &634 : PROCsave_eff(save_name$) 1420WHEN &D3C : PROCsave_arm(save_name$) 1430ENDCASE 1440SYS &400D4,,-1 1450ENDPROC 1460 1470DEFPROCnext_caret(ic%) 1480LOCAL a%,win%:win%=win_main% 1490CASE ic% OF 1500WHEN 5 : PROCset_rate(VAL(FNXicon_getstr(win%,5))) 1510 PROCset_caret(win%,4) 1520WHEN 4 : a%=VAL(FNXicon_getstr(win%,4)):IF a%=0 a%=50 1530 PROCset_rate(1000/a%) 1540 PROCset_caret(win%,5) 1550WHEN 18 : PROCset_caret(win%,18):PROCsc 1560WHEN 22 : PROCset_caret(win%,23) 1570WHEN 23 : PROCset_caret(win%,22):PROCss 1580WHEN 10 : PROCset_caret(win%,11) 1590WHEN 11 : PROCzoom(0,0) 1600 PROCset_caret(win%,10) 1610WHEN 25 : a%=VALFNXicon_getstr(win%,25) 1620 IF a%<0 a%=0 1630 IF a%>127 a%=127 1640 PROCXicon_setstr(win%,25,STR$a%) 1650 ?Vvol=a% 1660ENDCASE 1670ENDPROC 1680 1690DEFPROCmove_caret(ic%,up%) 1700LOCAL u%,d% 1710CASE ic% OF 1720WHEN 5 : u%=11:d%=4 1730WHEN 4 : u%=5:d%=18 1740WHEN 18 : u%=4:d%=22 1750WHEN 22 : u%=18:d%=23 1760WHEN 23 : u%=22:d%=25 1770WHEN 25 : u%=23:d%=10 1780WHEN 10 : u%=25:d%=11 1790WHEN 11 : u%=10:d%=5 1800ENDCASE 1810IF up% PROCset_caret(win_main%,u%) ELSE PROCset_caret(win_main%,d%) 1820ENDPROC 1830 1840DEFPROCset_rate(khz) 1850IF khz=0 khz=20 1860PROCXicon_setstr(win_main%,5,STR$khz) 1870PROCXicon_setstr(win_main%,4,STR$(1000/khz)) 1880ENDPROC 1890 1900DEFPROCset_caret(w%,i%) 1910LOCAL len%:len%=LEN(FNXicon_getstr(w%,i%)) 1920SYS &400D2,w%,i%,0,0,-1,len% 1930ENDPROC 1940 1950DEFPROCredraw 1960LOCAL more%,scl%,xp%,pos,inc,xo%,yo%,ss,se,car%,sss,sse 1970ss=sel_start%*1150*zoom/samp_size% 1980se=sel_end%*1150*zoom/samp_size% 1990car%=caret%*1150*zoom/samp_size% 2000SYS &35,-1,4 TO ,,scl%:scl%=1<<scl% 2010SYS &400C8,,q% TO more% 2020WHILE more% 2030xstart%=q%!28-q%!4+q%!20 2040xend%=q%!36-q%!4+q%!20 2050pos%=q%!28 2060pos=(xstart%-scl%)*samp_size%/zoom/1150 2070inc=scl%*samp_size%/zoom/1150 2080byte%=sample%?pos 2090xo%=q%!4-q%!20:yo%=q%!8 2100MOVE xstart%+xo%,byte%+yo% 2110SYS &400E6,4 2120FOR xp%=xstart%-scl% TO xend%+scl% STEP scl% 2130PLOTvdu%,xp%+xo%,sample%?pos+yo% 2140pos+=inc 2150NEXT 2160IF sel_start%>=0 SYS &400E6,7+(3<<4):RECTANGLEFILL ss+xo%,yo%,se-ss,256 2170IF caret%>=0 SYS &400E6,11+(3<<4):LINE car%+xo%,yo%,car%+xo%,yo%+256 2180SYS &400E6,8:LINE xo%,yo%,xo%,yo%+256 2190SYS &400E6,15:LINE xo%+1150*zoom-1,yo%,xo%+1150*zoom-1,yo%+256 2200SYS &400CA,,q% TO more% 2210ENDWHILE 2220ENDPROC 2230 2240DEFPROCfresh(win%,q%) 2250!q%=win%:SYS &400CB,,q% 2260PROCopen(q%) 2270ENDPROC 2280 2290DEFPROCzoom(da%,db%) 2300LOCAL a%,b%,scl% 2310a%=VALFNXicon_getstr(win_main%,10) 2320a%+=da% 2330IF a%>999 a%=999 2340b%=VALFNXicon_getstr(win_main%,11) 2350b%+=db% 2360IF b%>999 b%=999 2370IF a%<1 a%=1 2380IF b%<1 b%=1 2390IF b%>a% b%=a% 2400zoom=a%/b% 2410PROCXicon_setstr(win_main%,10,STR$a%) 2420PROCXicon_setstr(win_main%,11,STR$b%) 2430!q%=win_pane%:SYS &400CB,,q% 2440IF q%!20>1150*(zoom-1)-1 q%!20=1150*(zoom-1)-1:SYS &400C5,,q% 2450q%!4=0:q%!8=-256 2460q%!12=q%!4+1150*zoom 2470q%!16=0 2480SYS &35,-1,4 TO ,,scl%:scl%=1<<scl% 2490a%=q%!8MODscl% 2500q%!12=q%!12+(scl%-a%) 2510SYS &400D7,win_pane%,q%+4 2520!q%=win_pane%:SYS &400CB,,q% 2530SYS &400D1,win_pane%,q%!20,-256,q%!20+1150,0 2540ENDPROC 2550 2560DEFPROCopen(q%) 2570LOCAL a%:a%=q%+1024 2580IF !q%=win_main% THEN 2590a%!0=win_pane%:SYS &400CB,,a% 2600a%!28=q%!28:q%!28=win_pane% 2610a%!12=a%!12-a%!4:a%!16=a%!16-a%!8 2620a%!4=q%!4+panex% 2630a%!8=q%!8+paney% 2640a%!12=a%!12+a%!4:a%!16=a%!16+a%!8 2650SYS &400C5,,a% 2660ENDIF 2670SYS &400C5,,q% 2680ENDPROC 2690 2700DEFPROCclose(q%) 2710SYS &400C6,,q% 2720IF !q%<>win_main% ENDPROC 2730!q%=win_pane% 2740SYS &400C6,,q% 2750ENDPROC 2760 2770DEFPROCmclick 2780LOCAL xpos%,win%,but%,ic% 2790xpos%=!q%:but%=q%!8:win%=q%!12:ic%=q%!16 2800REM 2810IF q%!8=2 THEN 2820 IF q%!12=-2 AND q%!16=iconbar% PROCXmenu_iconbar(menu_icon%) 2830 IF q%!12=win_main% OR q%!12=win_pane% PROCXmenu_main(menu_main%) 2840ENDIF 2850REM 2860IF (q%!8=4 OR q%!8=1) AND q%!12=win_pane% THEN 2870ENDIF 2880IF q%!8=4 THEN 2890 IF q%!12=-2 AND q%!16=iconbar% AND sample_type%>-1 PROCfresh(win_main%,q%) 2900 IF q%!12=win_pane% PROCset_sel 2910 IF win%=win_main% AND ic%=28 PROCply 2920ENDIF 2930REM 2940IF q%!8=1 THEN 2950 IF q%!12=win_pane% PROCset_car 2960ENDIF 2970REM 2980IF (but%=4 OR but%=1) AND win%=win_pane% PROCscroll_pane(xpos%,q%+512) 2990IF but%<>2 AND win%=win_main% PROChandle_winmain(ic%,but%) 3000IF win%=win_save% PROChandle_saves(ic%,but%) 3010ENDPROC 3020 3030DEFPROCply 3040LOCAL vol%,rate:vol%=VALFNXicon_getstr(win_main%,25) 3050rate=VALFNXicon_getstr(win_main%,5) 3060PROCplay(sample%,sample%+samp_size%-1,vol%,rate) 3070ENDPROC 3080 3090DEFPROCply_sel 3100PROCcheck_all(0) 3110LOCAL vol%,rate:vol%=VALFNXicon_getstr(win_main%,25) 3120rate=VALFNXicon_getstr(win_main%,5) 3130PROCplay(sample%+sel_start%,sample%+sel_end%,vol%,rate) 3140ENDPROC 3150 3160DEFPROChandle_saves(ic%,but%) 3170CASE TRUE OF 3180WHEN ic%=0 AND (but%=16 OR but%=64) : PROCdrag_save 3190WHEN ic%=2 AND (but%<>2) : PROCsave 3200ENDCASE 3210ENDPROC 3220 3230DEFPROCdrag_save 3240LOCAL x0%,y0%,shft% 3250!q%=win_save%:SYS &400CB,,q% 3260x0%=q%!4:y0%=q%!16 3270q%!4=0:SYS &400CE,,q% 3280q%!4=5:q%!8+=x0%:q%!12=y0%+q%!12 3290q%!16+=x0%:q%!20=y0%+q%!20 3300SYS &35,-1,11 TO ,,x0% 3310SYS &35,-1,4 TO ,,shft%:x0%=x0%<<shft% 3320SYS &35,-1,12 TO ,,y0% 3330SYS &35,-1,5 TO ,,shft%:y0%=y0%<<shft% 3340q%!24=0:q%!28=0:q%!32=x0%:q%!36=y0% 3350SYS &400D0,,q% 3360ENDPROC 3370 3380DEFPROChandle_winmain(ic%,but%) 3390LOCAL mul%:IF INKEY(-1) mul%=16 ELSE mul%=1 3400IF but%=1 but%=-1 ELSE but%=1 3410CASE ic% OF 3420WHEN 14 : PROCzoom(but%*mul%,0) 3430WHEN 15 : PROCzoom(-but%*mul%,0) 3440WHEN 13 : PROCzoom(0,but%*mul%) 3450WHEN 16 : PROCzoom(0,-but%*mul%) 3460WHEN 27 : PROCvol(but%*mul%) 3470WHEN 26 : PROCvol(-but%*mul%) 3480WHEN 9 : PROCpitch_bend(but%*mul%) 3490WHEN 29 : PROCpitch_bend(-but%*mul%) 3500WHEN 19 : PROCcrr(but%*mul%) 3510WHEN 20 : PROCcrr(-but%*mul%) 3520ENDCASE 3530ENDPROC 3540 3550DEFPROCvol(inc%) 3560LOCAL vol%:vol%=VALFNXicon_getstr(win_main%,25) 3570vol%+=inc%:IF vol%>127 vol%=127 3580IF vol%<0 vol%=0 3590PROCXicon_setstr(win_main%,25,STR$vol%) 3600?Vvol=vol% 3610ENDPROC 3620 3630DEFPROCset_sel 3640LOCAL x%,ox%,oldss%,oldse%:x%=q%!0 3650!q%=win_pane%:SYS &400CB,,q% 3660x%=x%-q%!4+q%!20:x%=x%*samp_size%/1150/zoom 3670IF sel_start%=-1 THEN 3680sel_start%=x%:sel_end%=x%+1 3690IF sel_end%>=samp_size% sel_start%-=samp_size%-2:sel_end%=samp_size%-1 3700PROCnew_selection 3710ELSE 3720IF x%<>sel_start% AND x%<>sel_end% THEN 3730IF ABS(sel_start%-x%)<ABS(sel_end%-x%) ox%=sel_start%:sel_start%=x% ELSE ox%=sel_end%:sel_end%=x% 3740IF sel_end%<=sel_start% sel_start%=sel_end%-1 3750IF sel_start%<0 sel_start%=0 3760IF sel_end%<=sel_start% sel_end%=sel_start%+1 3770IF x%>ox% SWAP x%,ox% 3780x%=x%*1150*zoom/samp_size% 3790ox%=ox%*1150*zoom/samp_size% 3800SYS &400D1,win_pane%,x%-8,-256,ox%+8,0 3810PROCnew_selection 3820ENDIF 3830ENDIF 3840ENDPROC 3850 3860DEFPROCscroll_pane(x%,q%) 3870!q%=win_pane%:SYS &400CB,,q% 3880IF x%>q%!12-16 PROCscrollx(win_pane%,(16-q%!12+x%)*4,q%+512) 3890IF x%<q%!4+16 PROCscrollx(win_pane%,(x%-q%!4-16)*4,q%+512) 3900ENDPROC 3910 3920DEFPROCscrollx(win%,off%,q%) 3930!q%=win%:SYS &400CB,,q% 3940q%!20=q%!20+off% 3950SYS &400C5,,q% 3960ENDPROC 3970 3980DEFPROCss 3990LOCAL a%,b%,x0%,y0% 4000a%=VAL(FNXicon_getstr(win_main%,22)) 4010b%=VAL(FNXicon_getstr(win_main%,23)) 4020IF a%>b% THEN 4030SWAP a%,b% 4040PROCXicon_putstr(win_main%,22,STR$a%) 4050PROCXicon_putstr(win_main%,23,STR$b%) 4060ENDIF 4070x0%=sel_start%*1150*zoom/samp_size% 4080x1%=sel_end%*1150*zoom/samp_size% 4090SYS &400D1,win_pane%,x0%-8,-256,x1%+8,0 4100sel_start%=a% 4110sel_end%=b% 4120IF sel_start%>=0 THEN 4130x0%=sel_start%*1150*zoom/samp_size% 4140x1%=sel_end%*1150*zoom/samp_size% 4150SYS &400D1,win_pane%,x0%-8,-256,x1%+8,0 4160ELSE 4170sel_start%=-1 4180sel_end%=-1 4190ENDIF 4200ENDPROC 4210 4220DEFPROCset_car 4230LOCAL x%,pos%:pos%=q%!0 4240x%=caret%*1150*zoom/samp_size% 4250SYS &400D1,win_pane%,x%-8,-256,x%+8,0 4260x%=caret% 4270!q%=win_pane%:SYS &400CB,,q% 4280caret%=(pos%-q%!4+q%!20)*samp_size%/1150/zoom 4290IF caret%<0 caret%=0 4300x%=caret%*1150*zoom/samp_size% 4310SYS &400D1,win_pane%,x%-8,-256,x%+8,0 4320PROCXicon_setstr(win_main%,18,STR$caret%) 4330IF tracking% AND !Vcounter>0 AND caret%<!Vsend-sample% THEN 4340!Vcounter=caret%+sample% 4350ENDIF 4360ENDPROC 4370 4380DEFPROCtrack 4390LOCAL x% 4400x%=caret%*1150*zoom/samp_size% 4410SYS &400D1,win_pane%,x%-2,-256,x%+2,0 4420caret%=!Vcounter-sample% 4430x%=caret%*1150*zoom/samp_size% 4440SYS &400D1,win_pane%,x%-2,-256,x%+2,0 4450PROCXicon_setstr(win_main%,18,STR$caret%) 4460IF caret%>=!Vsend-sample% !Vcounter=0 4470ENDPROC 4480 4490DEFPROCcrr(dir%) 4500IF caret%<0 ENDPROC 4510LOCAL x% 4520x%=caret%*1150*zoom/samp_size% 4530SYS &400D1,win_pane%,x%-8,-256,x%+8,0 4540caret%+=dir% 4550IF caret%<0 caret%=0 4560IF caret%>=samp_size% caret%=samp_size%-1 4570x%=caret%*1150*zoom/samp_size% 4580SYS &400D1,win_pane%,x%-8,-256,x%+8,0 4590PROCXicon_setstr(win_main%,18,STR$caret%) 4600IF tracking% AND !Vcounter>0 AND caret%<!Vsend-sample% THEN 4610!Vcounter=caret%+sample% 4620ENDIF 4630ENDPROC 4640 4650DEFPROCsc 4660LOCAL a%,x% 4670a%=VAL(FNXicon_getstr(win_main%,18)) 4680x%=caret%*1150*zoom/samp_size% 4690SYS &400D1,win_pane%,x%-8,-256,x%+8,0 4700caret%=a% 4710IF caret%<0 caret%=-1 4720IF caret%>=0 THEN 4730x%=caret%*1150*zoom/samp_size% 4740SYS &400D1,win_pane%,x%-8,-256,x%+8,0 4750ENDIF 4760ENDPROC 4770 4780DEFPROCmess 4790IF q%!16=0 quit%=-1:ENDPROC 4800IF q%!16=1 PROCdata_save 4810IF q%!16=&400C0 PROCmenu_warn(q%!32,q%!36,q%!40) 4820IF q%!16=3 THEN IF FNgood_load(q%!40,FNz(q%+44),q%!36,1) PROCloadack 4830IF q%!16=2 PROCdatasave_ack 4840IF q%!16=5 THEN 4850 ok%=0:IF q%!40>&630 AND q%!40<&635 ok%=-1 4860 IF q%!40=&D3C ok%=-1 4870 IF ok% THEN 4880 PROCloadack 4890 a%=FNgood_load(q%!40,FNz(q%+44),q%!36,0) 4900 ENDIF 4910ENDIF 4920ENDPROC 4930 4940DEFPROCdata_save 4950q%!36=-1:$(q%+44)="<Wimp$Scrap>"+CHR$0 4960q%!12=q%!8:q%!16=2 4970SYS &400E7,17,q%,q%!4 4980saveref%=-1 4990VDU7 5000ENDPROC 5010 5020DEFPROCloadack 5030q%!12=q%!8:q%!16=4:q%!36=-1 5040SYS &400E7,17,q%,q%!4 5050ENDPROC 5060 5070DEFPROCload(n$) 5080SYS 8,17,n$ TO ,,typ% 5090typ%=(typ%AND&FFF00)>>8 5100OSCLI"Set Effex$Type "+STR$typ% 5110typ%=FNgood_load(typ%,n$,-1,1) 5120ENDPROC 5130 5140DEFFNgood_load(type%,name$,size%,drag%) 5150LOCAL ok%:ok%=-1 5160IF sample_type%>=0 ok%=FNcheck_load 5170IF ok%=-1 THEN 5180CASE type% OF 5190WHEN &631 : ok%=FNload_raw(name$,0) 5200WHEN &632 : ok%=FNload_raw(name$,1) 5210WHEN &633 : ok%=FNload_raw(name$,2) 5220WHEN &634 : ok%=FNload_eff(name$) 5230WHEN &D3C : ok%=FNload_arm(name$) 5240OTHERWISE : IF drag% ok%=FNload_raw(name$,2) 5250ENDCASE 5260ENDIF 5270IF ok% THEN 5280 q%!512=win_pane% 5290 SYS &400C6,,q%+512 5300 PROCfresh(win_main%,q%+512) 5310 IF name$<>"<Wimp$Scrap>" THEN 5320 sname_log$=name$ 5330 sname_uns$=name$ 5340 sname_sgn$=name$ 5350 sname_eff$=name$ 5360 sname_arm$=name$ 5370 ELSE 5380 OSCLI"Remove <Wimp$Scrap>" 5390 ENDIF 5400ENDIF 5410=ok% 5420 5430DEFFNcheck_load 5440LOCAL go%,act%,win%,icon% 5450PROCfresh(win_load%,q%+512) 5460REM q%!512=win_load%:SYS "Wimp_GetWindowState",,q%+512 5470REM MOUSE RECTANGLE q%!516,q%!520,q%!524-q%!516,q%!528-q%!520 5480REPEAT 5490PROCdiapoll 5500UNTIL win%=win_load% AND icon%=10 5510act%=1 5520FOR go%=2 TO 9 5530q%!512=win_load%:q%!516=go%:SYS &400CE,,q%+512 5540IF (q%!(512+24)AND(1<<21))<>0 act%=go%-2:go%=9 5550NEXT 5560go%=OPENIN(name$):size%=EXT#go%:CLOSE#go% 5570CASE act% OF 5580WHEN 0 : PROCXmem_release(sample%):sample_type%=-1:go%=-1 5590WHEN 1 : go%=0 5600WHEN 2 : PROCav(0) 5610WHEN 3 : IF caret%>=0 PROCav(caret%) ELSE go%=0 5620WHEN 4 : PROCin(0) 5630WHEN 5 : IF caret%>=0 PROCin(caret%) ELSE go%=0 5640WHEN 6 : PROCov(0) 5650WHEN 7 : IF caret%>=0 PROCov(caret%) ELSE go%=0 5660OTHERWISE : go%=1 5670ENDCASE 5680VDU7 5690q%!512=win_load% 5700SYS &400C6,,q%+512 5710REM MOUSE RECTANGLE -4000,-4000,4000,4000 5720=go% 5730 5740DEFPROCav(pos%) 5750win%=FNXmem_claim(size%) 5760SYS 8,16,name$,win%,0 5770A%=win%:B%=win%+size%-1 5780C%=sample%+pos%:D%=sample%+samp_size%-1 5790E%=samp_centre%:CALL mix 5800PROCXmem_release(win%) 5810go%=1 5820ENDPROC 5830 5840DEFPROCin(pos%) 5850PROCXmem_delta(sample%,size%) 5860PROCcopy(pos%,samp_size%-1,pos%+size%) 5870SYS 8,16,name$,sample%+pos%,0 5880ENDPROC 5890 5900DEFPROCov(pos%) 5910IF samp_size%-pos%<size% size%=samp_size%-pos% 5920win%=OPENIN(name$) 5930SYS &C,4,win%,sample%+pos%,size% 5940CLOSE#win% 5950ENDPROC 5960 5970DEFPROCdiapoll 5980LOCAL r% 5990REPEAT 6000SYS &400C7,0,q%+512 TO r% 6010CASE r% OF 6020WHEN 2 : PROCopen(q%+512) 6030WHEN 3 : PROCopen(q%+512) 6040OTHERWISE : PROChandle_reason(r%,q%+512) 6050ENDCASE 6060UNTIL r%=6 AND q%!(512+8)<>2 6070win%=q%!(512+12):icon%=q%!(512+16) 6080ENDPROC 6090 6100DEFFNload_raw(name$,stype%) 6110LOCAL file%,pos%,not%,size% 6120file%=OPENIN(name$):size%=EXT#file%:CLOSE#file% 6130pos%=FNXmem_claim(size%) 6140IF pos%=0 ERROR 1,"Not enough memory (I need "+STR$size%+" bytes)" 6150SYS 8,16,name$,pos%,0 6160sample%=pos%:samp_size%=size% 6170sample_type%=stype% 6180sel_start%=-1 6190sel_end%=-1 6200PROCnew_selection 6210PROCnew_sample_type 6220PROCclr_all 6230CASE stype% OF 6240WHEN 0 : samp_centre%=128 6250WHEN 1 : samp_centre%=128 6260WHEN 2 : samp_centre%=0 6270ENDCASE 6280=-1 6290 6300DEFFNwget(pos%) 6310LOCAL a% 6320PTR#file%=pos% 6330a%=(BGET#file%)<<0 6340a%+=(BGET#file%)<<8 6350a%+=(BGET#file%)<<16 6360a%+=(BGET#file%)<<24 6370=a% 6380 6390DEFFNbget(pos%) 6400PTR#file%=pos% 6410=BGET#file% 6420 6430DEFPROCwput(w%) 6440BPUT#file%,(w%AND&FF)>>0 6450BPUT#file%,(w%AND&FF00)>>8 6460BPUT#file%,(w%AND&FF0000)>>16 6470BPUT#file%,(w%AND&FF000000)>>24 6480ENDPROC 6490 6500DEFFNload_eff(n$) 6510LOCAL file%,pos%,not%,size%,rate 6520file%=OPENIN(name$):size%=FNwget(4) 6530pos%=FNXmem_claim(size%) 6540IF pos%=0 ERROR 1,"Not enough memory (I need "+STR$size%+" bytes)" 6550SYS &C,3,file%,pos%,size%,FNwget(8) 6560sample%=pos%:samp_size%=size% 6570sample_type%=FNbget(0) 6580caret%=FNwget(12) 6590sel_start%=FNwget(16) 6600sel_end%=FNwget(20) 6610rate=FNwget(24)/(1<<24) 6620PROCXicon_setstr(win_main%,5,STR$rate) 6630PROCXicon_setstr(win_main%,4,STR$(1000/rate)) 6640CLOSE#file% 6650PROCnew_selection 6660PROCnew_sample_type 6670CASE sample_type% OF 6680WHEN 0 : samp_centre%=128 6690WHEN 1 : samp_centre%=128 6700WHEN 2 : samp_centre%=0 6710ENDCASE 6720=-1 6730 6740DEFFNload_arm(n$) 6750LOCAL file%,pos%,not%,size%,rate 6760file%=OPENIN(name$):size%=EXT#file%-1 6770pos%=FNXmem_claim(size%) 6780IF pos%=0 ERROR 1,"Not enough memory (I need "+STR$size%+" bytes)" 6790SYS &C,3,file%,pos%,size%,1 6800sample%=pos%:samp_size%=size% 6810sample_type%=2 6820sel_start%=-1 6830sel_end%=-1 6840rate=1000/FNbget(0) 6850PROCXicon_setstr(win_main%,5,STR$rate) 6860PROCXicon_setstr(win_main%,4,STR$(1000/rate)) 6870CLOSE#file% 6880PROCnew_selection 6890PROCnew_sample_type 6900samp_centre%=0 6910=-1 6920 6930DEFPROCmenu_warn(a%,b%,c%) 6940IF a%=1 THEN 6950 PROCsavewinp(b%) 6960 save_sample%=sample% 6970 save_samp_size%=samp_size% 6980 save_caret%=caret% 6990 save_sel_start%=sel_start% 7000 save_sel_end%=sel_end% 7010ELSE 7020 IF a%=0 AND b%=1 : PROCopen_sinfo:SYS &400E8,,q%!20,q%!24,q%!28 7030 IF a%=2 AND b%=11 THEN 7040 PROCsavewinp(c%) 7050 save_sample%=sample%+sel_start% 7060 save_samp_size%=sel_end%-sel_start% 7070 save_caret%=caret%-sel_start% 7080 save_sel_start%=0 7090 save_sel_end%=save_samp_size% 7100 IF save_caret%<0 save_caret%=0 7110 IF save_caret%>=save_samp_size% save_caret%=0 7120 ENDIF 7130ENDIF 7140ENDPROC 7150 7160DEFPROCsavewinp(b%) 7170 CASE b% OF 7180 WHEN 0 : $save_txt%=sname_log$ 7190 PROCsavewin("631") 7200 save_size%=samp_size% 7210 WHEN 1 : $save_txt%=sname_sgn$ 7220 PROCsavewin("632") 7230 save_size%=samp_size% 7240 WHEN 2 : $save_txt%=sname_uns$ 7250 PROCsavewin("633") 7260 save_size%=samp_size% 7270 WHEN 3 : $save_txt%=sname_eff$ 7280 PROCsavewin("634") 7290 save_size%=samp_size% 7300 WHEN 4 : $save_txt%=sname_arm$ 7310 PROCsavewin("D3C") 7320 save_size%=samp_size% 7330 ENDCASE 7340ENDPROC 7350 7360DEFPROCsavewin(file_type$) 7370$save_valid%="Sfile_"+file_type$ 7380file_type%=EVAL("&"+file_type$) 7390SYS &400E8,,q%!20,q%!24,q%!28 7400ENDPROC 7410 7420DEFPROCinit 7430icon_size%=4:menu_size%=8 7440icon_size%=icon_size%*1024:DIM icons% icon_size% 7450menu_size%=menu_size%*1024:DIM menus% menu_size%,q% 2048+512 7460DIM save_valid% 16,save_txt% 255,code% 1024,L%-1 7470Xtemp%=q%+512:PROCXwimp_init("Effex editor") 7480RESTORE 20150:PROCXwimp_templates(icons%,icons%+icon_size%) 7490PROCXmem_init(32) 7500quit%=0 7510num_libs%=0 7520DIM lib_name$(15),lib_pos%(15),lib_size%(15) 7530PROCvars 7540PROCcreicon 7550PROCgetwininfo 7560PROCinfo_win 7570PROCassem(code%) 7580PROCinit_voice 7590samp_size%=0:sample%=0:vdu%=5 7600zoom=1:sample_type%=-1:sel_start%=-1:sel_end%=-1 7610caret%=0:play_rate%=&1800 7620use_selection%=0:tracking%=0 7630ENDPROC 7640 7650DEFPROCvars 7660sname_log$="LogSample" 7670sname_uns$="RawSample" 7680sname_sgn$="SignSample" 7690sname_eff$="Sample" 7700sname_arm$="ArmaSample" 7710sname_sel$="Selection" 7720sname_lib$="SampLib" 7730mod0$="Y EOR (X AND 255) EOR (128*(X MOD2))" 7740mod1$="" 7750mod2$="" 7760mod3$="" 7770mod4$="" 7780ENDPROC 7790 7800DEFPROCgetwininfo 7810LOCAL a%:a%=q%+1024 7820!q%=win_main% 7830!a%=win_pane% 7840SYS &400CB,,q% 7850SYS &400CB,,a% 7860panex%=a%!4-q%!4 7870paney%=a%!8-q%!8 7880ENDPROC 7890 7900DEFPROCerr(fat%) 7910err$=REPORT$:IF INKEY(-3)=0 err$+=" at line "+STR$ERL 7920IF INKEY(-1) OSCLI"Set Err$Err "+err$:END 7930!q%=ERR:$(q%+4)=err$ 7940SYS &400DF,q%,3,"Effex" TO ,resp% 7950IF resp%<>1 quit%=-1 7960IF quit% AND INKEY(-1) END 7970IF fat%<>0 END 7980ENDPROC 7990 8000DEFPROCinfo_win 8010PROCXicon_setstr(win_info%,2,"� Paul Mason, 1993") 8020PROCXicon_setstr(win_info%,3,"1.02 (08-Apr-1993)") 8030ENDPROC 8040 8050DEFPROCcreicon 8060!q%=-1:q%!4=0:q%!8=0:q%!12=64:q%!16=64 8070q%!20=&1700303A:$(q%+24)="!effex" 8080SYS &400C2,,q% TO iconbar% 8090ENDPROC 8100 8110DEFPROCcre_menus(start%,end%) 8120PROCcrem_icon 8130PROCcrem_main 8140ENDPROC 8150 8160DEFPROCcrem_icon 8170PROCXmenu_start("Effex",start%,end%):menu_icon%=r0% 8180PROCXmenu_additem("Info",win_info%) 8190PROCXmenu_additem("Clear all",-1) 8200PROCXmenu_additem("Quit",-1) 8210PROCXmenu_end(start%,end%) 8220ENDPROC 8230 8240DEFPROCmenusel 8250SYS &400CF,,q%+1024 8260adjust%=(q%!(1024+8)=1) 8270CASE Xmenu_ptr% OF 8280WHEN menu_icon% : PROCdecm_icon 8290WHEN menu_main% : PROCdecm_main 8300ENDCASE 8310IF adjust% SYS &400D4,,Xmenu_ptr%,Xmenu_x%,Xmenu_y% 8320ENDPROC 8330 8340DEFPROCdecm_icon 8350CASE q%!0 OF 8360WHEN 1 : IF sample_type%>=0 PROCXmem_release(sample%):sample_type%=-1 8370 !q%=win_main%:PROCclose(q%) 8380WHEN 2 : quit%=-1 8390ENDCASE 8400ENDPROC 8410 8420DEFPROCopen_save(win%) 8430CASE win% OF 8440WHEN 0 : PROCosavewin("631",sname_log$) 8450WHEN 1 : PROCosavewin("632",sname_sgn$) 8460WHEN 2 : PROCosavewin("633",sname_uns$) 8470WHEN 3 : PROCosavewin("634",sname_eff$) 8480WHEN 4 : PROCosavewin("D3C",sname_arm$) 8490ENDCASE 8500ENDPROC 8510 8520DEFPROCosavewin(type$,a$) 8530$save_txt%=a$ 8540SYS &400CF,,q%+1024 8550$save_valid%="Sfile_"+type$ 8560file_type%=EVAL("&"+type$) 8570save_size%=samp_size% 8580SYS &400D4,,win_save%,q%!1024,q%!1028 8590ENDPROC 8600 8610DEFFNkey_ok(k%) 8620LOCAL ok%:ok%=-1 8630PROCvalid_sel 8640CASE k%+64 OF 8650WHEN ASC"A" : PROCadj_sel(0,samp_size%-1) 8660WHEN ASC"C" : PROCcopy_sel 8670WHEN ASC"I" : PROCfadein(Sstart%,Send%) 8680WHEN ASC"L" : PROCXicon_setstr(win_main%,25,"127"):?Vvol=127 8690WHEN ASC"O" : PROCfadeout(Sstart%,Send%) 8700WHEN ASC"P" : PROCply 8710WHEN ASC"S" : ?Vcommand=1:WAIT:?Vcommand=0:!Vcounter=0 8720WHEN ASC"T" : tracking%=NOTtracking%:PROCXmenu_tick(menu_track%,tracking%) 8730WHEN ASC"E" : PROCply_sel 8740WHEN ASC"V" : PROCmove_sel 8750WHEN ASC"X" : PROCdel_sel 8760WHEN ASC"Y" : PROCcopy2_sel 8770WHEN ASC"Z" : PROCadj_sel(-1,-1) 8780WHEN ASC"Z"+64 : PROCselzm 8790WHEN 32+64 : PROCcont 8800WHEN &183+64: PROCopen_save(3) 8810OTHERWISE : ok%=0 8820ENDCASE 8830=ok% 8840 8850DEFPROCcont 8860LOCAL s 8870IF sample_type%>=0 AND caret%>0 AND caret%<!Vsend THEN 8880s=VALFNXicon_getstr(win_main%,5) 8890PROCplay(caret%+sample%,!Vsend,0,s) 8900ENDIF 8910ENDPROC 8920 8930DEFPROCcheck_all(cc%) 8940IF caret%<0 AND cc%<>0 ERROR 1,"No caret present" 8950IF sel_start%<0 ERROR 1,"No selection" 8960ENDPROC 8970 8980DEFPROCcopy2_sel 8990PROCcheck_all(-1) 9000A%=sel_start%+sample% 9010B%=sel_end%+sample% 9020C%=caret%+sample% 9030D%=sample%+samp_size% 9040CALL copy 9050PROCred 9060ENDPROC 9070 9080DEFPROCinsert(pos%,size%) 9090PROCXmem_delta(sample%,size%) 9100PROCcopy(pos%,samp_size%-1,pos%+size%) 9110IF caret%>pos% caret%+=size% 9120samp_size%+=size% 9130IF sel_start%>pos% sel_start%+=size% 9140IF sel_end%>pos% sel_end%+=size% 9150ENDPROC 9160 9170DEFPROCdelete(start%,end%) 9180IF end%<samp_size%-1 PROCcopy(end%,samp_size%-1,start%) 9190PROCXmem_delta(sample%,start%-end%) 9200IF caret%>=start% AND caret%<=end% caret%=start% 9210IF sel_start%>=start% AND sel_start%<=end% sel_start%=start% 9220IF sel_end%>=start% AND sel_end%<=end% sel_end%=start% 9230IF caret%>start% caret%-=end%-start% 9240samp_size%-=end%-start% 9250ENDPROC 9260 9270DEFPROCdel_sel 9280PROCcheck_all(0) 9290PROCdelete(sel_start%,sel_end%) 9300sel_start%=-1 9310sel_end%=-1 9320PROCred 9330ENDPROC 9340 9350DEFPROCcopy_sel 9360PROCcheck_all(-1) 9370IF caret%>=sel_start% AND caret%<=sel_end% ERROR 1,"Cannot copy inside selection" 9380PROCinsert(caret%,sel_end%-sel_start%) 9390PROCcopy(sel_start%,sel_end%,caret%) 9400PROCred 9410ENDPROC 9420 9430DEFPROCmove_sel 9440LOCAL size%,pos% 9450PROCcheck_all(-1) 9460size%=sel_end%-sel_start% 9470pos%=FNXmem_claim(size%) 9480PROCcopy(sel_start%,sel_end%,pos%-sample%) 9490PROCdelete(sel_start%,sel_end%) 9500PROCinsert(caret%,size%) 9510PROCcopy(pos%-sample%,pos%-sample%+size%-1,caret%) 9520PROCXmem_release(pos%) 9530sel_start%=caret% 9540sel_end%=caret%+size% 9550PROCred 9560ENDPROC 9570 9580DEFPROCmodulate(s$,s%,e%) 9590LOCAL len%,Z:len%=e%-s% 9600Z=samp_centre% 9610SYS "Hourglass_On" 9620FOR X=s%-sample% TO e%-sample%:Y=sample%?X:Y=EVAL(s$):IF Y>255 Y=255 9630SYS &406C4,(X-s%+sample%)*100/len%:IF Y<0 Y=0 9640sample%?X=Y:Z=Y:NEXT 9650PROCred 9660SYS "Hourglass_Off" 9670ENDPROC 9680 9690DEFPROCselzm 9700PROCzoom(999,(sel_end%-sel_start%)*999/samp_size%) 9710!q%=win_pane%:SYS &400CC,,q% 9720q%!20=q%!52*sel_start%/samp_size% 9730SYS &400C5,,q% 9740ENDPROC 9750 9760DEFPROCdecm_main 9770CASE !q% OF 9780WHEN 0 : CASE q%!4 OF 9790 WHEN 2 : sample_type%=0:PROCnew_sample_type 9800 WHEN 3 : sample_type%=1:PROCnew_sample_type 9810 WHEN 4 : sample_type%=2:PROCnew_sample_type 9820 WHEN 5 : PROClin2log 9830 sample_type%=0:PROCnew_sample_type 9840 WHEN 6 : PROClog2lin 9850 sample_type%=1:PROCnew_sample_type 9860 WHEN 7 : PROCeor(128,sample%,samp_size%+sample%-1) 9870 sample_type%=sample_type%EOR3:PROCnew_sample_type 9880 WHEN 8 : PROCcalc_centre 9890 ENDCASE 9900WHEN 1 : CASE q%!4 OF 9910 WHEN 0,1,2,3,4 : PROCopen_save(q%!4) 9920 ENDCASE 9930WHEN 2 : CASE q%!4 OF 9940 WHEN 0 : PROCadj_sel(0,samp_size%-1) 9950 WHEN 1 : PROCadj_sel(-1,-1) 9960 WHEN 2 : PROCdel_sel 9970 WHEN 3 : PROCcopy_sel 9980 WHEN 4 : PROCcopy2_sel 9990 WHEN 5 : PROCmove_sel 10000 WHEN 6 : PROCmix 10010 WHEN 7 : PROCpremix 10020 WHEN 8 : PROCpostmix 10030 WHEN 9 : PROCselzm 10040 WHEN 10: PROCply_sel 10050 ENDCASE 10060WHEN 3 : PROCvalid_sel 10070 CASE q%!4 OF 10080 WHEN 0 : PROCtoggle_sel 10090 WHEN 1 : PROCreverse(Sstart%,Send%) 10100 WHEN 2 : PROCamp(0,Sstart%,Send%) 10110 WHEN 3 : PROCfadein(Sstart%,Send%) 10120 WHEN 4 : PROCfadeout(Sstart%,Send%) 10130 WHEN 5 : PROCamp((EVALFNz(amplify%))/100,Sstart%,Send%) 10140 WHEN 6 : PROCamp(100/EVALFNz(amplify%),Sstart%,Send%) 10150 WHEN 7 : PROCeor(EVALFNz(eor_const%),Sstart%,Send%) 10160 WHEN 8 : PROCadd(EVALFNz(add_const%),Sstart%,Send%) 10170 WHEN 9 : PROChpf(FNz(hp_filter%),Sstart%,Send%) 10180 WHEN 10: PROClpf(FNz(lp_filter%),Sstart%,Send%) 10190 WHEN 11: PROCcore(EVALFNz(core_filt%),Sstart%,Send%) 10200 WHEN 12: PROCloboost(1/EVALFNz(fboost%),Sstart%,Send%) 10210 WHEN 13: PROCloboost(EVALFNz(fboost%),Sstart%,Send%) 10220 WHEN 14: CASE q%!8 OF 10230 WHEN 0 : PROCmodulate(FNz(menu_mod0%),Sstart%,Send%) 10240 WHEN 1 : PROCmodulate(FNz(menu_mod1%),Sstart%,Send%) 10250 WHEN 2 : PROCmodulate(FNz(menu_mod2%),Sstart%,Send%) 10260 WHEN 3 : PROCmodulate(FNz(menu_mod3%),Sstart%,Send%) 10270 WHEN 4 : PROCmodulate(FNz(menu_mod4%),Sstart%,Send%) 10280 ENDCASE 10290 WHEN 15: CASE q%!8 OF 10300 WHEN 0,1: 10310 WHEN 2 : PROCecho(EVALFNz(echo_length%),VALFNz(echo_strength%)) 10320 WHEN 3 : PROCflange(EVALFNz(echo_length%),VALFNz(echo_strength%)) 10330 WHEN 4 : PROChallecho(EVALFNz(echo_length%),VALFNz(echo_strength%)) 10340 ENDCASE 10350 ENDCASE 10360REM WHEN 4 : CASE q%!4 OF 10370 REM WHEN 0 : IF q%!8>-1 PROCadd_libentry(FNz(lib_name%)) 10380 REM WHEN 1 : 10390 REM WHEN 2 : 10400 REM WHEN 3 : IF q%!8>-1 PROCdel_libentry(q%!8) 10410 REM ENDCASE 10420WHEN 4 : CASE q%!4 OF 10430 WHEN 0 : PROCply 10440 WHEN 1 : ?Vcommand=1:WAIT:?Vcommand=0:!Vcounter=0 10450 WHEN 2 : tracking%=NOTtracking%:PROCXmenu_tick(menu_track%,tracking%) 10460 WHEN 3 : PROCcont 10470 WHEN 4 : PROCpitch_bend(1) 10480 WHEN 5 : PROCpitch_bend(-1) 10490 WHEN 6 : PROCXicon_setstr(win_main%,25,"127"):?Vvol=127 10500 ENDCASE 10510ENDCASE 10520ENDPROC 10530 10540DEFPROCecho(D%,str) 10550A%=Sstart% 10560B%=Send% 10570C%=samp_centre% 10580E%=(str/100)*(1<<12) 10590CALL echo 10600ENDPROC 10610 10620DEFPROChallecho(a%,b) 10630WHILE b>=1 10640PROCflange(a%,b) 10650a%=a%*2:b=b/2 10660ENDWHILE 10670ENDPROC 10680 10690DEFPROCflange(D%,str) 10700A%=Sstart% 10710B%=Send% 10720C%=samp_centre% 10730E%=(str/100)*(1<<12) 10740CALL flange 10750ENDPROC 10760 10770DEFPROCvalid_sel 10780IF use_selection% AND sel_start%>=0 THEN 10790Sstart%=sel_start% 10800Send%=sel_end%:IF Send%>samp_size%-1 Send%=samp_size%-1 10810ELSE 10820Sstart%=0 10830Send%=samp_size%-1 10840ENDIF 10850Sstart%+=sample% 10860Send%+=sample% 10870ENDPROC 10880 10890DEFPROCcalc_centre 10900A%=sample%:B%=A%+samp_size%-1 10910C%=0:CALL calc_centre 10920samp_centre%=(!centre_val)/samp_size%+0.5 10930ENDPROC 10940 10950DEFPROClin2log 10960LOCAL vol%,a%,b%:SYS &40180,127 TO vol% 10970FOR a%=0 TO 255 10980SYS &40181,(a%-128)<<24 TO b% 10990q%?a%=b% 11000NEXT 11010A%=sample%:B%=samp_size%:C%=q% 11020CALL convert 11030SYS &40180,vol% 11040PROCred 11050ENDPROC 11060 11070DEFPROClog2lin 11080LOCAL vol%,a%,b%:SYS &40180,127 TO vol% 11090FOR a%=0 TO 255 11100SYS &40181,(a%-128)<<24 TO b% 11110q%?b%=a% 11120NEXT 11130A%=sample%:B%=samp_size%:C%=q% 11140CALL convert 11150SYS &40180,vol% 11160PROCred 11170ENDPROC 11180 11190DEFPROCloboost(val,A%,B%) 11200LOCAL a% 11210FOR a%=0 TO 255 11220q%!(a%<<2)=((255-a%)*val+a%)*(1<<12)DIV255 11230NEXT 11240D%=samp_centre% 11250C%=q% 11260CALL boost 11270PROCred 11280ENDPROC 11290 11300DEFPROChiboost(val,A%,B%) 11310LOCAL a% 11320FOR a%=0 TO 255 11330q%!(a%<<2)=(a%*val+255-a%)*(1<<12)DIV255 11340NEXT 11350D%=samp_centre% 11360C%=q% 11370CALL boost 11380PROCred 11390ENDPROC 11400 11410DEFPROCreverse(A%,B%) 11420CALL reverse 11430PROCred 11440ENDPROC 11450 11460DEFPROCamp(a,A%,B%) 11470C%=samp_centre% 11480D%=a*(1<<12) 11490CALL amp 11500PROCred 11510ENDPROC 11520 11530DEFPROCfadein(A%,B%) 11540C%=samp_centre% 11550CALL fadein 11560PROCred 11570ENDPROC 11580 11590DEFPROCfadeout(A%,B%) 11600C%=samp_centre% 11610CALL fadeout 11620PROCred 11630ENDPROC 11640 11650DEFPROCeor(C%,A%,B%) 11660CALL eor 11670PROCred 11680ENDPROC 11690 11700DEFPROCadd(C%,A%,B%) 11710CALL add 11720PROCred 11730ENDPROC 11740 11750DEFPROCred 11760!q%=win_pane%:SYS &400CB,,q% 11770SYS &400D1,win_pane%,q%!20,-256,q%!20+1150,0 11780ENDPROC 11790 11800DEFPROCinit_voice 11810LOCAL a% 11820SYS &40140,0,0,0,0,0 TO num_chan% 11830IF num_chan%>2 a%=num_chan% ELSE a%=2 11840SYS &40140,a%,0,0,0,0 11850SYS "Sound_InstallVoice",Vbase,0 TO ,voice_slot% 11860ENDPROC 11870 11880DEFPROCquit_voice 11890SYS &40140,num_chan%,0,0,0,0 11900SYS "Sound_RemoveVoice",,voice_slot% 11910ENDPROC 11920 11930DEFPROCpitch_bend(change) 11940play_rate%+=change*16 11950SOUND 2,&1FF,play_rate%,255 11960ENDPROC 11970 11980DEFPROChpf(s$,A%,B%) 11990CASE LEFT$(s$,1) OF 12000WHEN "+","-" : C%=samp_centre%+VALs$ 12010OTHERWISE : C%=VALs$ 12020ENDCASE 12030CALL hp_filt 12040PROCred 12050ENDPROC 12060 12070DEFPROClpf(s$,A%,B%) 12080CASE LEFT$(s$,1) OF 12090WHEN "+","-" : C%=samp_centre%+VALs$ 12100OTHERWISE : C%=VALs$ 12110ENDCASE 12120CALL lp_filt 12130PROCred 12140ENDPROC 12150 12160DEFPROCcore(v%,A%,B%) 12170E%=samp_centre% 12180C%=E%-v% 12190D%=E%+v% 12200CALL core_filt 12210PROCred 12220ENDPROC 12230 12240DEFPROCplay(pos%,end%,vol%,rate) 12250LOCAL a%,b%,c% 12260c%=tab_start:rate=INT(6144/12.5*rate+0.5) 12270!Vspos=pos%:!Vsend=end% 12280!Vconv_tab=tab_start 12290FOR a%=0 TO 255 12300CASE sample_type% OF 12310WHEN 0 : c%?a%=a% 12320WHEN 1 : SYS &40181,(a%-128)<<24 TO c%?a% 12330WHEN 2 : SYS &40181,((a%EOR128)-128)<<24 TO c%?a% 12340ENDCASE 12350NEXT 12360SYS &40185,2,voice_slot% 12370SYS &40142,2,0 12380SOUND 2,&17F,rate,255 12390play_rate%=rate 12400ENDPROC 12410 12420DEFPROCcopy(A%,B%,C%) 12430A%+=sample% 12440B%+=sample% 12450C%+=sample% 12460CALL copy 12470ENDPROC 12480 12490DEFPROCcheck_limits 12500LOCAL a%,b% 12510IF Sstart%<sample% Sstart%=sample% 12520IF Send%>=sample%+samp_size% Send%=sample%+samp_size%-1 12530a%=sel_start% 12540IF sel_start%<0 a%=0 12550b%=sel_end% 12560IF sel_end%>=sample%+samp_size% sel_end%=sample%+samp_size%-1 12570PROCadj_sel(a%,b%) 12580ENDPROC 12590 12600DEFPROCtoggle_sel 12610use_selection%=NOT use_selection% 12620PROCXmenu_tick(menu_selfx%,use_selection%) 12630ENDPROC 12640 12650DEFPROCclr_all 12660use_selection%=0 12670PROCXmenu_tick(menu_selfx%,0) 12680ENDPROC 12690 12700DEFPROCnew_sample_type 12710LOCAL shade%,tick%:shade%=%1111:tick%=0 12720CASE sample_type% OF 12730WHEN 0 : shade%=%0101:tick%=%1001:samp_centre%=128 12740WHEN 1 : shade%=%0010:tick%=%1010:samp_centre%=128 12750WHEN 2 : shade%=%0011:tick%=%0100:samp_centre%=0 12760ENDCASE 12770PROCXmenu_shade(menu_conv%+0,shade%AND1) 12780PROCXmenu_shade(menu_conv%+24,shade%AND2) 12790PROCXmenu_shade(menu_conv%+48,shade%AND4) 12800PROCXmenu_shade(menu_conv%+72,shade%AND8) 12810PROCXmenu_tick(menu_stype%+0,tick%AND1) 12820PROCXmenu_shade(menu_save%+0,(tick%AND7)EOR1) 12830PROCXmenu_tick(menu_stype%+24,tick%AND2) 12840PROCXmenu_shade(menu_save%+24,(tick%AND7)EOR2) 12850PROCXmenu_tick(menu_stype%+48,tick%AND4) 12860PROCXmenu_shade(menu_save%+48,(tick%AND7)EOR4) 12870PROCXmenu_shade(menu_save%+96,tick%AND8) 12880ENDPROC 12890 12900DEFPROCdo_libentries 12910LOCAL a% 12920IF num_libs%<=0 THEN 12930PROCXmenu_shade(menu_lib%+24*1,1) 12940PROCXmenu_shade(menu_lib%+24*2,1) 12950PROCXmenu_shade(menu_lib%+24*3,1) 12960$(sub_lib2%+40)="" 12970sub_lib2%!28=128 12980sub_lib2%!36=sub_lib%!36OR(1<<22) 12990ELSE 13000sub_lib2%!36=sub_lib%!36AND(NOT(1<<22)) 13010PROCXmenu_shade(menu_lib%+24*1,0) 13020PROCXmenu_shade(menu_lib%+24*2,0) 13030PROCXmenu_shade(menu_lib%+24*3,0) 13040FOR a%=0 TO num_libs%-1 13050$(sub_lib2%+40+a%*24)=LEFT$(lib_name$(a%),11) 13060sub_lib2%!(28+a%*24)=sub_lib2%!(28+a%*24)AND(NOT128) 13070NEXT 13080sub_lib2%!(4+num_libs%*24)=sub_lib2%!(4+num_libs%*24)OR128 13090ENDIF 13100ENDPROC 13110 13120DEFPROCadd_libentry(s$) 13130LOCAL a%,si% 13140s$=LEFT$(s$,11) 13150IF num_libs%>=16 ERROR 1,"Too many library entries (can only have 16)" 13160lib_name$(num_libs%)=s$ 13170si%=sel_end%-sel_start%+1 13180IF sel_start%<0 ERROR 1,"No selection to add!" 13190a%=FNXmem_claim(si%):IF a%=0 ERROR 1,"No room to add entry" 13200lib_pos%(num_libs%)=a% 13210lib_size%(num_libs%)=si% 13220num_libs%+=1 13230PROCdo_libentries 13240ENDPROC 13250 13260DEFPROCdel_libentry(s%) 13270LOCAL a% 13280PROCXmem_release(lib_pos%(s%)) 13290num_libs%-=1 13300IF s%>=num_libs% PROCdo_libentries:ENDPROC 13310FOR a%=s% TO num_libs%-1 13320lib_name$(a%)=lib_name$(a%+1) 13330lib_pos%(a%)=lib_pos%(a%+1) 13340lib_size%(a%)=lib_size%(a%+1) 13350PROCdo_libentries 13360ENDPROC 13370 13380DEFPROCadj_sel(a%,b%) 13390sel_start%=a%:sel_end%=b% 13400PROCnew_selection 13410!q%=win_pane%:SYS &400CB,,q% 13420SYS &400D1,win_pane%,q%!20,-256,q%!20+1149,0 13430ENDPROC 13440 13450DEFPROCsamp_mix(A%,B%,C%) 13460A%+=sample% 13470B%+=sample% 13480C%+=sample% 13490D%=sample%+samp_size%-1 13500E%=samp_centre%:CALL mix 13510ENDPROC 13520 13530DEFPROCmix 13540PROCcheck_all(-1) 13550IF caret%>=sel_start% AND caret%<=sel_end% ERROR 1,"Cannot mix within selection" 13560PROCsamp_mix(sel_start%,sel_end%,caret%) 13570ENDPROC 13580 13590DEFPROCpremix 13600LOCAL size% 13610PROCcheck_all(0) 13620size%=sel_end%-sel_start% 13630C%=sel_start%-size%+sample% 13640D%=sel_start%-1+sample% 13650A%=sel_start%+sample% 13660B%=sel_end%+sample% 13670E%=samp_centre%:CALL mix 13680ENDPROC 13690 13700DEFPROCpostmix 13710PROCcheck_all(0) 13720PROCsamp_mix(sel_start%,sel_end%,sel_end%+1) 13730ENDPROC 13740 13750DEFPROCnew_selection 13760CASE TRUE OF 13770WHEN sel_start%>=0 AND sel_end%>sel_start% 13780 PROCXmenu_shade(menu_sel%+24*0,0) 13790 PROCXmenu_shade(menu_sel%+24*1,0) 13800 PROCXmenu_shade(menu_sel%+24*2,0) 13810 PROCXmenu_shade(menu_sel%+24*3,0) 13820 PROCXmenu_shade(menu_sel%+24*4,0) 13830 PROCXmenu_shade(menu_sel%+24*5,0) 13840 PROCXmenu_shade(menu_sel%+24*6,0) 13850 PROCXmenu_shade(menu_sel%+24*7,0) 13860 PROCXmenu_shade(menu_sel%+24*8,0) 13870 PROCXmenu_shade(menu_sel%+24*9,0) 13880 PROCXmenu_shade(menu_sel%+24*10,0) 13890 PROCXmenu_shade(menu_sel%+24*11,0) 13900 PROCXmenu_shade(menu_lib%,0) 13910 PROCXmenu_shade(menu_selfx%,0) 13920WHEN sel_start%=0 AND sel_end%=samp_size%-1 13930 PROCXmenu_shade(menu_sel%+24*0,1) 13940 PROCXmenu_shade(menu_sel%+24*1,0) 13950 PROCXmenu_shade(menu_sel%+24*2,0) 13960 PROCXmenu_shade(menu_sel%+24*3,0) 13970 PROCXmenu_shade(menu_sel%+24*4,0) 13980 PROCXmenu_shade(menu_sel%+24*5,0) 13990 PROCXmenu_shade(menu_sel%+24*6,0) 14000 PROCXmenu_shade(menu_sel%+24*7,0) 14010 PROCXmenu_shade(menu_sel%+24*8,0) 14020 PROCXmenu_shade(menu_sel%+24*9,0) 14030 PROCXmenu_shade(menu_sel%+24*10,0) 14040 PROCXmenu_shade(menu_sel%+24*11,0) 14050 PROCXmenu_shade(menu_lib%,0) 14060 PROCXmenu_shade(menu_selfx%,0) 14070OTHERWISE 14080 PROCXmenu_shade(menu_sel%+24*0,0) 14090 PROCXmenu_shade(menu_sel%+24*1,1) 14100 PROCXmenu_shade(menu_sel%+24*2,1) 14110 PROCXmenu_shade(menu_sel%+24*3,1) 14120 PROCXmenu_shade(menu_sel%+24*4,1) 14130 PROCXmenu_shade(menu_sel%+24*5,1) 14140 PROCXmenu_shade(menu_sel%+24*6,1) 14150 PROCXmenu_shade(menu_sel%+24*7,1) 14160 PROCXmenu_shade(menu_sel%+24*8,1) 14170 PROCXmenu_shade(menu_sel%+24*9,1) 14180 PROCXmenu_shade(menu_sel%+24*10,1) 14190 PROCXmenu_shade(menu_sel%+24*11,1) 14200 PROCXmenu_shade(menu_lib%,1) 14210 PROCXmenu_shade(menu_selfx%,1) 14220ENDCASE 14230PROCXicon_setstr(win_main%,22,STR$sel_start%) 14240PROCXicon_setstr(win_main%,23,STR$sel_end%) 14250ENDPROC 14260 14270DEFPROCopen_sinfo 14280PROCset_sinfo(0,caret%) 14290PROCset_sinfo(4,sel_start%) 14300PROCset_sinfo(8,sel_end%) 14310PROCset_sinfo(12,sel_end%-sel_start%) 14320PROCset_sinfo(16,samp_size%) 14330ENDPROC 14340 14350DEFPROCset_sinfo(ic%,data%) 14360LOCAL rate%:rate%=VALFNXicon_getstr(win_main%,5)*1000 14370IF data%>-1 THEN 14380PROCXicon_setstr(win_sampinfo%,ic%,LEFT$(STR$(data%/1024),8)) 14390PROCXicon_setstr(win_sampinfo%,ic%+1,LEFT$(STR$data%,8)) 14400PROCXicon_setstr(win_sampinfo%,ic%+2,LEFT$(STR$(data%/rate%),8)) 14410PROCXicon_setstr(win_sampinfo%,ic%+3,LEFT$(STR$(data%/rate%*100),8)) 14420ELSE 14430PROCXicon_setstr(win_sampinfo%,ic%,"None") 14440PROCXicon_setstr(win_sampinfo%,ic%+1,"None") 14450PROCXicon_setstr(win_sampinfo%,ic%+2,"None") 14460PROCXicon_setstr(win_sampinfo%,ic%+3,"None") 14470ENDIF 14480ENDPROC 14490 14500DEFPROCcrem_main 14510PROCXmenu_start("Misc",start%,end%):sub_misc%=r0% 14520PROCXmenu_additem("Program",win_info%) 14530PROCXmenu_additem("Sample",win_sampinfo%) 14540PROCXmenu_message(r0%) 14550PROCXmenu_dot 14560PROCXmenu_additem("Log sample",-1):menu_stype%=r0% 14570PROCXmenu_additem("Signed sample",-1) 14580PROCXmenu_additem("Unsigned sample",-1) 14590PROCXmenu_dot 14600PROCXmenu_additem("Lin2Log",-1):menu_conv%=r0% 14610PROCXmenu_additem("Log2Lin",-1) 14620PROCXmenu_additem("(Un)sign",-1) 14630PROCXmenu_dot 14640PROCXmenu_additem("Calc. centre",-1) 14650PROCXmenu_end(start%,end%) 14660REM 14670PROCXmenu_start("Save",start%,end%):sub_save%=r0% 14680PROCXmenu_additem("Log",win_save%):menu_save%=r0% 14690PROCXmenu_message(r0%) 14700PROCXmenu_additem("Signed",win_save%) 14710PROCXmenu_message(r0%) 14720PROCXmenu_additem("Unsigned",win_save%) 14730PROCXmenu_message(r0%) 14740PROCXmenu_dot 14750PROCXmenu_additem("Effex",win_save%) 14760PROCXmenu_message(r0%) 14770PROCXmenu_additem("Armadeus",win_save%) 14780PROCXmenu_message(r0%) 14790PROCXmenu_end(start%,end%) 14800REM 14810PROCXmenu_start("Selection",start%,end%):sub_sel%=r0% 14820PROCXmenu_additem("Select all ^A",-1):menu_sel%=r0% 14830PROCXmenu_additem("Clear selection ^Z",-1) 14840PROCXmenu_dot 14850PROCXmenu_additem("Delete ^X",-1) 14860PROCXmenu_additem("Copy ^C",-1) 14870PROCXmenu_additem("Copy over ^Y",-1) 14880PROCXmenu_additem("Move ^V",-1) 14890PROCXmenu_dot 14900PROCXmenu_additem("Mix",-1) 14910PROCXmenu_additem("Pre-mix",-1) 14920PROCXmenu_additem("Post-mix",-1) 14930PROCXmenu_dot 14940PROCXmenu_additem("Zoom Z",-1) 14950PROCXmenu_additem("Play ^E",-1) 14960PROCXmenu_additem("Save selection",sub_save%) 14970PROCXmenu_end(start%,end%) 14980REM 14990PROCXmenu_start("Echo",start%,end%):sub_echo%=r0% 15000PROCXmenu_addwrs("Length","a0-9,&,A-F,a-f","128",echo_length%) 15010PROCXmenu_addwrs("Strength","a0-9,.","60",echo_strength%) 15020PROCXmenu_dot 15030PROCXmenu_additem("Normal echo E",-1) 15040PROCXmenu_additem("Flange echo F",-1) 15050PROCXmenu_additem("Hall echo H",-1) 15060PROCXmenu_end(start%,end%) 15070REM 15080PROCXmenu_start("Modulate",start%,end%):sub_mod%=r0% 15090PROCXmenu_addinput("",64,10):menu_mod0%=Xmenu_end%:$Xmenu_end%=mod0$ 15100PROCXmenu_addinput("",64,10):menu_mod1%=Xmenu_end%:$Xmenu_end%=mod1$ 15110PROCXmenu_addinput("",64,10):menu_mod2%=Xmenu_end%:$Xmenu_end%=mod2$ 15120PROCXmenu_addinput("",64,10):menu_mod3%=Xmenu_end%:$Xmenu_end%=mod3$ 15130PROCXmenu_addinput("",64,10):menu_mod4%=Xmenu_end%:$Xmenu_end%=mod4$ 15140PROCXmenu_end(start%,end%) 15150REM 15160PROCXmenu_start("Effects",start%,end%):sub_fx%=r0% 15170PROCXmenu_additem("Selection",-1):menu_selfx%=r0% 15180PROCXmenu_dot 15190PROCXmenu_additem("Reverse",-1) 15200PROCXmenu_additem("Silence",-1) 15210PROCXmenu_additem("Fade in ^I",-1) 15220PROCXmenu_additem("Fade out ^O",-1) 15230PROCXmenu_dot 15240PROCXmenu_addwrs("Amplify","a0-9","100",amplify%) 15250REM PROCXmenu_shade(r0%,1) 15260PROCXmenu_addwrs2("Quieten",amplify%) 15270PROCXmenu_addwrs("Eor const","a0-9,&,A-F,a-f","0",eor_const%) 15280PROCXmenu_addwrs("Add const","a0-9,&,A-F,a-f","0",add_const%) 15290PROCXmenu_addwrs("HA filter","a0-9,+,\-","+96",hp_filter%) 15300PROCXmenu_addwrs("LA filter","a0-9,+,\-","-96",lp_filter%) 15310PROCXmenu_addwrs("Core filter","a0-9,&,A-F,a-f","16",core_filt%) 15320PROCXmenu_addwrs("LF boost","a0-9,.","1.5",fboost%) 15330PROCXmenu_addwrs2("HF boost",fboost%) 15340PROCXmenu_additem("Modulate",sub_mod%) 15350PROCXmenu_additem("Echo",sub_echo%) 15360PROCXmenu_end(start%,end%) 15370REM 15380PROCXmenu_start("Playing",start%,end%):sub_play%=r0% 15390PROCXmenu_additem("Play ^P",-1) 15400PROCXmenu_additem("Stop ^S",-1) 15410PROCXmenu_additem("Play tracking ^T",-1):menu_track%=r0% 15420PROCXmenu_additem("Continue SPC",-1) 15430PROCXmenu_dot 15440PROCXmenu_additem("Pitch up",-1) 15450PROCXmenu_additem("Pitch down",-1) 15460PROCXmenu_dot 15470PROCXmenu_additem("Max. volume ^L",-1) 15480PROCXmenu_end(start%,end%) 15490REM 15500PROCXmenu_start("Entries",start%,end%):sub_lib2%=r0% 15510FORa%=0TO15:PROCXmenu_additem("12345678901",-1):NEXT 15520PROCXmenu_end(start%,end%) 15530REM 15540PROCXmenu_start("Library",start%,end%):sub_lib%=r0% 15550PROCXmenu_addwrs("Add ^L","aa-z,AA-Z,0-9","Entry",lib_name%) 15560menu_lib%=sub_lib%+28 15570PROCXmenu_additem("Insert",sub_lib2%):menu_lpaste%=r0% 15580PROCXmenu_additem("Overwrite",sub_lib2%) 15590PROCXmenu_additem("Delete",sub_lib2%) 15600PROCXmenu_end(start%,end%) 15610REM 15620PROCXmenu_start("Effex",start%,end%):menu_main%=r0% 15630PROCXmenu_additem("Misc",sub_misc%) 15640PROCXmenu_additem("Save",sub_save%) 15650PROCXmenu_dot 15660PROCXmenu_additem("Selection",sub_sel%) 15670PROCXmenu_additem("Effects",sub_fx%) 15680PROCXmenu_dot 15690PROCXmenu_additem("Playing",sub_play%) 15700PROCXmenu_end(start%,end%) 15710PROCnew_sample_type 15720PROCnew_selection 15730PROCdo_libentries 15740ENDPROC 15750 15760DEFPROCassem(code%) 15770claimed_code%=FNXmem_claim(4096) 15780FOR opt%=8 TO 10 STEP 2 15790P%=code% 15800[OPT opt% 15810.reverse 15820; R0 = start 15830; R1 = end 15840CMP R0,R1 15850MOVGE PC,R14 15860LDRB R2,[R0] 15870LDRB R3,[R1] 15880STRB R3,[R0],#1 15890STRB R2,[R1],#-1 15900B reverse 15910 15920.calc_centre 15930; R0 = start 15940; R1 = end 15950; R2 = tally 15960CMP R0,R1 15970STRGT R2,centre_val 15980MOVGT PC,R14 15990LDRB R3,[R0],#1 16000ADD R2,R2,R3 16010B calc_centre 16020.centre_val 16030DCD 0 16040 16050.amp 16060; R0 = start 16070; R1 = end 16080; R2 = centre 16090; R3 = factor <<12 16100CMP R0,R1 16110MOVGT PC,R14 16120LDRB R4,[R0] 16130SUB R5,R4,R2 16140MUL R5,R3,R5 16150ADDS R4,R2,R5,ASR #12 16160MOVLT R4,#0 16170CMPGT R4,#255 16180MOVGT R4,#255 16190STRB R4,[R0],#1 16200B amp 16210 16220.echo 16230; R0-R2 as for amp 16240; R3 = length 16250; R4 = strength <<12 16260SUB R5,R1,R3 16270.echolp 16280CMP R5,R0 16290MOVLT PC,R14 16300LDRB R6,[R5],#-1 ; get source 16310SUB R6,R6,R2 ; correct centre 16320MUL R6,R4,R6 ; amplify 16330LDRB R7,[R1] ; get dst 16340ADDS R7,R7,R6,ASR#12 ; add echo (>>12) 16350MOVLT R7,#0 16360CMPGT R7,#255 16370MOVGT R7,#255 16380STRB R7,[R1],#-1 16390B echolp 16400 16410.flange 16420ADD R5,R0,R3 16430.flangelp 16440CMP R5,R1 16450MOVGT PC,R14 16460LDRB R6,[R0],#1 16470SUB R6,R6,R2 16480MUL R6,R4,R6 16490LDRB R7,[R5] 16500ADDS R7,R7,R6,ASR#12 16510MOVLT R7,#0 16520CMPGT R7,#255 16530MOVGT R7,#255 16540STRB R7,[R5],#1 16550B flangelp 16560 16570.eor 16580; R0,R1 as for amp 16590; R2 = constant 16600CMP R0,R1 16610MOVGT PC,R14 16620LDRB R3,[R0] 16630EOR R3,R3,R2 16640STRB R3,[R0],#1 16650B eor 16660 16670.add 16680CMP R0,R1 16690MOVGT PC,R14 16700LDRB R3,[R0] 16710ADDS R3,R3,R2 16720MOVLT R3,#0 16730CMPGT R3,#255 16740MOVGT R3,#255 16750STRB R3,[R0],#1 16760B add 16770 16780.hp_filt 16790; R0,R1 as for amp 16800; R2 = high pass mark 16810CMP R0,R1 16820MOVGT PC,R14 16830LDRB R3,[R0] 16840CMP R3,R2 16850MOVGT R3,R2 16860STRB R3,[R0],#1 16870B hp_filt 16880 16890.lp_filt 16900CMP R0,R1 16910MOVGT PC,R14 16920LDRB R3,[R0] 16930CMP R3,R2 16940MOVLT R3,R2 16950STRB R3,[R0],#1 16960B lp_filt 16970 16980.core_filt 16990; R0,R1 as for amp 17000; R2 = high pass 17010; R3 = low pass 17020; R4 = centre 17030CMP R0,R1 17040MOVGT PC,R14 17050LDRB R5,[R0],#1 17060CMP R5,R2 17070BLT core_filt 17080CMP R5,R3 17090MOVLE R5,R4 17100STRB R5,[R0,#-1] 17110B core_filt 17120 17130.mix 17140; R0 = sample A start 17150; R1 = sample A end 17160; R2 = sample B (store) start 17170; R3 = sample B end 17180; R4 = sample centre 17190CMP R0,R1 17200CMPLE R2,R3 17210MOVGT PC,R14 17220LDRB R6,[R0],#1 17230LDRB R5,[R2] 17240ADD R6,R6,R5 17250SUB R6,R6,R4 17260STRB R6,[R2],#1 17270B mix 17280 17290.convert 17300; R0 = sample 17310; R1 = length 17320; R2 = table 17330LDRB R3,[R0] 17340LDRB R3,[R2,R3] 17350STRB R3,[R0],#1 17360SUBS R1,R1,#1 17370BGT convert 17380MOV PC,R14 17390 17400.copy 17410; R0 = start 17420; R1 = end 17430; R2 = dst 17440CMP R2,R0 17450ADDGT R2,R2,R1 17460SUBGT R2,R2,R0 17470BGT copy_back 17480.copy_lp 17490CMP R0,R1 17500MOVGT PC,R14 17510LDRB R3,[R0],#1 17520STRB R3,[R2],#1 17530B copy_lp 17540.copy_back 17550CMP R0,R1 17560MOVGT PC,R14 17570LDRB R3,[R1],#-1 17580STRB R3,[R2],#-1 17590B copy_back 17600 17610.boost 17620; R0,R1 as for amp 17630; R2 = const (<<12) table 17640; R3 = centre (old val) 17650MOV R7,R3 17660.boostlp 17670CMP R0,R1 17680MOVGT PC,R14 17690LDRB R4,[R0] 17700SUBS R6,R4,R3 17710RSBLT R5,R6,#0 17720MOVGE R5,R6 17730LDR R5,[R2,R5,LSL#2] 17740MUL R6,R5,R6 17750ADDS R6,R3,R6,ASR#12 17760MOVLT R6,#0 17770CMPGT R6,#255 17780MOVGT R6,#255 17790STRB R6,[R0],#1 17800MOV R3,R4 17810MOV R7,R6 17820B boostlp 17830 17840.fadein 17850; R0,R1,R2 as for amp 17860STMFD R13!,{R14} 17870SUBS R6,R1,R0 17880LDMLEFD R13!,{PC} 17890MOV R3,#0 17900.finlp 17910CMP R0,R1 17920LDMGTFD R13!,{PC} 17930LDRB R4,[R0] 17940SUB R5,R4,R2 17950MULS R5,R3,R5 17960MOVEQ R7,R5 17970BLNE divide 17980ADDS R4,R2,R7 17990MOVLT R4,#0 18000CMPGT R4,#255 18010MOVGT R4,#255 18020STRB R4,[R0],#1 18030ADD R3,R3,#1 18040B finlp 18050 18060.fadeout 18070STMFD R13!,{R14} 18080SUBS R6,R1,R0 18090LDMLEFD R13!,{PC} 18100MOV R3,R6 18110.foutlp 18120CMP R0,R1 18130LDMGTFD R13!,{PC} 18140LDRB R4,[R0] 18150SUB R5,R4,R2 18160MULS R5,R3,R5 18170MOVEQ R7,R5 18180BLNE divide 18190ADDS R4,R2,R7 18200MOVLT R4,#0 18210CMPGT R4,#255 18220MOVGT R4,#255 18230STRB R4,[R0],#1 18240SUB R3,R3,#1 18250B foutlp 18260 18270.divide 18280; < R5 = numerator 18290; R6 = denominator 18300; > R7 = result of division 18310STMFD R13!,{R0,R1,R2,R3,R4,R5,R14} 18320MOV R0,R5 18330MOV R1,R6 18340CMP R1,#0 18350BEQ end 18360MOV R5,#1 18370CMP R0,#0 18380MVNLT R5,R5:RSBLT R0,R0,#0 18390CMP R1,#0 18400MVNLT R5,R5:RSBLT R1,R1,#0 18410MOV R2,#0 18420MOV R3,#0 18430MOV R4,#1 18440.div_lp1 18450ADD R2,R2,#1 18460MOV R1,R1,ASL#1 18470CMP R1,R0 18480BLE div_lp1 18490.div_lp2 18500SUB R2,R2,#1 18510MOV R1,R1,ASR#1 18520CMP R0,R1 18530BLT div_lp2 18540CMP R1,#0 18550ADDGE R3,R3,R4,ASL R2 18560SUB R0,R0,R1 18570CMP R2,#0 18580BGT div_lp2 18590CMP R5,#0 18600RSBLT R3,R3,#0 18610MOV R2,R3 18620.end 18630MOV R7,R2 18640LDMFD R13!,{R0,R1,R2,R3,R4,R5,PC} 18650 18660]:P%=claimed_code% 18670[OPT opt%AND3 18680 18690.Vbase 18700B Vfill 18710B Vfill 18720B Vgon 18730B Vgoff 18740B Vinst 18750LDMFD R13!,{PC} 18760LDMFD R13!,{PC} 18770DCD Vname-Vbase 18780 18790.Vname 18800DCB "Effex"+CHR$0 18810ALIGN 18820 18830.Vinst 18840STMFD R13!,{R0-R4} 18850MOV R0,#0 18860MOV R1,#0 18870MOV R2,#0 18880MOV R3,#0 18890MOV R4,#0 18900SWI "XSound_Configure" 18910LDRVC R0,[R3,#12] 18920STRVC R0,Vla_ptr 18930STRVS R0,[R13] 18940LDMFD R13!,{R0-R4,PC} 18950 18960.Vspos 18970DCD 0 18980 18990.Vsend 19000DCD 0 19010 19020.Vla_ptr 19030DCD 0 19040 19050.Vconv_tab 19060DCD 0 19070 19080.Vvol 19090DCB 127:ALIGN 19100 19110.Vcommand 19120DCD 0 19130 19140.Vcounter 19150DCD 0 19160 19170.Vcomm_off 19180MOV R0,#0 19190STR R0,Vcommand 19200B Vfinish 19210 19220.Vgon 19230LDR R0,Vspos 19240STR R0,Vcounter 19250STR R0,[R9,#16] 19260LDR R0,Vla_ptr 19270STR R0,[R9,#20] 19280 19290.Vfill 19300LDMIB R9,{R2-R6} 19310LDR R0,Vcommand 19320CMP R0,#1 19330BEQ Vcomm_off 19340LDR R7,Vconv_tab 19350LDR R1,Vvol 19360AND R1,R1,#127 19370LDRB R1,[R6,R1,LSL#1] 19380MOV R1,R1,LSR#1 19390RSB R1,R1,#127 19400 19410.Vfill_lp 19420LDR R0,Vsend 19430LDR R5,Vcounter 19440TEQ R5,#0 19450STMEQIB R9,{R2-R5} 19460BEQ Vfinish 19470CMP R5,R0 19480STMGEIB R9,{R2-R5} 19490BGE Vfinish 19500ADD R2,R2,R2,LSL#16 19510LDRB R0,[R5,R2,LSR#24] 19520LDRB R0,[R7,R0] 19530SUBS R0,R0,R1,LSL#1 19540MOVMI R0,#0 19550STRB R0,[R12],R11 19560ADD R2,R2,R2,LSL#16 19570LDRB R0,[R5,R2,LSR#24] 19580LDRB R0,[R7,R0] 19590SUBS R0,R0,R1,LSL#1 19600MOVMI R0,#0 19610STRB R0,[R12],R11 19620ADD R2,R2,R2,LSL#16 19630LDRB R0,[R5,R2,LSR#24] 19640LDRB R0,[R7,R0] 19650SUBS R0,R0,R1,LSL#1 19660MOVMI R0,#0 19670STRB R0,[R12],R11 19680ADD R2,R2,R2,LSL#16 19690LDRB R0,[R5,R2,LSR#24]! 19700STR R5,Vcounter 19710LDRB R0,[R7,R0] 19720SUBS R0,R0,R1,LSL#1 19730MOVMI R0,#0 19740STRB R0,[R12],R11 19750BIC R2,R2,#&FF000000 19760CMP R12,R10 19770BLT Vfill_lp 19780SUBS R4,R4,#1 19790STMIB R9,{R2-R5} 19800MOVPL R0,#%1000 19810MOVMI R0,#%10 19820LDMFD R13!,{PC} 19830 19840.Vfinish 19850MOV R0,#0 19860.Vfinlp 19870STRB R0,[R12],R11 19880STRB R0,[R12],R11 19890STRB R0,[R12],R11 19900STRB R0,[R12],R11 19910MVN R4,#1 19920STMIB R9,{R2-R5} 19930MOV R0,#%10 19940LDMFD R13!,{PC} 19950 19960.Vgoff 19970MOV R0,#0 19980.Vflush 19990STRB R0,[R12],R11 20000STRB R0,[R12],R11 20010STRB R0,[R12],R11 20020STRB R0,[R12],R11 20030CMP R12,R10 20040BLT Vflush 20050MOV R0,#1 20060LDMFD R13!,{PC} 20070 20080.tab_start 20090]:NEXT 20100ENDPROC 20110 20120 20130REM ** ## ... data ... ## ** 20140 20150REM ** template data ** 20160 20170DATA "<Effex$Dir>.Templates" 20180DATA main,win_main%,0 20190DATA pane,win_pane%,0 20200DATA info,win_info%,0 20210DATA load_query,win_load%,0 20220DATA save,win_save% 20230DATA 88+24,save_valid% 20240DATA 88+20+32,save_txt%,0 20250DATA sample_info,win_sampinfo%,0 20260DATA 0,0 20270 20280 20290 20300REM ** ## ... tools ... ## ** 20310 20320REM ** Tool = menu ** 20330 20340DEFPROCXmenu_additem(item$,sub_id%) 20350LOCAL a%,wid%:a%=Xmenu_pos% 20360IF LENitem$>12 PROCXmenu_addlong(item$,0,sub_id%):ENDPROC 20370wid%=LENitem$ 20380IF Xmenu_pos%+24>Xmenu_end% ERROR 1,"Menu area full" 20390!a%=0:a%!4=sub_id% 20400a%!8=&07000021 20410$(a%+12)=item$ 20420r0%=Xmenu_pos% 20430Xmenu_pos%+=24 20440IF Xmenu_wid%<wid% Xmenu_wid%=wid% 20450Xmenu_height%+=44 20460ENDPROC 20470 20480DEFPROCXmenu_addwrs(title$,valid$,default$,RETURN ind%) 20490LOCAL vl%,a%,wid%,val%,b%:vl%=LENvalid$+1 20500Xmenu_end%-=vl%:val%=Xmenu_end%:$val%=valid$ 20510Xmenu_end%-=16:ind%=Xmenu_end%:$ind%=default$ 20520Xmenu_end%-=52 20530Xmenu_end%=Xmenu_end%AND(NOT3) 20540b%=Xmenu_end% 20550$b%=LEFT$(title$,12):b%!12=&00070207 20560b%!16=LENtitle$*16 20570IF b%!16<32 b%!16=32 20580b%!20=44:b%!24=0 20590b%!28=132:b%!32=-1 20600b%!36=&07000121 20610b%!40=ind% 20620b%!44=val% 20630b%!48=16 20640PROCXmenu_additem(title$,b%) 20650ENDPROC 20660 20670DEFPROCXmenu_addwrs2(title$,ind%) 20680LOCAL vl%,a%,wid%,val%,b% 20690vl%=ind%+16:Xmenu_end%-=52 20700Xmenu_end%=Xmenu_end%AND(NOT3) 20710b%=Xmenu_end% 20720$b%=title$:b%!12=&00070207 20730b%!16=LENtitle$*16 20740IF b%!16<32 b%!16=32 20750b%!20=44:b%!24=0 20760b%!28=132:b%!32=-1 20770b%!36=&07000121 20780b%!40=ind% 20790b%!44=val% 20800b%!48=16 20810PROCXmenu_additem(title$,b%) 20820ENDPROC 20830 20840DEFPROCXmenu_dot 20850!r0%=!r0% OR 2 20860Xmenu_height%+=24 20870ENDPROC 20880 20890DEFPROCXmenu_addlong(item$,ml%,sub_id%) 20900LOCAL a%,wid%:a%=Xmenu_pos% 20910IF ml%<=LENitem$ ml%=LENitem$+1 20920wid%=LENitem$ 20930IF Xmenu_pos%+24>Xmenu_end%-ml% ERROR 1,"Menu area full" 20940!a%=0:a%!4=sub_id% 20950a%!8=&07000121 20960Xmenu_end%-=ml% 20970$Xmenu_end%=item$ 20980a%!12=Xmenu_end% 20990a%!16=0 21000a%!20=ml% 21010r0%=Xmenu_pos% 21020Xmenu_pos%+=24 21030IF Xmenu_wid%<wid% Xmenu_wid%=wid% 21040Xmenu_height%+=44 21050ENDPROC 21060 21070DEFPROCXmenu_addinput(val$,ml%,wid%) 21080LOCAL a%:a%=Xmenu_pos% 21090IF Xmenu_pos%+24>Xmenu_end%-(ml%+LENval$+1) ERROR 1,"Menu area full" 21100!a%=4:a%!4=-1 21110a%!8=&07000121 21120Xmenu_end%-=ml% 21130a%!12=Xmenu_end% 21140a%!16=0 21150IF val$<>"" Xmenu_end%-=LENval$+1:$Xmenu_end%=val$:a%!16=Xmenu_end% 21160a%!20=ml% 21170r0%=Xmenu_pos% 21180Xmenu_pos%+=24 21190IF Xmenu_wid%<wid% Xmenu_wid%=wid% 21200Xmenu_height%+=44 21210ENDPROC 21220 21230DEFPROCXmenu_shade(r0%,set%) 21240IF set%<>0 set%=1<<22 21250r0%!8=(r0%!8 AND(NOT(1<<22)))OR set% 21260ENDPROC 21270 21280DEFPROCXmenu_tick(r0%,set%) 21290IF set%<>0 set%=1 21300!r0%=(!r0% AND &FFFFFFFE)OR set% 21310ENDPROC 21320 21330DEFPROCXmenu_message(r0%) 21340IF r0%!4<=1 ENDPROC 21350!r0%=!r0% OR 8 21360ENDPROC 21370 21380DEFPROCXmenu_end(RETURN p%,RETURN e%) 21390IF Xmenu_height%<1 THEN 21400PROCXmenu_additem(" ",-1) 21410PROCXmenu_shade(r0%,1) 21420Xmenu_height%=44 21430ENDIF 21440!r0%=!r0% OR 128 21450Xmenu_start%!16=(Xmenu_wid%+1)*16 21460Xmenu_start%!-4=Xmenu_height% 21470p%=Xmenu_pos% 21480e%=Xmenu_end% 21490ENDPROC 21500 21510DEFPROCXmenu_start(tit$,st%,en%) 21520st%+=4 21530Xmenu_start%=st% 21540Xmenu_pos%=Xmenu_start% 21550Xmenu_end%=en% 21560Xmenu_height%=0 21570tit$=LEFT$(tit$,12) 21580Xmenu_wid%=LENtit$ 21590$st%=tit$ 21600st%!12=&00070207 21610st%!16=0 21620st%!20=44 21630st%!24=0 21640r0%=Xmenu_start% 21650Xmenu_pos%+=28 21660ENDPROC 21670 21680DEFPROCXmenu_setinput(id%,st$) 21690id%+=12 21700IF LENst$>=id%!8 st$=LEFT$(st$,id%!8-1) 21710$(!id%)=st$ 21720ENDPROC 21730 21740DEFFNXmenu_getinput(id%) 21750=FNz(id%!12) 21760 21770DEFPROCXmenu_iconbar(id%) 21780LOCAL height% 21790height%=id%!-4 21800SYS &400CF,,q% 21810Xmenu_x%=!q%-64 21820Xmenu_y%=96+height% 21830Xmenu_ptr%=id% 21840SYS &400D4,,Xmenu_ptr%,Xmenu_x%,Xmenu_y% 21850ENDPROC 21860 21870DEFPROCXmenu_main(id%) 21880SYS &400CF,,q% 21890Xmenu_x%=!q%-64 21900Xmenu_y%=q%!4+24 21910Xmenu_ptr%=id% 21920SYS &400D4,,Xmenu_ptr%,Xmenu_x%,Xmenu_y% 21930ENDPROC 21940 21950REM ** Tool = wimp/general ** 21960 21970DEFFNz(a%):LOCALs$:s$="":WHILE?a%>31:s$+=CHR$?a%:a%+=1:ENDWHILE:=s$ 21980 21990DEFFNset(RETURN var%,val%) 22000var%=val%:=0 22010 22020DEFPROCsetvar(v$,val%) 22030val%=EVAL("FNset("+v$+",val%)") 22040ENDPROC 22050 22060DEFPROCXwimp_init(s$) 22070s$=LEFT$(s$,15) 22080SYS &400C0,200,&4B534154,s$ TO wimp_vers%,task_handle% 22090ENDPROC 22100 22110DEFPROCXwimp_templates(ic%,ic_end%) 22120LOCAL file$,temp$,var$,hand%,ad$,ad%,val% 22130READ file$ 22140WHILE file$<>"0" 22150 SYS &400D9,,file$ 22160 READ temp$ 22170 WHILE temp$<>"0" 22180 READ var$ 22190 SYS &400DB,,Xtemp%,ic%,ic_end%,-1,temp$,0 TO ,,ic% 22200 READ ad$ 22210 WHILE ad$<>"0" 22220 ad%=EVALad$:READ ad$:val%=EVALad$ 22230 Xtemp%!ad%=val% 22240 READ ad$ 22250 ENDWHILE 22260 SYS &400C1,,Xtemp% TO hand% 22270 PROCsetvar(var$,hand%) 22280 READ temp$ 22290 ENDWHILE 22300 SYS &400DA 22310 READ file$ 22320ENDWHILE 22330iconend%=ic% 22340ENDPROC 22350 22360REM ** Tool = memory ** 22370 22380DEFPROCXmem_init(blocks%) 22390Xmem_blocks%=blocks% 22400SYS &1E,6,,,blocks%*4 TO ,,Xmem_header% 22410FOR temp_a%=0 TO blocks%-1 22420Xmem_header%!(temp_a%<<2)=0 22430NEXT 22440ENDPROC 22450 22460DEFFNXmem_claim(size%) 22470FOR temp_a%=0 TO Xmem_blocks%-1 22480IF Xmem_header%!(temp_a%<<2)=0 THEN 22490SYS &1E,6,,,size% TO ,,temp_b% 22500Xmem_header%!(temp_a%<<2)=temp_b% 22510temp_a%=Xmem_blocks%+1000 22520ENDIF 22530NEXT 22540IF temp_a%=Xmem_blocks% ERROR 1,"Maximum block allocation reached" 22550=temp_b% 22560 22570DEFPROCXmem_reduce(RETURN addr%,cs%) 22580FOR temp_a%=0 TO Xmem_blocks%-1 22590IF Xmem_header%!(temp_a%<<2)=addr% THEN 22600SYS &1D,4,&1800000,addr%,-cs% TO ,,addr% 22610Xmem_header%!(temp_a%<<2)=addr% 22620temp_a%=Xmem_blocks%+1000 22630ENDIF 22640NEXT 22650IF temp_a%=Xmem_blocks% ERROR 1,"Cannot find block for alteration" 22660ENDPROC 22670 22680DEFPROCXmem_delta(RETURN addr%,cs%) 22690LOCAL size%:IF cs%<0 PROCXmem_reduce(addr%,-cs%):ENDPROC 22700FOR temp_a%=0 TO Xmem_blocks%-1 22710IF Xmem_header%!(temp_a%<<2)=addr% THEN 22720SYS &1D,6,&1800000,addr% TO ,,,size% 22730size%+=cs% 22740SYS &1E,13,,addr%,size% TO ,,addr% 22750Xmem_header%!(temp_a%<<2)=addr% 22760temp_a%=Xmem_blocks%+1000 22770ENDIF 22780NEXT 22790IF temp_a%=Xmem_blocks% ERROR 1,"Cannot find block for alteration" 22800ENDPROC 22810 22820DEFPROCXmem_change(RETURN addr%,size%) 22830FOR temp_a%=0 TO Xmem_blocks%-1 22840IF Xmem_header%!(temp_a%<<2)=addr% THEN 22850SYS &1E,13,,addr%,size% TO ,,addr% 22860Xmem_header%!(temp_a%<<2)=addr% 22870temp_a%=Xmem_blocks%+1000 22880ENDIF 22890NEXT 22900IF temp_a%=Xmem_blocks% ERROR 1,"Cannot find block for alteration" 22910ENDPROC 22920 22930DEFPROCXmem_release(addr%) 22940FOR temp_a%=0 TO Xmem_blocks%-1 22950IF Xmem_header%!(temp_a%<<2)=addr% THEN 22960SYS &1E,7,,addr% 22970Xmem_header%!(temp_a%<<2)=0 22980temp_a%=Xmem_blocks%+1000 22990ENDIF 23000NEXT 23010IF temp_a%=Xmem_blocks% ERROR 1,"Cannot find block for release" 23020ENDPROC 23030 23040DEFPROCXmem_quit 23050temp_b%=0 23060FOR temp_a%=0 TO Xmem_blocks%-1 23070IF Xmem_header%!(temp_a%<<2)<>0 THEN 23080temp_b%+=1 23090SYS &1E,7,,Xmem_header%!(temp_a%<<2) 23100Xmem_header%!(temp_a%<<2)=0 23110ENDIF 23120NEXT 23130SYS &1E,7,,Xmem_header% 23140OSCLI"SetEval Effex%FreedBlocks "+STR$temp_b% 23150ENDPROC 23160 23170REM ** Tool = windows ** 23180 23190DEFPROCXwin_open(handle%) 23200!Xtemp%=handle% 23210SYS &400CB,,Xtemp%:Xtemp%!28=-1 23220SYS &400C5,,Xtemp% 23230ENDPROC 23240 23250DEFPROCXwin_close(handle%) 23260!Xtemp%=handle% 23270SYS &400C6,,Xtemp% 23280ENDPROC 23290 23300DEFPROCXwin_settitle(handle%,tit$) 23310LOCAL a%,b% 23320!Xtemp%=handle% 23330SYS &400CC,,Xtemp% 23340IF (Xtemp%!60 AND 256)=0 ERROR 1,"Window title not indirected" 23350b%=Xtemp%!84 23360a%=Xtemp%!76 23370tit$=LEFT$(tit$,b%-1) 23380$a%=tit$ 23390ENDPROC 23400 23410REM ** Tool = icons ** 23420 23430DEFFNXicon_getstr(win%,ic%) 23440!Xtemp%=win%:Xtemp%!4=ic% 23450SYS &400CE,,Xtemp% 23460IF (Xtemp%!24 AND 256)=0 ERROR 1,"Icon not indirected" 23470=FNz(Xtemp%!28) 23480 23490DEFPROCXicon_setstr(win%,ic%,s$) 23500LOCAL a%,b% 23510!Xtemp%=win%:Xtemp%!4=ic% 23520SYS &400CE,,Xtemp% 23530IF (Xtemp%!24 AND 256)=0 ERROR 1,"Icon not indirected" 23540b%=Xtemp%!36 23550a%=Xtemp%!28 23560s$=LEFT$(s$,b%-1) 23570$a%=s$ 23580PROCXicon_redraw(win%,ic%) 23590ENDPROC 23600 23610DEFPROCXicon_seticonvalid(win%,ic%,s$) 23620LOCAL a%,a$ 23630!Xtemp%=win%:Xtemp%!4=ic% 23640SYS &400CE,,Xtemp% 23650IF (Xtemp%!24 AND 256)=0 ERROR 1,"Icon not indirected" 23660a$=$(Xtemp%!32) 23670$(Xtemp%!32)=LEFT$(s$,LENa$) 23680PROCXicon_redraw(win%,ic%) 23690ENDPROC 23700 23710DEFPROCXicon_redraw(win%,ic%) 23720!Xtemp%=win%:Xtemp%!4=ic% 23730Xtemp%!8=0:Xtemp%!12=0 23740SYS &400CD,,Xtemp% 23750ENDPROC
� > !RunImage � Effex sample editor � � Paul Mason, 1992 ( 2ș &10 � env% <env$=�z(env%) Fa%=�env$,"Effex.!RunImage") Pa%+=�"Effex.!RunImage " Zenv$=�env$,a%+1) denv$=�env$,�env$,"-")+1) n� � �err(1) x �init �(�cre_menus(menus%,menus%+menu_size%) �� � �err(0) �ȕ � quit% �ș &400C7,0,q% � reason% ��handle_reason(reason%,q%) �"� env$<>"" �load(env$):env$="" �� �� � �err(1) ��quit_voice ��Xmem_quit �� � ���handle_reason(reason%,q%) Ȏ reason% � <� 0 : � sample_type%>=0 � !Vcounter>0 � tracking% �track � 1 : �redraw "� 2 : �open(q%) ,� 3 : �close(q%) 6� 4 @� 5 J� 6 : �mclick T� 7 : �dragbox ^"� 8 : �kpress(q%!0,q%!4,q%!24) h� 9 : �menusel r� 17,18 : �mess |� �� � � ��dragbox �� a% �ș &400CF,,q% �q%!24=q%!16 �-q%!16=1:q%!20=q%!12:q%!28=q%!0:q%!32=q%!4 �%q%!36=save_size%:q%!40=file_type% �%�extract_leaf:$(q%+44)=save_name$ � q%!0=(44+�save_name$+5)�(�3) �!q%!12=0:ș &400E7,17,q%,q%!20 �saveref%=q%!8 �ș &400D4,,-1 � ��datasave_ack &� q%!12<>saveref% � 0save_name$=�z(q%+44) :(� q%!36<>-1 �insert_name:modified%=0 DȎ file_type% � N� &631,&632,&633 XM ș 8,10,save_name$,file_type%,,save_sample%,save_sample%+save_samp_size% b"� &634 : �save_eff(save_name$) l"� &D3C : �save_arm(save_name$) v� �q%!12=q%!8:q%!16=3 �ș &400E7,17,q%,q%!20 �� � ���save_eff(name$) �� file%,size%,rate% �file%=�(name$) ��#file%,sample_type% �!�#file%,0:�#file%,0:�#file%,0 ��wput(save_samp_size%) � �wput(28) ��wput(save_caret%) ��wput(save_sel_start%) �wput(save_sel_end%) -rate%=��Xicon_getstr(win_main%,5)*(1<<24) �wput(rate%) .ș &C,2,file%,save_sample%,save_samp_size% *�#file% 4�"SetType "+name$+" 634" >� H R��save_arm(name$) \� file%,size%,rate% ffile%=�(name$) p'�#file%,��Xicon_getstr(win_main%,4) z.ș &C,2,file%,save_sample%,save_samp_size% ��#file% ��"SetType "+name$+" D3C" �� � �ݤleaf(s$) �� s2$:s2$="" �� �s$,".")=0 � =s$ �ȕ �s$)<>"." � �s$)<>":" �s2$=�s$)+s2$ �s$=�s$) �� �=s2$ � ݤpath(s$) ȕ �s$)<>"." � �s$)<>":" s$=�s$) $� .=s$ 8 B��extract_leaf L0save_name$=�leaf(�Xicon_getstr(win_save%,1)) V� ` j��insert_name tȎ file_type% � ~"� &631 : sname_log$=save_name$ �"� &632 : sname_sgn$=save_name$ �"� &633 : sname_uns$=save_name$ �"� &634 : sname_eff$=save_name$ �"� &D3C : sname_arm$=save_name$ �"� &635 : sname_sel$=save_name$ �"� &636 : sname_lib$=save_name$ �� �� � ���kpress(win%,icon%,key%) � Ȏ key% � �.� 13 : � win%=win_main%:�next_caret(icon%) $ � win%=win_save% �save !� &18F : �move_caret(icon%,1) !� &18E : �move_caret(icon%,0) ( : � � �key_ok(key%) ș &400DC,key% (� 2� < F ��save P)save_name$=�Xicon_getstr(win_save%,1) Z�insert_name dȎ file_type% � n� &631,&632,&633 xM ș 8,10,save_name$,file_type%,,save_sample%,save_sample%+save_samp_size% �"� &634 : �save_eff(save_name$) �"� &D3C : �save_arm(save_name$) �� �ș &400D4,,-1 �� � ���next_caret(ic%) �� a%,win%:win%=win_main% �Ȏ ic% � �-� 5 : �set_rate(�(�Xicon_getstr(win%,5))) � �set_caret(win%,4) �2� 4 : a%=�(�Xicon_getstr(win%,4)):� a%=0 a%=50 � �set_rate(1000/a%) �set_caret(win%,5) "� 18 : �set_caret(win%,18):�sc � 22 : �set_caret(win%,23) ""� 23 : �set_caret(win%,22):�ss ,� 10 : �set_caret(win%,11) 6� 11 : �zoom(0,0) @! �set_caret(win%,10) J%� 25 : a%=��Xicon_getstr(win%,25) T � a%<0 a%=0 ^ � a%>127 a%=127 h( �Xicon_setstr(win%,25,�a%) r ?Vvol=a% |� �� � ���move_caret(ic%,up%) �� u%,d% �Ȏ ic% � �� 5 : u%=11:d%=4 �� 4 : u%=5:d%=18 �� 18 : u%=4:d%=22 �� 22 : u%=18:d%=23 �� 23 : u%=22:d%=25 �� 25 : u%=23:d%=10 �� 10 : u%=25:d%=11 �� 11 : u%=10:d%=5 � =� up% �set_caret(win_main%,u%) � �set_caret(win_main%,d%) � & 0��set_rate(khz) :� khz=0 khz=20 D#�Xicon_setstr(win_main%,5,�khz) N*�Xicon_setstr(win_main%,4,�(1000/khz)) X� b l��set_caret(w%,i%) v'� len%:len%=�(�Xicon_getstr(w%,i%)) �ș &400D2,w%,i%,0,0,-1,len% �� � ���redraw �7� more%,scl%,xp%,pos,inc,xo%,yo%,ss,se,car%,sss,sse �&ss=sel_start%*1150*zoom/samp_size% �$se=sel_end%*1150*zoom/samp_size% �$car%=caret%*1150*zoom/samp_size% �%ș &35,-1,4 � ,,scl%:scl%=1<<scl% �ș &400C8,,q% � more% �ȕ more% �xstart%=q%!28-q%!4+q%!20 �xend%=q%!36-q%!4+q%!20 pos%=q%!28 +pos=(xstart%-scl%)*samp_size%/zoom/1150 !inc=scl%*samp_size%/zoom/1150 byte%=sample%?pos *xo%=q%!4-q%!20:yo%=q%!8 4� xstart%+xo%,byte%+yo% >ș &400E6,4 H*� xp%=xstart%-scl% � xend%+scl% � scl% R!�vdu%,xp%+xo%,sample%?pos+yo% \pos+=inc f� p@� sel_start%>=0 ș &400E6,7+(3<<4):ȓȐ ss+xo%,yo%,se-ss,256 zC� caret%>=0 ș &400E6,11+(3<<4):� car%+xo%,yo%,car%+xo%,yo%+256 �%ș &400E6,8:� xo%,yo%,xo%,yo%+256 �>ș &400E6,15:� xo%+1150*zoom-1,yo%,xo%+1150*zoom-1,yo%+256 �ș &400CA,,q% � more% �� �� � ���fresh(win%,q%) �!q%=win%:ș &400CB,,q% � �open(q%) �� � ���zoom(da%,db%) �� a%,b%,scl% #a%=��Xicon_getstr(win_main%,10) a%+=da% � a%>999 a%=999 $#b%=��Xicon_getstr(win_main%,11) .b%+=db% 8� b%>999 b%=999 B� a%<1 a%=1 L� b%<1 b%=1 V� b%>a% b%=a% `zoom=a%/b% j#�Xicon_setstr(win_main%,10,�a%) t#�Xicon_setstr(win_main%,11,�b%) ~!q%=win_pane%:ș &400CB,,q% �?� q%!20>1150*(zoom-1)-1 q%!20=1150*(zoom-1)-1:ș &400C5,,q% �q%!4=0:q%!8=-256 �q%!12=q%!4+1150*zoom �q%!16=0 �%ș &35,-1,4 � ,,scl%:scl%=1<<scl% �a%=q%!8�scl% �q%!12=q%!12+(scl%-a%) �ș &400D7,win_pane%,q%+4 �!q%=win_pane%:ș &400CB,,q% �/ș &400D1,win_pane%,q%!20,-256,q%!20+1150,0 �� � ��open(q%) � a%:a%=q%+1024 � !q%=win_main% � a%!0=win_pane%:ș &400CB,,a% (a%!28=q%!28:q%!28=win_pane% 2%a%!12=a%!12-a%!4:a%!16=a%!16-a%!8 <a%!4=q%!4+panex% Fa%!8=q%!8+paney% P%a%!12=a%!12+a%!4:a%!16=a%!16+a%!8 Zș &400C5,,a% d� nș &400C5,,q% x� � ���close(q%) �ș &400C6,,q% �� !q%<>win_main% � �!q%=win_pane% �ș &400C6,,q% �� � ���mclick �� xpos%,win%,but%,ic% �,xpos%=!q%:but%=q%!8:win%=q%!12:ic%=q%!16 �� �� q%!8=2 � ; � q%!12=-2 � q%!16=iconbar% �Xmenu_iconbar(menu_icon%) @ � q%!12=win_main% � q%!12=win_pane% �Xmenu_main(menu_main%) � "� ,+� (q%!8=4 � q%!8=1) � q%!12=win_pane% � 6� @� q%!8=4 � JG � q%!12=-2 � q%!16=iconbar% � sample_type%>-1 �fresh(win_main%,q%) T � q%!12=win_pane% �set_sel ^# � win%=win_main% � ic%=28 �ply h� r� |� q%!8=1 � � � q%!12=win_pane% �set_car �� �� �C� (but%=4 � but%=1) � win%=win_pane% �scroll_pane(xpos%,q%+512) �8� but%<>2 � win%=win_main% �handle_winmain(ic%,but%) �,� win%=win_save% �handle_saves(ic%,but%) �� � � ��ply �1� vol%,rate:vol%=��Xicon_getstr(win_main%,25) �$rate=��Xicon_getstr(win_main%,5) �1�play(sample%,sample%+samp_size%-1,vol%,rate) �� ��ply_sel �check_all(0) &1� vol%,rate:vol%=��Xicon_getstr(win_main%,25) 0$rate=��Xicon_getstr(win_main%,5) :8�play(sample%+sel_start%,sample%+sel_end%,vol%,rate) D� N X��handle_saves(ic%,but%) b Ȏ � � l.� ic%=0 � (but%=16 � but%=64) : �drag_save v� ic%=2 � (but%<>2) : �save �� �� � ���drag_save �� x0%,y0%,shft% �!q%=win_save%:ș &400CB,,q% �x0%=q%!4:y0%=q%!16 �q%!4=0:ș &400CE,,q% �$q%!4=5:q%!8+=x0%:q%!12=y0%+q%!12 �q%!16+=x0%:q%!20=y0%+q%!20 �ș &35,-1,11 � ,,x0% �(ș &35,-1,4 � ,,shft%:x0%=x0%<<shft% �ș &35,-1,12 � ,,y0% (ș &35,-1,5 � ,,shft%:y0%=y0%<<shft% 'q%!24=0:q%!28=0:q%!32=x0%:q%!36=y0% ș &400D0,,q% � * 4��handle_winmain(ic%,but%) >#� mul%:� �(-1) mul%=16 � mul%=1 H� but%=1 but%=-1 � but%=1 RȎ ic% � \� 14 : �zoom(but%*mul%,0) f� 15 : �zoom(-but%*mul%,0) p� 13 : �zoom(0,but%*mul%) z� 16 : �zoom(0,-but%*mul%) �� 27 : �vol(but%*mul%) �� 26 : �vol(-but%*mul%) �!� 9 : �pitch_bend(but%*mul%) �"� 29 : �pitch_bend(-but%*mul%) �� 19 : �crr(but%*mul%) �� 20 : �crr(-but%*mul%) �� �� � ���vol(inc%) �,� vol%:vol%=��Xicon_getstr(win_main%,25) �"vol%+=inc%:� vol%>127 vol%=127 �� vol%<0 vol%=0 %�Xicon_setstr(win_main%,25,�vol%) ?Vvol=vol% � $ . ��set_sel 8"� x%,ox%,oldss%,oldse%:x%=q%!0 B!q%=win_pane%:ș &400CB,,q% L/x%=x%-q%!4+q%!20:x%=x%*samp_size%/1150/zoom V� sel_start%=-1 � `sel_start%=x%:sel_end%=x%+1 jI� sel_end%>=samp_size% sel_start%-=samp_size%-2:sel_end%=samp_size%-1 t�new_selection ~� �%� x%<>sel_start% � x%<>sel_end% � �]� �(sel_start%-x%)<�(sel_end%-x%) ox%=sel_start%:sel_start%=x% � ox%=sel_end%:sel_end%=x% �0� sel_end%<=sel_start% sel_start%=sel_end%-1 �� sel_start%<0 sel_start%=0 �0� sel_end%<=sel_start% sel_end%=sel_start%+1 �� x%>ox% Ȕ x%,ox% �x%=x%*1150*zoom/samp_size% � ox%=ox%*1150*zoom/samp_size% �)ș &400D1,win_pane%,x%-8,-256,ox%+8,0 ��new_selection �� �� � ��scroll_pane(x%,q%) !q%=win_pane%:ș &400CB,,q% (<� x%>q%!12-16 �scrollx(win_pane%,(16-q%!12+x%)*4,q%+512) 2:� x%<q%!4+16 �scrollx(win_pane%,(x%-q%!4-16)*4,q%+512) <� F P��scrollx(win%,off%,q%) Z!q%=win%:ș &400CB,,q% dq%!20=q%!20+off% nș &400C5,,q% x� � ���ss �� a%,b%,x0%,y0% �%a%=�(�Xicon_getstr(win_main%,22)) �%b%=�(�Xicon_getstr(win_main%,23)) � � a%>b% � �Ȕ a%,b% �#�Xicon_putstr(win_main%,22,�a%) �#�Xicon_putstr(win_main%,23,�b%) �� �'x0%=sel_start%*1150*zoom/samp_size% �%x1%=sel_end%*1150*zoom/samp_size% �*ș &400D1,win_pane%,x0%-8,-256,x1%+8,0 sel_start%=a% sel_end%=b% � sel_start%>=0 � "'x0%=sel_start%*1150*zoom/samp_size% ,%x1%=sel_end%*1150*zoom/samp_size% 6*ș &400D1,win_pane%,x0%-8,-256,x1%+8,0 @� Jsel_start%=-1 Tsel_end%=-1 ^� h� r | ��set_car �� x%,pos%:pos%=q%!0 �"x%=caret%*1150*zoom/samp_size% �(ș &400D1,win_pane%,x%-8,-256,x%+8,0 � x%=caret% �!q%=win_pane%:ș &400CB,,q% �1caret%=(pos%-q%!4+q%!20)*samp_size%/1150/zoom �� caret%<0 caret%=0 �"x%=caret%*1150*zoom/samp_size% �(ș &400D1,win_pane%,x%-8,-256,x%+8,0 �'�Xicon_setstr(win_main%,18,�caret%) �7� tracking% � !Vcounter>0 � caret%<!Vsend-sample% � �!Vcounter=caret%+sample% �� � ��track &� x% 0"x%=caret%*1150*zoom/samp_size% :(ș &400D1,win_pane%,x%-2,-256,x%+2,0 Dcaret%=!Vcounter-sample% N"x%=caret%*1150*zoom/samp_size% X(ș &400D1,win_pane%,x%-2,-256,x%+2,0 b'�Xicon_setstr(win_main%,18,�caret%) l(� caret%>=!Vsend-sample% !Vcounter=0 v� � ���crr(dir%) �� caret%<0 � �� x% �"x%=caret%*1150*zoom/samp_size% �(ș &400D1,win_pane%,x%-8,-256,x%+8,0 �caret%+=dir% �� caret%<0 caret%=0 �,� caret%>=samp_size% caret%=samp_size%-1 �"x%=caret%*1150*zoom/samp_size% �(ș &400D1,win_pane%,x%-8,-256,x%+8,0 �'�Xicon_setstr(win_main%,18,�caret%) �7� tracking% � !Vcounter>0 � caret%<!Vsend-sample% � !Vcounter=caret%+sample% � � *��sc 4� a%,x% >%a%=�(�Xicon_getstr(win_main%,18)) H"x%=caret%*1150*zoom/samp_size% R(ș &400D1,win_pane%,x%-8,-256,x%+8,0 \ caret%=a% f� caret%<0 caret%=-1 p� caret%>=0 � z"x%=caret%*1150*zoom/samp_size% �(ș &400D1,win_pane%,x%-8,-256,x%+8,0 �� �� � � ��mess �� q%!16=0 quit%=-1:� �� q%!16=1 �data_save �0� q%!16=&400C0 �menu_warn(q%!32,q%!36,q%!40) �>� q%!16=3 � � �good_load(q%!40,�z(q%+44),q%!36,1) �loadack �� q%!16=2 �datasave_ack �� q%!16=5 � �+ ok%=0:� q%!40>&630 � q%!40<&635 ok%=-1 � � q%!40=&D3C ok%=-1 � ok% � �loadack , a%=�good_load(q%!40,�z(q%+44),q%!36,0) $ � .� 8� B L��data_save V'q%!36=-1:$(q%+44)="<Wimp$Scrap>"+�0 `q%!12=q%!8:q%!16=2 jș &400E7,17,q%,q%!4 tsaveref%=-1 ~�7 �� � � ��loadack �q%!12=q%!8:q%!16=4:q%!36=-1 �ș &400E7,17,q%,q%!4 �� � ���load(n$) �ș 8,17,n$ � ,,typ% �typ%=(typ%�&FFF00)>>8 ��"Set Effex$Type "+�typ% �!typ%=�good_load(typ%,n$,-1,1) � (ݤgood_load(type%,name$,size%,drag%) � ok%:ok%=-1 (%� sample_type%>=0 ok%=�check_load 2� ok%=-1 � <Ȏ type% � F#� &631 : ok%=�load_raw(name$,0) P#� &632 : ok%=�load_raw(name$,1) Z#� &633 : ok%=�load_raw(name$,2) d!� &634 : ok%=�load_eff(name$) n!� &D3C : ok%=�load_arm(name$) x& : � drag% ok%=�load_raw(name$,2) �� �� �� ok% � � q%!512=win_pane% � ș &400C6,,q%+512 � �fresh(win_main%,q%+512) � � name$<>"<Wimp$Scrap>" � � sname_log$=name$ � sname_uns$=name$ � sname_sgn$=name$ � sname_eff$=name$ � sname_arm$=name$ � � �"Remove <Wimp$Scrap>" � � "=ok% , 6ݤcheck_load @� go%,act%,win%,icon% J�fresh(win_load%,q%+512) T8� q%!512=win_load%:SYS "Wimp_GetWindowState",,q%+512 ^?� MOUSE RECTANGLE q%!516,q%!520,q%!524-q%!516,q%!528-q%!520 h� r�diapoll |� win%=win_load% � icon%=10 � act%=1 �� go%=2 � 9 �1q%!512=win_load%:q%!516=go%:ș &400CE,,q%+512 �/� (q%!(512+24)�(1<<21))<>0 act%=go%-2:go%=9 �� �"go%=�(name$):size%=�#go%:�#go% � Ȏ act% � �7� 0 : �Xmem_release(sample%):sample_type%=-1:go%=-1 �� 1 : go%=0 �� 2 : �av(0) �)� 3 : � caret%>=0 �av(caret%) � go%=0 �� 4 : �in(0) �)� 5 : � caret%>=0 �in(caret%) � go%=0 � 6 : �ov(0) )� 7 : � caret%>=0 �ov(caret%) � go%=0 : go%=1 &� 0�7 :q%!512=win_load% Dș &400C6,,q%+512 N+� MOUSE RECTANGLE -4000,-4000,4000,4000 X=go% b l��av(pos%) vwin%=�Xmem_claim(size%) �ș 8,16,name$,win%,0 �A%=win%:B%=win%+size%-1 �+C%=sample%+pos%:D%=sample%+samp_size%-1 �E%=samp_centre%:� mix ��Xmem_release(win%) � go%=1 �� � ���in(pos%) ��Xmem_delta(sample%,size%) �'�copy(pos%,samp_size%-1,pos%+size%) � ș 8,16,name$,sample%+pos%,0 �� ��ov(pos%) 1� samp_size%-pos%<size% size%=samp_size%-pos% win%=�(name$) *#ș &C,4,win%,sample%+pos%,size% 4 �#win% >� H R ��diapoll \� r% f� pș &400C7,0,q%+512 � r% zȎ r% � �� 2 : �open(q%+512) �� 3 : �open(q%+512) �! : �handle_reason(r%,q%+512) �� �� r%=6 � q%!(512+8)<>2 �&win%=q%!(512+12):icon%=q%!(512+16) �� � �ݤload_raw(name$,stype%) �� file%,pos%,not%,size% �(file%=�(name$):size%=�#file%:�#file% �pos%=�Xmem_claim(size%) �>� pos%=0 � 1,"Not enough memory (I need "+�size%+" bytes)" ș 8,16,name$,pos%,0 !sample%=pos%:samp_size%=size% sample_type%=stype% $sel_start%=-1 .sel_end%=-1 8�new_selection B�new_sample_type L�clr_all VȎ stype% � `� 0 : samp_centre%=128 j� 1 : samp_centre%=128 t� 2 : samp_centre%=0 ~� �=-1 � �ݤwget(pos%) �� a% ��#file%=pos% �a%=(�#file%)<<0 �a%+=(�#file%)<<8 �a%+=(�#file%)<<16 �a%+=(�#file%)<<24 �=a% � �ݤbget(pos%) �#file%=pos% =�#file% ��wput(w%) (�#file%,(w%�&FF)>>0 2�#file%,(w%�&FF00)>>8 <�#file%,(w%�&FF0000)>>16 F�#file%,(w%�&FF000000)>>24 P� Z dݤload_eff(n$) n � file%,pos%,not%,size%,rate x!file%=�(name$):size%=�wget(4) �pos%=�Xmem_claim(size%) �>� pos%=0 � 1,"Not enough memory (I need "+�size%+" bytes)" �%ș &C,3,file%,pos%,size%,�wget(8) �!sample%=pos%:samp_size%=size% �sample_type%=�bget(0) �caret%=�wget(12) �sel_start%=�wget(16) �sel_end%=�wget(20) �rate=�wget(24)/(1<<24) �$�Xicon_setstr(win_main%,5,�rate) �+�Xicon_setstr(win_main%,4,�(1000/rate)) ��#file% ��new_selection �new_sample_type Ȏ sample_type% � � 0 : samp_centre%=128 "� 1 : samp_centre%=128 ,� 2 : samp_centre%=0 6� @=-1 J Tݤload_arm(n$) ^ � file%,pos%,not%,size%,rate h"file%=�(name$):size%=�#file%-1 rpos%=�Xmem_claim(size%) |>� pos%=0 � 1,"Not enough memory (I need "+�size%+" bytes)" �ș &C,3,file%,pos%,size%,1 �!sample%=pos%:samp_size%=size% �sample_type%=2 �sel_start%=-1 �sel_end%=-1 �rate=1000/�bget(0) �$�Xicon_setstr(win_main%,5,�rate) �+�Xicon_setstr(win_main%,4,�(1000/rate)) ��#file% ��new_selection ��new_sample_type �samp_centre%=0 �=-1 ��menu_warn(a%,b%,c%) � a%=1 � & �savewinp(b%) 0 save_sample%=sample% : save_samp_size%=samp_size% D save_caret%=caret% N save_sel_start%=sel_start% X save_sel_end%=sel_end% b� l= � a%=0 � b%=1 : �open_sinfo:ș &400E8,,q%!20,q%!24,q%!28 v � a%=2 � b%=11 � � �savewinp(c%) �& save_sample%=sample%+sel_start% �* save_samp_size%=sel_end%-sel_start% �$ save_caret%=caret%-sel_start% � save_sel_start%=0 �$ save_sel_end%=save_samp_size% �$ � save_caret%<0 save_caret%=0 �3 � save_caret%>=save_samp_size% save_caret%=0 � � �� �� � ���savewinp(b%) Ȏ b% � � 0 : $save_txt%=sname_log$ �savewin("631") # save_size%=samp_size% * � 1 : $save_txt%=sname_sgn$ 4 �savewin("632") ># save_size%=samp_size% H � 2 : $save_txt%=sname_uns$ R �savewin("633") \# save_size%=samp_size% f � 3 : $save_txt%=sname_eff$ p �savewin("634") z# save_size%=samp_size% � � 4 : $save_txt%=sname_arm$ � �savewin("D3C") �# save_size%=samp_size% � � �� � ���savewin(file_type$) �$$save_valid%="Sfile_"+file_type$ � file_type%=�("&"+file_type$) � ș &400E8,,q%!20,q%!24,q%!28 �� � � ��init icon_size%=4:menu_size%=8 2icon_size%=icon_size%*1024:� icons% icon_size% >menu_size%=menu_size%*1024:� menus% menu_size%,q% 2048+512 $2� save_valid% 16,save_txt% 255,code% 1024,L%-1 .-Xtemp%=q%+512:�Xwimp_init("Effex editor") 85� �pvN:�Xwimp_templates(icons%,icons%+icon_size%) B�Xmem_init(32) Lquit%=0 Vnum_libs%=0 `.� lib_name$(15),lib_pos%(15),lib_size%(15) j �vars t�creicon ~�getwininfo � �info_win ��assem(code%) ��init_voice �!samp_size%=0:sample%=0:vdu%=5 �4zoom=1:sample_type%=-1:sel_start%=-1:sel_end%=-1 �caret%=0:play_rate%=&1800 � use_selection%=0:tracking%=0 �� � � ��vars �sname_log$="LogSample" �sname_uns$="RawSample" sname_sgn$="SignSample" sname_eff$="Sample" sname_arm$="ArmaSample" sname_sel$="Selection" (sname_lib$="SampLib" 20mod0$="Y EOR (X AND 255) EOR (128*(X MOD2))" <mod1$="" Fmod2$="" Pmod3$="" Zmod4$="" d� n x��getwininfo �� a%:a%=q%+1024 �!q%=win_main% �!a%=win_pane% �ș &400CB,,q% �ș &400CB,,a% �panex%=a%!4-q%!4 �paney%=a%!8-q%!8 �� � ���err(fat%) �*err$=�$:� �(-3)=0 err$+=" at line "+Þ �"� �(-1) �"Set Err$Err "+err$:� �!q%=�:$(q%+4)=err$ #ș &400DF,q%,3,"Effex" � ,resp% � resp%<>1 quit%=-1 � quit% � �(-1) � "� fat%<>0 � ,� 6 @��info_win J3�Xicon_setstr(win_info%,2,"� Paul Mason, 1993") T3�Xicon_setstr(win_info%,3,"1.02 (08-Apr-1993)") ^� h r ��creicon |*!q%=-1:q%!4=0:q%!8=0:q%!12=64:q%!16=64 �%q%!20=&1700303A:$(q%+24)="!effex" �ș &400C2,,q% � iconbar% �� � ���cre_menus(start%,end%) ��crem_icon ��crem_main �� � ���crem_icon �4�Xmenu_start("Effex",start%,end%):menu_icon%=r0% �$�Xmenu_additem("Info",win_info%) �"�Xmenu_additem("Clear all",-1) �Xmenu_additem("Quit",-1) �Xmenu_end(start%,end%) � & 0 ��menusel :ș &400CF,,q%+1024 Dadjust%=(q%!(1024+8)=1) NȎ Xmenu_ptr% � X� menu_icon% : �decm_icon b� menu_main% : �decm_main l� v5� adjust% ș &400D4,,Xmenu_ptr%,Xmenu_x%,Xmenu_y% �� � ���decm_icon � Ȏ q%!0 � �B� 1 : � sample_type%>=0 �Xmem_release(sample%):sample_type%=-1 � !q%=win_main%:�close(q%) �� 2 : quit%=-1 �� �� � ���open_save(win%) � Ȏ win% � �%� 0 : �osavewin("631",sname_log$) !%� 1 : �osavewin("632",sname_sgn$) !%� 2 : �osavewin("633",sname_uns$) !%� 3 : �osavewin("634",sname_eff$) ! %� 4 : �osavewin("D3C",sname_arm$) !*� !4� !> !H��osavewin(type$,a$) !R$save_txt%=a$ !\ș &400CF,,q%+1024 !f$save_valid%="Sfile_"+type$ !pfile_type%=�("&"+type$) !zsave_size%=samp_size% !�(ș &400D4,,win_save%,q%!1024,q%!1028 !�� !� !�ݤkey_ok(k%) !�� ok%:ok%=-1 !��valid_sel !�Ȏ k%+64 � !�%� �"A" : �adj_sel(0,samp_size%-1) !�� �"C" : �copy_sel !�#� �"I" : �fadein(Sstart%,Send%) !�8� �"L" : �Xicon_setstr(win_main%,25,"127"):?Vvol=127 !�$� �"O" : �fadeout(Sstart%,Send%) !�� �"P" : �ply "3� �"S" : ?Vcommand=1:Ȗ:?Vcommand=0:!Vcounter=0 "D� �"T" : tracking%=�tracking%:�Xmenu_tick(menu_track%,tracking%) "� �"E" : �ply_sel "$� �"V" : �move_sel ".� �"X" : �del_sel "8� �"Y" : �copy2_sel "B� �"Z" : �adj_sel(-1,-1) "L� �"Z"+64 : �selzm "V� 32+64 : �cont "`� &183+64: �open_save(3) "j : ok%=0 "t� "~=ok% "� "� ��cont "�� s "�2� sample_type%>=0 � caret%>0 � caret%<!Vsend � "�!s=��Xicon_getstr(win_main%,5) "�$�play(caret%+sample%,!Vsend,0,s) "�� "�� "� "���check_all(cc%) "�.� caret%<0 � cc%<>0 � 1,"No caret present" "�%� sel_start%<0 � 1,"No selection" # � # #��copy2_sel #�check_all(-1) #(A%=sel_start%+sample% #2B%=sel_end%+sample% #<C%=caret%+sample% #FD%=sample%+samp_size% #P � copy #Z�red #d� #n #x��insert(pos%,size%) #��Xmem_delta(sample%,size%) #�'�copy(pos%,samp_size%-1,pos%+size%) #�� caret%>pos% caret%+=size% #�samp_size%+=size% #�'� sel_start%>pos% sel_start%+=size% #�#� sel_end%>pos% sel_end%+=size% #�� #� #���delete(start%,end%) #�7� end%<samp_size%-1 �copy(end%,samp_size%-1,start%) #�$�Xmem_delta(sample%,start%-end%) #�1� caret%>=start% � caret%<=end% caret%=start% #�=� sel_start%>=start% � sel_start%<=end% sel_start%=start% $7� sel_end%>=start% � sel_end%<=end% sel_end%=start% $'� caret%>start% caret%-=end%-start% $samp_size%-=end%-start% $"� $, $6 ��del_sel $@�check_all(0) $J �delete(sel_start%,sel_end%) $Tsel_start%=-1 $^sel_end%=-1 $h�red $r� $| $���copy_sel $��check_all(-1) $�N� caret%>=sel_start% � caret%<=sel_end% � 1,"Cannot copy inside selection" $�'�insert(caret%,sel_end%-sel_start%) $�%�copy(sel_start%,sel_end%,caret%) $��red $�� $� $���move_sel $�� size%,pos% $��check_all(-1) $�size%=sel_end%-sel_start% $�pos%=�Xmem_claim(size%) %+�copy(sel_start%,sel_end%,pos%-sample%) % �delete(sel_start%,sel_end%) %�insert(caret%,size%) %&3�copy(pos%-sample%,pos%-sample%+size%-1,caret%) %0�Xmem_release(pos%) %:sel_start%=caret% %Dsel_end%=caret%+size% %N�red %X� %b %l��modulate(s$,s%,e%) %v� len%,Z:len%=e%-s% %�Z=samp_centre% %�ș "Hourglass_On" %�A� X=s%-sample% � e%-sample%:Y=sample%?X:Y=�(s$):� Y>255 Y=255 %�/ș &406C4,(X-s%+sample%)*100/len%:� Y<0 Y=0 %�sample%?X=Y:Z=Y:� %��red %�ș "Hourglass_Off" %�� %� %���selzm %�3�zoom(999,(sel_end%-sel_start%)*999/samp_size%) %�!q%=win_pane%:ș &400CC,,q% %�%q%!20=q%!52*sel_start%/samp_size% &ș &400C5,,q% &� & & ��decm_main &*Ȏ !q% � &4� 0 : Ȏ q%!4 � &>* � 2 : sample_type%=0:�new_sample_type &H* � 3 : sample_type%=1:�new_sample_type &R* � 4 : sample_type%=2:�new_sample_type &\ � 5 : �lin2log &f% sample_type%=0:�new_sample_type &p � 6 : �log2lin &z% sample_type%=1:�new_sample_type &�1 � 7 : �eor(128,sample%,samp_size%+sample%-1) &�2 sample_type%=sample_type%�3:�new_sample_type &� � 8 : �calc_centre &� � &�� 1 : Ȏ q%!4 � &�# � 0,1,2,3,4 : �open_save(q%!4) &� � &�� 2 : Ȏ q%!4 � &�# � 0 : �adj_sel(0,samp_size%-1) &� � 1 : �adj_sel(-1,-1) &� � 2 : �del_sel &� � 3 : �copy_sel &� � 4 : �copy2_sel ' � 5 : �move_sel ' � 6 : �mix ' � 7 : �premix '$ � 8 : �postmix '. � 9 : �selzm '8 � 10: �ply_sel 'B � 'L� 3 : �valid_sel 'V Ȏ q%!4 � '` � 0 : �toggle_sel 'j" � 1 : �reverse(Sstart%,Send%) 't � 2 : �amp(0,Sstart%,Send%) '~! � 3 : �fadein(Sstart%,Send%) '�" � 4 : �fadeout(Sstart%,Send%) '�2 � 5 : �amp((��z(amplify%))/100,Sstart%,Send%) '�0 � 6 : �amp(100/��z(amplify%),Sstart%,Send%) '�. � 7 : �eor(��z(eor_const%),Sstart%,Send%) '�. � 8 : �add(��z(add_const%),Sstart%,Send%) '�- � 9 : �hpf(�z(hp_filter%),Sstart%,Send%) '�- � 10: �lpf(�z(lp_filter%),Sstart%,Send%) '�/ � 11: �core(��z(core_filt%),Sstart%,Send%) '�1 � 12: �loboost(1/��z(fboost%),Sstart%,Send%) '�/ � 13: �loboost(��z(fboost%),Sstart%,Send%) '� � 14: Ȏ q%!8 � '�3 � 0 : �modulate(�z(menu_mod0%),Sstart%,Send%) ( 3 � 1 : �modulate(�z(menu_mod1%),Sstart%,Send%) ( 3 � 2 : �modulate(�z(menu_mod2%),Sstart%,Send%) (3 � 3 : �modulate(�z(menu_mod3%),Sstart%,Send%) (3 � 4 : �modulate(�z(menu_mod4%),Sstart%,Send%) (( � (2 � 15: Ȏ q%!8 � (< � 0,1: (F8 � 2 : �echo(��z(echo_length%),��z(echo_strength%)) (P: � 3 : �flange(��z(echo_length%),��z(echo_strength%)) (Z< � 4 : �hallecho(��z(echo_length%),��z(echo_strength%)) (d � (n � (x� WHEN 4 : CASE q%!4 OF (�; � WHEN 0 : IF q%!8>-1 PROCadd_libentry(FNz(lib_name%)) (� � WHEN 1 : (� � WHEN 2 : (�1 � WHEN 3 : IF q%!8>-1 PROCdel_libentry(q%!8) (� � ENDCASE (�� 4 : Ȏ q%!4 � (� � 0 : �ply (�1 � 1 : ?Vcommand=1:Ȗ:?Vcommand=0:!Vcounter=0 (�B � 2 : tracking%=�tracking%:�Xmenu_tick(menu_track%,tracking%) (� � 3 : �cont (� � 4 : �pitch_bend(1) (� � 5 : �pitch_bend(-1) (�6 � 6 : �Xicon_setstr(win_main%,25,"127"):?Vvol=127 ) � )� )� )" ),��echo(D%,str) )6A%=Sstart% )@B%=Send% )JC%=samp_centre% )TE%=(str/100)*(1<<12) )^ � echo )h� )r )|��hallecho(a%,b) )�ȕ b>=1 )��flange(a%,b) )�a%=a%*2:b=b/2 )�� )�� )� )���flange(D%,str) )�A%=Sstart% )�B%=Send% )�C%=samp_centre% )�E%=(str/100)*(1<<12) )�� flange )�� * *��valid_sel *&� use_selection% � sel_start%>=0 � *&Sstart%=sel_start% *0:Send%=sel_end%:� Send%>samp_size%-1 Send%=samp_size%-1 *:� *D Sstart%=0 *NSend%=samp_size%-1 *X� *bSstart%+=sample% *lSend%+=sample% *v� *� *���calc_centre *�!A%=sample%:B%=A%+samp_size%-1 *�C%=0:� calc_centre *�-samp_centre%=(!centre_val)/samp_size%+0.5 *�� *� *� ��lin2log *�%� vol%,a%,b%:ș &40180,127 � vol% *�� a%=0 � 255 *�ș &40181,(a%-128)<<24 � b% *�q%?a%=b% *�� +"A%=sample%:B%=samp_size%:C%=q% + � convert +ș &40180,vol% + �red +*� +4 +> ��log2lin +H%� vol%,a%,b%:ș &40180,127 � vol% +R� a%=0 � 255 +\ș &40181,(a%-128)<<24 � b% +fq%?b%=a% +p� +z"A%=sample%:B%=samp_size%:C%=q% +� � convert +�ș &40180,vol% +��red +�� +� +���loboost(val,A%,B%) +�� a% +�� a%=0 � 255 +�,q%!(a%<<2)=((255-a%)*val+a%)*(1<<12)�255 +�� +�D%=samp_centre% +� C%=q% +�� boost ,�red ,� , ,$��hiboost(val,A%,B%) ,.� a% ,8� a%=0 � 255 ,B*q%!(a%<<2)=(a%*val+255-a%)*(1<<12)�255 ,L� ,VD%=samp_centre% ,` C%=q% ,j� boost ,t�red ,~� ,� ,���reverse(A%,B%) ,� � reverse ,��red ,�� ,� ,���amp(a,A%,B%) ,�C%=samp_centre% ,�D%=a*(1<<12) ,� � amp ,��red ,�� - - ��fadein(A%,B%) -C%=samp_centre% -� fadein -(�red -2� -< -F��fadeout(A%,B%) -PC%=samp_centre% -Z � fadeout -d�red -n� -x -���eor(C%,A%,B%) -� � eor -��red -�� -� -���add(C%,A%,B%) -� � add -��red -�� -� -� ��red -�!q%=win_pane%:ș &400CB,,q% -�/ș &400D1,win_pane%,q%!20,-256,q%!20+1150,0 .� . .��init_voice ."� a% .,#ș &40140,0,0,0,0,0 � num_chan% .6%� num_chan%>2 a%=num_chan% � a%=2 .@ș &40140,a%,0,0,0,0 .J2ș "Sound_InstallVoice",Vbase,0 � ,voice_slot% .T� .^ .h��quit_voice .rș &40140,num_chan%,0,0,0,0 .|'ș "Sound_RemoveVoice",,voice_slot% .�� .� .���pitch_bend(change) .�play_rate%+=change*16 .�� 2,&1FF,play_rate%,255 .�� .� .���hpf(s$,A%,B%) .�Ȏ �s$,1) � .�#� "+","-" : C%=samp_centre%+�s$ .� : C%=�s$ .�� .� � hp_filt /�red /� / /&��lpf(s$,A%,B%) /0Ȏ �s$,1) � /:#� "+","-" : C%=samp_centre%+�s$ /D : C%=�s$ /N� /X � lp_filt /b�red /l� /v /���core(v%,A%,B%) /�E%=samp_centre% /�C%=E%-v% /�D%=E%+v% /�� core_filt /��red /�� /� /���play(pos%,end%,vol%,rate) /�� a%,b%,c% /�+c%=tab_start:rate=�(6144/12.5*rate+0.5) /�!Vspos=pos%:!Vsend=end% /�!Vconv_tab=tab_start 0� a%=0 � 255 0Ȏ sample_type% � 0� 0 : c%?a%=a% 0 (� 1 : ș &40181,(a%-128)<<24 � c%?a% 0*.� 2 : ș &40181,((a%�128)-128)<<24 � c%?a% 04� 0>� 0Hș &40185,2,voice_slot% 0Rș &40142,2,0 0\� 2,&17F,rate,255 0fplay_rate%=rate 0p� 0z 0���copy(A%,B%,C%) 0�A%+=sample% 0�B%+=sample% 0�C%+=sample% 0� � copy 0�� 0� 0���check_limits 0�� a%,b% 0�%� Sstart%<sample% Sstart%=sample% 0�:� Send%>=sample%+samp_size% Send%=sample%+samp_size%-1 0�a%=sel_start% 0�� sel_start%<0 a%=0 1b%=sel_end% 1@� sel_end%>=sample%+samp_size% sel_end%=sample%+samp_size%-1 1�adj_sel(a%,b%) 1$� 1. 18��toggle_sel 1B#use_selection%=� use_selection% 1L+�Xmenu_tick(menu_selfx%,use_selection%) 1V� 1` 1j ��clr_all 1tuse_selection%=0 1~�Xmenu_tick(menu_selfx%,0) 1�� 1� 1���new_sample_type 1�'� shade%,tick%:shade%=%1111:tick%=0 1�Ȏ sample_type% � 1�3� 0 : shade%=%0101:tick%=%1001:samp_centre%=128 1�3� 1 : shade%=%0010:tick%=%1010:samp_centre%=128 1�1� 2 : shade%=%0011:tick%=%0100:samp_centre%=0 1�� 1�'�Xmenu_shade(menu_conv%+0,shade%�1) 1�(�Xmenu_shade(menu_conv%+24,shade%�2) 1�(�Xmenu_shade(menu_conv%+48,shade%�4) 2 (�Xmenu_shade(menu_conv%+72,shade%�8) 2 &�Xmenu_tick(menu_stype%+0,tick%�1) 2*�Xmenu_shade(menu_save%+0,(tick%�7)�1) 2'�Xmenu_tick(menu_stype%+24,tick%�2) 2(+�Xmenu_shade(menu_save%+24,(tick%�7)�2) 22'�Xmenu_tick(menu_stype%+48,tick%�4) 2<+�Xmenu_shade(menu_save%+48,(tick%�7)�4) 2F'�Xmenu_shade(menu_save%+96,tick%�8) 2P� 2Z 2d��do_libentries 2n� a% 2x� num_libs%<=0 � 2�"�Xmenu_shade(menu_lib%+24*1,1) 2�"�Xmenu_shade(menu_lib%+24*2,1) 2�"�Xmenu_shade(menu_lib%+24*3,1) 2�$(sub_lib2%+40)="" 2�sub_lib2%!28=128 2�$sub_lib2%!36=sub_lib%!36�(1<<22) 2�� 2�'sub_lib2%!36=sub_lib%!36�(�(1<<22)) 2�"�Xmenu_shade(menu_lib%+24*1,0) 2�"�Xmenu_shade(menu_lib%+24*2,0) 2�"�Xmenu_shade(menu_lib%+24*3,0) 2�� a%=0 � num_libs%-1 2�,$(sub_lib2%+40+a%*24)=�lib_name$(a%),11) 34sub_lib2%!(28+a%*24)=sub_lib2%!(28+a%*24)�(�128) 3� 3=sub_lib2%!(4+num_libs%*24)=sub_lib2%!(4+num_libs%*24)�128 3"� 3,� 36 3@��add_libentry(s$) 3J� a%,si% 3Ts$=�s$,11) 3^E� num_libs%>=16 � 1,"Too many library entries (can only have 16)" 3hlib_name$(num_libs%)=s$ 3rsi%=sel_end%-sel_start%+1 3|-� sel_start%<0 � 1,"No selection to add!" 3�9a%=�Xmem_claim(si%):� a%=0 � 1,"No room to add entry" 3�lib_pos%(num_libs%)=a% 3�lib_size%(num_libs%)=si% 3�num_libs%+=1 3��do_libentries 3�� 3� 3���del_libentry(s%) 3�� a% 3��Xmem_release(lib_pos%(s%)) 3�num_libs%-=1 3�$� s%>=num_libs% �do_libentries:� 3�� a%=s% � num_libs%-1 4!lib_name$(a%)=lib_name$(a%+1) 4lib_pos%(a%)=lib_pos%(a%+1) 4!lib_size%(a%)=lib_size%(a%+1) 4&�do_libentries 40� 4: 4D��adj_sel(a%,b%) 4Nsel_start%=a%:sel_end%=b% 4X�new_selection 4b!q%=win_pane%:ș &400CB,,q% 4l/ș &400D1,win_pane%,q%!20,-256,q%!20+1149,0 4v� 4� 4���samp_mix(A%,B%,C%) 4�A%+=sample% 4�B%+=sample% 4�C%+=sample% 4�D%=sample%+samp_size%-1 4�E%=samp_centre%:� mix 4�� 4� 4� ��mix 4��check_all(-1) 4�M� caret%>=sel_start% � caret%<=sel_end% � 1,"Cannot mix within selection" 4�)�samp_mix(sel_start%,sel_end%,caret%) 5� 5 5��premix 5 � size% 5*�check_all(0) 54size%=sel_end%-sel_start% 5>C%=sel_start%-size%+sample% 5HD%=sel_start%-1+sample% 5RA%=sel_start%+sample% 5\B%=sel_end%+sample% 5fE%=samp_centre%:� mix 5p� 5z 5� ��postmix 5��check_all(0) 5�-�samp_mix(sel_start%,sel_end%,sel_end%+1) 5�� 5� 5���new_selection 5� Ȏ � � 5�)� sel_start%>=0 � sel_end%>sel_start% 5�# �Xmenu_shade(menu_sel%+24*0,0) 5�# �Xmenu_shade(menu_sel%+24*1,0) 5�# �Xmenu_shade(menu_sel%+24*2,0) 5�# �Xmenu_shade(menu_sel%+24*3,0) 5�# �Xmenu_shade(menu_sel%+24*4,0) 6# �Xmenu_shade(menu_sel%+24*5,0) 6# �Xmenu_shade(menu_sel%+24*6,0) 6# �Xmenu_shade(menu_sel%+24*7,0) 6$# �Xmenu_shade(menu_sel%+24*8,0) 6.# �Xmenu_shade(menu_sel%+24*9,0) 68$ �Xmenu_shade(menu_sel%+24*10,0) 6B$ �Xmenu_shade(menu_sel%+24*11,0) 6L �Xmenu_shade(menu_lib%,0) 6V �Xmenu_shade(menu_selfx%,0) 6`*� sel_start%=0 � sel_end%=samp_size%-1 6j# �Xmenu_shade(menu_sel%+24*0,1) 6t# �Xmenu_shade(menu_sel%+24*1,0) 6~# �Xmenu_shade(menu_sel%+24*2,0) 6�# �Xmenu_shade(menu_sel%+24*3,0) 6�# �Xmenu_shade(menu_sel%+24*4,0) 6�# �Xmenu_shade(menu_sel%+24*5,0) 6�# �Xmenu_shade(menu_sel%+24*6,0) 6�# �Xmenu_shade(menu_sel%+24*7,0) 6�# �Xmenu_shade(menu_sel%+24*8,0) 6�# �Xmenu_shade(menu_sel%+24*9,0) 6�$ �Xmenu_shade(menu_sel%+24*10,0) 6�$ �Xmenu_shade(menu_sel%+24*11,0) 6� �Xmenu_shade(menu_lib%,0) 6� �Xmenu_shade(menu_selfx%,0) 6� 7 # �Xmenu_shade(menu_sel%+24*0,0) 7 # �Xmenu_shade(menu_sel%+24*1,1) 7# �Xmenu_shade(menu_sel%+24*2,1) 7# �Xmenu_shade(menu_sel%+24*3,1) 7(# �Xmenu_shade(menu_sel%+24*4,1) 72# �Xmenu_shade(menu_sel%+24*5,1) 7<# �Xmenu_shade(menu_sel%+24*6,1) 7F# �Xmenu_shade(menu_sel%+24*7,1) 7P# �Xmenu_shade(menu_sel%+24*8,1) 7Z# �Xmenu_shade(menu_sel%+24*9,1) 7d$ �Xmenu_shade(menu_sel%+24*10,1) 7n$ �Xmenu_shade(menu_sel%+24*11,1) 7x �Xmenu_shade(menu_lib%,1) 7� �Xmenu_shade(menu_selfx%,1) 7�� 7�+�Xicon_setstr(win_main%,22,�sel_start%) 7�)�Xicon_setstr(win_main%,23,�sel_end%) 7�� 7� 7���open_sinfo 7��set_sinfo(0,caret%) 7��set_sinfo(4,sel_start%) 7��set_sinfo(8,sel_end%) 7�&�set_sinfo(12,sel_end%-sel_start%) 7��set_sinfo(16,samp_size%) 7�� 8 8��set_sinfo(ic%,data%) 82� rate%:rate%=��Xicon_getstr(win_main%,5)*1000 8"� data%>-1 � 8,6�Xicon_setstr(win_sampinfo%,ic%,��(data%/1024),8)) 861�Xicon_setstr(win_sampinfo%,ic%+1,��data%,8)) 8@9�Xicon_setstr(win_sampinfo%,ic%+2,��(data%/rate%),8)) 8J=�Xicon_setstr(win_sampinfo%,ic%+3,��(data%/rate%*100),8)) 8T� 8^+�Xicon_setstr(win_sampinfo%,ic%,"None") 8h-�Xicon_setstr(win_sampinfo%,ic%+1,"None") 8r-�Xicon_setstr(win_sampinfo%,ic%+2,"None") 8|-�Xicon_setstr(win_sampinfo%,ic%+3,"None") 8�� 8�� 8� 8���crem_main 8�2�Xmenu_start("Misc",start%,end%):sub_misc%=r0% 8�'�Xmenu_additem("Program",win_info%) 8�*�Xmenu_additem("Sample",win_sampinfo%) 8��Xmenu_message(r0%) 8��Xmenu_dot 8�3�Xmenu_additem("Log sample",-1):menu_stype%=r0% 8�&�Xmenu_additem("Signed sample",-1) 8�(�Xmenu_additem("Unsigned sample",-1) 8��Xmenu_dot 9/�Xmenu_additem("Lin2Log",-1):menu_conv%=r0% 9 �Xmenu_additem("Log2Lin",-1) 9!�Xmenu_additem("(Un)sign",-1) 9&�Xmenu_dot 90%�Xmenu_additem("Calc. centre",-1) 9:�Xmenu_end(start%,end%) 9D� 9N2�Xmenu_start("Save",start%,end%):sub_save%=r0% 9X2�Xmenu_additem("Log",win_save%):menu_save%=r0% 9b�Xmenu_message(r0%) 9l&�Xmenu_additem("Signed",win_save%) 9v�Xmenu_message(r0%) 9�(�Xmenu_additem("Unsigned",win_save%) 9��Xmenu_message(r0%) 9��Xmenu_dot 9�%�Xmenu_additem("Effex",win_save%) 9��Xmenu_message(r0%) 9�(�Xmenu_additem("Armadeus",win_save%) 9��Xmenu_message(r0%) 9��Xmenu_end(start%,end%) 9�� 9�6�Xmenu_start("Selection",start%,end%):sub_sel%=r0% 9�9�Xmenu_additem("Select all ^A",-1):menu_sel%=r0% 9�+�Xmenu_additem("Clear selection ^Z",-1) 9��Xmenu_dot :+�Xmenu_additem("Delete ^X",-1) :+�Xmenu_additem("Copy ^C",-1) :+�Xmenu_additem("Copy over ^Y",-1) : +�Xmenu_additem("Move ^V",-1) :*�Xmenu_dot :4�Xmenu_additem("Mix",-1) :> �Xmenu_additem("Pre-mix",-1) :H!�Xmenu_additem("Post-mix",-1) :R�Xmenu_dot :\*�Xmenu_additem("Zoom Z",-1) :f+�Xmenu_additem("Play ^E",-1) :p.�Xmenu_additem("Save selection",sub_save%) :z�Xmenu_end(start%,end%) :�� :�2�Xmenu_start("Echo",start%,end%):sub_echo%=r0% :�?�Xmenu_addwrs("Length","a0-9,&,A-F,a-f","128",echo_length%) :�:�Xmenu_addwrs("Strength","a0-9,.","60",echo_strength%) :��Xmenu_dot :�'�Xmenu_additem("Normal echo E",-1) :�'�Xmenu_additem("Flange echo F",-1) :�'�Xmenu_additem("Hall echo H",-1) :��Xmenu_end(start%,end%) :�� :�5�Xmenu_start("Modulate",start%,end%):sub_mod%=r0% :�E�Xmenu_addinput("",64,10):menu_mod0%=Xmenu_end%:$Xmenu_end%=mod0$ :�E�Xmenu_addinput("",64,10):menu_mod1%=Xmenu_end%:$Xmenu_end%=mod1$ ;E�Xmenu_addinput("",64,10):menu_mod2%=Xmenu_end%:$Xmenu_end%=mod2$ ;E�Xmenu_addinput("",64,10):menu_mod3%=Xmenu_end%:$Xmenu_end%=mod3$ ;E�Xmenu_addinput("",64,10):menu_mod4%=Xmenu_end%:$Xmenu_end%=mod4$ ;$�Xmenu_end(start%,end%) ;.� ;83�Xmenu_start("Effects",start%,end%):sub_fx%=r0% ;B2�Xmenu_additem("Selection",-1):menu_selfx%=r0% ;L�Xmenu_dot ;V �Xmenu_additem("Reverse",-1) ;` �Xmenu_additem("Silence",-1) ;j&�Xmenu_additem("Fade in ^I",-1) ;t&�Xmenu_additem("Fade out ^O",-1) ;~�Xmenu_dot ;�2�Xmenu_addwrs("Amplify","a0-9","100",amplify%) ;�� PROCXmenu_shade(r0%,1) ;�&�Xmenu_addwrs2("Quieten",amplify%) ;�>�Xmenu_addwrs("Eor const","a0-9,&,A-F,a-f","0",eor_const%) ;�>�Xmenu_addwrs("Add const","a0-9,&,A-F,a-f","0",add_const%) ;�;�Xmenu_addwrs("HA filter","a0-9,+,\-","+96",hp_filter%) ;�;�Xmenu_addwrs("LA filter","a0-9,+,\-","-96",lp_filter%) ;�A�Xmenu_addwrs("Core filter","a0-9,&,A-F,a-f","16",core_filt%) ;�4�Xmenu_addwrs("LF boost","a0-9,.","1.5",fboost%) ;�&�Xmenu_addwrs2("HF boost",fboost%) ;�'�Xmenu_additem("Modulate",sub_mod%) ;�$�Xmenu_additem("Echo",sub_echo%) <