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)
;��
<