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 <