Home » Archimedes archive » Acorn User » AU 1998-03 A.adf » QuickSnd » !QuickSnd/!RunImage
!QuickSnd/!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 User » AU 1998-03 A.adf » QuickSnd |
Filename: | !QuickSnd/!RunImage |
Read OK: | ✔ |
File size: | 882D bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > <QuickSnd$Dir>.!RunImage 20 30REM ***************** 40REM * * 50REM * QuickSnd Demo * 60REM * * 70REM ***************** 80 90version$ = "1.02 06/08/92" 100 110REM ****************************** 120REM * * 130REM * LEN Software by Bright Ideas * 140REM * * 150REM * Desktop Projets LTD * 160REM * Unit 2A * 170REM * Heapriding Business Park * 180REM * Ford Street * 190REM * Stockport * 200REM * Cheshire * 210REM * SK3 0BT * 220REM * * 230REM * Tel: 061 474 0778 * 240REM * Fax: 061 474 0781 * 250REM * * 260REM ****************************** 270 280PROCsetup_swinames 290 300progtitle$ = "QuickSnd Demo" 310 320SYS "Wimp_Initialise",200,&4B534154,progtitle$ TO ,task_handle% 330SYS "Wimp_ClaimInterface",task_handle% 340PROCwaitptr 350 360DIM hierarchy 200 370DIM bk 4096,iconspace 4096 380DIM mbk 20 390DIM datetime_buffer 8 400DIM result_buffer 64 410DIM pitch(99) 420 430format$ = "%24:%MI:%SE %DY/%MN/%YR" 440 450DIM menus 4*1024 460SYS "MenuManager_InstallMenus",0,"<QuickSnd$Dir>.Menus",menus,menus+4*1024 470 480samplebuffersize = VALFNreadvar("MaxSampleSize") * 1024 490SYS "XOS_Module",6,,,samplebuffersize TO ,,code ;flags 500 510IF (flags AND 1) =1 THEN 520 PROCdrongo("Unable to claim memoey") 530 SYS "Wimp_ReleaseInterface",task_handle% 540 SYS "Wimp_CloseDown" 550 END 560ENDIF 570 580samplebuffer = code + 8192 590samplebuffersize -= 8192 600 610SYS "Sound_Configure" TO ,,orgsamprate 620 630PROCinit 640 650DIM scaletable 256 660 670DIM logtolintable 256 680OSCLI("LOAD <QuickSnd$Dir>.table "+STR$~logtolintable) 690 700DIM lintologtable 256 710OSCLI("LOAD <QuickSnd$Dir>.table1 "+STR$~lintologtable) 720 730PROCassemble 740SYS "Sound_InstallVoice",voicebase,0 TO ,voiceid 750SYS "Sound_AttachVoice",1,0 TO ,voice1 760SYS "Sound_AttachVoice",1,voice1 770 780A%=samplebuffer 790B%=samplebuffer + samplebuffersize 800CALL clearmemory 810 820PROCarrowptr 830 840REPEAT 850 ON ERROR LOCAL PROCerror 860 PROCaction(FNpoll) 870UNTIL FALSE 880END 890 900DEF PROCerror 910 SYS "Hourglass_Smash" 920 IF ERR=1 PROCdrongo(REPORT$):ENDPROC 930 IF NOT FNask(REPORT$+" at line "+STR$ERL+". Do you want to quit?") THEN ENDPROC 940 PROCfinish 950ENDPROC 960 970DEF FNpoll 980 bk!0=mask 990 SYS poll,,bk TO a 1000=a 1010 1020DEF PROCaction(evnt) 1030 CASE evnt OF 1040 WHEN null_reason_code : PROCnull 1050 WHEN redraw_window_request : PROCredrawwindow(bk!0) 1060 WHEN open_window_request : PROCopenwindow(bk!0,TRUE) 1070 WHEN close_window_request : PROCclosewindow(bk!0) 1080 WHEN mouse_button_change : PROCmousechange(bk) 1090 WHEN key_pressed : PROCkeypressed(bk!0,bk!4,bk!24) 1100 WHEN menu_select : PROCmenuselect(bk) 1110 WHEN user_message : PROCreceivemessage 1120 WHEN user_message_recorded : PROCreceivemessage 1130 ENDCASE 1140ENDPROC 1150 1160 1170DEF PROCredrawwindow(handle) 1180 LOCAL more 1190 bk!0=handle 1200 SYS redraww,,bk TO more 1210 1220 WHILE more 1230 CASE handle OF 1240 WHEN credits,echow,resamplew,keyboard : SYS borderw,,bk 1250 ENDCASE 1260 1270 SYS getrect,,bk TO more 1280 ENDWHILE 1290 1300ENDPROC 1310 1320 1330DEF PROCnull 1340 IF awaitingack THEN 1350 awaitingack = FALSE 1360 ERROR 1,"Bad Data Transfer, Receiver Dead." 1370 ENDIF 1380 1390 IF !finished=2 THEN 1400 SYS "Sound_Configure" 1410 WAIT:WAIT 1420 PROCstop 1430 ENDIF 1440 1450 IF playing THEN 1460 CALLdraw 1470 PROCredraw_icon(vumeter,0) 1480 ENDIF 1490 1500 IF autokey PROCcheck_keyboard 1510 1520 IF welcome_open PROCremove_welcome 1530 1540ENDPROC 1550 1560 1570DEF PROCcheck_keyboard 1580 LOCAL i 1590 SYS gptri,,mbk 1600 i=mbk!16 1610 IF mbk!12 <> keyboard THEN ENDPROC 1620 IF i>0 AND i<49 AND i<>oldkey THEN 1630 PROCdeselect(keyboard,oldkey) 1640 PROCselecticon(keyboard,i) 1650 PROCplay(pitch(i)) 1660 oldkey=i 1670 ENDIF 1680ENDPROC 1690 1700 1710DEF PROCremove_welcome 1720 LOCAL rmasprites 1730 SYS "OS_ReadMonotonicTime" TO q 1740 IF q>remove_welcome THEN 1750 welcome_open=FALSE 1760 PROCclosewindow(welcome) 1770 q=bk+1024 1780 q!0=welcome 1790 SYS "Wimp_DeleteWindow",,q 1800 SYS "Wimp_BaseOfSprites" TO ,rmasprites 1810 SYS "OS_SpriteOp",&119,rmasprites,"dtpwelcome" 1820 ENDIF 1830ENDPROC 1840 1850DEF PROCshow_start 1860 !upto = samplebuffer 1870 CALLdraw 1880 PROCredraw_icon(vumeter,0) 1890ENDPROC 1900 1910DEF PROCredraw_icon(w,i) 1920 bk!0=w 1930 bk!4=i 1940 SYS getis,,bk 1950 SYS forcerd,vumeter,bk!8,bk!12,bk!16,bk!20 1960ENDPROC 1970 1980DEF PROCsettext(w,i,a$) 1990 bk!0 = w 2000 bk!4 = i 2010 SYS getis,,bk 2020 $(bk!28)=a$ 2030 bk!8=0 2040 bk!12=0 2050 SYS setis,,bk 2060ENDPROC 2070 2080DEF PROCinit 2090 LOCAL q 2100 remainingiconspace = iconspace 2110 null_reason_code = 0 2120 redraw_window_request = 1 2130 open_window_request = 2 2140 close_window_request = 3 2150 mouse_button_change = 6 2160 key_pressed = 8 2170 menu_select = 9 2180 user_message = 17 2190 user_message_recorded = 18 2200 user_message_ack = 19 2210 message_quit = 0 2220 message_datasave = 1 2230 message_datasaveack = 2 2240 message_dataload = 3 2250 message_dataloadack = 4 2260 message_dataopen = 5 2270 message_prequit = 8 2280 message_menuwarning = &400C0 2290 scrapref = -1 2300 awaitingack = FALSE 2310 claimmenu = -1 2320 claimdragbox = TRUE 2330 claimdragbox$ = "" 2340 mask = 0 2350 iconbar = -2 2360 sound_icon = FNicon_iconbar 2370 scrapref = -1 2380 return = 13 2390 PROCreadtemplates 2400 PROCsettext(credits,3,version$) 2410 armadeus = &D3C 2420 sndsynth = &DF9 2430 tracker = &CB5 2440 data = &FFD 2450 vu_open = FALSE 2460 keyboard_open=TRUE 2470 playing = FALSE 2480 saved = TRUE 2490 samplerate = 48 2500 save_type = 0 2510 PROCdeselect_echo 2520 PROCselecticon(echow,4) 2530 echo_length = 4 2540 sample_present = FALSE 2550 useleafname = TRUE 2560 name$ = "<Untitled>" 2570 vidc = FALSE 2580 PROCsetup_pitchs 2590 oldkey=-1 2600 autokey=FALSE 2610 PROCdeselect(keyboard,77) 2620 welcome_open=TRUE 2630 PROCfront1(welcome) 2640 SYS "OS_ReadMonotonicTime" TO q 2650 remove_welcome = q+300 2660ENDPROC 2670 2680 2690DEF PROCsetup_pitchs 2700 LOCAL p,c 2710 c=1 2720 RESTORE 2810 2730 READ p 2740 REPEAT 2750 pitch(c) = p 2760 c+=1 2770 READ p 2780 UNTIL p=0 2790ENDPROC 2800 2810DATA &1000 :REM C 2820DATA &12AA 2830DATA &1555 2840DATA &16AA 2850DATA &1955 2860DATA &1C00 2870DATA &1EAA 2880 2890DATA &2000 :REM C 2900DATA &22AA 2910DATA &2555 2920DATA &26AA 2930DATA &2955 2940DATA &2C00 2950DATA &2EAA 2960 2970DATA &3000 :REM C 2980DATA &32AA 2990DATA &3555 3000DATA &36AA 3010DATA &3955 3020DATA &3C00 3030DATA &3EAA 3040 3050DATA &4000 :REM C 3060DATA &42AA 3070DATA &4555 3080DATA &46AA 3090DATA &4955 3100DATA &4C00 3110DATA &4EAA 3120 3130DATA &1155 :REM C# 3140DATA &1400 3150DATA &1800 3160DATA &1AAA 3170DATA &1D55 3180 3190DATA &2155 :REM C# 3200DATA &2400 3210DATA &2800 3220DATA &2AAA 3230DATA &2D55 3240 3250DATA &3155 :REM C# 3260DATA &3400 3270DATA &3800 3280DATA &3AAA 3290DATA &3D55 3300 3310DATA &4155 :REM C# 3320DATA &4400 3330DATA &4800 3340DATA &4AAA 3350DATA &4D55 3360 3370DATA 0 3380 3390 3400 3410DEF PROCreceivemessage 3420 ref = bk!8 3430 task = bk!4 3440 yourref = bk!12 3450 IF task = task_handle% THEN awaitingack = FALSE:ENDPROC 3460 3470 CASE bk!16 OF 3480 WHEN message_quit : PROCfinish 3490 WHEN message_dataload : PROCmessage_dataload 3500 WHEN message_dataopen : PROCdata_open 3510 WHEN message_dataloadack : awaitingack = FALSE 3520 WHEN message_menuwarning : PROCmenu_warning 3530 WHEN message_prequit : PROCprequit_checks 3540 ENDCASE 3550 3560ENDPROC 3570 3580 3590DEF PROCdata_open 3600 3610 fsp$=FNstrnullterm(bk+44) 3620 ftype = bk!40 3630 3640 IF NOT INKEY-1 AND FNgetleafname(fsp$)="!QuickSnd" THEN 3650 PROCack 3660 ENDPROC 3670 ENDIF 3680 3690 IF ftype=armadeus OR ftype=sndsynth OR ftype=tracker THEN 3700 IF NOT saved THEN 3710 IF NOT FNask("Sample not saved, Load another") THEN 3720 PROCack 3730 ENDPROC 3740 ENDIF 3750 ENDIF 3760 3770 CASE bk!40 OF 3780 WHEN armadeus : 3790 PROCload_armadeus 3800 PROCack 3810 3820 WHEN sndsynth : 3830 PROCack 3840 PROCload_sndsynth 3850 3860 WHEN tracker : 3870 PROCack 3880 PROCload_tracker 3890 3900 ENDCASE 3910 ENDIF 3920 3930ENDPROC 3940 3950 3960DEF PROCprequit_checks 3970 IF saved ENDPROC 3980 IF FNask("Sample not saved, Are you sure you want to quit") THEN ENDPROC 3990 PROCack 4000ENDPROC 4010 4020 4030DEF PROCmessage_dataload 4040 LOCAL offset,window,icon,a,b,fsp$,ftype 4050 4060 window = bk!20 4070 icon = bk!24 4080 fsp$ = FNstrnullterm(bk+44) 4090 a = bk!4 4100 b = bk!8 4110 ftype = bk!40 4120 4130 IF FNcheck_saved THEN 4140 CASE ftype OF 4150 WHEN armadeus : PROCload_armadeus 4160 WHEN sndsynth : PROCload_sndsynth 4170 WHEN tracker : PROCload_tracker 4180 WHEN data : PROCload_data 4190 ENDCASE 4200 ENDIF 4210 4220 IF yourref=scrapref THEN OSCLI "Delete <Wimp$Scrap>" 4230 bk!0=20 4240 bk!4=a 4250 bk!8=b 4260 bk!12=ref 4270 bk!16=message_dataloadack 4280 SYS sendm,17,bk,task 4290ENDPROC 4300 4310 4320DEF FNcheck_saved 4330 IF ftype=armadeus OR ftype=sndsynth OR ftype=tracker OR ftype=data THEN 4340 IF saved THEN =TRUE 4350 IF FNask("Sample not saved, Load another") THEN =TRUE 4360 ENDIF 4370=FALSE 4380 4390 4400DEF PROCload_data 4410 LOCAL X% 4420 4430 IF playing PROCstop 4440 4450 CALLclearmemory 4460 4470 X% = OPENIN(fsp$) 4480 samplelength = EXT#X% 4490 samplerate = 48 4500 SYS "OS_GBPB",3,X%,samplebuffer,samplelength,1 4510 CLOSE #X% 4520 4530 PROCaboutfile("Data","file_ffd",&FFD) 4540 4550 name$ = FNgetleafname(fsp$) 4560 4570 !wavebase = samplebuffer 4580 !length = samplelength 4590 REM !finished = 2 4600 4610 sample_present = TRUE 4620 PROCshow_start 4630 PROCopen_vu 4640 PROCsaved 4650ENDPROC 4660 4670 4680DEF PROCload_armadeus 4690 LOCAL X%,a,b 4700 4710 IF playing PROCstop 4720 4730 X% = OPENIN(fsp$) 4740 a = BGET#X% 4750 IF a<10 a = 10 4760 b = EXT#X%-1 4770 IF b > samplebuffersize THEN 4780 CLOSE #X% 4790 PROCdrongo("You do not have enough memory to load this sample, Increase samplesize in '!Run' file") 4800 ENDPROC 4810 ENDIF 4820 4830 samplerate = a 4840 samplelength = b 4850 CALLclearmemory 4860 SYS "OS_GBPB",3,X%,samplebuffer,samplelength,1 4870 CLOSE #X% 4880 4890 PROCaboutfile("Armadeus","file_d3c",&D3C) 4900 4910 name$ = FNgetleafname(fsp$) 4920 4930 !wavebase = samplebuffer 4940 !length = samplelength 4950 REM !finished = 2 4960 4970 sample_present = TRUE 4980 PROCshow_start 4990 PROCopen_vu 5000 PROCsaved 5010ENDPROC 5020 5030 5040DEF PROCload_tracker 5050 LOCAL X% 5060 5070 IF playing PROCstop 5080 5090 CALLclearmemory 5100 5110 X% = OPENIN(fsp$) 5120 samplelength = EXT#X% 5130 SYS "OS_GBPB",3,X%,samplebuffer,samplelength,0 5140 CLOSE #X% 5150 5160 samplerate = 34 5170 5180 PROCaboutfile("Tracker","file_cb5",&CB5) 5190 5200 name$ = FNgetleafname(fsp$) 5210 5220 !wavebase = samplebuffer 5230 !length = samplelength 5240 REM !finished = 2 5250 5260 PROClogtolin 5270 sample_present = TRUE 5280 PROCshow_start 5290 PROCopen_vu 5300 PROCsaved 5310ENDPROC 5320 5330DEF PROCaboutfile(i$,s$,ft) 5340 LOCAL A% 5350 PROCsetspriteicon(aboutfile,5,s$) 5360 PROCsettext(aboutfile,2,FNgetleafname(fsp$)) 5370 PROCsettext(aboutfile,1,i$+" "+STR$~ft) 5380 PROCsettext(aboutfile,13,STR$samplelength) 5390 PROCsettext(aboutfile,4,FNdate_time) 5400 A%=1E6 DIV samplerate 5410 PROCsettext(aboutfile,3,STR$A%+"Hz "+STR$samplerate+"uS") 5420ENDPROC 5430 5440 5450DEF PROCplay(x) 5460 SYS "Sound_Configure",1 5470 SYS "Sound_AttachVoice",1,voiceid TO ,oldvoiceid 5480 5490 IF vidc THEN 5500 SYS "Sound_Configure",,,samplerate*1.5 5510 ELSE 5520 SYS "Sound_Configure",,,samplerate 5530 ENDIF 5540 5550 WAIT 5560 SOUND 1,&17F,x,1 5570 playing = TRUE 5580 WAIT 5590ENDPROC 5600 5610 5620DEF PROCstop 5630 IF NOT playing ENDPROC 5640 !forcekill=1 5650 REPEAT UNTIL !finished=2 5660 WAIT:WAIT 5670 SYS "Sound_AttachVoice",1,voice1 5680 WAIT:WAIT 5690 SYS "Sound_Configure",,,orgsamprate 5700 WAIT:WAIT 5710 playing = FALSE 5720 !finished = 0 5730 PROCdeselect(keyboard,oldkey) 5740 oldkey=-1 5750ENDPROC 5760 5770 5780DEF PROCload_sndsynth 5790 LOCAL X% 5800 5810 IF playing PROCstop 5820 CALLclearmemory 5830 5840 X% = OPENIN(fsp$) 5850 samplelength = EXT#X%-544 5860 SYS "OS_GBPB",3,X%,samplebuffer,samplelength,544 5870 CLOSE #X% 5880 5890 samplerate = 48 5900 5910 PROCaboutfile("SndSynth","file_df9",&DF9) 5920 5930 name$ = FNgetleafname(fsp$) 5940 5950 !wavebase = samplebuffer 5960 !length = samplelength 5970 REM !finished = 2 5980 5990 sample_present = TRUE 6000 PROCshow_start 6010 PROCopen_vu 6020 PROCsaved 6030 6040 6050ENDPROC 6060 6070 PROCaboutfile("Armadeus","file_d3c",&D3C) 6080 PROCaboutfile("Tracker","file_cb5",&CB5) 6090 PROCaboutfile("SndSynth","file_df9",&DF9) 6100 6110DEF PROCmenu_warning 6120 LOCAL mir,mip,mox,moy 6130 SYS "MenuManager_MenuWarning",,menus,claimmenu$,bk TO mir,,,,,mip 6140 mox = bk!24 6150 moy = bk!28 6160 6170 CASE mir OF 6180 WHEN 100 : PROCsave_box 6190 WHEN 101 : PROCsave_box 6200 WHEN 102 : PROCsave_box 6210 WHEN 103 : PROCsave_box 6220 WHEN 104 : PROCsave_box 6230 WHEN 105 : PROCsave_box 6240 6250 WHEN 252 : SYS createsm,,aboutfile,bk!24,bk!28 6260 WHEN 253 : SYS createsm,,credits,bk!24,bk!28 6270 WHEN 254 : SYS createsm,,credits,bk!24,bk!28 6280 ENDCASE 6290ENDPROC 6300 6310DEF PROCsave_box 6320 SYS createsm,,saveas,mox,moy 6330ENDPROC 6340 6350DEF PROCdeselect_echo 6360 LOCAL x 6370 FOR x=1 TO 8 6380 PROCdeselect(echow,x) 6390 NEXT 6400ENDPROC 6410 6420DEF PROCack 6430 !bk = 20 6440 bk!12 = ref 6450 bk!16 = 4 6460 SYS sendm,17,bk 6470ENDPROC 6480 6490DEF PROCopenwindow(w,full) 6500 bk!0=w 6510 IF NOT full THEN bk!0=w:SYS getws,,bk 6520 SYS openw,,bk 6530ENDPROC 6540 6550DEF PROCopencoords(handle,minx,miny,maxx,maxy,back) 6560 LOCAL b%,b1% 6570 b%=bk+32 6580 b1%=bk+64 6590 !b1%=handle 6600 SYS getws,,b1% 6610 b%!0=handle : b%!4=minx 6620 b%!8=miny : b%!12=maxx 6630 b%!16=maxy : b%!20=b1%!20 6640 b%!24=b1%!24 : b%!28=back 6650 SYS openw,,b% 6660ENDPROC 6670 6680DEF PROCclosewindow(handle) 6690 bk!0=handle 6700 SYS "Wimp_CloseWindow",0,bk 6710 CASE handle OF 6720 WHEN vumeter : vu_open = FALSE 6730 WHEN keyboard : keyboard_open=TRUE 6740 ENDCASE 6750ENDPROC 6760 6770DEF PROCreadtemplates 6780 SYS "Wimp_OpenTemplate",,"<QuickSnd$Dir>.Templates" 6790 credits = FNtemplate("credits","") 6800 vumeter = FNtemplate("vumeter","") 6810 saveas = FNtemplate("saveas","") 6820 aboutfile = FNtemplate("aboutfile","") 6830 echow = FNtemplate("echow","") 6840 resamplew = FNtemplate("resamplew","") 6850 keyboard = FNtemplate("keyboard","") 6860 welcome = FNtemplate("welcome","") 6870 SYS "Wimp_CloseTemplate" 6880ENDPROC 6890 6900DEF FNtemplate(id$,t$) 6910 LOCAL handle,pos 6920 SYS "Wimp_LoadTemplate",,bk,remainingiconspace,iconspace+2048,-1,id$,0 TO ,,remainingiconspace,,,,pos 6930 IF pos=0 THEN ERROR 1,"Template '"+id$+"' not found" 6940 IF t$<>"" THEN 6950 IF bk!56 AND 1<<8 THEN 6960 $(bk!72)=t$ 6970 bk!80=LEN(t$) 6980 ELSE 6990 $(bk+72)=t$ 7000 ENDIF 7010 ENDIF 7020 IF id$="vumeter" bk?35=&FF 7030 SYS "Wimp_CreateWindow",,bk TO handle 7040=handle 7050 7060DEF PROCmousechange(mouse) 7070 LOCAL b,window,icon,x,y,mx,my,mb,index,R6 7080 x = bk!0 7090 y = bk!4 7100 b = bk!8 7110 window = bk!12 7120 icon = bk!16 7130 PROCmouse(mx,my,mb) 7140 7150 IF b=1 THEN 7160 CASE window OF 7170 WHEN vumeter : PROCstop 7180 WHEN keyboard : PROCkeyboard_click 7190 ENDCASE 7200 ENDIF 7210 7220 IF b=2 THEN 7230 CASE window OF 7240 WHEN iconbar : PROCopen_menu("iconbar") 7250 WHEN vumeter : PROCopen_menu("mainmenu") 7260 WHEN resamplew 7270 IF icon=2 THEN 7280 PROCflash_orange 7290 PROCopen_menu("rates") 7300 ENDIF 7310 7320 ENDCASE 7330 ENDIF 7340 7350 IF b=4 THEN 7360 CASE window OF 7370 WHEN iconbar : PROCopen_vu 7390 WHEN echow : PROCecho_click 7400 WHEN resamplew : PROCresamplew_click 7410 WHEN vumeter : PROCplay(&2550) 7420 WHEN keyboard : PROCkeyboard_click 7430 ENDCASE 7440 ENDIF 7450 7460ENDPROC 7470 7480 7490DEF PROCkeyboard_click 7500 IF icon=77 THEN 7510 PROCdeselect(keyboard,oldkey) 7520 oldkey=-1 7530 autokey = NOT autokey 7540 ENDPROC 7550 ENDIF 7560 7570 IF icon>0 AND icon<49 THEN 7580 PROCdeselect(keyboard,oldkey) 7590 PROCselecticon(keyboard,icon) 7600 oldkey=icon 7610 PROCplay(pitch(icon)) 7620 ENDIF 7630ENDPROC 7640 7650 7660DEF PROCresamplew_click 7670 LOCAL A% 7680 CASE icon OF 7690 WHEN 2 : 7700 PROCflash_orange 7710 PROCopen_menu("rates") 7720 7730 WHEN 3 : 7740 PROCflash_orange 7750 A% = VALFNindirect(resamplew,1) 7760 IF A%<1 OR A%>255 THEN 7770 ERROR 1,"New sample rate out of range" 7780 ENDIF 7790 IF lmir=148 THEN 7800 PROCresample(A%) 7810 ELSE 7820 samplerate = A% 7830 PROCclosewindow(resamplew) 7840 PROCmodified 7850 ENDIF 7860 7870 WHEN 4 : 7880 PROCflash_orange 7890 PROCclosewindow(resamplew) 7900 7910 ENDCASE 7920ENDPROC 7930 7940 7950DEF PROCflash_orange 7960 SYS "Wimp_BorderIcon",,bk 7970 bk!8=0 7980 SYS "Wimp_BorderIcon",,bk 7990ENDPROC 8000 8010DEF PROCecho_click 8020 IF icon>0 AND icon<9 THEN 8030 echo_length = icon 8040 ENDPROC 8050 ENDIF 8060 8070 CASE icon OF 8080 WHEN 11 : 8090 PROCflash_orange 8100 PROCecho(echo_length) 8110 ENDCASE 8120ENDPROC 8130 8140DEF PROCopen_menu(m$) 8150 IF m$="iconbar" THEN 8160 SYS "MenuManager_OpenIconBarMenu",,menus,m$ 8170 ELSE 8180 SYS "MenuManager_OpenMenu",,menus,m$ 8190 ENDIF 8200 claimmenu$ = m$ 8210ENDPROC 8220 8230DEF PROCopen_vu 8240 IF NOT sample_present ENDPROC 8250 IF vu_open THEN 8260 PROCfront(vumeter) 8270 ELSE 8280 vu_open = TRUE 8290 PROCfront1(vumeter) 8300 ENDIF 8310ENDPROC 8320 8330DEF PROCopen_keyboard 8340 IF keyboard_open THEN 8350 PROCfront(keyboard) 8360 ELSE 8370 PROCfront1(keyboard) 8380 keyboard_open=TRUE 8390 ENDIF 8400ENDPROC 8410 8420DEF PROCmenuselect(b) 8430 LOCAL mx,my,mb,mir 8440 8450 PROCmouse(mx,my,mb) 8460 SYS "MenuManager_DecodeMenu",,menus,claimmenu$,bk TO mir,,,,,mip 8470 8480 CASE mir OF 8490 8500 WHEN 130 : PROCsigned 8510 WHEN 131 : PROClogtolin 8520 WHEN 132 : PROClintolog 8530 8540 WHEN 147,148 8550 IF sample_present THEN 8560 PROCclosewindow(resamplew) 8570 PROCsettext(resamplew,0,STR$samplerate) 8580 PROCsettext(resamplew,1,"48") 8590 PROCmouse(mx,my,mb) 8600 lmir = mir 8610 PROCwindow_title(resamplew) 8620 PROCfront1(resamplew) 8630 ENDIF 8640 8650 WHEN 149 : 8660 IF sample_present THEN 8670 PROCdeselect_echo 8680 PROCselecticon(echow,4) 8690 echo_length = 4 8700 SYS createm,,echow,mx,my 8710 ENDIF 8720 8730 WHEN 150 : PROCreverse 8740 WHEN 151 : PROCscale 8750 WHEN 106 : PROCopen_keyboard 8760 8770 WHEN 249 : PROCtoggle_vidc 8780 WHEN 250 : PROCtoggle_leafname 8790 WHEN 253,254 : SYS createm,,credits,mx,my 8800 WHEN 255 : PROCmenu_quit 8810 8820 WHEN 300 : PROCsettext(resamplew,1,"24") 8830 WHEN 301 : PROCsettext(resamplew,1,"34") 8840 WHEN 302 : PROCsettext(resamplew,1,"48") 8850 WHEN 303 : PROCsettext(resamplew,1,"96") 8860 ENDCASE 8870 8880 IF mir<>253 AND mir<>254 THEN 8890 IF mb=1 THEN 8900 SYS "MenuManager_ReOpenMenu",,menus,claimmenu$ 8910 ENDIF 8920 ENDIF 8930 8940ENDPROC 8950 8960DEF PROCtoggle_vidc 8970 vidc = NOT vidc 8980 IF vidc THEN 8990 SYS "MenuManager_TickMenuItem",249,menus,,,,1 9000 ELSE 9010 SYS "MenuManager_TickMenuItem",249,menus 9020 ENDIF 9030ENDPROC 9040 9050DEF PROCtoggle_leafname 9060 useleafname = NOT useleafname 9070 IF useleafname THEN 9080 SYS "MenuManager_TickMenuItem",250,menus,,,,1 9090 ELSE 9100 SYS "MenuManager_TickMenuItem",250,menus 9110 ENDIF 9120ENDPROC 9130 9140DEF PROCmenu_quit 9150 IF saved PROCfinish 9160 IF FNask("Sample not saved, Are you sure you want to quit") THEN PROCfinish 9170ENDPROC 9180 9190DEF PROCscale 9200 PROCwaitptr 9210 A%=samplebuffer 9220 B%=samplebuffer + samplelength 9230 C%=127 9240 CALL scale 9250 PROCmodified 9260 PROCarrowptr 9270ENDPROC 9280 9290DEF PROCsigned 9300 PROCwaitptr 9310 A%=samplebuffer 9320 B%=samplebuffer + samplelength 9330 CALL convert 9340 PROCmodified 9350 PROCarrowptr 9360ENDPROC 9370 9380DEF PROClogtolin 9390 PROCwaitptr 9400 A%=samplebuffer 9410 B%=samplebuffer + samplelength 9420 CALL logtolin 9430 PROCmodified 9440 PROCarrowptr 9450ENDPROC 9460 9470DEF PROClintolog 9480 PROCwaitptr 9490 A%=samplebuffer 9500 B%=samplebuffer + samplelength 9510 CALL lintolog 9520 PROCmodified 9530 PROCarrowptr 9540ENDPROC 9550 9560DEF PROCreverse 9570 PROCwaitptr 9580 A%=samplebuffer 9590 B%=samplebuffer+samplelength 9600 CALLreverse 9610 PROCmodified 9620 PROCarrowptr 9630ENDPROC 9640 9650DEF PROCecho(x) 9660 PROCwaitptr 9670 LOCAL delay 9680 delay = x*500 9690 9700 A%=samplebuffer 9710 B%=samplebuffer+samplelength 9720 9730 IF samplelength+delay > samplebuffersize THEN 9740 B%=samplebuffer+samplebuffersize-delay 9750 ELSE 9760 samplelength += delay 9770 ENDIF 9780 9790 C%=delay 9800 CALLecho 9810 PROCmodified 9820 PROCclosemenu 9830 PROCarrowptr 9840ENDPROC 9850 9860DEF PROCmodified 9870 LOCAL A% 9880 saved = FALSE 9890 PROCsettext(aboutfile,0,"Yes") 9900 PROCsettext(aboutfile,13,STR$samplelength) 9910 PROCwindow_title(vumeter) 9920 A%=1E6 DIV samplerate 9930 PROCsettext(aboutfile,3,STR$A%+"Hz "+STR$samplerate+"uS") 9940ENDPROC 9950 9960DEF PROCsaved 9970 saved = TRUE 9980 PROCsettext(aboutfile,0,"No") 9990 PROCwindow_title(vumeter) 10000ENDPROC 10010 10020DEF PROCdrongo(message$) 10030 bk!0=0 10040 $(bk+4)=message$ 10050 SYS "Wimp_ReportError",bk,%0000001,progtitle$ 10060ENDPROC 10070 10080DEF PROCfinish 10090 SYS "Sound_AttachVoice",1,voice1 10100 SYS "Sound_RemoveVoice",,voiceid 10110 SYS "OS_Module",7,,code 10120 SYS "Wimp_ReleaseInterface",task_handle% 10130 SYS "Wimp_CloseDown" 10140 END 10150ENDPROC 10160 10170DEF FNicon_iconbar 10180 LOCAL handle 10190 bk!0=-1 10200 bk!4=0 10210 bk!8=-16 10220 bk!12=80 10230 bk!16=88 10240 bk!20=&1700303A 10250 $(bk+24)="!quicksnd" 10260 SYS createi,,bk TO handle 10270=handle 10280 10290DEF PROCmouse(RETURN x,RETURN y,RETURN b) 10300 SYS gptri,,mbk 10310 x=mbk!0 10320 y=mbk!4 10330 b=mbk!8 10340ENDPROC 10350 10360DEF FNgetleafname(fsp$) 10370 pos=LEN(fsp$) 10380 WHILE MID$(fsp$,pos,1)<>"." AND pos>0 10390 pos-=1 10400 ENDWHILE 10410=MID$(fsp$,pos+1) 10420 10430DEF FNstrnullterm(addr) 10440 LOCAL a$ 10450 WHILE ?addr 10460 a$+=CHR$(?addr) 10470 addr+=1 10480 ENDWHILE 10490=a$ 10500 10510DEF FNask(ask$) 10520 IF playing PROCstop 10530 10540 LOCAL R1 10550 bk!0=0 10560 $(bk+4)=ask$ 10570 SYS "Wimp_ReportError",bk,%0010011,"Message from "+progtitle$ TO ,R1 10580IF R1=1 =TRUE ELSE =FALSE 10590 10600DEF PROCclosemenu 10610 SYS createm,,-1 10620ENDPROC 10630 10640DEF PROCstrnullterm(addr,fsp$) 10650 $addr=fsp$ 10660 addr?LENfsp$=0 10670ENDPROC 10680 10690DEF FNindirect(w,i) 10700 bk!0 = w 10710 bk!4 = i 10720 SYS getis,,bk 10730=$(bk!28) 10740 10750DEF FNreadvar(name$) 10760 LOCAL R2 10770 SYS "XOS_ReadVarVal",name$,bk,&100,0,0 TO ,,R2 10780 bk?R2=&0D 10790=$bk 10800 10810DEF PROCfront1(w) 10820 LOCAL xpix,ypix,xmul,ymul,x,y,q 10830 PROCread_screensize 10840 bk!0=w 10850 SYS getwi,,bk 10860 x=(xpix/2)-((bk!52)/2) 10870 q=ABS(bk!48) 10880 y=(ypix/2)-q/2 10890 bk!4=x 10900 bk!8=y 10910 bk!12=x+bk!52 10920 bk!16=y+q 10930 bk!28=-1 10940 SYS openw,,bk 10950ENDPROC 10960 10970DEF PROCread_screensize 10980 SYS "OS_ReadModeVariable",-1,11 TO ,,xpix : xpix+=1 10990 SYS "OS_ReadModeVariable",-1,12 TO ,,ypix : ypix+=1 11000 SYS "OS_ReadModeVariable",-1,4 TO ,,xmul 11010 SYS "OS_ReadModeVariable",-1,5 TO ,,ymul 11020 xpix = xpix <<xmul 11030 ypix = ypix <<ymul 11040ENDPROC 11050 11060DEF PROCkeypressed(window,icon,key) 11070 LOCAL index,A% 11080 11090 IF window=resamplew AND key=return THEN 11100 A% = VALFNindirect(resamplew,1) 11110 IF A%<1 OR A%>255 THEN 11120 ERROR 1,"New sample rate out of range" 11130 ENDIF 11140 IF lmir=148 THEN 11150 PROCresample(A%) 11160 ELSE 11170 samplerate = A% 11180 PROCclosewindow(resamplew) 11190 PROCmodified 11200 ENDIF 11210 ENDIF 11220 11280ENDPROC 11290 11300DEF PROCassemble 11310FOR pass=0 TO 2 STEP 2 11320P%=code 11330[OPT pass 11340 11350 11360.clearvalue EQUD &77777777 11370.wavename EQUS "wave" 11380 EQUB &00 11390 ALIGN 11400 11410.draw STMFD R13!,{R0-R12,R14} 11420 SWI "Wimp_BaseOfSprites" 11430 MOV R0,#&118 11440 ADR R2,wavename 11450 SWI "OS_SpriteOp" 11460 LDR R0,[R2,#32] 11470 ADD R10,R0,R2 11480 MOV R8,R10 11490 MOV R9,#&10 11500 LDR R0,clearvalue 11510 MOV R1,R0 11520 MOV R2,R0 11530 MOV R3,R0 11540 MOV R4,R0 11550 MOV R5,R0 11560 MOV R6,R0 11570 MOV R7,R0 11580 11590.drawcloop STMIA R8!,{R0-R7} 11600 STMIA R8!,{R0-R7} 11610 STMIA R8!,{R0-R7} 11620 STMIA R8!,{R0-R7} 11630 SUBS R9,R9,#&01 11640 BNE drawcloop 11650 11660 LDR R9,upto 11670 LDR R11,waveend 11680 MOV R1,#&00 11690 MOV R6,#&00 11700 11710.drawloop LDRB R0,[R9],#&01 11720 CMP R9,R11 11730 SUBEQ R9,R9,#&01 11740 11750 EOR R0,R0,#&80 11760 MOV R0,R0,LSR #&03 11770 MOV R5,R0,LSL #&06 11780 ADD R5,R5,R10 11790 ADD R5,R5,R6 11800 STRB R1,[R5] 11810 ADD R6,R6,#&01 11820 CMP R6,#&40 11830 BNE drawloop 11840 11850 LDMFD R13!,{R0-R12,R14} 11860 MOV PC,R14 11870 11880 11890 11900.clearmemory MOV R2,#&00 11910.clearloop STR R2,[R0],#&04 11920 CMP R0,R1 11930 BLE clearloop 11940 11950 MOV PC,R14 11960 11970.voicebase 11980 B fill 11990 B fill 12000 B gateon 12010 B gateoff 12020 B instance 12030 LDMFD R13!,{PC} 12040 LDMFD R13!,{PC} 12050 EQUD voicename-voicebase 12060 12070.voicename EQUS "QuickSnd" 12080 EQUB &00 12090 ALIGN 12100 12110.logscale EQUD &00 12120.lintolog EQUD &00 12130.wavebase EQUD &00 12140.length EQUD &00 12150.waveend EQUD &00 12160.finished EQUD &00 12170.upto EQUD &00 12180.forcekill EQUD &00 12190 12200.instance STMFD R13!,{R0-R4} 12210 MOV R0,#&00 12220 MOV R1,#&00 12230 MOV R2,#&00 12240 MOV R3,#&00 12250 MOV R4,#&00 12260 SWI "Sound_Configure" 12270 LDR R0,[R3,#&08] 12280 STR R0,lintolog 12290 LDR R0,[R3,#&0C] 12300 STR R0,logscale 12310 LDMFD R13!,{R0-R4,PC} 12320 12330.gateon LDR R0,wavebase 12340 STR R0,[R9,#16] 12350 LDR R1,length 12360 ADD R0,R0,R1 12370 STR R0,[R9,#12] 12380 STR R0,waveend 12390 LDR R0,logscale 12400 STR R0,[R9,#20] 12410 MOV R0,#&00 12420 STR R0,[R9,#24] 12430 LDR R0,lintolog 12440 STR R0,[R9,#28] 12450 MOV R0,#&00 12460 STR R0,finished 12470 STR R0,forcekill 12480 12490.fill LDMIA R9,{R1-R8} 12500 AND R1,R1,#&7F 12510 LDRB R1,[R6,R1,LSL #&01] 12520 MOV R1,R1,LSR #&01 12530 RSB R1,R1,#127 12540 12550.fillloop FNfill 12560 FNfill 12570 FNfill 12580 FNfill 12590 12600 CMP R12,R10 12610 BLT fillloop 12620 12630 STMIB R9,{R2-R8} 12640 LDR R0,forcekill 12650 CMP R0,#&00 12660 BNE kill 12670 12680 CMP R7,#&01 12690 BEQ kill 12700 12710 STR R3,upto 12720 MOV R0,#&08 12730 LDMFD R13!,{PC} 12740 12750.kill MOV R0,#&02 12760 STR R0,finished 12770 LDMFD R13!,{PC} 12780 12790.gateoff MOV R0,#&00 12800 12810.flushloop STRB R0,[R12],R11 12820 STRB R0,[R12],R11 12830 STRB R0,[R12],R11 12840 STRB R0,[R12],R11 12850 CMP R12,R10 12860 BLT flushloop 12870 12880 MOV R0,#%00000001 12890 LDMFD R13!,{PC} 12900 12910 12920.echo STMFD R13!,{R0-R12,R14} 12930.echoloop LDRB R5,[R0] 12940 EOR R5,R5,#&80 12950 LDRB R6,[R0,R2] 12960 EOR R6,R6,#&80 12970 ADD R4,R5,R6 12980 MOV R4,R4,LSR #1 12990 EOR R4,R4,#&80 13000 STRB R4,[R0,R2] 13010 ADD R0,R0,#1 13020 CMP R0,R1 13030 BLE echoloop 13040 13050 LDMFD R13!,{R0-R12,R14} 13060 MOV PC,R14 13070 13080.reverse STMFD R13!,{R0-R12,R14} 13090.reverseloop LDRB R5,[R0] 13100 LDRB R6,[R1] 13110 STRB R5,[R1],#-1 13120 STRB R6,[R0],#1 13130 CMP R0,R1 13140 BLT reverseloop 13150 13160 LDMFD R13!,{R0-R12,R14} 13170 MOV PC,R14 13180 13190.convert STMFD R13!, {R0-R12,R14} 13200.convertloop LDRB R2,[R0] 13210 EOR R2,R2,#&80 13220 STRB R2,[R0],#1 13230 CMP R0,R1 13240 BLE convertloop 13250 LDMFD R13!, {R0-R12,R14} 13260 MOV PC,R14 13270 13280 13290.scaletableptr EQUD scaletable 13300.scale STMFD R13!,{R0-R12,R14} 13310 LDR R12,scaletableptr 13320 13330 STMFD R13!,{R0} 13340 MOV R4,#500 13350 MVN R5,#500 13360 13370.findmaxloop LDRB R3,[R0],#1 13380 MOV R3,R3,LSL #24 13390 MOV R3,R3,ASR #24 13400 CMP R3,R5 13410 MOVGT R5,R3 13420 CMP R3,R4 13430 MOVLT R4,R3 13440 CMP R0,R1 13450 BLE findmaxloop 13460 13470 LDMFD R13!,{R0} 13480 RSB R4,R4,#0 13490 CMP R5,R4 13500 MOVGT R4,R5 13510 13520 CMP R4,#0 13530 BEQ outscale 13540 13550.createdivtable 13560 13570 MVN R6, #127 13580 MOV R8, #0 13590 13600.createdivtableloop 13610 13620 MUL R7, R2, R6 13630 FNdiv(9,7,4) 13640 STRB R9, [R12, R8] 13650 ADD R6, R6, #1 13660 ADD R8, R8, #1 13670 CMP R8, #255 13680 BLE createdivtableloop 13690 13700.scaleloop 13710 LDRB R2, [R0] 13720 EOR R2, R2, #&80 13730 LDRB R2, [R12, R2] 13740 STRB R2, [R0], #1 13750 CMP R0, R1 13760 BLE scaleloop 13770 13780.outscale 13790 LDMFD R13!,{R0-R12,R14} 13800 MOV PC,R14 13810 13820 13830 13840 13850.logtolintableptr EQUD logtolintable 13860 13870.logtolin 13880 13890 STMFD R13!,{R0-R12,R14} 13900 LDR R3,logtolintableptr 13910 13920.logtolinloop 13930 LDRB R2, [R0] 13940 LDRB R2, [R3, R2] 13950 STRB R2, [R0], #1 13960 CMP R0, R1 13970 BLE logtolinloop 13980 13990 LDMFD R13!, {R0-R12, R14} 14000 MOV PC,R14 14010 14020 14030 14040 14050.lintologtableptr EQUD lintologtable 14060.lintolog 14070 STMFD R13!, {R0-R12,R14} 14080 LDR R3, lintologtableptr 14090 14100.lintologloop 14110 LDRB R2, [R0] 14120 LDRB R2, [R3, R2] 14130 STRB R2, [R0], #1 14140 CMP R0, R1 14150 BLE lintologloop 14160 14170 LDMFD R13!, {R0-R12,R14} 14180 MOV PC,R14 14190 14200 14210 14220 14230.resample STMFD R13!,{R0-R12,R14} 14240 14250 MOV R12,R2 14260 CMP R12,#&10000 14270 MOV R2,#0 14280 BLT resampleloop2 14290 BEQ endresample 14300 14310 MOV R3,R0 14320 14330.resampleloop1 ADDS R2,R2,R12 14340 ADDCS R0,R0,#&10000 14350 ADD R5,R0,R2,LSR #16 14360 CMP R5,R1 14370 BGT endresample 14380 14390 LDRB R4,[R5] 14400 STRB R4,[R3],#1 14410 B resampleloop1 14420 14430.resampleloop2 ADDS R2,R2,R12 14440 SUBCS R1,R1,#&10000 14450 LDRB R4,[R1,-R2,LSR #16] 14460 STRB R4,[R3],#-1 14470 CMP R3,R0 14480 BGE resampleloop2 14490 14500.endresample LDMFD R13!,{R0-R12,R14} 14510 MOV PC,R14 14520 14530 14540]NEXT 14550ENDPROC 14560 14570 14580DEF FNfill 14590[OPT pass 14600 14610 ADDS R2,R2,R2,LSL #16 14620 ADDCS R5,R5,#&100 14630 ADD R3,R5,R2,LSR #24 14640 CMP R3,R4 14650 MOVGT R3,R4 14660 MOVGT R7,#&01 14670 LDRB R0,[R3] 14680 LDRB R0,[R8,R0,LSL #5] 14690 SUBS R0,R0,R1,LSL #&01 14700 MOVMI R0,#&00 14710 STRB R0,[R12],R11 14720] 14730="" 14740 14750 14760DEF FNdiv(quotient,number,divisor) 14770remain = 0 14780place = 1 14790dsign = 2 14800msign = 3 14810 14820[ OPT pass 14830 14840 STMFD R13!, {remain,place,dsign,msign,number,divisor} 14850 14860 ANDS msign, number, #1<<31 14870 RSBMI number, number, #0 14880 EOR dsign, msign, divisor 14890 CMP divisor, #0 14900 RSBMI divisor, divisor, #0 14910 14920 MOV remain, #0 14930 MOV quotient, #0 14940 MOV place, #1<<31 14950 14960.DivisionLoop 14970 MOVS number, number, ASL #1 14980 ADC remain, remain, remain 14990 CMP remain, divisor 15000 SUBGE remain, remain, divisor 15010 ORRGE quotient, quotient, place 15020 MOVS place, place, LSR #1 15030 BNE DivisionLoop 15040 15050 CMP dsign, #0 15060 RSBMI quotient, quotient, #0 15070 15080 LDMFD R13!, {remain,place,dsign,msign,number,divisor} 15090] 15100="" 15110 15120 15130 15140 15150 15160DEF PROCfront(window) 15170 bk!0=window 15180 SYS getws,,bk 15190 bk!28=-1 15200 SYS openw,,bk 15210ENDPROC 15220 15230DEF PROCsetspriteicon(w,i,s$) 15240 bk!0=w 15250 bk!4=i 15260 SYS getis,,bk 15270 bk!256=w 15280 bk!260=i 15290 SYS deletei,,bk+256 15300 $(bk+28)=s$ 15310 bk!4=w 15320 SYS createi,,bk+4 15330ENDPROC 15340 15350DEF FNdate_time 15360 LOCAL R1,R2,R3 15370 SYS "OS_File",5,fsp$ TO ,,R2,R3 15380 datetime_buffer!0 = R3 15390 datetime_buffer?4 = R2 AND &FF 15400 SYS "OS_ConvertDateAndTime",datetime_buffer,result_buffer,64,format$ TO ,R1,R2 15410 ?R1=13 15420=$result_buffer 15430 15440DEF PROCwindow_title(window) 15450 15460 LOCAL a$ 15470 15480 CASE window OF 15490 WHEN vumeter : 15500 a$=name$ 15510 IF NOT saved THEN 15520 a$+=" *" 15530 ENDIF 15540 WHEN resamplew : 15550 CASE lmir OF 15560 WHEN 148 : a$="Resample Current Sample" 15570 WHEN 147 : a$="Change replayrate" 15580 ENDCASE 15590 ENDCASE 15600 15610 bk!0=window 15620 SYS getwi,,bk 15630 IF bk!60 AND 1<<8 THEN $(bk!76)=a$ ELSE $(bk+76)=a$ 15640 bk!0=window 15650 SYS getws,,bk 15660 IF bk!32 AND 1<<16 THEN 15670 SYS forcerd,-1,bk!4,bk!16+4,bk!12,bk!16+40 15680 ENDIF 15690ENDPROC 15700 15710DEF PROCsetup_swinames 15720 LOCAL a 15730 SYS "OS_SWINumberFromString",,"OS_SWINumberFromString" TO a 15740 SYS a,,"Wimp_RedrawWindow" TO redraww 15750 SYS a,,"Wimp_GetRectangle" TO getrect 15760 SYS a,,"Wimp_BorderWindow" TO borderw 15770 SYS a,,"Wimp_GetWindowState" TO getws 15780 SYS a,,"Wimp_GetWindowInfo" TO getwi 15790 SYS a,,"Wimp_OpenWindow" TO openw 15800 SYS a,,"Wimp_CloseWindow" TO closew 15810 SYS a,,"Wimp_SetCaretPosition" TO setc 15820 SYS a,,"Wimp_Poll" TO poll 15830 SYS a,,"Wimp_GetIconState" TO getis 15840 SYS a,,"Wimp_SetIconState" TO setis 15850 SYS a,,"Wimp_SendMessage" TO sendm 15860 SYS a,,"Wimp_GetPointerInfo" TO gptri 15870 SYS a,,"Wimp_PollPointer" TO pollptr 15880 SYS a,,"Wimp_CreateIcon" TO createi 15890 SYS a,,"Wimp_DeleteIcon" TO deletei 15900 SYS a,,"Wimp_ForceRedraw" TO forcerd 15910 SYS a,,"Wimp_CreateSubMenu" TO createsm 15920 SYS a,,"Wimp_CreateMenu" TO createm 15930ENDPROC 15940 15950DEF PROCscrinfo(RETURN width, RETURN height) 15960 bk!0 = 4 : 15970 bk!4 = 5 : 15980 bk!8 = 11 : 15990 bk!12 = 12 : 16000 bk!16 = -1 : 16010 SYS "OS_ReadVduVariables",bk, bk 16020 width = (1<<(bk!0))*((bk!8)+1) 16030 height = (1<<(bk!4))*((bk!12)+1) 16040ENDPROC 16050 16060DEF PROCdragicon(x,y,handle,icon) 16070 LOCAL x0,y0,ix0,iy0,ix1,iy1,scrwidth,scrheight 16080 16090 PROCscrinfo(scrwidth,scrheight) 16100 16110 bk!0=handle:SYS "Wimp_GetWindowState",0,bk 16120 x0=bk!4:y0=bk!16 16130 bk!0=handle:bk!4=icon:SYS "Wimp_GetIconState",0,bk 16140 ix0=bk!8:iy0=bk!12:ix1=bk!16:iy1=bk!20 16150 16160 bk!0 = handle 16170 bk!4 = 5 16180 bk!8 = x0+ix0 16190 bk!12 = y0+iy0 16200 bk!16 = x0+ix1 16210 bk!20 = y0+iy1 16220 bk!24 = 0 16230 bk!28 = 0 16240 bk!32 = scrwidth 16250 bk!36 = scrheight 16260 claimdragbox=handle 16270 16280 SYS "Wimp_DragBox",0,bk 16290ENDPROC 16300 16310DEF PROCcheckfull(fsp$) 16320 IF INSTR(fsp$,".") OR INSTR(fsp$,":") THEN ENDPROC 16330 ERROR 1,"To save, drag the file icon to a directory viewer." 16340ENDPROC 16350 16360DEF FNcheckfull(fsp$) 16370 IF INSTR(fsp$,".") OR INSTR(fsp$,":") THEN = TRUE 16380=FALSE 16390 16400DEF PROCselecticon(h%,i%) 16410 bk!0 = h% 16420 bk!4 = i% 16430 bk!8 = &200000 16440 bk!12 = &200000 16450 SYS setis,,bk 16460ENDPROC 16470 16480DEF PROCdeselect(h%,i%) 16490 bk!0 = h% 16500 bk!4 = i% 16510 bk!8 = 0 16520 bk!12 = &200000 16530 SYS setis,,bk 16540ENDPROC 16550 16560DEF PROCwaitptr 16570 SYS "Hourglass_On" 16580ENDPROC 16590 16600DEF PROCarrowptr 16610 SYS "Hourglass_Off" 16620ENDPROC 16630 16640DEF PROCresample(newrate) 16650 LOCAL phaseacc,newsize,mess$ 16660 LOCAL A%,B%,C%,D% 16670 16680 IF playing PROCstop 16690 16700 IF newrate = samplerate THEN 16710 ERROR 1,"New samplerate must be different from orginal samplerate" 16720 ENDIF 16730 16740 phaseacc = INT((newrate/samplerate)/(1/&10000)) 16750 newsize = INT(samplelength*(&10000/phaseacc)) 16760 16770 IF newsize>samplebuffersize THEN 16780 ERROR 1,"You do not have enough memory to resample the data at this rate" 16790 ENDIF 16800 16810 PROCwaitptr 16820 16830 A% = samplebuffer 16840 B% = samplebuffer+samplelength 16850 C% = phaseacc 16860 D% = samplebuffer+newsize 16870 CALL resample 16880 16890 samplerate = newrate 16900 samplelength = newsize 16910 16920 !wavebase = samplebuffer 16930 !length = newsize 16940 16950 PROCarrowptr 16960 PROCclosewindow(resamplew) 16970 PROCmodified 16980 16990ENDPROC 17000 17010DEF FNfiletype(fsp$) 17020 LOCAL type 17030 SYS "XOS_File",5,fsp$ TO type 17040=type
� > <QuickSnd$Dir>.!RunImage � ***************** (� * * 2� * QuickSnd Demo * <� * * F� ***************** P Zversion$ = "1.02 06/08/92" d n$� ****************************** x$� * * �$� * � Software by Bright Ideas * �$� * * �$� * Desktop Projets LTD * �$� * Unit 2A * �$� * Heapriding Business Park * �$� * Ford Street * �$� * Stockport * �$� * Cheshire * �$� * SK3 0BT * �$� * * �$� * Tel: 061 474 0778 * �$� * Fax: 061 474 0781 * �$� * * $� ****************************** �setup_swinames " , progtitle$ = "QuickSnd Demo" 6 @Aș "Wimp_Initialise",200,&4B534154,progtitle$ � ,task_handle% J)ș "Wimp_ClaimInterface",task_handle% T�waitptr ^ h� hierarchy 200 r� bk 4096,iconspace 4096 |� mbk 20 �� datetime_buffer 8 �� result_buffer 64 �� pitch(99) � �'format$ = "%24:%MI:%SE %DY/%MN/%YR" � �� menus 4*1024 �Mș "MenuManager_InstallMenus",0,"<QuickSnd$Dir>.Menus",menus,menus+4*1024 � �8samplebuffersize = ��readvar("MaxSampleSize") * 1024 �8ș "XOS_Module",6,,,samplebuffersize � ,,code ;flags � �� (flags � 1) =1 � & �drongo("Unable to claim memoey") , ș "Wimp_ReleaseInterface",task_handle% ș "Wimp_CloseDown" & � 0� : Dsamplebuffer = code + 8192 Nsamplebuffersize -= 8192 X b(ș "Sound_Configure" � ,,orgsamprate l v �init � �� scaletable 256 � �� logtolintable 256 �3�("LOAD <QuickSnd$Dir>.table "+�~logtolintable) � �� lintologtable 256 �4�("LOAD <QuickSnd$Dir>.table1 "+�~lintologtable) � � �assemble �2ș "Sound_InstallVoice",voicebase,0 � ,voiceid �(ș "Sound_AttachVoice",1,0 � ,voice1 �#ș "Sound_AttachVoice",1,voice1 A%=samplebuffer &B%=samplebuffer + samplebuffersize � clearmemory * 4 �arrowptr > H� R � � � �error \ �action(�poll) f� � p� z �� �error � ș "Hourglass_Smash" � � �=1 �drongo(�$):� �= � � �ask(�$+" at line "+Þ+". Do you want to quit?") � � � �finish �� � �� �poll � bk!0=mask � ș poll,,bk � a �=a � �� �action(evnt) Ȏ evnt � % � null_reason_code : �null 3 � redraw_window_request : �redrawwindow(bk!0) $3 � open_window_request : �openwindow(bk!0,�) .2 � close_window_request : �closewindow(bk!0) 80 � mouse_button_change : �mousechange(bk) B< � key_pressed : �keypressed(bk!0,bk!4,bk!24) L/ � menu_select : �menuselect(bk) V/ � user_message : �receivemessage `/ � user_message_recorded : �receivemessage j � t� ~ � �� �redrawwindow(handle) � � more � bk!0=handle � ș redraww,,bk � more � � ȕ more � Ȏ handle � �: � credits,echow,resamplew,keyboard : ș borderw,,bk � � � � ș getrect,,bk � more � � ( 2� �null < � awaitingack � F awaitingack = � P- � 1,"Bad Data Transfer, Receiver Dead." Z � d n � !finished=2 � x ș "Sound_Configure" � Ȗ:Ȗ � �stop � � � � � playing � � �draw � �redraw_icon(vumeter,0) � � � � � autokey �check_keyboard � �# � welcome_open �remove_welcome � � "� �check_keyboard , � i 6 ș gptri,,mbk @ i=mbk!16 J � mbk!12 <> keyboard � � T � i>0 � i<49 � i<>oldkey � ^ �deselect(keyboard,oldkey) h �selecticon(keyboard,i) r �play(pitch(i)) | oldkey=i � � �� � � �� �remove_welcome � � rmasprites �" ș "OS_ReadMonotonicTime" � q � � q>remove_welcome � � welcome_open=� � �closewindow(welcome) � q=bk+1024 � q!0=welcome � ș "Wimp_DeleteWindow",,q + ș "Wimp_BaseOfSprites" � ,rmasprites 3 ș "OS_SpriteOp",&119,rmasprites,"dtpwelcome" � &� 0 :� �show_start D !upto = samplebuffer N �draw X �redraw_icon(vumeter,0) b� l v� �redraw_icon(w,i) � bk!0=w � bk!4=i � ș getis,,bk �. ș forcerd,vumeter,bk!8,bk!12,bk!16,bk!20 �� � �� �settext(w,i,a$) � bk!0 = w � bk!4 = i � ș getis,,bk � $(bk!28)=a$ � bk!8=0 � bk!12=0 ș setis,,bk � � �init * � q 4# remainingiconspace = iconspace > null_reason_code = 0 H redraw_window_request = 1 R open_window_request = 2 \ close_window_request = 3 f mouse_button_change = 6 p key_pressed = 8 z menu_select = 9 � user_message = 17 � user_message_recorded = 18 � user_message_ack = 19 � message_quit = 0 � message_datasave = 1 � message_datasaveack = 2 � message_dataload = 3 � message_dataloadack = 4 � message_dataopen = 5 � message_prequit = 8 �! message_menuwarning = &400C0 � scrapref = -1 � awaitingack = � claimmenu = -1 claimdragbox = � claimdragbox$ = "" $ mask = 0 . iconbar = -2 8 sound_icon = �icon_iconbar B scrapref = -1 L return = 13 V �readtemplates `! �settext(credits,3,version$) j armadeus = &D3C t sndsynth = &DF9 ~ tracker = &CB5 � data = &FFD � vu_open = � � keyboard_open=� � playing = � � saved = � � samplerate = 48 � save_type = 0 � �deselect_echo � �selecticon(echow,4) � echo_length = 4 � sample_present = � � useleafname = � name$ = "<Untitled>" vidc = � �setup_pitchs oldkey=-1 ( autokey=� 2 �deselect(keyboard,77) < welcome_open=� F �front1(welcome) P" ș "OS_ReadMonotonicTime" � q Z remove_welcome = q+300 d� n x �� �setup_pitchs � � p,c � c=1 � � �dzJ � � p � � � pitch(c) = p � c+=1 � � p � � p=0 �� � �� &1000 :REM C � &12AA � &1555 � &16AA "� &1955 ,� &1C00 6� &1EAA @ J� &2000 :REM C T� &22AA ^� &2555 h� &26AA r� &2955 |� &2C00 �� &2EAA � �� &3000 :REM C �� &32AA �� &3555 �� &36AA �� &3955 �� &3C00 �� &3EAA � �� &4000 :REM C �� &42AA �� &4555 � &46AA � &4955 � &4C00 &� &4EAA 0 :� &1155 :REM C# D� &1400 N� &1800 X� &1AAA b� &1D55 l v� &2155 :REM C# �� &2400 �� &2800 �� &2AAA �� &2D55 � �� &3155 :REM C# �� &3400 �� &3800 �� &3AAA �� &3D55 � �� &4155 :REM C# �� &4400 � &4800 � &4AAA � &4D55 *� 0 4 > H R� �receivemessage \ ref = bk!8 f task = bk!4 p yourref = bk!12 z. � task = task_handle% � awaitingack = �:� � � Ȏ bk!16 � �" � message_quit : �finish �, � message_dataload : �message_dataload �% � message_dataopen : �data_open �- � message_dataloadack : awaitingack = � �+ � message_menuwarning : �menu_warning �- � message_prequit : �prequit_checks � � � �� � � � �data_open fsp$=�strnullterm(bk+44) $ ftype = bk!40 . 8/ � � �-1 � �getleafname(fsp$)="!QuickSnd" � B �ack L � V � ` j8 � ftype=armadeus � ftype=sndsynth � ftype=tracker � t � � saved � ~3 � � �ask("Sample not saved, Load another") � � �ack � � � � � � � � Ȏ bk!40 � � � armadeus : � �load_armadeus � �ack � � � sndsynth : � �ack �load_sndsynth � tracker : �ack ( �load_tracker 2 < � F � P Z� d n x� �prequit_checks � � saved � �B � �ask("Sample not saved, Are you sure you want to quit") � � � �ack �� � � �� �message_dataload �( � offset,window,icon,a,b,fsp$,ftype � � window = bk!20 � icon = bk!24 �! fsp$ = �strnullterm(bk+44) � a = bk!4 b = bk!8 ftype = bk!40 " � �check_saved � , Ȏ ftype � 6" � armadeus : �load_armadeus @" � sndsynth : �load_sndsynth J! � tracker : �load_tracker T � data : �load_data ^ � h � r |1 � yourref=scrapref � � "Delete <Wimp$Scrap>" � bk!0=20 � bk!4=a � bk!8=b � bk!12=ref � bk!16=message_dataloadack � ș sendm,17,bk,task �� � � �� �check_saved �E � ftype=armadeus � ftype=sndsynth � ftype=tracker � ftype=data � � � saved � =� �3 � �ask("Sample not saved, Load another") � =� � =� & 0� �load_data : � X% D N � playing �stop X b �clearmemory l v X% = �(fsp$) � samplelength = �#X% � samplerate = 48 �2 ș "OS_GBPB",3,X%,samplebuffer,samplelength,1 � � #X% � �' �aboutfile("Data","file_ffd",&FFD) � � name$ = �getleafname(fsp$) � � !wavebase = samplebuffer � !length = samplelength � � !finished = 2 � sample_present = � �show_start �open_vu �saved *� 4 > H� �load_armadeus R � X%,a,b \ f � playing �stop p z X% = �(fsp$) � a = �#X% � � a<10 a = 10 � b = �#X%-1 � � b > samplebuffersize � � � #X% �f �drongo("You do not have enough memory to load this sample, Increase samplesize in '!Run' file") � � � � � � samplerate = a � samplelength = b � �clearmemory �2 ș "OS_GBPB",3,X%,samplebuffer,samplelength,1 � #X% + �aboutfile("Armadeus","file_d3c",&D3C) $ . name$ = �getleafname(fsp$) 8 B !wavebase = samplebuffer L !length = samplelength V � !finished = 2 ` j sample_present = � t �show_start ~ �open_vu � �saved �� � � �� �load_tracker � � X% � � � playing �stop � � �clearmemory � � X% = �(fsp$) samplelength = �#X% 2 ș "OS_GBPB",3,X%,samplebuffer,samplelength,0 � #X% ( samplerate = 34 2 <* �aboutfile("Tracker","file_cb5",&CB5) F P name$ = �getleafname(fsp$) Z d !wavebase = samplebuffer n !length = samplelength x � !finished = 2 � � �logtolin � sample_present = � � �show_start � �open_vu � �saved �� � �� �aboutfile(i$,s$,ft) � � A% �# �setspriteicon(aboutfile,5,s$) �- �settext(aboutfile,2,�getleafname(fsp$)) �& �settext(aboutfile,1,i$+" "+�~ft) ) �settext(aboutfile,13,�samplelength) % �settext(aboutfile,4,�date_time) A%=1E6 � samplerate "5 �settext(aboutfile,3,�A%+"Hz "+�samplerate+"uS") ,� 6 @ J� �play(x) T ș "Sound_Configure",1 ^3 ș "Sound_AttachVoice",1,voiceid � ,oldvoiceid h r � vidc � |+ ș "Sound_Configure",,,samplerate*1.5 � � �' ș "Sound_Configure",,,samplerate � � � � Ȗ � � 1,&17F,x,1 � playing = � � Ȗ �� � � �� �stop � � � playing � !forcekill=1 � � !finished=2 Ȗ:Ȗ &$ ș "Sound_AttachVoice",1,voice1 0 Ȗ:Ȗ :' ș "Sound_Configure",,,orgsamprate D Ȗ:Ȗ N playing = � X !finished = 0 b �deselect(keyboard,oldkey) l oldkey=-1 v� � � �� �load_sndsynth � � X% � � � playing �stop � �clearmemory � � X% = �(fsp$) � samplelength = �#X%-544 �4 ș "OS_GBPB",3,X%,samplebuffer,samplelength,544 � � #X% � samplerate = 48 + �aboutfile("SndSynth","file_df9",&DF9) * name$ = �getleafname(fsp$) 4 > !wavebase = samplebuffer H !length = samplelength R � !finished = 2 \ f sample_present = � p �show_start z �open_vu � �saved � � �� � �+ �aboutfile("Armadeus","file_d3c",&D3C) �* �aboutfile("Tracker","file_cb5",&CB5) �+ �aboutfile("SndSynth","file_df9",&DF9) � �� �menu_warning � � mir,mip,mox,moy �D ș "MenuManager_MenuWarning",,menus,claimmenu$,bk � mir,,,,,mip � mox = bk!24 moy = bk!28 Ȏ mir � $ � 100 : �save_box . � 101 : �save_box 8 � 102 : �save_box B � 103 : �save_box L � 104 : �save_box V � 105 : �save_box ` j0 � 252 : ș createsm,,aboutfile,bk!24,bk!28 t. � 253 : ș createsm,,credits,bk!24,bk!28 ~. � 254 : ș createsm,,credits,bk!24,bk!28 � � �� � �� �save_box � ș createsm,,saveas,mox,moy �� � �� �deselect_echo � � x � � x=1 � 8 � �deselect(echow,x) � � � � �ack !bk = 20 ( bk!12 = ref 2 bk!16 = 4 < ș sendm,17,bk F� P Z� �openwindow(w,full) d bk!0=w n# � � full � bk!0=w:ș getws,,bk x ș openw,,bk �� � �2� �opencoords(handle,minx,miny,maxx,maxy,back) � � b%,b1% � b%=bk+32 � b1%=bk+64 � !b1%=handle � ș getws,,b1% � b%!0=handle : b%!4=minx � b%!8=miny : b%!12=maxx � b%!16=maxy : b%!20=b1%!20 � b%!24=b1%!24 : b%!28=back � ș openw,,b% � � �closewindow(handle) " bk!0=handle , ș "Wimp_CloseWindow",0,bk 6 Ȏ handle � @ � vumeter : vu_open = � J# � keyboard : keyboard_open=� T � ^� h r� �readtemplates |7 ș "Wimp_OpenTemplate",,"<QuickSnd$Dir>.Templates" �) credits = �template("credits","") �) vumeter = �template("vumeter","") �( saveas = �template("saveas","") �+ aboutfile = �template("aboutfile","") �' echow = �template("echow","") �+ resamplew = �template("resamplew","") �* keyboard = �template("keyboard","") �) welcome = �template("welcome","") � ș "Wimp_CloseTemplate" �� � �� �template(id$,t$) � � handle,pos h ș "Wimp_LoadTemplate",,bk,remainingiconspace,iconspace+2048,-1,id$,0 � ,,remainingiconspace,,,,pos 1 � pos=0 � � 1,"Template '"+id$+"' not found" � t$<>"" � & � bk!56 � 1<<8 � 0 $(bk!72)=t$ : bk!80=�(t$) D � N $(bk+72)=t$ X � b � l � id$="vumeter" bk?35=&FF v( ș "Wimp_CreateWindow",,bk � handle �=handle � �� �mousechange(mouse) �* � b,window,icon,x,y,mx,my,mb,index,R6 � x = bk!0 � y = bk!4 � b = bk!8 � window = bk!12 � icon = bk!16 � �mouse(mx,my,mb) � � � b=1 � � Ȏ window � � vumeter : �stop $ � keyboard : �keyboard_click � � * 4 � b=2 � > Ȏ window � H( � iconbar : �open_menu("iconbar") R) � vumeter : �open_menu("mainmenu") \ � resamplew f � icon=2 � p �flash_orange z �open_menu("rates") � � � � � � � � � � b=4 � � Ȏ window � � � iconbar : �open_vu � � echow : �echo_click �% � resamplew : �resamplew_click �! � vumeter : �play(&2550) �$ � keyboard : �keyboard_click � � $� . 8 B� �keyboard_click L � icon=77 � V �deselect(keyboard,oldkey) ` oldkey=-1 j autokey = � autokey t � ~ � � � � icon>0 � icon<49 � � �deselect(keyboard,oldkey) � �selecticon(keyboard,icon) � oldkey=icon � �play(pitch(icon)) � � �� � � �� �resamplew_click � � A% Ȏ icon � � 2 : �flash_orange �open_menu("rates") ( 2 � 3 : < �flash_orange F# A% = ��indirect(resamplew,1) P � A%<1 � A%>255 � Z* � 1,"New sample rate out of range" d � n � lmir=148 � x �resample(A%) � � � samplerate = A% � �closewindow(resamplew) � �modified � � � � � 4 : � �flash_orange � �closewindow(resamplew) � � � �� � � �flash_orange ș "Wimp_BorderIcon",,bk " bk!8=0 , ș "Wimp_BorderIcon",,bk 6� @ J� �echo_click T � icon>0 � icon<9 � ^ echo_length = icon h � r � | � Ȏ icon � � � 11 : � �flash_orange � �echo(echo_length) � � �� � �� �open_menu(m$) � � m$="iconbar" � �0 ș "MenuManager_OpenIconBarMenu",,menus,m$ � � �) ș "MenuManager_OpenMenu",,menus,m$ � � claimmenu$ = m$ � &� �open_vu 0 � � sample_present � : � vu_open � D �front(vumeter) N � X vu_open = � b �front1(vumeter) l � v� � �� �open_keyboard � � keyboard_open � � �front(keyboard) � � � �front1(keyboard) � keyboard_open=� � � �� � �� �menuselect(b) � � mx,my,mb,mir � ! �mouse(mx,my,mb) !C ș "MenuManager_DecodeMenu",,menus,claimmenu$,bk � mir,,,,,mip ! ! Ȏ mir � !* !4 � 130 : �signed !> � 131 : �logtolin !H � 132 : �lintolog !R !\ � 147,148 !f � sample_present � !p �closewindow(resamplew) !z) �settext(resamplew,0,�samplerate) !�" �settext(resamplew,1,"48") !� �mouse(mx,my,mb) !� lmir = mir !� �window_title(resamplew) !� �front1(resamplew) !� � !� !� � 149 : !� � sample_present � !� �deselect_echo !� �selecticon(echow,4) !� echo_length = 4 !� ș createm,,echow,mx,my " � " " � 150 : �reverse "$ � 151 : �scale ". � 106 : �open_keyboard "8 "B � 249 : �toggle_vidc "L" � 250 : �toggle_leafname "V+ � 253,254 : ș createm,,credits,mx,my "` � 255 : �menu_quit "j "t( � 300 : �settext(resamplew,1,"24") "~( � 301 : �settext(resamplew,1,"34") "�( � 302 : �settext(resamplew,1,"48") "�( � 303 : �settext(resamplew,1,"96") "� � "� "� � mir<>253 � mir<>254 � "� � mb=1 � "�4 ș "MenuManager_ReOpenMenu",,menus,claimmenu$ "� � "� � "� "�� "� # � �toggle_vidc # vidc = � vidc # � vidc � #2 ș "MenuManager_TickMenuItem",249,menus,,,,1 #( � #2- ș "MenuManager_TickMenuItem",249,menus #< � #F� #P #Z� �toggle_leafname #d useleafname = � useleafname #n � useleafname � #x2 ș "MenuManager_TickMenuItem",250,menus,,,,1 #� � #�- ș "MenuManager_TickMenuItem",250,menus #� � #�� #� #�� �menu_quit #� � saved �finish #�H � �ask("Sample not saved, Are you sure you want to quit") � �finish #�� #� #�� �scale #� �waitptr #� A%=samplebuffer $# B%=samplebuffer + samplelength $ C%=127 $ � scale $" �modified $, �arrowptr $6� $@ $J � �signed $T �waitptr $^ A%=samplebuffer $h# B%=samplebuffer + samplelength $r � convert $| �modified $� �arrowptr $�� $� $�� �logtolin $� �waitptr $� A%=samplebuffer $�# B%=samplebuffer + samplelength $� � logtolin $� �modified $� �arrowptr $�� $� $�� �lintolog % �waitptr % A%=samplebuffer %# B%=samplebuffer + samplelength %& � lintolog %0 �modified %: �arrowptr %D� %N %X� �reverse %b �waitptr %l A%=samplebuffer %v! B%=samplebuffer+samplelength %� �reverse %� �modified %� �arrowptr %�� %� %�� �echo(x) %� �waitptr %� � delay %� delay = x*500 %� %� A%=samplebuffer %�! B%=samplebuffer+samplelength %� &. � samplelength+delay > samplebuffersize � &, B%=samplebuffer+samplebuffersize-delay & � & samplelength += delay &* � &4 &> C%=delay &H �echo &R �modified &\ �closemenu &f �arrowptr &p� &z &�� �modified &� � A% &� saved = � &� �settext(aboutfile,0,"Yes") &�) �settext(aboutfile,13,�samplelength) &� �window_title(vumeter) &� A%=1E6 � samplerate &�5 �settext(aboutfile,3,�A%+"Hz "+�samplerate+"uS") &�� &� &�� �saved &� saved = � &� �settext(aboutfile,0,"No") ' �window_title(vumeter) '� ' '$� �drongo(message$) '. bk!0=0 '8 $(bk+4)=message$ 'B1 ș "Wimp_ReportError",bk,%0000001,progtitle$ 'L� 'V '` � �finish 'j$ ș "Sound_AttachVoice",1,voice1 't$ ș "Sound_RemoveVoice",,voiceid '~ ș "OS_Module",7,,code '�, ș "Wimp_ReleaseInterface",task_handle% '� ș "Wimp_CloseDown" '� � '�� '� '�� �icon_iconbar '� � handle '� bk!0=-1 '� bk!4=0 '� bk!8=-16 '� bk!12=80 '� bk!16=88 ( bk!20=&1700303A ( $(bk+24)="!quicksnd" ( ș createi,,bk � handle (=handle (( (2� �mouse(� x,� y,� b) (< ș gptri,,mbk (F x=mbk!0 (P y=mbk!4 (Z b=mbk!8 (d� (n (x� �getleafname(fsp$) (� pos=�(fsp$) (�! ȕ �fsp$,pos,1)<>"." � pos>0 (� pos-=1 (� � (�=�fsp$,pos+1) (� (�� �strnullterm(addr) (� � a$ (� ȕ ?addr (� a$+=�(?addr) (� addr+=1 (� � (�=a$ ) )� �ask(ask$) ) � playing �stop )" ), � R1 )6 bk!0=0 )@ $(bk+4)=ask$ )JG ș "Wimp_ReportError",bk,%0010011,"Message from "+progtitle$ � ,R1 )T� R1=1 =� � =� )^ )h� �closemenu )r ș createm,,-1 )|� )� )�� �strnullterm(addr,fsp$) )� $addr=fsp$ )� addr?�fsp$=0 )�� )� )�� �indirect(w,i) )� bk!0 = w )� bk!4 = i )� ș getis,,bk )� =$(bk!28) )� )�� �readvar(name$) * � R2 *1 ș "XOS_ReadVarVal",name$,bk,&100,0,0 � ,,R2 * bk?R2=&0D *&=$bk *0 *:� �front1(w) *D � xpix,ypix,xmul,ymul,x,y,q *N �read_screensize *X bk!0=w *b ș getwi,,bk *l x=(xpix/2)-((bk!52)/2) *v q=�(bk!48) *� y=(ypix/2)-q/2 *� bk!4=x *� bk!8=y *� bk!12=x+bk!52 *� bk!16=y+q *� bk!28=-1 *� ș openw,,bk *�� *� *�� �read_screensize *�7 ș "OS_ReadModeVariable",-1,11 � ,,xpix : xpix+=1 *�7 ș "OS_ReadModeVariable",-1,12 � ,,ypix : ypix+=1 *�+ ș "OS_ReadModeVariable",-1,4 � ,,xmul ++ ș "OS_ReadModeVariable",-1,5 � ,,ymul + xpix = xpix <<xmul + ypix = ypix <<ymul + � +* +4"� �keypressed(window,icon,key) +> � index,A% +H +R& � window=resamplew � key=return � +\" A% = ��indirect(resamplew,1) +f � A%<1 � A%>255 � +p) � 1,"New sample rate out of range" +z � +� � lmir=148 � +� �resample(A%) +� � +� samplerate = A% +� �closewindow(resamplew) +� �modified +� � +� � +� ,� , ,$� �assemble ,.� pass=0 � 2 � 2 ,8P%=code ,B [OPT pass ,L ,V ,`%.clearvalue EQUD &77777777 ,j".wavename EQUS "wave" ,t EQUB &00 ,~ ALIGN ,� ,�-.draw STMFD R13!,{R0-R12,R14} ,�0 SWI "Wimp_BaseOfSprites" ,�$ MOV R0,#&118 ,�' ADR R2,wavename ,�) SWI "OS_SpriteOp" ,�' LDR R0,[R2,#32] ,�% ADD R10,R0,R2 ,�" MOV R8,R10 ,�# MOV R9,#&10 ,�) LDR R0,clearvalue ,�! MOV R1,R0 - ! MOV R2,R0 - ! MOV R3,R0 -! MOV R4,R0 -! MOV R5,R0 -(! MOV R6,R0 -2! MOV R7,R0 -< -F'.drawcloop STMIA R8!,{R0-R7} -P' STMIA R8!,{R0-R7} -Z' STMIA R8!,{R0-R7} -d' STMIA R8!,{R0-R7} -n& SUBS R9,R9,#&01 -x% BNE drawcloop -� -�# LDR R9,upto -�' LDR R11,waveend -�# MOV R1,#&00 -�# MOV R6,#&00 -� -�(.drawloop LDRB R0,[R9],#&01 -�" CMP R9,R11 -�& SUBEQ R9,R9,#&01 -� -�$ � R0,R0,#&80 -�* MOV R0,R0,LSR #&03 -�* MOV R5,R0,LSL #&06 .% ADD R5,R5,R10 .$ ADD R5,R5,R6 .# STRB R1,[R5] ."& ADD R6,R6,#&01 .,# CMP R6,#&40 .6$ BNE drawloop .@ .J- LDMFD R13!,{R0-R12,R14} .T" MOV PC,R14 .^ .h .r .|#.clearmemory MOV R2,#&00 .�(.clearloop STR R2,[R0],#&04 .�! CMP R0,R1 .�% BLE clearloop .� .�" MOV PC,R14 .� .�.voicebase .� B fill .� B fill .�" B gateon .�# B gateoff .�$ B instance .�% LDMFD R13!,{PC} /% LDMFD R13!,{PC} // EQUD voicename-voicebase / /&&.voicename EQUS "QuickSnd" /0 EQUB &00 /: ALIGN /D /N.logscale EQUD &00 /X.lintolog EQUD &00 /b.wavebase EQUD &00 /l.length EQUD &00 /v.waveend EQUD &00 /�.finished EQUD &00 /�.upto EQUD &00 /�.forcekill EQUD &00 /� /�(.instance STMFD R13!,{R0-R4} /�# MOV R0,#&00 /�# MOV R1,#&00 /�# MOV R2,#&00 /�# MOV R3,#&00 /�# MOV R4,#&00 /�- SWI "Sound_Configure" /�( LDR R0,[R3,#&08] /�' STR R0,lintolog 0( LDR R0,[R3,#&0C] 0' STR R0,logscale 0+ LDMFD R13!,{R0-R4,PC} 0 0*'.gateon LDR R0,wavebase 04' STR R0,[R9,#16] 0>% LDR R1,length 0H$ ADD R0,R0,R1 0R' STR R0,[R9,#12] 0\& STR R0,waveend 0f' LDR R0,logscale 0p' STR R0,[R9,#20] 0z# MOV R0,#&00 0�' STR R0,[R9,#24] 0�' LDR R0,lintolog 0�' STR R0,[R9,#28] 0�# MOV R0,#&00 0�' STR R0,finished 0�( STR R0,forcekill 0� 0�&.fill LDMIA R9,{R1-R8} 0�$ � R1,R1,#&7F 0�/ LDRB R1,[R6,R1,LSL #&01] 0�* MOV R1,R1,LSR #&01 0�& RSB R1,R1,#127 0� 1.fillloop �fill 1 �fill 1 �fill 1$ �fill 1. 18# CMP R12,R10 1B$ BLT fillloop 1L 1V& STMIB R9,{R2-R8} 1`( LDR R0,forcekill 1j# CMP R0,#&00 1t BNE kill 1~ 1�# CMP R7,#&01 1� BEQ kill 1� 1�# STR R3,upto 1�# MOV R0,#&08 1�% LDMFD R13!,{PC} 1� 1�#.kill MOV R0,#&02 1�' STR R0,finished 1�% LDMFD R13!,{PC} 1� 1�#.gateoff MOV R0,#&00 2 2 (.flushloop STRB R0,[R12],R11 2( STRB R0,[R12],R11 2( STRB R0,[R12],R11 2(( STRB R0,[R12],R11 22# CMP R12,R10 2<% BLT flushloop 2F 2P) MOV R0,#%00000001 2Z% LDMFD R13!,{PC} 2d 2n 2x-.echo STMFD R13!,{R0-R12,R14} 2�#.echoloop LDRB R5,[R0] 2�$ � R5,R5,#&80 2�& LDRB R6,[R0,R2] 2�$ � R6,R6,#&80 2�$ ADD R4,R5,R6 2�( MOV R4,R4,LSR #1 2�$ � R4,R4,#&80 2�& STRB R4,[R0,R2] 2�$ ADD R0,R0,#1 2�! CMP R0,R1 2�$ BLE echoloop 2� 2�- LDMFD R13!,{R0-R12,R14} 3" MOV PC,R14 3 3-.reverse STMFD R13!,{R0-R12,R14} 3"#.reverseloop LDRB R5,[R0] 3,# LDRB R6,[R1] 36' STRB R5,[R1],#-1 3@& STRB R6,[R0],#1 3J! CMP R0,R1 3T' BLT reverseloop 3^ 3h- LDMFD R13!,{R0-R12,R14} 3r" MOV PC,R14 3| 3�..convert STMFD R13!, {R0-R12,R14} 3�#.convertloop LDRB R2,[R0] 3�$ � R2,R2,#&80 3�& STRB R2,[R0],#1 3�! CMP R0,R1 3�' BLE convertloop 3�. LDMFD R13!, {R0-R12,R14} 3�" MOV PC,R14 3� 3� 3�&.scaletableptr EQUD scaletable 3�-.scale STMFD R13!,{R0-R12,R14} 3�- LDR R12,scaletableptr 4 4% STMFD R13!,{R0} 4# MOV R4,#500 4&# MVN R5,#500 40 4:&.findmaxloop LDRB R3,[R0],#1 4D) MOV R3,R3,LSL #24 4N) MOV R3,R3,ASR #24 4X! CMP R3,R5 4b! MOVGT R5,R3 4l! CMP R3,R4 4v! MOVLT R4,R3 4�! CMP R0,R1 4�' BLE findmaxloop 4� 4�% LDMFD R13!,{R0} 4�$ RSB R4,R4,#0 4�! CMP R5,R4 4�! MOVGT R4,R5 4� 4�! CMP R4,#0 4�$ BEQ outscale 4� 4�.createdivtable 4� 5 MVN R6, #127 5 MOV R8, #0 5 5 .createdivtableloop 5* 54 MUL R7, R2, R6 5> �div(9,7,4) 5H! STRB R9, [R12, R8] 5R ADD R6, R6, #1 5\ ADD R8, R8, #1 5f CMP R8, #255 5p& BLE createdivtableloop 5z 5�.scaleloop 5� LDRB R2, [R0] 5� � R2, R2, #&80 5�! LDRB R2, [R12, R2] 5� STRB R2, [R0], #1 5� CMP R0, R1 5� BLE scaleloop 5� 5� .outscale 5�% LDMFD R13!,{R0-R12,R14} 5� MOV PC,R14 5� 5� 6 6 6(.logtolintableptr EQUD logtolintable 6$ 6. .logtolin 68 6B% STMFD R13!,{R0-R12,R14} 6L' LDR R3,logtolintableptr 6V 6`.logtolinloop 6j LDRB R2, [R0] 6t LDRB R2, [R3, R2] 6~ STRB R2, [R0], #1 6� CMP R0, R1 6� BLE logtolinloop 6� 6�' LDMFD R13!, {R0-R12, R14} 6� MOV PC,R14 6� 6� 6� 6� 6�(.lintologtableptr EQUD lintologtable 6� .lintolog 6�& STMFD R13!, {R0-R12,R14} 7 ( LDR R3, lintologtableptr 7 7.lintologloop 7 LDRB R2, [R0] 7( LDRB R2, [R3, R2] 72 STRB R2, [R0], #1 7< CMP R0, R1 7F BLE lintologloop 7P 7Z& LDMFD R13!, {R0-R12,R14} 7d MOV PC,R14 7n 7x 7� 7� 7�-.resample STMFD R13!,{R0-R12,R14} 7� 7�" MOV R12,R2 7�' CMP R12,#&10000 7�! MOV R2,#0 7�) BLT resampleloop2 7�' BEQ endresample 7� 7�! MOV R3,R0 7� 7�%.resampleloop1 ADDS R2,R2,R12 8) ADDCS R0,R0,#&10000 8, ADD R5,R0,R2,LSR #16 8! CMP R5,R1 8"' BGT endresample 8, 86# LDRB R4,[R5] 8@& STRB R4,[R3],#1 8J) B resampleloop1 8T 8^%.resampleloop2 ADDS R2,R2,R12 8h) SUBCS R1,R1,#&10000 8r/ LDRB R4,[R1,-R2,LSR #16] 8|' STRB R4,[R3],#-1 8�! CMP R3,R0 8�) BGE resampleloop2 8� 8�-.endresample LDMFD R13!,{R0-R12,R14} 8�" MOV PC,R14 8� 8� 8�]� 8�� 8� 8� 8�� �fill 8� [OPT pass 9 9, ADDS R2,R2,R2,LSL #16 9' ADDCS R5,R5,#&100 9&, ADD R3,R5,R2,LSR #24 90! CMP R3,R4 9:! MOVGT R3,R4 9D# MOVGT R7,#&01 9N# LDRB R0,[R3] 9X- LDRB R0,[R8,R0,LSL #5] 9b- SUBS R0,R0,R1,LSL #&01 9l# MOVMI R0,#&00 9v( STRB R0,[R12],R11 9�] 9�="" 9� 9� 9�#� �div(quotient,number,divisor) 9�remain = 0 9�place = 1 9�dsign = 2 9�msign = 3 9� 9�[ OPT pass 9� 9�C STMFD R13!, {remain,place,dsign,msign,number,divisor} : :' �S msign, number, #1<<31 :& RSBMI number, number, #0 : ' � dsign, msign, divisor :* CMP divisor, #0 :4( RSBMI divisor, divisor, #0 :> :H MOV remain, #0 :R MOV quotient, #0 :\! MOV place, #1<<31 :f :p.DivisionLoop :z* MOVS number, number, ASL #1 :�* ADC remain, remain, remain :�# CMP remain, divisor :�+ SUBGE remain, remain, divisor :�, �RGE quotient, quotient, place :�( MOVS place, place, LSR #1 :� BNE DivisionLoop :� :� CMP dsign, #0 :�* RSBMI quotient, quotient, #0 :� :�C LDMFD R13!, {remain,place,dsign,msign,number,divisor} :�] :�="" ; ; ; ;$ ;. ;8� �front(window) ;B bk!0=window ;L ș getws,,bk ;V bk!28=-1 ;` ș openw,,bk ;j� ;t ;~� �setspriteicon(w,i,s$) ;� bk!0=w ;� bk!4=i ;� ș getis,,bk ;� bk!256=w ;� bk!260=i ;� ș deletei,,bk+256 ;� $(bk+28)=s$ ;� bk!4=w ;� ș createi,,bk+4 ;�� ;� ;�� �date_time <