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
<