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