Home » Archimedes archive » Micro User » MU 1992-04.adf » SFX » !SFXED/!RunImage
!SFXED/!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 » Micro User » MU 1992-04.adf » SFX |
Filename: | !SFXED/!RunImage |
Read OK: | ✔ |
File size: | 12021 bytes |
Load address: | 0000 |
Exec address: | 0000 |
Duplicates
There is 1 duplicate copy of this file in the archive:
- Archimedes archive » Archimedes World » AW-1992-05.adf » May92 » !AWMay92/Goodies/SFXMDemo/!SFXED/!RunImage
- Archimedes archive » Micro User » MU 1992-04.adf » SFX » !SFXED/!RunImage
File contents
10REM >RAM:$.!SFXED.!RunImage 20REM >Written by G. Vermeulen 30ON ERROR PROCIntError:GOTO 50 40PROCInit 50REPEAT 60 SYS"Wimp_Poll",0,pollb% TO reason%,polledb% 70 CASE reason% OF 80 WHEN 0:PROCNull_Reason 90 WHEN 1:PROCRedraw_Window 100 WHEN 2:PROCOpen_Window 110 WHEN 3:PROCClose_Window 120 WHEN 6:PROCMouse_Click 130 WHEN 7:PROCUser_Drag_Box 140 WHEN 8:PROCKey_Pressed 150 WHEN 9:PROCMenu_Select 160 WHEN 17,18,19:PROCUser_Message 170 ENDCASE 180UNTIL FALSE 190END 200 210DEFPROCIntError 220LOCAL ERROR 230ON ERROR LOCAL GOTO 23720 240A%=FNinterr(REPORT$+" at line "+STR$ERL+". Continue program?") 250IF A%=2 THEN PROCQuit 260ENDPROC 270 280DEFPROCScrToWork 290temp%!0=wworkh% 300SYS"Wimp_GetWindowState",,temp% 310SYS"Wimp_GetPointerInfo",,temp2% 320workx%=temp2%!0-temp%!4+temp%!20 330IF workx%<0 THEN workx%=0 340IF workx%>maxx% THEN workx%=maxx% 350ENDPROC 360 370DEFFNWorkToPtr(a%) 380IF a%=-1 THEN =-1 ELSE =INT(0.5+samplelen%*a%/maxx%) 390 400DEFFNPtrToWork(a%) 410IF a%=-1 THEN =-1 ELSE =INT(0.5+maxx%*a%/samplelen%) 420 430DEFPROCNull_Reason 440PROCPutPtrs 450PROCPlotPP 460PROCCheckScroll 470CASE dragtype% OF 480 WHEN 1:PROCDragASelL 490 WHEN 2:PROCDragASelR 500 WHEN 3:PROCDragLoopL 510 WHEN 4:PROCDragLoopR 520ENDCASE 530ENDPROC 540 550DEFPROCPutPtrs 560SYS"SFXMP_GetPtrs"TOA%:A%!0=startsample%:A%!4=samplelen%:A%!8=ploopl%:A%!12=ploopr%:A%!16=pselectl%:A%!20=pselectr%:A%!24=playtype%:A%!28=stype%:A%!32=releasek%:A%!36=multiplek%:A%!40=okt% 570SYS"Wimp_GetCaretPosition",,temp% 580IF temp%!0=wkeyboardh% THEN SYS"SFXMP_Enable" ELSE SYS"SFXMP_Disable" 590ENDPROC 600 610DEFPROCPlotPP 620IF playp%<>-1 THEN PROCPlotPPtr 630SYS"SFXMP_GetBlock"TOA%:IF A%!40<>0 THEN playp%=((A%!32)>>12)+A%!36-startsample%:PROCPlotPPtr ELSE playp%=-1 640ENDPROC 650 660DEFPROCCheckScroll 670temp%!0=wworkh%:SYS"Wimp_GetWindowState",,temp%:SYS"Wimp_GetPointerInfo",,temp2% 680IF (temp2%!12=wworkh%) AND (temp2%!16=-1) THEN 690 IF ABS(temp%!4-temp2%!0)<64 THEN PROCScrollL 700 IF ABS(temp%!12-temp2%!0)<64 THEN PROCScrollR 710 A%=temp2%!0+temp%!20-temp%!4:IF A%<0 THEN A%=0 720 pos%=FNWorkToPtr(A%):PROCDrawPos 730ENDIF 740ENDPROC 750 760DEFPROCDrawPos 770IF pos%<>oldpos% THEN 780 temp%!0=wposh%:temp%!4=0:SYS"Wimp_GetIconState",,temp% 790 IF pdisphd% THEN $(temp%!28)="&"+STR$~(pos%) ELSE $(temp%!28)=STR$(pos%) 800 temp%!8=0:temp%!12=0:SYS"Wimp_SetIconState",,temp%:oldpos%=pos% 810ENDIF 820ENDPROC 830 840DEFPROCScrollL 850diff%=64-ABS(temp%!4-temp2%!0) 860os%=temp%!20 870os%=os%-diff%*4 880IF os%<0 THEN os%=0 890IF os%>maxx%-1024 THEN os%=maxx%-1024 900temp%!20=os% AND &fffffffe 910SYS"Wimp_OpenWindow",,temp% 920ENDPROC 930 940DEFPROCScrollR 950diff%=64-ABS(temp%!12-temp2%!0) 960os%=temp%!20 970os%=os%+diff%*4 980IF os%<0 THEN os%=0 990IF os%>maxx%-1024 THEN os%=maxx%-1024 1000temp%!20=os% AND &fffffffe 1010SYS"Wimp_OpenWindow",,temp% 1020ENDPROC 1030 1040DEFPROCDragASelL 1050PROCScrToWork:selectl%=workx% 1060IF selectl%>selectr% THEN SWAP selectl%,selectr%:dragtype%=2 1070pselectl%=FNWorkToPtr(selectl%):pselectr%=FNWorkToPtr(selectr%):selectl%=FNPtrToWork(pselectl%):selectr%=FNPtrToWork(pselectr%):PROCUpdateSelect 1080ENDPROC 1090 1100DEFPROCDragASelR 1110PROCScrToWork:selectr%=workx% 1120IF selectl%>selectr% THEN SWAP selectl%,selectr%:dragtype%=1 1130pselectl%=FNWorkToPtr(selectl%):pselectr%=FNWorkToPtr(selectr%):selectl%=FNPtrToWork(pselectl%):selectr%=FNPtrToWork(pselectr%):PROCUpdateSelect 1140ENDPROC 1150 1160DEFPROCDragLoopL 1170SYS"OS_Byte",202,0,255TO,sh%:dlp%=ploopr%-ploopl%:PROCScrToWork:loopl%=workx%:ploopl%=FNWorkToPtr(loopl%) 1180IF sh%AND8 THEN 1190 ploopr%=ploopl%+dlp% 1200 IF ploopr%>samplelen% THEN ploopr%=samplelen%:ploopl%=samplelen%-dlp% 1210ENDIF 1220loopl%=FNPtrToWork(ploopl%):loopr%=FNPtrToWork(ploopr%) 1230IF ploopl%>ploopr% THEN ploopr%=ploopl%:loopr%=loopl% 1240IF loopl%<>oloopl% OR loopr%<>oloopr% THEN PROCUpdateLoopP 1250ENDPROC 1260 1270DEFPROCDragLoopR 1280SYS"OS_Byte",202,0,255TO,sh%:dlp%=ploopr%-ploopl%:PROCScrToWork:loopr%=workx%:ploopr%=FNWorkToPtr(loopr%) 1290IF sh%AND8 THEN 1300 ploopl%=ploopr%-dlp% 1310 IF ploopl%<0 THEN ploopl%=0:ploopr%=dlp% 1320ENDIF 1330loopl%=FNPtrToWork(ploopl%):loopr%=FNPtrToWork(ploopr%) 1340IF ploopr%<ploopl% THEN ploopl%=ploopr%:loopl%=loopr% 1350IF loopl%<>oloopl% OR loopr%<>oloopr% THEN PROCUpdateLoopP 1360ENDPROC 1370 1380DEFPROCRedraw_Window 1390SYS"Wimp_RedrawWindow",,polledb%TOmore% 1400CASE polledb%!0 OF 1410 WHEN wworkh%:PROCRedrawWork 1420 WHEN wsongh%:PROCRedrawSong 1430 OTHERWISE:PROCJustRedraw 1440ENDCASE 1450ENDPROC 1460 1470DEFPROCRedrawWork 1480lh%=32 1490mi%=polledb%!4 1500ma%=polledb%!12 1510y%=polledb%!8 1520sl%=polledb%!4-polledb%!20+selectl% 1530sr%=polledb%!4-polledb%!20+selectr% 1540ll%=polledb%!4-polledb%!20+loopl% 1550lr%=polledb%!4-polledb%!20+loopr% 1560llp%=FNPtrToWork(playp%) 1570wllp%=polledb%!4-polledb%!20+llp% 1580dr%=-1 1590ldr%=-1 1600rdr%=-1 1610drp%=-1 1620IF sl%<polledb%!4 AND sr%<polledb%!4 THEN dr%=0 1630IF sl%>polledb%!12 AND sr%>polledb%!12 THEN dr%=0 1640IF sl%<polledb%!4 AND dr% THEN sl%=polledb%!4 1650IF sr%>polledb%!12 AND dr% THEN sr%=polledb%!12 1660IF ll%<polledb%!4-32 OR ll%>polledb%!12+32 THEN ldr%=0 1670IF lr%<polledb%!4-32 OR lr%>polledb%!12+32 THEN rdr%=0 1680IF wllp%<polledb%!4-4 OR wllp%>polledb%!12+4 THEN drp%=0 1690 1700A%=startsample%+samplelen%*(polledb%!20)/maxx% 1710B%=8*displen% 1720C%=4096*(startsample%+samplelen%*(polledb%!20)/maxx%-A%) 1730D%=polledb%!4 1740E%=polledb%!8 1750F%=stype% 1760G%=startsample% 1770 1780WHILE more% 1790 SYS"Wimp_SetColour",1 1800 LINE mi%,y%+lh%*1,ma%,y%+lh%*1 1810 LINE mi%,y%+lh%*2,ma%,y%+lh%*2 1820 LINE mi%,y%+lh%*3,ma%,y%+lh%*3 1830 LINE mi%,y%+lh%*5,ma%,y%+lh%*5 1840 LINE mi%,y%+lh%*6,ma%,y%+lh%*6 1850 LINE mi%,y%+lh%*7,ma%,y%+lh%*7 1860 SYS"Wimp_SetColour",3 1870 LINE mi%,y%+lh%*4,ma%,y%+lh%*4 1880 SYS"Wimp_SetColour",7 1890 LINE mi%,y%+lh%*8,ma%,y%+lh%*8 1900 CALLredrwk 1910 IF ldr% THEN 1920 PROCInvCol2 1930 LINE ll%,polledb%!8,ll%,polledb%!8+256 1940 MOVE ll%,polledb%!8+260 1950 MOVE ll%+8,polledb%!8+280 1960 PLOT 85,ll%-8,polledb%!8+280 1970 ENDIF 1980 IF rdr% THEN 1990 PROCInvCol3 2000 LINE lr%,polledb%!8,lr%,polledb%!8+256 2010 MOVE lr%,polledb%!8+260 2020 MOVE lr%+8,polledb%!8+280 2030 PLOT 85,lr%-8,polledb%!8+280 2040 ENDIF 2050 IF (selectl%<>-1) AND (selectr%<>-1) AND dr% THEN 2060 PROCInvCol 2070 RECTANGLE FILL sl%,polledb%!8,sr%-sl%,252 2080 ENDIF 2090 IF (playp%<>-1) AND drp% THEN 2100 PROCInvCol 2110 LINE wllp%,polledb%!8,wllp%,polledb%!8+288 2120 ENDIF 2130 SYS"Wimp_GetRectangle",,polledb%TOmore% 2140ENDWHILE 2150ENDPROC 2160 2170DEFPROCRedrawSong 2180zx%=polledb%!4-polledb%!20 2190zy%=polledb%!16-polledb%!24-96 2200WHILE more% 2210 SYS"Wimp_SetColour",3 2220 LINE zx%+74,polledb%!32,zx%+74,polledb%!40 2230 LINE zx%+76,polledb%!32,zx%+76,polledb%!40 2240 LINE zx%+246,polledb%!32,zx%+246,polledb%!40 2250 LINE zx%+248,polledb%!32,zx%+248,polledb%!40 2260 LINE zx%+370,polledb%!32,zx%+370,polledb%!40 2270 LINE zx%+372,polledb%!32,zx%+372,polledb%!40 2280 LINE zx%+494,polledb%!32,zx%+494,polledb%!40 2290 LINE zx%+496,polledb%!32,zx%+496,polledb%!40 2300 2310 SYS"Wimp_SetColour",7 2320 sl%=(zy%-polledb%!40)/36 2330 sr%=1+(zy%-polledb%!32)/36 2340 IF sl%<0 THEN sl%=0 2350 IF sr%<0 THEN sr%=0 2360 IF sl%>songlen% THEN sl%=songlen% 2370 IF sr%>songlen% THEN sr%=songlen% 2380 WHILE sl%<sr% 2390 MOVE zx%+6,zy%-36*sl% 2400 PRINT STR$(sl%+1); 2410 MOVE zx%+82,zy%-36*sl% 2420 PRINT $(songstart%+sl%*32); 2430 MOVE zx%+254,zy%-36*sl% 2440 PRINT STR$(songstart%!(sl%*32+12)); 2450 MOVE zx%+378,zy%-36*sl% 2460 PRINT STR$(songstart%!(sl%*32+16)); 2470 MOVE zx%+502,zy%-36*sl% 2480 PRINT STR$(songstart%!(sl%*32+20)); 2490 sl%+=1 2500 ENDWHILE 2510 SYS"Wimp_GetRectangle",,polledb%TOmore% 2520ENDWHILE 2530ENDPROC 2540 2550DEFPROCJustRedraw 2560WHILE more% 2570 SYS"Wimp_GetRectangle",,polledb%TOmore% 2580ENDWHILE 2590ENDPROC 2600 2610DEFPROCInvCol 2620SYS"XOS_ReadModeVariable",-1,3TO,,c% 2630CASE c% OF 2640 WHEN 1:GCOL3,1 2650 WHEN 3:GCOL3,3 2660 WHEN 15:GCOL3,7 2670 WHEN 63:GCOL3,63 TINT 0 2680 OTHERWISE:GCOL3,63 2690ENDCASE 2700ENDPROC 2710 2720DEFPROCInvCol2 2730SYS"XOS_ReadModeVariable",-1,3TO,,c% 2740CASE c% OF 2750 WHEN 1:GCOL3,1 2760 WHEN 3:GCOL3,1 2770 WHEN 15:GCOL3,10 2780 WHEN 63:GCOL3,%110011 TINT 0 2790 OTHERWISE:GCOL3,63 2800ENDCASE 2810ENDPROC 2820 2830DEFPROCInvCol3 2840SYS"XOS_ReadModeVariable",-1,3TO,,c% 2850CASE c% OF 2860 WHEN 1:GCOL3,1 2870 WHEN 3:GCOL3,2 2880 WHEN 15:GCOL3,11 2890 WHEN 63:GCOL3,%111100 TINT 0 2900 OTHERWISE:GCOL3,63 2910ENDCASE 2920ENDPROC 2930 2940DEFPROCOpen_Window 2950IF polledb%!0=wworkh% THEN PROCOpen_Work:ENDPROC 2960IF polledb%!0=wsongh% THEN PROCOpen_Song:ENDPROC 2970IF polledb%!0=wposh% THEN polledb%!0=wworkh%:SYS"Wimp_GetWindowState",,polledb%:PROCOpen_Work:ENDPROC 2980IF polledb%!0=wsongpaneh% THEN polledb%!0=wsongpaneh%:SYS"Wimp_GetWindowState",,polledb%:PROCOpen_Song:ENDPROC 2990SYS"Wimp_OpenWindow",,polledb% 3000ENDPROC 3010 3020DEFPROCOpen_Work 3030temp%!0=wposh% 3040SYS"Wimp_GetWindowState",,temp% 3050A%=polledb%!28 3060polledb%!28=wposh% 3070SYS"Wimp_OpenWindow",,polledb% 3080SYS"Wimp_GetWindowState",,polledb% 3090temp%!4=polledb%!4 3100temp%!8=polledb%!8-100 3110temp%!12=temp%!4+1024 3120temp%!16=temp%!8+56 3130temp%!28=A% 3140SYS"Wimp_OpenWindow",,temp% 3150polledb%!28=wposh% 3160SYS"Wimp_OpenWindow",,polledb% 3170ENDPROC 3180 3190DEFPROCOpen_Song 3200temp%!0=wsongpaneh% 3210SYS"Wimp_GetWindowState",,temp% 3220A%=polledb%!28 3230polledb%!28=wsongpaneh% 3240SYS"Wimp_OpenWindow",,polledb% 3250SYS"Wimp_GetWindowState",,polledb% 3260temp%!4=polledb%!4 3270temp%!12=polledb%!12 3280temp%!16=polledb%!16 3290temp%!8=polledb%!16-84 3300temp%!20=polledb%!20 3310temp%!28=A% 3320SYS"Wimp_OpenWindow",,temp% 3330polledb%!28=wsongpaneh% 3340SYS"Wimp_OpenWindow",,polledb% 3350ENDPROC 3360 3370DEFPROCClose_Window 3380SYS"Wimp_CloseWindow",,polledb% 3390IF polledb%!0=wworkh% THEN polledb%!0=wposh%:SYS"Wimp_CloseWindow",,polledb% 3400IF polledb%!0=wsongh% THEN polledb%!0=wsongpaneh%:SYS"Wimp_CloseWindow",,polledb% 3410ENDPROC 3420 3430DEFPROCMouse_Click 3440CASE polledb%!12 OF 3450 WHEN wworkh%:PROCWorkClick 3460 WHEN wechoh%:PROCEchoClick 3470 WHEN wfadeh%:PROCFadeClick 3480 WHEN wkeyboardh%:PROCKeyClick 3490 WHEN wposh%:PROCPosClick 3500 WHEN wsongh%:PROCSongClick 3510 WHEN -2:PROCIconBClick 3520ENDCASE 3530ENDPROC 3540 3550DEFPROCSongClick 3560temp%!0=wsongh% 3570SYS"Wimp_GetWindowState",,temp% 3580currsect%=(temp%!16-temp%!24-96-polledb%!4)/36 3590IF currsect%<0 THEN currsect%=0 3600IF currsect%>songlen% THEN currsect%=songlen% 3610IF currsect%=songlen% THEN $(sectmenu%)="Loop" ELSE $sectmenu%="Loop "+STR$(currsect%+1) 3620CASE polledb%!8 OF 3630 WHEN 2:lastmx%=polledb%!0-64:lastmy%=polledb%!4+16:lastmenu%=sectmenu%:SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% 3640 WHEN 1024:PROCEditSect 3650ENDCASE 3660ENDPROC 3670 3680DEFPROCEditSect 3690IF currsect%<songlen% THEN 3700 temp%!0=wsongpaneh% 3710 temp%!4=5 3720 SYS"Wimp_GetIconState",,temp% 3730 $(temp%!28)=STR$(currsect%+1) 3740 temp%!4=6 3750 SYS"Wimp_GetIconState",,temp% 3760 $(temp%!28)=$(songstart%+currsect%*32) 3770 temp%!4=7 3780 SYS"Wimp_GetIconState",,temp% 3790 $(temp%!28)=STR$(songstart%!(currsect%*32+12)) 3800 temp%!4=8 3810 SYS"Wimp_GetIconState",,temp% 3820 $(temp%!28)=STR$(songstart%!(currsect%*32+16)) 3830 temp%!4=9 3840 SYS"Wimp_GetIconState",,temp% 3850 $(temp%!28)=STR$(songstart%!(currsect%*32+20)) 3860 ploopl%=songstart%!(currsect%*32+24) 3870 ploopr%=songstart%!(currsect%*32+28) 3880 IF ploopl%<0 THEN ploopl%=0 3890 IF ploopr%<0 THEN ploopr%=0 3900 IF ploopl%>samplelen% THEN ploopl%=samplelen% 3910 IF ploopr%>samplelen% THEN ploopr%=samplelen% 3920 loopl%=FNPtrToWork(ploopl%) 3930 loopr%=FNPtrToWork(ploopr%) 3940 PROCUpdateLoopP 3950 PROCRdSongPane 3960 SYS"Wimp_GetCaretPosition",,temp% 3970 IF (temp%!0=wsongpaneh%)AND(temp%!4<>-1) THEN PROCSetWIC(temp%!0,temp%!4) 3980 ospitch%=-1 3990ENDIF 4000ENDPROC 4010 4020DEFPROCPosClick 4030CASE polledb%!16 OF 4040 WHEN 0:pdisphd%=NOT pdisphd% 4050 WHEN 8:PROCPosPAll 4060 WHEN 9:PROCPosPSel 4070 WHEN 10:PROCPosPWin 4080 WHEN 12:PROCPosPStop 4090ENDCASE 4100ENDPROC 4110 4120DEFPROCPosPAll 4130SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 4140SYS"SFXMP_GetBlock"TOA% 4150SYS"SFXMP_GetPitch"TOB% 4160A%+=32 4170A%!0=0 4180A%!4=startsample% 4190A%!8=B% 4200A%!12=samplelen% 4210A%!16=stype%<<8 4220A%!20=0 4230SYS"SFXMP_Play",1 4240ENDPROC 4250 4260DEFPROCPosPSel 4270SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 4280IF pselectl%<>-1 THEN 4290 SYS"SFXMP_GetBlock"TOA% 4300 SYS"SFXMP_GetPitch"TOB% 4310 A%+=32 4320 A%!0=0 4330 A%!4=startsample%+pselectl% 4340 A%!8=B% 4350 A%!12=pselectr%-pselectl% 4360 A%!16=stype%<<8 4370 A%!20=0 4380 SYS"SFXMP_Play",1 4390ENDIF 4400ENDPROC 4410 4420DEFPROCPosPWin 4430SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 4440temp%!0=wworkh% 4450SYS"Wimp_GetWindowState",,temp% 4460B%=FNWorkToPtr(temp%!20) 4470C%=FNWorkToPtr(temp%!20+1024) 4480SYS"SFXMP_GetBlock"TOA% 4490SYS"SFXMP_GetPitch"TOE% 4500A%+=32 4510A%!0=0 4520A%!4=startsample%+B% 4530A%!8=E% 4540A%!12=C%-B% 4550A%!16=stype%<<8 4560A%!20=0 4570SYS"SFXMP_Play",1 4580ENDPROC 4590 4600DEFPROCPosPStop 4610SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 4620ENDPROC 4630 4640DEFFNStrip(fs$) 4650LOCAL f%,a% 4660f%=1 4670a%=1 4680WHILE MID$(fs$,f%)<>"" 4690 IF MID$(fs$,f%,1)="." OR MID$(fs$,f%,1)=":" THEN a%=f%+1 4700 f%+=1 4710ENDWHILE 4720=MID$(fs$,a%) 4730 4740DEFPROCMBString(s%) 4750WHILE ?s%>31 s%+=1:ENDWHILE 4760?s%=13 4770ENDPROC 4780 4790DEFPROCDataSave 4800IF messbk%!4<>taskh% THEN 4810 filetoload2$=FNStrip($(messbk%+44)) 4820 $(messbk%+44)="<Wimp$Scrap>"+CHR$(0) 4830 messbk%!0=256 4840 messbk%!12=messbk%!8 4850 messbk%!16=2 4860 messbk%!36=-1 4870 SYS"Wimp_SendMessage",18,messbk%,messbk%!4 4880ENDIF 4890ENDPROC 4900 4910DEFPROCGetStartLen 4920CASE savedata% OF 4930 WHEN 0:ss%=startsample%:sl%=samplelen% 4940 WHEN 1:IF pselectl%<>-1 THEN ss%=startsample%+pselectl%:sl%=pselectr%-pselectl% ELSE ss%=-1 4950 WHEN 2:ss%=clipbstart%:sl%=clipblen% 4960ENDCASE 4970ENDPROC 4980 4990DEFPROCKeyClick 5000CASE polledb%!8 OF 5010 WHEN 1:SYS"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1:SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 5020 WHEN 4:SYS"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 5030ENDCASE 5040CASE polledb%!16 OF 5050 WHEN 43:playtype%=0 5060 WHEN 44:playtype%=1 5070 WHEN 45:playtype%=2 5080 WHEN 46:playtype%=3 5090 WHEN 48:temp%!0=wkeyboardh%:temp%!4=48:SYS"Wimp_GetIconState",,temp%:IF (temp%!24)AND(1<<21) THEN releasek%=-1 ELSE releasek%=0 5100 WHEN 49:temp%!0=wkeyboardh%:temp%!4=49:SYS"Wimp_GetIconState",,temp%:IF (temp%!24)AND(1<<21) THEN multiplek%=-1 ELSE multiplek%=0 5110ENDCASE 5120ENDPROC 5130 5140DEFPROCWorkClick 5150SYS"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 5160CASE polledb%!8 OF 5170 WHEN 2:lastmx%=polledb%!0-64:lastmy%=polledb%!4+16:lastmenu%=workmenu%:SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% 5180 WHEN 1024:PROCSelClick 5190 WHEN 256:PROCAdjClick 5200 WHEN 64:PROCSelDrag 5210 WHEN 16:PROCAdjDrag 5220ENDCASE 5230ENDPROC 5240 5250DEFPROCSelClick 5260temp%!0=wworkh% 5270SYS"Wimp_GetWindowState",,temp% 5280IF polledb%!4-temp%!8<256 THEN 5290 PROCSelClick2 5300ELSE 5310 SYS"OS_Byte",202,0,255TO,sh% 5320 dlp%=ploopr%-ploopl% 5330 PROCScrToWork 5340 loopl%=workx% 5350 ploopl%=FNWorkToPtr(loopl%) 5360 IF sh%AND8 THEN 5370 ploopr%=ploopl%+dlp% 5380 IF ploopr%>samplelen% THEN ploopr%=samplelen%:ploopl%=samplelen%-dlp% 5390 ENDIF 5400 loopl%=FNPtrToWork(ploopl%) 5410 loopr%=FNPtrToWork(ploopr%) 5420 IF ploopl%>ploopr% THEN ploopr%=ploopl%:loopr%=loopl% 5430 PROCUpdateLoopP 5440ENDIF 5450ENDPROC 5460 5470DEFPROCAdjClick 5480temp%!0=wworkh% 5490SYS"Wimp_GetWindowState",,temp% 5500IF polledb%!4-temp%!8<256 THEN 5510 PROCAdjClick2 5520ELSE 5530 SYS"OS_Byte",202,0,255TO,sh% 5540 dlp%=ploopr%-ploopl% 5550 PROCScrToWork 5560 loopr%=workx% 5570 ploopr%=FNWorkToPtr(loopr%) 5580 IF sh%AND8 THEN 5590 ploopl%=ploopr%-dlp% 5600 IF ploopl%<0 THEN ploopl%=0:ploopr%=dlp% 5610 ENDIF 5620 loopl%=FNPtrToWork(ploopl%) 5630 loopr%=FNPtrToWork(ploopr%) 5640 IF ploopr%<ploopl% THEN ploopl%=ploopr%:loopl%=loopr% 5650 PROCUpdateLoopP 5660ENDIF 5670ENDPROC 5680 5690DEFPROCSelDrag 5700temp%!0=wworkh% 5710SYS"Wimp_GetWindowState",,temp% 5720IF polledb%!4-temp%!8<256 THEN 5730 PROCSelDrag2 5740ELSE 5750 temp%!0=wworkh% 5760 SYS"Wimp_GetWindowState",,temp% 5770 temp2%!0=wworkh% 5780 temp2%!4=7 5790 temp2%!8=0 5800 temp2%!12=0 5810 temp2%!16=0 5820 temp2%!20=0 5830 temp2%!24=temp%!4 5840 temp2%!28=temp%!8+260 5850 temp2%!32=temp%!4+1022 5860 temp2%!36=temp%!8+284 5870 temp2%!40=-1 5880 temp2%!44=-1 5890 temp2%!48=-1 5900 temp2%!52=-1 5910 SYS"Wimp_DragBox",,temp2% 5920 dragtype%=3 5930ENDIF 5940ENDPROC 5950 5960DEFPROCAdjDrag 5970temp%!0=wworkh% 5980SYS"Wimp_GetWindowState",,temp% 5990IF polledb%!4-temp%!8<256 THEN 6000 PROCAdjDrag2 6010ELSE 6020 temp%!0=wworkh% 6030 SYS"Wimp_GetWindowState",,temp% 6040 temp2%!0=wworkh% 6050 temp2%!4=7 6060 temp2%!8=0 6070 temp2%!12=0 6080 temp2%!16=0 6090 temp2%!20=0 6100 temp2%!24=temp%!4 6110 temp2%!28=temp%!8+260 6120 temp2%!32=temp%!4+1022 6130 temp2%!36=temp%!8+284 6140 temp2%!40=-1 6150 temp2%!44=-1 6160 temp2%!48=-1 6170 temp2%!52=-1 6180 SYS"Wimp_DragBox",,temp2% 6190 dragtype%=4 6200ENDIF 6210ENDPROC 6220 6230DEFPROCSelClick2 6240PROCScrToWork 6250selectl%=workx% 6260selectr%=workx% 6270pselectl%=FNWorkToPtr(selectl%) 6280pselectr%=FNWorkToPtr(selectr%) 6290selectl%=FNPtrToWork(pselectl%) 6300selectr%=FNPtrToWork(pselectr%) 6310PROCUpdateSelect 6320ENDPROC 6330 6340DEFPROCAdjClick2 6350PROCScrToWork 6360IF ABS(selectl%-workx%)>ABS(selectr%-workx%) THEN 6370 selectr%=workx% 6380ELSE 6390 selectl%=workx% 6400ENDIF 6410IF selectl%=-1 OR selectr%=-1 THEN selectl%=workx%:selectr%=workx% 6420IF selectl%>selectr% THEN SWAP selectl%,selectr% 6430pselectl%=FNWorkToPtr(selectl%) 6440pselectr%=FNWorkToPtr(selectr%) 6450selectl%=FNPtrToWork(pselectl%) 6460selectr%=FNPtrToWork(pselectr%) 6470PROCUpdateSelect 6480ENDPROC 6490 6500DEFPROCSelDrag2 6510temp%!0=wworkh% 6520SYS"Wimp_GetWindowState",,temp% 6530temp2%!0=wworkh% 6540temp2%!4=7 6550temp2%!8=0 6560temp2%!12=0 6570temp2%!16=0 6580temp2%!20=0 6590temp2%!24=temp%!4 6600temp2%!28=temp%!8 6610temp2%!32=temp%!4+1022 6620temp2%!36=temp%!8+252 6630temp2%!40=-1 6640temp2%!44=-1 6650temp2%!48=-1 6660temp2%!52=-1 6670SYS"Wimp_DragBox",,temp2% 6680dragtype%=1 6690PROCScrToWork 6700IF selectl%=-1 OR selectr%=-1 THEN 6710 selectl%=workx%:selectr%=workx% 6720 pselectl%=FNWorkToPtr(selectl%) 6730 pselectr%=FNWorkToPtr(selectr%) 6740 selectl%=FNPtrToWork(pselectl%) 6750 selectr%=FNPtrToWork(pselectr%) 6760ENDIF 6770ENDPROC 6780 6790DEFPROCAdjDrag2 6800temp%!0=wworkh% 6810SYS"Wimp_GetWindowState",,temp% 6820temp2%!0=wworkh% 6830temp2%!4=7 6840temp2%!8=0 6850temp2%!12=0 6860temp2%!16=0 6870temp2%!20=0 6880temp2%!24=temp%!4 6890temp2%!28=temp%!8 6900temp2%!32=temp%!4+1022 6910temp2%!36=temp%!8+252 6920temp2%!40=-1 6930temp2%!44=-1 6940temp2%!48=-1 6950temp2%!52=-1 6960SYS"Wimp_DragBox",,temp2% 6970PROCScrToWork 6980IF selectl%=-1 OR selectr%=-1 THEN 6990 selectl%=workx%:selectr%=workx% 7000 pselectl%=FNWorkToPtr(selectl%) 7010 pselectr%=FNWorkToPtr(selectr%) 7020 selectl%=FNPtrToWork(pselectl%) 7030 selectr%=FNPtrToWork(pselectr%) 7040ENDIF 7050IF ABS(selectl%-workx%)>ABS(selectr%-workx%) THEN 7060 dragtype%=2 7070ELSE 7080 dragtype%=1 7090ENDIF 7100ENDPROC 7110 7120DEFPROCUpdateSelect 7130IF oselectl%=-1 OR oselectr%=-1 THEN oselectl%=selectl%:oselectr%=selectr%:PROCPtSelect:ENDPROC 7140IF (selectl%<>oselectl%) AND (selectr%<>oselectr%) THEN PROCPtSelect:oselectl%=selectl%:oselectr%=selectr%:PROCPtSelect:ENDPROC 7150IF selectl%<>oselectl% THEN PROCSetSelectL:ENDPROC 7160IF selectr%<>oselectr% THEN PROCSetSelectR:ENDPROC 7170ENDPROC 7180 7190DEFPROCPtSelect 7200polledb%!0=wworkh% 7210polledb%!8=-288 7220polledb%!16=-32 7230IF (oselectl%<>-1) AND (oselectr%<>-1) THEN 7240 polledb%!4=oselectl%:polledb%!12=oselectr%+2 7250 SYS"Wimp_UpdateWindow",,polledb%TOmore% 7260 WHILE more% 7270 PROCInvCol 7280 RECTANGLE FILL polledb%!28,polledb%!32,polledb%!36-polledb%!28,polledb%!40-polledb%!32 7290 SYS"Wimp_GetRectangle",,polledb%TOmore% 7300 ENDWHILE 7310ENDIF 7320ENDPROC 7330 7340DEFPROCSetSelectL 7350polledb%!0=wworkh% 7360polledb%!8=-288 7370polledb%!16=-32 7380IF (selectl%<>-1) AND (oselectl%<>-1) THEN 7390 IF selectl%<oselectl% THEN polledb%!4=selectl%:polledb%!12=oselectl% ELSE polledb%!4=oselectl%:polledb%!12=selectl% 7400 SYS"Wimp_UpdateWindow",,polledb%TOmore% 7410 WHILE more% 7420 PROCInvCol 7430 RECTANGLE FILL polledb%!28,polledb%!32,polledb%!36-polledb%!28,polledb%!40-polledb%!32 7440 SYS"Wimp_GetRectangle",,polledb%TOmore% 7450 ENDWHILE 7460 oselectl%=selectl% 7470ENDIF 7480ENDPROC 7490 7500DEFPROCSetSelectR 7510polledb%!0=wworkh% 7520polledb%!8=-288 7530polledb%!16=-32 7540IF (selectr%<>-1) AND (oselectr%<>-1) THEN 7550 IF selectr%<oselectr% THEN polledb%!4=selectr%+2:polledb%!12=oselectr%+2 ELSE polledb%!4=oselectr%+2:polledb%!12=selectr%+2 7560 SYS"Wimp_UpdateWindow",,polledb%TOmore% 7570 WHILE more% 7580 PROCInvCol 7590 RECTANGLE FILL polledb%!28,polledb%!32,polledb%!36-polledb%!28,polledb%!40-polledb%!32 7600 SYS"Wimp_GetRectangle",,polledb%TOmore% 7610 ENDWHILE 7620 oselectr%=selectr% 7630ENDIF 7640ENDPROC 7650 7660DEFPROCPlotPPtr 7670IF playp%<0 OR playp%>samplelen% THEN playp%=-1:ENDPROC 7680llp%=FNPtrToWork(playp%) 7690temp%!0=wworkh% 7700SYS"Wimp_GetWindowState",,temp% 7710ll%=temp%!4-temp%!20+llp% 7720IF ll%>temp%!4-4 AND ll%<temp%!12+4 THEN 7730 polledb%!0=wworkh% 7740 polledb%!4=llp% 7750 polledb%!8=-288 7760 polledb%!12=llp%+2 7770 polledb%!16=0 7780 SYS"Wimp_UpdateWindow",,polledb%TOmore% 7790 WHILE more% 7800 PROCInvCol 7810 LINE ll%,polledb%!8,ll%,polledb%!8+288 7820 SYS"Wimp_GetRectangle",,polledb%TOmore% 7830 ENDWHILE 7840ENDIF 7850ENDPROC 7860 7870DEFPROCUpdateLoopP 7880temp%!0=wworkh% 7890SYS"Wimp_GetWindowState",,temp% 7900polledb%!0=wworkh% 7910polledb%!4=temp%!20 7920polledb%!8=-288 7930polledb%!12=temp%!20+1024 7940polledb%!16=0 7950ll%=temp%!4-temp%!20+loopl% 7960oll%=temp%!4-temp%!20+oloopl% 7970lr%=temp%!4-temp%!20+loopr% 7980olr%=temp%!4-temp%!20+oloopr% 7990ldr%=-1 8000oldr%=-1 8010rdr%=-1 8020ordr%=-1 8030IF ll%<temp%!4-32 OR ll%>temp%!12+32 THEN ldr%=0 8040IF oll%<temp%!4-32 OR oll%>temp%!12+32 THEN oldr%=0 8050IF lr%<temp%!4-32 OR lr%>temp%!12+32 THEN rdr%=0 8060IF olr%<temp%!4-32 OR olr%>temp%!12+32 THEN ordr%=0 8070SYS"Wimp_UpdateWindow",,polledb%TOmore% 8080WHILE more% 8090 IF ldr% THEN 8100 PROCInvCol2 8110 LINE ll%,polledb%!8,ll%,polledb%!8+256 8120 MOVE ll%,polledb%!8+260 8130 MOVE ll%+8,polledb%!8+280 8140 PLOT 85,ll%-8,polledb%!8+280 8150 ENDIF 8160 IF oldr% THEN 8170 PROCInvCol2 8180 LINE oll%,polledb%!8,oll%,polledb%!8+256 8190 MOVE oll%,polledb%!8+260 8200 MOVE oll%+8,polledb%!8+280 8210 PLOT 85,oll%-8,polledb%!8+280 8220 ENDIF 8230 IF rdr% THEN 8240 PROCInvCol3 8250 LINE lr%,polledb%!8,lr%,polledb%!8+256 8260 MOVE lr%,polledb%!8+260 8270 MOVE lr%+8,polledb%!8+280 8280 PLOT 85,lr%-8,polledb%!8+280 8290 ENDIF 8300 IF ordr% THEN 8310 PROCInvCol3 8320 LINE olr%,polledb%!8,olr%,polledb%!8+256 8330 MOVE olr%,polledb%!8+260 8340 MOVE olr%+8,polledb%!8+280 8350 PLOT 85,olr%-8,polledb%!8+280 8360 ENDIF 8370 SYS"Wimp_GetRectangle",,polledb%TOmore% 8380ENDWHILE 8390oloopl%=loopl%:oloopr%=loopr% 8400PROCUpdateSLoop 8410ENDPROC 8420 8430DEFPROCUpdateSLoop 8440IF playtype%=1 THEN 8450 SYS"SFXMP_GetBlock"TOA% 8460 A%=A%+32:A%!4=startsample%+ploopl%:A%!12=ploopr%-ploopl%:A%!20=0:A%!16=(A%!16) AND &ffffefff 8470 A%=A%+32:A%!4=startsample%+ploopl%:A%!12=ploopr%-ploopl%:A%!20=0:A%!16=(A%!16) AND &ffffefff 8480 A%=A%+32:A%!4=startsample%+ploopl%:A%!12=ploopr%-ploopl%:A%!20=0:A%!16=(A%!16) AND &ffffefff 8490ENDIF 8500IF playtype%=3 THEN 8510 SYS"SFXMP_GetBlock"TOA% 8520 A%=A%+32:A%!4=startsample%:A%!12=ploopr%:A%!20=ploopl%:A%!16=(A%!16) AND &ffffefff 8530 A%=A%+32:A%!4=startsample%:A%!12=ploopr%:A%!20=ploopl%:A%!16=(A%!16) AND &ffffefff 8540 A%=A%+32:A%!4=startsample%:A%!12=ploopr%:A%!20=ploopl%:A%!16=(A%!16) AND &ffffefff 8550ENDIF 8560ENDPROC 8570 8580DEFPROCIconBClick 8590CASE polledb%!8 OF 8600 WHEN 1,4:PROCOpenWork 8610 WHEN 2:lastmx%=polledb%!0-64:lastmy%=184:lastmenu%=iconmenu%:SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% 8620ENDCASE 8630ENDPROC 8640 8650DEFPROCOpenWork 8660polledb%!0=wworkh% 8670SYS"Wimp_GetWindowState",,polledb% 8680polledb%!28=-1 8690PROCOpen_Window 8700polledb%!0=wkeyboardh% 8710SYS"Wimp_GetWindowState",,polledb% 8720polledb%!28=-1 8730SYS"Wimp_OpenWindow",,polledb% 8740ENDPROC 8750 8760DEFPROCUser_Drag_Box 8770CASE dragtype% OF 8780 WHEN 1,2,3,4:dragtype%=-1 8800ENDCASE 8810ENDPROC 8820 8830DEFPROCRdWork 8840polledb%!0=wworkh% 8850SYS"Wimp_RedrawWindow",,polledb%TOmore% 8860PROCRedrawWork 8870ENDPROC 8880 8890DEFPROCRdSong 8900polledb%!0=wsongh% 8910SYS"Wimp_RedrawWindow",,polledb%TOmore% 8920PROCRedrawSong 8930ENDPROC 8940 8950DEFPROCRdSongPane 8960polledb%!0=wsongpaneh% 8970SYS"Wimp_RedrawWindow",,polledb%TOmore% 8980PROCJustRedraw 8990ENDPROC 9000 9010DEFPROCKey_Pressed 9020IF polledb%!24=&1cc THEN SYS"SFXMP_Disable":SYS"Wimp_ProcessKey",&1cc 9030IF polledb%!24=&1fc THEN SYS"SFXMP_Disable":SYS"Wimp_ProcessKey",&1fc 9040CASE polledb%!0 OF 9050 WHEN wkeyboardh%:PROCKeyKey 9070 WHEN wposh%:PROCPosKey 9080 WHEN wfadeh%:PROCFadeKey 9090 WHEN wechoh%:PROCEchoKey 9100 WHEN wsongpaneh%:PROCSongKey 9110ENDCASE 9120ENDPROC 9130 9140DEFPROCFadeKey 9150IF polledb%!24=13 THEN 9160 IF polledb%!4=2 THEN PROCSetWIC(wfadeh%,3) 9170 IF polledb%!4=3 THEN PROCSetWIC(wfadeh%,2) 9180ENDIF 9190ENDPROC 9200 9210DEFPROCEchoKey 9220IF polledb%!24=13 THEN 9230 IF polledb%!4=2 THEN PROCSetWIC(wechoh%,3) 9240 IF polledb%!4=3 THEN PROCSetWIC(wechoh%,2) 9250ENDIF 9260ENDPROC 9270 9280DEFPROCSongKey 9290IF polledb%!24=13 THEN 9300 IF polledb%!4=6 THEN PROCSetWIC(wsongpaneh%,7) 9310 IF polledb%!4=7 THEN PROCSetWIC(wsongpaneh%,8) 9320 IF polledb%!4=8 THEN PROCSetWIC(wsongpaneh%,9) 9330 IF polledb%!4=9 THEN PROCSetWIC(wsongpaneh%,6) 9340ENDIF 9350ENDPROC 9360 9370DEFPROCSetWIC(w%,i%) 9380IF i%=-1 THEN 9390 SYS"XWimp_SetCaretPosition",-1,-1,-1,-1 9400ELSE 9410 temp%!0=w% 9420 temp%!4=i% 9430 SYS"Wimp_GetIconState",,temp% 9440 A%=LEN($(temp%!28)) 9450 SYS"XWimp_SetCaretPosition",w%,i%,-1,-1,-1,A% 9460ENDIF 9470ENDPROC 9480 9490DEFPROCPosKey 9500IF polledb%!24=13 THEN PROCSetPitch ELSE SYS"Wimp_ProcessKey",polledb%!24 9510ENDPROC 9520 9530DEFPROCSetPitch 9540temp%!0=wposh% 9550IF polledb%!4=3 THEN 9560 temp%!4=3 9570 SYS"Wimp_GetIconState",,temp% 9580 pitch%=VAL($(temp%!28)) 9590ENDIF 9600IF polledb%!4=5 THEN 9610 temp%!4=5 9620 SYS"Wimp_GetIconState",,temp% 9630 pitch%=VAL($(temp%!28)) 9640 IF pitch%=0 THEN pitch%=1 9650 pitch%=1E6/pitch% 9660ENDIF 9670PROCSetPitch2 9680ENDPROC 9690 9700DEFPROCSetPitch2 9710IF pitch%<24 THEN pitch%=24 9720IF pitch%>255 THEN pitch%=255 9730pitch%=pitch%AND&fc 9740temp2%!0=wposh% 9750temp2%!4=3 9760SYS"Wimp_GetIconState",,temp2% 9770$(temp2%!28)=STR$pitch% 9780temp2%!8=0:temp2%!12=0:SYS"Wimp_SetIconState",,temp2% 9790temp2%!4=5 9800SYS"Wimp_GetIconState",,temp2% 9810$(temp2%!28)=STR$(INT(1E6/pitch%)) 9820temp2%!8=0:temp2%!12=0:SYS"Wimp_SetIconState",,temp2% 9830SYS"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 9840SYS"XSound_Configure",0,0,pitch%,0,0 9850ENDPROC 9860 9870DEFPROCKeyKey 9880key%=polledb%!24 9890IF key%=13 THEN SYS"XWimp_SetCaretPosition",-1,-1,-1,-1:ENDPROC 9900IF (key%>=&181)AND(key%<=&185) okt%=key%-&181:ENDPROC 9910IF key%<32 THEN PROCCtrlKey:ENDPROC 9920SYS"SFXMP_GetPitch"TOspitch%:IF spitch%<>ospitch% THEN temp%!0=wsongpaneh%:temp%!4=8:SYS"Wimp_GetIconState",,temp%:$(temp%!28)=STR$spitch%:temp%!8=0:temp%!12=0:SYS"Wimp_SetIconState",,temp%:ospitch%=spitch% 9930ENDPROC 9940 9950DEFPROCCtrlKey 9960CASE key% OF 9970 WHEN ASC"X"-64:polledb%!4=0:PROCMEdit 9980 WHEN ASC"C"-64:polledb%!4=1:PROCMEdit 9990 WHEN ASC"V"-64:polledb%!4=2:PROCMEdit 10000 WHEN ASC"D"-64:polledb%!4=3:PROCMEdit 10010 WHEN ASC"A"-64:PROCMSelAll 10020 WHEN ASC"Z"-64:PROCMSelClear 10030 WHEN ASC"Q"-64:PROCZoomAll 10040 WHEN ASC"W"-64:PROCZoomOut 10050 WHEN ASC"S"-64:PROCZoomSel 10060 WHEN ASC"T"-64:PROCZoomStore 10070 WHEN ASC"R"-64:PROCZoomRestore 10080ENDCASE 10090ENDPROC 10100 10110DEFPROCMenu_Select 10120SYS"Wimp_GetPointerInfo",,temp% 10130oldbut%=temp%!8 10140CASE lastmenu% OF 10150 WHEN iconmenu%:PROCMSelIcon 10160 WHEN workmenu%:PROCMSelWork 10170 WHEN sectmenu%:PROCMSelSect 10180ENDCASE 10190IF (oldbut%AND1) THEN SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% 10200ENDPROC 10210 10220DEFPROCMSelSect 10230CASE polledb%!0 OF 10240 WHEN 0:PROCMSectInsert 10250 WHEN 1:PROCMSectAppend 10260 WHEN 2:PROCMSectOverwrite 10270 WHEN 3:PROCMSectDelete 10280 WHEN 4:PROCMSectPlay 10290 WHEN 5:PROCPlaySong 10300ENDCASE 10310ENDPROC 10320 10330DEFPROCMSectInsert 10340SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 10350IF songlen%>=INT(songbuflen%/32) THEN 10360 PROCReportErr("No room.") 10370ELSE 10380 T%=songlen% 10390 WHILE T%>currsect% 10400 FORS%=0TO28STEP4 10410 songstart%!(T%*32+S%)=songstart%!(T%*32-32+S%) 10420 NEXTS% 10430 T%-=1 10440 ENDWHILE 10450 songlen%+=1 10460 PROCPutSect(currsect%) 10470 PROCSetSongExtent 10480 PROCRdSong 10490ENDIF 10500ENDPROC 10510 10520DEFPROCMSectAppend 10530SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 10540IF songlen%>=INT(songbuflen%/32) THEN 10550 PROCReportErr("Too many loops.") 10560ELSE 10570 PROCPutSect(songlen%) 10580 songlen%+=1 10590 PROCSetSongExtent 10600 PROCRdSong 10610ENDIF 10620ENDPROC 10630 10640DEFPROCMSectOverwrite 10650SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 10660IF currsect%<songlen% THEN PROCPutSect(currsect%):PROCRdSong 10670ENDPROC 10680 10690DEFPROCMSectDelete 10700SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 10710IF currsect%<songlen% THEN 10720 T%=currsect% 10730 WHILE T%<songlen%-1 10740 FORS%=0TO28STEP4 10750 songstart%!(T%*32+S%)=songstart%!(T%*32+32+S%) 10760 NEXTS% 10770 T%+=1 10780 ENDWHILE 10790 songlen%-=1 10800 PROCSetSongExtent 10810 PROCRdSong 10820ENDIF 10830ENDPROC 10840 10850DEFPROCMSectPlay 10860IF currsect%<songlen% THEN 10870 SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 10880 VOICES 2 10890 VOICE 2,"SFXMVoice" 10900 SYS"SFXMP_PlaySong",songstart%+32*currsect%,songlen%-currsect%,startsample%,1,stype% 10910ENDIF 10920ENDPROC 10930 10940DEFPROCPutSect(s%) 10950temp%!0=wsongpaneh% 10960temp%!4=6 10970SYS"Wimp_GetIconState",,temp% 10980$(songstart%+s%*32)=$(temp%!28) 10990temp%!4=7 11000SYS"Wimp_GetIconState",,temp% 11010A%=VAL($(temp%!28)) 11020IF A%>255 THEN A%=255 11030IF A%<1 THEN A%=1 11040!(songstart%+s%*32+12)=A% 11050temp%!4=8 11060SYS"Wimp_GetIconState",,temp% 11070A%=VAL($(temp%!28)) 11080IF A%<1 THEN A%=1 11090IF A%>&10000 THEN A%=&10000 11100!(songstart%+s%*32+16)=A% 11110temp%!4=9 11120SYS"Wimp_GetIconState",,temp% 11130A%=VAL($(temp%!28)) 11140IF A%<2 THEN A%=2 11150IF A%>255 THEN A%=255 11160!(songstart%+s%*32+20)=A% 11170!(songstart%+s%*32+24)=ploopl% 11180!(songstart%+s%*32+28)=ploopr% 11190ENDPROC 11200 11210DEFPROCCheckSong 11220T%=0 11230WHILE T%<songlen% 11240 A%=songstart%!(T%*32+24):B%=songstart%!(T%*32+28) 11250 IF A%<0 THEN A%=0 11260 IF B%<0 THEN B%=0 11270 IF A%>samplelen% THEN A%=samplelen% 11280 IF B%>samplelen% THEN B%=samplelen% 11290 songstart%!(T%*32+24)=A%:songstart%!(T%*32+28)=B% 11300 T%+=1 11310ENDWHILE 11320ENDPROC 11330 11340DEFPROCMSelIcon 11350IF polledb%!0=1 THEN PROCCloseDown 11360ENDPROC 11370 11380DEFPROCMSelWork 11390CASE polledb%!0 OF 11400 WHEN 0:PROCMInfo 11410 WHEN 1:PROCMSave 11420 WHEN 2:PROCMEdit 11430 WHEN 3:PROCMSelect 11440 WHEN 4:PROCMZoom 11450 WHEN 5:PROCMLoop 11460 WHEN 6:PROCMGoodies 11470 WHEN 7:PROCMSong 11480ENDCASE 11490ENDPROC 11500 11510DEFPROCMSong 11520m%=polledb%!4 11530CASE m% OF 11540 WHEN 0:PROCPlaySong 11550 WHEN 1:PROCOpenSong 11560 WHEN 4:PROCClearSong 11570 WHEN 5:PROCSwapSongRep 11580ENDCASE 11590ENDPROC 11600 11610DEFPROCSwapSongRep 11620songrep%=NOT songrep% 11630PROCAdjSongM 11640ENDPROC 11650 11660DEFPROCOpenSong 11670temp%!0=wsongh% 11680SYS"Wimp_GetWindowState",,temp% 11690temp%!28=-1 11700SYS"Wimp_OpenWindow",,temp% 11710temp2%!0=wsongpaneh% 11720SYS"Wimp_GetWindowState",,temp2% 11730temp2%!4=temp%!4 11740temp2%!12=temp%!12 11750temp2%!16=temp%!16 11760temp2%!8=temp%!16-84 11770temp2%!28=-1 11780SYS"Wimp_OpenWindow",,temp2% 11790ENDPROC 11800 11810DEFPROCPlaySong 11820IF songlen%>0 THEN 11830 SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 11840 VOICES 2 11850 VOICE 2,"SFXMVoice" 11860 SYS"SFXMP_PlaySong",songstart%,songlen%,startsample%,1,stype%+(songrep%<<8) 11870ENDIF 11880ENDPROC 11890 11900DEFPROCMInfo 11910m%=polledb%!4 11920CASE m% OF 11930 WHEN 1:PROCMType 11940 WHEN 2:PROCSetBuf 11950 WHEN 3:PROCClearAll 11960ENDCASE 11970ENDPROC 11980 11990DEFPROCSetBuf 12000SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 12010newblen%=1024*VAL($(mbuflen%!40)) 12020IF newblen%<1024 THEN newblen%=1024 12030b%=1 12040IF newblen%<buflen% THEN 12050 temp%!0=0 12060 $(temp%+4)="You will lose the current sample." 12070 SYS"Wimp_ReportError",temp%,%10011,"Confirm"TO,b% 12080ENDIF 12090IF b%=1 THEN 12100 SYS"XOS_Module",6,,,newblen%TO,,newbstart%;v% 12110 IF v%AND1 THEN 12120 PROCReportErr("Can't claim memory.") 12130 ELSE 12140 IF newblen%<buflen% THEN 12150 SYS"XOS_Module",7,,bufstart% 12160 bufstart%=newbstart% 12170 buflen%=newblen% 12180 PROCClear 12190 ELSE 12200 chb%=newbstart%-bufstart% 12210 A%=bufstart% 12220 B%=newbstart% 12230 C%=startsample%+samplelen%-bufstart% 12240 CALLcopymem 12250 A%=clipbstart% 12260 B%=newbstart%+newblen%-clipblen% 12270 C%=clipblen% 12280 CALLcopymem 12290 startsample%=startsample%+chb% 12300 SYS"XOS_Module",7,,bufstart% 12310 bufstart%=newbstart% 12320 buflen%=newblen% 12330 ENDIF 12340 ENDIF 12350ENDIF 12360ENDPROC 12370 12380DEFPROCClearAll 12390IF samplesaved%=-1 THEN 12400 PROCClear 12410ELSE 12420 A%=FNConfirm("Sample has been modified. Are you sure you want to do this?") 12430 IF A%=1 THEN PROCClear 12440ENDIF 12450ENDPROC 12460 12470DEFPROCClear 12480PROCRestart 12490temp%!0=wworkh% 12500SYS"Wimp_GetWindowState",,temp% 12510polledb%!20=0 12520SYS"Wimp_OpenWindow",,temp% 12530PROCSetExtent 12540PROCSetSongExtent 12550$(wwork%!72)="<Untitled>" 12560samplesaved%=-1 12570PROCRdWork 12580ENDPROC 12590 12600DEFPROCMSave 12610ENDPROC 12620 12630DEFPROCMType 12640CASE polledb%!8 OF 12650 WHEN 0:stype%=2:PROCAdjTypeM:PROCRdWork 12660 WHEN 1:stype%=0:PROCAdjTypeM:PROCRdWork 12670 WHEN 2:stype%=1:PROCAdjTypeM:PROCRdWork 12680ENDCASE 12690ENDPROC 12700 12710DEFPROCAdjTypeM 12720CASE stype% OF 12730 WHEN 0:typemenu%!(28+24*0+0)=0:typemenu%!(28+24*1+0)=1:typemenu%!(28+24*2+0)=128 12740 WHEN 1:typemenu%!(28+24*0+0)=0:typemenu%!(28+24*1+0)=0:typemenu%!(28+24*2+0)=129 12750 WHEN 2:typemenu%!(28+24*0+0)=1:typemenu%!(28+24*1+0)=0:typemenu%!(28+24*2+0)=128 12760ENDCASE 12770ENDPROC 12780 12790DEFPROCAdjSongM 12800IF songrep% THEN songmenu%!(28+24*5)=129 ELSE songmenu%!(28+24*5)=128 12810ENDPROC 12820 12830DEFPROCMEdit 12840IF selectl%<>-1 AND selectr%<>-1 THEN 12850 m%=polledb%!4 12860 CASE m% OF 12870 WHEN 0:PROCMECut 12880 WHEN 1:PROCMECopy 12890 WHEN 2:PROCMEPaste 12900 WHEN 3:PROCMEDelete 12910 WHEN 4:PROCMEDeleteNS 12920 WHEN 5:PROCMEDeleteL 12930 WHEN 6:PROCMEDeleteR 12940 ENDCASE 12950ENDIF 12960ENDPROC 12970 12980DEFPROCMECut 12990c%=FNCheckLen(samplelen%+pselectr%-pselectl%,"No room for cut.") 13000IF c%=0 THEN 13010 A%=startsample%+pselectl% 13020 B%=bufstart%+buflen%-(pselectr%-pselectl%) 13030 C%=pselectr%-pselectl% 13040 CALLcopymem 13050 clipbstart%=B% 13060 clipblen%=C% 13070 PROCMEDelete 13080 PROCModTitle(0) 13090ENDIF 13100ENDPROC 13110 13120DEFPROCMECopy 13130c%=FNCheckLen(samplelen%+pselectr%-pselectl%,"No room for copy.") 13140IF c%=0 THEN 13150 A%=startsample%+pselectl% 13160 B%=bufstart%+buflen%-(pselectr%-pselectl%) 13170 C%=pselectr%-pselectl% 13180 CALLcopymem 13190 clipbstart%=B% 13200 clipblen%=C% 13210ENDIF 13220ENDPROC 13230 13240DEFPROCMEPaste 13250c%=FNCheckLen(samplelen%+2*clipblen%,"No room for paste.") 13260IF c%=0 THEN 13270 A%=startsample%+pselectr% 13280 B%=startsample%+pselectr%+clipblen% 13290 C%=samplelen%-pselectr% 13300 CALLcopymem 13310 A%=clipbstart% 13320 B%=startsample%+pselectr% 13330 C%=clipblen% 13340 CALLcopymem 13350 IF ploopl%>pselectr% THEN ploopl%=ploopl%+clipblen% 13360 IF ploopr%>pselectr% THEN ploopr%=ploopr%+clipblen% 13370 PROCgetwinp 13380 samplelen%=samplelen%+clipblen% 13390 IF samplelen%<1 THEN samplelen%=1:startsample%?0=0:startsample%?1=0 13400 PROCCheckLoop 13410 PROCCheckSong 13420 PROCadjptrs 13430 PROCZoomSel 13440 PROCModTitle(0) 13450ENDIF 13460ENDPROC 13470 13480DEFFNCheckLen(l%,e$) 13490IF startsample%+l%>=bufstart%+buflen% THEN 13500 PROCReportErr(e$) 13510 A%=-1 13520ELSE 13530 A%=0 13540ENDIF 13550=A% 13560 13570DEFPROCMEDelete 13580A%=startsample%+pselectr% 13590B%=startsample%+pselectl% 13600C%=samplelen%-pselectr% 13610CALLcopymem 13620IF ploopl%>pselectl% THEN ploopl%=ploopl%-(pselectr%-pselectl%) 13630IF ploopr%>pselectl% THEN ploopr%=ploopr%-(pselectr%-pselectl%) 13640PROCgetwinp 13650samplelen%=samplelen%-(A%-B%) 13660IF samplelen%<1 THEN samplelen%=1:startsample%?0=0:startsample%?1=0 13670PROCCheckLoop 13680PROCCheckSong 13690PROCadjptrs 13700PROCZoomSel 13710PROCModTitle(0) 13720ENDPROC 13730 13740DEFPROCMEDeleteNS 13750A%=startsample%+pselectl% 13760B%=startsample% 13770C%=pselectr%-pselectl% 13780CALLcopymem 13790ploopl%=ploopl%-pselectl% 13800ploopr%=ploopr%-pselectl% 13810PROCgetwinp 13820samplelen%=C% 13830IF samplelen%<1 THEN samplelen%=1:startsample%?0=0:startsample%?1=0 13840PROCCheckLoop 13850PROCCheckSong 13860PROCadjptrs 13870PROCZoomSel 13880PROCModTitle(0) 13890ENDPROC 13900 13910DEFPROCMEDeleteL 13920A%=startsample%+pselectl% 13930B%=startsample% 13940C%=samplelen%-pselectl% 13950CALLcopymem 13960ploopl%=ploopl%-pselectl% 13970ploopr%=ploopr%-pselectl% 13980PROCgetwinp 13990samplelen%=C% 14000IF samplelen%<1 THEN samplelen%=1:startsample%?0=0:startsample%?1=0 14010PROCCheckLoop 14020PROCCheckSong 14030PROCadjptrs 14040PROCZoomSel 14050PROCModTitle(0) 14060ENDPROC 14070 14080DEFPROCMEDeleteR 14090A%=pselectr% 14100PROCgetwinp 14110samplelen%=A% 14120IF samplelen%<1 THEN samplelen%=1:startsample%?0=0:startsample%?1=0 14130PROCCheckLoop 14140PROCCheckSong 14150PROCadjptrs 14160PROCZoomSel 14170PROCModTitle(0) 14180ENDPROC 14190 14200DEFPROCCheckLoop 14210IF ploopl%<0 THEN ploopl%=0 14220IF ploopl%>samplelen% THEN ploopl%=samplelen% 14230IF ploopr%<0 THEN ploopr%=0 14240IF ploopr%>samplelen% THEN ploopr%=samplelen% 14250IF ploopl%>ploopr% THEN ploopr%=ploopl% 14260PROCUpdateSLoop 14270ENDPROC 14280 14290DEFPROCgetwinp 14300temp%!0=wworkh% 14310SYS"Wimp_GetWindowState",,temp% 14320selectl%=temp%!20 14330selectr%=temp%!20+1022 14340pselectl%=FNWorkToPtr(selectl%) 14350pselectr%=FNWorkToPtr(selectr%) 14360ENDPROC 14370 14380DEFPROCadjptrs 14390IF pselectl%<0 THEN pselectr%=pselectr%-pselectl%:pselectl%=0 14400IF pselectr%>samplelen% THEN pselectl%=pselectl%-(pselectr%-samplelen%):pselectr%=samplelen% 14410IF pselectl%<0 THEN pselectl%=0 14420IF pselectr%>samplelen% THEN pselectr%=samplelen% 14430selectl%=FNPtrToWork(pselectl%) 14440selectr%=FNPtrToWork(pselectr%) 14450ENDPROC 14460 14470DEFPROCMSelect 14480m%=polledb%!4 14490CASE m% OF 14500 WHEN 0:PROCMSelAll 14510 WHEN 1:PROCMSelLoop 14520 WHEN 2:PROCMSelLeft 14530 WHEN 3:PROCMSelRight 14540 WHEN 4:PROCMSelWindow 14550 WHEN -1,5:PROCMSelClear 14560ENDCASE 14570ENDPROC 14580 14590DEFPROCMSelAll 14600pselectl%=0 14610pselectr%=samplelen% 14620selectl%=FNPtrToWork(pselectl%) 14630selectr%=FNPtrToWork(pselectr%) 14640PROCUpdateSelect 14650ENDPROC 14660 14670DEFPROCMSelLeft 14680pselectr%=pselectl% 14690pselectl%=0 14700selectl%=FNPtrToWork(pselectl%) 14710selectr%=FNPtrToWork(pselectr%) 14720PROCUpdateSelect 14730ENDPROC 14740 14750DEFPROCMSelRight 14760pselectl%=pselectr% 14770pselectr%=samplelen% 14780selectl%=FNPtrToWork(pselectl%) 14790selectr%=FNPtrToWork(pselectr%) 14800PROCUpdateSelect 14810ENDPROC 14820 14830DEFPROCMSelWindow 14840temp%!0=wworkh% 14850SYS"Wimp_GetWindowState",,temp% 14860selectl%=temp%!20 14870selectr%=temp%!20+1022 14880pselectl%=FNWorkToPtr(selectl%) 14890pselectr%=FNWorkToPtr(selectr%) 14900selectl%=FNPtrToWork(pselectl%) 14910selectr%=FNPtrToWork(pselectr%) 14920PROCUpdateSelect 14930ENDPROC 14940 14950DEFPROCMSelLoop 14960pselectl%=ploopl% 14970pselectr%=ploopr% 14980selectl%=FNPtrToWork(pselectl%) 14990selectr%=FNPtrToWork(pselectr%) 15000PROCUpdateSelect 15010ENDPROC 15020 15030DEFPROCMSelClear 15040selectl%=-1:selectr%=-1 15050pselectl%=-1:pselectr%=-1 15060PROCUpdateSelect 15070ENDPROC 15080 15090DEFPROCMZoom 15100m%=polledb%!4 15110CASE m% OF 15120 WHEN 0:PROCZoomAll 15130 WHEN 1:PROCZoomOut 15140 WHEN 2:PROCZoomLoop 15150 WHEN -1,3:PROCZoomSel 15160 WHEN 4:PROCZoomStore 15170 WHEN 5:PROCZoomRestore 15180ENDCASE 15190ENDPROC 15200 15210DEFPROCZoomAll 15220polledb%!0=wworkh% 15230SYS"Wimp_GetWindowState",,polledb% 15240polledb%!20=0 15250SYS"Wimp_OpenWindow",,polledb% 15260displen%=samplelen% 15270PROCSetExtent 15280selectl%=FNPtrToWork(pselectl%) 15290selectr%=FNPtrToWork(pselectr%) 15300loopl%=FNPtrToWork(ploopl%) 15310loopr%=FNPtrToWork(ploopr%) 15320oloopl%=loopl%:oloopr%=loopr% 15330oselectl%=selectl%:oselectr%=selectr% 15340PROCRdWork 15350ENDPROC 15360 15370DEFPROCZoomOut 15380opsl%=pselectl%:opsr%=pselectr% 15390polledb%!0=wworkh% 15400SYS"Wimp_GetWindowState",,polledb% 15410selectl%=polledb%!20 15420selectr%=polledb%!20+1022 15430pselectl%=FNWorkToPtr(selectl%) 15440pselectr%=FNWorkToPtr(selectr%) 15450sw%=pselectr%-pselectl% 15460pselectl%=pselectl%-sw% 15470pselectr%=pselectr%+sw% 15480IF pselectl%<0 THEN pselectr%=pselectr%-pselectl%:pselectl%=0 15490IF pselectr%>samplelen% THEN pselectl%=pselectl%-(pselectr%-samplelen%):pselectr%=samplelen% 15500IF pselectl%<0 THEN pselectl%=0 15510IF pselectr%>samplelen% THEN pselectr%=samplelen% 15520selectl%=FNPtrToWork(pselectl%) 15530selectr%=FNPtrToWork(pselectr%) 15540loopl%=FNPtrToWork(ploopl%) 15550loopr%=FNPtrToWork(ploopr%) 15560oloopl%=loopl%:oloopr%=loopr% 15570PROCZoomSel 15580pselectl%=opsl%:pselectr%=opsr% 15590selectl%=FNPtrToWork(pselectl%) 15600selectr%=FNPtrToWork(pselectr%) 15610PROCUpdateSelect 15620ENDPROC 15630 15640DEFPROCZoomLoop 15650opsl%=pselectl% 15660opsr%=pselectr% 15670pselectl%=ploopl% 15680pselectr%=ploopr% 15690selectl%=FNPtrToWork(pselectl%) 15700selectr%=FNPtrToWork(pselectr%) 15710PROCZoomSel 15720pselectl%=opsl% 15730pselectr%=opsr% 15740selectl%=FNPtrToWork(pselectl%) 15750selectr%=FNPtrToWork(pselectr%) 15760PROCUpdateSelect 15770ENDPROC 15780 15790DEFPROCZoomSel 15800IF pselectl%<>-1 AND pselectr%<>-1 THEN 15810 displen%=pselectr%-pselectl% 15820 IF displen%<1 THEN displen%=1 15830 dispst=pselectl%/samplelen% 15840 polledb%!0=wworkh% 15850 SYS"Wimp_GetWindowState",,polledb% 15860 polledb%!20=0 15870 SYS"Wimp_OpenWindow",,polledb% 15880 PROCSetExtent 15890 polledb%!20=dispst*maxx% 15900 SYS"Wimp_OpenWindow",,polledb% 15910 selectl%=-1:selectr%=-1:oselectl%=-1:oselectr%=-1 15920 pselectl%=-1:pselectr%=-1 15930 loopl%=FNPtrToWork(ploopl%) 15940 loopr%=FNPtrToWork(ploopr%) 15950 oloopl%=loopl%:oloopr%=loopr% 15960 PROCRdWork 15970ENDIF 15980ENDPROC 15990 16000DEFPROCZoomStore 16010temp%!0=wworkh% 16020SYS"Wimp_GetWindowState",,temp% 16030zoomsl%=temp%!20 16040zoomsr%=temp%!20+1024 16050zoomsl%=FNWorkToPtr(zoomsl%) 16060zoomsr%=FNWorkToPtr(zoomsr%) 16070ENDPROC 16080 16090DEFPROCZoomRestore 16100opsl%=pselectl%:opsr%=pselectr% 16110pselectl%=zoomsl% 16120pselectr%=zoomsr% 16130IF pselectl%<0 THEN pselectl%=0 16140IF pselectr%<0 THEN pselectr%=0 16150IF pselectl%>samplelen% THEN pselectl%=samplelen% 16160IF pselectr%>samplelen% THEN pselectr%=samplelen% 16170PROCZoomSel 16180pselectl%=opsl%:pselectr%=opsr% 16190selectl%=FNPtrToWork(pselectl%) 16200selectr%=FNPtrToWork(pselectr%) 16210PROCUpdateSelect 16220ENDPROC 16230 16240DEFPROCMLoop 16250m%=polledb%!4 16260CASE m% OF 16270 WHEN 0:PROCLoopAll 16280 WHEN 1:PROCLoopWindow 16290 WHEN 2:PROCLoopSel 16300 WHEN 3:PROCLoopHalf 16310 WHEN 4:PROCLoopDouble 16320 WHEN 5:PROCLoopStore 16330 WHEN 6:PROCLoopRestore 16340ENDCASE 16350ENDPROC 16360 16370DEFPROCLoopAll 16380ploopl%=0 16390ploopr%=samplelen% 16400loopl%=FNPtrToWork(ploopl%) 16410loopr%=FNPtrToWork(ploopr%) 16420PROCUpdateLoopP 16430ENDPROC 16440 16450DEFPROCLoopWindow 16460opsl%=pselectl% 16470opsr%=pselectr% 16480PROCgetwinp 16490PROCLoopSel 16500pselectl%=opsl% 16510pselectr%=opsr% 16520selectl%=FNPtrToWork(pselectl%) 16530selectr%=FNPtrToWork(pselectr%) 16540PROCUpdateSelect 16550ENDPROC 16560 16570DEFPROCLoopSel 16580IF pselectl%<>-1 AND pselectr%<>-1 THEN 16590 ploopl%=pselectl% 16600 ploopr%=pselectr% 16610 loopl%=FNPtrToWork(ploopl%) 16620 loopr%=FNPtrToWork(ploopr%) 16630 PROCUpdateLoopP 16640ENDIF 16650ENDPROC 16660 16670DEFPROCLoopHalf 16680ploopr%=ploopl%+(ploopr%-ploopl%)/2 16690loopl%=FNPtrToWork(ploopl%) 16700loopr%=FNPtrToWork(ploopr%) 16710PROCUpdateLoopP 16720ENDPROC 16730 16740DEFPROCLoopDouble 16750ploopr%=ploopl%+(ploopr%-ploopl%)*2 16760IF ploopr%>samplelen% THEN ploopl%=ploopl%-(ploopr%-samplelen%):ploopr%=samplelen% 16770IF ploopl%<0 THEN ploopl%=0 16780loopl%=FNPtrToWork(ploopl%) 16790loopr%=FNPtrToWork(ploopr%) 16800PROCUpdateLoopP 16810ENDPROC 16820 16830DEFPROCLoopStore 16840sploopl%=ploopl%:sploopr%=ploopr% 16850ENDPROC 16860 16870DEFPROCLoopRestore 16880ploopl%=sploopl%:ploopr%=sploopr% 16890IF ploopl%<0 THEN ploopl%=0 16900IF ploopr%<0 THEN ploopr%=0 16910IF ploopl%>samplelen% THEN ploopl%=samplelen% 16920IF ploopr%>samplelen% THEN ploopr%=samplelen% 16930loopl%=FNPtrToWork(ploopl%) 16940loopr%=FNPtrToWork(ploopr%) 16950PROCUpdateLoopP 16960ENDPROC 16970 16980DEFPROCMGoodies 16990IF pselectl%<>-1 AND pselectr%<>-1 THEN 17000 A%=startsample%+pselectl% 17010 B%=startsample%+pselectr% 17020ELSE 17030 A%=startsample% 17040 B%=startsample%+samplelen% 17050ENDIF 17060IF A%>B% THEN SWAP A%,B% 17070m%=polledb%!4 17080CASE m% OF 17090 WHEN 0:PROCMGSigned 17100 WHEN 1:PROCMGLinLog 17110 WHEN 2:PROCMGLogLin 17120 WHEN 3:PROCMGReverse 17130 WHEN 4:PROCMGFiltLo 17140 WHEN 5:PROCMGFiltHi 17150 WHEN 6:PROCMGScAmp 17160 WHEN 9:PROCMGLength 17170 WHEN 10:PROCMGFill 17180 WHEN 11:PROCMGFFT 17190 WHEN 12:PROCMGAddClipB 17200ENDCASE 17210ENDPROC 17220 17230DEFPROCMGSigned 17240CALLsigned 17250PROCRdWork 17260PROCModTitle(0) 17270ENDPROC 17280 17290DEFPROCMGLinLog 17300IF stype%<>0 AND stype%<>1 THEN 17310 PROCReportErr("SFXED not in lineair mode.") 17320ELSE 17330 SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 17340 C%=stype% 17350 CALLlinlog 17360 stype%=2 17370 PROCAdjTypeM 17380 PROCRdWork 17390 PROCModTitle(0) 17400ENDIF 17410ENDPROC 17420 17430DEFPROCMGLogLin 17440SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 17450CALLloglin 17460stype%=0 17470PROCAdjTypeM 17480PROCRdWork 17490PROCModTitle(0) 17500ENDPROC 17510 17520DEFPROCMGReverse 17530CALLreverse 17540PROCRdWork 17550PROCModTitle(0) 17560ENDPROC 17570 17580DEFPROCMGFiltLo 17590IF stype%=2 THEN 17600 PROCReportErr("Only for lineair samples.") 17610ELSE 17620 C%=16*VAL($(mfiltlo%!40)) 17630 IF C%<0 OR C%>4095 THEN 17640 PROCReportErr("Only values from 0 to 256.") 17650 ELSE 17660 D%=stype% 17670 E%=A%?0 17680 IF stype%=1 THEN E%=E% EOR &80 17690 E%=(E%<<24)>>24 17700 E%=E%*256 17710 CALLfiltlo 17720 PROCRdWork 17730 PROCModTitle(0) 17740 ENDIF 17750ENDIF 17760ENDPROC 17770 17780DEFPROCMGFiltHi 17790IF stype%=2 THEN 17800 PROCReportErr("Only for lineair samples.") 17810ELSE 17820 C%=16*VAL($(mfilthi%!40)) 17830 IF C%<0 OR C%>4095 THEN 17840 PROCReportErr("Only values from 0 to 256") 17850 ELSE 17860 D%=stype% 17870 IF A%=startsample% THEN E%=0 ELSE E%=A%?0 17880 IF stype%=1 THEN E%=E% EOR &80 17890 E%=(E%<<24)>>24 17900 E%=E%*256 17910 CALLfilthi 17920 PROCRdWork 17930 PROCModTitle(0) 17940 ENDIF 17950ENDIF 17960ENDPROC 17970 17980DEFPROCMGScAmp 17990IF stype%=2 THEN 18000 PROCReportErr("Only for lineair samples.") 18010ELSE 18020 C%=4096*VAL($(mscamp%!40))/100 18030 D%=stype% 18040 CALLscamp 18050 PROCRdWork 18060 PROCModTitle(0) 18070ENDIF 18080ENDPROC 18090 18100DEFPROCMGLength 18110fr=VAL($(mnewlen%!40))/100 18120sa%=A%-startsample% 18130sb%=B%-startsample% 18140c%=FNCheckLen(samplelen%+clipblen%+(sb%-sa%)*(fr-1),"No room for stretch.") 18150IF c%=0 THEN 18160 sc%=fr*&1000000 18170 IF sc%>=&1000000 THEN 18180 A%=startsample%+sb% 18190 B%=startsample%+sa%+(sb%-sa%)*fr 18200 C%=samplelen%-sb% 18210 CALLcopymem 18220 ENDIF 18230 A%=startsample%+sa% 18240 B%=startsample%+sb% 18250 C%=sc% 18260 IF sc%<&1000000 THEN 18270 IF fr<>0 THEN C%=&1000000/fr:CALLnwlengths 18280 ELSE 18290 C%=&1000000/fr 18300 D%=startsample%+sa%+(sb%-sa%)*fr 18310 CALLnwlengthb 18320 ENDIF 18330 IF sc%<&1000000 THEN 18340 A%=startsample%+sb% 18350 B%=startsample%+sa%+(sb%-sa%)*fr 18360 C%=samplelen%-sb% 18370 CALLcopymem 18380 ENDIF 18390 IF ploopl%>sa% THEN ploopl%=ploopl%-(sb%-sa%)+(sb%-sa%)*fr 18400 IF ploopr%>sa% THEN ploopr%=ploopr%-(sb%-sa%)+(sb%-sa%)*fr 18410 PROCgetwinp 18420 samplelen%=samplelen%-(sb%-sa%)+(sb%-sa%)*fr 18430 IF samplelen%<1 THEN samplelen%=1:startsample%?0=0:startsample%?1=0 18440 PROCCheckLoop 18450 PROCCheckSong 18460 PROCadjptrs 18470 PROCZoomSel 18480 PROCModTitle(0) 18490ENDIF 18500ENDPROC 18510 18520DEFPROCMGFill 18530IF stype%=1 THEN C%=128 ELSE C%=0 18540CALLfillmem 18550PROCRdWork 18560PROCModTitle(0) 18570ENDPROC 18580 18590DEFPROCMGFFT 18600IF stype%=2 THEN 18610 PROCReportErr("Only for lineair samples.") 18620ELSE 18630 C%=VAL($(mfftamp%!40)) 18640 IF C%<0 THEN C%=0 18650 SYS"Hourglass_On" 18660 SYS"Wimp_BaseOfSprites"TO,S% 18670 SYS"OS_SpriteOp",60+256,S%,"fftsprite",0 18680 CLG:VDU5 18690 LINE 512,512,0,256 18700 LINE 512,512,1024,256 18710 LINE 512,512,512,1024 18720 MOVE 8,212 18730 PRINT"f"; 18740 LINE 26,232,0,220 18750 LINE 12,220,0,220 18760 LINE 8,228,0,220 18770 MOVE 1000,212 18780 PRINT"t"; 18790 LINE 996,232,1022,220 18800 LINE 1010,220,1022,220 18810 LINE 1014,228,1022,220 18820 MOVE 490,1020 18830 PRINT"A"; 18840 LINE 480,1020,480,988 18850 LINE 476,1008,480,1020 18860 LINE 484,1008,480,1020 18870 18880 fftcode%!4=A% 18890 fftcode%!8=B% 18900 fftcode%!12=0 18910 IF (B%-A%)<128 THEN fftcode%!16=0 ELSE fftcode%!16=64*(B%-A%) 18920 fftcode%!20=0 18930 fftcode%!24=stype% 18940 fftcode%!28=C% 18950 fftcode%!32=512 18960 fftcode%!36=512 18970 fftcode%!40=fftrcoef% 18980 fftcode%!44=ffticoef% 18990 CALLfftcode% 19000 19010 SYS"OS_SpriteOp",60+256,S%,0,0 19020 temp%!0=wffth% 19030 SYS"Wimp_CloseWindow",,temp% 19040 SYS"Wimp_GetWindowState",,temp% 19050 temp%!28=-1 19060 SYS"Wimp_OpenWindow",,temp% 19070 SYS"Hourglass_Off" 19080ENDIF 19090ENDPROC 19100 19110DEFPROCMGAddClipB 19120IF stype%=2 THEN 19130 PROCReportErr("Only for lineair samples.") 19140ELSE 19150 IF B%-A%>clipblen% THEN C%=clipblen% ELSE C%=B%-A% 19160 B%=clipbstart% 19170 D%=stype% 19180 CALLaddclip 19190 PROCRdWork 19200 PROCModTitle(0) 19210ENDIF 19220ENDPROC 19230 19240DEFPROCEchoClick 19250IF pselectl%<>-1 AND pselectr%<>-1 THEN 19260 A%=startsample%+pselectl% 19270 B%=startsample%+pselectr% 19280ELSE 19290 A%=startsample% 19300 B%=startsample%+samplelen% 19310ENDIF 19320IF A%>B% THEN SWAP A%,B% 19330IF polledb%!16=8 THEN 19340 MOUSE a%,b%,bc% 19350 IF stype%=2 THEN 19360 PROCReportErr("Only for lineair samples.") 19370 ELSE 19380 temp%!0=wechoh% 19390 temp%!4=2 19400 SYS"Wimp_GetIconState",,temp% 19410 C%=256-(256*VAL($(temp%!28))/100) 19420 temp%!0=wechoh% 19430 temp%!4=3 19440 SYS"Wimp_GetIconState",,temp% 19450 D%=VAL($(temp%!28)) 19460 temp%!0=wechoh% 19470 temp%!4=6 19480 SYS"Wimp_GetIconState",,temp% 19490 E%=(temp%!24)AND(1<<21) 19500 F%=stype% 19510 IF C%<0 OR C%>256 THEN 19520 PROCReportErr("Decay rate out of range.") 19530 ELSE 19540 CALLecho 19550 PROCRdWork 19560 PROCModTitle(0) 19570 ENDIF 19580 ENDIF 19590 IF (bc% AND 1)=0 THEN SYS"Wimp_CreateMenu",-1,-1,-1,-1 19600ENDIF 19610ENDPROC 19620 19630DEFPROCFadeClick 19640IF pselectl%<>-1 AND pselectr%<>-1 THEN 19650 A%=startsample%+pselectl% 19660 B%=startsample%+pselectr% 19670ELSE 19680 A%=startsample% 19690 B%=startsample%+samplelen% 19700ENDIF 19710IF A%>B% THEN SWAP A%,B% 19720IF polledb%!16=6 THEN 19730 MOUSE a%,b%,bc% 19740 IF stype%=2 THEN 19750 PROCReportErr("Only for lineair samples.") 19760 ELSE 19770 temp%!0=wfadeh% 19780 temp%!4=2 19790 SYS"Wimp_GetIconState",,temp% 19800 C%=&10000000*VAL($(temp%!28))/100 19810 temp%!0=wfadeh% 19820 temp%!4=3 19830 SYS"Wimp_GetIconState",,temp% 19840 D%=&10000000*VAL($(temp%!28))/100 19850 IF B%-A%<>0 THEN 19860 E%=(D%-C%)/(B%-A%) 19870 F%=stype% 19880 CALLfade 19890 PROCRdWork 19900 PROCModTitle(0) 19910 ENDIF 19920 ENDIF 19930 IF (bc% AND 1)=0 THEN SYS"Wimp_CreateMenu",-1,-1,-1,-1 19940ENDIF 19950ENDPROC 19960 19970DEFPROCUser_Message 19980FORT%=0TO255STEP4:messbk%!T%=polledb%!T%:NEXTT% 19990m%=polledb%!16 20000CASE m% OF 20010 WHEN 0:PROCQuit 20020 WHEN 1:PROCDataSave 20030 WHEN 2:PROCSaveAck 20040 WHEN 3:PROCDataLoad 20050 WHEN &400c0:PROCMenuWarning 20060 WHEN &9abc0:polledb%!8=1:PROCMType 20070 WHEN &9abc1:polledb%!8=2:PROCMType 20080 WHEN &9abc2:polledb%!8=0:PROCMType 20090 WHEN &9abc3:PROCMessGetLen 20100 WHEN &9abc4:PROCCalculated 20110ENDCASE 20120ENDPROC 20130 20140DEFPROCDataLoad 20150CASE polledb%!20 OF 20160 WHEN -2,wworkh%:PROCLoadSample 20170ENDCASE 20180ENDPROC 20190 20200DEFPROCMessGetLen 20210SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 20220temp%!20=bufstart% 20230temp%!24=buflen%-clipblen% 20240PROCSendSFXM(&9abc5) 20250ENDPROC 20260 20270DEFPROCCalculated 20280SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 20290startsample%=bufstart% 20300samplelen%=polledb%!20 20310stype%=polledb%!24 20320PROCAdjTypeM 20330selectl%=-1:selectr%=-1:oselectl%=-1:oselectr%=-1 20340pselectl%=-1:pselectr%=-1 20350ploopl%=0:ploopr%=samplelen% 20360$(wwork%!72)=$(polledb%+28) 20370samplesaved%=-1 20380PROCOpenWork 20390PROCCheckSong 20400PROCZoomAll 20410SYS"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 20420ENDPROC 20430 20440DEFPROCSendSFXM(M%) 20450H%=FNGetSFXMH 20460IF H%<>0 THEN 20470 temp%!0=256 20480 temp%!4=0 20490 temp%!8=0 20500 temp%!12=0 20510 temp%!16=M% 20520 SYS"Wimp_SendMessage",17,temp%,H% 20530ENDIF 20540ENDPROC 20550 20560DEFFNGetSFXMH 20570SYS"XOS_ReadVarVal","SFXM_TaskHandle",temp2%,16,0,0TO,,A% 20580temp2%?A%=13 20590IF A%=0 THEN =0 ELSE =EVAL("&"+$temp2%) 20600 20610DEFPROCLoadSample 20620SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 20630PROCMBString(polledb%+44) 20640filetoload$=$(polledb%+44) 20650filetype%=polledb%!40 20660IF samplesaved%=-1 THEN 20670 PROCLoadSample2 20680ELSE 20690 A%=FNConfirm("Sample has been modified. Are you sure you want to load another sample?") 20700 IF A%=1 THEN PROCLoadSample2 20710ENDIF 20720messbk%!0=256 20730messbk%!12=messbk%!8 20740messbk%!16=4 20750SYS"Wimp_SendMessage",17,messbk%,messbk%!4 20760ENDPROC 20770 20780DEFPROCLoadSample2 20790LOCAL ERROR 20800ON ERROR LOCAL PROCReportErr(REPORT$):ENDPROC 20810f%=OPENIN(filetoload$) 20820IF f%=0 THEN 20830 samplelen%=1 20840 startsample%?0=0 20850 startsample%?1=0 20860 CLOSE#f% 20870ELSE 20880 filelen%=EXT#f% 20890 CLOSE#f% 20900 c%=FNCheckLen(filelen%+clipblen%,"No room.") 20910 IF c%=0 THEN 20920 f%=OPENIN(filetoload$) 20930 startsample%=bufstart% 20940 CASE filetype% OF 20950 WHEN &cb5:PROCLoadSa1 20960 WHEN &d3c:PROCLoadSa2 20970 WHEN &df9:PROCLoadSa3 20980 WHEN &ed0:PROCLoadSa4 20990 WHEN &d3b:PROCLoadSong 21000 OTHERWISE:PROCLoadSaX 21010 ENDCASE 21020 CLOSE#f% 21030 selectl%=-1:selectr%=-1:oselectl%=-1:oselectr%=-1 21040 pselectl%=-1:pselectr%=-1 21050 IF filetoload$="<Wimp$Scrap>" THEN 21060 OSCLI("delete <Wimp$Scrap>") 21070 filetoload$=filetoload2$ 21080 ENDIF 21090 $(wwork%!72)=filetoload$ 21100 IF filetype%=&d3b THEN 21110 temp%!0=wsaveassongh% 21120 temp%!4=1 21130 SYS"Wimp_GetIconState",,temp% 21140 $(!(temp%+28))=filetoload$ 21150 ELSE 21160 temp%!0=wsaveassa1h% 21170 temp%!4=1 21180 SYS"Wimp_GetIconState",,temp% 21190 $(!(temp%+28))=filetoload$ 21200 temp%!0=wsaveassa2h% 21210 temp%!4=1 21220 SYS"Wimp_GetIconState",,temp% 21230 $(!(temp%+28))=filetoload$ 21240 temp%!0=wsaveassa3h% 21250 temp%!4=1 21260 SYS"Wimp_GetIconState",,temp% 21270 $(!(temp%+28))=filetoload$ 21280 temp%!0=wsaveassa4h% 21290 temp%!4=1 21300 SYS"Wimp_GetIconState",,temp% 21310 $(!(temp%+28))=filetoload$ 21320 temp%!0=wsaveassa5h% 21330 temp%!4=1 21340 SYS"Wimp_GetIconState",,temp% 21350 $(!(temp%+28))=filetoload$ 21360 temp%!0=wsaveassa6h% 21370 temp%!4=1 21380 SYS"Wimp_GetIconState",,temp% 21390 $(!(temp%+28))=filetoload$ 21400 temp%!0=wsaveasmoh% 21410 temp%!4=1 21420 SYS"Wimp_GetIconState",,temp% 21430 $(!(temp%+28))=filetoload$ 21440 ENDIF 21450 samplesaved%=-1 21460 PROCCheckSong 21470 PROCOpenWork 21480 PROCZoomAll 21490 ENDIF 21500ENDIF 21510ENDPROC 21520 21530DEFPROCLoadSong 21540PROCClearSong 21550INPUT#f%,a$,pitch%,songlen%,samplelen% 21560IF a$="RgnosXFS" THEN songrep%=-1:a$="gnosXFS" ELSE songrep%=0 21570T%=0 21580WHILE T%<songlen% 21590 INPUT#f%,b$,A%,B%,C%,D%,E% 21600 D%=D%*16 21610 IF a$<>"gnosXFS" THEN E%=255 21620 IF A%<0 THEN A%=0 21630 IF B%<0 THEN B%=0 21640 IF A%>samplelen% THEN A%=samplelen% 21650 IF B%>samplelen% THEN B%=samplelen% 21660 IF C%<1 THEN C%=1 21670 IF C%>255 THEN C%=255 21680 IF D%<1 THEN D%=1 21690 IF D%>&10000 THEN D%=&10000 21700 IF E%<2 THEN E%=2 21710 IF E%>255 THEN E%=255 21720 IF T%<INT(songbuflen%/32) THEN 21730 $(songstart%+T%*32)=LEFT$(b$,10) 21740 songstart%!(T%*32+12)=C% 21750 songstart%!(T%*32+16)=D% 21760 songstart%!(T%*32+20)=E% 21770 songstart%!(T%*32+24)=A% 21780 songstart%!(T%*32+28)=B% 21790 ENDIF 21800 T%+=1 21810ENDWHILE 21820SYS"OS_GBPB",4,f%,startsample%,samplelen% 21830PROCSetPitch2 21840PROCAdjSongM 21850PROCRdSong 21860PROCSetSongExtent 21870ploopl%=0:ploopr%=samplelen% 21880ENDPROC 21890 21900DEFPROCLoadSa1 21910SYS"OS_GBPB",3,f%,temp%,4,0 21920IF !temp%<>&504d4153 THEN 21930 SYS"OS_GBPB",3,f%,startsample%,filelen%,0 21940 samplelen%=filelen% 21950 ploopl%=0:ploopr%=2 21960ELSE 21970 samplelen%=-1 21980 ploopl%=-1 21990 ploopr%=-1 22000 N%=0:T%=0 22010 WHILE N%=0 AND (samplelen%=-1 OR ploopl%=-1 OR ploopr%=-1) 22020 SYS"OS_GBPB",3,f%,temp%,4,T%TO,,,,T% 22030 CASE !temp% OF 22040 WHEN &53464f52:SYS"OS_GBPB",3,f%,temp%,8,T%TO,,,,T%:ploopl%=temp%!4 22050 WHEN &4e454c52:SYS"OS_GBPB",3,f%,temp%,8,T%TO,,,,T%:ploopr%=temp%!4 22060 WHEN &54414453:SYS"OS_GBPB",3,f%,temp%,4,T%TO,,,,T%:samplelen%=temp%!0:SYS"OS_GBPB",3,f%,startsample%,samplelen%,T%TO,,,,T% 22070 ENDCASE 22080 SYS"OS_Args",254,f%TON% 22090 N%=N%AND(1<<9) 22100 ENDWHILE 22110 IF samplelen%=-1 THEN PROCReportErr("Bad Chunk."):samplelen%=1:ploopl%=0:ploopr%=1 22120 IF ploopl%=-1 OR ploopr%=-1 THEN PROCReportErr("Bad Chunk."):ploopl%=0:ploopr%=samplelen% 22130 ploopr%=ploopl%+ploopr% 22140ENDIF 22150stype%=2 22160PROCAdjTypeM 22170IF ploopl%=0 AND ploopr%=2 THEN playtype%=0 ELSE playtype%=3 22180PROCAdjKeys 22190IF ploopl%<0 THEN ploopl%=0 22200IF ploopl%>samplelen% THEN ploopl%=samplelen%:ploopr%=samplelen% 22210IF ploopr%>samplelen% THEN ploopr%=samplelen% 22220IF ploopr%<0 THEN ploopl%=0:ploopr%=0 22230IF ploopr%<ploopl% THEN ploopr%=ploopl% 22240ENDIF 22250ENDPROC 22260 22270DEFPROCLoadSa2 22280SYS"OS_GBPB",3,f%,startsample%,1,0 22290pitch%=?startsample% 22300PROCSetPitch2 22310SYS"OS_GBPB",3,f%,startsample%,filelen%-1,1 22320samplelen%=filelen%-1 22330ploopl%=0:ploopr%=samplelen% 22340stype%=0 22350PROCAdjTypeM 22360ENDPROC 22370 22380DEFPROCLoadSa3 22390SYS"OS_GBPB",3,f%,temp%,4,20 22400samplelen%=temp%!0 22410SYS"OS_GBPB",3,f%,temp%,4,24 22420ploopl%=(temp%!0)*256 22430SYS"OS_GBPB",3,f%,temp%,4,28 22440ploopr%=(temp%!0)*256 22450SYS"OS_GBPB",3,f%,startsample%,samplelen%,544 22460stype%=0 22470PROCAdjTypeM 22480IF ploopl%=ploopr% THEN playtype%=0 ELSE playtype%=3 22490PROCAdjKeys 22500IF ploopl%<0 THEN ploopl%=0 22510IF ploopl%>samplelen% THEN ploopl%=samplelen%:ploopr%=samplelen% 22520IF ploopr%>samplelen% THEN ploopr%=samplelen% 22530IF ploopr%<0 THEN ploopl%=0:ploopr%=0 22540IF ploopr%<ploopl% THEN ploopr%=ploopl% 22550ENDPROC 22560 22570DEFPROCLoadSa4 22580SYS"OS_GBPB",3,f%,startsample%,filelen%,0 22590samplelen%=filelen% 22600ploopl%=0:ploopr%=samplelen% 22610stype%=1 22620PROCAdjTypeM 22630ENDPROC 22640 22650DEFPROCLoadSaX 22660SYS"OS_GBPB",3,f%,startsample%,filelen%,0 22670samplelen%=filelen% 22680ploopl%=0:ploopr%=samplelen% 22690ENDPROC 22700 22710DEFPROCAdjKeys 22720temp%!0=wkeyboardh% 22730temp%!4=43 22740IF playtype%=0 THEN temp%!8=1<<21 ELSE temp%!8=0 22750temp%!12=1<<21 22760SYS"Wimp_SetIconState",,temp% 22770temp%!4=44 22780IF playtype%=1 THEN temp%!8=1<<21 ELSE temp%!8=0 22790temp%!12=1<<21 22800SYS"Wimp_SetIconState",,temp% 22810temp%!4=45 22820IF playtype%=2 THEN temp%!8=1<<21 ELSE temp%!8=0 22830temp%!12=1<<21 22840SYS"Wimp_SetIconState",,temp% 22850temp%!4=46 22860IF playtype%=3 THEN temp%!8=1<<21 ELSE temp%!8=0 22870temp%!12=1<<21 22880SYS"Wimp_SetIconState",,temp% 22890ENDPROC 22900 22910DEFPROCMenuWarning 22920IF (lastmenu%=workmenu%) AND (polledb%!32=0) AND (polledb%!36=0) THEN PROCNewMenuInfo 22930IF (lastmenu%=workmenu%) AND (polledb%!32=1) AND (polledb%!40=-1) THEN PROCNewMenuSave 22940IF (lastmenu%=workmenu%) AND (polledb%!32=1) AND (polledb%!40<>-1) THEN PROCNewMenuWSave 22950IF (lastmenu%=workmenu%) AND (polledb%!32=7) AND (polledb%!36<>-1) THEN PROCNewMenuSSave 22960ENDPROC 22970 22980DEFPROCNewMenuSave 22990CASE polledb%!36 OF 23000 WHEN 0:savedata%=0:$savemenu2%="All" 23010 WHEN 1:savedata%=1:$savemenu2%="Selected" 23020 WHEN 2:savedata%=2:$savemenu2%="Clipboard" 23030ENDCASE 23040SYS"Wimp_CreateSubMenu",,polledb%!20,polledb%!24,polledb%!28 23050ENDPROC 23060 23070DEFPROCNewMenuWSave 23080CASE polledb%!40 OF 23090 WHEN 0:savedt%=0 23100 WHEN 1:savedt%=1 23110 WHEN 2:savedt%=2 23120 WHEN 3:savedt%=3 23130 WHEN 4:savedt%=4 23140 WHEN 5:savedt%=5 23150 WHEN 6:savedt%=6 23160ENDCASE 23170SYS"Wimp_CreateSubMenu",,polledb%!20,polledb%!24,polledb%!28 23180ENDPROC 23190 23200DEFPROCNewMenuSSave 23210CASE polledb%!36 OF 23220 WHEN 2:savedt%=10:savedata%=0 23230 WHEN 3:savedt%=11:savedata%=0 23240ENDCASE 23250SYS"Wimp_CreateSubMenu",,polledb%!20,polledb%!24,polledb%!28 23260ENDPROC 23270 23280DEFPROCNewMenuInfo 23290temp%!0=winfoh% 23300temp%!4=5 23310SYS"Wimp_GetIconState",,temp% 23320$(temp%!28)=STR$buflen% 23330temp%!4=6 23340SYS"Wimp_GetIconState",,temp% 23350$(temp%!28)=STR$samplelen% 23360temp%!4=7 23370SYS"Wimp_GetIconState",,temp% 23380$(temp%!28)=STR$clipblen% 23390temp%!4=8 23400SYS"Wimp_GetIconState",,temp% 23410IF pselectl%<>-1 AND pselectr%<>-1 THEN $(temp%!28)=STR$(pselectr%-pselectl%) ELSE $(temp%!28)="" 23420temp%!4=9 23430SYS"Wimp_GetIconState",,temp% 23440IF pselectl%<>-1 THEN $(temp%!28)=STR$pselectl% ELSE $(temp%!28)="" 23450temp%!4=16 23460SYS"Wimp_GetIconState",,temp% 23470IF pselectr%<>-1 THEN $(temp%!28)=STR$pselectr% ELSE $(temp%!28)="" 23480temp%!4=20 23490SYS"Wimp_GetIconState",,temp% 23500$(temp%!28)=STR$ploopl% 23510temp%!4=21 23520SYS"Wimp_GetIconState",,temp% 23530$(temp%!28)=STR$ploopr% 23540SYS"Wimp_CreateSubMenu",,polledb%!20,polledb%!24,polledb%!28 23550ENDPROC 23560 23570DEFPROCCloseDown 23580IF samplesaved%=-1 THEN 23590 PROCQuit 23600ELSE 23610 A%=FNConfirm("Sample has been modified. Are you sure you want to quit?") 23620 IF A%=1 THEN PROCQuit 23630ENDIF 23640ENDPROC 23650 23660DEFPROCQuit 23670PROCSendSFXM(0) 23680SYS"SFXMP_Stop",1 23690SYS"SFXMP_Stop",2 23700SYS"SFXMP_Stop",3 23710SYS"SFXMP_Disable" 23720SYS"XOS_SetVarVal","SFXED_TaskHandle","",-1,0,0 23730SYS"Wimp_BaseOfSprites"TO,S% 23740SYS"XOS_SpriteOp",25+256,S%,"fftsprite" 23750IF bufstart%<>-1 THEN SYS"XOS_Module",7,,bufstart% 23760IF songstart%<>-1 THEN SYS"XOS_Module",7,,songstart% 23770SYS"Hourglass_Smash" 23780SYS"Wimp_CloseDown",taskh%,&4b534154 23790SYS"OS_Exit" 23800ENDPROC 23810 23820DEFPROCSetExtent 23830maxx%=1024*samplelen%/displen% 23840temp%!0=0 23850temp%!4=-256 23860temp%!8=maxx% 23870temp%!12=0 23880SYS"Wimp_SetExtent",wworkh%,temp% 23890ENDPROC 23900 23910DEFPROCSetSongExtent 23920temp%!0=0 23930temp%!4=-(96+songlen%*36+36) 23940temp%!8=604 23950temp%!12=0 23960SYS"Wimp_SetExtent",wsongh%,temp% 23970temp%!0=wsongh% 23980SYS"Wimp_GetWindowState",,temp% 23990IF (temp%!32)AND(1<<16) THEN SYS"Wimp_OpenWindow",,temp% 24000ENDPROC 24010 24020DEFPROCInit 24030DIM temp% 1000 24040DIM temp2% 1000 24050DIM messbk% 512 24060bufstart%=-1 24070songstart%=-1 24080SYS"Wimp_Initialise",200,&4b534154,"SFXED"TOversion%,taskh% 24090IF version%<200 THEN SYS"Wimp_CloseDown",taskh%,&4b534154:SYS"OS_Exit" 24100SYS"XOS_ReadVarVal","SFXED_TaskHandle",temp2%,16,0,0TO,,A% 24110IF A%<>0 THEN 24120 PROCReportErr("SFXED already running.") 24130 SYS"Wimp_CloseDown",taskh%,&4b534154 24140 SYS"OS_Exit" 24150ENDIF 24160SYS"Hourglass_On" 24170SYS"XOS_SetVarVal","SFXED_TaskHandle",STR$~taskh%,8,0,0 24180DIM smodlog% 512 24190DIM smodslin% 512 24200DIM smodulin% 512 24210DIM smodsong% 1024 24220DIM fftcode% 3000 24230DIM fftrcoef% 128*4 24240DIM ffticoef% 128*4 24250OSCLI("LOAD <SFXED$Dir>.pmlog "+STR$~smodlog%) 24260OSCLI("LOAD <SFXED$Dir>.pmslin "+STR$~smodslin%) 24270OSCLI("LOAD <SFXED$Dir>.pmulin "+STR$~smodulin%) 24280OSCLI("LOAD <SFXED$Dir>.pmsong "+STR$~smodsong%) 24290OSCLI("LOAD <SFXED$Dir>.fftcode "+STR$~fftcode%) 24300SYS"Wimp_SpriteOp",11,,"<SFXED$Dir>.Sprites" 24310SYS"Wimp_OpenTemplate",,"<SFXED$Dir>.Templates" 24320DIM wsaveassa1% 1000 24330DIM wsaveassa2% 1000 24340DIM wsaveassa3% 1000 24350DIM wsaveassa4% 1000 24360DIM wsaveassa5% 1000 24370DIM wsaveassa6% 1000 24380DIM wsaveassong% 1000 24390DIM wsavesongmo% 1000 24400DIM wsaveasmo% 1000 24410DIM wabout% 1000 24420DIM wkeyboard% 4000 24430DIM wwork% 1000 24440DIM winfo% 1000 24450DIM wecho% 1000 24460DIM wfade% 1000 24470DIM wpos% 1000 24480DIM wfft% 1000 24490DIM wsong% 1000 24500DIM wsongpane% 1000 24510DIM icbuf% 4000 24520icbufn%=icbuf% 24530DIM tname% 16 24540next%=0 24550PROCLoadTemp(wsaveassa1%,"saveassa1") 24560PROCLoadTemp(wsaveassa2%,"saveassa2") 24570PROCLoadTemp(wsaveassa3%,"saveassa3") 24580PROCLoadTemp(wsaveassa4%,"saveassa4") 24590PROCLoadTemp(wsaveassa5%,"saveassa5") 24600PROCLoadTemp(wsaveassa6%,"saveassa6") 24610PROCLoadTemp(wsaveassong%,"saveassong") 24620PROCLoadTemp(wsavesongmo%,"savesongmo") 24630PROCLoadTemp(wabout%,"about") 24640PROCLoadTemp(wkeyboard%,"keyboard") 24650PROCLoadTemp(wsaveasmo%,"saveasmo") 24660PROCLoadTemp(wfade%,"fade") 24670PROCLoadTemp(wecho%,"echo") 24680PROCLoadTemp(winfo%,"info") 24690PROCLoadTemp(wwork%,"work") 24700PROCLoadTemp(wpos%,"pos") 24710PROCLoadTemp(wfft%,"fft") 24720PROCLoadTemp(wsong%,"song") 24730PROCLoadTemp(wsongpane%,"songpane") 24740SYS"Wimp_CloseTemplate" 24750SYS"Wimp_CreateWindow",,wsaveassa1%TOwsaveassa1h% 24760SYS"Wimp_CreateWindow",,wsaveassa2%TOwsaveassa2h% 24770SYS"Wimp_CreateWindow",,wsaveassa3%TOwsaveassa3h% 24780SYS"Wimp_CreateWindow",,wsaveassa4%TOwsaveassa4h% 24790SYS"Wimp_CreateWindow",,wsaveassa5%TOwsaveassa5h% 24800SYS"Wimp_CreateWindow",,wsaveassa6%TOwsaveassa6h% 24810SYS"Wimp_CreateWindow",,wsaveassong%TOwsaveassongh% 24820SYS"Wimp_CreateWindow",,wsavesongmo%TOwsavesongmoh% 24830SYS"Wimp_CreateWindow",,wsaveasmo%TOwsaveasmoh% 24840SYS"Wimp_CreateWindow",,wabout%TOwabouth% 24850SYS"Wimp_CreateWindow",,wkeyboard%TOwkeyboardh% 24860SYS"Wimp_CreateWindow",,wwork%TOwworkh% 24870SYS"Wimp_CreateWindow",,winfo%TOwinfoh% 24880SYS"Wimp_CreateWindow",,wecho%TOwechoh% 24890SYS"Wimp_CreateWindow",,wfade%TOwfadeh% 24900SYS"Wimp_CreateWindow",,wpos%TOwposh% 24910SYS"Wimp_CreateWindow",,wfft%TOwffth% 24920SYS"Wimp_CreateWindow",,wsong%TOwsongh% 24930SYS"Wimp_CreateWindow",,wsongpane%TOwsongpaneh% 24940PROCMenus 24950DIM bicon% 32 24960bicon%!0=-1 24970bicon%!4=0 24980bicon%!8=0 24990bicon%!12=68 25000bicon%!16=68 25010bicon%!20=%0011000000011010 25020$(bicon%+24)="!sfxed" 25030SYS"Wimp_CreateIcon",,bicon%TObiconh% 25040PROCAssem 25050DIM dragb% 256 25060DIM pollb% 256 25070DIM polledb% 256 25080*VOLUME 127 25090SYS"XSound_Configure",0,0,0,0,0TO,,,T% 25100DIM logtable% 256 25110!logtab=logtable% 25120FORS%=0TO255 25130 logtable%?S%=?((T%!8)+(S%<<5)) 25140NEXTS% 25150DIM lintable% 256 25160!lintab=lintable% 25170FORS%=0TO127 25180 lintable%?(S%*2)=INT((0.5+267.33*2^(S%/16))/512) 25190 lintable%?(S%*2+1)=-lintable%?(S%*2) 25200NEXTS% 25210samplesaved%=-1 25220filetoload$="":filetoload2$="" 25230savedata%=-1 25240savedt%=-1 25250savetype%=-1 25260ss%=-1 25270oldbut%=0:lastmenu%=-1:lastmx%=-1:lastmy%=-1 25280dragtype%=-1 25290playtype%=0 25300maxx%=0 25310more%=0 25320stype%=0 25330releasek%=-1 25340multiplek%=-1 25350okt%=1 25360pdisphd%=0 25370pitch%=48 25380spitch%=&1000 25390ospitch%=&1000 25400SYS"XSound_Configure",0,0,pitch%,0,0 25410buflen%=&20000 25420songbuflen%=&1000 25430songrep%=0 25440VOICES4 25450VOICE2,"SFXMVoice" 25460VOICE3,"SFXMVoice" 25470VOICE4,"SFXMVoice" 25480SYS"SFXMP_Enable" 25490SYS"XOS_Module",6,,,songbuflen%+32TO,,songstart%;v% 25500IF v%AND1 THEN 25510 songstart%=-1 25520 PROCReportErr("Can't claim sample memory.") 25530 PROCQuit 25540ENDIF 25550SYS"XOS_Module",6,,,buflen%TO,,bufstart%;v% 25560IF v%AND1 THEN 25570 bufstart%=-1 25580 PROCReportErr("Can't claim sample memory.") 25590 PROCQuit 25600ENDIF 25610PROCRestart 25620PROCSetExtent 25630SYS"Hourglass_Off" 25640ENDPROC 25650 25660DEFPROCRestart 25670SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 25680startsample%=bufstart% 25690samplelen%=1 25700clipbstart%=bufstart%+buflen% 25710clipblen%=0 25720displen%=1 25730selectl%=-1:oselectl%=-1:selectr%=-1:oselectr%=-1 25740pselectl%=-1:pselectr%=-1 25750playp%=-1 25760loopl%=0:loopr%=1024 25770oloopl%=0:oloopr%=1024 25780ploopl%=0:ploopr%=samplelen% 25790sploopl%=ploopl%:sploopr%=ploopr% 25800startsample%?0=0 25810startsample%?1=0 25820pos%=0:oldpos%=-1 25830zoomsl%=0:zoomsr%=samplelen% 25840PROCDrawPos 25850PROCClearSong 25860ENDPROC 25870 25880DEFPROCClearSong 25890SYS"SFXMP_Stop",1:SYS"SFXMP_Stop",2:SYS"SFXMP_Stop",3 25900songlen%=0 25910currsect%=0 25920temp%!0=wsongpaneh% 25930temp%!4=5 25940SYS"Wimp_GetIconState",,temp% 25950$(temp%!28)="1" 25960temp%!4=6 25970SYS"Wimp_GetIconState",,temp% 25980$(temp%!28)="<Untitled>" 25990temp%!4=7 26000SYS"Wimp_GetIconState",,temp% 26010$(temp%!28)="1" 26020temp%!4=8 26030SYS"Wimp_GetIconState",,temp% 26040$(temp%!28)="4096" 26050temp%!4=9 26060SYS"Wimp_GetIconState",,temp% 26070$(temp%!28)="255" 26080PROCSetSongExtent 26090PROCRdSong 26100PROCRdSongPane 26110ENDPROC 26120 26130DEFPROCModTitle(ss%) 26140LOCAL ti$ 26150IF ss%=samplesaved% THEN ENDPROC 26160ti$=$(wwork%!72) 26170IF INSTR(ti$," ")<>0 THEN ti$=LEFT$(ti$,INSTR(ti$," ")-1) 26180IF ss%=0 THEN ti$=ti$+" *" 26190$(wwork%!72)=ti$ 26200temp%!0=wworkh% 26210SYS"Wimp_GetWindowOutline",,temp% 26220SYS"Wimp_ForceRedraw",-1,temp%!4,temp%!16-40,temp%!12,temp%!16 26230samplesaved%=ss% 26240ENDPROC 26250 26260DEFPROCLoadTemp(RETURN start%,name$) 26270$tname%=name$ 26280SYS"Wimp_LoadTemplate",,start%,icbufn%,icbuf%+4000,-1,tname%,0TO,start%,icbufn%,,,,next% 26290IF next%=0 THEN SYS"Wimp_CloseTemplate":ERROR 0,"Template "+name$+" not found" 26300ENDPROC 26310 26320DEFPROCReportErr(a$) 26330temp2%!0=0 26340$(temp2%+4)=a$ 26350SYS"Wimp_ReportError",temp2%,1,"SFXED" 26360ENDPROC 26370 26380DEFFNConfirm(a$) 26390temp2%!0=0 26400$(temp2%+4)=a$ 26410SYS"Wimp_ReportError",temp2%,%10011,"Confirm"TO,A% 26420=A% 26430 26440DEFFNinterr(a$) 26450temp2%!0=0 26460$(temp2%+4)=a$ 26470SYS"Wimp_ReportError",temp2%,%10011,"SFXED Internal Error."TO,A% 26480=A% 26490 26500REM titlestring, width in chars. 26510DEFFNMenuHead(t$,w%) 26520LOCAL a% 26530a%=Menus%+MenuPtr% 26540$a%=t$ 26550a%?12=7 26560a%?13=2 26570a%?14=7 26580a%?15=0 26590a%!16=w%*16 26600a%!20=44 26610a%!24=0 26620MenuPtr%+=28 26630=a% 26640 26650REM itemtext, flags, indirected, val. string, max. length 26660DEFPROCAddItem(i$,f%,i%,v$,ml%) 26670LOCAL a% 26680a%=Menus%+MenuPtr% 26690IF (LEN(i$)>11)AND(i%=0) THEN i%=-1:ml%=LEN(i$)+1 26700a%!0=f%AND255 26710IF f%AND 256 THEN a%!8=%00000111010000011001000000010001 ELSE a%!8=%00000111000000011001000000010001 26720a%!4=-1 26730IF i% THEN 26740 a%!8+=256 26750 $(MenuData%+MenuDataPtr%)=i$ 26760 a%!12=MenuData%+MenuDataPtr% 26770 MenuDataPtr%+=LEN(i$)+1 26780 $(MenuData%+MenuDataPtr%)=v$ 26790 a%!16=MenuData%+MenuDataPtr% 26800 MenuDataPtr%+=LEN(v$)+1 26810 a%!20=ml% 26820ELSE 26830 $(a%+12)=i$ 26840ENDIF 26850MenuPtr%+=24 26860ENDPROC 26870 26880REM menu, item, submenupointer 26890DEFPROCAddSubMenu(m%,i%,p%) 26900m%!(28+24*i%+4)=p% 26910ENDPROC 26920 26930DEFPROCMenus 26940DIM Menus% 4000 26950DIM MenuData% 2000 26960MenuPtr%=0 26970MenuDataPtr%=0 26980 26990iconmenu%=FNMenuHead("SFXED",6) 27000PROCAddItem("Info",0,0,"",0) 27010PROCAddItem("Quit",128,0,"",0) 27020PROCAddSubMenu(iconmenu%,0,wabouth%) 27030 27040workmenu%=FNMenuHead("SFXED",8) 27050PROCAddItem("Misc",0,0,"",0) 27060PROCAddItem("Save",0,0,"",0) 27070PROCAddItem("Edit",0,0,"",0) 27080PROCAddItem("Select",0,0,"",0) 27090PROCAddItem("Zoom",0,0,"",0) 27100PROCAddItem("Loop",0,0,"",0) 27110PROCAddItem("Goodies",0,0,"",0) 27120PROCAddItem("Song",128,0,"",0) 27130miscmenu%=FNMenuHead("Misc",12) 27140PROCAddItem("Info",8,0,"",0) 27150PROCAddItem("Sample Type",0,0,"",0) 27160PROCAddItem("Set Buffer",0,0,"",0) 27170PROCAddItem("Restart",128,0,"",0) 27180typemenu%=FNMenuHead("Sample Type",17) 27190PROCAddItem("Logarithmic",0,0,"",0) 27200PROCAddItem("Signed Lineair",1,0,"",0) 27210PROCAddItem("Unsigned Lineair",128,0,"",0) 27220mbuflen%=FNMenuHead("Length (K)",11) 27230PROCAddItem("128",128+4,-1,"A0-9",5) 27240savemenu1%=FNMenuHead("Save",10) 27250PROCAddItem("All",8,0,"",0) 27260PROCAddItem("Selected",8,0,"",0) 27270PROCAddItem("Clipboard",128+8,0,"",0) 27280savemenu2%=FNMenuHead(" ",12) 27290PROCAddItem("Tracker",256+8,0,"",0) 27300PROCAddItem("Tracker_NH",256+8,0,"",0) 27310PROCAddItem("Armadeus",256+8,0,"",0) 27320PROCAddItem("DSEdit",256+8,0,"",0) 27330PROCAddItem("EMR",256+8,0,"",0) 27340PROCAddItem("Raw",256+8,0,"",0) 27350PROCAddItem("Module",256+136,0,"",0) 27360editmenu%=FNMenuHead("Edit",11) 27370PROCAddItem("Cut ^X",0,0,"",0) 27380PROCAddItem("Copy ^C",0,0,"",0) 27390PROCAddItem("Paste ^V",0,0,"",0) 27400PROCAddItem("Delete ^D",0,0,"",0) 27410PROCAddItem("Delete*",0,0,"",0) 27420PROCAddItem("DeleteL",0,0,"",0) 27430PROCAddItem("DeleteR",128,0,"",0) 27440selectmenu%=FNMenuHead("Select",10) 27450PROCAddItem("All ^A",0,0,"",0) 27460PROCAddItem("Loop",0,0,"",0) 27470PROCAddItem("Left",0,0,"",0) 27480PROCAddItem("Right",0,0,"",0) 27490PROCAddItem("Window",0,0,"",0) 27500PROCAddItem("Clear ^Z",128,0,"",0) 27510zoommenu%=FNMenuHead("Zoom",12) 27520PROCAddItem("All ^Q",0,0,"",0) 27530PROCAddItem("Out ^W",0,0,"",0) 27540PROCAddItem("Loop",0,0,"",0) 27550PROCAddItem("Selected ^S",0,0,"",0) 27560PROCAddItem("Remember ^T",0,0,"",0) 27570PROCAddItem("Recall ^R",128,0,"",0) 27580loopmenu%=FNMenuHead("Loop",9) 27590PROCAddItem("All",0,0,"",0) 27600PROCAddItem("Window",0,0,"",0) 27610PROCAddItem("Selected",0,0,"",0) 27620PROCAddItem("Half",0,0,"",0) 27630PROCAddItem("Double",0,0,"",0) 27640PROCAddItem("Remember",0,0,"",0) 27650PROCAddItem("Recall",128,0,"",0) 27660goodiesmenu%=FNMenuHead("Goodies",12) 27670PROCAddItem("Signed",0,0,"",0) 27680PROCAddItem("Lin->Log",0,0,"",0) 27690PROCAddItem("Log->Lin",0,0,"",0) 27700PROCAddItem("Reverse",0,0,"",0) 27710PROCAddItem("Low Pass",0,0,"",0) 27720PROCAddItem("High Pass",0,0,"",0) 27730PROCAddItem("Amplify",0,0,"",0) 27740PROCAddItem("Echo/Reverb",0,0,"",0) 27750PROCAddItem("Fade In/Out",0,0,"",0) 27760PROCAddItem("Stretch",0,0,"",0) 27770PROCAddItem("Silence",0,0,"",0) 27780PROCAddItem("FFT",0,0,"",0) 27790PROCAddItem("Add Clipb.",128,0,"",0) 27800mfiltlo%=FNMenuHead("Low Pass",10) 27810PROCAddItem("32",128+4,-1,"A0-9",4) 27820mfilthi%=FNMenuHead("High Pass",10) 27830PROCAddItem("224",128+4,-1,"A0-9",4) 27840mscamp%=FNMenuHead("Volume %",10) 27850PROCAddItem("100",128+4,-1,"A0-9",5) 27860mnewlen%=FNMenuHead("Length %",10) 27870PROCAddItem("100",128+4,-1,"A0-9",5) 27880mfftamp%=FNMenuHead("Scale",10) 27890PROCAddItem("256",128+4,-1,"A0-9",6) 27900songmenu%=FNMenuHead("Song",12) 27910PROCAddItem("Play",0,0,"",0) 27920PROCAddItem("Show",0,0,"",0) 27930PROCAddItem("Save",256+8,0,"",0) 27940PROCAddItem("Save Module",256+8,0,"",0) 27950PROCAddItem("Clear",0,0,"",0) 27960PROCAddItem("Repeat",128,0,"",0) 27970PROCAddSubMenu(songmenu%,2,wsaveassongh%) 27980PROCAddSubMenu(songmenu%,3,wsavesongmoh%) 27990PROCAddSubMenu(workmenu%,0,miscmenu%) 28000PROCAddSubMenu(workmenu%,1,savemenu1%) 28010PROCAddSubMenu(workmenu%,2,editmenu%) 28020PROCAddSubMenu(workmenu%,3,selectmenu%) 28030PROCAddSubMenu(workmenu%,4,zoommenu%) 28040PROCAddSubMenu(workmenu%,5,loopmenu%) 28050PROCAddSubMenu(workmenu%,6,goodiesmenu%) 28060PROCAddSubMenu(workmenu%,7,songmenu%) 28070PROCAddSubMenu(miscmenu%,0,winfoh%) 28080PROCAddSubMenu(miscmenu%,1,typemenu%) 28090PROCAddSubMenu(miscmenu%,2,mbuflen%) 28100PROCAddSubMenu(savemenu1%,0,savemenu2%) 28110PROCAddSubMenu(savemenu1%,1,savemenu2%) 28120PROCAddSubMenu(savemenu1%,2,savemenu2%) 28130PROCAddSubMenu(savemenu2%,0,wsaveassa1h%) 28140PROCAddSubMenu(savemenu2%,1,wsaveassa2h%) 28150PROCAddSubMenu(savemenu2%,2,wsaveassa3h%) 28160PROCAddSubMenu(savemenu2%,3,wsaveassa4h%) 28170PROCAddSubMenu(savemenu2%,4,wsaveassa5h%) 28180PROCAddSubMenu(savemenu2%,5,wsaveassa6h%) 28190PROCAddSubMenu(savemenu2%,6,wsaveasmoh%) 28200PROCAddSubMenu(goodiesmenu%,4,mfiltlo%) 28210PROCAddSubMenu(goodiesmenu%,5,mfilthi%) 28220PROCAddSubMenu(goodiesmenu%,6,mscamp%) 28230PROCAddSubMenu(goodiesmenu%,7,wechoh%) 28240PROCAddSubMenu(goodiesmenu%,8,wfadeh%) 28250PROCAddSubMenu(goodiesmenu%,9,mnewlen%) 28260PROCAddSubMenu(goodiesmenu%,11,mfftamp%) 28270 28280sectmenu%=FNMenuHead(" ",15) 28290PROCAddItem("Insert Loop",0,0,"",0) 28300PROCAddItem("Append Loop",0,0,"",0) 28310PROCAddItem("Overwrite Loop",0,0,"",0) 28320PROCAddItem("Delete Loop",0,0,"",0) 28330PROCAddItem("Play to End",0,0,"",0) 28340PROCAddItem("Play Song",128,0,"",0) 28350ENDPROC 28360 28370DEFPROCAssem 28380DIM code% 5000 28390FOR pass%=0TO2STEP2 28400P%=code% 28410[ opt pass% 28420.redrwk 28430stmfd r13!,{r0-r12,r14} 28440ldmfd r13,{r6-r12} 28450sub r5,r8,r7 28460add r0,r6,r5,asr #12 28470cmp r0,r12 28480movmi r0,#&80 28490bmi skipfr 28500ldrb r0,[r6,r5,asr #12] 28510cmp r11,#0 28520eoreq r0,r0,#&80 28530cmp r11,#2 28540bne P%+16 28550movs r0,r0,lsr #1 28560rsbcs r0,r0,#0 28570add r0,r0,#128 28580.skipfr 28590add r2,r0,r10 28600sub r1,r9,#2 28610mov r0,#4 28620swi "OS_Plot" 28630mov r12,#512 28640add r12,r12,#1 28650add r5,r5,r7 28660.drawloop 28670ldrb r0,[r6,r5,asr #12] 28680cmp r11,#0 28690eoreq r0,r0,#&80 28700cmp r11,#2 28710bne P%+16 28720movs r0,r0,lsr #1 28730rsbcs r0,r0,#0 28740add r0,r0,#128 28750add r2,r0,r10 28760mov r1,r9 28770mov r0,#5 28780swi "OS_Plot" 28790 28800add r9,r9,#2 28810add r5,r5,r7 28820subs r12,r12,#1 28830bne drawloop 28840 28850ldmfd r13!,{r0-r12,pc} 28860 28870.fillmem 28880stmfd r13!,{r0-r12,r14} 28890cmp r0,r1 28900movhi r3,r0 28910movhi r0,r1 28920movhi r1,r3 28930.fillup 28940cmp r0,r1 28950ldmeqfd r13!,{r0-r12,pc} 28960strb r2,[r0],#1 28970b fillup 28980 28990.copymem 29000stmfd r13!,{r0-r12,r14} 29010cmp r0,r1 29020bhi copypl 29030add r0,r0,r2 29040add r1,r1,r2 29050cmp r2,#0 29060.cpymlp 29070ldmeqfd r13!,{r0-r12,pc} 29080ldrb r3,[r0,#-1]! 29090strb r3,[r1,#-1]! 29100subs r2,r2,#1 29110b cpymlp 29120.copypl 29130cmp r2,#0 29140.cpyplp 29150ldmeqfd r13!,{r0-r12,pc} 29160ldrb r3,[r0],#1 29170strb r3,[r1],#1 29180subs r2,r2,#1 29190b cpyplp 29200 29210.signed 29220stmfd r13!,{r0-r12,r14} 29230.signlp 29240cmp r0,r1 29250ldmhsfd r13!,{r0-r12,pc} 29260ldrb r2,[r0] 29270eor r2,r2,#&80 29280strb r2,[r0],#1 29290b signlp 29300 29310 29320.linlog 29330stmfd r13!,{r0-r12,r14} 29340ldr r4,logtab 29350.linllp 29360cmp r0,r1 29370ldmhsfd r13!,{r0-r12,pc} 29380ldrb r3,[r0] 29390cmp r2,#1 29400eoreq r3,r3,#&80 29410ldrb r3,[r4,r3] 29420strb r3,[r0],#1 29430b linllp 29440 29450 29460.loglin 29470stmfd r13!,{r0-r12,r14} 29480ldr r4,lintab 29490.logllp 29500cmp r0,r1 29510ldmhsfd r13!,{r0-r12,pc} 29520ldrb r3,[r0] 29530ldr r3,[r4,r3] 29540strb r3,[r0],#1 29550b logllp 29560 29570.logtab 29580equd 0 29590.lintab 29600equd 0 29610 29620.reverse 29630stmfd r13!,{r0-r12,r14} 29640.revlup 29650cmp r0,r1 29660ldmhsfd r13!,{r0-r12,pc} 29670ldrb r2,[r0] 29680ldrb r3,[r1,#-1] 29690strb r3,[r0],#1 29700strb r2,[r1,#-1]! 29710b revlup 29720 29730.filtlo 29740stmfd r13!,{r0-r12,r14} 29750.fltllp 29760cmp r0,r1 29770ldmhsfd r13!,{r0-r12,pc} 29780ldrb r5,[r0] 29790cmp r3,#1 29800eoreq r5,r5,#&80 29810mov r5,r5,lsl #24 29820mov r5,r5,asr #24 29830sub r5,r4,r5,lsl #8 29840mul r5,r2,r5 29850sub r4,r4,r5,asr #12 29860mov r5,r4,asr #8 29870cmp r5,#127 29880movpl r5,#127 29890cmn r5,#127 29900movmi r5,#128 29910cmp r3,#1 29920eoreq r5,r5,#&80 29930strb r5,[r0],#1 29940b fltllp 29950 29960.filthi 29970stmfd r13!,{r0-r12,r14} 29980.flthlp 29990cmp r0,r1 30000ldmhsfd r13!,{r0-r12,pc} 30010ldrb r5,[r0] 30020cmp r3,#1 30030eoreq r5,r5,#&80 30040mov r5,r5,lsl #24 30050mov r5,r5,asr #24 30060mov r6,r5,lsl #8 30070sub r5,r4,r5,lsl #8 30080mul r5,r2,r5 30090sub r4,r4,r5,asr #12 30100sub r5,r6,r4 30110mov r5,r5,asr #8 30120cmp r5,#127 30130movpl r5,#127 30140cmn r5,#127 30150movmi r5,#128 30160cmp r3,#1 30170eoreq r5,r5,#&80 30180strb r5,[r0],#1 30190b flthlp 30200 30210.scamp 30220stmfd r13!,{r0-r12,r14} 30230.scmplp 30240cmp r0,r1 30250ldmhsfd r13!,{r0-r12,pc} 30260ldrb r5,[r0] 30270cmp r3,#1 30280eoreq r5,r5,#&80 30290mov r5,r5,lsl #24 30300mov r5,r5,asr #24 30310mul r5,r2,r5 30320mov r5,r5,asr #12 30330cmp r5,#127 30340movpl r5,#127 30350cmn r5,#127 30360movmi r5,#128 30370cmp r3,#1 30380eoreq r5,r5,#&80 30390strb r5,[r0],#1 30400b scmplp 30410 30420.echo 30430stmfd r13!,{r0-r12,r14} 30440cmp r4,#0 30450beq revrb 30460.echolp 30470cmp r0,r1 30480ldmhsfd r13!,{r0-r12,pc} 30490ldrb r6,[r0] 30500ldrb r7,[r0,r3] 30510cmp r5,#1 30520eoreq r6,r6,#&80 30530eoreq r7,r7,#&80 30540mov r6,r6,lsl #24 30550mov r6,r6,asr #24 30560mov r7,r7,lsl #24 30570mov r7,r7,asr #24 30580mul r6,r2,r6 30590add r7,r7,r6,asr #8 30600mov r6,r6,asr #8 30610cmp r6,#127 30620movpl r6,#127 30630cmn r6,#127 30640movmi r6,#128 30650cmp r7,#127 30660movpl r7,#127 30670cmn r7,#127 30680movmi r7,#128 30690cmp r5,#1 30700eoreq r6,r6,#&80 30710eoreq r7,r7,#&80 30720strb r7,[r0,r3] 30730strb r6,[r0],#1 30740b echolp 30750.revrb 30760mov r6,r1 30770add r1,r0,r3 30780sub r0,r6,#1 30790.revblp 30800cmp r0,r1 30810ldmlofd r13!,{r0-r12,pc} 30820ldrb r6,[r0] 30830ldrb r7,[r0,-r3] 30840cmp r5,#1 30850eoreq r6,r6,#&80 30860eoreq r7,r7,#&80 30870mov r6,r6,lsl #24 30880mov r6,r6,asr #24 30890mov r7,r7,lsl #24 30900mov r7,r7,asr #24 30910mul r7,r2,r7 30920add r6,r6,r7,asr #8 30930cmp r6,#127 30940movpl r6,#127 30950cmn r6,#127 30960movmi r6,#128 30970cmp r5,#1 30980eoreq r6,r6,#&80 30990strb r6,[r0],#-1 31000b revblp 31010 31020.nwlengths 31030stmfd r13!,{r0-r12,r14} 31040mov r3,#0 31050mov r4,r0 31060.nwlslp 31070cmp r0,r1 31080ldmhsfd r13!,{r0-r12,pc} 31090ldrb r5,[r0] 31100strb r5,[r4] 31110add r4,r4,#1 31120add r3,r3,r2 31130mov r5,r3,lsr #24 31140bic r3,r3,#&ff000000 31150add r0,r0,r5 31160b nwlslp 31170 31180.nwlengthb 31190stmfd r13!,{r0-r12,r14} 31200mov r4,#0 31210.nwlblp 31220cmp r3,r0 31230ldmlofd r13!,{r0-r12,pc} 31240ldrb r5,[r1] 31250strb r5,[r3] 31260sub r3,r3,#1 31270add r4,r4,r2 31280mov r5,r4,lsr #24 31290bic r4,r4,#&ff000000 31300sub r1,r1,r5 31310b nwlblp 31320 31330.fade 31340stmfd r13!,{r0-r12,r14} 31350.fadelp 31360cmp r0,r1 31370ldmhsfd r13!,{r0-r12,pc} 31380ldrb r6,[r0] 31390cmp r5,#1 31400eoreq r6,r6,#&80 31410mov r6,r6,lsl #24 31420mov r6,r6,asr #24 31430mov r7,r2,asr #20 31440mul r6,r7,r6 31450mov r6,r6,asr #8 31460cmp r6,#127 31470movpl r6,#127 31480cmn r6,#127 31490movmi r6,#128 31500cmp r5,#1 31510eoreq r6,r6,#&80 31520strb r6,[r0],#1 31530add r2,r2,r4 31540b fadelp 31550 31560.addclip 31570stmfd r13!,{r0-r12,r14} 31580.addcll 31590cmp r2,#0 31600ldmlefd r13!,{r0-r12,pc} 31610ldrb r4,[r0] 31620ldrb r5,[r1],#1 31630cmp r3,#1 31640eoreq r4,r4,#&80 31650eoreq r5,r5,#&80 31660mov r4,r4,lsl #24 31670mov r4,r4,asr #24 31680mov r5,r5,lsl #24 31690mov r5,r5,asr #24 31700add r4,r4,r5 31710mov r4,r4,asr #1 31720eoreq r4,r4,#&80 31730strb r4,[r0],#1 31740sub r2,r2,#1 31750b addcll 31760.endcode 31770] 31780NEXTpass% 31790ENDPROC
� >RAM:$.!SFXED.!RunImage � >Written by G. Vermeulen � � �IntError:� �Tr@ ( �Init 2� </ ș"Wimp_Poll",0,pollb% � reason%,polledb% F Ȏ reason% � P � 0:�Null_Reason Z � 1:�Redraw_Window d � 2:�Open_Window n � 3:�Close_Window x � 6:�Mouse_Click � � 7:�User_Drag_Box � � 8:�Key_Pressed � � 9:�Menu_Select � � 17,18,19:�User_Message � � �� � �� � ���IntError �� � �� � � � �ph\ �7A%=�interr(�$+" at line "+Þ+". Continue program?") �� A%=2 � �Quit � ��ScrToWork "temp%!0=wworkh% ,"ș"Wimp_GetWindowState",,temp% 6#ș"Wimp_GetPointerInfo",,temp2% @$workx%=temp2%!0-temp%!4+temp%!20 J� workx%<0 � workx%=0 T!� workx%>maxx% � workx%=maxx% ^� h rݤWorkToPtr(a%) |/� a%=-1 � =-1 � =�(0.5+samplelen%*a%/maxx%) � �ݤPtrToWork(a%) �/� a%=-1 � =-1 � =�(0.5+maxx%*a%/samplelen%) � ���Null_Reason ��PutPtrs ��PlotPP ��CheckScroll �Ȏ dragtype% � � � 1:�DragASelL � � 2:�DragASelR � � 3:�DragLoopL � � 4:�DragLoopR � � & ��PutPtrs 0�ș"SFXMP_GetPtrs"�A%:A%!0=startsample%:A%!4=samplelen%:A%!8=ploopl%:A%!12=ploopr%:A%!16=pselectl%:A%!20=pselectr%:A%!24=playtype%:A%!28=stype%:A%!32=releasek%:A%!36=multiplek%:A%!40=okt% :$ș"Wimp_GetCaretPosition",,temp% D@� temp%!0=wkeyboardh% � ș"SFXMP_Enable" � ș"SFXMP_Disable" N� X b��PlotPP l� playp%<>-1 � �PlotPPtr vdș"SFXMP_GetBlock"�A%:� A%!40<>0 � playp%=((A%!32)>>12)+A%!36-startsample%:�PlotPPtr � playp%=-1 �� � ���CheckScroll �Rtemp%!0=wworkh%:ș"Wimp_GetWindowState",,temp%:ș"Wimp_GetPointerInfo",,temp2% �,� (temp2%!12=wworkh%) � (temp2%!16=-1) � �) � �(temp%!4-temp2%!0)<64 � �ScrollL �* � �(temp%!12-temp2%!0)<64 � �ScrollR �0 A%=temp2%!0+temp%!20-temp%!4:� A%<0 � A%=0 �" pos%=�WorkToPtr(A%):�DrawPos �� �� � � ��DrawPos � pos%<>oldpos% � ; temp%!0=wposh%:temp%!4=0:ș"Wimp_GetIconState",,temp% A � pdisphd% � $(temp%!28)="&"+�~(pos%) � $(temp%!28)=�(pos%) D temp%!8=0:temp%!12=0:ș"Wimp_SetIconState",,temp%:oldpos%=pos% *� 4� > H ��ScrollL R diff%=64-�(temp%!4-temp2%!0) \os%=temp%!20 fos%=os%-diff%*4 p� os%<0 � os%=0 z%� os%>maxx%-1024 � os%=maxx%-1024 �temp%!20=os% � &fffffffe �ș"Wimp_OpenWindow",,temp% �� � � ��ScrollR �!diff%=64-�(temp%!12-temp2%!0) �os%=temp%!20 �os%=os%+diff%*4 �� os%<0 � os%=0 �%� os%>maxx%-1024 � os%=maxx%-1024 �temp%!20=os% � &fffffffe �ș"Wimp_OpenWindow",,temp% �� ��DragASelL �ScrToWork:selectl%=workx% $:� selectl%>selectr% � Ȕ selectl%,selectr%:dragtype%=2 .�pselectl%=�WorkToPtr(selectl%):pselectr%=�WorkToPtr(selectr%):selectl%=�PtrToWork(pselectl%):selectr%=�PtrToWork(pselectr%):�UpdateSelect 8� B L��DragASelR V�ScrToWork:selectr%=workx% `:� selectl%>selectr% � Ȕ selectl%,selectr%:dragtype%=1 j�pselectl%=�WorkToPtr(selectl%):pselectr%=�WorkToPtr(selectr%):selectl%=�PtrToWork(pselectl%):selectr%=�PtrToWork(pselectr%):�UpdateSelect t� ~ ���DragLoopL �gș"OS_Byte",202,0,255�,sh%:dlp%=ploopr%-ploopl%:�ScrToWork:loopl%=workx%:ploopl%=�WorkToPtr(loopl%) � � sh%�8 � � ploopr%=ploopl%+dlp% �G � ploopr%>samplelen% � ploopr%=samplelen%:ploopl%=samplelen%-dlp% �� �9loopl%=�PtrToWork(ploopl%):loopr%=�PtrToWork(ploopr%) �5� ploopl%>ploopr% � ploopr%=ploopl%:loopr%=loopl% �6� loopl%<>oloopl% � loopr%<>oloopr% � �UpdateLoopP �� � ���DragLoopR gș"OS_Byte",202,0,255�,sh%:dlp%=ploopr%-ploopl%:�ScrToWork:loopr%=workx%:ploopr%=�WorkToPtr(loopr%) � sh%�8 � ploopl%=ploopr%-dlp% * � ploopl%<0 � ploopl%=0:ploopr%=dlp% (� 29loopl%=�PtrToWork(ploopl%):loopr%=�PtrToWork(ploopr%) <5� ploopr%<ploopl% � ploopl%=ploopr%:loopl%=loopr% F6� loopl%<>oloopl% � loopr%<>oloopr% � �UpdateLoopP P� Z d��Redraw_Window n)ș"Wimp_RedrawWindow",,polledb%�more% xȎ polledb%!0 � � � wworkh%:�RedrawWork � � wsongh%:�RedrawSong � :�JustRedraw �� �� � ���RedrawWork � lh%=32 �mi%=polledb%!4 �ma%=polledb%!12 �y%=polledb%!8 �'sl%=polledb%!4-polledb%!20+selectl% �'sr%=polledb%!4-polledb%!20+selectr% %ll%=polledb%!4-polledb%!20+loopl% %lr%=polledb%!4-polledb%!20+loopr% llp%=�PtrToWork(playp%) "%wllp%=polledb%!4-polledb%!20+llp% , dr%=-1 6ldr%=-1 @rdr%=-1 Jdrp%=-1 T-� sl%<polledb%!4 � sr%<polledb%!4 � dr%=0 ^/� sl%>polledb%!12 � sr%>polledb%!12 � dr%=0 h+� sl%<polledb%!4 � dr% � sl%=polledb%!4 r-� sr%>polledb%!12 � dr% � sr%=polledb%!12 |5� ll%<polledb%!4-32 � ll%>polledb%!12+32 � ldr%=0 �5� lr%<polledb%!4-32 � lr%>polledb%!12+32 � rdr%=0 �7� wllp%<polledb%!4-4 � wllp%>polledb%!12+4 � drp%=0 � �2A%=startsample%+samplelen%*(polledb%!20)/maxx% �B%=8*displen% �<C%=4096*(startsample%+samplelen%*(polledb%!20)/maxx%-A%) �D%=polledb%!4 �E%=polledb%!8 � F%=stype% �G%=startsample% � �ȕ more% � ș"Wimp_SetColour",1 ! � mi%,y%+lh%*1,ma%,y%+lh%*1 ! � mi%,y%+lh%*2,ma%,y%+lh%*2 ! � mi%,y%+lh%*3,ma%,y%+lh%*3 &! � mi%,y%+lh%*5,ma%,y%+lh%*5 0! � mi%,y%+lh%*6,ma%,y%+lh%*6 :! � mi%,y%+lh%*7,ma%,y%+lh%*7 D ș"Wimp_SetColour",3 N! � mi%,y%+lh%*4,ma%,y%+lh%*4 X ș"Wimp_SetColour",7 b! � mi%,y%+lh%*8,ma%,y%+lh%*8 l �redrwk v � ldr% � � �InvCol2 �+ � ll%,polledb%!8,ll%,polledb%!8+256 � � ll%,polledb%!8+260 � � ll%+8,polledb%!8+280 �! � 85,ll%-8,polledb%!8+280 � � � � rdr% � � �InvCol3 �+ � lr%,polledb%!8,lr%,polledb%!8+256 � � lr%,polledb%!8+260 � � lr%+8,polledb%!8+280 �! � 85,lr%-8,polledb%!8+280 � � / � (selectl%<>-1) � (selectr%<>-1) � dr% � �InvCol ( ȓ Ȑ sl%,polledb%!8,sr%-sl%,252 � * � (playp%<>-1) � drp% � 4 �InvCol >/ � wllp%,polledb%!8,wllp%,polledb%!8+288 H � R+ ș"Wimp_GetRectangle",,polledb%�more% \� f� p z��RedrawSong �zx%=polledb%!4-polledb%!20 �"zy%=polledb%!16-polledb%!24-96 �ȕ more% � ș"Wimp_SetColour",3 �- � zx%+74,polledb%!32,zx%+74,polledb%!40 �- � zx%+76,polledb%!32,zx%+76,polledb%!40 �/ � zx%+246,polledb%!32,zx%+246,polledb%!40 �/ � zx%+248,polledb%!32,zx%+248,polledb%!40 �/ � zx%+370,polledb%!32,zx%+370,polledb%!40 �/ � zx%+372,polledb%!32,zx%+372,polledb%!40 �/ � zx%+494,polledb%!32,zx%+494,polledb%!40 �/ � zx%+496,polledb%!32,zx%+496,polledb%!40 � ș"Wimp_SetColour",7 sl%=(zy%-polledb%!40)/36 sr%=1+(zy%-polledb%!32)/36 $ � sl%<0 � sl%=0 . � sr%<0 � sr%=0 8# � sl%>songlen% � sl%=songlen% B# � sr%>songlen% � sr%=songlen% L ȕ sl%<sr% V � zx%+6,zy%-36*sl% ` � �(sl%+1); j � zx%+82,zy%-36*sl% t � $(songstart%+sl%*32); ~ � zx%+254,zy%-36*sl% �$ � �(songstart%!(sl%*32+12)); � � zx%+378,zy%-36*sl% �$ � �(songstart%!(sl%*32+16)); � � zx%+502,zy%-36*sl% �$ � �(songstart%!(sl%*32+20)); � sl%+=1 � � �+ ș"Wimp_GetRectangle",,polledb%�more% �� �� � ���JustRedraw ȕ more% + ș"Wimp_GetRectangle",,polledb%�more% � � ( 2��InvCol <&ș"XOS_ReadModeVariable",-1,3�,,c% FȎ c% � P � 1:�3,1 Z � 3:�3,3 d � 15:�3,7 n � 63:�3,63 Ȝ 0 x :�3,63 �� �� � � ��InvCol2 �&ș"XOS_ReadModeVariable",-1,3�,,c% �Ȏ c% � � � 1:�3,1 � � 3:�3,1 � � 15:�3,10 � � 63:�3,%110011 Ȝ 0 � :�3,63 �� �� ��InvCol3 &ș"XOS_ReadModeVariable",-1,3�,,c% "Ȏ c% � , � 1:�3,1 6 � 3:�3,2 @ � 15:�3,11 J � 63:�3,%111100 Ȝ 0 T :�3,63 ^� h� r |��Open_Window �'� polledb%!0=wworkh% � �Open_Work:� �'� polledb%!0=wsongh% � �Open_Song:� �[� polledb%!0=wposh% � polledb%!0=wworkh%:ș"Wimp_GetWindowState",,polledb%:�Open_Work:� �d� polledb%!0=wsongpaneh% � polledb%!0=wsongpaneh%:ș"Wimp_GetWindowState",,polledb%:�Open_Song:� �!ș"Wimp_OpenWindow",,polledb% �� � ���Open_Work �temp%!0=wposh% �"ș"Wimp_GetWindowState",,temp% �A%=polledb%!28 �polledb%!28=wposh% �!ș"Wimp_OpenWindow",,polledb% %ș"Wimp_GetWindowState",,polledb% temp%!4=polledb%!4 temp%!8=polledb%!8-100 &temp%!12=temp%!4+1024 0temp%!16=temp%!8+56 :temp%!28=A% Dș"Wimp_OpenWindow",,temp% Npolledb%!28=wposh% X!ș"Wimp_OpenWindow",,polledb% b� l v��Open_Song �temp%!0=wsongpaneh% �"ș"Wimp_GetWindowState",,temp% �A%=polledb%!28 �polledb%!28=wsongpaneh% �!ș"Wimp_OpenWindow",,polledb% �%ș"Wimp_GetWindowState",,polledb% �temp%!4=polledb%!4 �temp%!12=polledb%!12 �temp%!16=polledb%!16 �temp%!8=polledb%!16-84 �temp%!20=polledb%!20 �temp%!28=A% �ș"Wimp_OpenWindow",,temp% polledb%!28=wsongpaneh% !ș"Wimp_OpenWindow",,polledb% � *��Close_Window 4"ș"Wimp_CloseWindow",,polledb% >K� polledb%!0=wworkh% � polledb%!0=wposh%:ș"Wimp_CloseWindow",,polledb% HP� polledb%!0=wsongh% � polledb%!0=wsongpaneh%:ș"Wimp_CloseWindow",,polledb% R� \ f��Mouse_Click pȎ polledb%!12 � z � wworkh%:�WorkClick � � wechoh%:�EchoClick � � wfadeh%:�FadeClick � � wkeyboardh%:�KeyClick � � wposh%:�PosClick � � wsongh%:�SongClick � � -2:�IconBClick �� �� � ���SongClick �temp%!0=wsongh% �"ș"Wimp_GetWindowState",,temp% �2currsect%=(temp%!16-temp%!24-96-polledb%!4)/36 � currsect%<0 � currsect%=0 -� currsect%>songlen% � currsect%=songlen% R� currsect%=songlen% � $(sectmenu%)="Loop" � $sectmenu%="Loop "+�(currsect%+1) $Ȏ polledb%!8 � .x � 2:lastmx%=polledb%!0-64:lastmy%=polledb%!4+16:lastmenu%=sectmenu%:ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% 8 � 1024:�EditSect B� L� V `��EditSect j� currsect%<songlen% � t temp%!0=wsongpaneh% ~ temp%!4=5 �" ș"Wimp_GetIconState",,temp% � $(temp%!28)=�(currsect%+1) � temp%!4=6 �" ș"Wimp_GetIconState",,temp% �, $(temp%!28)=$(songstart%+currsect%*32) � temp%!4=7 �" ș"Wimp_GetIconState",,temp% �1 $(temp%!28)=�(songstart%!(currsect%*32+12)) � temp%!4=8 �" ș"Wimp_GetIconState",,temp% �1 $(temp%!28)=�(songstart%!(currsect%*32+16)) � temp%!4=9 " ș"Wimp_GetIconState",,temp% 1 $(temp%!28)=�(songstart%!(currsect%*32+20)) * ploopl%=songstart%!(currsect%*32+24) * ploopr%=songstart%!(currsect%*32+28) ( � ploopl%<0 � ploopl%=0 2 � ploopr%<0 � ploopr%=0 </ � ploopl%>samplelen% � ploopl%=samplelen% F/ � ploopr%>samplelen% � ploopr%=samplelen% P loopl%=�PtrToWork(ploopl%) Z loopr%=�PtrToWork(ploopr%) d �UpdateLoopP n �RdSongPane x& ș"Wimp_GetCaretPosition",,temp% �F � (temp%!0=wsongpaneh%)�(temp%!4<>-1) � �SetWIC(temp%!0,temp%!4) � ospitch%=-1 �� �� � ���PosClick �Ȏ polledb%!16 � � � 0:pdisphd%=� pdisphd% � � 8:�PosPAll � � 9:�PosPSel � � 10:�PosPWin � � 12:�PosPStop �� � ��PosPAll "6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 ,ș"SFXMP_GetBlock"�A% 6ș"SFXMP_GetPitch"�B% @ A%+=32 J A%!0=0 TA%!4=startsample% ^A%!8=B% hA%!12=samplelen% rA%!16=stype%<<8 |A%!20=0 �ș"SFXMP_Play",1 �� � � ��PosPSel �6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 �� pselectl%<>-1 � � ș"SFXMP_GetBlock"�A% � ș"SFXMP_GetPitch"�B% � A%+=32 � A%!0=0 �! A%!4=startsample%+pselectl% � A%!8=B% � A%!12=pselectr%-pselectl% A%!16=stype%<<8 A%!20=0 ș"SFXMP_Play",1 &� 0� : D ��PosPWin N6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 Xtemp%!0=wworkh% b"ș"Wimp_GetWindowState",,temp% lB%=�WorkToPtr(temp%!20) v C%=�WorkToPtr(temp%!20+1024) �ș"SFXMP_GetBlock"�A% �ș"SFXMP_GetPitch"�E% � A%+=32 � A%!0=0 �A%!4=startsample%+B% �A%!8=E% �A%!12=C%-B% �A%!16=stype%<<8 �A%!20=0 �ș"SFXMP_Play",1 �� � ���PosPStop 6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 � ݤStrip(fs$) *� f%,a% 4f%=1 >a%=1 Hȕ �fs$,f%)<>"" R1 � �fs$,f%,1)="." � �fs$,f%,1)=":" � a%=f%+1 \ f%+=1 f� p =�fs$,a%) z ���MBString(s%) �ȕ ?s%>31 s%+=1:� � ?s%=13 �� � ���DataSave �� messbk%!4<>taskh% � �( filetoload2$=�Strip($(messbk%+44)) �' $(messbk%+44)="<Wimp$Scrap>"+�(0) � messbk%!0=256 � messbk%!12=messbk%!8 � messbk%!16=2 � messbk%!36=-1 / ș"Wimp_SendMessage",18,messbk%,messbk%!4 � � $ .��GetStartLen 8Ȏ savedata% � B) � 0:ss%=startsample%:sl%=samplelen% LW � 1:� pselectl%<>-1 � ss%=startsample%+pselectl%:sl%=pselectr%-pselectl% � ss%=-1 V' � 2:ss%=clipbstart%:sl%=clipblen% `� j� t ~��KeyClick �Ȏ polledb%!8 � �r � 1:ș"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1:ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 �? � 4:ș"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 �� �Ȏ polledb%!16 � � � 43:playtype%=0 � � 44:playtype%=1 � � 45:playtype%=2 � � 46:playtype%=3 �x � 48:temp%!0=wkeyboardh%:temp%!4=48:ș"Wimp_GetIconState",,temp%:� (temp%!24)�(1<<21) � releasek%=-1 � releasek%=0 �z � 49:temp%!0=wkeyboardh%:temp%!4=49:ș"Wimp_GetIconState",,temp%:� (temp%!24)�(1<<21) � multiplek%=-1 � multiplek%=0 �� � ��WorkClick 9ș"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 (Ȏ polledb%!8 � 2x � 2:lastmx%=polledb%!0-64:lastmy%=polledb%!4+16:lastmenu%=workmenu%:ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% < � 1024:�SelClick F � 256:�AdjClick P � 64:�SelDrag Z � 16:�AdjDrag d� n� x ���SelClick �temp%!0=wworkh% �"ș"Wimp_GetWindowState",,temp% �� polledb%!4-temp%!8<256 � � �SelClick2 �� � ș"OS_Byte",202,0,255�,sh% � dlp%=ploopr%-ploopl% � �ScrToWork � loopl%=workx% � ploopl%=�WorkToPtr(loopl%) � � sh%�8 � � ploopr%=ploopl%+dlp% I � ploopr%>samplelen% � ploopr%=samplelen%:ploopl%=samplelen%-dlp% � loopl%=�PtrToWork(ploopl%) " loopr%=�PtrToWork(ploopr%) ,7 � ploopl%>ploopr% � ploopr%=ploopl%:loopr%=loopl% 6 �UpdateLoopP @� J� T ^��AdjClick htemp%!0=wworkh% r"ș"Wimp_GetWindowState",,temp% |� polledb%!4-temp%!8<256 � � �AdjClick2 �� � ș"OS_Byte",202,0,255�,sh% � dlp%=ploopr%-ploopl% � �ScrToWork � loopr%=workx% � ploopr%=�WorkToPtr(loopr%) � � sh%�8 � � ploopl%=ploopr%-dlp% �, � ploopl%<0 � ploopl%=0:ploopr%=dlp% � � � loopl%=�PtrToWork(ploopl%) � loopr%=�PtrToWork(ploopr%) 7 � ploopr%<ploopl% � ploopl%=ploopr%:loopl%=loopr% �UpdateLoopP � &� 0 : ��SelDrag Dtemp%!0=wworkh% N"ș"Wimp_GetWindowState",,temp% X� polledb%!4-temp%!8<256 � b �SelDrag2 l� v temp%!0=wworkh% �$ ș"Wimp_GetWindowState",,temp% � temp2%!0=wworkh% � temp2%!4=7 � temp2%!8=0 � temp2%!12=0 � temp2%!16=0 � temp2%!20=0 � temp2%!24=temp%!4 � temp2%!28=temp%!8+260 � temp2%!32=temp%!4+1022 � temp2%!36=temp%!8+284 � temp2%!40=-1 � temp2%!44=-1 temp2%!48=-1 temp2%!52=-1 ș"Wimp_DragBox",,temp2% dragtype%=3 *� 4� > H ��AdjDrag Rtemp%!0=wworkh% \"ș"Wimp_GetWindowState",,temp% f� polledb%!4-temp%!8<256 � p �AdjDrag2 z� � temp%!0=wworkh% �$ ș"Wimp_GetWindowState",,temp% � temp2%!0=wworkh% � temp2%!4=7 � temp2%!8=0 � temp2%!12=0 � temp2%!16=0 � temp2%!20=0 � temp2%!24=temp%!4 � temp2%!28=temp%!8+260 � temp2%!32=temp%!4+1022 � temp2%!36=temp%!8+284 � temp2%!40=-1 temp2%!44=-1 temp2%!48=-1 temp2%!52=-1 $ ș"Wimp_DragBox",,temp2% . dragtype%=4 8� B� L V��SelClick2 `�ScrToWork jselectl%=workx% tselectr%=workx% ~"pselectl%=�WorkToPtr(selectl%) �"pselectr%=�WorkToPtr(selectr%) �"selectl%=�PtrToWork(pselectl%) �"selectr%=�PtrToWork(pselectr%) ��UpdateSelect �� � ���AdjClick2 ��ScrToWork �-� �(selectl%-workx%)>�(selectr%-workx%) � � selectr%=workx% �� � selectl%=workx% � A� selectl%=-1 � selectr%=-1 � selectl%=workx%:selectr%=workx% .� selectl%>selectr% � Ȕ selectl%,selectr% "pselectl%=�WorkToPtr(selectl%) ("pselectr%=�WorkToPtr(selectr%) 2"selectl%=�PtrToWork(pselectl%) <"selectr%=�PtrToWork(pselectr%) F�UpdateSelect P� Z d��SelDrag2 ntemp%!0=wworkh% x"ș"Wimp_GetWindowState",,temp% �temp2%!0=wworkh% �temp2%!4=7 �temp2%!8=0 �temp2%!12=0 �temp2%!16=0 �temp2%!20=0 �temp2%!24=temp%!4 �temp2%!28=temp%!8 �temp2%!32=temp%!4+1022 �temp2%!36=temp%!8+252 �temp2%!40=-1 �temp2%!44=-1 �temp2%!48=-1 temp2%!52=-1 ș"Wimp_DragBox",,temp2% dragtype%=1 "�ScrToWork ,!� selectl%=-1 � selectr%=-1 � 6% selectl%=workx%:selectr%=workx% @$ pselectl%=�WorkToPtr(selectl%) J$ pselectr%=�WorkToPtr(selectr%) T$ selectl%=�PtrToWork(pselectl%) ^$ selectr%=�PtrToWork(pselectr%) h� r� | ���AdjDrag2 �temp%!0=wworkh% �"ș"Wimp_GetWindowState",,temp% �temp2%!0=wworkh% �temp2%!4=7 �temp2%!8=0 �temp2%!12=0 �temp2%!16=0 �temp2%!20=0 �temp2%!24=temp%!4 �temp2%!28=temp%!8 �temp2%!32=temp%!4+1022 �temp2%!36=temp%!8+252 temp2%!40=-1 temp2%!44=-1 temp2%!48=-1 &temp2%!52=-1 0ș"Wimp_DragBox",,temp2% :�ScrToWork D!� selectl%=-1 � selectr%=-1 � N% selectl%=workx%:selectr%=workx% X$ pselectl%=�WorkToPtr(selectl%) b$ pselectr%=�WorkToPtr(selectr%) l$ selectl%=�PtrToWork(pselectl%) v$ selectr%=�PtrToWork(pselectr%) �� �-� �(selectl%-workx%)>�(selectr%-workx%) � � dragtype%=2 �� � dragtype%=1 �� �� � ���UpdateSelect �U� oselectl%=-1 � oselectr%=-1 � oselectl%=selectl%:oselectr%=selectr%:�PtSelect:� �q� (selectl%<>oselectl%) � (selectr%<>oselectr%) � �PtSelect:oselectl%=selectl%:oselectr%=selectr%:�PtSelect:� �)� selectl%<>oselectl% � �SetSelectL:� �)� selectr%<>oselectr% � �SetSelectR:� � ��PtSelect polledb%!0=wworkh% *polledb%!8=-288 4polledb%!16=-32 >)� (oselectl%<>-1) � (oselectr%<>-1) � H2 polledb%!4=oselectl%:polledb%!12=oselectr%+2 R+ ș"Wimp_UpdateWindow",,polledb%�more% \ ȕ more% f �InvCol pU ȓ Ȑ polledb%!28,polledb%!32,polledb%!36-polledb%!28,polledb%!40-polledb%!32 z- ș"Wimp_GetRectangle",,polledb%�more% � � �� �� � ���SetSelectL �polledb%!0=wworkh% �polledb%!8=-288 �polledb%!16=-32 �(� (selectl%<>-1) � (oselectl%<>-1) � �r � selectl%<oselectl% � polledb%!4=selectl%:polledb%!12=oselectl% � polledb%!4=oselectl%:polledb%!12=selectl% �+ ș"Wimp_UpdateWindow",,polledb%�more% � ȕ more% � �InvCol U ȓ Ȑ polledb%!28,polledb%!32,polledb%!36-polledb%!28,polledb%!40-polledb%!32 - ș"Wimp_GetRectangle",,polledb%�more% � $ oselectl%=selectl% .� 8� B L��SetSelectR Vpolledb%!0=wworkh% `polledb%!8=-288 jpolledb%!16=-32 t(� (selectr%<>-1) � (oselectr%<>-1) � ~z � selectr%<oselectr% � polledb%!4=selectr%+2:polledb%!12=oselectr%+2 � polledb%!4=oselectr%+2:polledb%!12=selectr%+2 �+ ș"Wimp_UpdateWindow",,polledb%�more% � ȕ more% � �InvCol �U ȓ Ȑ polledb%!28,polledb%!32,polledb%!36-polledb%!28,polledb%!40-polledb%!32 �- ș"Wimp_GetRectangle",,polledb%�more% � � � oselectr%=selectr% �� �� � ���PlotPPtr �0� playp%<0 � playp%>samplelen% � playp%=-1:� llp%=�PtrToWork(playp%) temp%!0=wworkh% "ș"Wimp_GetWindowState",,temp% ll%=temp%!4-temp%!20+llp% (&� ll%>temp%!4-4 � ll%<temp%!12+4 � 2 polledb%!0=wworkh% < polledb%!4=llp% F polledb%!8=-288 P polledb%!12=llp%+2 Z polledb%!16=0 d+ ș"Wimp_UpdateWindow",,polledb%�more% n ȕ more% x �InvCol �+ � ll%,polledb%!8,ll%,polledb%!8+288 �- ș"Wimp_GetRectangle",,polledb%�more% � � �� �� � ���UpdateLoopP �temp%!0=wworkh% �"ș"Wimp_GetWindowState",,temp% �polledb%!0=wworkh% �polledb%!4=temp%!20 �polledb%!8=-288 �polledb%!12=temp%!20+1024 polledb%!16=0 ll%=temp%!4-temp%!20+loopl% !oll%=temp%!4-temp%!20+oloopl% "lr%=temp%!4-temp%!20+loopr% ,!olr%=temp%!4-temp%!20+oloopr% 6ldr%=-1 @oldr%=-1 Jrdr%=-1 Tordr%=-1 ^/� ll%<temp%!4-32 � ll%>temp%!12+32 � ldr%=0 h2� oll%<temp%!4-32 � oll%>temp%!12+32 � oldr%=0 r/� lr%<temp%!4-32 � lr%>temp%!12+32 � rdr%=0 |2� olr%<temp%!4-32 � olr%>temp%!12+32 � ordr%=0 �)ș"Wimp_UpdateWindow",,polledb%�more% �ȕ more% � � ldr% � � �InvCol2 �+ � ll%,polledb%!8,ll%,polledb%!8+256 � � ll%,polledb%!8+260 � � ll%+8,polledb%!8+280 �! � 85,ll%-8,polledb%!8+280 � � � � oldr% � � �InvCol2 �- � oll%,polledb%!8,oll%,polledb%!8+256 � � oll%,polledb%!8+260 � oll%+8,polledb%!8+280 " � 85,oll%-8,polledb%!8+280 � & � rdr% � 0 �InvCol3 :+ � lr%,polledb%!8,lr%,polledb%!8+256 D � lr%,polledb%!8+260 N � lr%+8,polledb%!8+280 X! � 85,lr%-8,polledb%!8+280 b � l � ordr% � v �InvCol3 �- � olr%,polledb%!8,olr%,polledb%!8+256 � � olr%,polledb%!8+260 � � olr%+8,polledb%!8+280 �" � 85,olr%-8,polledb%!8+280 � � �+ ș"Wimp_GetRectangle",,polledb%�more% �� �!oloopl%=loopl%:oloopr%=loopr% ��UpdateSLoop �� � ���UpdateSLoop �� playtype%=1 � ! ș"SFXMP_GetBlock"�A% !` A%=A%+32:A%!4=startsample%+ploopl%:A%!12=ploopr%-ploopl%:A%!20=0:A%!16=(A%!16) � &ffffefff !` A%=A%+32:A%!4=startsample%+ploopl%:A%!12=ploopr%-ploopl%:A%!20=0:A%!16=(A%!16) � &ffffefff ! ` A%=A%+32:A%!4=startsample%+ploopl%:A%!12=ploopr%-ploopl%:A%!20=0:A%!16=(A%!16) � &ffffefff !*� !4� playtype%=3 � !> ș"SFXMP_GetBlock"�A% !HV A%=A%+32:A%!4=startsample%:A%!12=ploopr%:A%!20=ploopl%:A%!16=(A%!16) � &ffffefff !RV A%=A%+32:A%!4=startsample%:A%!12=ploopr%:A%!20=ploopl%:A%!16=(A%!16) � &ffffefff !\V A%=A%+32:A%!4=startsample%:A%!12=ploopr%:A%!20=ploopl%:A%!16=(A%!16) � &ffffefff !f� !p� !z !���IconBClick !�Ȏ polledb%!8 � !� � 1,4:�OpenWork !�n � 2:lastmx%=polledb%!0-64:lastmy%=184:lastmenu%=iconmenu%:ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% !�� !�� !� !���OpenWork !�polledb%!0=wworkh% !�%ș"Wimp_GetWindowState",,polledb% !�polledb%!28=-1 !��Open_Window !�polledb%!0=wkeyboardh% "%ș"Wimp_GetWindowState",,polledb% "polledb%!28=-1 "!ș"Wimp_OpenWindow",,polledb% "$� ". "8��User_Drag_Box "BȎ dragtype% � "L � 1,2,3,4:dragtype%=-1 "`� "j� "t "~��RdWork "�polledb%!0=wworkh% "�)ș"Wimp_RedrawWindow",,polledb%�more% "��RedrawWork "�� "� "���RdSong "�polledb%!0=wsongh% "�)ș"Wimp_RedrawWindow",,polledb%�more% "��RedrawSong "�� "� "���RdSongPane # polledb%!0=wsongpaneh% # )ș"Wimp_RedrawWindow",,polledb%�more% #�JustRedraw #� #( #2��Key_Pressed #<C� polledb%!24=&1cc � ș"SFXMP_Disable":ș"Wimp_ProcessKey",&1cc #FC� polledb%!24=&1fc � ș"SFXMP_Disable":ș"Wimp_ProcessKey",&1fc #PȎ polledb%!0 � #Z � wkeyboardh%:�KeyKey #n � wposh%:�PosKey #x � wfadeh%:�FadeKey #� � wechoh%:�EchoKey #� � wsongpaneh%:�SongKey #�� #�� #� #� ��FadeKey #�� polledb%!24=13 � #�) � polledb%!4=2 � �SetWIC(wfadeh%,3) #�) � polledb%!4=3 � �SetWIC(wfadeh%,2) #�� #�� #� #� ��EchoKey $� polledb%!24=13 � $) � polledb%!4=2 � �SetWIC(wechoh%,3) $) � polledb%!4=3 � �SetWIC(wechoh%,2) $"� $,� $6 $@ ��SongKey $J� polledb%!24=13 � $T- � polledb%!4=6 � �SetWIC(wsongpaneh%,7) $^- � polledb%!4=7 � �SetWIC(wsongpaneh%,8) $h- � polledb%!4=8 � �SetWIC(wsongpaneh%,9) $r- � polledb%!4=9 � �SetWIC(wsongpaneh%,6) $|� $�� $� $���SetWIC(w%,i%) $� � i%=-1 � $�, ș"XWimp_SetCaretPosition",-1,-1,-1,-1 $�� $� temp%!0=w% $� temp%!4=i% $�" ș"Wimp_GetIconState",,temp% $� A%=�($(temp%!28)) $�2 ș"XWimp_SetCaretPosition",w%,i%,-1,-1,-1,A% $�� $�� % %��PosKey %B� polledb%!24=13 � �SetPitch � ș"Wimp_ProcessKey",polledb%!24 %&� %0 %:��SetPitch %Dtemp%!0=wposh% %N� polledb%!4=3 � %X temp%!4=3 %b" ș"Wimp_GetIconState",,temp% %l pitch%=�($(temp%!28)) %v� %�� polledb%!4=5 � %� temp%!4=5 %�" ș"Wimp_GetIconState",,temp% %� pitch%=�($(temp%!28)) %� � pitch%=0 � pitch%=1 %� pitch%=1E6/pitch% %�� %��SetPitch2 %�� %� %���SetPitch2 %�� pitch%<24 � pitch%=24 %�� pitch%>255 � pitch%=255 &pitch%=pitch%�&fc &temp2%!0=wposh% &temp2%!4=3 & !ș"Wimp_GetIconState",,temp2% &*$(temp2%!28)=�pitch% &48temp2%!8=0:temp2%!12=0:ș"Wimp_SetIconState",,temp2% &>temp2%!4=5 &H!ș"Wimp_GetIconState",,temp2% &R!$(temp2%!28)=�(�(1E6/pitch%)) &\8temp2%!8=0:temp2%!12=0:ș"Wimp_SetIconState",,temp2% &f9ș"XWimp_SetCaretPosition",wkeyboardh%,-1,-1,-1,-1,-1 &p'ș"XSound_Configure",0,0,pitch%,0,0 &z� &� &���KeyKey &�key%=polledb%!24 &�8� key%=13 � ș"XWimp_SetCaretPosition",-1,-1,-1,-1:� &�0� (key%>=&181)�(key%<=&185) okt%=key%-&181:� &�� key%<32 � �CtrlKey:� &��ș"SFXMP_GetPitch"�spitch%:� spitch%<>ospitch% � temp%!0=wsongpaneh%:temp%!4=8:ș"Wimp_GetIconState",,temp%:$(temp%!28)=�spitch%:temp%!8=0:temp%!12=0:ș"Wimp_SetIconState",,temp%:ospitch%=spitch% &�� &� &� ��CtrlKey &� Ȏ key% � &�# � �"X"-64:polledb%!4=0:�MEdit &�# � �"C"-64:polledb%!4=1:�MEdit '# � �"V"-64:polledb%!4=2:�MEdit '# � �"D"-64:polledb%!4=3:�MEdit ' � �"A"-64:�MSelAll '$ � �"Z"-64:�MSelClear '. � �"Q"-64:�ZoomAll '8 � �"W"-64:�ZoomOut 'B � �"S"-64:�ZoomSel 'L � �"T"-64:�ZoomStore 'V � �"R"-64:�ZoomRestore '`� 'j� 't '~��Menu_Select '�"ș"Wimp_GetPointerInfo",,temp% '�oldbut%=temp%!8 '�Ȏ lastmenu% � '� � iconmenu%:�MSelIcon '� � workmenu%:�MSelWork '� � sectmenu%:�MSelSect '�� '�B� (oldbut%�1) � ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy% '�� '� '���MSelSect '�Ȏ polledb%!0 � ( � 0:�MSectInsert ( � 1:�MSectAppend ( � 2:�MSectOverwrite ( � 3:�MSectDelete (( � 4:�MSectPlay (2 � 5:�PlaySong (<� (F� (P (Z��MSectInsert (d6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 (n#� songlen%>=�(songbuflen%/32) � (x �ReportErr("No room.") (�� (� T%=songlen% (� ȕ T%>currsect% (� �S%=0�28�4 (�8 songstart%!(T%*32+S%)=songstart%!(T%*32-32+S%) (� �S% (� T%-=1 (� � (� songlen%+=1 (� �PutSect(currsect%) (� �SetSongExtent (� �RdSong (�� )� ) )��MSectAppend )"6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 ),#� songlen%>=�(songbuflen%/32) � )6# �ReportErr("Too many loops.") )@� )J �PutSect(songlen%) )T songlen%+=1 )^ �SetSongExtent )h �RdSong )r� )|� )� )���MSectOverwrite )�6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 )�6� currsect%<songlen% � �PutSect(currsect%):�RdSong )�� )� )���MSectDelete )�6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 )�� currsect%<songlen% � )� T%=currsect% )� ȕ T%<songlen%-1 )� �S%=0�28�4 )�8 songstart%!(T%*32+S%)=songstart%!(T%*32+32+S%) * �S% * T%+=1 * � *& songlen%-=1 *0 �SetSongExtent *: �RdSong *D� *N� *X *b��MSectPlay *l� currsect%<songlen% � *v8 ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 *� Ƞ 2 *� ȡ 2,"SFXMVoice" *�Y ș"SFXMP_PlaySong",songstart%+32*currsect%,songlen%-currsect%,startsample%,1,stype% *�� *�� *� *���PutSect(s%) *�temp%!0=wsongpaneh% *� temp%!4=6 *� ș"Wimp_GetIconState",,temp% *�#$(songstart%+s%*32)=$(temp%!28) *� temp%!4=7 *� ș"Wimp_GetIconState",,temp% +A%=�($(temp%!28)) +� A%>255 � A%=255 +� A%<1 � A%=1 + !(songstart%+s%*32+12)=A% +* temp%!4=8 +4 ș"Wimp_GetIconState",,temp% +>A%=�($(temp%!28)) +H� A%<1 � A%=1 +R� A%>&10000 � A%=&10000 +\!(songstart%+s%*32+16)=A% +f temp%!4=9 +p ș"Wimp_GetIconState",,temp% +zA%=�($(temp%!28)) +�� A%<2 � A%=2 +�� A%>255 � A%=255 +�!(songstart%+s%*32+20)=A% +�"!(songstart%+s%*32+24)=ploopl% +�"!(songstart%+s%*32+28)=ploopr% +�� +� +���CheckSong +�T%=0 +�ȕ T%<songlen% +�7 A%=songstart%!(T%*32+24):B%=songstart%!(T%*32+28) +� � A%<0 � A%=0 +� � B%<0 � B%=0 ,% � A%>samplelen% � A%=samplelen% ,% � B%>samplelen% � B%=samplelen% ,7 songstart%!(T%*32+24)=A%:songstart%!(T%*32+28)=B% ,$ T%+=1 ,.� ,8� ,B ,L��MSelIcon ,V� polledb%!0=1 � �CloseDown ,`� ,j ,t��MSelWork ,~Ȏ polledb%!0 � ,� � 0:�MInfo ,� � 1:�MSave ,� � 2:�MEdit ,� � 3:�MSelect ,� � 4:�MZoom ,� � 5:�MLoop ,� � 6:�MGoodies ,� � 7:�MSong ,�� ,�� ,� ,���MSong - m%=polledb%!4 - Ȏ m% � - � 0:�PlaySong - � 1:�OpenSong -( � 4:�ClearSong -2 � 5:�SwapSongRep -<� -F� -P -Z��SwapSongRep -dsongrep%=� songrep% -n �AdjSongM -x� -� -���OpenSong -�temp%!0=wsongh% -�"ș"Wimp_GetWindowState",,temp% -�temp%!28=-1 -�ș"Wimp_OpenWindow",,temp% -�temp2%!0=wsongpaneh% -�#ș"Wimp_GetWindowState",,temp2% -�temp2%!4=temp%!4 -�temp2%!12=temp%!12 -�temp2%!16=temp%!16 -�temp2%!8=temp%!16-84 -�temp2%!28=-1 .ș"Wimp_OpenWindow",,temp2% .� . ."��PlaySong .,� songlen%>0 � .68 ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 .@ Ƞ 2 .J ȡ 2,"SFXMVoice" .TP ș"SFXMP_PlaySong",songstart%,songlen%,startsample%,1,stype%+(songrep%<<8) .^� .h� .r .|��MInfo .�m%=polledb%!4 .�Ȏ m% � .� � 1:�MType .� � 2:�SetBuf .� � 3:�ClearAll .�� .�� .� .���SetBuf .�6ș"SFXMP_Stop",1:ș"SFXMP_Stop",2:ș"SFXMP_Stop",3 .�#newblen%=1024*�($(mbuflen%!40)) .�#� newblen%<1024 � newblen%=1024 .�b%=1 /� newblen%<buflen% � / temp%!0=0 /4 $(temp%+4)="You will lose the current sample." /&5 ș"Wimp_ReportError",temp%,%10011,"Confirm"�,b% /0� /:� b%=1 � /D1 ș"XOS_Module",6,,,newblen%�,,newbstart%;v% /N � v%�1 � /X) �ReportErr("Can't claim memory.") /b � /l � newblen%<buflen% � /v% ș"XOS_Module",7,,bufstart% /� bufstart%=newbstart% /� buflen%=newblen% /� �Clear /� � /�# chb%=newbstart%-bufstart% /� A%=bufstart% /� B%=newbstart% /�. C%=startsample%+samplelen%-bufstart% /� �copymem /� A%=clipbstart% /�* B%=newbstart%+newblen%-clipblen% /� C%=clipblen% /� �copymem 0( startsample%=startsample%+chb% 0% ș"XOS_Module",7,,bufstart% 0 bufstart%=newbstart% 0 buflen%=newblen% 0* � 04 � 0>� 0H� 0R 0\��ClearAll 0f� samplesaved%=-1 � 0p �Clear 0z� 0�P A%=�Confirm("Sample has been modified. Are you sure you want to do this?") 0� � A%=1 � �Clear 0�� 0�� 0� 0���Clear 0��Restart 0�temp%!0=wworkh% 0�"ș"Wimp_GetWindowState",,temp% 0�polledb%!20=0 0�ș"Wimp_OpenWindow",,temp% 0��SetExtent 0��SetSongExtent 1$(wwork%!72)="<Untitled>" 1samplesaved%=-1 1�RdWork 1$� 1. 18��MSave 1B� 1L 1V��MType 1`Ȏ polledb%!8 � 1j$ � 0:stype%=2:�AdjTypeM:�RdWork 1t$ � 1:stype%=0:�AdjTypeM:�RdWork 1~$ � 2:stype%=1:�AdjTypeM:�RdWork 1�� 1�� 1� 1���AdjTypeM 1�Ȏ stype% � 1�S � 0:typemenu%!(28+24*0+0)=0:typemenu%!(28+24*1+0)=1:typemenu%!(28+24*2+0)=128 1�S � 1:typemenu%!(28+24*0+0)=0:typemenu%!(28+24*1+0)=0:typemenu%!(28+24*2+0)=129 1�S � 2:typemenu%!(28+24*0+0)=1:typemenu%!(28+24*1+0)=0:typemenu%!(28+24*2+0)=128 1�� 1�� 1� 1���AdjSongM 2 B� songrep% � songmenu%!(28+24*5)=129 � songmenu%!(28+24*5)=128 2 � 2 2��MEdit 2(#� selectl%<>-1 � selectr%<>-1 � 22 m%=polledb%!4 2< Ȏ m% � 2F � 0:�MECut 2P � 1:�MECopy 2Z � 2:�MEPaste 2d � 3:�MEDelete 2n � 4:�MEDeleteNS 2x � 5:�MEDeleteL 2� � 6:�MEDeleteR 2� � 2�� 2�� 2� 2���MECut 2�Cc%=�CheckLen(samplelen%+pselectr%-pselectl%,"No room for cut.") 2�� c%=0 � 2� A%=startsample%+pselectl% 2�0 B%=bufstart%+buflen%-(pselectr%-pselectl%) 2� C%=pselectr%-pselectl% 2� �copymem 2� clipbstart%=B% 3 clipblen%=C% 3 �MEDelete 3 �ModTitle(0) 3"� 3,� 36 3@��MECopy 3JDc%=�CheckLen(samplelen%+pselectr%-pselectl%,"No room for copy.") 3T� c%=0 � 3^ A%=startsample%+pselectl% 3h0 B%=bufstart%+buflen%-(pselectr%-pselectl%) 3r C%=pselectr%-pselectl% 3| �copymem 3� clipbstart%=B% 3� clipblen%=C% 3�� 3�� 3� 3� ��MEPaste 3�=c%=�CheckLen(samplelen%+2*clipblen%,"No room for paste.") 3�� c%=0 � 3� A%=startsample%+pselectr% 3�) B%=startsample%+pselectr%+clipblen% 3� C%=samplelen%-pselectr% 3� �copymem 3� A%=clipbstart% 4 B%=startsample%+pselectr% 4 C%=clipblen% 4 �copymem 4&5 � ploopl%>pselectr% � ploopl%=ploopl%+clipblen% 405 � ploopr%>pselectr% � ploopr%=ploopr%+clipblen% 4: �getwinp 4D% samplelen%=samplelen%+clipblen% 4NE � samplelen%<1 � samplelen%=1:startsample%?0=0:startsample%?1=0 4X �CheckLoop 4b �CheckSong 4l �adjptrs 4v �ZoomSel 4� �ModTitle(0) 4�� 4�� 4� 4�ݤCheckLen(l%,e$) 4�*� startsample%+l%>=bufstart%+buflen% � 4� �ReportErr(e$) 4� A%=-1 4�� 4� A%=0 4�� 4�=A% 4� 5��MEDelete 5A%=startsample%+pselectr% 5B%=startsample%+pselectl% 5 C%=samplelen%-pselectr% 5*�copymem 54?� ploopl%>pselectl% � ploopl%=ploopl%-(pselectr%-pselectl%) 5>?� ploopr%>pselectl% � ploopr%=ploopr%-(pselectr%-pselectl%) 5H�getwinp 5R!samplelen%=samplelen%-(A%-B%) 5\C� samplelen%<1 � samplelen%=1:startsample%?0=0:startsample%?1=0 5f�CheckLoop 5p�CheckSong 5z�adjptrs 5��ZoomSel 5��ModTitle(0) 5�� 5� 5���MEDeleteNS 5�A%=startsample%+pselectl% 5�B%=startsample% 5�C%=pselectr%-pselectl% 5��copymem 5�ploopl%=ploopl%-pselectl% 5�ploopr%=ploopr%-pselectl% 5��getwinp 5�samplelen%=C% 6C� samplelen%<1 � samplelen%=1:startsample%?0=0:startsample%?1=0 6�CheckLoop 6�CheckSong 6$�adjptrs 6.�ZoomSel 68�ModTitle(0) 6B� 6L 6V��MEDeleteL 6`A%=startsample%+pselectl% 6jB%=startsample% 6tC%=samplelen%-pselectl% 6~�copymem 6�ploopl%=ploopl%-pselectl% 6�ploopr%=ploopr%-pselectl% 6��getwinp 6�samplelen%=C% 6�C� samplelen%<1 � samplelen%=1:startsample%?0=0:startsample%?1=0 6��CheckLoop 6��CheckSong 6��adjptrs 6��ZoomSel 6��ModTitle(0) 6�� 6� 7 ��MEDeleteR 7 A%=pselectr% 7�getwinp 7samplelen%=A% 7(C� samplelen%<1 � samplelen%=1:startsample%?0=0:startsample%?1=0 72�CheckLoop 7<�CheckSong 7F�adjptrs 7P�ZoomSel 7Z�ModTitle(0) 7d� 7n 7x��CheckLoop 7�� ploopl%<0 � ploopl%=0 7�-� ploopl%>samplelen% � ploopl%=samplelen% 7�� ploopr%<0 � ploopr%=0 7�-� ploopr%>samplelen% � ploopr%=samplelen% 7�'� ploopl%>ploopr% � ploopr%=ploopl% 7��UpdateSLoop 7�� 7� 7� ��getwinp 7�temp%!0=wworkh% 7�"ș"Wimp_GetWindowState",,temp% 7�selectl%=temp%!20 7�selectr%=temp%!20+1022 8"pselectl%=�WorkToPtr(selectl%) 8"pselectr%=�WorkToPtr(selectr%) 8� 8" 8, ��adjptrs 86=� pselectl%<0 � pselectr%=pselectr%-pselectl%:pselectl%=0 8@\� pselectr%>samplelen% � pselectl%=pselectl%-(pselectr%-samplelen%):pselectr%=samplelen% 8J� pselectl%<0 � pselectl%=0 8T1� pselectr%>samplelen% � pselectr%=samplelen% 8^"selectl%=�PtrToWork(pselectl%) 8h"selectr%=�PtrToWork(pselectr%) 8r� 8| 8� ��MSelect 8�m%=polledb%!4 8�Ȏ m% � 8� � 0:�MSelAll 8� � 1:�MSelLoop 8� � 2:�MSelLeft 8� � 3:�MSelRight 8� � 4:�MSelWindow 8� � -1,5:�MSelClear 8�� 8�� 8� 8� ��MSelAll 9pselectl%=0 9pselectr%=samplelen% 9"selectl%=�PtrToWork(pselectl%) 9&"selectr%=�PtrToWork(pselectr%) 90�UpdateSelect 9:� 9D 9N��MSelLeft 9Xpselectr%=pselectl% 9bpselectl%=0 9l"selectl%=�PtrToWork(pselectl%) 9v"selectr%=�PtrToWork(pselectr%) 9��UpdateSelect 9�� 9� 9���MSelRight 9�pselectl%=pselectr% 9�pselectr%=samplelen% 9�"selectl%=�PtrToWork(pselectl%) 9�"selectr%=�PtrToWork(pselectr%) 9��UpdateSelect 9�� 9� 9���MSelWindow 9�temp%!0=wworkh% :"ș"Wimp_GetWindowState",,temp% :selectl%=temp%!20 :selectr%=temp%!20+1022 : "pselectl%=�WorkToPtr(selectl%) :*"pselectr%=�WorkToPtr(selectr%) :4"selectl%=�PtrToWork(pselectl%) :>"selectr%=�PtrToWork(pselectr%) :H�UpdateSelect :R� :\ :f��MSelLoop :ppselectl%=ploopl% :zpselectr%=ploopr% :�"selectl%=�PtrToWork(pselectl%) :�"selectr%=�PtrToWork(pselectr%) :��UpdateSelect :�� :� :���MSelClear :�selectl%=-1:selectr%=-1 :�pselectl%=-1:pselectr%=-1 :��UpdateSelect :�� :� :���MZoom :�m%=polledb%!4 ;Ȏ m% � ; � 0:�ZoomAll ; � 1:�ZoomOut ;$ � 2:�ZoomLoop ;. � -1,3:�ZoomSel ;8 � 4:�ZoomStore ;B � 5:�ZoomRestore ;L� ;V� ;` ;j ��ZoomAll ;tpolledb%!0=wworkh% ;~%ș"Wimp_GetWindowState",,polledb% ;�polledb%!20=0 ;�!ș"Wimp_OpenWindow",,polledb% ;�displen%=samplelen% ;��SetExtent ;�"selectl%=�PtrToWork(pselectl%) ;�"selectr%=�PtrToWork(pselectr%) ;�loopl%=�PtrToWork(ploopl%) ;�loopr%=�PtrToWork(ploopr%) ;�!oloopl%=loopl%:oloopr%=loopr% ;�)oselectl%=selectl%:oselectr%=selectr% ;��RdWork ;�� <