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