' > $.!DSEdit.!RunImage v1.00 < ) RISCOS Raw Digitised Sound Editor ) Copyright '89,'90 Jason Williams (* This program is in the public domain 2 "" crap%=load(c$):c$="" h r |$ dragging% mask%=0 mask%=1 * ș "Wimp_Poll",mask%,b% returncode%  Ȏ returncode%  0 : drag  1 : redraw(b%) ( 2 : ș "Wimp_OpenWindow",,b% ! 3 : closewindow(!b%) . 6 : buttonclick(b%!8,b%!12,b%!16)  7 : finishdrag  8 : processkey % 9 : menuselect(!b%,b%!4)  17,18 : receive   quit%  snum%>0  Z%=1 snum% 5 whandle%(Z%)>0 closewindow(whandle%(Z%)) & 0 :release(driver%) Dș "Wimp_CloseDown" N X: b load(name$) l num% v snum%<1  snum%+=1:num%=snum%   num%=0  Z%=0  :Z%+=1 " whandle%(Z%)<1 num%=Z%  num%>0 Z%>=16  num%>snum% snum%=num% G num%=0 error("Only 16 sounds can be edited at once"):num%=-1    num%<1 =  &$(names%+16*(num%-1))=leaf(name$)  iwhandle%(num%)=createwindow(names%+16*(num%-1),96-wstartoff%,512+wstartoff%,1056,368,0,13,&87001003) addicons(num%)  3wstartoff%-=48: wstartoff%<-160 wstartoff%=0 *openwindow(whandle%(num%)) 4name$(num%)=name$ > H1loadfile(start%,length%,rmalen%(num%),name$) R start%<1 = \-start%(num%)=start%:length%(num%)=length% f,sstart%(num%)=start%:slen%(num%)=length% p0magstart%(num%)=start%:maglen%(num%)=length% z%changed%(num%)=:speed%(num%)=&30 $flags%(num%)=1:zoomlev%(num%)=19 setupdt(num%) $infotext(num%):lastloaded%=num% = :  infotext(n%): M% 2M%=slen%(n%): M%>length%(n%) M%=length%(n%)  M%<1 M%=1 H$(infoicons%+(n%*40))="Selection: "+M%+" of "+length%(n%)+" bytes" 7!b%=whandle%(n%):b%!4=infoicon1%(n%):b%!8=0:b%!12=0 ș "Wimp_SetIconState",,b%  :  addicons(n%)  h% Fh%=icon(whandle%(n%),0,wbott%,1056,wbott%+wheight%+4,&6080,0,0,0) $Eh%=spriteicon(whandle%(n%),20,292,96,360,&3102,sprspace%,"left") .Bh%=spriteicon(whandle%(n%),108,292,176,360,&3102,1,"!dsicon") 8 BF h%=spriteicon(whandle%(n%),196,292,264,360,&3102,sprspace%,"19") L zoominame%(n%)=alloc% V `L NOTE!!!! -If icon position changes, you must change ForceRedraw of it j tHh%=spriteicon(whandle%(n%),284,292,352,360,&3102,sprspace%,"right") ~ !b%=whandle%(n%) :b%!4=376:b%!8=324:b%!12=1048:b%!16=364:b%!20=&07002119 .b%!24=infoicons%+(40*n%):b%!28=-1:b%!32=20 -ș "Wimp_CreateIcon",,b% infoicon1%(n%) `spdicon%(n%)=spriteicon(whandle%(n%),376,wbott%+wheight%+16,1048,324,&2102,sprspace%,"kbd")  :  leaf(a$)  p%  p%=a$ "ȕa$,p%,1)=" " p%>0:p%-=1: a$=a$,p%) #ȕa$,p%,1)<>"." p%>0:p%-=1:  =a$,p%+1) :  init ( colms%,rows%,cols% 2 <driver%=claim(2048) F' driver%=0 ș "Wimp_Closedown": P Z mtable% 256 d& start%(16),length%(16),name$(16) n& speed%(16),sstart%(16),slen%(16) x magstart%(16),maglen%(16)  whandle%(16),rmalen%(16)  flags%(16),changed%(16) ) dt%(16),infoicon1%(16),spdicon%(16) ! zoomlev%(16),zoominame%(16)  infoicons% 650  ) F%=infoicons% infoicons%+640 40  $F%=42,0)    sprspace% 12*1024 $!sprspace%=12*1024:sprspace%!4=0 "sprspace%!8=16:sprspace%!12=16 :ș "OS_SpriteOp",&10A,sprspace%,".Sprites"  start%()=0:length%()=0: "& F%=0 16:name$(F%)="RawSound": ,&speed%()=&30:sstart%()=0:slen%()=0 67magstart%()=0:maglen%()=0:whandle%()=0:changed%()= @zoomlev%()=19:flags%()=1 J Tvolume%=15 ^ clipit%= h rsavesel%= |savewind%=0 getsteps(xstep%,ystep%)  changed%= 'createfilew(filewindow%,filename%) )createfilew(filewindow2%,filename2%)  ¬menu$="Play sound ,SaveY,Select all ,>Selection ,SaveZ,Play ,Delete ,<,>Edit ,Ramp up ,Ramp down ,AmplifyW,Move centreW,Limit upW,Limit downW,SqueezeW,Make silenceW,<," ̮menu2$=">Special FX ,Add constW,Eor constW,Reverse ,EchoW,Flange EchoW,<,>Options ,Set speedW,Set volumeX,ClippingB,LinesB,<,>Convert ,Logarithmic ,Bit signed ,Amiga ,<,"  4lastval1$="200%":lastval2$="128":lastval3$="128" Elastval4$="1024":lastval5$="4096":lastval6$="50%":lastval7$="128"  dialogb%(3)  dialog%=0 Ainsert$="":dragging%=:dragn%=0:dragsx%=0:olddrag%=0:dragy%=0 lastloaded%=0  &: 0" getsteps( xstep%, ystep%) :xstep%=2^modeinfo(4) Dystep%=2^modeinfo(5) N Xs xstep%<=0 ystep%<=0 42,"Sorry, this screen mode has confused me. Try mode 12!": *Should* never happen! b lAxmax%=(modeinfo(11)+1)*xstep% : OS coords resolution x,y v"ymax%=(modeinfo(12)+1)*ystep%  Fwleft%=16:wbott%=16 : Sound-display area of window >wwidth%=1024:wheight%=256 : (Don't change this!)  :  modeinfo(V%) (ș "OS_ReadModeVariable",,V% ,,V% =V% :  assemble  code% 20*1024 (("LOAD .Code "+~code%)  tfer =(code%!0)+code%  bfer =(code%!4)+code% tablemod =(code%!8)+code%  addblocks =(code%!12)+code% *addclip =(code%!16)+code% 4avgblocks =(code%!20)+code% >avgclip =(code%!24)+code% H R: \& startdrag(n%): x%,xl%,xw%,conv fdragging%= p;dragn%=n% : Number of sound being dragged z=dragsx%=b%!0 : Start-x (screen coords) of drag =olddrag%=&42424242 : Old end-x ( " " ) of drag  b%!0=whandle%(n%)  ș "Wimp_GetWindowState",,b% x%=b%!4-b%!20+wleft%  dragsx%x%+wwidth% dragsx%=x%+wwidth% dragy%=b%!16-b%!24+wbott%  " Invert out the old inversion  conv=wwidth%/maglen%(n%) , xl%=(sstart%(n%)-magstart%(n%))*conv+x%  xl%1023 xw%<0 xw%=1023 * xl%+xw%-x%>1023 xw%=1023-(xl%-x%)  draginv(xl%,xw%) $ ." Now start Wimp_DragBox drag: 8 B!b%=whandle%(n%) L6b%!4=7 : Wimp doesn't draw the dragbox for me V"b%!8=0:b%!12=0:b%!16=0:b%!20=0 `Kb%!24=x% : Mouse bounds rectangle - keep pointer within sound_window jb%!28=dragy% tb%!32=x%+wwidth% ~b%!36=dragy%+wheight% ș "Wimp_DragBox",,b%  :  finishdrag  dragging% sendsave: dragging%=  b%!0=whandle%(dragn%) ș "Wimp_GetWindowState",,b% x%=b%!4-b%!20+wleft%   olddrag%=&42424242  olddrag%=dragsx%  , olddrag%1056 dragsx%=1056 < olddrag%<0 olddrag%=0 F3 dragsx%+olddrag%>1056 olddrag%=1056-dragsx% P ZGsstart%(dragn%)=magstart%(dragn%)+maglen%(dragn%)*(dragsx%/wwidth%) d4slen%(dragn%)=maglen%(dragn%)*(olddrag%/wwidth%) nchkmag(dragn%) xinfotext(dragn%) 6ș"Wimp_ForceRedraw",whandle%(dragn%),0,0,1279,288  :  drag: x%,y%,but%,step%  dragging% ș "OS_Mouse" x%,y%,but%  J olddrag%=&42424242 3,7:olddrag%=x%:draginv(dragsx%,x%-dragsx%): # x%xstep%=olddrag%xstep%  ; For non-flicker-but-not-quite-right invert... step%=xstep% Q (olddrag%dragsx%) (olddrag%>dragsx% x%dragsx%  olddrag%>x% ". draginv(x%+step%,olddrag%-(x%+step%)) , 64 draginv(olddrag%+step%,x%-(olddrag%+step%)) @ J T olddrag%>x% ^( draginv(x%,(olddrag%-step%)-x%) h r. draginv(olddrag%,x%-(olddrag%+step%)) |  olddrag%=x%  : ' draginv(x1%,x2%): more%,x0%,y0% ! x2%<0 x2%=(x2%):x1%-=x2%  !b%=whandle%(dragn%) ș"Wimp_GetWindowState",,b% x0%=b%!4-b%!20  b%!4=(x1%-xstep%)-x0% b%!8=wbott% b%!12=(x1%+x2%+xstep%)-x0%  b%!16=wbott%+wheight%+ystep%  &&ș "Wimp_UpdateWindow",,b% more% 03,7 : ȕ more% D y0%=b%!16-b%!24 N, 3,7:ȓȐ x1%,y0%+wbott%,x2%,wheight% X( ș "Wimp_GetRectangle",,b% more% b l v: & invert(n%,x%,y%): xl%,xw%,conv 0 dragging% : NO INVERSION if dragging # maglen%(n%)<1 maglen%(n%)=1 conv=wwidth%/maglen%(n%) +xl%=(sstart%(n%)-magstart%(n%))*conv+x%  xl%1023 xw%<0 xw%=1023 ) xl%+xw%-x%>1023 xw%=1023-(xl%-x%)  3,7 ȓȐ xl%,y%,xw%,wheight%  :  redraw(b%)  more%,num%,x0%,y0% num%=handletosnum(!b%) &ș "Wimp_RedrawWindow",,b% more% * 4 ȕ more% > x0%=b%!4-b%!20 H y0%=b%!16-b%!24 R draw(num%,x0%,y0%) \( ș "Wimp_GetRectangle",,b% more% f p z:  handletosnum(handle%) num%,Z% Z%=0:num%=0 :Z%+=1 & whandle%(Z%)=handle% num%=Z%  num%>0 Z%>=snum% =num% :  setupdt(num%) release(dt%(num%)) dt%(num%)=claim(1024) 6 dt%(num%)=0 42,"Fatal error: No room in RMA"  Z%=0 1023 ? dt%(num%)?Z%=magstart%(num%)?((Z%/wwidth%)*maglen%(num%))   $: . draw(num%,x0%,y0%) 8 x%,y%,w% B!left%=b%!28-x0%-wleft%-xstep% Lright%=b%!36-x0%-wleft% V left%<0 left%=0 `. (right%-left%)>1023 right%=left%+1023 j right%>1023 right%=1023 tw%=(right%-left%) ~ w%<=0  y%=y0%+wbott% x%=x0%+wleft%  line%=(flags%(num%) 1)  'col(0):ȓȐ x%,y%,wwidth%,wheight% 8col(15): x%,y%+wheight%2,x%+wwidth%,y%+wheight%2 /col(7):ȓ x%-8,y%-8,wwidth%+16,wheight%+16    col(5)  left%.Speaker "+~driver%)  driver%+&F4  : - play(n%,start%,length%,speed%,volume%)  driver%!0=start% driver%!4=start%+length% driver%?&1C=speed%  Ƞ 2 *VOLUME 127  *CHA. 2 8  2,-volume%,255,255  *FX21 & 0: :M========================================================================= D: N? transfer(A%,C%,B%) : Transfer block (A% to A%+C%) to B% X tfer b l: v delete(s%,l%,n%) ș "Hourglass_On" 6transfer(s%+l%,start%(n%)+length%(n%)-(s%+l%),s%) length%(n%)-=l% maglen%(n%)-=l% chkmag(n%) sstart%(n%)=start%(n%) slen%(n%)=length%(n%) changed%= ș "Hourglass_Off"  :  chkmag(n%) 5 sstart%(n%)start%(n%)+length%(n%)) *6 magstart%(n%)=start%(n%):maglen%(n%)=length%(n%) 4 >9 magstart%(n%)start%(n%)+length%(n%) R6 maglen%(n%)=start%(n%)+length%(n%)-magstart%(n%) \ f p: z paste(n%,fname$,insert%) 9 c%,istart%,ilen%,pstart%,plen%,newstart%,plenround%  ilen%=0 7c%=(fname$): c%<>0 ilen%=#c% : Insert length #c%  c%=0 ilen%<1 ș "Hourglass_On" claimmore(n%,ilen%)  newstart%<1 DjS  -istart%=claim(ilen%): istart%<1 DjS  #("LOAD "+fname$+" "+~istart%)  insert%  A%=sstart%(n%)+ilen%  B%=pstart%+plen%+ilen%  C%=pstart%+plen% $ bfer . 8(transfer(istart%,ilen%,sstart%(n%)) B" insert% length%(n%)+=ilen% L0sstart%(n%)=start%(n%):slen%(n%)=length%(n%) V4magstart%(n%)=start%(n%):maglen%(n%)=length%(n%) `release(istart%) jș "Hourglass_Off" t ~:  add(n%,fname$,add%)  c%,clipboard%,l%  "c%=(fname$): c%<>0 l%=#c% #c%  c%=0 ș "Hourglass_On" clipboard%=claim(l%+16) ) clipboard%<1 ș "Hourglass_Off": &("LOAD "+fname$+" "+~clipboard%) A%=clipboard% B%=sstart%(n%)  l% makesilence(n%): pstart%,plen%,plenround%,newstart%,l% ș "Hourglass_On" 'l%=menuval(80,lastval5$,1,10000,4) claimmore(n%,l%) ' newstart%<1 ș"Hourglass_Off":  Htransfer(sstart%(n%),plen%-(sstart%(n%)-start%(n%)),sstart%(n%)+l%)   Z%=0 255  mtable%?Z%=128  tablemod(sstart%(n%),l%)  length%(n%)+=l% 3magstart%(n%)=newstart%:maglen%(n%)=length%(n%) "chkmag(n%) ,changed%= 6ș "Hourglass_Off" @ J: T rampup(s%,l%) ^ ș "Hourglass_On" h Z%=0 l% r B%=s%?Z% | B%=(B%-128)*(Z%/l%)  B%+=128  s%?Z%=B%   changed%=  ș "Hourglass_Off"  :  rampdown(s%,l%)  ș "Hourglass_On"  Z%=0 l%  B%=s%?Z%  B%=(B%-128)*((l%-Z%)/l%)  B%+=128  s%?Z%=B%   changed%= & ș "Hourglass_Off" 0 :: D movecentre(s%,l%) N C% X& C%=menuval(16,lastval7$,1,255,3) b C%=C%-128 l ș "Hourglass_On" v  Z%=0 255  B%=Z%-C%:clipit  mtable%?Z%=B%   tablemod(s%,l%)   ș "Hourglass_Off"  changed%=  :  limitup(s%,l%)  C% & C%=menuval(32,lastval7$,1,255,3)  ș "Hourglass_On"    Z%=0 255  . Z%>C% mtable%?Z%=C% mtable%?Z%=Z% * 4 tablemod(s%,l%) > changed%= H R ș "Hourglass_Off" \ f: p limitdown(s%,l%) z C% & C%=menuval(48,lastval7$,1,255,3)  ș "Hourglass_On"   Z%=0 255 . Z%>1) $ Ȕ ?Z%,e%?-Z% . 8 changed%= B ș "Hourglass_Off" L V: ` amplify(s%,l%,pc%): amp j1 pc%=-1 pc%=menuval(0,lastval1$,1,999,3) t$ pc%=100 pc%<1 pc%>999 ~ ș "Hourglass_On"   amp=pc%/100  Z%=0 255  B%=((Z%-128)*amp)+128  clipit  mtable%?Z%=B%   tablemod(s%,l%)  changed%=   ș "Hourglass_Off"  :   addconst(s%,l%): n% ) n%=menuval(96,lastval2$,-255,255,4)  ș "Hourglass_On" ( 2 Z%=0 255 < B%=Z%+n%:clipit F mtable%?Z%=B% P Z tablemod(s%,l%) d changed%= n x ș "Hourglass_Off"  :  eorconst(s%,l%) ' n%=menuval(112,lastval3$,1,255,3)  n%<1 n%>255 n%=n%&FF  ș "Hourglass_On"   Z%=0 255  mtable%?Z%=Z%n%   tablemod(s%,l%)  changed%=   ș "Hourglass_Off"  : "/ flange(s%,l%): echolength%,echostrength ,0echolength%=menuval(144,lastval4$,1,9999,4) 6echostrength=.7 @ Jș "Hourglass_On" T Z%=s% s%+l%-echolength% ^ T%=(?Z%-128)*echostrength h B%=(Z%?echolength%)+T% r clipit:Z%?echolength%=B% | changed%= ș "Hourglass_Off"  : - echo(s%,l%): echolength%,echostrength 0echolength%=menuval(128,lastval4$,1,9999,4) echostrength=.7  ș "Hourglass_On" # Z%=s%+l% s%+echolength% -1 , T%=((Z%?-echolength%)-128)*echostrength  B%=(?Z%)+T%:clipit  ?Z%=B%  changed%= ș "Hourglass_Off" & 0: : tablemod(A%,B%) D B%+=A% N C%=mtable% X tablemod b l: v changespeed(num%): A$ n%=menuval(160,A$,1,255,3) speed%(num%)=n% &FF  :  changevol: A$ n%=menuval(176,A$,1,15,2) volume%=n%16  :  zoom(n%,but%)  z%:z%=zoomlev%(n%)  but%=1 z%+=1 z%-=1  z%<8 z%=19  z%>19 z%=8    z%=19  ( start%=start%(n%):len%=length%(n%) * 4 2^z%>length%(n%) > but%=4 H% :z%-=1: 2^z%<=length%(n%) R z%<8 z%=19 \, len%=length%(n%):start%=start%(n%) f p z%=19 z 4 z%=19 start%=start%(n%):len%=length%(n%)   len%=2^z% 3 start%=(magstart%(n%)+maglen%(n%)2)-len%2    "$zoominame%(n%)="00"+(z%),2)  zoomlev%(n%)=z% magstart%(n%)=start% maglen%(n%)=len% setupdt(n%)  3ș "Wimp_ForceRedraw",whandle%(n%),0,0,1280,288 6ș "Wimp_ForceRedraw",whandle%(n%),196,292,264,360 $ .: 8 scroll(n%,d%) B zoomlev%(n%)=19 L+magstart%(n%)+=d%*((2^zoomlev%(n%)) 4) Vchkmag(n%) `setupdt(n%) j3ș "Wimp_ForceRedraw",whandle%(n%),0,0,1280,288 t ~:  squeeze(s%,l%,n%) ; n,newlen%,pstart%,plen%,plenround%,newstart%,A%,B%,C%  ) n=menuval(64,lastval6$,1,999,3)/100  n=1.00   ș "Hourglass_On"  newlen%=n*l%   n>1.00  claimmore(n%,newlen%-l%) * newstart%<1 ș"Hourglass_Off":    s%=sstart%(n%) B newlen%=n*l% : Recalc, as this corrupted by PROCclaimmore  (3 slen%(n%)512  A%=Z% Z%-511 -1  s%?A%=s%?(A%/n)   Z%-=512 7 ș "Hourglass_Percentage",100-(Z%/newlen%*100)   5 Z%=Z% 0 -1 : last 0..511 bytes  s%?Z%=s%?(Z%/n)    Z%=0 B ȕ newlen%-Z%>512 : 512 byte chunks with hglass  A%=Z% Z%+511  s%?A%=s%?(A%/n)  " Z%+=512 ,1 ș "Hourglass_Percentage",Z%/newlen%*100 6 @ J8 Z%=Z% newlen% : last 0..511 bytes T s%?Z%=s%?(Z%/n) ^ h r8 l%255 B%=255:  B%<0 B%=0  : &L======================================================================== 0: : claim(size%) D N errorend($) X bF Do OS_Module call to find biggest block - If too small, complain l1 - This may bugger up auto-allocation to RMA vK - This may be a good thing: the user must explicitly give us the mem.  ,ș "OS_Module",6,,,size% ,,ptr%;flags% > ptr%<1 flags%<>6 error("Not enough room in RMA"):=0 =ptr% : < claimmore(n%,l%) : Get l% free bytes at end of sound (pstart%=start%(n%):plen%=length%(n%) rmalen%=rmalen%(n%)  (rmalen%-plen%)0 ! newstart% newstart%>pstart% !H, transfer(pstart%,plen%,newstart%) !R !\0 start%(n%)=newstart%:rmalen%(n%)=newlen% !f3 sstart%(n%)=(sstart%(n%)-pstart%)+newstart% !p pstart%=newstart% !z ! ! newstart%=pstart% ! ! !: ! release( ptr%) ! !% ptr%>0 ș "OS_Module",7,,ptr% ! ptr%=0 ! !: ! buttonclick(B%,W%,I%) ! Ȏ B% " 1 : saclick(B%,W%,I%) ") 2 : menuclick(W%,b%!0-16,b%!4-12) " 4 : saclick(B%,W%,I%) "$ ". "8: "B saclick(B%,W%,I%) "L" proc%,n%,xrange%,x0%:proc%= "V snum%<1 "` "j W%=filewindow% "t n%=handletosnum(mw%) "~ Ȏ I% "? fileicon%: savesel%=:savewind%=mw%:dragfile:proc%= "i fileok%,filenameicon%: saveit(n%,$filename%,start%(n%),length%(n%)):proc%=:name$(n%)=$filename% " " " " W%=filewindow2% " n%=handletosnum(mw%) " Ȏ I% "? fileicon%: savesel%=:savewind%=mw%:dragfile:proc%= "T fileok%,filenameicon%: saveit(n%,$filename2%,sstart%(n%),slen%(n%)):proc%= " " # #  W%=dialog% # I%>-1 I%<6 proc%= # Ȏ I% #(; 0,1,2,3: sadialog(I%,B%,handletosnum(loadwind%)) #24 4: sadialog(4,13,handletosnum(loadwind%)) #< 5: killdialog #F #P #Z proc% #d #nZ%=1 #x # W%=whandle%(Z%) #4 ș "Wimp_SetCaretPosition",W%,-1,0,-1000,0,-1 # Grab the input focus # Ȏ I% # 0: startdrag(Z%) #6 1: B%=4 scroll(Z%,-1) scroll(Z%,1) #A 2: play(Z%,sstart%(Z%),slen%(Z%),speed%(Z%),volume%) # 3: zoom(Z%,B%) #6 4: B%=4 scroll(Z%,1) scroll(Z%,-1) #( spdicon%(Z%),infoicon1%(Z%): #5 b%!32=whandle%(Z%):b%!36=infoicon1%(Z%) #1 ș "Wimp_GetIconState",,b%+32,b%!36 #+ xrange%=b%!48-b%!40:x0%=b%!40 $@ b%!32=whandle%(Z%):ș "Wimp_GetWindowState",,b%+32 $ x0%+=(b%!36-b%!52) $6 speed%(Z%)=255-(((!b%-x0%)/xrange%)*255) $"@ play(Z%,sstart%(Z%),slen%(Z%),speed%(Z%),volume%) $,* ș "Wimp_GetPointerInfo",,b% $6B !b%<>0 x0%=(40) : Short pause for auto-repeat $@ $J $T Z%+=1 $^ Z%>snum% Z%>=17 $h $r: $| insrect(x%,y%,n%) $1!b%=whandle%(n%):ș "Wimp_GetWindowState",,b% $x%=x%-(b%!4-b%!20)-wleft% $y%=y%-(b%!16-b%!24)-wbott% $-=(x%>0 y%>0 x%0 $ Z%=1 snum% %F W%=whandle%(Z%) mastermenu("DS Edit",menu$,menu2$,X%,Y%,Z%) % % %& %0: %:" menuselect(mitem%,subitem%) %D stay%,num% %N ș "Wimp_GetPointerInfo",,b% %Xstay%=(b%!8=1) %b %l! mw%=-2 mitem%=1 quit%=: %v %num%=handletosnum(mw%) % snum%>0 % start%=sstart%(num%) % length%=slen%(num%) % changed%= % Ȏ mitem% %H 0: play(num%,start%(num%),length%(num%),speed%(num%),volume%) %3 1: Save- Done thru icons on file window %Ђ 2: sstart%(num%)=start%(num%):slen%(num%)=length%(num%):ș"Wimp_ForceRedraw",whandle%(num%),0,0,1279,288:infotext(num%) % 3: % Ȏ subitem% %9 0: Save Selection -Done thru' icon clicks %K 1: play(num%,sstart%(num%),slen%(num%),speed%(num%),volume%) &- 2: delete(start%,length%,num%) & & 4: &  Ȏ subitem% &*( 0: rampup(start%,length%) &4* 1: rampdown(start%,length%) &>, 2: amplify(start%,length%,-1) &H, 3: movecentre(start%,length%) &R) 4: limitup(start%,length%) &\+ 5: limitdown(start%,length%) &f9 6: squeeze(sstart%(num%),slen%(num%),num%) &p# 7: makesilence(num%) &z & 5: & Ȏ subitem% &* 0: addconst(start%,length%) &* 1: eorconst(start%,length%) &) 2: reverse(start%,length%) && 3: echo(start%,length%) &( 4: flange(start%,length%) & & 6: & Ȏ subitem% &# 0: changespeed(num%) & 1: changevol &F 2: clipit%=clipit%:menutick("Clipping",clipit%,menu2$) 'S 3: flags%(num%)=flags%(num%)1:ș "Wimp_ForceRedraw",mw%,0,0,1279,288 ' ' '$ 7: '. Ȏ subitem% '85 0: convert1(sstart%(num%),slen%(num%)) 'B5 1: convert2(sstart%(num%),slen%(num%)) 'L5 2: convert4(sstart%(num%),slen%(num%)) 'V '` 'j! changed% changed(num%) 't '~< stay% mastermenu("DS Edit",menu$,menu2$,mx%,my%,num%) ' ': ' changed(num%) 'changed%(num%)=:!b%=mw% 'setupdt(num%) '1$(names%+16*(num%-1))=leaf(name$(num%))+" *" 'retitle(whandle%(num%)) '*ș "Wimp_ForceRedraw",mw%,0,0,1279,288 'infotext(num%) ' ': ' processkey ( key%,num% ( num%=handletosnum(!b%) (key%=b%!24 ( (( Ȏ key% (2 13: (< num%>0 (FG play(num%,start%(num%),length%(num%),speed%(num%),volume%) (P (Z! saclick(13,!b%,b%!4) (d (n (xB 127,8: : Delete key pressed (delete) ( num%>0 ( 7 (3 delete(sstart%(num%),slen%(num%),num%) (- mw%=whandle%(num%):changed(num%) (E ș "Wimp_SetCaretPosition",whandle%(num%),-1,0,-1000,0,-1 ( ( (A 32: : Space bar (play selection) (M num%>0 play(num%,sstart%(num%),slen%(num%),speed%(num%),volume%) ( (> 414: : Page down (Amplify 75%) ( num%>0 ( 7 )2 amplify(sstart%(num%),slen%(num%),75) )- mw%=whandle%(num%):changed(num%) )E ș "Wimp_SetCaretPosition",whandle%(num%),-1,0,-1000,0,-1 )" ), )6= 415: : Page up (Amplify 150%) )@ num%>0 )J 7 )T3 amplify(sstart%(num%),slen%(num%),150) )^- mw%=whandle%(num%):changed(num%) )hE ș "Wimp_SetCaretPosition",whandle%(num%),-1,0,-1000,0,-1 )r )| )8 395: : Copy (Select all) )$ sstart%(num%)=start%(num%) )# slen%(num%)=length%(num%) ): ș"Wimp_ForceRedraw",whandle%(num%),0,0,1279,288 ) infotext(num%) ) ) )" : ș "Wimp_ProcessKey",key% ) ) ): ) dragfile )5 savesel% !b%=filewindow2% !b%=filewindow% *! ș"Wimp_GetWindowState",,b% *& wex%=b%!4-b%!20:wey%=b%!16-b%!24 * b%!4=fileicon% *& ș"Wimp_GetIconState",,b% *05 savesel% !b%=filewindow2% !b%=filewindow% *: b%!4=5 *D b%!8+=wex%:b%!12+=wey% *N b%!16+=wex%:b%!20+=wey% *X b%!24=0:b%!28=0 *b% b%!32=&7FFFFFFF:b%!36=&7FFFFFFF *l ș "Wimp_DragBox",,b% *v *: * retitle(handle%) *!b%=handle% * ș "Wimp_GetWindowState",,b% *ș "Wimp_CloseWindow",,b% *ș "Wimp_OpenWindow",,b% * *: *# saveit(n%,name$,start%,end%) *end%+=start% * name$,".") *- ș "OS_File",10,name$,&ED0,,start%,end% *& $(names%+16*(n%-1))=leaf(name$) + retitle(whandle%(n%)) +  changed%(n%)= + + < error("To save, drag the icon to a directory viewer") +* +4-!b%=filewindow%:ș "Wimp_CloseWindow",,b% +>.!b%=filewindow2%:ș "Wimp_CloseWindow",,b% +H-!b%=infohandle%:ș "Wimp_CloseWindow",,b% +Rș "Wimp_CreateMenu",,-1 +\ +f: +p" createfilew( hand%,fname%) +z hand%<>0 + !b%=hand% + ș "Wimp_DeleteWindow",,b% + + +b%!0=0:b%!4=0 +b%!8=246:b%!12=168 +b%!16=0:b%!20=0 +b%!24=-1:b%!28=&93 +b%!32=&1070207:b%!36=&20D04 +b%!40=0:b%!44=-1024 +b%!48=1280:b%!52=0 +b%!56=&3D:b%!60=0 +b%!64=1:b%!68=0 ,b%!84=0:$(b%+72)="Save as:" ,&ș "Wimp_CreateWindow",,b% hand% , ,$=fileok%=icon(hand%,192,-160,238,-112,&C701913D,oks%,0,3) ,.Jfilenameicon%=icon(hand%,10,-160,186,-112,&700F13D,fname%,valid%,256) ,8@fileicon%=icon(hand%,56,-92,184,-20,&D7006102,sprite%,1,20) ,B ,L: ,V dialog(num%) ,` crap%,A$ ,j dialog%>0 killdialog ,t.$scratch%="Save to "+leaf(name$(num%))+0 ,~Bdialog%=createwindow(scratch%,320,320,640,384,0,12,%10010011) , , i%=0 3 , i%=0 ,V crap%=spriteicon(dialog%,48,288-i%*48,96,336-i%*48,&3102,sprspace%,"radioon") , ,W crap%=spriteicon(dialog%,48,288-i%*48,96,336-i%*48,&3102,sprspace%,"radiooff") , , dialogb%(i%)=alloc% , , ,8crap%=texticon(dialog%,48,48,176,96,&C701913D,"OK") ,=crap%=texticon(dialog%,464,48,592,96,&0701913D,"CANCEL") - - Dnm - i%=0 3 - A$ -(G crap%=texticon(dialog%,144,288-i%*48,688,336-i%*48,&C7000111,A$) -2 -< -F7:openwindow(dialog%) -Pȗ ȓ 320,320,640,384 -Z -d: -nm "Insert at selection start","Overwrite from sel. start","Add sounds together","Average sounds together" -x: - killdialog -ȗ ȓ 0,0,1279,1023 -!b%=dialog% -ș "Wimp_DeleteWindow",,b% - dialog%=0 - -: - sadialog(I%,B%,n%) - i%=-1 - :i%+=1 -) $dialogb%(i%),7)="radioon" i%=3 -' $dialogb%(i%),7)<>"radioon" - . B%=13 I%=4 . I%=4 . killdialog ."! n%=handletosnum(loadwind%) ., Ȏ i% .6! 0: paste(n%,insert$,) .@! 1: paste(n%,insert$,) .J 2: add(n%,insert$,) .T 3: add(n%,insert$,) .^ .h changed%(n%)= .r/ $(names%+16*(n%-1))=leaf(name$(n%))+" *" .| retitle(loadwind%) .? setupdt(n%):ș "Wimp_ForceRedraw",loadwind%,0,0,1279,288 . . i%<>I% . $(dialogb%(i%))="radiooff" . $(dialogb%(I%))="radioon" .= ș "Wimp_ForceRedraw",dialog%,48,288-I%*48,96,336-I%*48 .= ș "Wimp_ForceRedraw",dialog%,48,288-i%*48,96,336-i%*48 . . .infotext(n%) . .: .5 createwindow(titleptr%,X%,Y%,W%,H%,bg%,hg%,F%) /$b%=92,0) /!b%=X%:b%!4=Y% /b%!8=X%+W%:b%!12=Y%+H% /&b%!16=0:b%!20=0 /0b%!24=-1:b%!28=F% /:b%?32=7:b%?33=2 /Db%?34=7:b%?35=1 /Nb%?36=3:b%?37=1 /Xb%?38=12:b%!40=0 /bb%!44=0:b%!48=W% /lb%!52=H%:b%!56=&13D /vb%!60=&A000 /b%!72=titleptr%:b%!76=-1 /b%!80=$titleptr% /#ș "Wimp_CreateWindow",,b% H% /=H% /: / openwindow(!b%) / ș "Wimp_GetWindowState",,b% / b%!28=-1 /ș "Wimp_OpenWindow",,b% / /: / closewindow(W%) / n% 0 0 ș "Hourglass_On" 0n%=handletosnum(W%) 0  0* quit(n%) 04 compactrma(n%) 0> release(start%(n%)) 0H release(dt%(n%)) 0R length%(n%)=0 0\ sstart%(n%)=0:slen%(n%)=0 0f" magstart%(n%)=0:maglen%(n%)=0 0p" changed%(n%)=:speed%(n%)=&30 0z 0 !b%=W% 0 ș "Wimp_CloseWindow",,b% 0 ș "Wimp_DeleteWindow",,b% 0) whandle%(n%)=0: n%=snum% snum%-=1 0 0ș "Hourglass_Off" 0 0: 0@ compactrma(n%) : Moves other sounds down if room is made 0 0A If @@@@****%%%% possible, uses SYS "OS_Module" calls to get 0C free spaces in RMA, and compact sounds together to save holes 0 appearing in the RMA 1 1. 6 Months later: Ha! As if I can do THAT! 1 1$: 1. quit(num%) 18 q% 1B changed%(num%) = 1L 1V6$b%="'"+name$(num%)+"' not saved: Really Quit?"+0 1`.ș "Wimp_ReportError",b%,3,"DS Edit" ,q% 1j q%=1 := 1t= 1~: 1E texticon(!b%,b%!4,b%!8,b%!12,b%!16,f%,t$): h% : @@@@****%%%% 1:b%!20=f%: general: %11000111000000010100000000111101 1* ^ ^ ^ ^ ^ ^ ^ ^ ^ 1* 31 28 24 20 16 12 8 4 0 1 b%!24 t$+1 1 b%!28=-1 1 b%!32=t$ 1$(b%!24)=t$+0 1!ș "Wimp_CreateIcon",,b% h% 1=h% 1: 16 spriteicon(!b%,x1,y1,x2,y2,flags%,sptr%,sname$) 2! b%!24 sname$+1:b%!28=sptr% 2 alloc%=b%!24 2!b%!32=sname$+1:$b%!24=sname$ 2b%!4=x1:b%!8=y1 2(b%!12=x2:b%!16=y2 22b%!20=flags% 20 21 base%=menu%:wbase%=menu%+1792:wmptr%=wmenu% 2 $filename%=name$(n%) 2 $filename2%="Selection" 2) menutick("Lines",flags%(n%)1,m2$) 3& createmenu(menu%,title$,m$,m2$) 3B : WRITEABLES: 3 $wmenu%=128,0) 3"9 $wmenu%=((lastval1$))+"%" : Amplify 3,K $(wmenu%+16)=lastval7$ : Move centre/limitU/D 363 $(wmenu%+32)=lastval7$:$(wmenu%+48)=lastval7$ 3@9 $(wmenu%+64)=((lastval6$))+"%" : Squeeze 3JI $(wmenu%+80)=lastval5$:$(wmenu%+96)=lastval2$ : MSilence,Add const 3TG $(wmenu%+112)=lastval3$:$(wmenu%+128)=lastval4$ : Eor const,Echo 3^B $(wmenu%+144)=lastval4$ : Flange echo 3h3 $(wmenu%+160)="000"+(speed%(n%)),3): Speed 3r4 $(wmenu%+176)="000"+volume%,2) : Volume 3| 3& createmenu(menu%,title$,m$,m2$) 3 30ș "Wimp_CreateMenu",,menu%,X%-menu%!16/2,Y% 3 3: 3# createmenu(M%,title$,m$,m2$) 3 I%,max%,doneboth% 3 3doneboth%= 3$M%=title$:M%!12=&70207 3M%!20=44:M%!24=0 3I%=M%+28:max%=(title$)-2 3 4 4 4 A%=m$,",") 4&/ I%!4=submenu(base%,m$): A%>max% max%=A% 40 I%!8=&7000021 4: $(I%+12)=m$,A%-2) 4D special%=(m$,A%-1,1))-65 4ND Following line used to shade permanently unavailable items 4X) special%=21 I%!8=(I%!8)&400000 4b 4l2 special%=22 I%!4=writeable(m$,A%-2),5) 4v2 special%=23 I%!4=writeable(m$,A%-2),3) 4& special%=24 I%!4=filewindow% 4' special%=25 I%!4=filewindow2% 4, special%<0 special%>7 special%=0 4 I%!0=(special% 3) 4. $(I%+12),4)="Info" I%!4=infohandle% 4 m$=m$,A%+1) 4 I%+=24 4 m$="" 4 m2$="" doneboth%= 4 m$=m2$:m2$="" 4 doneboth% 4 4'I%!-24=(I%!-24) &80:M%!16=max%*16 5 5 : 5 writeable(t$,width%) 5 $wbase%=t$:wbase%!12=&70207 5*wbase%!16=132:wbase%!20=48 54wbase%!24=0:wbase%+=28 5>wbase%!0=&84:wbase%!4=-1 5H&wbase%!8=&7000121:wbase%!12=wmptr% 5Rwbase%!16=-1 5\wbase%!20=width% 5fwbase%+=36:wmptr%+=16 5p=wbase%-64 5z: 5 submenu( base%, m$) 5 a%,t$,new$ 5 m$,1)<>">" =-1 5 5m$=m$,m$-1) 5a%=m$,"<") 5new$=m$,a%-1) 5 5A%=m$,",") 5;createmenu(base%+256,m$,A%-1),new$,new$,",")+1),"") 5 5$m$=new$,new$,",")-1)+m$,a%+1) 5A%=m$,",") 6base%+=256 6 =base% 6: 6$" menutick(A$,state%, menu$) 6. p% 68( state% state%="B" state%="b" 6B%p%=menu$,A$):p%=menu$,",",p%)-1 6Lmenu$,p%,1)=(state%) 6V 6`: 6j2 menuval(addr%, lastval$,min%,max%,digits%) 6t A$:A$="":addr%+=wmenu% 6~ ?addr%="-" A$="-" 6 Z%=0 digits% 67 addr%?Z%>="0" addr%?Z%<="9" A$+=addr%?Z% 6 6! (A$)>=min% (A$)<=max% 6 A$>=0 6 lastval$=A$,digits%) 6 6! lastval$="-"+A$,digits%) 6 6 6 =(A$) 6: 7 receive 7 Ȏ b%!16 7 0 : quit%= 7 2 : recsave 7( 3 : recload 72 5 : recopen 7< 7F 7P: 7Z recsave 7d n%,s%,l% 7nn%=handletosnum(savewind%) 7x name$(n%)=zerostring(b%+44) 7 savesel% 7 s%=sstart%(n%):l%=slen%(n%) 7 7! s%=start%(n%):l%=length%(n%) 7 7 7saveit(n%,name$(n%),s%,l%) 7b%!12=b%!8:b%!16=3:!b%=64 7+ș "Wimp_SendMessage",17,b%,b%!20,b%!24 7 7: 7 recload 7 pn$,wh% 81 b%!12<>0 : Not from filer @@@@****%%%% 8 wh%=b%!20 8pn$=zerostring(b%+44) 8" wh%=-2 8, saveblock 86 load(pn$) 8@ restoreblock 8J sendloadack 8T 8^ 8h loadwind%=b%!20 8r insert$=zerostring(b%+44) 8|! dialog(handletosnum(wh%)) 8 8 8: 8 recopen 8 pn$,wh%,Z% 8pn$=zerostring(b%+44) 8 8 b%!40=&ED0 8 saveblock 8 load(pn$) 8 restoreblock 8 sendloadack 8 9 9 9 b%!40=&ED1 9&( **** Compressed DSEdit raw-sound 90 9: 9D b%!40=&DF9 9NC saveblock : **** Load SoundSynth samples 9XI : Note this doesn't remove header 9b load(pn$) 9l restoreblock 9v sendloadack 9 93 ș "Hourglass_On" : Eor by 128 9 Z%=0 255 9 mtable%?Z%=(Z% 128) 9 9; tablemod(start%(lastloaded%),length%(lastloaded%)) 9 setupdt(lastloaded%) 9 ș "Hourglass_Off" 9 9 9 9: 9 saveblock : Z%=0 240 4 :  scratch%!Z%=b%!Z% : :  :*: :4 restoreblock :> Z%=0 240 4 :H b%!Z%=scratch%!Z% :R :\ :f: :p sendsave :z p% : ș "Wimp_GetPointerInfo",,b% :(b%!20=64:b%!32=0:b%!36=1:b%!40=b%!12 :$b%!44=b%!16:b%!48=!b%:b%!52=b%!4 : : savesel% :+ b%!56=slen%(handletosnum(savewind%)) : p%=filename2% : :- b%!56=length%(handletosnum(savewind%)) : p%=filename% : : :b%!60=&ED0 ;$(b%+64)=leaf($p%) ;.ș "Wimp_SendMessage",17,b%+20,b%!12,b%!16 ; ;$: ;. sendloadack ;8 b%!16=4 ;Bb%!12=b%!8 ;L$ș "Wimp_SendMessage",17,b%,b%!4 ;V ;`: ;j zerostring(addr%) ;t A$ ;~ȕ ?addr%>31 ; A$+=(?addr%):addr%+=1 ; ;=A$ ;: ; wimpinit ;, b% 256,menu% 4000,wmenu% 255,oldb% 100 ;/ scratch% 255,saveblock% 241,infowind% 200 ; ; quit%= ;$b%="TASK" ;9ș "Wimp_Initialise",200,!b%,"DS Edit" ,taskhandle% ; <4ș "Wimp_OpenTemplate",,".Templates" < G ș "Wimp_LoadTemplate",,menu%,infowind%,infowind%+200,-1,"Info",0 <1 ș "Wimp_CreateWindow",,menu% infohandle% <ș "Wimp_CloseTemplate" <( <2= oks% 2,filename% 255,filename2% 255,valid% 3,sprite% 20 <<0$oks%="OK":$valid%="a~ ":$sprite%="file_ed0" >24)+128 = = =tablemod(S%,L%) =changed%= =release(Z%) = >ș "Hourglass_Off" > >: >& convert2(S%,L%) >0 A% >: >Dș "Hourglass_On" >N A% = 0 255 >X A% %00000001 >b$ mtable%?A% = 128 + (A%>>1) >l >v" mtable%?A% = 128 - (A%>>1) > > > >tablemod(S%,L%) >changed%= >ș "Hourglass_Off" > >: >@ convert3(S%,L%) : Convert Ed's 16-bit samples > A%,B%,T%,Y% > >ș "Hourglass_On" >% T% = S%+&529 S%+&529 + L% 2 ? A% = (T%?0) + (T%?1)*256 ? ) ?S% = (A% %1000000000000000) >> 8 ? S%+=1 ?  ?* ?4changed%= ?>ș "Hourglass_Off" ?H ?R: ?\ convert4(S%,L%) ?f A% ?p ?zș "Hourglass_On" ? A% = 0 255 ? mtable%?A% = A% 128 ? ? ?tablemod(S%,L%) ?changed%= ?ș "Hourglass_Off" ?