Home » Archimedes archive » Archimedes World » AW-1992-05.adf » May92 » !AWMay92/Goodies/SFXMDemo/!SFXM/!RunImage
!AWMay92/Goodies/SFXMDemo/!SFXM/!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/!SFXM/!RunImage |
| Read OK: | ✔ |
| File size: | 11954 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/!SFXM/!RunImage
- Archimedes archive » Micro User » MU 1992-04.adf » SFX » !SFXM/!RunImage
File contents
10REM >adfs::SFXM.$.!SFXM.!RunImage
20REM >Written by G. Vermeulen
30ON ERROR PROCIntError:GOTO 60
40insttime%=TIME
50PROCInit
60REPEAT
70 SYS"Wimp_Poll",nopoll%,pollb% TO reason%,polledb%
80 nopoll%=0
90 CASE reason% OF
100 WHEN 0:PROCNull_Reason
110 WHEN 1:PROCRedraw_Window
120 WHEN 2:PROCOpen_Window
130 WHEN 3:PROCClose_Window
140 WHEN 6:PROCMouse_Click:nopoll%=1<<6
150 WHEN 7:PROCUser_Drag_Box
160 WHEN 8:PROCKey_Pressed
170 WHEN 9:PROCMenu_Select
180 WHEN 17,18,19:PROCUser_Message
190 ENDCASE
200UNTIL FALSE
210END
220
230DEFPROCIntError
240LOCAL ERROR
250ON ERROR LOCAL GOTO 17360
260A%=FNinterr(REPORT$+" at line "+STR$ERL+". Continue program?")
270IF A%=2 THEN PROCQuit
280ENDPROC
290
300DEFPROCNull_Reason
310IF ((dfunc%>=0)AND(dfunc%<=9))OR((dfunc%>=13)AND(dfunc%<=18)) THEN PROCDragObject
320IF dfunc%=12 THEN PROCDragLine
330IF drag% THEN PROCDragMoveObjs
340IF (instopen%<>0) AND (TIME-insttime%>300) THEN PROCCheckInst
350ENDPROC
360
370DEFPROCDragObject
380SYS"Wimp_GetPointerInfo",,temp2%
390IF (temp2%!12=wworkh%)AND(temp2%!16>=-1) THEN
400 temp%!0=wworkh%
410 SYS"Wimp_GetWindowState",,temp%
420 newdx%=temp2%!0+temp%!20-temp%!4
430 newdy%=temp2%!4+temp%!24-temp%!16
440 newdx%=(newdx%DIV96)*96
450 newdy%=(newdy%DIV56)*56-56
460 IF (olddx%<>newdx%)OR(olddy%<>newdy%) THEN
470 PROCRemDf(olddx%,olddy%)
480 PROCPlotDf(newdx%,newdy%)
490 olddx%=newdx%:olddy%=newdy%
500 ENDIF
510ENDIF
520ENDPROC
530
540DEFPROCDragLine
550SYS"Wimp_GetPointerInfo",,temp2%
560IF (temp2%!12=wworkh%)AND(temp2%!16>=-1)AND(startlx%<>-1) THEN
570 temp%!0=wworkh%
580 SYS"Wimp_GetWindowState",,temp%
590 newlx%=temp2%!0+temp%!20-temp%!4
600 newly%=temp2%!4+temp%!24-temp%!16
610 IF (oldlx%<>newlx%)OR(oldly%<>newly%) THEN
620 PROCPlotLn(oldlx%,oldly%)
630 PROCPlotLn(newlx%,newly%)
640 oldlx%=newlx%:oldly%=newly%
650 ENDIF
660ENDIF
670ENDPROC
680
690DEFPROCDragMoveObjs
700SYS"Wimp_GetPointerInfo",,temp2%
710IF (temp2%!8)AND4 THEN
720 temp%!0=wworkh%
730 SYS"Wimp_GetWindowState",,temp%
740 newlx%=temp2%!0+temp%!20-temp%!4
750 newly%=temp2%!4+temp%!24-temp%!16
760 newlx%=(newlx%DIV96)*96+48
770 newly%=(newly%DIV56)*56-32
780 IF (oldlx%<>newlx%)OR(oldly%<>newly%) THEN
790 PROCPlotLn(oldlx%,oldly%)
800 PROCPlotLn(newlx%,newly%)
810 oldlx%=newlx%:oldly%=newly%
820 ENDIF
830ELSE
840 IF (startlx%<>-1)AND(oldlx%<>-1) THEN
850 PROCPlotLn(oldlx%,oldly%)
860 PROCMoveIcns(oldlx%-startlx%,oldly%-startly%)
870 ENDIF
880 drag%=0
890 startlx%=-1:startly%=-1
900 newlx%=-1:newly%=-1
910 oldlx%=-1:oldly%=-1
920ENDIF
930ENDPROC
940
950DEFPROCRemAllDrag
960IF olddx%<>-1 THEN
970 PROCRemDf(olddx%,olddy%)
980ENDIF
990IF startlx%<>-1 THEN
1000 PROCPlotLn(oldlx%,oldly%)
1010ENDIF
1020newdx%=-1:newdy%=-1
1030olddx%=-1:olddy%=-1
1040oldlx%=-1:oldly%=-1
1050newlx%=-1:newly%=-1
1060startlx%=-1:startly%=-1
1070startic%=-1
1080starti%=-1
1090endi%=-1
1100drag%=0
1110ENDPROC
1120
1130DEFPROCCheckInst
1140temp%!0=winsth%
1150SYS"Wimp_CloseWindow",,temp%
1160instopen%=0
1170ENDPROC
1180
1190DEFPROCMoveIcns(dx%,dy%)
1200temp2%!0=wworkh%
1210FORT%=0TOmaxicons%-1
1220 IF (iconinfo%!(T%*32)<>-1)AND(iconinfo%!(T%*32+28))AND16 THEN
1230 PROCModTitle(0)
1240 temp2%!4=T%
1250 SYS"Wimp_DeleteIcon",,temp2%
1260 temp2%!4=iconinfo%!(T%*32+4)+dx%
1270 temp2%!8=iconinfo%!(T%*32+8)+dy%
1280 temp2%!12=temp2%!4+92
1290 temp2%!16=temp2%!8+52
1300 temp2%!20=%00001000000000001010000000011010
1310 CASE iconinfo%!(T%*32) OF
1320 WHEN 0:i$="vco"
1330 WHEN 1:i$="noise"
1340 WHEN 2:i$="eg"
1350 WHEN 5:i$="const"
1360 WHEN 3:i$="filtlo"
1370 WHEN 4:i$="filthi"
1380 WHEN 6:i$="mult"
1390 WHEN 7:i$="multc"
1400 WHEN 8:i$="add"
1410 WHEN 13:i$="sub"
1420 WHEN 14:i$="pulse"
1430 WHEN 15:i$="delay"
1440 WHEN 9:i$="output"
1450 WHEN 16:i$="input"
1460 WHEN 17:i$="samhold"
1470 WHEN 18:i$="nldist"
1480 ENDCASE
1490 $(temp2%+24)=i$
1500 SYS"Wimp_CreateIcon",,temp2%TOih%
1510 iconinfo%!(T%*32+4)+=dx%
1520 iconinfo%!(T%*32+8)+=dy%
1530 iconinfo%!(T%*32+28)=(iconinfo%!(T%*32+28))AND&ffffffef
1540 IF ih%<>T% THEN
1550 iconinfo%!(ih%*32+0)=iconinfo%!(T%*32+0)
1560 iconinfo%!(ih%*32+4)=iconinfo%!(T%*32+4)
1570 iconinfo%!(ih%*32+8)=iconinfo%!(T%*32+8)
1580 iconinfo%!(ih%*32+12)=iconinfo%!(T%*32+12)
1590 iconinfo%!(ih%*32+16)=iconinfo%!(T%*32+16)
1600 iconinfo%!(ih%*32+20)=iconinfo%!(T%*32+20)
1610 iconinfo%!(ih%*32+24)=iconinfo%!(T%*32+24)
1620 iconinfo%!(ih%*32+28)=iconinfo%!(T%*32+28)
1630 iconinfo%!(T%*32+0)=-1
1640 iconinfo%!(T%*32+4)=-1
1650 iconinfo%!(T%*32+8)=-1
1660 iconinfo%!(T%*32+12)=-1
1670 iconinfo%!(T%*32+16)=-1
1680 iconinfo%!(T%*32+20)=-1
1690 iconinfo%!(T%*32+24)=-1
1700 iconinfo%!(T%*32+28)=-1
1710 FORS%=0TOmaxicons%-1
1720 IF iconinfo%!(S%*32)<>-1 THEN
1730 IF iconinfo%!(S%*32+16)=T% THEN iconinfo%!(S%*32+16)=ih%
1740 IF iconinfo%!(S%*32+20)=T% THEN iconinfo%!(S%*32+20)=ih%
1750 ENDIF
1760 NEXTS%
1770 ENDIF
1780 ENDIF
1790NEXTT%
1800SYS"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
1810ENDPROC
1820
1830DEFPROCPlotDf(x%,y%)
1840IF x%<>-1 THEN
1850 temp%!0=wworkh%
1860 SYS"Wimp_GetWindowState",,temp%
1870 sx%=temp%!4+x%-temp%!20
1880 sy%=temp%!16+y%-temp%!24
1890 temp2%!0=wworkh%
1900 temp2%!4=x%
1910 temp2%!8=y%
1920 temp2%!12=x%+96
1930 temp2%!16=y%+56
1940 SYS"Wimp_ReadPixTrans",&100,1,"vco",,,,scalef%,pixtrans%
1950 SYS"Wimp_UpdateWindow",,temp2%TOmore%
1960 WHILE more%
1970 SYS"Wimp_SpriteOp",&34,,df$,sx%,sy%,8,scalef%,pixtrans%
1980 SYS"Wimp_GetRectangle",,temp2%TOmore%
1990 ENDWHILE
2000ENDIF
2010ENDPROC
2020
2030DEFPROCRemDf(x%,y%)
2040IF x%<>-1 THEN
2050 SYS"Wimp_ForceRedraw",wworkh%,x%,y%,x%+96,y%+56
2060ENDIF
2070ENDPROC
2080
2090DEFPROCPlotLn(x%,y%)
2100IF (x%<>-1)AND(startlx%<>-1) THEN
2110 temp2%!0=wworkh%
2120 SYS"Wimp_GetWindowState",,temp2%
2130 ssx%=temp2%!4+startlx%-temp2%!20
2140 ssy%=temp2%!16+startly%-temp2%!24
2150 sex%=temp2%!4+x%-temp2%!20
2160 sey%=temp2%!16+y%-temp2%!24
2170 wsx%=startlx%
2180 wsy%=startly%
2190 wex%=x%
2200 wey%=y%
2210 IF wsx%>wex% THEN SWAP wsx%,wex%
2220 IF wsy%>wey% THEN SWAP wsy%,wey%
2230 temp2%!0=wworkh%
2240 temp2%!4=wsx%-4
2250 temp2%!8=wsy%-4
2260 temp2%!12=wex%+4
2270 temp2%!16=wey%+4
2280 SYS"Wimp_UpdateWindow",,temp2%TOmore%
2290 WHILE more%
2300 GCOL3,15
2310 LINE ssx%,ssy%,sex%,sey%
2320 SYS"Wimp_GetRectangle",,temp2%TOmore%
2330 ENDWHILE
2340ENDIF
2350ENDPROC
2360
2370DEFPROCRedraw_Window
2380SYS"Wimp_RedrawWindow",,polledb%TOmore%
2390CASE polledb%!0 OF
2400 WHEN wworkh%:PROCRedrawWork
2410 WHEN wvcoh%:PROCRedrawVCO
2420 WHEN wegh%:PROCRedrawEG
2430 WHEN wnldisth%:PROCRedrawNLD
2440 OTHERWISE:PROCJustRedraw
2450ENDCASE
2460ENDPROC
2470
2480DEFPROCRedrawWork
2490SYS"Wimp_ReadPixTrans",&100,1,"vco",,,,scalef%,pixtrans%
2500ox%=newdx%+polledb%!4-polledb%!20
2510oy%=newdy%+polledb%!16-polledb%!24
2520ssx%=startlx%+polledb%!4-polledb%!20
2530ssy%=startly%+polledb%!16-polledb%!24
2540sex%=newlx%+polledb%!4-polledb%!20
2550sey%=newly%+polledb%!16-polledb%!24
2560WHILE more%
2570 PROCRedrawLines(polledb%!4-58,polledb%!8-28,polledb%!12+58,polledb%!16+28)
2580
2590 IF newdx%<>-1 THEN SYS"Wimp_SpriteOp",&34,,df$,ox%,oy%,8,scalef%,pixtrans%
2600 IF (startlx%<>-1) AND (newlx%<>-1) THEN GCOL3,15:LINE ssx%,ssy%,sex%,sey%
2610 SYS"Wimp_GetRectangle",,polledb%TOmore%
2620ENDWHILE
2630ENDPROC
2640
2650DEFPROCRedrawVCO
2660A%=polledb%!4
2670B%=polledb%!8
2680C%=vcoptr%
2690WHILE more%
2700 SYS"Wimp_SetColour",3
2710 LINE A%+166,B%+132,A%+166+512,B%+132
2720 SYS"Wimp_SetColour",1
2730 LINE A%+166,B%+132+32,A%+166+512,B%+132+32
2740 LINE A%+166,B%+132+64,A%+166+512,B%+132+64
2750 LINE A%+166,B%+132+96,A%+166+512,B%+132+96
2760 LINE A%+166,B%+132-32,A%+166+512,B%+132-32
2770 LINE A%+166,B%+132-64,A%+166+512,B%+132-64
2780 LINE A%+166,B%+132-96,A%+166+512,B%+132-96
2790 SYS"Wimp_SetColour",7
2800 CALLredrawvco
2810 SYS"Wimp_GetRectangle",,polledb%TOmore%
2820ENDWHILE
2830ENDPROC
2840
2850DEFPROCRedrawNLD
2860A%=polledb%!4
2870B%=polledb%!8
2880C%=nldistptr%
2890WHILE more%
2900 SYS"Wimp_SetColour",1
2910 LINE A%,B%+64,A%+512,B%+64
2920 LINE A%,B%+128,A%+512,B%+128
2930 LINE A%,B%+192,A%+512,B%+192
2940 LINE A%,B%+320,A%+512,B%+320
2950 LINE A%,B%+384,A%+512,B%+384
2960 LINE A%,B%+448,A%+512,B%+448
2970 LINE A%+64,B%,A%+64,B%+512
2980 LINE A%+128,B%,A%+128,B%+512
2990 LINE A%+192,B%,A%+192,B%+512
3000 LINE A%+320,B%,A%+320,B%+512
3010 LINE A%+384,B%,A%+384,B%+512
3020 LINE A%+448,B%,A%+448,B%+512
3030 SYS"Wimp_SetColour",3
3040 LINE A%,B%+256,A%+512,B%+256
3050 LINE A%+256,B%,A%+256,B%+512
3060 SYS"Wimp_SetColour",7
3070 CALLredrawnld
3080 SYS"Wimp_GetRectangle",,polledb%TOmore%
3090ENDWHILE
3100ENDPROC
3110
3120DEFPROCVCOClick
3130CASE polledb%!16 OF
3140 WHEN 0:PROCVCOsin(vcoptr%+4)
3150 WHEN 1:PROCVCOtri(vcoptr%+4)
3160 WHEN 2:PROCVCOramp(vcoptr%+4)
3170 WHEN 3:PROCVCOsqr(vcoptr%+4)
3180 WHEN 4:PROCVCOconst(vcoptr%+4)
3190 WHEN 5:PROCVCOshftlft(vcoptr%+4)
3200 WHEN 6:PROCVCOshftrght(vcoptr%+4)
3210 WHEN 7:PROCVCOmuldiv2(vcoptr%+4)
3220 WHEN 8:PROCVCOrot90(vcoptr%+4)
3230 WHEN 9:PROCVCOrand(vcoptr%+4)
3240 WHEN 10:PROCVCOpaint(vcoptr%+4)
3250ENDCASE
3260IF (polledb%!16<>10)AND(polledb%!16<>-1) THEN:SYS"Wimp_ForceRedraw",wvcoh%,166,-260,678,-4
3270ENDPROC
3280
3290DEFPROCVCOsin(a%)
3300FORT%=0TO255
3310 ?(a%+T%)=127*SIN(2*PI*T%/256)
3320NEXTT%
3330PROCModTitle(0)
3340ENDPROC
3350DEFPROCVCOtri(a%)
3360FORT%=0TO127
3370 ?(a%+T%)=127-ABS(-127+2*T%)
3380 ?(a%+255-T%)=-?(a%+T%)
3390NEXTT%
3400PROCModTitle(0)
3410ENDPROC
3420DEFPROCVCOramp(a%)
3430MOUSE A%,B%,C%
3440FORT%=0TO255
3450 IF C%AND4 THEN ?(a%+T%)=-128+T%
3460 IF C%AND1 THEN ?(a%+T%)=127-T%
3470NEXTT%
3480PROCModTitle(0)
3490ENDPROC
3500DEFPROCVCOsqr(a%)
3510FORT%=0TO255
3520 ?(a%+T%)=127+254*(T%>127)
3530NEXTT%
3540PROCModTitle(0)
3550ENDPROC
3560DEFPROCVCOconst(a%)
3570MOUSE A%,B%,C%
3580IF C%AND4 THEN l%=127
3590IF C%AND2 THEN l%=0
3600IF C%AND1 THEN l%=128
3610FORT%=0TO255
3620 ?(a%+T%)=l%
3630NEXTT%
3640PROCModTitle(0)
3650ENDPROC
3660DEFPROCVCOshftlft(a%)
3670FORT%=0TO127
3680 ?(a%+T%)=?(a%+T%*2)
3690NEXTT%
3700FORT%=0TO127
3710 ?(a%+T%+128)=?(a%+T%)
3720NEXTT%
3730PROCModTitle(0)
3740ENDPROC
3750DEFPROCVCOshftrght(a%)
3760FORT%=255TO0STEP-1
3770 ?(a%+T%)=?(a%+(T%>>1))
3780NEXTT%
3790PROCModTitle(0)
3800ENDPROC
3810DEFPROCVCOmuldiv2(a%)
3820MOUSE A%,B%,C%
3830FORT%=0TO255
3840 l%=(((?(a%+T%))<<24)>>24)
3850 IF C%AND4 THEN l%=l%*2
3860 IF C%AND1 THEN l%=l%DIV2
3870 IF l%>127 THEN l%=127
3880 IF l%<-127 THEN l%=-127
3890 ?(a%+T%)=l%
3900NEXTT%
3910PROCModTitle(0)
3920ENDPROC
3930DEFPROCVCOrot90(a%)
3940MOUSE A%,B%,C%
3950FORT%=0TO255
3960 l%=T%
3970 IF C%AND4 THEN l%=(T%+64)AND255
3980 IF C%AND1 THEN l%=(T%-64)AND255
3990 temp%?T%=?(a%+l%)
4000NEXTT%
4010FORT%=0TO255
4020 ?(a%+T%)=temp%?T%
4030NEXTT%
4040PROCModTitle(0)
4050ENDPROC
4060DEFPROCVCOrand(a%)
4070FORT%=0TO255
4080 ?(a%+T%)=RND(255)-128
4090NEXTT%
4100PROCModTitle(0)
4110ENDPROC
4120DEFPROCVCOpaint(a%)
4130SYS"OS_Byte",202,0,255TO,sh%
4140IF (sh%AND8)=0 THEN
4150MOUSE A%,B%,C%
4160IF C%=0 THEN vcolastx%=-1
4170IF (C%AND4)OR((C%AND1)AND(vcolastx%=-1)) THEN
4180 temp%!0=wvcoh%
4190 SYS"Wimp_GetWindowState",,temp%
4200 x%=polledb%!0-temp%!4+temp%!20
4210 y%=polledb%!4-temp%!16+temp%!24
4220 IF (x%>=166)AND(x%<=676)AND(y%<=-8)AND(y%>=-260) THEN
4230 PROCModTitle(0)
4240 a%?((x%-166)/2)=(134+y%)
4250 vcolastx%=(x%-166)/2
4260 vcolasty%=134+y%
4270 SYS"Wimp_ForceRedraw",wvcoh%,x%,-260,x%+2,-4
4280 ENDIF
4290ENDIF
4300IF (C%AND1)AND(vcolastx%<>-1) THEN
4310 temp%!0=wvcoh%
4320 SYS"Wimp_GetWindowState",,temp%
4330 x%=polledb%!0-temp%!4+temp%!20
4340 y%=polledb%!4-temp%!16+temp%!24
4350 IF (x%>=166)AND(x%<=676)AND(y%<=-8)AND(y%>=-260) THEN
4360 PROCModTitle(0)
4370 sx=vcolastx%
4380 sy=vcolasty%
4390 ex=(x%-166)DIV2
4400 ey=134+y%
4410 IF ABS(sx-ex)<1 THEN
4420 a%?((x%-166)/2)=(134+y%)
4430 ELSE
4440 y=sy
4450 dx=SGN(ex-sx)
4460 dy=(ey-sy)/ABS(ex-sx)
4470 FOR x=sx TO ex STEP dx
4480 a%?x=y
4490 y+=dy
4500 NEXTx
4510 ENDIF
4520 vcolastx%=(x%-166)/2
4530 vcolasty%=134+y%
4540 IF sx>ex THEN SWAP sx,ex
4550 IF sy>ey THEN SWAP sy,ey
4560 SYS"Wimp_ForceRedraw",wvcoh%,sx*2+166,-260,ex*2+168,-4
4570 ENDIF
4580ENDIF
4590ENDIF
4600ENDPROC
4610
4620DEFPROCEGClick
4630SYS"OS_Byte",202,0,255TO,sh%
4640IF (sh%AND8)=0 THEN
4650a%=egptr%+8
4660MOUSE A%,B%,C%
4670IF C%=0 THEN eglastx%=-1
4680IF (C%AND4)OR((C%AND1)AND(eglastx%=-1)) THEN
4690 temp%!0=wegh%
4700 SYS"Wimp_GetWindowState",,temp%
4710 x%=polledb%!0-temp%!4+temp%!20
4720 y%=polledb%!4-temp%!16+temp%!24
4730 IF (x%>=0)AND(x%<=1022)AND(y%<=-4)AND(y%>=-256) THEN
4740 PROCModTitle(0)
4750 a%?(x%/2)=256+y%
4760 eglastx%=x%/2
4770 eglasty%=256+y%
4780 SYS"Wimp_ForceRedraw",wegh%,x%,-256,x%+2,0
4790 ENDIF
4800ENDIF
4810IF (C%AND1)AND(eglastx%<>-1) THEN
4820 temp%!0=wegh%
4830 SYS"Wimp_GetWindowState",,temp%
4840 x%=polledb%!0-temp%!4+temp%!20
4850 y%=polledb%!4-temp%!16+temp%!24
4860 IF (x%>=0)AND(x%<=1022)AND(y%<=-4)AND(y%>=-256) THEN
4870 PROCModTitle(0)
4880 sx=eglastx%
4890 sy=eglasty%
4900 ex=x%DIV2
4910 ey=256+y%
4920 IF ABS(sx-ex)<1 THEN
4930 a%?(x%/2)=256+y%
4940 ELSE
4950 y=sy
4960 dx=SGN(ex-sx)
4970 dy=(ey-sy)/ABS(ex-sx)
4980 FOR x=sx TO ex STEP dx
4990 a%?x=y
5000 y+=dy
5010 NEXTx
5020 ENDIF
5030 eglastx%=x%/2
5040 eglasty%=256+y%
5050 IF sx>ex THEN SWAP sx,ex
5060 IF sy>ey THEN SWAP sy,ey
5070 SYS"Wimp_ForceRedraw",wegh%,sx*2,-256,ex*2+2,0
5080 ENDIF
5090ENDIF
5100ENDIF
5110ENDPROC
5120
5130DEFPROCRedrawEG
5140A%=polledb%!4
5150B%=polledb%!8
5160C%=egptr%
5170WHILE more%
5180 SYS"Wimp_SetColour",1
5190 LINE A%+2,B%+32,A%+1024,B%+32
5200 LINE A%+2,B%+64,A%+1024,B%+64
5210 LINE A%+2,B%+96,A%+1024,B%+96
5220 LINE A%+2,B%+128,A%+1024,B%+128
5230 LINE A%+2,B%+160,A%+1024,B%+160
5240 LINE A%+2,B%+192,A%+1024,B%+192
5250 LINE A%+2,B%+224,A%+1024,B%+224
5260 SYS"Wimp_SetColour",7
5270 CALLredraweg
5280 SYS"Wimp_GetRectangle",,polledb%TOmore%
5290ENDWHILE
5300ENDPROC
5310
5320DEFPROCJustRedraw
5330WHILE more%
5340 SYS"Wimp_GetRectangle",,polledb%TOmore%
5350ENDWHILE
5360ENDPROC
5370
5380DEFPROCOpen_Window
5390IF polledb%!0=wworkh% AND tools% THEN PROCOpen_Work:ENDPROC
5400IF polledb%!0=wtools% THEN polledb%!0=wworkh%:SYS"Wimp_GetWindowState",,polledb%:PROCOpen_Work:ENDPROC
5410SYS"Wimp_OpenWindow",,polledb%
5420ENDPROC
5430
5440DEFPROCOpen_Work
5450 temp2%!0=wworkh%
5460 SYS"Wimp_GetWindowState",,temp2%
5470 temp%!0=wtoolsh%
5480 SYS"Wimp_GetWindowState",,temp%
5490 temp%!4=polledb%!4-114
5500 temp%!16=polledb%!16
5510 temp%!12=polledb%!4-4
5520 IF polledb%!16-polledb%!8>620 THEN temp%!8=temp%!16-620 ELSE temp%!8=temp%!16-(polledb%!16-polledb%!8)
5530 IF temp%!4<0 THEN temp%!12=temp%!12-temp%!4:temp%!4=0
5540 A%=polledb%!4<oldworkx%
5550 A%=A% OR ((polledb%!4-temp%!4)<114)
5560 A%=A% AND (((temp2%!32)AND(1<<19))=0)
5570 A%=A% OR (((temp2%!32)AND(1<<18))<>0)
5580 IF A% THEN
5590 temp%!28=polledb%!28
5600 SYS"Wimp_OpenWindow",,temp%
5610 polledb%!28=wtoolsh%
5620 SYS"Wimp_OpenWindow",,polledb%
5630 ELSE
5640 temp%!28=polledb%!28
5650 polledb%!28=wtoolsh%
5660 SYS"Wimp_OpenWindow",,polledb%
5670 SYS"Wimp_GetWindowState",,polledb%
5680 temp%!4=polledb%!4-114
5690 temp%!16=polledb%!16
5700 temp%!12=polledb%!4-4
5710 IF polledb%!16-polledb%!8>620 THEN temp%!8=temp%!16-620 ELSE temp%!8=temp%!16-(polledb%!16-polledb%!8)
5720 IF temp%!4<0 THEN temp%!12=temp%!12-temp%!4:temp%!4=0
5730 SYS"Wimp_OpenWindow",,temp%
5740 polledb%!28=wtoolsh%
5750 SYS"Wimp_OpenWindow",,polledb%
5760 ENDIF
5770 oldworkx%=polledb%!4
5780ENDPROC
5790
5800DEFPROCClose_Window
5810SYS"Wimp_CloseWindow",,polledb%
5820IF polledb%!0=wworkh% THEN
5830 polledb%!0=wtoolsh%
5840 SYS"Wimp_CloseWindow",,polledb%
5850ENDIF
5860ENDPROC
5870
5880DEFPROCMouse_Click
5890CASE polledb%!12 OF
5900 WHEN wworkh%:PROCWorkClick
5910 WHEN wtoolsh%:PROCToolsClick
5920 WHEN wconstanth%:PROCConstClick
5930 WHEN wmultch%:PROCMultCClick
5940 WHEN wvcoh%:PROCVCOClick
5950 WHEN wegh%:PROCEGClick
5960 WHEN wnldisth%:PROCNLDistClick
5970 WHEN wstatsh%:PROCStatsClick
5980 WHEN winputh%:PROCInputClick
5990 WHEN -2:PROCIconBClick
6000ENDCASE
6010ENDPROC
6020
6030DEFPROCToolsClick
6040IF polledb%!8<16 THEN
6050 CASE polledb%!16 OF
6060 WHEN 0:PROCPopPlaceM
6070 WHEN 1:lastmenu%=workmenu%:polledb%!0=2:polledb%!4=-1:PROCMenu_Select2
6080 WHEN 2:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=-1:PROCMenu_Select2
6090 WHEN 3:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=3:polledb%!8=-1:PROCMenu_Select2
6100 WHEN 4:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=4:polledb%!8=-1:PROCMenu_Select2
6110 WHEN 5:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=0:polledb%!8=-1:PROCMenu_Select2
6120 WHEN 6:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=1:polledb%!8=-1:PROCMenu_Select2
6130 WHEN 7:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=2:polledb%!8=-1:PROCMenu_Select2
6140 WHEN 8:lastmenu%=workmenu%:polledb%!0=3:polledb%!4=-1:PROCMenu_Select2
6150 ENDCASE
6160ENDIF
6170ENDPROC
6180
6190DEFPROCPopPlaceM
6200lastmx%=polledb%!0-64:lastmy%=polledb%!4+12:lastmenu%=addmenu%:SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
6210ENDPROC
6220
6230DEFPROCNLDistClick
6240SYS"OS_Byte",202,0,255TO,sh%
6250IF (sh%AND8)=0 THEN
6260a%=nldistptr%
6270MOUSE A%,B%,C%
6280IF C%=0 THEN nldistlastx%=-1
6290IF (C%AND4)OR((C%AND1)AND(nldistlastx%=-1)) THEN
6300 temp%!0=wnldisth%
6310 SYS"Wimp_GetWindowState",,temp%
6320 x%=polledb%!0-temp%!4+temp%!20
6330 y%=polledb%!4-temp%!16+temp%!24
6340 IF (x%>=0)AND(x%<=510)AND(y%<=-2)AND(y%>=-512) THEN
6350 PROCModTitle(0)
6360 a%?(x%/2)=256+y%/2
6370 nldistlastx%=x%/2
6380 nldistlasty%=256+y%/2
6390 SYS"Wimp_ForceRedraw",wnldisth%,x%,-512,x%+2,0
6400 ENDIF
6410ENDIF
6420IF (C%AND1)AND(nldistlastx%<>-1) THEN
6430 temp%!0=wnldisth%
6440 SYS"Wimp_GetWindowState",,temp%
6450 x%=polledb%!0-temp%!4+temp%!20
6460 y%=polledb%!4-temp%!16+temp%!24
6470 IF (x%>=0)AND(x%<=510)AND(y%<=-2)AND(y%>=-512) THEN
6480 PROCModTitle(0)
6490 sx=nldistlastx%
6500 sy=nldistlasty%
6510 ex=x%DIV2
6520 ey=256+y%/2
6530 IF ABS(sx-ex)<1 THEN
6540 a%?(x%/2)=256+y%/2
6550 ELSE
6560 y=sy
6570 dx=SGN(ex-sx)
6580 dy=(ey-sy)/ABS(ex-sx)
6590 FOR x=sx TO ex STEP dx
6600 a%?x=y
6610 y+=dy
6620 NEXTx
6630 ENDIF
6640 nldistlastx%=x%/2
6650 nldistlasty%=256+y%/2
6660 IF sx>ex THEN SWAP sx,ex
6670 IF sy>ey THEN SWAP sy,ey
6680 SYS"Wimp_ForceRedraw",wnldisth%,sx*2,-512,ex*2+2,0
6690 ENDIF
6700ENDIF
6710ENDIF
6720ENDPROC
6730
6740DEFPROCStatsClick
6750IF polledb%!8<8 THEN
6760 IF polledb%!16=4 THEN samtype%=0:PROCSendSFXED(&9abc0)
6770 IF polledb%!16=5 THEN samtype%=1:PROCSendSFXED(&9abc1)
6780 IF polledb%!16=6 THEN samtype%=2:PROCSendSFXED(&9abc2)
6790ENDIF
6800ENDPROC
6810
6820DEFPROCSendSFXED(M%)
6830H%=FNGetSFXEDH
6840IF H%=0 THEN
6850 PROCReportErr("SFXED not present.")
6860ELSE
6870 temp%!0=256
6880 temp%!4=0
6890 temp%!8=0
6900 temp%!12=0
6910 temp%!16=M%
6920 SYS"Wimp_SendMessage",17,temp%,H%
6930ENDIF
6940ENDPROC
6950
6960DEFPROCMBString(s%)
6970WHILE ?s%>31 s%+=1:ENDWHILE
6980?s%=13
6990ENDPROC
7000
7010DEFPROCDataSave
7020IF messbk%!4<>taskh% THEN
7030 filetoload2$=FNStrip($(messbk%+44))
7040 messbk%!0=256
7050 $(messbk%+44)="<Wimp$Scrap>"+CHR$(0)
7060 messbk%!12=messbk%!8
7070 messbk%!16=2
7080 messbk%!36=-1
7090 SYS"Wimp_SendMessage",17,messbk%,messbk%!4
7100ENDIF
7110ENDPROC
7120
7130DEFPROCSaveAck
7140IF savetype%<>-1 THEN
7150 CASE savetype% OF
7160 WHEN 0:temp%!0=wsaveasshh%
7170 ENDCASE
7180 temp%!4=1
7190 SYS"Wimp_GetIconState",,temp%
7200 PROCMBString(polledb%+44)
7210 $(!(temp%+28))=$(polledb%+44)
7220 f$=$(polledb%+44)
7230 CASE savetype% OF
7240 WHEN 0:PROCSaveSh(f$)
7250 ENDCASE
7260 IF f%<>0 THEN CLOSE#f%
7270 savetype%=-1
7280 messbk%!12=messbk%!8
7290 messbk%!16=3
7300 SYS"Wimp_SendMessage",17,messbk%,messbk%!4
7310ENDIF
7320ENDPROC
7330
7340DEFPROCDataLoad
7350CASE polledb%!20 OF
7360 WHEN wworkh%,-2:PROCLoadSheet
7370 WHEN winputh%:PROCLoadInput
7380ENDCASE
7390ENDPROC
7400
7410DEFPROCDataOpen
7420IF polledb%!40=&78a THEN
7430 PROCLoadSheet
7440 messbk%!0=256
7450 messbk%!12=messbk%!8
7460 SYS"Wimp_SendMessage",17,messbk%,messbk%!4
7470ENDIF
7480ENDPROC
7490
7500DEFPROCLoadInput
7510LOCAL ERROR
7520ON ERROR LOCAL PROCReportErr(REPORT$):ENDPROC
7530PROCModTitle(0)
7540PROCMBString(polledb%+44)
7550$(inpptr%)=$(polledb%+44)
7560temp%!0=winputh%
7570temp%!4=1
7580SYS"Wimp_GetIconState",,temp%
7590$(temp%!28)=$(polledb%+44)
7600f%=OPENIN($(polledb%+44))
7610inpptr%!268=EXT#f%
7620CLOSE#f%
7630temp%!4=8
7640SYS"Wimp_GetIconState",,temp%
7650@%=&90a
7660$(temp%!28)=STR$(inpptr%!268)
7670@%=&01020a00
7680SYS"Wimp_ForceRedraw",winputh%,0,-4000,4000,0
7690ENDPROC
7700
7710DEFPROCLoadSheet
7720LOCAL ERROR
7730ON ERROR LOCAL PROCReportErr(REPORT$):ENDPROC
7740IF polledb%!40<>&78a THEN
7750 PROCReportErr("Not a sheet.")
7760ELSE
7770 PROCMBString(polledb%+44)
7780 filetoload$=$(polledb%+44)
7790 IF sheetsaved%=-1 THEN
7800 PROCLoadSh(filetoload$)
7810 ELSE
7820 A%=FNConfirm("Sheet has been modified. Are you sure you want to load another sheet?")
7830 IF A%=1 THEN PROCLoadSh(filetoload$)
7840 ENDIF
7850ENDIF
7860ENDPROC
7870
7880DEFPROCLoadSh(f$)
7890 PROCRemAllDrag
7900 PROCClear
7910 fi$=FNStrip(f$)
7920 sheetname$=fi$
7930 f%=OPENIN(f$)
7940 SYS"OS_GBPB",4,f%,temp%,4
7950 IF temp%!0=&4d584653 THEN
7960 SYS"OS_GBPB",4,f%,temp%,20
7970 temp2%!0=wstatsh%
7980 temp2%!4=8
7990 SYS"Wimp_GetIconState",,temp2%
8000 $(temp2%!28)=$temp%
8010 SYS"OS_GBPB",4,f%,temp%,4
8020 ENDIF
8030 IF temp%!0>99999 THEN temp%!0=99999
8040 temp2%!0=wstatsh%
8050 temp2%!4=3
8060 SYS"Wimp_GetIconState",,temp2%
8070 $(temp2%!28)=STR$(temp%!0)
8080 SYS"OS_GBPB",4,f%,temp%,4
8090 i%=temp%!0
8100 WHILE i%<>-1
8110 SYS"OS_GBPB",4,f%,temp2%,32
8120 SYS"OS_GBPB",4,f%,temp%,4
8130 l%=FNAlloc(temp%!0)
8140 temp2%!12=l%
8150 temp2%!28=(temp2%!28)AND&f
8160 SYS"OS_GBPB",4,f%,l%,temp%!0
8170 temp%!0=wworkh%
8180 temp%!4=temp2%!4
8190 temp%!8=temp2%!8
8200 temp%!12=temp2%!4+92
8210 temp%!16=temp2%!8+52
8220 temp%!20=%00001000000000001010000000011010
8230 CASE temp2%!0 OF
8240 WHEN 0:i$="vco"
8250 WHEN 1:i$="noise"
8260 WHEN 2:i$="eg"
8270 WHEN 3:i$="filtlo"
8280 WHEN 4:i$="filthi"
8290 WHEN 5:i$="const"
8300 WHEN 6:i$="mult"
8310 WHEN 7:i$="multc"
8320 WHEN 8:i$="add"
8330 WHEN 13:i$="sub"
8340 WHEN 14:i$="pulse"
8350 WHEN 15:i$="delay"
8360 WHEN 9:i$="output"
8370 WHEN 16:i$="input"
8380 WHEN 17:i$="samhold"
8390 WHEN 18:i$="nldist"
8400 ENDCASE
8410 $(temp%+24)=i$
8420 SYS"Wimp_CreateIcon",,temp%TOih%
8430 litrans%(i%)=ih%
8440 FORT%=0TO28STEP4
8450 iconinfo%!(ih%*32+T%)=temp2%!T%
8460 NEXTT%
8470 SYS"OS_GBPB",4,f%,temp%,4
8480 i%=temp%!0
8490 ENDWHILE
8500 FORT%=0TOmaxicons%-1
8510 IF iconinfo%!(T%*32)<>-1 THEN
8520 IF iconinfo%!(T%*32+16)<>-1 THEN iconinfo%!(T%*32+16)=litrans%(iconinfo%!(T%*32+16))
8530 IF iconinfo%!(T%*32+20)<>-1 THEN iconinfo%!(T%*32+20)=litrans%(iconinfo%!(T%*32+20))
8540 ENDIF
8550 NEXTT%
8560 CLOSE#f%
8570 IF filetoload$="<Wimp$Scrap>" THEN
8580 OSCLI("Delete "+filetoload$)
8590 f$=filetoload2$
8600 ENDIF
8610 $(wwork%!72)=f$
8620 sheetsaved%=-1
8630 temp%!0=wworkh%
8640 temp%!0=wsaveasshh%
8650 temp%!4=1
8660 SYS"Wimp_GetIconState",,temp%
8670 $(temp%!28)=f$
8680 PROCOpenWork
8690 SYS"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
8700 SYS"Wimp_ForceRedraw",wstatsh%,0,-4000,4000,0
8710ENDPROC
8720
8730DEFFNStrip(fs$)
8740LOCAL f%,a%
8750f%=1
8760a%=1
8770WHILE MID$(fs$,f%)<>""
8780 IF MID$(fs$,f%,1)="." OR MID$(fs$,f%,1)=":" THEN a%=f%+1
8790 f%+=1
8800ENDWHILE
8810=MID$(fs$,a%)
8820
8830DEFPROCInst
8840n$=""
8850f%=OPENIN("<SFXM$Dir>.iddata")
8860a%=BGET#f%
8870n$=n$+CHR$(a%)
8880a%=BGET#f%
8890n$=n$+CHR$(a%)
8900a%=BGET#f%
8910n$=n$+CHR$(a%)
8920a%=BGET#f%
8930n$=n$+CHR$(a%)
8940IF n$<>"SFXM" THEN CLOSE#f%:PROCReportErr("Please install SFXM first!"):PROCQuit
8950usname$=""
8960idnum$=""
8970check%=0
8980REPEAT
8990 a%=BGET#f%
9000 IF a%<>0 THEN usname$=usname$+CHR$(a% EOR &aa)
9010 check%=check% EOR a%
9020UNTIL a%=0
9030REPEAT
9040 a%=BGET#f%
9050 IF a%<>0 THEN idnum$=idnum$+CHR$(a% EOR &aa)
9060 check%=check% EOR a%
9070UNTIL a%=0
9080a%=BGET#f%
9090CLOSE#f%
9100IF a%<>check% THEN PROCQuit
9110temp%!0=winsth%
9120temp%!4=9
9130SYS"Wimp_GetIconState",,temp%
9140$(temp%!28)=usname$
9150temp%!0=winsth%
9160temp%!4=13
9170SYS"Wimp_GetIconState",,temp%
9180$(temp%!28)=idnum$
9190temp%!0=winsth%
9200SYS"Wimp_GetWindowState",,temp%
9210temp%!28=-1
9220SYS"Wimp_OpenWindow",,temp%
9230insttime%=TIME
9240instopen%=-1
9250ENDPROC
9260
9270DEFPROCConstClick
9280PROCModTitle(0)
9290IF polledb%!16=2 THEN
9300 temp%!0=wconstanth%
9310 temp%!4=0
9320 SYS"Wimp_GetIconState",,temp%
9330 v=VAL($(temp%!28))
9340 IF ABS(v)>32767 THEN
9350 PROCReportErr("Only numbers between -32767 and 32767 allowed.")
9360 ELSE
9370 !constptr%=&10000*v
9380 SYS"Wimp_CloseWindow",,temp%
9390 constptr%=0
9400 ENDIF
9410ENDIF
9420ENDPROC
9430
9440DEFPROCInputClick
9450PROCModTitle(0)
9460inptype%=inpptr%!256
9470IF polledb%!16=6 THEN
9480 temp%!0=winputh%
9490 SYS"Wimp_CloseWindow",,temp%
9500ENDIF
9510IF polledb%!16=3 THEN inptype%=(inptype%AND&fffffffc)+0
9520IF polledb%!16=4 THEN inptype%=(inptype%AND&fffffffc)+1
9530IF polledb%!16=5 THEN inptype%=(inptype%AND&fffffffc)+2
9540IF polledb%!16=11 THEN inptype%=(inptype%AND&fffffffb)+4
9550IF polledb%!16=12 THEN inptype%=(inptype%AND&fffffffb)
9560inpptr%!256=inptype%
9570ENDPROC
9580
9590DEFPROCMultCClick
9600PROCModTitle(0)
9610IF polledb%!16=2 THEN
9620 temp%!0=wmultch%
9630 temp%!4=0
9640 SYS"Wimp_GetIconState",,temp%
9650 v=VAL($(temp%!28))
9660 IF ABS(v)>32767 THEN
9670 PROCReportErr("Only numbers between -32767 and 32767 allowed.")
9680 ELSE
9690 !mconstptr%=&10000*v
9700 SYS"Wimp_CloseWindow",,temp%
9710 mconstptr%=0
9720 ENDIF
9730ENDIF
9740IF (polledb%!16>=3)AND(polledb%!16<=13) THEN
9750 SYS"Wimp_SetCaretPosition",-1,-1
9760 temp%!0=wmultch%
9770 temp%!4=0
9780 SYS"Wimp_GetIconState",,temp%
9790 $(temp%!28)=LEFT$(STR$(2^(((polledb%!16)-2)/12)),11)
9800 SYS"Wimp_ForceRedraw",wmultch%,0,-108,390,0
9810ENDIF
9820ENDPROC
9830
9840DEFPROCWorkClick
9850CASE polledb%!8 OF
9860 WHEN 2:lastmx%=polledb%!0-64:lastmy%=polledb%!4+12:lastmenu%=workmenu%:SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
9870 WHEN 4*256:PROCClickWork
9880 WHEN 1*256:PROCAdjCWork
9890 WHEN 4*16:PROCDragWork
9900 WHEN 4:PROCDoubleWork
9910 WHEN 1:PROCAdjCWork
9920ENDCASE
9930ENDPROC
9940
9950DEFPROCClickWork
9960CASE dfunc% OF
9970 WHEN 0,1,2,3,4,5,6,7,8,9,13,14,15,16,17,18:PROCCreateObj(dfunc%,polledb%!0,polledb%!4)
9980 WHEN 10:PROCSelIcn2
9990 WHEN 12:PROCConnect
10000ENDCASE
10010ENDPROC
10020
10030DEFPROCAdjToolsC
10040CASE olddfunc% OF
10050 WHEN 0,1,2,3,4,5,6,7,8,9,13,14,15,16,17,18:PROCIconColor(0,0)
10060 WHEN 10:PROCIconColor(2,0)
10070 WHEN 12:PROCIconColor(1,0)
10080ENDCASE
10090CASE dfunc% OF
10100 WHEN 0,1,2,3,4,5,6,7,8,9,13,14,15,16,17,18:PROCIconColor(0,9)
10110 WHEN 10:PROCIconColor(2,9)
10120 WHEN 12:PROCIconColor(1,9)
10130ENDCASE
10140olddfunc%=dfunc%
10150ENDPROC
10160
10170DEFPROCIconColor(I%,C%)
10180C%=C%AND15
10190temp%!0=wtoolsh%
10200temp%!4=I%
10210temp%!8=C%<<28
10220temp%!12=15<<28
10230SYS"Wimp_SetIconState",,temp%
10240ENDPROC
10250
10260DEFPROCSelIcn
10270IF polledb%!16<>-1 THEN
10280 PROCSwapIconS(polledb%!16)
10290ELSE
10300 PROCClearSel
10310ENDIF
10320ENDPROC
10330
10340DEFPROCSelIcn2
10350IF polledb%!16<>-1 THEN PROCSwapIconS(polledb%!16)
10360ENDPROC
10370
10380DEFPROCDragWork
10390IF dfunc%=10 THEN
10400 drag%=-1
10410 temp%!0=wworkh%
10420 SYS"Wimp_GetWindowState",,temp%
10430 startlx%=polledb%!0+temp%!20-temp%!4
10440 startly%=polledb%!4+temp%!24-temp%!16
10450 startlx%=(startlx%DIV96)*96+48
10460 startly%=(startly%DIV56)*56-32
10470 newlx%=-1:newly%=-1
10480 oldlx%=-1:oldly%=-1
10490ENDIF
10500ENDPROC
10510
10520DEFPROCDoubleWork
10530CASE dfunc% OF
10540 WHEN 10:PROCSelIcn
10550 WHEN 12:PROCConnect
10560ENDCASE
10570ENDPROC
10580
10590DEFPROCAdjCWork
10600CASE dfunc% OF
10610 WHEN 10:PROCSetParam
10620 WHEN 12:PROCSwapLin
10630ENDCASE
10640ENDPROC
10650
10660DEFPROCSetParam
10670CASE iconinfo%!((polledb%!16)*32) OF
10680 WHEN 0:PROCSetVCOParam
10690 WHEN 2:PROCSetEGParam
10700 WHEN 5:PROCSetConstParam
10710 WHEN 7:PROCSetMultCParam
10720 WHEN 16:PROCSetInputParam
10730 WHEN 18:PROCSetNLDistParam
10740ENDCASE
10750ENDPROC
10760
10770DEFPROCSetNLDistParam
10780temp%!0=wnldisth%
10790SYS"Wimp_GetWindowState",,temp%
10800temp%!4=polledb%!0-256
10810temp%!8=polledb%!4-256
10820temp%!12=temp%!4+512
10830temp%!16=temp%!8+512
10840temp%!28=-1
10850IF (temp%!32)AND(1<<16) THEN SYS"Wimp_CloseWindow",,temp%
10860SYS"Wimp_OpenWindow",,temp%
10870nldistptr%=iconinfo%!((polledb%!16)*32+12)
10880nldistlastx%=-1
10890nldistlasty%=-1
10900REPEAT:MOUSE A%,B%,C%:UNTIL C%=0
10910ENDPROC
10920
10930DEFPROCSetInputParam
10940temp%!0=winputh%
10950temp%!4=1
10960SYS"Wimp_GetIconState",,temp%
10970inpptr%=iconinfo%!((polledb%!16)*32+12)
10980$(temp%!28)=$(inpptr%)
10990inptype%=inpptr%!256
11000temp%!4=8
11010SYS"Wimp_GetIconState",,temp%
11020@%=&90a
11030$(temp%!28)=STR$(inpptr%!268)
11040@%=&01020a00
11050temp%!12=1<<21
11060temp%!4=3
11070IF (inptype%AND3)=0 THEN temp%!8=1<<21 ELSE temp%!8=0
11080SYS"Wimp_SetIconState",,temp%
11090temp%!4=4
11100IF (inptype%AND3)=1 THEN temp%!8=1<<21 ELSE temp%!8=0
11110SYS"Wimp_SetIconState",,temp%
11120temp%!4=5
11130IF (inptype%AND3)=2 THEN temp%!8=1<<21 ELSE temp%!8=0
11140SYS"Wimp_SetIconState",,temp%
11150temp%!4=11
11160IF (inptype%AND4) THEN temp%!8=1<<21 ELSE temp%!8=0
11170SYS"Wimp_SetIconState",,temp%
11180temp%!4=12
11190IF (inptype%AND4) THEN temp%!8=0 ELSE temp%!8=1<<21
11200SYS"Wimp_SetIconState",,temp%
11210SYS"Wimp_GetWindowState",,temp%
11220temp%!4=polledb%!0-210
11230temp%!8=polledb%!4-100
11240temp%!12=temp%!4+430
11250temp%!16=temp%!8+212
11260temp%!28=-1
11270IF (temp%!32)AND(1<<16) THEN SYS"Wimp_CloseWindow",,temp%
11280SYS"Wimp_OpenWindow",,temp%
11290REPEAT:MOUSE A%,B%,C%:UNTIL C%=0
11300ENDPROC
11310
11320DEFPROCSetVCOParam
11330temp%!0=wvcoh%
11340SYS"Wimp_GetWindowState",,temp%
11350temp%!4=polledb%!0-342
11360temp%!8=polledb%!4-132
11370temp%!12=temp%!4+684
11380temp%!16=temp%!8+264
11390temp%!28=-1
11400IF (temp%!32)AND(1<<16) THEN SYS"Wimp_CloseWindow",,temp%
11410SYS"Wimp_OpenWindow",,temp%
11420vcoptr%=iconinfo%!((polledb%!16)*32+12)
11430vcolastx%=-1
11440vcolasty%=-1
11450REPEAT:MOUSE A%,B%,C%:UNTIL C%=0
11460ENDPROC
11470
11480DEFPROCSetEGParam
11490temp%!0=wegh%
11500SYS"Wimp_GetWindowState",,temp%
11510temp%!4=polledb%!0-512
11520temp%!8=polledb%!4-128
11530temp%!12=temp%!4+1024
11540temp%!16=temp%!8+256
11550temp%!28=-1
11560IF (temp%!32)AND(1<<16) THEN SYS"Wimp_CloseWindow",,temp%
11570SYS"Wimp_OpenWindow",,temp%
11580egptr%=iconinfo%!((polledb%!16)*32+12)
11590REPEAT:MOUSE A%,B%,C%:UNTIL C%=0
11600ENDPROC
11610
11620DEFPROCSetConstParam
11630temp%!0=wconstanth%
11640temp%!4=0
11650SYS"Wimp_GetIconState",,temp%
11660constptr%=iconinfo%!((polledb%!16)*32+12)
11670$(temp%!28)=LEFT$(STR$((!constptr%)/&10000),11)
11680SYS"Wimp_GetWindowState",,temp%
11690temp%!4=polledb%!0-180
11700temp%!8=polledb%!4-28
11710temp%!12=temp%!4+360
11720temp%!16=temp%!8+56
11730temp%!28=-1
11740IF (temp%!32)AND(1<<16) THEN SYS"Wimp_CloseWindow",,temp%
11750SYS"Wimp_OpenWindow",,temp%
11760ENDPROC
11770
11780DEFPROCSetMultCParam
11790temp%!0=wmultch%
11800temp%!4=0
11810SYS"Wimp_GetIconState",,temp%
11820mconstptr%=iconinfo%!((polledb%!16)*32+12)
11830$(temp%!28)=LEFT$(STR$((!mconstptr%)/&10000),11)
11840SYS"Wimp_GetWindowState",,temp%
11850temp%!4=polledb%!0-145
11860temp%!8=polledb%!4-54
11870temp%!12=temp%!4+390
11880temp%!16=temp%!8+108
11890temp%!28=-1
11900IF (temp%!32)AND(1<<16) THEN SYS"Wimp_CloseWindow",,temp%
11910SYS"Wimp_OpenWindow",,temp%
11920ENDPROC
11930
11940DEFPROCSwapLin
11950PROCModTitle(0)
11960IF (polledb%!16<>-1) THEN
11970 temp%!0=wworkh%
11980 SYS"Wimp_GetWindowState",,temp%
11990 slx%=polledb%!0-temp%!4+temp%!20
12000 sly%=polledb%!4-temp%!16+temp%!24
12010 sic%=polledb%!16
12020 x%=slx%-iconinfo%!(sic%*32+4)-58
12030 y%=sly%-iconinfo%!(sic%*32+8)-28
12040 si%=FNGetIO(x%,y%,sic%)
12050 IF (si%<>2) THEN
12060 eic%=iconinfo%!(sic%*32+si%*4+16)
12070 elx%=iconinfo%!(eic%*32+4)
12080 ely%=iconinfo%!(eic%*32+8)
12090 ls%=iconinfo%!(sic%*32+28)
12100 IF si%=0 THEN ls%=(ls%AND&fffffffc)OR((ls%+1)AND3) ELSE ls%=(ls%AND&fffffff3)OR((ls%+4)AND&c)
12110 iconinfo%!(sic%*32+28)=ls%
12120 IF slx%>elx% THEN SWAP slx%,elx%
12130 IF sly%>ely% THEN SWAP sly%,ely%
12140 SYS"Wimp_ForceRedraw",wworkh%,slx%-98,sly%-58,elx%+98,ely%+58
12150 ENDIF
12160ENDIF
12170ENDPROC
12180
12190DEFPROCConnect
12200PROCModTitle(0)
12210IF polledb%!16=-1 THEN
12220 VDU7
12230ELSE
12240 temp%!0=wworkh%
12250 SYS"Wimp_GetWindowState",,temp%
12260 IF startlx%=-1 THEN
12270 startlx%=polledb%!0-temp%!4+temp%!20
12280 startly%=polledb%!4-temp%!16+temp%!24
12290 startic%=polledb%!16
12300 x%=startlx%-iconinfo%!(startic%*32+4)-58
12310 y%=startly%-iconinfo%!(startic%*32+8)-28
12320 starti%=FNGetIO(x%,y%,startic%)
12330 ELSE
12340 endlx%=polledb%!0-temp%!4+temp%!20
12350 endly%=polledb%!4-temp%!16+temp%!24
12360 endic%=polledb%!16
12370 x%=endlx%-iconinfo%!(endic%*32+4)-58
12380 y%=endly%-iconinfo%!(endic%*32+8)-28
12390 endi%=FNGetIO(x%,y%,endic%)
12400 IF (starti%=endi%)OR((starti%EORendi%)=1) THEN
12410 VDU7
12420 ELSE
12430 IF endi%=2 THEN
12440 IF iconinfo%!(startic%*32+16+starti%*4)<>-1 THEN PROCReportErr("Input already connected.") ELSE iconinfo%!(startic%*32+16+starti%*4)=endic%
12450 ELSE
12460 IF iconinfo%!(endic%*32+16+endi%*4)<>-1 THEN PROCReportErr("Input already connected.") ELSE iconinfo%!(endic%*32+16+endi%*4)=startic%
12470 ENDIF
12480 IF startlx%>endlx% THEN SWAP startlx%,endlx%
12490 IF startly%>endly% THEN SWAP startly%,endly%
12500 SYS"Wimp_ForceRedraw",wworkh%,startlx%-98,startly%-58,endlx%+98,endly%+58
12510 PROCRemAllDrag
12520 ENDIF
12530 ENDIF
12540ENDIF
12550ENDPROC
12560
12570DEFFNGetIO(x%,y%,i%)
12580IF x%>0 THEN
12590 io%=2
12600ELSE
12610 IF y%>0 THEN io%=0 ELSE io%=1
12620ENDIF
12630CASE iconinfo%!(i%*32) OF
12640 WHEN 1:IF io%=1 THEN io%=0
12650 WHEN 2:io%=2
12660 WHEN 5:io%=2
12670 WHEN 7:IF io%=1 THEN io%=0
12680 WHEN 9:io%=0
12690 WHEN 16:io%=2
12700 WHEN 18:IF io%=1 THEN io%=0
12710ENDCASE
12720=io%
12730
12740DEFPROCCreateObj(obj%,xc%,yc%)
12750PROCRemAllDrag
12760PROCModTitle(0)
12770temp%!0=wworkh%
12780SYS"Wimp_GetWindowState",,temp%
12790x%=xc%-(temp%!4)+(temp%!20)
12800y%=yc%-(temp%!16)+(temp%!24)
12810x%=(x%DIV96)*96
12820y%=((y%DIV56)-1)*56
12830temp%!0=wworkh%
12840temp%!4=x%
12850temp%!8=y%
12860temp%!12=x%+92
12870temp%!16=y%+52
12880temp%!20=%00001000000000001010000000011010
12890$(temp%+24)=df$
12900SYS"Wimp_CreateIcon",,temp%TOih%
12910IF ih%>=maxicons% THEN
12920 temp%!0=wworkh%
12930 temp%!4=ih%
12940 SYS"Wimp_DeleteIcon",,temp%
12950 PROCReportErr("Too many objects.")
12960ELSE
12970 CASE obj% OF
12980 WHEN 0:l%=FNAlloc(260):IF l%<>-1 THEN PROCVCOsin(l%+4)
12990 WHEN 1:l%=-1
13000 WHEN 2:l%=FNAlloc(520):IF l%<>-1 THEN FORT%=l%+8TOl%+516STEP4:!T%=-1:NEXTT%
13010 WHEN 3:l%=-1
13020 WHEN 4:l%=-1
13030 WHEN 5:l%=FNAlloc(4):IF l%<>-1 THEN !l%=&10000
13040 WHEN 6:l%=FNAlloc(4)
13050 WHEN 7:l%=FNAlloc(4):IF l%<>-1 THEN !l%=&10000
13060 WHEN 8:l%=FNAlloc(4)
13070 WHEN 9:l%=FNAlloc(4)
13080 WHEN 13:l%=-1
13090 WHEN 14:l%=FNAlloc(4)
13100 WHEN 15:l%=-1
13110 WHEN 16:l%=-1
13120 WHEN 17:l%=-1
13130 WHEN 18:l%=-1
13140 ENDCASE
13150 IF l%=-1 THEN
13160 temp%!0=wworkh%
13170 temp%!4=ih%
13180 SYS"Wimp_DeleteIcon",,temp%
13190 PROCReportErr("No room for object.")
13200 ELSE
13210 iconinfo%!(ih%*32+0)=obj%
13220 iconinfo%!(ih%*32+4)=x%
13230 iconinfo%!(ih%*32+8)=y%
13240 iconinfo%!(ih%*32+12)=l%
13250 iconinfo%!(ih%*32+16)=-1
13260 iconinfo%!(ih%*32+20)=-1
13270 iconinfo%!(ih%*32+24)=-1
13280 iconinfo%!(ih%*32+28)=15
13290 ENDIF
13300ENDIF
13310SYS"Wimp_ForceRedraw",wworkh%,x%,y%,x%+46*2,y%+13*4
13320ENDPROC
13330
13340DEFPROCIconBClick
13350CASE polledb%!8 OF
13360 WHEN 1,4:PROCOpenWork
13370 WHEN 2:lastmx%=polledb%!0-64:lastmy%=96+176:lastmenu%=iconmenu%:SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
13380ENDCASE
13390ENDPROC
13400
13410DEFPROCOpenWork
13420polledb%!0=wworkh%
13430SYS"Wimp_GetWindowState",,polledb%
13440polledb%!28=-1
13450oldworkx%=polledb%!4
13460PROCOpen_Window
13470temp%!0=wstatsh%
13480SYS"Wimp_GetWindowState",,temp%
13490temp%!28=-1
13500SYS"Wimp_OpenWindow",,temp%
13510ENDPROC
13520
13530DEFPROCUser_Drag_Box
13540PROCDragSaved
13550ENDPROC
13560
13570DEFPROCKey_Pressed
13580IF polledb%!24=&1cc THEN
13590 SYS"Wimp_ProcessKey",&1cc
13600ELSE
13610 CASE polledb%!0 OF
13620 WHEN wconstanth%:PROCKeyConst
13630 WHEN winputh%:PROCKeyInput
13640 WHEN wmultch%:PROCKeyMultC
13650 WHEN wstatsh%:IF((polledb%!4=3)OR(polledb%!4=8))AND(polledb%!24=13) THEN SYS"Wimp_SetCaretPosition",-1,-1
13660 ENDCASE
13670ENDIF
13680ENDPROC
13690
13700DEFPROCKeyInput
13710PROCModTitle(0)
13720IF (polledb%!4=1)AND(polledb%!24=13) THEN
13730 temp%!0=winputh%
13740 temp%!4=1
13750 SYS"Wimp_GetIconState",,temp%
13760 $(inpptr%)=$(temp%!28)
13770 inpptr%!256=inptype%
13780 SYS"Wimp_CloseWindow",,temp%
13790ENDIF
13800ENDPROC
13810
13820DEFPROCKeyConst
13830PROCModTitle(0)
13840IF (polledb%!4=0)AND(polledb%!24=13) THEN
13850 temp%!0=wconstanth%
13860 temp%!4=0
13870 SYS"Wimp_GetIconState",,temp%
13880 v=VAL($(temp%!28))
13890 IF ABS(v)>32767 THEN
13900 PROCReportErr("Only numbers between -32767 and 32767 allowed.")
13910 ELSE
13920 !constptr%=&10000*v
13930 SYS"Wimp_CloseWindow",,temp%
13940 constptr%=0
13950 ENDIF
13960ENDIF
13970ENDPROC
13980
13990DEFPROCKeyMultC
14000PROCModTitle(0)
14010IF (polledb%!4=0)AND(polledb%!24=13) THEN
14020 temp%!0=wmultch%
14030 temp%!4=0
14040 SYS"Wimp_GetIconState",,temp%
14050 v=VAL($(temp%!28))
14060 IF ABS(v)>32767 THEN
14070 PROCReportErr("Only numbers between -32767 and 32767 allowed.")
14080 ELSE
14090 !mconstptr%=&10000*v
14100 SYS"Wimp_CloseWindow",,temp%
14110 mconstptr%=0
14120 ENDIF
14130ENDIF
14140ENDPROC
14150
14160DEFPROCMenu_Select
14170SYS"Wimp_GetPointerInfo",,temp%
14180oldbut%=temp%!8
14190PROCMenu_Select2
14200IF (oldbut%AND1) THEN SYS"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
14210ENDPROC
14220
14230DEFPROCMenu_Select2
14240CASE lastmenu% OF
14250 WHEN iconmenu%:PROCMSelIcon
14260 WHEN workmenu%:PROCMSelWork
14270 WHEN addmenu%:polledb%!4=polledb%!0:polledb%!8=-1:polledb%!0=0:PROCMSelWork
14280ENDCASE
14290ENDPROC
14300
14310DEFPROCMSelIcon
14320IF polledb%!0=2 THEN PROCClear2
14330IF polledb%!0=3 THEN PROCCloseDown
14340ENDPROC
14350
14360DEFPROCMSelWork
14370CASE polledb%!0 OF
14380 WHEN 0:PROCMenuAdd
14390 WHEN 1:PROCMenuSel
14400 WHEN 2:workmenu%!(28+24*1+0)=0:workmenu%!(28+24*2+0)=1:PROCMenuConnect
14410 WHEN 3:PROCMenuCalc
14420 WHEN 4:PROCSwapTools
14430ENDCASE
14440PROCAdjToolsC
14450ENDPROC
14460
14470DEFPROCSwapTools
14480tools%=NOT tools%
14490IF tools%=0 THEN
14500 temp%!0=wtoolsh%
14510 SYS"Wimp_CloseWindow",,temp%
14520 workmenu%!(28+24*4+0)=128
14530ELSE
14540 polledb%!0=wworkh%
14550 SYS"Wimp_GetWindowState",,polledb%
14560 oldworkx%=polledb%!4
14570 PROCOpen_Window
14580 workmenu%!(28+24*4+0)=128+1
14590ENDIF
14600ENDPROC
14610
14620DEFPROCMenuAdd
14630CASE polledb%!4 OF
14640 WHEN 0:dfunc%=0:df$="vco"
14650 WHEN 1:dfunc%=1:df$="noise"
14660 WHEN 2:dfunc%=2:df$="eg"
14670 WHEN 3:dfunc%=5:df$="const"
14680 WHEN 4:dfunc%=3:df$="filtlo"
14690 WHEN 5:dfunc%=4:df$="filthi"
14700 WHEN 6:dfunc%=6:df$="mult"
14710 WHEN 7:dfunc%=7:df$="multc"
14720 WHEN 8:dfunc%=8:df$="add"
14730 WHEN 9:dfunc%=13:df$="sub"
14740 WHEN 10:dfunc%=17:df$="samhold"
14750 WHEN 11:dfunc%=18:df$="nldist"
14760 WHEN 12:dfunc%=14:df$="pulse"
14770 WHEN 13:dfunc%=15:df$="delay"
14780 WHEN 14:dfunc%=9:df$="output"
14790 WHEN 15:dfunc%=16:df$="input"
14800ENDCASE
14810IF polledb%!4<>-1 THEN workmenu%!(28+24*1+0)=0:workmenu%!(28+24*2+0)=0
14820PROCRemAllDrag
14830ENDPROC
14840
14850DEFPROCMenuSel
14860CASE polledb%!4 OF
14870 WHEN -1:dfunc%=10:workmenu%!(28+24*1+0)=1:workmenu%!(28+24*2+0)=0
14880 WHEN 0:PROCAllSel
14890 WHEN 1:PROCClearSel
14900 WHEN 2:PROCSwapSel
14910 WHEN 3:PROCDeleteObjs
14920 WHEN 4:PROCDeleteInpt
14930ENDCASE
14940PROCRemAllDrag
14950ENDPROC
14960
14970DEFPROCSwapSel
14980FORT%=0TOmaxicons%-1
14990 IFiconinfo%!(T%*32)<>-1 THEN PROCSwapIconS(T%)
15000NEXTT%
15010ENDPROC
15020
15030DEFPROCClearSel
15040FORT%=0TOmaxicons%-1
15050 IFiconinfo%!(T%*32)<>-1 THEN PROCSetIconS(T%,0)
15060NEXTT%
15070ENDPROC
15080
15090DEFPROCAllSel
15100FORT%=0TOmaxicons%-1
15110 IFiconinfo%!(T%*32)<>-1 THEN PROCSetIconS(T%,1)
15120NEXTT%
15130ENDPROC
15140
15150DEFPROCDeleteObjs
15160FORT%=0TOmaxicons%-1
15170 IF(iconinfo%!(T%*32)<>-1)AND(iconinfo%!(T%*32+28))AND(1<<4) THEN
15180 IF iconinfo%!(T%*32+12)=constptr% THEN temp%!0=wconstanth%:SYS"Wimp_CloseWindow",,temp%:constptr%=0
15190 IF iconinfo%!(T%*32+12)=mconstptr% THEN temp%!0=wmultch%:SYS"Wimp_CloseWindow",,temp%:mconstptr%=0
15200 IF iconinfo%!(T%*32+12)=vcoptr% THEN temp%!0=wvcoh%:SYS"Wimp_CloseWindow",,temp%:vcoptr%=0
15210 IF iconinfo%!(T%*32+12)=egptr% THEN temp%!0=wegh%:SYS"Wimp_CloseWindow",,temp%:egptr%=0
15220 IF iconinfo%!(T%*32+12)=inpptr% THEN temp%!0=winputh%:SYS"Wimp_CloseWindow",,temp%:inpptr%=0
15230 IF iconinfo%!(T%*32+12)=nldistptr% THEN temp%!0=wnldisth%:SYS"Wimp_CloseWindow",,temp%:nldistptr%=0
15240 temp%!0=wworkh%
15250 temp%!4=T%
15260 SYS"Wimp_DeleteIcon",,temp%
15270 PROCFree(iconinfo%!(T%*32+12))
15280 iconinfo%!(T%*32+0)=-1
15290 iconinfo%!(T%*32+4)=-1
15300 iconinfo%!(T%*32+8)=-1
15310 iconinfo%!(T%*32+12)=-1
15320 iconinfo%!(T%*32+16)=-1
15330 iconinfo%!(T%*32+20)=-1
15340 iconinfo%!(T%*32+24)=-1
15350 iconinfo%!(T%*32+28)=-1
15360 FORS%=0TOmaxicons%-1
15370 IF iconinfo%!(S%*32)<>-1 THEN
15380 IF iconinfo%!(S%*32+16)=T% THEN iconinfo%!(S%*32+16)=-1
15390 IF iconinfo%!(S%*32+20)=T% THEN iconinfo%!(S%*32+20)=-1
15400 ENDIF
15410 NEXTS%
15420 ENDIF
15430NEXTT%
15440SYS"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
15450ENDPROC
15460
15470DEFPROCDeleteInpt
15480FORT%=0TOmaxicons%-1
15490 IF(iconinfo%!(T%*32)<>-1)AND(iconinfo%!(T%*32+28))AND(1<<4) THEN iconinfo%!(T%*32+16)=-1:iconinfo%!(T%*32+20)=-1:iconinfo%!(T%*32+28)=31
15500NEXTT%
15510SYS"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
15520ENDPROC
15530
15540DEFPROCSetIconS(i%,s%)
15550temp%!0=wworkh%
15560temp%!4=i%
15570temp%!8=s%<<21
15580temp%!12=1<<21
15590SYS"Wimp_SetIconState",,temp%
15600iconinfo%!(i%*32+28)=((iconinfo%!(i%*32+28))AND&ffffffef)OR(s%<<4)
15610ENDPROC
15620
15630DEFPROCSwapIconS(i%)
15640temp%!0=wworkh%
15650temp%!4=i%
15660temp%!8=1<<21
15670temp%!12=0
15680SYS"Wimp_SetIconState",,temp%
15690iconinfo%!(i%*32+28)=(iconinfo%!(i%*32+28))EOR(1<<4)
15700ENDPROC
15710
15720DEFPROCMenuConnect
15730PROCRemAllDrag
15740dfunc%=12
15750ENDPROC
15760
15770DEFPROCMenuCalc
15780PROCSendSFXED(&9abc3)
15790ENDPROC
15800
15810DEFPROCStartReceived
15820temp%!0=wstatsh%
15830temp%!4=3
15840SYS"Wimp_GetIconState",,temp%
15850samlen%=VAL($(temp%!28))
15860IF samlen%<=0 THEN samlen%=1
15870IF samlen%>polledb%!24 THEN
15880 PROCReportErr("No room.")
15890ELSE
15900 startsam%=polledb%!20
15910 PROCMenuCalc2
15920ENDIF
15930ENDPROC
15940
15950DEFPROCMenuCalc2
15960io%=-1
15970FORT%=0TOmaxicons%-1
15980 IF iconinfo%!(T%*32)=9 THEN
15990 IF io%=-1 THEN io%=T% ELSE io%=-2
16000 ENDIF
16010NEXTT%
16020CASE io% OF
16030 WHEN -1:PROCReportErr("No output!")
16040 WHEN -2:PROCReportErr("More than one output!")
16050 OTHERWISE:PROCCalcOK(io%)
16060ENDCASE
16070ENDPROC
16080
16090DEFPROCCalcOK(i%)
16100temp%!0=wstatsh%
16110temp%!4=3
16120SYS"Wimp_GetIconState",,temp%
16130samlen%=VAL($(temp%!28))
16140IF samlen%<=0 THEN samlen%=1
16150IF startsam%<>-1 THEN
16160 e%=0:T%=0
16170 WHILE (T%<maxicons%)AND(e%=0)
16180 CASE iconinfo%!(T%*32) OF
16190 WHEN 0:PROCInitVCO(iconinfo%!(T%*32+12))
16200 WHEN 2:PROCInitEG(iconinfo%!(T%*32+12),samlen%)
16210 WHEN 3:PROCInitFilt(iconinfo%!(T%*32+12))
16220 WHEN 4:PROCInitFilt(iconinfo%!(T%*32+12))
16230 WHEN 14:PROCInitPulse(iconinfo%!(T%*32+12))
16240 WHEN 15:PROCInitDelay(iconinfo%!(T%*32+12))
16250 WHEN 16:e%=FNInitInput(iconinfo%!(T%*32+12))
16260 WHEN 17:PROCInitSamHold(iconinfo%!(T%*32+12))
16270 ENDCASE
16280 T%+=1
16290 ENDWHILE
16300 IF e%<>0 THEN
16310 PROCReportErr("Can't claim input memory")
16320 PROCCloseInput
16330 SYS"Hourglass_Off"
16340 ELSE
16350 SYS"Hourglass_On"
16360 !samtyp=samtype%
16370 A%=iconinfo%!(i%*32+16)
16380 B%=iconinfo%
16390 C%=startsam%
16400 D%=samlen%
16410 CALLcalcall
16420 SYS"Hourglass_Off"
16430 PROCCloseInput
16440 temp%!20=samlen%
16450 temp%!24=samtype%
16460 $(temp%+28)=sheetname$
16470 PROCSendSFXED(&9abc4)
16480 startsam%=-1
16490 ENDIF
16500ENDIF
16510ENDPROC
16520
16530DEFPROCInitVCO(l%)
16540!l%=0
16550ENDPROC
16560
16570DEFPROCInitEG(l%,k%)
16580l%!0=0
16590l%!4=(65536*512)/samlen%
16600ENDPROC
16610
16620DEFPROCInitFilt(l%)
16630!l%=0
16640ENDPROC
16650
16660DEFPROCInitDelay(l%)
16670FORJ%=0TO252STEP4:l%!J%=0:NEXTJ%
16680ENDPROC
16690
16700DEFPROCInitPulse(l%)
16710!l%=0
16720ENDPROC
16730
16740DEFPROCInitSamHold(l%)
16750!l%=0
16760ENDPROC
16770
16780DEFFNInitInput(l%)
16790LOCAL ERROR
16800ON ERROR LOCAL PROCReportErr(REPORT$):il%=1:GOTO 16890
16810IF $l%="" THEN
16820 PROCReportErr("Warning: no input name given.")
16830 il%=1
16840ELSE
16850 f%=OPENIN($l%)
16860 IF f%=0 THEN il%=1:PROCReportErr("Warning: can't load input.") ELSE il%=EXT#f%:CLOSE#f%
16870ENDIF
16880IF il%<=0 THEN il%=1
16890SYS"XOS_Module",6,,,(il%+3)AND&fffffffc TO ,,s%;v%
16900IF v%AND1 THEN
16910 l%!272=-1
16920 error%=-1
16930ELSE
16940 l%!260=(&1000*il%)/samlen%
16950 l%!264=0
16960 l%!268=il%
16970 l%!272=s%
16980 l%!276=0
16990 IF il%>1 THEN OSCLI("LOAD "+$l%+" "+STR$~s%)
17000 error%=0
17010ENDIF
17020=error%
17030
17040DEFPROCCloseInput
17050FORT%=0TOmaxicons%
17060 IF iconinfo%!(T%*32)=16 THEN
17070 f%=iconinfo%!(T%*32+12)
17080 IF f%!272<>-1 THEN SYS"XOS_Module",7,,f%!272:f%!272=-1
17090 ENDIF
17100NEXTT%
17110ENDPROC
17120
17130DEFPROCUser_Message
17140FORT%=0TO255STEP4:messbk%!T%=polledb%!T%:NEXTT%
17150m%=polledb%!16
17160CASE m% OF
17170 WHEN 0:PROCQuit
17180 WHEN 1:PROCDataSave
17190 WHEN 2:PROCSaveAck
17200 WHEN 3:PROCDataLoad
17210 WHEN 5:PROCDataOpen
17220 WHEN &9abc5:PROCStartReceived
17230ENDCASE
17240ENDPROC
17250
17260DEFPROCCloseDown
17270IF sheetsaved%=-1 THEN
17280 PROCQuit
17290ELSE
17300 A%=FNConfirm("Sheet has been modified. Are you sure you want to quit?")
17310 IF A%=1 THEN PROCQuit
17320ENDIF
17330ENDPROC
17340
17350DEFPROCQuit
17360SYS"XOS_SetVarVal","SFXM_TaskHandle","",-1,0,0
17370SYS"Hourglass_Smash"
17380SYS"Wimp_BaseOfSprites"TO,S%
17390SYS"XOS_SpriteOp",25+256,S%,"vco":SYS"XOS_SpriteOp",25+256,S%,"eg"
17400SYS"XOS_SpriteOp",25+256,S%,"noise":SYS"XOS_SpriteOp",25+256,S%,"filtlo"
17410SYS"XOS_SpriteOp",25+256,S%,"filthi":SYS"XOS_SpriteOp",25+256,S%,"const"
17420SYS"XOS_SpriteOp",25+256,S%,"add":SYS"XOS_SpriteOp",25+256,S%,"mult"
17430SYS"XOS_SpriteOp",25+256,S%,"output":SYS"XOS_SpriteOp",25+256,S%,"sub"
17440SYS"XOS_SpriteOp",25+256,S%,"delay":SYS"XOS_SpriteOp",25+256,S%,"nldist"
17450SYS"XOS_SpriteOp",25+256,S%,"input":SYS"XOS_SpriteOp",25+256,S%,"multc"
17460SYS"XOS_SpriteOp",25+256,S%,"pulse":SYS"XOS_SpriteOp",25+256,S%,"samhold"
17470SYS"XOS_SpriteOp",25+256,S%,"place":SYS"XOS_SpriteOp",25+256,S%,"conn"
17480SYS"XOS_SpriteOp",25+256,S%,"sel":SYS"XOS_SpriteOp",25+256,S%,"selall"
17490SYS"XOS_SpriteOp",25+256,S%,"selclr":SYS"XOS_SpriteOp",25+256,S%,"selswap"
17500SYS"XOS_SpriteOp",25+256,S%,"del":SYS"XOS_SpriteOp",25+256,S%,"deli"
17510SYS"XOS_SpriteOp",25+256,S%,"calc"
17520SYS"Wimp_CloseDown",taskh%,&4b534154
17530SYS"OS_Exit"
17540ENDPROC
17550
17560DEFFNGetSFXEDH
17570SYS"XOS_ReadVarVal","SFXED_TaskHandle",temp2%,16,0,0TO,,A%
17580temp2%?A%=13
17590IF A%=0 THEN =0 ELSE =EVAL("&"+$temp2%)
17600
17610DEFPROCInit
17620SYS "OS_GetEnv" TO EnvStr$
17630I%=1:S%=0
17640REPEAT
17650 IF MID$(EnvStr$,I%,1)=" " THEN S%+=1
17660 I%+=1
17670UNTIL (S%=3)OR(MID$(EnvStr$,I%,1)="")
17680lf$=MID$(EnvStr$,I%)
17690@%=&01020a00
17700maxicons%=100
17710DIM temp% 1000
17720DIM temp2% 1000
17730DIM messbk% 512
17740SYS"Wimp_Initialise",200,&4b534154,"SFXM"TOversion%,taskh%
17750IF version%<200 THEN SYS"Wimp_CloseDown",taskh%,&4b534154:SYS"OS_Exit"
17760SYS"XOS_ReadVarVal","SFXM_TaskHandle",temp2%,16,0,0TO,,A%
17770IF A%<>0 THEN
17780 PROCReportErr("SFXM already running.")
17790 SYS"Wimp_CloseDown",taskh%,&4b534154
17800 SYS"OS_Exit"
17810ENDIF
17820SYS"Hourglass_On"
17830SYS"XOS_SetVarVal","SFXM_TaskHandle",STR$~taskh%,8,0,0
17840SYS"Wimp_SpriteOp",11,,"<SFXM$Dir>.Sprites"
17850H%=FNGetSFXEDH
17860IF H%=0 THEN OSCLI("*WimpTask Run <SFXED$Dir>.^.!SFXED")
17870SYS"Wimp_OpenTemplate",,"<SFXM$Dir>.Templates"
17880DIM pixtrans% 16
17890DIM scalef% 16
17900DIM weg% 1000
17910DIM wvco% 1000
17920DIM wnldist% 1000
17930DIM wabout% 1000
17940DIM wsaveassh% 1000
17950DIM wconstant% 1000
17960DIM wwork% 1000
17970DIM wtools% 2000
17980DIM wstats% 1000
17990DIM wmultc% 1000
18000DIM winput% 1000
18010DIM winst% 1000
18020DIM icbuf% 4000
18030icbufn%=icbuf%
18040DIM tname% 16
18050PROCLoadTemp(weg%,"eg")
18060PROCLoadTemp(wvco%,"vco")
18070PROCLoadTemp(wnldist%,"nldist")
18080PROCLoadTemp(wabout%,"about")
18090PROCLoadTemp(wsaveassh%,"saveassh")
18100PROCLoadTemp(wconstant%,"constant")
18110PROCLoadTemp(wwork%,"work")
18120PROCLoadTemp(wtools%,"tools")
18130PROCLoadTemp(wstats%,"stats")
18140PROCLoadTemp(wmultc%,"multc")
18150PROCLoadTemp(winput%,"input")
18160PROCLoadTemp(winst%,"inst")
18170SYS"Wimp_CloseTemplate"
18180SYS"Wimp_CreateWindow",,weg%TOwegh%
18190SYS"Wimp_CreateWindow",,wvco%TOwvcoh%
18200SYS"Wimp_CreateWindow",,wnldist%TOwnldisth%
18210SYS"Wimp_CreateWindow",,wabout%TOwabouth%
18220SYS"Wimp_CreateWindow",,wsaveassh%TOwsaveasshh%
18230SYS"Wimp_CreateWindow",,wconstant%TOwconstanth%
18240SYS"Wimp_CreateWindow",,wwork%TOwworkh%
18250SYS"Wimp_CreateWindow",,wtools%TOwtoolsh%
18260SYS"Wimp_CreateWindow",,wstats%TOwstatsh%
18270SYS"Wimp_CreateWindow",,wmultc%TOwmultch%
18280SYS"Wimp_CreateWindow",,winput%TOwinputh%
18290SYS"Wimp_CreateWindow",,winst%TOwinsth%
18300PROCMenus
18310DIM bicon% 32
18320bicon%!0=-1
18330bicon%!4=0
18340bicon%!8=0
18350bicon%!12=68
18360bicon%!16=68
18370bicon%!20=%0011000000011010
18380$(bicon%+24)="!sfxm"
18390SYS"Wimp_CreateIcon",,bicon%TObiconh%
18400DIM iconinfo% maxicons%*32
18410FORT%=0TOmaxicons%*32-4:iconinfo%!T%=-1:NEXTT%
18420olddfunc%=10:dfunc%=10:df$="vco"
18430olddx%=-1:olddy%=-1:newdx%=-1:newdy%=-1
18440oldlx%=-1:oldly%=-1:newlx%=-1:newly%=-1
18450startlx%=-1:startly%=0:startic%=-1
18460starti%=-1:endi%=-1
18470drag%=0
18480dragx%=-1
18490dragy%=-1
18500constptr%=0
18510mconstptr%=0
18520vcoptr%=0
18530egptr%=0
18540nldistptr%=0
18550nldistlastx%=-1
18560nldistlasty%=-1
18570vcolastx%=-1
18580vcolasty%=-1
18590samptrl%=-1
18600samptrr%=-1
18610startsam%=-1
18620samlen%=-1
18630zoomfr=1
18640okt%=1
18650savetype%=-1
18660inpptr%=0
18670nopoll%=0
18680sheetsaved%=-1
18690filetoload$="":filetoload2$=""
18700sheetname$="<Untitled>"
18710oldworkx%=-1
18720tools%=-1
18730PROCAdjToolsC
18740DIM dragb% 56
18750DIM litrans%(maxicons%)
18760samtype%=0
18770PROCAssem
18780DIM freepool% maxicons%*540
18790A%=freepool%
18800B%=maxicons%*540
18810CALL initmem
18820DIM linlog% 8192
18830*VOLUME 127
18840SYS"Sound_Configure",0,0,0,0,0TO,,,T%
18850FORS%=0TO8188STEP4:linlog%!S%=!((T%!8)+S%):NEXTS%
18860!linlog=linlog%
18870DIM lintable% 1024
18880!lintab=lintable%
18890FORT%=0TO127
18900 lintable%!(T%*8)=INT(0.5+267.33*2^(T%/16))
18910 lintable%!(T%*8+4)=-lintable%!(T%*8)
18920NEXTT%
18930DIM pollb% 256
18940polledb%=pollb%
18950IF lf$<>"" THEN
18960 $(polledb%+44)=lf$
18970 polledb%!40=&78a
18980 PROCLoadSheet
18990ENDIF
19000PROCInst
19010SYS"Hourglass_Off"
19020ENDPROC
19030
19040DEFPROCModTitle(ss%)
19050LOCAL ti$
19060IF ss%=sheetsaved% THEN ENDPROC
19070ti$=$(wwork%!72)
19080IF INSTR(ti$," ")<>0 THEN ti$=LEFT$(ti$,INSTR(ti$," ")-1)
19090IF ss%=0 THEN ti$=ti$+" *"
19100$(wwork%!72)=ti$
19110temp%!0=wworkh%
19120SYS"Wimp_GetWindowOutline",,temp%
19130SYS"Wimp_ForceRedraw",-1,temp%!4,temp%!16-40,temp%!12,temp%!16
19140sheetsaved%=ss%
19150ENDPROC
19160
19170DEFPROCClear2
19180IF sheetsaved%=-1 THEN
19190 PROCClear
19200ELSE
19210 A%=FNConfirm("Sheet has been modified. Are you sure you want to do this?")
19220 IF A%=1 THEN PROCClear
19230ENDIF
19240ENDPROC
19250
19260DEFPROCClear
19270temp2%!0=wconstanth%
19280SYS"Wimp_CloseWindow",,temp2%
19290temp2%!0=wmultch%
19300SYS"Wimp_CloseWindow",,temp2%
19310temp2%!0=wvcoh%
19320SYS"Wimp_CloseWindow",,temp2%
19330temp2%!0=wegh%
19340SYS"Wimp_CloseWindow",,temp2%
19350temp2%!0=winputh%
19360SYS"Wimp_CloseWindow",,temp2%
19370temp2%!0=wnldisth%
19380SYS"Wimp_CloseWindow",,temp2%
19390temp2%!0=wstatsh%
19400temp2%!4=8
19410SYS"Wimp_GetIconState",,temp2%
19420$(!(temp2%+28))=""
19430SYS"Wimp_ForceRedraw",wstatsh%,0,-4000,4000,0
19440SYS"Wimp_SetCaretPosition",-1,-1
19450temp2%!0=wworkh%
19460FORT%=0TOmaxicons%-1
19470 IF iconinfo%!(T%*32)<>-1 THEN temp2%!4=T%:SYS"Wimp_DeleteIcon",,temp2%
19480NEXTT%
19490constptr%=0
19500mconstptr%=0
19510vcoptr%=0
19520egptr%=0
19530vcolastx%=-1
19540vcolasty%=-1
19550FORT%=0TOmaxicons%*32-4STEP4:iconinfo%!T%=-1:NEXTT%
19560A%=freepool%
19570B%=maxicons%*540
19580CALL initmem
19590$(wwork%!72)="<Untitled>"
19600sheetname$="<Untitled>"
19610temp%!0=wworkh%
19620SYS"Wimp_GetWindowOutline",,temp%
19630SYS"Wimp_ForceRedraw",-1,temp%!4,temp%!16-44,temp%!12,temp%!16
19640SYS"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
19650sheetsaved%=-1
19660ENDPROC
19670
19680DEFPROCLoadTemp(RETURN start%,name$)
19690$tname%=name$
19700SYS"Wimp_LoadTemplate",,start%,icbufn%,icbuf%+4000,-1,tname%,0TO,start%,icbufn%,,,,next%
19710IF next%=0 THEN SYS"Wimp_CloseTemplate":ERROR 0,"Template "+name$+" not found"
19720ENDPROC
19730
19740DEFPROCReportErr(a$)
19750temp2%!0=0
19760$(temp2%+4)=a$
19770SYS"Wimp_ReportError",temp2%,1,"SFXM"
19780ENDPROC
19790
19800DEFFNConfirm(a$)
19810temp2%!0=0
19820$(temp2%+4)=a$
19830SYS"Wimp_ReportError",temp2%,%10011,"Confirm"TO,A%
19840=A%
19850
19860DEFFNinterr(a$)
19870temp2%!0=0
19880$(temp2%+4)=a$
19890SYS"Wimp_ReportError",temp2%,%10011,"SFXM Internal Error."TO,A%
19900=A%
19910
19920REM titlestring, width in chars.
19930DEFFNMenuHead(t$,w%)
19940LOCAL a%
19950a%=Menus%+MenuPtr%
19960$a%=t$
19970a%?12=7
19980a%?13=2
19990a%?14=7
20000a%?15=0
20010a%!16=w%*16
20020a%!20=44
20030a%!24=0
20040MenuPtr%+=28
20050=a%
20060
20070REM itemtext, flags, indirected, val. string, max. length
20080DEFPROCAddItem(i$,f%,i%,v$,ml%)
20090LOCAL a%
20100a%=Menus%+MenuPtr%
20110IF (LEN(i$)>11)AND(i%=0) THEN i%=-1:ml%=LEN(i$)+1
20120a%!0=f%AND255
20130a%!4=-1
20140IF f%AND256 THEN a%!8=%00000111010000011001000000010001 ELSE a%!8=%00000111000000011001000000010001
20150IF i% THEN
20160 a%!8+=256
20170 $(MenuData%+MenuDataPtr%)=i$
20180 a%!12=MenuData%+MenuDataPtr%
20190 MenuDataPtr%+=LEN(i$)+1
20200 $(MenuData%+MenuDataPtr%)=v$
20210 a%!16=MenuData%+MenuDataPtr%
20220 MenuDataPtr%+=LEN(v$)+1
20230 a%!20=ml%
20240ELSE
20250 $(a%+12)=i$
20260ENDIF
20270MenuPtr%+=24
20280ENDPROC
20290
20300REM menu, item, submenupointer
20310DEFPROCAddSubMenu(m%,i%,p%)
20320m%!(28+24*i%+4)=p%
20330ENDPROC
20340
20350DEFPROCMenus
20360DIM MenuData% 2000
20370DIM Menus% 2000
20380MenuDataPtr%=0
20390MenuPtr%=0
20400iconmenu%=FNMenuHead("SFXM",8)
20410PROCAddItem("Info",0,0,"",0)
20420PROCAddItem("Save",256,0,"",0)
20430PROCAddItem("Restart",0,0,"",0)
20440PROCAddItem("Quit",128,0,"",0)
20450PROCAddSubMenu(iconmenu%,0,wabouth%)
20460PROCAddSubMenu(iconmenu%,1,wsaveasshh%)
20470
20480workmenu%=FNMenuHead("SFXM",11)
20490PROCAddItem("Place",0,0,"",0)
20500PROCAddItem("Select",0,0,"",0)
20510PROCAddItem("Connection",0,0,"",0)
20520PROCAddItem("Calculate",0,0,"",0)
20530PROCAddItem("Show Tools",129,0,"",0)
20540addmenu%=FNMenuHead("Place",20)
20550PROCAddItem("Oscillator",0,0,"",0)
20560PROCAddItem("Noise Generator",256,0,"",0)
20570PROCAddItem("Envelope Generator",0,0,"",0)
20580PROCAddItem("Constant Generator",0,0,"",0)
20590PROCAddItem("Low Pass Filter",256,0,"",0)
20600PROCAddItem("High Pass Filter",256,0,"",0)
20610PROCAddItem("Multiplier",0,0,"",0)
20620PROCAddItem("Constant Multiplier",0,0,"",0)
20630PROCAddItem("Adder",0,0,"",0)
20640PROCAddItem("Subtractor",256,0,"",0)
20650PROCAddItem("Sample & Hold",256,0,"",0)
20660PROCAddItem("General Function",256,0,"",0)
20670PROCAddItem("Pulse Generator",0,0,"",0)
20680PROCAddItem("Delay Line",256,0,"",0)
20690PROCAddItem("Output",0,0,"",0)
20700PROCAddItem("Input",256+128,0,"",0)
20710selmenu%=FNMenuHead("Select",15)
20720PROCAddItem("All",0,0,"",0)
20730PROCAddItem("Clear",0,0,"",0)
20740PROCAddItem("Swap",0,0,"",0)
20750PROCAddItem("Delete Objects",0,0,"",0)
20760PROCAddItem("Delete Inputs",128,0,"",0)
20770PROCAddSubMenu(workmenu%,0,addmenu%)
20780PROCAddSubMenu(workmenu%,1,selmenu%)
20790ENDPROC
20800
20810DEFPROCRedrawLines(x1%,y1%,x2%,y2%)
20820temp2%!0=wworkh%
20830SYS"Wimp_GetWindowState",,temp2%
20840SYS"Wimp_SetColour",7
20850A%=temp2%!4-temp2%!20
20860B%=temp2%!16-temp2%!24
20870C%=x1%
20880D%=y1%
20890E%=x2%
20900F%=y2%
20910G%=iconinfo%
20920CALLredrln
20930ENDPROC
20940
20950DEFFNAlloc(size%)
20960A%=size%
20970=USR(allocmem)
20980
20990DEFPROCFree(loc%)
21000A%=loc%
21010CALLfreemem
21020ENDPROC
21030
21040DEFPROCAssem
21050DIM code% 3000
21060FOR pass%=0TO2STEP2
21070P%=code%
21080[ opt pass%
21090
21100.redrln stmfd r13!,{r0-r12,r14}
21110 mov r7,#0
21120.chkicn add r8,r6,r7,lsl #5
21130 ldr r9,[r8,#0]
21140 cmn r9,#1
21150 beq nxticn
21160 cmpne r9,#2
21170 cmpne r9,#5
21180 beq nxticn
21190 ldr r9,[r8,#16]
21200 cmn r9,#1
21210 beq noinp1
21220 ldr r9,[r8,#28]
21230 and r9,r9,#3
21240 str r9,lintyp
21250 ldr r9,[r8]
21260 cmp r9,#0
21270 cmpne r9,#3
21280 cmpne r9,#4
21290 cmpne r9,#6
21300 cmpne r9,#8
21310 cmpne r9,#13
21320 cmpne r9,#14
21330 cmpne r9,#15
21340 cmpne r9,#17
21350 ldr r9,[r8,#4]
21360 sub r9,r9,#2
21370 ldr r10,[r8,#8]
21380 addeq r10,r10,#9*4
21390 addne r10,r10,#6*4
21400 ldr r11,[r8,#16]
21410 add r11,r6,r11,lsl #5
21420 ldr r12,[r11,#8]
21430 ldr r11,[r11,#4]
21440 add r11,r11,#46*2
21450 add r12,r12,#6*4
21460 bl ctline
21470.noinp1 ldr r9,[r8,#20]
21480 cmn r9,#1
21490 beq noinp2
21500 ldr r9,[r8,#28]
21510 mov r9,r9,lsr #2
21520 and r9,r9,#3
21530 str r9,lintyp
21540 ldr r9,[r8,#4]
21550 sub r9,r9,#2
21560 ldr r10,[r8,#8]
21570 add r10,r10,#3*4
21580 ldr r11,[r8,#20]
21590 add r11,r6,r11,lsl #5
21600 ldr r12,[r11,#8]
21610 ldr r11,[r11,#4]
21620 add r11,r11,#46*2
21630 add r12,r12,#6*4
21640 bl ctline
21650.noinp2
21660.nxticn add r7,r7,#1
21670 cmp r7,#maxicons%
21680 blo chkicn
21690 ldmfd r13!,{r0-r12,pc}
21700
21710.lintyp equd 0
21720
21730.ctline add r9,r9,r0
21740 add r10,r10,r1
21750 add r11,r11,r0
21760 add r12,r12,r1
21770 stmfd r13!,{r0-r8,r14}
21780 mov r0,#4
21790 mov r1,r9
21800 mov r2,r10
21810 swi "OS_Plot"
21820 ldr r3,lintyp
21830 mov r0,#5
21840 cmp r3,#3
21850 addeq r1,r9,r11
21860 moveq r1,r1,asr #1
21870 moveq r2,r10
21880 cmp r3,#2
21890 moveq r1,r9
21900 addeq r2,r10,r12
21910 moveq r2,r2,asr #1
21920 cmp r3,#1
21930 moveq r1,r11
21940 moveq r2,r10
21950 cmp r3,#0
21960 moveq r1,r9
21970 moveq r2,r12
21980 swi "OS_Plot"
21990 ldr r3,lintyp
22000 mov r0,#5
22010 cmp r3,#3
22020 addeq r1,r9,r11
22030 moveq r1,r1,asr #1
22040 moveq r2,r12
22050 cmp r3,#2
22060 moveq r1,r11
22070 addeq r2,r10,r12
22080 moveq r2,r2,asr #1
22090 cmp r3,#1
22100 cmpne r3,#0
22110 moveq r1,r11
22120 moveq r2,r12
22130 swi "OS_Plot"
22140 ldr r3,lintyp
22150 cmp r3,#0
22160 cmpne r3,#1
22170 ldmeqfd r13!,{r0-r8,pc}
22180 mov r0,#5
22190 mov r1,r11
22200 mov r2,r12
22210 swi "OS_Plot"
22220 ldmfd r13!,{r0-r8,pc}
22230.samtyp equd 0
22240
22250.initmem ;r0=MemStart, r1=Size
22260 stmfd r13!,{r0-r3,r14}
22270 add r0,r0,#3
22280 bic r0,r0,#3
22290 bic r1,r1,#3
22300 str r0,memstart
22310 mvn r2,#0
22320 str r2,[r0,#4]
22330 sub r2,r1,#24
22340 str r2,[r0,#8]
22350 add r2,r0,r1
22360 str r2,[r0]
22370 add r3,r0,#12
22380 str r3,[r2,#-8]
22390 mvn r3,#0
22400 str r3,[r2,#-12]
22410 mov r3,#0
22420 str r3,[r2,#-4]
22430 ldmfd r13!,{r0-r3,pc}
22440
22450.allocmem ;r0=RequiredSize -> r0=PtrToFreeMem (-1=failed)
22460 cmp r0,#0
22470 mvnle r0,#0
22480 movle pc,r14
22490 stmfd r13!,{r1-r4,r14}
22500 add r0,r0,#3
22510 bic r0,r0,#3
22520 add r3,r0,#12
22530 ldr r1,memstart
22540 add r1,r1,#12
22550.alloc1 ldr r2,[r1,#-4]
22560 cmp r2,r0
22570 bmi alloc4
22580 cmp r2,r3
22590 ble alloc3
22600 add r0,r0,#12
22610 b alloc2
22620.alloc4 ldr r1,[r1,#-12]
22630 cmn r1,#1
22640 bne alloc1
22650 mvn r0,#0
22660 ldmfd r13!,{r1-r4,pc}
22670.alloc3 mov r0,r1
22680 mov r2,#0
22690 str r2,[r1,#-4]
22700 ldmfd r13!,{r1-r4,pc}
22710.alloc2 add r4,r1,r0
22720 sub r2,r2,r0
22730 ldr r3,[r1,#-12]
22740 str r3,[r4,#-12]
22750 str r2,[r4,#-4]
22760 str r1,[r4,#-8]
22770 str r4,[r1,#-12]
22780 cmn r3,#1
22790 strne r4,[r3,#-8]
22800 mov r4,#0
22810 str r4,[r1,#-4]
22820 mov r0,r1
22830 ldmfd r13!,{r1-r4,pc}
22840
22850.freemem ;r0=PtrToAllocatedMem
22860 stmfd r13!,{r0-r3,r14}
22870 ldr r1,[r0,#-12]
22880 sub r2,r1,r0
22890 sub r2,r2,#12
22900 ldr r3,[r1,#-4]
22910 cmp r3,#0
22920 beq freem1
22930 add r2,r2,r3
22940 add r2,r2,#12
22950 ldr r1,[r1,#-12]
22960 cmn r1,#1
22970 strne r0,[r1,#-8]
22980.freem1 str r1,[r0,#-12]
22990 str r2,[r0,#-4]
23000 ldr r1,[r0,#-8]
23010 cmn r1,#1
23020 beq freem2
23030 ldr r3,[r1,#-4]
23040 cmp r3,#0
23050 beq freem2
23060 add r2,r2,r3
23070 add r2,r2,#12
23080 str r2,[r1,#-4]
23090 ldr r2,[r0,#-12]
23100 str r2,[r1,#-12]
23110 cmn r2,#1
23120 strne r1,[r2,#-8]
23130.freem2 ldmfd r13!,{r0-r3,pc}
23140
23150.memstart
23160 equd 0
23170
23180.redrawvco
23190 stmfd r13!,{r0-r12,r14}
23200 add r8,r0,#166
23210 add r9,r1,#4
23220 add r10,r2,#4
23230 mov r11,#0
23240.rvcolp mov r0,#69
23250 mov r1,r11,lsl #1
23260 ldrb r2,[r10,r11]
23270 mov r2,r2,lsl #24
23280 mov r2,r2,asr #24
23290 add r2,r2,#128
23300 add r1,r1,r8
23310 add r2,r2,r9
23320 swi "OS_Plot"
23330 add r11,r11,#1
23340 cmp r11,#256
23350 bne rvcolp
23360 ldmfd r13!,{r0-r12,pc}
23370.redrawnld
23380 stmfd r13!,{r0-r12,r14}
23390 mov r8,r0
23400 mov r9,r1
23410 mov r10,r2
23420 mov r11,#0
23430.rnldlp mov r0,#69
23440 mov r1,r11,lsl #1
23450 ldrb r2,[r10,r11]
23460 mov r2,r2,lsl #1
23470 add r1,r1,r8
23480 add r2,r2,r9
23490 swi "OS_Plot"
23500 add r11,r11,#1
23510 cmp r11,#256
23520 bne rnldlp
23530 ldmfd r13!,{r0-r12,pc}
23540.redraweg
23550 stmfd r13!,{r0-r12,r14}
23560 mov r8,r0
23570 mov r9,r1
23580 add r10,r2,#8
23590 mov r11,#0
23600.rvcolp mov r0,#69
23610 mov r1,r11,lsl #1
23620 ldrb r2,[r10,r11]
23630 add r1,r1,r8
23640 add r2,r2,r9
23650 swi "OS_Plot"
23660 add r11,r11,#1
23670 cmp r11,#512
23680 bne rvcolp
23690 ldmfd r13!,{r0-r12,pc}
23700
23710.calcall
23720 cmp r2,#0
23730 movmi pc,r14
23740 cmp r3,#0
23750 movmi pc,r14
23760 stmfd r13!,{r0-r12,r14}
23770 mov r8,r0
23780 mov r9,r2
23790 mov r10,r3
23800 mov r7,r3
23810 ldr r11,samtyp
23820 ldr r12,linlog
23830.callup mov r0,#0
23840 mov r2,r1
23850.clloop ldr r3,[r2,#28]
23860 bic r3,r3,#&80000000
23870 str r3,[r2,#28]
23880 add r2,r2,#32
23890 add r0,r0,#1
23900 cmp r0,#maxicons%
23910 bne clloop
23920 mov r0,r8
23930 bl getout
23940 cmp r0,#&10000
23950 movpl r0,#&ff00
23960 orrpl r0,r0,#&ff
23970 cmn r0,#&10000
23980 movle r0,#&ff000000
23990 orrle r0,r0,#&ff0000
24000 cmp r11,#2
24010 movne r0,r0,asr #9
24020 moveq r0,r0,lsl #15
24030 ldreqb r0,[r12,r0,lsr #19]
24040 cmp r11,#1
24050 addeq r0,r0,#128
24060 strb r0,[r9],#1
24070 tst r10,#&7f
24080 bne nohgup
24090 stmfd r13!,{r0-r2}
24100 mov r0,#129
24110 mov r1,#0
24120 mov r2,#0
24130 swi "OS_Byte"
24140 cmp r2,#0
24150 cmpeq r1,#&1b
24160 ldmfd r13!,{r0-r2}
24170 beq escp
24180 stmfd r13!,{r7-r12}
24190 subs r10,r7,r10
24200 movmi r10,#0
24210 mov r11,r10,lsl #2
24220 add r11,r11,r10,lsl #5
24230 add r11,r11,r10,lsl #6
24240 mov r10,r7
24250 bl div32
24260 cmp r12,#0
24270 movmi r12,#0
24280 cmp r12,#99
24290 movpl r12,#99
24300 mov r0,r12
24310 swi "Hourglass_Percentage"
24320 ldmfd r13!,{r7-r12}
24330.nohgup subs r10,r10,#1
24340 bne callup
24350 ldmfd r13!,{r0-r12,pc}
24360.escp mov r0,#124
24370 swi "OS_Byte"
24380 ldmfd r13!,{r0-r12,pc}
24390
24400.linlog equd 0
24410;r0=icon
24420;r1=iconinfo%
24430.getout stmfd r13!,{r1-r3,r12,r14}
24440 cmp r0,#0
24450 movmi r0,#0
24460 ldmmifd r13!,{r1-r3,r12,pc}
24470 add r12,r1,r0,lsl #5
24480 ldr r3,[r12,#28]
24490 tst r3,#&80000000
24500 orr r3,r3,#&80000000
24510 str r3,[r12,#28]
24520 ldrne r0,[r12,#24]
24530 ldmnefd r13!,{r1-r3,r12,pc}
24540 mov r2,r0,lsl #5
24550 ldr r2,[r1,r2]
24560 cmp r2,#13
24570 moveq r2,#9
24580 cmp r2,#14
24590 moveq r2,#10
24600 cmp r2,#15
24610 moveq r2,#11
24620 cmp r2,#16
24630 moveq r2,#12
24640 cmp r2,#17
24650 moveq r2,#13
24660 cmp r2,#18
24670 moveq r2,#14
24680 cmp r2,#0
24690 movmi r0,#0
24700 ldmmifd r13!,{r1-r3,r12,pc}
24710 cmp r2,#15
24720 movpl r0,#0
24730 ldmplfd r13!,{r1-r3,r12,pc}
24740 adr r3,jmptab
24750 adr r14,return
24760 ldr pc,[r3,r2,lsl #2]
24770.return str r0,[r12,#24]
24780 ldmfd r13!,{r1-r3,r12,pc}
24790
24800.jmptab equd getOvco ;0
24810 equd getOnoise ;1
24820 equd getOeg ;2
24830 equd getOlpass ;3
24840 equd getOhpass ;4
24850 equd getOconst ;5
24860 equd getOmult ;6
24870 equd getOmultc ;7
24880 equd getOadd ;8
24890 equd getOsub ;13
24900 equd getOpulse ;14
24910 equd getOdelay ;15
24920 equd getOinput ;16
24930 equd getOsh ;17
24940 equd getOnld ;18
24950
24960.getOvco
24970 stmfd r13!,{r1-r5,r14}
24980 add r2,r1,r0,lsl #5
24990 ldr r0,[r2,#16]
25000 bl getout
25010 mov r5,r0
25020 ldr r0,[r2,#20]
25030 bl getout
25040 ldr r2,[r2,#12]
25050 ldr r3,[r2]
25060 tst r3,#&80000000
25070 bic r3,r3,#&ff000000
25080 bne noresv
25090 cmp r0,#0
25100 movpl r3,#0
25110.noresv add r3,r3,#&40000
25120 ldrb r4,[r2,r3,lsr #16]
25130 sub r3,r3,#&40000
25140 add r3,r3,r5
25150 bic r3,r3,#&ff000000
25160 cmp r0,#0
25170 orrpl r3,r3,#&80000000
25180 str r3,[r2]
25190 mov r0,r4,lsl #24
25200 mov r0,r0,asr #15
25210 ldmfd r13!,{r1-r5,pc}^
25220
25230.getOnoise
25240 stmfd r13!,{r1-r6,r14}
25250 add r2,r1,r0,lsl #5
25260 stmfd r13!,{r2}
25270 ldr r0,[r2,#16]
25280 bl getout
25290 ldmfd r13!,{r2}
25300 ldr r2,[r2,#12]
25310 ldr r3,[r2,#8]
25320 add r4,r3,r0
25330 str r4,[r2,#8]
25340 mov r4,r4,lsr #16
25350 cmp r4,r3,lsr #16
25360 beq nonewr
25370 ldr r0,[r2]
25380 ldr r4,ranxor
25390 mov r3,#16
25400 mov r5,#0
25410.randlp movs r0,r0,lsl #1
25420 eorcs r0,r0,r4
25430 and r6,r0,#&80000000
25440 orr r5,r6,r5,lsr #1
25450 subs r3,r3,#1
25460 bne randlp
25470 str r0,[r2]
25480 mov r0,r5,asr #15
25490 str r0,[r2,#4]
25500.nonewr ldr r0,[r2,#4]
25510 mov r0,r0,asl #15
25520 mov r0,r0,asr #15
25530 ldmfd r13!,{r1-r6,pc}^
25540.ranxor equd &1d872b41
25550
25560.getOeg
25570 stmfd r13!,{r1-r4,r14}
25580 add r2,r1,r0,lsl #5
25590 ldr r2,[r2,#12]
25600 ldr r3,[r2]
25610 add r3,r3,#&80000
25620 ldrb r4,[r2,r3,lsr #16]
25630 sub r3,r3,#&80000
25640 ldr r0,[r2,#4]
25650 add r3,r3,r0
25660 bic r3,r3,#&fe000000
25670 str r3,[r2]
25680 mov r0,r4,lsl #8
25690 ldmfd r13!,{r1-r4,pc}^
25700
25710.getOlpass
25720 stmfd r13!,{r1-r12,r14}
25730 add r2,r1,r0,lsl #5
25740 ldr r0,[r2,#16]
25750 bl getout
25760 mov r5,r0
25770 ldr r0,[r2,#20]
25780 bl getout
25790 cmp r0,#0
25800 movmi r0,#0
25810 cmp r0,#&10000
25820 movpl r0,#&10000
25830 mov r6,r0
25840 ldr r7,[r2,#12]
25850 mov r3,r6
25860 ldr r2,[r7]
25870 sub r2,r5,r2
25880 bl mult64
25890 ldr r2,[r7]
25900 add r0,r0,r2
25910 str r0,[r7]
25920 mov r0,r2
25930 ldmfd r13!,{r1-r12,pc}^
25940
25950.getOhpass
25960 stmfd r13!,{r1-r12,r14}
25970 add r2,r1,r0,lsl #5
25980 ldr r0,[r2,#16]
25990 bl getout
26000 mov r5,r0
26010 ldr r0,[r2,#20]
26020 bl getout
26030 cmp r0,#0
26040 movmi r0,#0
26050 cmp r0,#&10000
26060 movpl r0,#&10000
26070 mov r6,r0
26080 ldr r7,[r2,#12]
26090 mov r3,r6
26100 ldr r2,[r7]
26110 sub r2,r5,r2
26120 bl mult64
26130 ldr r2,[r7]
26140 add r0,r0,r2
26150 str r0,[r7]
26160 sub r0,r5,r2
26170 ldmfd r13!,{r1-r12,pc}^
26180
26190.getOconst
26200 stmfd r13!,{r1,r14}
26210 add r0,r1,r0,lsl #5
26220 ldr r0,[r0,#12]
26230 ldr r0,[r0]
26240 ldmfd r13!,{r1,pc}^
26250
26260.getOmult
26270 stmfd r13!,{r1-r3,r14}
26280 add r2,r1,r0,lsl #5
26290 stmfd r13!,{r2}
26300 ldr r0,[r2,#16]
26310 bl getout
26320 ldmfd r13!,{r2}
26330 stmfd r13!,{r0}
26340 ldr r0,[r2,#20]
26350 bl getout
26360 ldmfd r13!,{r2}
26370 mov r3,r0
26380 bl mult64
26390 ldmfd r13!,{r1-r3,pc}^
26400
26410.getOmultc
26420 stmfd r13!,{r1-r3,r14}
26430 add r2,r1,r0,lsl #5
26440 stmfd r13!,{r2}
26450 ldr r0,[r2,#16]
26460 bl getout
26470 ldmfd r13!,{r2}
26480 ldr r2,[r2,#12]
26490 ldr r2,[r2]
26500 mov r3,r0
26510 bl mult64
26520 ldmfd r13!,{r1-r3,pc}^
26530
26540.getOadd
26550 stmfd r13!,{r1-r2,r14}
26560 add r2,r1,r0,lsl #5
26570 stmfd r13!,{r2}
26580 ldr r0,[r2,#16]
26590 bl getout
26600 ldmfd r13!,{r2}
26610 stmfd r13!,{r0}
26620 ldr r0,[r2,#20]
26630 bl getout
26640 ldmfd r13!,{r2}
26650 add r0,r0,r2
26660 ldmfd r13!,{r1-r2,pc}^
26670
26680.getOsub
26690 stmfd r13!,{r1-r2,r14}
26700 add r2,r1,r0,lsl #5
26710 stmfd r13!,{r2}
26720 ldr r0,[r2,#16]
26730 bl getout
26740 ldmfd r13!,{r2}
26750 stmfd r13!,{r0}
26760 ldr r0,[r2,#20]
26770 bl getout
26780 ldmfd r13!,{r2}
26790 sub r0,r2,r0
26800 ldmfd r13!,{r1-r2,pc}^
26810
26820.getOpulse
26830 stmfd r13!,{r1-r12,r14}
26840 add r2,r1,r0,lsl #5
26850 ldr r0,[r2,#16]
26860 bl getout
26870 stmfd r13!,{r0}
26880 ldr r0,[r2,#20]
26890 bl getout
26900 cmp r0,#0
26910 movmi r0,#0
26920 cmp r0,#&10000
26930 movpl r0,#&10000
26940 ldmfd r13!,{r3}
26950 ldr r4,[r2,#12]
26960 ldr r5,[r4]
26970 add r5,r5,r3
26980 bic r5,r5,#&ff000000
26990 str r5,[r4]
27000 cmp r5,r0,lsl #8
27010 mov r0,#&10000
27020 rsbpl r0,r0,#0
27030 ldmfd r13!,{r1-r12,pc}^
27040
27050.getOdelay
27060 stmfd r13!,{r1-r12,r14}
27070 add r2,r1,r0,lsl #5
27080 stmfd r13!,{r2}
27090 ldr r2,[r2,#12]
27100 add r2,r2,#248
27110 add r3,r2,#4
27120 ldmda r2!,{r4-r12,r14}
27130 stmda r3!,{r4-r12,r14}
27140 ldmda r2!,{r4-r12,r14}
27150 stmda r3!,{r4-r12,r14}
27160 ldmda r2!,{r4-r12,r14}
27170 stmda r3!,{r4-r12,r14}
27180 ldmda r2!,{r4-r12,r14}
27190 stmda r3!,{r4-r12,r14}
27200 ldmda r2!,{r4-r12,r14}
27210 stmda r3!,{r4-r12,r14}
27220 ldmda r2!,{r4-r12,r14}
27230 stmda r3!,{r4-r12,r14}
27240 ldmda r2!,{r4-r5,r14}
27250 stmda r3!,{r4-r5,r14}
27260 ldmfd r13,{r2}
27270 ldr r0,[r2,#16]
27280 bl getout
27290 ldmfd r13,{r2}
27300 ldr r2,[r2,#12]
27310 str r0,[r2]
27320 ldmfd r13,{r2}
27330 ldr r0,[r2,#20]
27340 bl getout
27350 ldmfd r13!,{r2}
27360 ldr r2,[r2,#12]
27370 mov r0,r0,asr #10
27380 cmp r0,#0
27390 movmi r0,#0
27400 cmp r0,#63
27410 movpl r0,#63
27420 ldr r0,[r2,r0,lsl #2]
27430 ldmfd r13!,{r1-r12,pc}^
27440
27450.getOinput
27460 stmfd r13!,{r1-r6,r14}
27470 add r6,r1,r0,lsl #5
27480 ldr r6,[r6,#12]
27490 ldr r5,[r6,#264]
27500 ldr r4,[r6,#260]
27510 ldr r1,[r6,#268]
27520 cmp r5,r1,lsl #12
27530 movpl r0,#0
27540 ldmplfd r13!,{r1-r6,pc}^
27550 ldr r1,[r6,#272]
27560 add r1,r1,r5,lsr #12
27570 ldrb r0,[r1]
27580
27590 ldr r1,[r6,#256]
27600 tst r1,#4
27610 addne r5,r5,r4
27620 addeq r5,r5,#&1000
27630 str r5,[r6,#264]
27640
27650 ldr r1,[r6,#256]
27660 and r1,r1,#3
27670 cmp r1,#0
27680 moveq r0,r0,lsl #24
27690 moveq r0,r0,asr #15
27700 ldmeqfd r13!,{r1-r6,pc}^
27710 cmp r1,#1
27720 subeq r0,r0,#128
27730 moveq r0,r0,lsl #9
27740 ldmeqfd r13!,{r1-r6,pc}^
27750 ldr r1,lintab
27760 ldr r0,[r1,r0,lsl #2]
27770 ldmfd r13!,{r1-r6,pc}^
27780
27790.lintab equd 0
27800
27810.getOsh stmfd r13!,{r1-r5,r14}
27820 add r2,r1,r0,lsl #5
27830 ldr r0,[r2,#16]
27840 bl getout
27850 mov r5,r0
27860 ldr r0,[r2,#20]
27870 bl getout
27880 ldr r2,[r2,#12]
27890 ldr r4,[r2]
27900 tst r4,#&80000000
27910 bne noress
27920 cmp r0,#0
27930 movpl r4,r5,asr #1
27940.noress bic r4,r4,#&80000000
27950 cmp r0,#0
27960 orrpl r4,r4,#&80000000
27970 str r4,[r2]
27980 mov r0,r4,lsl #1
27990 ldmfd r13!,{r1-r5,pc}^
28000
28010.getOnld
28020 stmfd r13!,{r1-r5,r14}
28030 add r2,r1,r0,lsl #5
28040 ldr r0,[r2,#16]
28050 bl getout
28060 mov r0,r0,asr #1
28070 add r0,r0,#&8000
28080 cmp r0,#0
28090 movmi r0,#0
28100 cmp r0,#&10000
28110 movpl r0,#&ff00
28120 mov r0,r0,asr #8
28130 ldr r2,[r2,#12]
28140 ldrb r0,[r2,r0]
28150 mov r0,r0,asl #8
28160 sub r0,r0,#&8000
28170 mov r0,r0,asl #1
28180 ldmfd r13!,{r1-r5,pc}^
28190
28200.mult64 ;r0=r2*r3 and . between bit 15,16
28210 stmfd r13!,{r1-r7,r14}
28220 eor r4,r2,r3
28230 cmp r2,#0
28240 rsbmi r2,r2,#0
28250 cmp r3,#0
28260 rsbmi r3,r3,#0
28270 mov r5,r2,lsl #16
28280 mov r5,r5,lsr #16
28290 mov r6,r3,lsl #16
28300 mov r6,r6,lsr #16
28310 mul r0,r5,r6
28320 mov r0,r0,lsr #16
28330 mov r6,r3,lsr #16
28340 mul r7,r5,r6
28350 add r0,r0,r7
28360 mov r5,r2,lsr #16
28370 mov r6,r3,lsl #16
28380 mov r6,r6,lsr #16
28390 mul r7,r5,r6
28400 add r0,r0,r7
28410 mov r6,r3,lsr #16
28420 mul r7,r5,r6
28430 add r0,r0,r7,lsl #16
28440 bic r0,r0,#&80000000
28450 tst r4,#&80000000
28460 rsbne r0,r0,#0
28470 ldmfd r13!,{r1-r7,pc}
28480
28490.copymem
28500 stmfd r13!,{r0-r3,r14}
28510.cpylup cmp r2,#0
28520 ldmlefd r13!,{r0-r3,pc}
28530 ldrb r3,[r1],#1
28540 strb r3,[r0],#1
28550 sub r2,r2,#1
28560 b cpylup
28570
28580.revmem stmfd r13!,{r0-r3,r14}
28590.revlup cmp r0,r1
28600 ldmplfd r13!,{r0-r3,pc}
28610 ldrb r2,[r0]
28620 ldrb r3,[r1]
28630 strb r3,[r0],#1
28640 strb r2,[r1],#-1
28650 b revlup
28660
28670.div32 mov r9,#0 ;r12=r11/r10
28680 mov r12,#0
28690 mov r8,#32
28700 mov r7,#0
28710 cmp r10,#0
28720 rsbmi r10,r10,#0
28730 eormi r7,r7,#1
28740 cmp r11,#0
28750 rsbmi r11,r11,#0
28760 eormi r7,r7,#1
28770.divlp1 movs r11,r11,asl #1
28780 adc r9,r9,r9
28790 cmp r9,r10
28800 adc r12,r12,r12
28810 subcs r9,r9,r10
28820 subs r8,r8,#1
28830 bne divlp1
28840 cmp r7,#0
28850 rsbne r12,r12,#0
28860 mov pc,r14
28870.endcode
28880]
28890NEXT pass%
28900ENDPROC
#� >adfs::SFXM.$.!SFXM.!RunImage
� >Written by G. Vermeulen
� � �IntError:� �T|@
(insttime%=�
2 �Init
<�
F5 ș"Wimp_Poll",nopoll%,pollb% � reason%,polledb%
P nopoll%=0
Z Ȏ reason% �
d � 0:�Null_Reason
n � 1:�Redraw_Window
x � 2:�Open_Window
� � 3:�Close_Window
�% � 6:�Mouse_Click:nopoll%=1<<6
� � 7:�User_Drag_Box
� � 8:�Key_Pressed
� � 9:�Menu_Select
� � 17,18,19:�User_Message
� �
�� �
��
�
���IntError
�� �
�� � � � �`PC
7A%=�interr(�$+" at line "+Þ+". Continue program?")
� A%=2 � �Quit
�
"
,��Null_Reason
6I� ((dfunc%>=0)�(dfunc%<=9))�((dfunc%>=13)�(dfunc%<=18)) � �DragObject
@� dfunc%=12 � �DragLine
J� drag% � �DragMoveObjs
T5� (instopen%<>0) � (�-insttime%>300) � �CheckInst
^�
h
r��DragObject
|#È™"Wimp_GetPointerInfo",,temp2%
�+� (temp2%!12=wworkh%)�(temp2%!16>=-1) �
� temp%!0=wworkh%
�$ ș"Wimp_GetWindowState",,temp%
�& newdx%=temp2%!0+temp%!20-temp%!4
�' newdy%=temp2%!4+temp%!24-temp%!16
� newdx%=(newdx%�96)*96
� newdy%=(newdy%�56)*56-56
�+ � (olddx%<>newdx%)�(olddy%<>newdy%) �
� �RemDf(olddx%,olddy%)
� �PlotDf(newdx%,newdy%)
�# olddx%=newdx%:olddy%=newdy%
� �
��
�
��DragLine
&#È™"Wimp_GetPointerInfo",,temp2%
0:� (temp2%!12=wworkh%)�(temp2%!16>=-1)�(startlx%<>-1) �
: temp%!0=wworkh%
D$ È™"Wimp_GetWindowState",,temp%
N& newlx%=temp2%!0+temp%!20-temp%!4
X' newly%=temp2%!4+temp%!24-temp%!16
b+ � (oldlx%<>newlx%)�(oldly%<>newly%) �
l �PlotLn(oldlx%,oldly%)
v �PlotLn(newlx%,newly%)
�# oldlx%=newlx%:oldly%=newly%
� �
��
��
�
���DragMoveObjs
�#ș"Wimp_GetPointerInfo",,temp2%
�� (temp2%!8)�4 �
� temp%!0=wworkh%
�$ ș"Wimp_GetWindowState",,temp%
�& newlx%=temp2%!0+temp%!20-temp%!4
�' newly%=temp2%!4+temp%!24-temp%!16
� newlx%=(newlx%�96)*96+48
newly%=(newly%�56)*56-32
+ � (oldlx%<>newlx%)�(oldly%<>newly%) �
�PlotLn(oldlx%,oldly%)
�PlotLn(newlx%,newly%)
*# oldlx%=newlx%:oldly%=newly%
4 �
>�
H% � (startlx%<>-1)�(oldlx%<>-1) �
R �PlotLn(oldlx%,oldly%)
\2 �MoveIcns(oldlx%-startlx%,oldly%-startly%)
f �
p
drag%=0
z startlx%=-1:startly%=-1
� newlx%=-1:newly%=-1
� oldlx%=-1:oldly%=-1
��
��
�
���RemAllDrag
�� olddx%<>-1 �
� �RemDf(olddx%,olddy%)
��
�� startlx%<>-1 �
� �PlotLn(oldlx%,oldly%)
��
�newdx%=-1:newdy%=-1
olddx%=-1:olddy%=-1
oldlx%=-1:oldly%=-1
newlx%=-1:newly%=-1
$startlx%=-1:startly%=-1
.startic%=-1
8starti%=-1
Bendi%=-1
Ldrag%=0
V�
`
j��CheckInst
ttemp%!0=winsth%
~È™"Wimp_CloseWindow",,temp%
�instopen%=0
��
�
���MoveIcns(dx%,dy%)
�temp2%!0=wworkh%
��T%=0�maxicons%-1
�; � (iconinfo%!(T%*32)<>-1)�(iconinfo%!(T%*32+28))�16 �
� �ModTitle(0)
� temp2%!4=T%
�# ș"Wimp_DeleteIcon",,temp2%
�( temp2%!4=iconinfo%!(T%*32+4)+dx%
�( temp2%!8=iconinfo%!(T%*32+8)+dy%
temp2%!12=temp2%!4+92
temp2%!16=temp2%!8+52
3 temp2%!20=%00001000000000001010000000011010
Ȏ iconinfo%!(T%*32) �
( � 0:i$="vco"
2 � 1:i$="noise"
< � 2:i$="eg"
F � 5:i$="const"
P � 3:i$="filtlo"
Z � 4:i$="filthi"
d � 6:i$="mult"
n � 7:i$="multc"
x � 8:i$="add"
� � 13:i$="sub"
� � 14:i$="pulse"
� � 15:i$="delay"
� � 9:i$="output"
� � 16:i$="input"
� � 17:i$="samhold"
� � 18:i$="nldist"
� �
� $(temp2%+24)=i$
�' ș"Wimp_CreateIcon",,temp2%�ih%
� iconinfo%!(T%*32+4)+=dx%
� iconinfo%!(T%*32+8)+=dy%
�= iconinfo%!(T%*32+28)=(iconinfo%!(T%*32+28))�&ffffffef
� ih%<>T% �
2 iconinfo%!(ih%*32+0)=iconinfo%!(T%*32+0)
2 iconinfo%!(ih%*32+4)=iconinfo%!(T%*32+4)
"2 iconinfo%!(ih%*32+8)=iconinfo%!(T%*32+8)
,4 iconinfo%!(ih%*32+12)=iconinfo%!(T%*32+12)
64 iconinfo%!(ih%*32+16)=iconinfo%!(T%*32+16)
@4 iconinfo%!(ih%*32+20)=iconinfo%!(T%*32+20)
J4 iconinfo%!(ih%*32+24)=iconinfo%!(T%*32+24)
T4 iconinfo%!(ih%*32+28)=iconinfo%!(T%*32+28)
^ iconinfo%!(T%*32+0)=-1
h iconinfo%!(T%*32+4)=-1
r iconinfo%!(T%*32+8)=-1
|! iconinfo%!(T%*32+12)=-1
�! iconinfo%!(T%*32+16)=-1
�! iconinfo%!(T%*32+20)=-1
�! iconinfo%!(T%*32+24)=-1
�! iconinfo%!(T%*32+28)=-1
� �S%=0�maxicons%-1
�% � iconinfo%!(S%*32)<>-1 �
�B � iconinfo%!(S%*32+16)=T% � iconinfo%!(S%*32+16)=ih%
�B � iconinfo%!(S%*32+20)=T% � iconinfo%!(S%*32+20)=ih%
�
�
�
�S%
� �
� �
��T%
/È™"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
�
&��PlotDf(x%,y%)
0� x%<>-1 �
: temp%!0=wworkh%
D$ È™"Wimp_GetWindowState",,temp%
N sx%=temp%!4+x%-temp%!20
X sy%=temp%!16+y%-temp%!24
b temp2%!0=wworkh%
l temp2%!4=x%
v temp2%!8=y%
� temp2%!12=x%+96
� temp2%!16=y%+56
�= ș"Wimp_ReadPixTrans",&100,1,"vco",,,,scalef%,pixtrans%
�) ș"Wimp_UpdateWindow",,temp2%�more%
� ȕ more%
�> ș"Wimp_SpriteOp",&34,,df$,sx%,sy%,8,scalef%,pixtrans%
�+ ș"Wimp_GetRectangle",,temp2%�more%
� �
��
��
�
���RemDf(x%,y%)
�� x%<>-1 �
4 È™"Wimp_ForceRedraw",wworkh%,x%,y%,x%+96,y%+56
�
�
*��PlotLn(x%,y%)
4� (x%<>-1)�(startlx%<>-1) �
> temp2%!0=wworkh%
H% È™"Wimp_GetWindowState",,temp2%
R& ssx%=temp2%!4+startlx%-temp2%!20
\' ssy%=temp2%!16+startly%-temp2%!24
f sex%=temp2%!4+x%-temp2%!20
p! sey%=temp2%!16+y%-temp2%!24
z wsx%=startlx%
� wsy%=startly%
�
wex%=x%
�
wey%=y%
� � wsx%>wex% � Ȕ wsx%,wex%
� � wsy%>wey% � Ȕ wsy%,wey%
� temp2%!0=wworkh%
� temp2%!4=wsx%-4
� temp2%!8=wsy%-4
� temp2%!12=wex%+4
� temp2%!16=wey%+4
�) ș"Wimp_UpdateWindow",,temp2%�more%
� ȕ more%
�
�3,15
� ssx%,ssy%,sex%,sey%
+ ș"Wimp_GetRectangle",,temp2%�more%
�
$�
.�
8
B��Redraw_Window
L)ș"Wimp_RedrawWindow",,polledb%�more%
VȎ polledb%!0 �
` � wworkh%:�RedrawWork
j � wvcoh%:�RedrawVCO
t � wegh%:�RedrawEG
~ � wnldisth%:�RedrawNLD
� :�JustRedraw
��
��
�
���RedrawWork
�;ș"Wimp_ReadPixTrans",&100,1,"vco",,,,scalef%,pixtrans%
�%ox%=newdx%+polledb%!4-polledb%!20
�&oy%=newdy%+polledb%!16-polledb%!24
�(ssx%=startlx%+polledb%!4-polledb%!20
�)ssy%=startly%+polledb%!16-polledb%!24
�&sex%=newlx%+polledb%!4-polledb%!20
�'sey%=newly%+polledb%!16-polledb%!24
È• more%
M �RedrawLines(polledb%!4-58,polledb%!8-28,polledb%!12+58,polledb%!16+28)
K � newdx%<>-1 � ș"Wimp_SpriteOp",&34,,df$,ox%,oy%,8,scalef%,pixtrans%
(C � (startlx%<>-1) � (newlx%<>-1) � �3,15:� ssx%,ssy%,sex%,sey%
2+ ș"Wimp_GetRectangle",,polledb%�more%
<�
F�
P
Z��RedrawVCO
dA%=polledb%!4
nB%=polledb%!8
xC%=vcoptr%
�ȕ more%
� ș"Wimp_SetColour",3
�' � A%+166,B%+132,A%+166+512,B%+132
� ș"Wimp_SetColour",1
�- � A%+166,B%+132+32,A%+166+512,B%+132+32
�- � A%+166,B%+132+64,A%+166+512,B%+132+64
�- � A%+166,B%+132+96,A%+166+512,B%+132+96
�- � A%+166,B%+132-32,A%+166+512,B%+132-32
�- � A%+166,B%+132-64,A%+166+512,B%+132-64
�- � A%+166,B%+132-96,A%+166+512,B%+132-96
� ș"Wimp_SetColour",7
� �redrawvco
�+ ș"Wimp_GetRectangle",,polledb%�more%
�
�
"��RedrawNLD
,A%=polledb%!4
6B%=polledb%!8
@C%=nldistptr%
JÈ• more%
T È™"Wimp_SetColour",1
^ � A%,B%+64,A%+512,B%+64
h � A%,B%+128,A%+512,B%+128
r � A%,B%+192,A%+512,B%+192
| � A%,B%+320,A%+512,B%+320
� � A%,B%+384,A%+512,B%+384
� � A%,B%+448,A%+512,B%+448
� � A%+64,B%,A%+64,B%+512
� � A%+128,B%,A%+128,B%+512
� � A%+192,B%,A%+192,B%+512
� � A%+320,B%,A%+320,B%+512
� � A%+384,B%,A%+384,B%+512
� � A%+448,B%,A%+448,B%+512
� ș"Wimp_SetColour",3
� � A%,B%+256,A%+512,B%+256
� � A%+256,B%,A%+256,B%+512
� ș"Wimp_SetColour",7
� �redrawnld
+ ș"Wimp_GetRectangle",,polledb%�more%
�
�
&
0��VCOClick
:Ȏ polledb%!16 �
D � 0:�VCOsin(vcoptr%+4)
N � 1:�VCOtri(vcoptr%+4)
X � 2:�VCOramp(vcoptr%+4)
b � 3:�VCOsqr(vcoptr%+4)
l � 4:�VCOconst(vcoptr%+4)
v � 5:�VCOshftlft(vcoptr%+4)
�! � 6:�VCOshftrght(vcoptr%+4)
� � 7:�VCOmuldiv2(vcoptr%+4)
� � 8:�VCOrot90(vcoptr%+4)
� � 9:�VCOrand(vcoptr%+4)
� � 10:�VCOpaint(vcoptr%+4)
��
�W� (polledb%!16<>10)�(polledb%!16<>-1) �:ș"Wimp_ForceRedraw",wvcoh%,166,-260,678,-4
��
�
���VCOsin(a%)
�
�T%=0�255
� ?(a%+T%)=127*�(2*�*T%/256)
��T%
�ModTitle(0)
�
��VCOtri(a%)
�T%=0�127
* ?(a%+T%)=127-�(-127+2*T%)
4 ?(a%+255-T%)=-?(a%+T%)
>�T%
H�ModTitle(0)
R�
\��VCOramp(a%)
fÈ— A%,B%,C%
p
�T%=0�255
z � C%�4 � ?(a%+T%)=-128+T%
� � C%�1 � ?(a%+T%)=127-T%
��T%
��ModTitle(0)
��
���VCOsqr(a%)
�
�T%=0�255
� ?(a%+T%)=127+254*(T%>127)
��T%
��ModTitle(0)
��
���VCOconst(a%)
�ȗ A%,B%,C%
�� C%�4 � l%=127
� C%�2 � l%=0
� C%�1 � l%=128
�T%=0�255
$ ?(a%+T%)=l%
.�T%
8�ModTitle(0)
B�
L��VCOshftlft(a%)
V
�T%=0�127
` ?(a%+T%)=?(a%+T%*2)
j�T%
t
�T%=0�127
~ ?(a%+T%+128)=?(a%+T%)
��T%
��ModTitle(0)
��
���VCOshftrght(a%)
��T%=255�0�-1
� ?(a%+T%)=?(a%+(T%>>1))
��T%
��ModTitle(0)
��
���VCOmuldiv2(a%)
�ȗ A%,B%,C%
�
�T%=0�255
l%=(((?(a%+T%))<<24)>>24)
� C%�4 � l%=l%*2
� C%�1 � l%=l%�2
� l%>127 � l%=127
( � l%<-127 � l%=-127
2 ?(a%+T%)=l%
<�T%
F�ModTitle(0)
P�
Z��VCOrot90(a%)
dÈ— A%,B%,C%
n
�T%=0�255
x l%=T%
� � C%�4 � l%=(T%+64)�255
� � C%�1 � l%=(T%-64)�255
� temp%?T%=?(a%+l%)
��T%
�
�T%=0�255
� ?(a%+T%)=temp%?T%
��T%
��ModTitle(0)
��
���VCOrand(a%)
�
�T%=0�255
� ?(a%+T%)=�(255)-128
��T%
�ModTitle(0)
�
��VCOpaint(a%)
"ș"OS_Byte",202,0,255�,sh%
,� (sh%�8)=0 �
6È— A%,B%,C%
@� C%=0 � vcolastx%=-1
J&� (C%�4)�((C%�1)�(vcolastx%=-1)) �
T temp%!0=wvcoh%
^$ È™"Wimp_GetWindowState",,temp%
h$ x%=polledb%!0-temp%!4+temp%!20
r% y%=polledb%!4-temp%!16+temp%!24
|1 � (x%>=166)�(x%<=676)�(y%<=-8)�(y%>=-260) �
� �ModTitle(0)
� a%?((x%-166)/2)=(134+y%)
� vcolastx%=(x%-166)/2
� vcolasty%=134+y%
�3 ș"Wimp_ForceRedraw",wvcoh%,x%,-260,x%+2,-4
� �
��
�� (C%�1)�(vcolastx%<>-1) �
� temp%!0=wvcoh%
�$ ș"Wimp_GetWindowState",,temp%
�$ x%=polledb%!0-temp%!4+temp%!20
�% y%=polledb%!4-temp%!16+temp%!24
�1 � (x%>=166)�(x%<=676)�(y%<=-8)�(y%>=-260) �
�ModTitle(0)
sx=vcolastx%
sy=vcolasty%
& ex=(x%-166)�2
0 ey=134+y%
: � �(sx-ex)<1 �
D! a%?((x%-166)/2)=(134+y%)
N �
X y=sy
b dx=�(ex-sx)
l dy=(ey-sy)/�(ex-sx)
v � x=sx � ex � dx
� a%?x=y
� y+=dy
� �x
� �
� vcolastx%=(x%-166)/2
� vcolasty%=134+y%
� � sx>ex � Ȕ sx,ex
� � sy>ey � Ȕ sy,ey
�= ș"Wimp_ForceRedraw",wvcoh%,sx*2+166,-260,ex*2+168,-4
� �
��
��
��
��EGClick
ș"OS_Byte",202,0,255�,sh%
� (sh%�8)=0 �
*a%=egptr%+8
4È— A%,B%,C%
>� C%=0 � eglastx%=-1
H%� (C%�4)�((C%�1)�(eglastx%=-1)) �
R temp%!0=wegh%
\$ È™"Wimp_GetWindowState",,temp%
f$ x%=polledb%!0-temp%!4+temp%!20
p% y%=polledb%!4-temp%!16+temp%!24
z0 � (x%>=0)�(x%<=1022)�(y%<=-4)�(y%>=-256) �
� �ModTitle(0)
� a%?(x%/2)=256+y%
� eglastx%=x%/2
� eglasty%=256+y%
�1 ș"Wimp_ForceRedraw",wegh%,x%,-256,x%+2,0
� �
��
�� (C%�1)�(eglastx%<>-1) �
� temp%!0=wegh%
�$ ș"Wimp_GetWindowState",,temp%
�$ x%=polledb%!0-temp%!4+temp%!20
�% y%=polledb%!4-temp%!16+temp%!24
�0 � (x%>=0)�(x%<=1022)�(y%<=-4)�(y%>=-256) �
�ModTitle(0)
sx=eglastx%
sy=eglasty%
$ ex=x%�2
. ey=256+y%
8 � �(sx-ex)<1 �
B a%?(x%/2)=256+y%
L �
V y=sy
` dx=�(ex-sx)
j dy=(ey-sy)/�(ex-sx)
t � x=sx � ex � dx
~ a%?x=y
� y+=dy
� �x
� �
� eglastx%=x%/2
� eglasty%=256+y%
� � sx>ex � Ȕ sx,ex
� � sy>ey � Ȕ sy,ey
�5 ș"Wimp_ForceRedraw",wegh%,sx*2,-256,ex*2+2,0
� �
��
��
��
��RedrawEG
A%=polledb%!4
B%=polledb%!8
(
C%=egptr%
2È• more%
< È™"Wimp_SetColour",1
F � A%+2,B%+32,A%+1024,B%+32
P � A%+2,B%+64,A%+1024,B%+64
Z � A%+2,B%+96,A%+1024,B%+96
d" � A%+2,B%+128,A%+1024,B%+128
n" � A%+2,B%+160,A%+1024,B%+160
x" � A%+2,B%+192,A%+1024,B%+192
�" � A%+2,B%+224,A%+1024,B%+224
� ș"Wimp_SetColour",7
� �redraweg
�+ ș"Wimp_GetRectangle",,polledb%�more%
��
��
�
���JustRedraw
�ȕ more%
�+ ș"Wimp_GetRectangle",,polledb%�more%
��
��
�
��Open_Window
0� polledb%!0=wworkh% � tools% � �Open_Work:�
\� polledb%!0=wtools% � polledb%!0=wworkh%:ș"Wimp_GetWindowState",,polledb%:�Open_Work:�
"!È™"Wimp_OpenWindow",,polledb%
,�
6
@��Open_Work
J temp2%!0=wworkh%
T% È™"Wimp_GetWindowState",,temp2%
^ temp%!0=wtoolsh%
h$ È™"Wimp_GetWindowState",,temp%
r temp%!4=polledb%!4-114
| temp%!16=polledb%!16
� temp%!12=polledb%!4-4
�e � polledb%!16-polledb%!8>620 � temp%!8=temp%!16-620 � temp%!8=temp%!16-(polledb%!16-polledb%!8)
�7 � temp%!4<0 � temp%!12=temp%!12-temp%!4:temp%!4=0
� A%=polledb%!4<oldworkx%
�( A%=A% � ((polledb%!4-temp%!4)<114)
�' A%=A% � (((temp2%!32)�(1<<19))=0)
�( A%=A% � (((temp2%!32)�(1<<18))<>0)
� � A% �
� temp%!28=polledb%!28
�" ș"Wimp_OpenWindow",,temp%
� polledb%!28=wtoolsh%
�% ș"Wimp_OpenWindow",,polledb%
� �
temp%!28=polledb%!28
polledb%!28=wtoolsh%
% È™"Wimp_OpenWindow",,polledb%
&) È™"Wimp_GetWindowState",,polledb%
0 temp%!4=polledb%!4-114
: temp%!16=polledb%!16
D temp%!12=polledb%!4-4
Ng � polledb%!16-polledb%!8>620 � temp%!8=temp%!16-620 � temp%!8=temp%!16-(polledb%!16-polledb%!8)
X9 � temp%!4<0 � temp%!12=temp%!12-temp%!4:temp%!4=0
b" È™"Wimp_OpenWindow",,temp%
l polledb%!28=wtoolsh%
v% È™"Wimp_OpenWindow",,polledb%
� �
� oldworkx%=polledb%!4
��
�
���Close_Window
�"ș"Wimp_CloseWindow",,polledb%
�� polledb%!0=wworkh% �
� polledb%!0=wtoolsh%
�$ ș"Wimp_CloseWindow",,polledb%
��
��
�
���Mouse_Click
Ȏ polledb%!12 �
� wworkh%:�WorkClick
� wtoolsh%:�ToolsClick
� wconstanth%:�ConstClick
* � wmultch%:�MultCClick
4 � wvcoh%:�VCOClick
> � wegh%:�EGClick
H � wnldisth%:�NLDistClick
R � wstatsh%:�StatsClick
\ � winputh%:�InputClick
f � -2:�IconBClick
p�
z�
�
���ToolsClick
�� polledb%!8<16 �
� Ȏ polledb%!16 �
� � 0:�PopPlaceM
�H � 1:lastmenu%=workmenu%:polledb%!0=2:polledb%!4=-1:�Menu_Select2
�H � 2:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=-1:�Menu_Select2
�U � 3:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=3:polledb%!8=-1:�Menu_Select2
�U � 4:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=4:polledb%!8=-1:�Menu_Select2
�U � 5:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=0:polledb%!8=-1:�Menu_Select2
�U � 6:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=1:polledb%!8=-1:�Menu_Select2
�U � 7:lastmenu%=workmenu%:polledb%!0=1:polledb%!4=2:polledb%!8=-1:�Menu_Select2
�H � 8:lastmenu%=workmenu%:polledb%!0=3:polledb%!4=-1:�Menu_Select2
�
�
�
$
.��PopPlaceM
8qlastmx%=polledb%!0-64:lastmy%=polledb%!4+12:lastmenu%=addmenu%:È™"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
B�
L
V��NLDistClick
`ș"OS_Byte",202,0,255�,sh%
j� (sh%�8)=0 �
ta%=nldistptr%
~È— A%,B%,C%
�� C%=0 � nldistlastx%=-1
�)� (C%�4)�((C%�1)�(nldistlastx%=-1)) �
� temp%!0=wnldisth%
�$ ș"Wimp_GetWindowState",,temp%
�$ x%=polledb%!0-temp%!4+temp%!20
�% y%=polledb%!4-temp%!16+temp%!24
�/ � (x%>=0)�(x%<=510)�(y%<=-2)�(y%>=-512) �
� �ModTitle(0)
� a%?(x%/2)=256+y%/2
� nldistlastx%=x%/2
� nldistlasty%=256+y%/2
�5 ș"Wimp_ForceRedraw",wnldisth%,x%,-512,x%+2,0
�
�
!� (C%�1)�(nldistlastx%<>-1) �
temp%!0=wnldisth%
($ È™"Wimp_GetWindowState",,temp%
2$ x%=polledb%!0-temp%!4+temp%!20
<% y%=polledb%!4-temp%!16+temp%!24
F/ � (x%>=0)�(x%<=510)�(y%<=-2)�(y%>=-512) �
P �ModTitle(0)
Z sx=nldistlastx%
d sy=nldistlasty%
n ex=x%�2
x ey=256+y%/2
� � �(sx-ex)<1 �
� a%?(x%/2)=256+y%/2
� �
� y=sy
� dx=�(ex-sx)
� dy=(ey-sy)/�(ex-sx)
� � x=sx � ex � dx
� a%?x=y
� y+=dy
� �x
� �
� nldistlastx%=x%/2
� nldistlasty%=256+y%/2
� sx>ex � Ȕ sx,ex
� sy>ey � Ȕ sy,ey
9 È™"Wimp_ForceRedraw",wnldisth%,sx*2,-512,ex*2+2,0
" �
,�
6�
@�
J
T��StatsClick
^� polledb%!8<8 �
h5 � polledb%!16=4 � samtype%=0:�SendSFXED(&9abc0)
r5 � polledb%!16=5 � samtype%=1:�SendSFXED(&9abc1)
|5 � polledb%!16=6 � samtype%=2:�SendSFXED(&9abc2)
��
��
�
���SendSFXED(M%)
�H%=�GetSFXEDH
�� H%=0 �
�& �ReportErr("SFXED not present.")
��
� temp%!0=256
� temp%!4=0
� temp%!8=0
� temp%!12=0
� temp%!16=M%
& È™"Wimp_SendMessage",17,temp%,H%
�
�
&
0��MBString(s%)
:ȕ ?s%>31 s%+=1:�
D
?s%=13
N�
X
b��DataSave
l� messbk%!4<>taskh% �
v( filetoload2$=�Strip($(messbk%+44))
� messbk%!0=256
�' $(messbk%+44)="<Wimp$Scrap>"+�(0)
� messbk%!12=messbk%!8
� messbk%!16=2
� messbk%!36=-1
�/ ș"Wimp_SendMessage",17,messbk%,messbk%!4
��
��
�
�
��SaveAck
�� savetype%<>-1 �
� Ȏ savetype% �
� � 0:temp%!0=wsaveasshh%
�
temp%!4=1
" È™"Wimp_GetIconState",,temp%
�MBString(polledb%+44)
*# $(!(temp%+28))=$(polledb%+44)
4 f$=$(polledb%+44)
> Ȏ savetype% �
H � 0:�SaveSh(f$)
R �
\ � f%<>0 � �#f%
f savetype%=-1
p messbk%!12=messbk%!8
z messbk%!16=3
�/ ș"Wimp_SendMessage",17,messbk%,messbk%!4
��
��
�
���DataLoad
�Ȏ polledb%!20 �
� � wworkh%,-2:�LoadSheet
� � winputh%:�LoadInput
��
��
�
���DataOpen
�� polledb%!40=&78a �
�LoadSheet
messbk%!0=256
messbk%!12=messbk%!8
$/ È™"Wimp_SendMessage",17,messbk%,messbk%!4
.�
8�
B
L��LoadInput
V� �
`� � � �ReportErr(�$):�
j�ModTitle(0)
t�MBString(polledb%+44)
~$(inpptr%)=$(polledb%+44)
�temp%!0=winputh%
�
temp%!4=1
� ș"Wimp_GetIconState",,temp%
�$(temp%!28)=$(polledb%+44)
�f%=�($(polledb%+44))
�inpptr%!268=�#f%
��#f%
�
temp%!4=8
� ș"Wimp_GetIconState",,temp%
�@%=&90a
�$(temp%!28)=�(inpptr%!268)
�@%=&01020a00
0È™"Wimp_ForceRedraw",winputh%,0,-4000,4000,0
�
��LoadSheet
(� �
2� � � �ReportErr(�$):�
<� polledb%!40<>&78a �
F �ReportErr("Not a sheet.")
P�
Z �MBString(polledb%+44)
d filetoload$=$(polledb%+44)
n � sheetsaved%=-1 �
x �LoadSh(filetoload$)
� �
�\ A%=�Confirm("Sheet has been modified. Are you sure you want to load another sheet?")
�% � A%=1 � �LoadSh(filetoload$)
� �
��
��
�
���LoadSh(f$)
� �RemAllDrag
� �Clear
� fi$=�Strip(f$)
� sheetname$=fi$
� f%=�(f$)
È™"OS_GBPB",4,f%,temp%,4
� temp%!0=&4d584653 �
! È™"OS_GBPB",4,f%,temp%,20
" temp2%!0=wstatsh%
, temp2%!4=8
6% È™"Wimp_GetIconState",,temp2%
@ $(temp2%!28)=$temp%
J È™"OS_GBPB",4,f%,temp%,4
T �
^% � temp%!0>99999 � temp%!0=99999
h temp2%!0=wstatsh%
r temp2%!4=3
|# È™"Wimp_GetIconState",,temp2%
� $(temp2%!28)=�(temp%!0)
� ș"OS_GBPB",4,f%,temp%,4
� i%=temp%!0
� ȕ i%<>-1
�" ș"OS_GBPB",4,f%,temp2%,32
� ș"OS_GBPB",4,f%,temp%,4
� l%=�Alloc(temp%!0)
� temp2%!12=l%
� temp2%!28=(temp2%!28)�&f
�# ș"OS_GBPB",4,f%,l%,temp%!0
� temp%!0=wworkh%
� temp%!4=temp2%!4
� temp%!8=temp2%!8
temp%!12=temp2%!4+92
temp%!16=temp2%!8+52
2 temp%!20=%00001000000000001010000000011010
& Ȏ temp2%!0 �
0 � 0:i$="vco"
: � 1:i$="noise"
D � 2:i$="eg"
N � 3:i$="filtlo"
X � 4:i$="filthi"
b � 5:i$="const"
l � 6:i$="mult"
v � 7:i$="multc"
� � 8:i$="add"
� � 13:i$="sub"
� � 14:i$="pulse"
� � 15:i$="delay"
� � 9:i$="output"
� � 16:i$="input"
� � 17:i$="samhold"
� � 18:i$="nldist"
� �
� $(temp%+24)=i$
�& ș"Wimp_CreateIcon",,temp%�ih%
� litrans%(i%)=ih%
� �T%=0�28�4
!) iconinfo%!(ih%*32+T%)=temp2%!T%
! �T%
! È™"OS_GBPB",4,f%,temp%,4
! i%=temp%!0
!* �
!4 �T%=0�maxicons%-1
!>! � iconinfo%!(T%*32)<>-1 �
!HZ � iconinfo%!(T%*32+16)<>-1 � iconinfo%!(T%*32+16)=litrans%(iconinfo%!(T%*32+16))
!RZ � iconinfo%!(T%*32+20)<>-1 � iconinfo%!(T%*32+20)=litrans%(iconinfo%!(T%*32+20))
!\ �
!f �T%
!p
�#f%
!z$ � filetoload$="<Wimp$Scrap>" �
!� �("Delete "+filetoload$)
!� f$=filetoload2$
!� �
!� $(wwork%!72)=f$
!� sheetsaved%=-1
!� temp%!0=wworkh%
!� temp%!0=wsaveasshh%
!� temp%!4=1
!�" ș"Wimp_GetIconState",,temp%
!� $(temp%!28)=f$
!� �OpenWork
!�1 ș"Wimp_ForceRedraw",wworkh%,0,-4000,4000,0
!�2 ș"Wimp_ForceRedraw",wstatsh%,0,-4000,4000,0
"�
"
"ݤStrip(fs$)
"$� f%,a%
".f%=1
"8a%=1
"Bȕ �fs$,f%)<>""
"L1 � �fs$,f%,1)="." � �fs$,f%,1)=":" � a%=f%+1
"V f%+=1
"`�
"j
=�fs$,a%)
"t
"~
��Inst
"� n$=""
"�f%=�("<SFXM$Dir>.iddata")
"�a%=�#f%
"�n$=n$+�(a%)
"�a%=�#f%
"�n$=n$+�(a%)
"�a%=�#f%
"�n$=n$+�(a%)
"�a%=�#f%
"�n$=n$+�(a%)
"�F� n$<>"SFXM" � �#f%:�ReportErr("Please install SFXM first!"):�Quit
"�usname$=""
#
idnum$=""
#
check%=0
#�
#
a%=�#f%
#(+ � a%<>0 � usname$=usname$+�(a% � &aa)
#2 check%=check% � a%
#<
� a%=0
#F�
#P
a%=�#f%
#Z) � a%<>0 � idnum$=idnum$+�(a% � &aa)
#d check%=check% � a%
#n
� a%=0
#xa%=�#f%
#��#f%
#�� a%<>check% � �Quit
#�temp%!0=winsth%
#�
temp%!4=9
#� ș"Wimp_GetIconState",,temp%
#�$(temp%!28)=usname$
#�temp%!0=winsth%
#�temp%!4=13
#� ș"Wimp_GetIconState",,temp%
#�$(temp%!28)=idnum$
#�temp%!0=winsth%
#�"ș"Wimp_GetWindowState",,temp%
#�temp%!28=-1
$È™"Wimp_OpenWindow",,temp%
$insttime%=�
$instopen%=-1
$"�
$,
$6��ConstClick
$@�ModTitle(0)
$J� polledb%!16=2 �
$T temp%!0=wconstanth%
$^ temp%!4=0
$h" È™"Wimp_GetIconState",,temp%
$r v=�($(temp%!28))
$| � �(v)>32767 �
$�D �ReportErr("Only numbers between -32767 and 32767 allowed.")
$� �
$� !constptr%=&10000*v
$�# ș"Wimp_CloseWindow",,temp%
$� constptr%=0
$� �
$��
$��
$�
$���InputClick
$��ModTitle(0)
$�inptype%=inpptr%!256
$�� polledb%!16=6 �
% temp%!0=winputh%
%! È™"Wimp_CloseWindow",,temp%
%�
%&5� polledb%!16=3 � inptype%=(inptype%�&fffffffc)+0
%05� polledb%!16=4 � inptype%=(inptype%�&fffffffc)+1
%:5� polledb%!16=5 � inptype%=(inptype%�&fffffffc)+2
%D6� polledb%!16=11 � inptype%=(inptype%�&fffffffb)+4
%N4� polledb%!16=12 � inptype%=(inptype%�&fffffffb)
%Xinpptr%!256=inptype%
%b�
%l
%v��MultCClick
%��ModTitle(0)
%�� polledb%!16=2 �
%� temp%!0=wmultch%
%� temp%!4=0
%�" ș"Wimp_GetIconState",,temp%
%� v=�($(temp%!28))
%� � �(v)>32767 �
%�D �ReportErr("Only numbers between -32767 and 32767 allowed.")
%� �
%� !mconstptr%=&10000*v
%�# ș"Wimp_CloseWindow",,temp%
%� mconstptr%=0
%� �
&�
&*� (polledb%!16>=3)�(polledb%!16<=13) �
&% È™"Wimp_SetCaretPosition",-1,-1
& temp%!0=wmultch%
&* temp%!4=0
&4" È™"Wimp_GetIconState",,temp%
&>2 $(temp%!28)=��(2^(((polledb%!16)-2)/12)),11)
&H0 È™"Wimp_ForceRedraw",wmultch%,0,-108,390,0
&R�
&\�
&f
&p��WorkClick
&zȎ polledb%!8 �
&�x � 2:lastmx%=polledb%!0-64:lastmy%=polledb%!4+12:lastmenu%=workmenu%:ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
&� � 4*256:�ClickWork
&� � 1*256:�AdjCWork
&� � 4*16:�DragWork
&� � 4:�DoubleWork
&� � 1:�AdjCWork
&��
&��
&�
&���ClickWork
&�Ȏ dfunc% �
&�V � 0,1,2,3,4,5,6,7,8,9,13,14,15,16,17,18:�CreateObj(dfunc%,polledb%!0,polledb%!4)
&� � 10:�SelIcn2
' � 12:�Connect
'�
'�
'$
'.��AdjToolsC
'8Ȏ olddfunc% �
'B= � 0,1,2,3,4,5,6,7,8,9,13,14,15,16,17,18:�IconColor(0,0)
'L � 10:�IconColor(2,0)
'V � 12:�IconColor(1,0)
'`�
'jȎ dfunc% �
't= � 0,1,2,3,4,5,6,7,8,9,13,14,15,16,17,18:�IconColor(0,9)
'~ � 10:�IconColor(2,9)
'� � 12:�IconColor(1,9)
'��
'�olddfunc%=dfunc%
'��
'�
'���IconColor(I%,C%)
'�C%=C%�15
'�temp%!0=wtoolsh%
'�temp%!4=I%
'�temp%!8=C%<<28
'�temp%!12=15<<28
'� ș"Wimp_SetIconState",,temp%
( �
(
(��SelIcn
(� polledb%!16<>-1 �
(( �SwapIconS(polledb%!16)
(2�
(< �ClearSel
(F�
(P�
(Z
(d
��SelIcn2
(n/� polledb%!16<>-1 � �SwapIconS(polledb%!16)
(x�
(�
(���DragWork
(�� dfunc%=10 �
(� drag%=-1
(� temp%!0=wworkh%
(�$ ș"Wimp_GetWindowState",,temp%
(�* startlx%=polledb%!0+temp%!20-temp%!4
(�+ startly%=polledb%!4+temp%!24-temp%!16
(�" startlx%=(startlx%�96)*96+48
(�" startly%=(startly%�56)*56-32
(� newlx%=-1:newly%=-1
(� oldlx%=-1:oldly%=-1
(��
)�
)
)��DoubleWork
)"Ȏ dfunc% �
), � 10:�SelIcn
)6 � 12:�Connect
)@�
)J�
)T
)^��AdjCWork
)hȎ dfunc% �
)r � 10:�SetParam
)| � 12:�SwapLin
)��
)��
)�
)���SetParam
)�%Ȏ iconinfo%!((polledb%!16)*32) �
)� � 0:�SetVCOParam
)� � 2:�SetEGParam
)� � 5:�SetConstParam
)� � 7:�SetMultCParam
)� � 16:�SetInputParam
)� � 18:�SetNLDistParam
)��
)��
*
*��SetNLDistParam
*temp%!0=wnldisth%
*&"È™"Wimp_GetWindowState",,temp%
*0temp%!4=polledb%!0-256
*:temp%!8=polledb%!4-256
*Dtemp%!12=temp%!4+512
*Ntemp%!16=temp%!8+512
*Xtemp%!28=-1
*b6� (temp%!32)�(1<<16) � ș"Wimp_CloseWindow",,temp%
*lÈ™"Wimp_OpenWindow",,temp%
*v.nldistptr%=iconinfo%!((polledb%!16)*32+12)
*�nldistlastx%=-1
*�nldistlasty%=-1
*��:ȗ A%,B%,C%:� C%=0
*��
*�
*���SetInputParam
*�temp%!0=winputh%
*�
temp%!4=1
*� ș"Wimp_GetIconState",,temp%
*�+inpptr%=iconinfo%!((polledb%!16)*32+12)
*�$(temp%!28)=$(inpptr%)
*�inptype%=inpptr%!256
*�
temp%!4=8
+ È™"Wimp_GetIconState",,temp%
+@%=&90a
+$(temp%!28)=�(inpptr%!268)
+ @%=&01020a00
+*temp%!12=1<<21
+4
temp%!4=3
+>0� (inptype%�3)=0 � temp%!8=1<<21 � temp%!8=0
+H È™"Wimp_SetIconState",,temp%
+R
temp%!4=4
+\0� (inptype%�3)=1 � temp%!8=1<<21 � temp%!8=0
+f È™"Wimp_SetIconState",,temp%
+p
temp%!4=5
+z0� (inptype%�3)=2 � temp%!8=1<<21 � temp%!8=0
+� ș"Wimp_SetIconState",,temp%
+�temp%!4=11
+�.� (inptype%�4) � temp%!8=1<<21 � temp%!8=0
+� ș"Wimp_SetIconState",,temp%
+�temp%!4=12
+�.� (inptype%�4) � temp%!8=0 � temp%!8=1<<21
+� ș"Wimp_SetIconState",,temp%
+�"ș"Wimp_GetWindowState",,temp%
+�temp%!4=polledb%!0-210
+�temp%!8=polledb%!4-100
+�temp%!12=temp%!4+430
+�temp%!16=temp%!8+212
+�temp%!28=-1
,6� (temp%!32)�(1<<16) � ș"Wimp_CloseWindow",,temp%
,È™"Wimp_OpenWindow",,temp%
,�:ȗ A%,B%,C%:� C%=0
,$�
,.
,8��SetVCOParam
,Btemp%!0=wvcoh%
,L"È™"Wimp_GetWindowState",,temp%
,Vtemp%!4=polledb%!0-342
,`temp%!8=polledb%!4-132
,jtemp%!12=temp%!4+684
,ttemp%!16=temp%!8+264
,~temp%!28=-1
,�6� (temp%!32)�(1<<16) � ș"Wimp_CloseWindow",,temp%
,�ș"Wimp_OpenWindow",,temp%
,�+vcoptr%=iconinfo%!((polledb%!16)*32+12)
,�vcolastx%=-1
,�vcolasty%=-1
,��:ȗ A%,B%,C%:� C%=0
,��
,�
,���SetEGParam
,�temp%!0=wegh%
,�"ș"Wimp_GetWindowState",,temp%
,�temp%!4=polledb%!0-512
- temp%!8=polledb%!4-128
-
temp%!12=temp%!4+1024
-temp%!16=temp%!8+256
-temp%!28=-1
-(6� (temp%!32)�(1<<16) � ș"Wimp_CloseWindow",,temp%
-2È™"Wimp_OpenWindow",,temp%
-<*egptr%=iconinfo%!((polledb%!16)*32+12)
-F�:ȗ A%,B%,C%:� C%=0
-P�
-Z
-d��SetConstParam
-ntemp%!0=wconstanth%
-x
temp%!4=0
-� ș"Wimp_GetIconState",,temp%
-�-constptr%=iconinfo%!((polledb%!16)*32+12)
-�+$(temp%!28)=��((!constptr%)/&10000),11)
-�"ș"Wimp_GetWindowState",,temp%
-�temp%!4=polledb%!0-180
-�temp%!8=polledb%!4-28
-�temp%!12=temp%!4+360
-�temp%!16=temp%!8+56
-�temp%!28=-1
-�6� (temp%!32)�(1<<16) � ș"Wimp_CloseWindow",,temp%
-�ș"Wimp_OpenWindow",,temp%
-��
-�
.��SetMultCParam
.temp%!0=wmultch%
.
temp%!4=0
." È™"Wimp_GetIconState",,temp%
.,.mconstptr%=iconinfo%!((polledb%!16)*32+12)
.6,$(temp%!28)=��((!mconstptr%)/&10000),11)
.@"È™"Wimp_GetWindowState",,temp%
.Jtemp%!4=polledb%!0-145
.Ttemp%!8=polledb%!4-54
.^temp%!12=temp%!4+390
.htemp%!16=temp%!8+108
.rtemp%!28=-1
.|6� (temp%!32)�(1<<16) � ș"Wimp_CloseWindow",,temp%
.�ș"Wimp_OpenWindow",,temp%
.��
.�
.�
��SwapLin
.��ModTitle(0)
.�� (polledb%!16<>-1) �
.� temp%!0=wworkh%
.�$ ș"Wimp_GetWindowState",,temp%
.�& slx%=polledb%!0-temp%!4+temp%!20
.�' sly%=polledb%!4-temp%!16+temp%!24
.� sic%=polledb%!16
.�& x%=slx%-iconinfo%!(sic%*32+4)-58
.�& y%=sly%-iconinfo%!(sic%*32+8)-28
/ si%=�GetIO(x%,y%,sic%)
/ � (si%<>2) �
/) eic%=iconinfo%!(sic%*32+si%*4+16)
/&" elx%=iconinfo%!(eic%*32+4)
/0" ely%=iconinfo%!(eic%*32+8)
/:" ls%=iconinfo%!(sic%*32+28)
/DT � si%=0 � ls%=(ls%�&fffffffc)�((ls%+1)�3) � ls%=(ls%�&fffffff3)�((ls%+4)�&c)
/N" iconinfo%!(sic%*32+28)=ls%
/X" � slx%>elx% � Ȕ slx%,elx%
/b" � sly%>ely% � Ȕ sly%,ely%
/lD È™"Wimp_ForceRedraw",wworkh%,slx%-98,sly%-58,elx%+98,ely%+58
/v �
/��
/��
/�
/�
��Connect
/��ModTitle(0)
/�� polledb%!16=-1 �
/� �7
/��
/� temp%!0=wworkh%
/�$ ș"Wimp_GetWindowState",,temp%
/� � startlx%=-1 �
/�, startlx%=polledb%!0-temp%!4+temp%!20
/�- startly%=polledb%!4-temp%!16+temp%!24
0 startic%=polledb%!16
00 x%=startlx%-iconinfo%!(startic%*32+4)-58
00 y%=startly%-iconinfo%!(startic%*32+8)-28
0 & starti%=�GetIO(x%,y%,startic%)
0* �
04* endlx%=polledb%!0-temp%!4+temp%!20
0>+ endly%=polledb%!4-temp%!16+temp%!24
0H endic%=polledb%!16
0R, x%=endlx%-iconinfo%!(endic%*32+4)-58
0\, y%=endly%-iconinfo%!(endic%*32+8)-28
0f" endi%=�GetIO(x%,y%,endic%)
0p/ � (starti%=endi%)�((starti%�endi%)=1) �
0z �7
0� �
0� � endi%=2 �
0�� � iconinfo%!(startic%*32+16+starti%*4)<>-1 � �ReportErr("Input already connected.") � iconinfo%!(startic%*32+16+starti%*4)=endic%
0� �
0�� � iconinfo%!(endic%*32+16+endi%*4)<>-1 � �ReportErr("Input already connected.") � iconinfo%!(endic%*32+16+endi%*4)=startic%
0� �
0�0 � startlx%>endlx% � Ȕ startlx%,endlx%
0�0 � startly%>endly% � Ȕ startly%,endly%
0�R ș"Wimp_ForceRedraw",wworkh%,startlx%-98,startly%-58,endlx%+98,endly%+58
0� �RemAllDrag
0� �
0� �
0��
1�
1
1ݤGetIO(x%,y%,i%)
1$� x%>0 �
1. io%=2
18�
1B � y%>0 � io%=0 � io%=1
1L�
1VȎ iconinfo%!(i%*32) �
1` � 1:� io%=1 � io%=0
1j � 2:io%=2
1t � 5:io%=2
1~ � 7:� io%=1 � io%=0
1� � 9:io%=0
1� � 16:io%=2
1� � 18:� io%=1 � io%=0
1��
1�=io%
1�
1���CreateObj(obj%,xc%,yc%)
1��RemAllDrag
1��ModTitle(0)
1�temp%!0=wworkh%
1�"ș"Wimp_GetWindowState",,temp%
1�x%=xc%-(temp%!4)+(temp%!20)
2 y%=yc%-(temp%!16)+(temp%!24)
2
x%=(x%�96)*96
2y%=((y%�56)-1)*56
2temp%!0=wworkh%
2(temp%!4=x%
22temp%!8=y%
2<temp%!12=x%+92
2Ftemp%!16=y%+52
2P.temp%!20=%00001000000000001010000000011010
2Z$(temp%+24)=df$
2d"ș"Wimp_CreateIcon",,temp%�ih%
2n� ih%>=maxicons% �
2x temp%!0=wworkh%
2� temp%!4=ih%
2� ș"Wimp_DeleteIcon",,temp%
2�% �ReportErr("Too many objects.")
2��
2� Ȏ obj% �
2�3 � 0:l%=�Alloc(260):� l%<>-1 � �VCOsin(l%+4)
2� � 1:l%=-1
2�B � 2:l%=�Alloc(520):� l%<>-1 � �T%=l%+8�l%+516�4:!T%=-1:�T%
2� � 3:l%=-1
2� � 4:l%=-1
2�. � 5:l%=�Alloc(4):� l%<>-1 � !l%=&10000
2� � 6:l%=�Alloc(4)
2�. � 7:l%=�Alloc(4):� l%<>-1 � !l%=&10000
3 � 8:l%=�Alloc(4)
3 � 9:l%=�Alloc(4)
3 � 13:l%=-1
3" � 14:l%=�Alloc(4)
3, � 15:l%=-1
36 � 16:l%=-1
3@ � 17:l%=-1
3J � 18:l%=-1
3T �
3^ � l%=-1 �
3h temp%!0=wworkh%
3r temp%!4=ih%
3|" È™"Wimp_DeleteIcon",,temp%
3�) �ReportErr("No room for object.")
3� �
3�! iconinfo%!(ih%*32+0)=obj%
3� iconinfo%!(ih%*32+4)=x%
3� iconinfo%!(ih%*32+8)=y%
3� iconinfo%!(ih%*32+12)=l%
3� iconinfo%!(ih%*32+16)=-1
3� iconinfo%!(ih%*32+20)=-1
3� iconinfo%!(ih%*32+24)=-1
3� iconinfo%!(ih%*32+28)=15
3� �
3��
3�6ș"Wimp_ForceRedraw",wworkh%,x%,y%,x%+46*2,y%+13*4
4�
4
4��IconBClick
4&Ȏ polledb%!8 �
40 � 1,4:�OpenWork
4:q � 2:lastmx%=polledb%!0-64:lastmy%=96+176:lastmenu%=iconmenu%:ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
4D�
4N�
4X
4b��OpenWork
4lpolledb%!0=wworkh%
4v%È™"Wimp_GetWindowState",,polledb%
4�polledb%!28=-1
4�oldworkx%=polledb%!4
4��Open_Window
4�temp%!0=wstatsh%
4�"ș"Wimp_GetWindowState",,temp%
4�temp%!28=-1
4�ș"Wimp_OpenWindow",,temp%
4��
4�
4���User_Drag_Box
4��DragSaved
4��
4�
5��Key_Pressed
5� polledb%!24=&1cc �
5 È™"Wimp_ProcessKey",&1cc
5 �
5* Ȏ polledb%!0 �
54 � wconstanth%:�KeyConst
5> � winputh%:�KeyInput
5H � wmultch%:�KeyMultC
5Rf � wstatsh%:�((polledb%!4=3)�(polledb%!4=8))�(polledb%!24=13) � ș"Wimp_SetCaretPosition",-1,-1
5\ �
5f�
5p�
5z
5���KeyInput
5��ModTitle(0)
5�'� (polledb%!4=1)�(polledb%!24=13) �
5� temp%!0=winputh%
5� temp%!4=1
5�" ș"Wimp_GetIconState",,temp%
5� $(inpptr%)=$(temp%!28)
5� inpptr%!256=inptype%
5�! ș"Wimp_CloseWindow",,temp%
5��
5��
5�
5���KeyConst
6�ModTitle(0)
6'� (polledb%!4=0)�(polledb%!24=13) �
6 temp%!0=wconstanth%
6$ temp%!4=0
6." È™"Wimp_GetIconState",,temp%
68 v=�($(temp%!28))
6B � �(v)>32767 �
6LD �ReportErr("Only numbers between -32767 and 32767 allowed.")
6V �
6` !constptr%=&10000*v
6j# È™"Wimp_CloseWindow",,temp%
6t constptr%=0
6~ �
6��
6��
6�
6���KeyMultC
6��ModTitle(0)
6�'� (polledb%!4=0)�(polledb%!24=13) �
6� temp%!0=wmultch%
6� temp%!4=0
6�" ș"Wimp_GetIconState",,temp%
6� v=�($(temp%!28))
6� � �(v)>32767 �
6�D �ReportErr("Only numbers between -32767 and 32767 allowed.")
7 �
7
!mconstptr%=&10000*v
7# È™"Wimp_CloseWindow",,temp%
7 mconstptr%=0
7( �
72�
7<�
7F
7P��Menu_Select
7Z"È™"Wimp_GetPointerInfo",,temp%
7doldbut%=temp%!8
7n�Menu_Select2
7xB� (oldbut%�1) � ș"Wimp_CreateMenu",,lastmenu%,lastmx%,lastmy%
7��
7�
7���Menu_Select2
7�Ȏ lastmenu% �
7� � iconmenu%:�MSelIcon
7� � workmenu%:�MSelWork
7�K � addmenu%:polledb%!4=polledb%!0:polledb%!8=-1:polledb%!0=0:�MSelWork
7��
7��
7�
7���MSelIcon
7�� polledb%!0=2 � �Clear2
7�� polledb%!0=3 � �CloseDown
8�
8
8��MSelWork
8"Ȏ polledb%!0 �
8, � 0:�MenuAdd
86 � 1:�MenuSel
8@F � 2:workmenu%!(28+24*1+0)=0:workmenu%!(28+24*2+0)=1:�MenuConnect
8J � 3:�MenuCalc
8T � 4:�SwapTools
8^�
8h�AdjToolsC
8r�
8|
8���SwapTools
8�tools%=� tools%
8�� tools%=0 �
8� temp%!0=wtoolsh%
8�! ș"Wimp_CloseWindow",,temp%
8� workmenu%!(28+24*4+0)=128
8��
8� polledb%!0=wworkh%
8�' ș"Wimp_GetWindowState",,polledb%
8� oldworkx%=polledb%!4
8� �Open_Window
8�! workmenu%!(28+24*4+0)=128+1
8��
9�
9
9
��MenuAdd
9&Ȏ polledb%!4 �
90 � 0:dfunc%=0:df$="vco"
9: � 1:dfunc%=1:df$="noise"
9D � 2:dfunc%=2:df$="eg"
9N � 3:dfunc%=5:df$="const"
9X � 4:dfunc%=3:df$="filtlo"
9b � 5:dfunc%=4:df$="filthi"
9l � 6:dfunc%=6:df$="mult"
9v � 7:dfunc%=7:df$="multc"
9� � 8:dfunc%=8:df$="add"
9� � 9:dfunc%=13:df$="sub"
9�" � 10:dfunc%=17:df$="samhold"
9�! � 11:dfunc%=18:df$="nldist"
9� � 12:dfunc%=14:df$="pulse"
9� � 13:dfunc%=15:df$="delay"
9� � 14:dfunc%=9:df$="output"
9� � 15:dfunc%=16:df$="input"
9��
9�F� polledb%!4<>-1 � workmenu%!(28+24*1+0)=0:workmenu%!(28+24*2+0)=0
9��RemAllDrag
9��
9�
:
��MenuSel
:Ȏ polledb%!4 �
:D � -1:dfunc%=10:workmenu%!(28+24*1+0)=1:workmenu%!(28+24*2+0)=0
: � 0:�AllSel
:* � 1:�ClearSel
:4 � 2:�SwapSel
:> � 3:�DeleteObjs
:H � 4:�DeleteInpt
:R�
:\�RemAllDrag
:f�
:p
:z
��SwapSel
:��T%=0�maxicons%-1
:�- �iconinfo%!(T%*32)<>-1 � �SwapIconS(T%)
:��T%
:��
:�
:���ClearSel
:��T%=0�maxicons%-1
:�. �iconinfo%!(T%*32)<>-1 � �SetIconS(T%,0)
:��T%
:��
:�
:���AllSel
:��T%=0�maxicons%-1
;. �iconinfo%!(T%*32)<>-1 � �SetIconS(T%,1)
;�T%
;�
;$
;.��DeleteObjs
;8�T%=0�maxicons%-1
;B> �(iconinfo%!(T%*32)<>-1)�(iconinfo%!(T%*32+28))�(1<<4) �
;Lf � iconinfo%!(T%*32+12)=constptr% � temp%!0=wconstanth%:ș"Wimp_CloseWindow",,temp%:constptr%=0
;Ve � iconinfo%!(T%*32+12)=mconstptr% � temp%!0=wmultch%:ș"Wimp_CloseWindow",,temp%:mconstptr%=0
;`] � iconinfo%!(T%*32+12)=vcoptr% � temp%!0=wvcoh%:ș"Wimp_CloseWindow",,temp%:vcoptr%=0
;jZ � iconinfo%!(T%*32+12)=egptr% � temp%!0=wegh%:ș"Wimp_CloseWindow",,temp%:egptr%=0
;t_ � iconinfo%!(T%*32+12)=inpptr% � temp%!0=winputh%:ș"Wimp_CloseWindow",,temp%:inpptr%=0
;~f � iconinfo%!(T%*32+12)=nldistptr% � temp%!0=wnldisth%:ș"Wimp_CloseWindow",,temp%:nldistptr%=0
;� temp%!0=wworkh%
;� temp%!4=T%
;�" ș"Wimp_DeleteIcon",,temp%
;�# �Free(iconinfo%!(T%*32+12))
;� iconinfo%!(T%*32+0)=-1
;� iconinfo%!(T%*32+4)=-1
;� iconinfo%!(T%*32+8)=-1
;� iconinfo%!(T%*32+12)=-1
;� iconinfo%!(T%*32+16)=-1
;� iconinfo%!(T%*32+20)=-1
;� iconinfo%!(T%*32+24)=-1
;� iconinfo%!(T%*32+28)=-1
<