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