home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 55
/
Amiga_Dream_55.iso
/
RISCOS
/
MAGAZINE
/
LABOS
/
KING.ZIP
/
King
/
!Pulse
/
!RunImage
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1998-01-14
|
96KB
|
3,903 lines
PULSE by -KING- (a french TECHNO & HARD-ROCK lover guy).
All code in this basic file by KING.
"<KINGBasicLib$Dir>.General"
"<KINGBasicLib$Dir>.Wimp"
TaskName$="Pulse"
PathApp$="<Pulse$Dir>"
LibWimpInit
InitVariables
MemoryInit
ExprMax%=100
MaxEntry%=20
IconBlock% 200
"QTM_VUBarControl",2,-1
Constants
InitMode
InitQTM
CurColor%(3)
XPitch%(61)
XNote%(61)
a%=0
XPitch%(a%)
a%=0
$ A%=0
S$,3,1)
(A$)<<8
S$,2,1)
A%=A%
(A$)<<16
S$,1,1)
A%=A%
(A$)<<24
XNote%(a%)=A%
Options by default
OQuickDraw%=
OPaneVoice%=
OPaneSeq%=
OCursor%=2
ReadOptions
OHCell%=50
OWCell%=450
OQuickDraw%=
OPaneVoice%=
OPaneSeq%=
OInitQTMPlay%=
OCopyReverse%=
OCopyMode%=0
FontInit
"OS_SpriteOp",10,,"<PULSE$Dir>.Sprites"
"OS_ReadMemMapInfo"
PageSize%
F'TransfertPath$="<PULSE$Dir>.ForQTM"
BASICSize%=
-&8000
Heap%=
CreateMenus
LibSetExtent(HFXControl%,500,CHIcons%*(&F+&F+1))
PollMask%=%00000000110001
CurrentMenu%=-1
InitTempPattern
UpdateNote(-1,-1)
Block%!0=0
"Wimp_Poll",PollMask%,Block%,TaskId%
Poll%
Poll%
0 :
1 :
PollRedraw
2 :
PollOpenWindow
3 :
PollCloseWindow
6 :
PollMouseClick
7 :
EndDrag
8 :
KeyPressed
9 :
PollMenuSelection
11 :
LoseCaret
12 :
GainCaret
17,18,19 :
PollMessage
GainCaret
WinH%=Block%!0
IconH%=Block%!4
WinH%
HPlay%
IconH%
SelectIcon(10)
LoseCaret
WinH%=Block%!0
IconH%=Block%!4
WinH%
HPlay%
IconH%
DeselectIcon(10)
CreateIcon(handle%,xpos%,ypos%,xs%,ys%,flags%,Title$,mem%,area%)
Block%!0=handle%
Block%!4=xpos%
Block%!8=ypos%
Block%!12=xpos%+xs%
Block%!16=ypos%+ys%
Block%!20=flags%
OK% 12
$OK%=Title$
Block%!24=OK%
Block%!28=area%
Block%!32=12
"Wimp_CreateIcon",,Block%
Handle%
=Handle%
LibIconBarInstall
LibLoadTemplates("<PULSE$Dir>.Templates")
OpenWindow(WinH%)
Flags%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
Flags%=Block%!32
(Flags%>>16)
Block%!4 = 1000
Block%!8 = 0
Block%!12 = 3000
Block%!16 = 1000
Block%!20 = 0
Block%!24 = 0
Block%!28 = -1
"Wimp_OpenWindow",,Block%
WinOpened(WinH%)
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
Flags%=Block%!32
Cond%=(Flags%>>16)
Cond%=1
WinOpened(HPlayWin%)
Update VUs
Block%!0=HVUs%
Block%!4=0
Block%!8=-200
Block%!12=OWCell%*4
Block%!16=0
"Wimp_UpdateWindow",,Block%
Flag%
OX%=Block%!4-Block%!20
OY%=Block%!16-Block%!24
"QTM_ReadVULevels",1
VU1%
"QTM_ReadVULevels",2
VU2%
"QTM_ReadVULevels",3
VU3%
"QTM_ReadVULevels",4
VU4%
Flag%
OX%,OY%
DrawVUs
"Wimp_GetRectangle",,Block%
Flag%
VModify%=
OInitQTMPlay%=
ReInitQTMMod
UpdatePlayPosition
DrawVUs
ORIGIN OX%,OY%
128,0,0,0
C%=VU1%/64*255
A%=VCurPlayEvent%/64*255
255,C%,0
RECTANGLE FILL -OWCell%/2*(VU1%/64)+OWCell%/2,-100,OWCell%*(VU1%/64),100
0,-100,OWCell%,VU1%/64*100
C%=VU2%/64*255
255,C%,0
OWCell%,-100,OWCell%,VU2%/64*100
C%=VU3%/64*255
255,C%,0
OWCell%*2,-100,OWCell%,VU3%/64*100
C%=VU4%/64*255
255,C%,0
OWCell%*3,-100,OWCell%,VU4%/64*100
0,255,255,255
OWCell%,0,OWCell%,-100
OWCell%*2,0,OWCell%*2,-100
OWCell%*3,0,OWCell%*3,-100
RLibLoadTemplates
( HStore%=
LibWindowTemplate("Store")
) PaneIconFlags%=!(TemplBuffer%+88+16)
* PaneIconString%=!(TemplBuffer%+88+24)
( HPaneH%=
LibWindowTemplate("PaneH")
( HPaneV%=
LibWindowTemplate("PaneV")
, HSplData%=
LibWindowTemplate("SplData")
* HParams%=
LibWindowTemplate("Params")
Adr%=TemplBuffer%+88+32*51
X1NoteBBox%=!(Adr%)
Y1NoteBBox%=!(Adr%+4)
X2NoteBBox%=!(Adr%+8)
Y2NoteBBox%=!(Adr%+12)
, HSamples%=
LibWindowTemplate("Samples")
Adr%=TemplBuffer%+88+32*14
X1Spl%=!(Adr%)
Y1Spl%=!(Adr%+4)
X2Spl%=!(Adr%+8)
Y2Spl%=!(Adr%+12)
. HSongInfo%=
LibWindowTemplate("SongInfo")
& HCopy%=
LibWindowTemplate("Copy")
& HSave%=
LibWindowTemplate("Save")
, HPatSave%=
LibWindowTemplate("PatSave")
+ HInfo%=
LibWindowTemplate("PULSEInfo")
, HOptions%=
LibWindowTemplate("Options")
. HSequence%=
LibWindowTemplate("Sequence")
, HPlayWin%=
LibWindowTemplate("PlayWin")
& HPlay%=
LibWindowTemplate("Play")
0 HFXControl%=
LibWindowTemplate("FXControl")
$ HVUs%=
LibWindowTemplate("VUs")
Writable(IconH%)
Block%!0=WinH%
Block%!4=IconH%
"Wimp_GetIconState",,Block%
=Block%!28
PollCloseWindow
WinH%=Block%!0
! Entry%=
HandleToEntry(WinH%)
Entry%=-1
WinH%
HSamples%
LibCloseWindow(WinH%)
LibCloseWindow(HSplData%)
HPlayWin%
ClosePlayWindow
LibCloseWindow(WinH%)
Shell windows
ClosePattern(WinH%)
EndDrag
Send message to filer
"Wimp_GetPointerInfo",,Block%
WinH%=Block%!12
Block%!0=100
Block%!12=0
Block%!16=1 :
DataSave
Block%!20=WinH%
$(Block%+44)=""
Block%?(44+12)=0
"Wimp_SendMessage",17,Block%,WinH%
*********************************************MouseClick****************************************
PollMouseClick
X%=Block%!0
Y%=Block%!4
MX%=X%
MY%=Y%
Mouse%=Block%!8
WinH%=Block%!12
IconH%=Block%!16
WinH%
-2 :
IconBar
Mouse%
4 :
Select
VModuleState%=
L&
Advice user to drag a module
Block%!0=0
Error%=%100100000101
ON $(Block%+4)="Drag an AMIGA module to this icon to edit it, simple no?"
PE
"Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1
,OK%
LibOpenWindow(HPlay%)
1 :
Adjust
VModuleState%=
OpenPlayWindow(
2 :
Menu
VModuleState%=
ZP
EditEntry%=-1
LibMDisable(MPIconBar%,1)
LibMEnable(MPIconBar%,1)
[!
LibMEnable(MPIconBar%,2)
\!
LibMEnable(MPIconBar%,3)
]!
LibMEnable(MPIconBar%,4)
^!
LibMEnable(MPIconBar%,5)
_!
LibMEnable(MPIconBar%,7)
a"
LibMDisable(MPIconBar%,1)
b"
LibMDisable(MPIconBar%,2)
c"
LibMDisable(MPIconBar%,3)
d"
LibMDisable(MPIconBar%,4)
e"
LibMDisable(MPIconBar%,5)
f"
LibMDisable(MPIconBar%,7)
CheckTick(HParams%,1)
CheckTick(HSamples%,2)
CheckTick(HSongInfo%,3)
CheckTick(HPlay%,4)
CheckTick(HSequence%,5)
m
CheckTick(HFXControl%,6)
CheckTick(HPlayWin%,7)
o2
"Wimp_CreateMenu",,MPIconBar%,MX%-64,650
p CurrentMenu%=MENUIconBar%
HInfo%
Nothing
HParams%
HParams%
Entry%=EditEntry%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=Block%!4
Y%=Block%!16
IconH%
IDPPFX%
Effect POPUP
Block%!0=WinH%
Block%!4=IconH%
"Wimp_GetIconState",,Block%
"Wimp_CreateMenu",,MPEffects%,X%+Block%!16,Y%+Block%!20
CurrentMenu%=MENUEffects%
IDPPSpl%
SampleList POPUP
Block%!0=WinH%
Block%!4=IconH%
"Wimp_GetIconState",,Block%
"Wimp_CreateMenu",,MPSamples2%,X%+Block%!16,Y%+Block%!20
CurrentMenu%=MENUSamples%
IDNbSpl%
Open EditSample window.
ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%)
UpdateSampleInfo(Sample%)
OpenSamples(
Sequence
EnableIcon(37)
Pattern button isn't writable
Block%!0=WinH%
Block%!4=46
! Block%!8=(0<<15)
(1<<12)
" Block%!12=(1<<15)
(1<<12)
"Wimp_SetIconState",,Block%
"Wimp_SetCaretPosition",WinH%,37,0,0,-1,-1
Pattern
DisableIcon(37)
Pattern button is writable
Block%!0=WinH%
Block%!4=46
Block%!8=1<<15
Block%!12=1<<15
"Wimp_SetIconState",,Block%
"Wimp_SetCaretPosition",WinH%,46,0,0,-1,-1
No note
Note%=0
Sample%=0
Pitch%=&6B0
Effect%=0
PitchEffect%=0
StoreParams
%
UpdateNote(EditEntry%,Note%)
UpdateShell(Note%)
New note=0
!
UpdateNote(EditEntry%,0)
UpdateShell(Note%)
Decrement
Increment
No Pitch
ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%)
Pitch%=0
4 PitchEffect%=PitchEffect1%<<8
PitchEffect2%
StoreParams
UpdateNote(EditEntry%,Note%)
UpdateShell(Note%)
IconH%>=IDKeybrd%
IconH%<=IDKeybrd%+12
) Cursor%=Windows%(Entry%,WCursor%)
0
SYS "QTM_PlaySample",1,10,IconH%-12,64
New sample pitch
W
ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%)
Pitch%<>0
b%=-1
b%+=1
XPitch%(b%)=Pitch%
b%=b%
b%=2
a%=IconH%-IDKeybrd%
Pitch%=XPitch%(a%+b%*12)
StoreParams
%
UpdateNote(EditEntry%,Note%)
IconH%>=IDKeybrd%+12
IconH%<=IDKeybrd%+12+5
New octave pitch
W
ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%)
Pitch%<>0
b%=-1
b%+=1
XPitch%(b%)=Pitch%
b%=b%
b%=0
a%=IconH%-IDKeybrd%-12
Pitch%=XPitch%(b%+a%*12)
StoreParams
%
UpdateNote(EditEntry%,Note%)
UpdateShell(Note%)
HPlay%
HPlay%
IconH%
16 :
Rewind
SYS "QTM_Pos",-1,-1 TO Seq%,Event%
Seq%=VCurPlaySeq%
Event%=VCurPlayEvent%
Mouse%=4
Event%-=1
Seq%-=1 : Event%=0
Event%<0
Event%=63 : Seq%-=1
Seq%<0
Seq%=0 : Event%=0
SetPlayPosition(Seq%,Event%)
PlayLine(Seq%,Event%)
18 :
Forwind
SYS "QTM_Pos",-1,-1 TO Seq%,Event%
Seq%=VCurPlaySeq%
Event%=VCurPlayEvent%
Mouse%=4
Event%+=1
Seq%+=1 : Event%=0
Event%>63
Event%=0 : Seq%+=1
Seq%>=NbSeq%
Seq%=NbSeq%-1
SetPlayPosition(Seq%,Event%)
PlayLine(Seq%,Event%)
17 :
Pause/Play
Mouse%
6
4 :
VPlayStatus%=
PauseMod
StartMod
2 :
StopMod
?
1 :
SetPlayPosition(LastSeq%,LastEvent%) :
StartMod
14 :
Follow edit cursor
VPlayEdit%=
VPlayEdit%=
VPlayEdit%=
10 :
Tempo button: open writable menu
Entry%=EditEntry%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=Block%!4
Y%=Block%!16
Block%!0=WinH%
Block%!4=IconH%
"Wimp_GetIconState",,Block%
x%=Block%!8
y%=Block%!20
CreateWritableMenu(x%+X%,y%+Y%,"Set new tempo value",VCurSpeed%)
MenuBlock%!0=1
Pattern number
!/
NewPattern(
SeqToPattern(VCurPlaySeq%))
Channels
%
IconH%>=4
IconH%<=7
C%=IconH%-3
'
IconState(IconH%)=
(#
"QTM_RestoreChannel",C%
)1 VOChPlayState%(C%-1)=VChPlayState%(C%-1)
VChPlayState%(C%-1)=1
UpdatePlayPosition
,
-"
"QTM_RemoveChannel",C%
.1 VOChPlayState%(C%-1)=VChPlayState%(C%-1)
VChPlayState%(C%-1)=0
UpdatePlayPosition
HOptions%
HOptions%
WinH%=HOptions%
IconH%
4 :
Update
CheckOptions
3 :
Save options
Block%!0=OQuickDraw%
Block%!4=OPaneVoice%
Block%!8=OPaneSeq%
Block%!12=OCursor%
Block%!16=OWCell%
Block%!20=OHCell%
C2
Save(Block%,24,"<PULSE$Dir>.Options",&FFD)
HSamples%
HSamples%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=Block%!4
Y%=Block%!16
IconH%
Effect POPUP
Block%!0=WinH%
Block%!4=IconH%
S%
"Wimp_GetIconState",,Block%
UA
"Wimp_CreateMenu",,MPSamples%,X%+Block%!16,Y%+Block%!20
V" CurrentMenu%=MENUSamplesII%
16 :
Update data information for this sample.
S%=CurrentEditSample%-1
Sample$=$
Writable(2)
Sample$=
Sample$,22)
$Block%=Sample$
No end char!
P%=SampleInfo%+S%*30
a%=0
P%?a%=Block%?a%
Finetune value
e Adr%=SampleInfo%+S%*30+24
V%=
Writable(13))
V%<-128
V%>128
?Adr%=V%
Volume
k Adr%=SampleInfo%+S%*30+25
V%=
Writable(10))
V%<0
V%>64
?Adr%=V%
Repeat offset
q Adr%=SampleInfo%+S%*30+26
V%=
Writable(6))/2
?Adr%=(V%>>8)
Adr%+=1
?Adr%=V%
Repeat length
x Adr%=SampleInfo%+S%*30+28
V%=
Writable(8))/2
?Adr%=(V%>>8)
Adr%+=1
?Adr%=V%
&FF
UpdateMenuSamples
No data button
SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
Length%<>0
5
Delete data sample: needs user confirmation
Block%!0=0
Error%=%100100000111
E $(Block%+4)="Delete data sample n
(CurrentEditSample%)+"?"
E
"Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1
,OK%
OK%=1
2 Adr%=
SearchAdrSample(CurrentEditSample%)
#
MoveMemory(Adr%,-Length%)
S%=CurrentEditSample%-1
" P%=(SampleInfo%+S%*30)+22
P%!0=0
P%!4=0
.
UpdateSampleInfo(CurrentEditSample%)
UpdateMenuSamples
SamplesLength%-=Length%
SongInfo
Advice user to drag
Block%!0=0
Error%=%100100000101
R $(Block%+4)="To register this sample, just drag a sample file to the icon"
E
"Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1
,OK%
No repeat
NewSplRepeat(0,0)
End repeat
SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
NewSplRepeat(RepeatO%,Length%-RepeatO%)
Test sample pitch.
VModify%=
ReInitQTMMod
PauseMod
Block%!0=WinH%
Block%!4=IconH%
"Wimp_GetIconState",,Block%
W%=Block%!16-Block%!8
# x%=(MX%-X%-Block%!8)/W%*35+1
"QTM_RestoreChannel",1
"QTM_Stereo",1,0
"QTM_PlaySample",1,CurrentEditSample%,x%,64
Export a sample
StartDrag(DRAGSample%,"file_ffd")
Export group of samples
StartDrag(DRAGAllSamples%,"package")
HSplData%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=MX%-Block%!4+Block%!20
SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
NRepeatO%=RepeatO%
NRepeatL%=RepeatL%
Mouse%
Set Repeat offset
NRepeatO%=X%/2
" NRepeatO%=(NRepeatO%
2)*2
. NRepeatL%=(RepeatL%+RepeatO%)-NRepeatO%
NRepeatL%<0
NRepeatL%=10
Set Repeat end (length)
NRepeatL%=X%/2-RepeatO%
NRepeatL%<0
NRepeatO%=NRepeatO%+NRepeatL%-10 : NRepeatL%=10
NewSplRepeat(NRepeatO%,NRepeatL%)
HSongInfo%
HSongInfo%
IconH%
11 :
Open sequence table
OpenWindow(HSequence%)
Update
TrackName$=$
Writable(0)
$Module%=TrackName$
HSequence%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=MX%-Block%!4+Block%!20
# Y%=-(MY%-Block%!16+Block%!24)
Seq%=Y%
Pat%=?(MemSequence%+Seq%)
Mouse%
NewPattern(Pat%)
/ Title$="Pattern for sequence n
(Seq%)
CreateWritableMenu(MX%,MY%,Title$,Pat%)
MenuBlock%!0=0
MenuBlock%!8=Seq%
HFXControl%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=MX%-Block%!4+Block%!20
# Y%=-(MY%-Block%!16+Block%!24)
FX%=Y%
Mouse%
"QTM_EffectControl",-1
State%,SubState%
FX%>=&E
FX%<=(&E+&F)
Extended effects
RFX%=(&E<<4)+(FX%-&E)
( FXState%=(SubState%>>(FX%-&E))
Effect%=&E
P1%=(FX%-&E)
Normal effects
)
FX%=&F+&F
RFX%=&F
RFX%=FX%
RFX%=&F
Effect%=&F
A%=15
Effect%=FX%
A%=FX%
FXState%=(State%>>A%)
P1%=0
S%=1-FXState%
"QTM_EffectControl",RFX%,S%
Y%=-(FX%+1)*CHIcons%
"Wimp_ForceRedraw",HFXControl%,0,Y%,500,Y%+CHIcons%
Give help on this effect
HCopy%
Copy options buttons update in real time.
IconH%>=6
IconH%<=9 :
Swap origin and destination block
OCopyMode%=IconH%-6
IconH%=10 :
Copy!
HPatSave%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=Block%!4
Y%=Block%!16
Save pattern
IconH%
1 :
Pattern
DragBlock%!0=0
,*
StartDrag(DRAGPattern%,"File_ffd")
2 :
Group
.)
StartDrag(DRAGAllPats%,"Package")
HSave%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=Block%!4
Y%=Block%!16
IconH%
1 :
Drag
9(
StartDrag(DRAGTrack%,"File_001")
3 :
Path$=$
Writable(2)
ModulePath$=Path$
>-
Save(Module%,ModuleLength%,Path$,001)
HPlayWin%
B
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
E* X%=(X%-Block%!4+Block%!20)
OWCell%
F, Y%=-(Y%-Block%!16+Block%!24)
OHCell%
Seq%=Y%
Event%=Y%
SetPlayPosition(Seq%,Event%)
PlayLine(Seq%,Event%)
Shell windows
OldEntry%=EditEntry%
No shell window before: OldEntry%=-1
Set Wimp caret on the new shell window.
S" Entry%=
HandleToEntry(WinH%)
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
X%=X%-Block%!4+Block%!20
X" Y%=-(Y%-Block%!16+Block%!24)
Y* NewCursor%=X%/OWCell%+Y%
OHCell%*4
Mouse%
4 :
Select button
xN%=NewCursor%
yN%=NewCursor%
VPlayEdit%=
Update edit cursor
d%
NewCursor(Entry%,NewCursor%)
Set play position
Problem
h2 Seq%=
PatToSeq(Windows%(Entry%,WPattern%))
i"
SetPlayPosition(Seq%,yN%)
PlayLine(Seq%,yN%)
k
1 :
New block defined from cursor to right button.
n' Start%=Windows%(Entry%,WCursor%)
o>
NewBlock(Windows%(Entry%,WPattern%),Start%,NewCursor%)
2 :
Menu
r3
NewCursor(Entry%,Windows%(Entry%,WCursor%))
sN
BlockPattern%=-1
LibMDisable(MPShell%,3)
LibMEnable(MPShell%,3)
tK
EditEntry%=-1
LibMDisable(MPShell%,4)
LibMEnable(MPShell%,4)
u-
"Wimp_CreateMenu",,MPShell%,MX%,MY%
CurrentMenu%=MPShell%
MenuBlock%!0=Entry%
InitMode
"Wimp_ReadSysInfo",1
WIMPMode%
XScreen%=WIMPMode%!4
YScreen%=WIMPMode%!8
XS%=XScreen%
YS%=YScreen%
PollMessage
Block%!16
&400C0 :
Menu warning
"Wimp_CreateSubMenu",,Block%!20,Block%!24,Block%!28
&400C1 :
ModeChange
InitMode
ChangeMode%=
0 :
Quit
DataLoad
WinH%=Block%!20
IconH%=Block%!24
S%=Block%+44
N%=S%
N%+=1
?N%=0
?N%=&0D
Path$=$S%
WinH%
HSamples%
WinH%=HSamples%
IconH%=15
8
Replace the old sample by the new one dropped.
" Block%!16=4 :
DataLoadAck
)
"Wimp_SendMessage",18,Block%,0
M
SampleInfo(CurrentEditSample%,OldLength%,RepeatO%,RepeatL%,DV%,FTV%)
+ NewLength%=
LibGetFileLength(Path$)
1 Adr%=
SearchAdrSample(CurrentEditSample%)
/
MoveMemory(Adr%,NewLength%-OldLength%)
Load(Adr%,Path$)
S%=CurrentEditSample%-1
! P%=(SampleInfo%+S%*30)+22
A%=NewLength%/2
$ P%!0=(A%
&FF)<<8
(A%>>8)
P%!4=0
P%?3=64
-
UpdateSampleInfo(CurrentEditSample%)
UpdateMenuSamples
- SamplesLength%+=NewLength%-OldLength%
SongInfo
-2 :
Icon bar
Load a new module
! Block%!16=4 :
DataLoadAck
"Wimp_SendMessage",18,Block%,0
LoadModule(Path$)
# Entry%=
HandleToEntry(WinH%)
Entry%<>-1
Load a pattern
" Block%!16=4 :
DataLoadAck
)
"Wimp_SendMessage",18,Block%,0
' Pat%=Windows%(Entry%,WPattern%)
P%=
PatToMem(Pat%)
3
"OS_File",13,Path$,,,Path$
,,,,Length%
Length%=1024
Load(P%,Path$)
LibUpdateWindow(WinH%)
2 :
DataSaveAck
DragCase%
DRAGSample%
Save sample data
N%=Block%+44
N%+=1
?N%=0
?N%=&0D
Path$=$(Block%+44)
SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
0 Adr%=
SearchAdrSample(CurrentEditSample%)
Save(Adr%,Length%,Path$+"Sample"+
(CurrentEditSample%),&ffd)
DRAGAllSamples%
Export all 31 samples in a directory
N%=Block%+44
N%+=1
?N%=0
?N%=&0D
Path$=$(Block%+44)
Create directory
Dir$=Path$+"ModSamples"
"OS_File",8,Dir$,,,0
S%=1
:
SampleInfo(S%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
Length%<>0
" Adr%=
SearchAdrSample(S%)
6
Save(Adr%,Length%,Dir$+".Sample"+
(S%),&ffd)
DRAGTrack%
Save track file
S%=Block%+44
N%=S%
N%+=1
?N%=0
?N%=&0D
' Leaf$=
GetLeafPath(ModulePath$)
ModulePath$=$S%+Leaf$
WinH%=HSave%
LibSetIconText2(2,ModulePath$)
Save(Module%,ModuleLength%,ModulePath$,001)
DRAGPattern%
S%=Block%+44
N%=S%
N%+=1
?N%=0
?N%=&0D
9 Pat%=Windows%(EditEntry%,WPattern%) :
DragBlock%!0
Path$=$S%+"Pat"+
(Pat%)
# Pattern%=Patterns%+1024*Pat%
Save(Pattern%,64*4*4,Path$,&ffd)
DRAGAllPats%
S%=Block%+44
N%=S%
N%+=1
?N%=0
?N%=&0D
Path$=$S%
Create directory
Dir$=Path$+"ModPats"
"OS_File",8,Dir$,,,0
Pat%=0
NbPat%
Adr%=
PatToMem(Pat%)
2
Save(Adr%,1024,Dir$+".Pat"+
(Pat%),&ffd)
!
**********************************Redraw*****************************
NewSplRepeat(NRepeatO%,NRepeatL%)
VModify%=
SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
, NRepeatO%=(NRepeatO%
2)*2
- NRepeatL%=(NRepeatL%
2)*2
XRepeatO%=RepeatO%
XRepeatL%=RepeatL%
Block%!0=HSplData%
"Wimp_GetWindowState",,Block%
XMin%=Block%!20/2
4+ XMax%=(Block%!12-Block%!4+Block%!20)/2
OX%=Block%!4
OY%=Block%!16
7
Block%!0=HSplData%
Block%!4=0
Block%!8=-1000
Block%!12=Length%*2
Block%!16=0
"Wimp_UpdateWindow",,Block%
Flag%
Flag%
OX%,OY%
Erase previous repeat block
RepeatO%=XRepeatO%
RepeatL%=XRepeatL%
DrawRepeatBlock
Draw new repeat block
RepeatO%=NRepeatO%
RepeatL%=NRepeatL%
DrawRepeatBlock
"Wimp_GetRectangle",,Block%
Flag%
S%=CurrentEditSample%-1
WinH%=HSamples%
Repeat offset
Adr%=SampleInfo%+S%*30+26
LibSetIconText2(6,
(RepeatO%))
V%=RepeatO%/2
?Adr%=(V%>>8)
Adr%+=1
?Adr%=V%
Repeat length
Adr%=SampleInfo%+S%*30+28
LibSetIconText2(8,
(RepeatL%))
V%=RepeatL%/2
?Adr%=(V%>>8)
Adr%+=1
?Adr%=V%
DrawAllSeqPat(Seq%)
Pat%=
SeqToPattern(Seq%)
S%=0
NbSeq%
Pat%=?(MemSequence%+S%)
3,100,0,0
i#
100,-(S%+1)*50,500,50
PollRedraw
WinH%=Block%!0
WinH%
HSequence%
"Wimp_RedrawWindow",,Block%
Flag%
OX%=Block%!4-Block%!20
OY%=Block%!16-Block%!24
OHSeq%=50
Flag%
y6 YMin%=-(Block%!40-Block%!16+Block%!24)
OHSeq%
z5 YMax%=(Block%!16-Block%!32-Block%!24)
OHSeq%
Y%=-YMin%*(OHSeq%)
S%=YMin%
YMax%
Y%-=OHSeq%
~7
PlotIcon(0,Y%,100,OHSeq%,
(S%),PaneIconFlags%)
" Pat$=
(?(MemSequence%+S%))
E
PlotIcon(100,Y%,200,OHSeq%,"Pattern n
"+Pat$,PaneIconFlags%)
OX%,OY%
3,100,0,0
0,-(VCurPlaySeq%+1)*50,100,50
DrawAllSeqPat(VCurPlaySeq%)
"Wimp_GetRectangle",,Block%
Flag%
HFXControl%
"Wimp_RedrawWindow",,Block%
Flag%
HFX%=50
Flag%
4 YMin%=-(Block%!40-Block%!16+Block%!24)
HFX%
3 YMax%=(Block%!16-Block%!32-Block%!24)
HFX%
Y%=-YMin%*HFX%
"QTM_EffectControl",-1
State%,SubState%
FX%=YMin%
YMax%
Y%-=HFX%
"
FX%>=&E
FX%<=(&E+&F)
Extended effects
RFX%=(&E<<4)+(FX%-&E)
) FXState%=(SubState%>>(FX%-&E))
Effect%=&E
P1%=(FX%-&E)
Normal effects
.
FX%=&F+&F
RFX%=&FF
RFX%=FX%<<4
RFX%=&FF
Effect%=&F
A%=15
Effect%=FX%
A%=FX%
FXState%=(State%>>A%)
P1%=0
Effects(Effect%,P1%,0)
Icon%=PaneIconFlags%
I
FXState%=0
Icon%=(PaneIconFlags%
(%1111<<24))
(11<<24)
;
PlotIcon(0,Y%,500,HFX%,
~(RFX%)+"."+LongFX$,Icon%)
"Wimp_GetRectangle",,Block%
Flag%
HSplData%
Block%!0=WinH%
"Wimp_GetWindowState",,Block%
XMin%=Block%!20/2
, XMax%=(Block%!12-Block%!4+Block%!20)/2
OX%=Block%!4
OY%=Block%!16
"Wimp_RedrawWindow",,Block%
Flag%
SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%)
/ Adr%=
SearchAdrSample(CurrentEditSample%)
Flag%
- XL%=(Block%!28-Block%!4+Block%!20)/2
- XR%=(Block%!36-Block%!4+Block%!20)/2
OX%,OY%
D%=(XR%-XL%)
Length%<X2Spl%-X1Spl%
D%=Length%
O%=(Block%!28-Block%!4)/2
Length%<>0
0,0,0
Scale=1/128*CenterYSpl%
P%=0
A%=?(Adr%+P%+XL%)
S%=(A%>>7)
A%=A%
%1111111
S%=1
A%=A%-128
@
(O%+P%)*2,CenterYSpl%,(O%+P%)*2,-A%*Scale+CenterYSpl%
0,255,0,0
0,CenterYSpl%,X2Spl%-X1Spl%,CenterYSpl%
Length%<>0
DrawRepeatBlock
!
Length%<X2Spl%-X1Spl%
255,0,0
G
Length%*2,CenterYSpl%*2,(X2Spl%-X1Spl%)*2,-CenterYSpl%*2
"Wimp_GetRectangle",,Block%
Flag%
HVUs%
"QTM_ReadVULevels",1
VU1%
"QTM_ReadVULevels",2
VU2%
"QTM_ReadVULevels",3
VU3%
"QTM_ReadVULevels",4
VU4%
"Wimp_RedrawWindow",,Block%
Flag%
OX%=Block%!4-Block%!20
OY%=Block%!16-Block%!24
Flag%
OX%,OY%
DrawVUs
"Wimp_GetRectangle",,Block%
Flag%
HPlayWin%
Play window
"Wimp_RedrawWindow",,Block%
Flag%
FX%=Block%!4-Block%!20
FY%=Block%!16-Block%!24
Flag%
5 XMin%=(Block%!28-Block%!4+Block%!20)
OWCell%
5 XMax%=(Block%!36-Block%!4+Block%!20)
OWCell%
7 YMin%=-(Block%!40-Block%!16+Block%!24)
OHCell%
6 YMax%=(Block%!16-Block%!32-Block%!24)
OHCell%
SeqMin%=YMin%
SeqMax%=YMax%
YMin%=YMin%
YMax%=YMax%
128,0,0,0
OX%=FX%
! OY%=FY%-SeqMax%*64*OHCell%
OX%,OY%
0,0,255
LINE 0,0,OWCell%*4,0
x%=10
OWCell%*4-100
x%,0,10
0,0,100
3,0,0,255
A%=50
B%=0
4*OWCell%,0,200-A%
B%+=2
A%+=B%
A%>200
Seq$=
(SeqMax%)
(Seq$)
1 : A%=1000
2 : A%=500
3 : A%=500
<
"Font_FindFont",,"Homerton.Medium",A%,A%,0
Font%

fV
"Font_Paint",DigitFont%,
(PitchEffect1%),&11
1<<8,X%+37/50*OWCell%,Y%+y%
gV
"Font_Paint",DigitFont%,
(PitchEffect2%),&11
1<<8,X%+43/50*OWCell%,Y%+y%
1,-1
i$
SetFontColour(100,100,255)
jU
"Font_Paint",DigitFont%,
(PitchEffect%),&11
1<<8,X%+40/50*OWCell%,Y%+y%
0,-2
l
Voices separation
0,255,0,255
OWCell%,0,OWCell%,-OHCell%*64
OWCell%*2,0,OWCell%*2,-OHCell%*64
OWCell%*3,0,OWCell%*3,-OHCell%*64
DrawPlayPosition(Event%,Ch%())
->ORIGIN
Y%
3,255,255,255
0,-OHCell%*(Event%+1),OWCell%*4,OHCell%
3,255,255,0
Y%=-OHCell%*(Event%+1)
Ch%(0)=1
0,Y%,OWCell%,OHCell%
Ch%(1)=1
OWCell%,Y%,OWCell%,OHCell%
Ch%(2)=1
OWCell%*2,Y%,OWCell%,OHCell%
Ch%(3)=1
OWCell%*3,Y%,OWCell%,OHCell%
DrawRepeatBlock
->ORIGIN OX%,OY%
->XMax%,XMin%,RepeatO%,RepeatL%
RepeatO%<XMax%
RepeatL%>0
A%=RepeatO%-XMin%
" B%=(RepeatO%+RepeatL%)-XMax%
D%=(X2Spl%-X1Spl%)/2
A%<0
x1%=0
x1%=A%
B%<0
x2%=D%+B%
x2%=D%
x1%<x2%
x2%>0
3,255,255,0
x1%*2,CenterYSpl%*2,(x2%-x1%)*2,-CenterYSpl%*2
ReInitQTMMod
Tempory: Save track file for QTM
VModuleState%=
"Hourglass_On"
"QTM_ReadSpeed"
Play%,Speed%
Save(Module%,ModuleLength%,TransfertPath$,001)
"QTM_Load",TransfertPath$,0
"QTM_Pos",VCurPlaySeq%,VCurPlayEvent%
Play%<>0
"QTM_Start"
"QTM_SetSpeed",Play%
"QTM_SetSpeed",Speed%
"Hourglass_Off"
VModify%=
RestoreQTM
A%=&0
"QTM_EffectControl",A%,1
"QTM_EffectControl",(&E<<4)
HideAllWins
LibCloseWindow(HSplData%)
LibCloseWindow(HSamples%)
LibCloseWindow(HSongInfo%)
LibCloseWindow(HOptions%)
LibCloseWindow(HSequence%)
LibCloseWindow(HPlay%)
LibCloseWindow(HParams%)
ClosePlayWindow
Close all shell windows
I%=0
A%=0
A%<NbEntry%
Windows%(I%,WFreeFlag%)=-1
A%+=1
LibCloseWindow(Windows%(I%,WHShell%))
I%+=1
PauseMod
"QTM_Pause"
% PollMask%=(PollMask%
1)) +1
VPlayStatus%=
StartMod
SoundModule
VModify%=
ReInitQTMMod
LastSeq%=VCurPlaySeq%
LastEvent%=VCurPlayEvent%
"QTM_Start"
PollMask%=PollMask%
VPlayStatus%=
StopMod
PauseMod
SetPlayPosition(0,0)
UpdateShell(NewNote%)
* Cursor%=Windows%(EditEntry%,WCursor%)
H !(Patterns%+Cursor%*4+1024*Windows%(EditEntry%,WPattern%))=NewNote%
NewNote(EditEntry%)
VModify%=
GetLeafPath(Path$)
Length%=
(Path$)
B%=0
L%=B%
B%=
Path$,".",L%+1)
B%=0
Leaf$=
Path$,Length%-L%)
=Leaf$
InitQTM
RestoreQTMSound
SoundModule
VChPlayState%(0)=1
"QTM_RestoreChannel",1
"QTM_RemoveChannel",1
VChPlayState%(1)=1
"QTM_RestoreChannel",2
"QTM_RemoveChannel",2
VChPlayState%(2)=1
"QTM_RestoreChannel",3
"QTM_RemoveChannel",3
VChPlayState%(3)=1
"QTM_RestoreChannel",4
"QTM_RemoveChannel",4
"QTM_Stereo",1,-127
"QTM_Stereo",4,-127
"QTM_Stereo",2,127
"QTM_Stereo",3,127
RestoreQTMSound
"QTM_SoundControl",4,0,-1
C%=1
"QTM_RestoreChannel",C%
"QTM_Stereo",1,-127
"QTM_Stereo",4,-127
"QTM_Stereo",2,127
"QTM_Stereo",3,127
StartDrag(Drag%,Sprite$)
-> X%,Y%
Block%!0=WinH%
Block%!4=IconH%
"Wimp_GetIconState",,Block%
X%+=Block%!16
Y%+=Block%!20
Flags%=%11000101
Block%!0=X%+16
Block%!4=Y%+16
Block%!8=X%-16
Block%!12=Y%-16
"DragASprite_Start",Flags%,1,Sprite$,Block%,0
DragCase%=Drag%
&6B0,&650,&5F5,&5A0,&54F,&503,&4BB,&477,&436,&3FA,&3C1,&386
&358,&328,&2FA,&2D0,&2A6,&280,&25C,&23A,&21A,&1FC,&1E0,&1C5
&1AC,&194,&17D,&168,&153,&140,&12E,&11D,&10D,&0FE,&0F0,&0E2
&0D6,&0CA,&0BE,&0B4,&0AA,&0A0,&097,&08F,&087,&07F,&078,&071
&06B,&065,&05F,&05A,&055,&04C,&047,&043,&040,&03C,&039,&036
C-1,C#1,D-1,D#1,E-1,F-1,F#1,G-1,G#1,A-1,A#1,B-1
C-2,C#2,D-2,D#2,E-2,F-2,F#2,G-2,G#2,A-2,A#2,B-2
C-3,C#3,D-3,D#3,E-3,F-3,F#3,G-3,G#3,A-3,A#3,B-3
C-4,C#4,D-4,D#4,E-4,F-4,F#4,G-4,G#4,A-4,A#4,B-4
C-5,C#5,D-5,D#5,E-5,F-5,F#5,G-5,G#5,A-5,A#5,B-5
DeleteBlock
X1%=EditStart%
Y1%=EditStart%
X2%=EditEnd%
Y2%=EditEnd%
Y%=Y1%
X%=X1%
17 Adr%=MemPatterns%+1024*BlockPattern%+(X%+Y%*4)*4
Adr%!0=0
Now, let's redraw the block
RedrawBlockContents
NoEditBlock
VModify%=
ChangeSample(S%)
X1%=EditStart%
Y1%=EditStart%
X2%=EditEnd%
Y2%=EditEnd%
Y%=Y1%
X%=X1%
C7 Adr%=MemPatterns%+1024*BlockPattern%+(X%+Y%*4)*4
Note%=!Adr%
EN
ReturnParams(Note%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%)
Sample%<>0
Sample%=S%
StoreParams
!Adr%=Note%
Now, let's redraw the block
RedrawBlockContents
NoEditBlock
VModify%=
ChangeFX(FX%)
X1%=EditStart%
Y1%=EditStart%
X2%=EditEnd%
Y2%=EditEnd%
Y%=Y1%
X%=X1%
Z7 Adr%=MemPatterns%+1024*BlockPattern%+(X%+Y%*4)*4
Note%=!Adr%
\:
ReturnParams(Note%,Sample%,Pitch%,Effect%,P1%,P2%)
]%
FX%<>0
(P1%<>0
P2%<>0)
Effect%=FX%
StoreParams
!Adr%=Note%
Now, let's redraw the block
RedrawBlockContents
NoEditBlock
VModify%=
RedrawBlockContents
l+ BlockEntry%=
PatToEntry(BlockPattern%)
X1%=EditStart%
Y1%=EditStart%
X2%=EditEnd%
Y2%=EditEnd%
X2%+=1
Y2%+=1
"Wimp_ForceRedraw",Windows%(BlockEntry%,WHShell%),X1%*OWCell%,-Y2%*OHCell%,X2%*OWCell%,-Y1%*OHCell%
CheckOptions
Old%=OQuickDraw%
IconState(1)=
OQuickDraw%=
OQuickDraw%=
IF FNIconState(6)=TRUE THEN OPaneVoice%=TRUE ELSE OPaneVoice%=FALSE
IF FNIconState(7)=TRUE THEN OPaneSeq%=TRUE ELSE OPaneSeq%=FALSE
IF FNIconState(5)=TRUE THEN OCursor%=0
IF FNIconState(6)=TRUE THEN OCursor%=1
IF FNIconState(7)=TRUE THEN OCursor%=2
OldW%=OWCell%
OldH%=OHCell%
OWCell%=
Writable(9))
OHCell%=OWCell%/10
Old%<>OQuickDraw%
OldW%<>OWCell%
Update all shell windows
FontInit
I%=0
A%=0
A%<NbEntry%
Windows%(I%,WFreeFlag%)=-1
A%+=1
+
SetExtent(I%,OWCell%*4,64*OHCell%)
# WinH%=Windows%(I%,WHShell%)
UpdateWindow(WinH%)
I%+=1
ResizePlayWindow
ResizePlayWindow
OX%=0
OY%=100
WkX%=OWCell%*4
WkY%=64*OHCell%*NbSeq%
Block%!0=OX%
Block%!4=-WkY%
Block%!8=WkX%
Block%!12=OY%
"Wimp_SetExtent",HPlayWin%,Block%
LibSetExtent(HVUs%,OWCell%*4,100)
UpdateWindow(HPlayWin%)
LibResizeWindow(HPlayWin%)
LibResizeWindow(HVUs%)
UpdateNbSeq
NbSeq%=?(Module%+950)
WinH%=HSongInfo%
LibSetIconText2(5,
(NbSeq%))
WinH%=HPlay%
LibSetIconText2(20,
(NbSeq%-1))
LibSetExtent(HSequence%,300,CHIcons%*NbSeq%)
UpdateWindow(HSequence%)
LibWinInitScroll(HSequence%)
ResizePlayWindow
CheckTick(WinH%,Item%)
WinOpened(WinH%)=
LibMTick(MPIconBar%,Item%)
LibMUntick(MPIconBar%,Item%)
SetBlockColor
3,255,0,0
CurColor%(0)=255
CurColor%(1)=0
CurColor%(2)=0
SetEditColor
3,0,0,100
CurColor%(0)=0
CurColor%(1)=0
CurColor%(2)=100
OpenSamples(Front%)
->Block%
Block2%!0=HSamples%
"Wimp_GetWindowInfo",,Block2%+1
WX1%=Block2%!44
WX2%=Block2%!52
WY1%=Block2%!48
WY2%=Block2%!56
WX%=WX2%-WX1%
WY%=-(WY2%-WY1%)
Block%!0=HSamples%
Front%=
Block%!4 = XScreen%-WX%/2
Block%!16 = YScreen%-WY%/2
Block%!12 = Block%!4+WX%
Block%!8 = Block%!16+WY%
Block%!20 = 0
Block%!24 = 0
Block%!28 = -1
X1%=Block%!4
Y2%=Block%!16
Win%=Block%!28
First, let the WIMP correct Block% coordinates.
Block%!0=HSamples%
Block%!28=HSplData%
"Wimp_OpenWindow",,Block%
Then, put pane window front of its mother
For previous scroll offset
Block2%!0=HSplData%
"Wimp_GetWindowState",,Block2%
W%=-(WX2%-WX1%-X2Spl%)
H%=(WY2%-WY1%+Y1Spl%)
Block2%!4=Block%!4+X1Spl%
Block2%!8=Block%!8+H%
Block2%!12=Block%!12+W%
Block2%!16=Block%!16+Y2Spl%
Block2%!28=Win%
"Wimp_OpenWindow",,Block2%
And finally, the mother behind her child
Block%!0=HSamples%
Block%!28=HSplData%
"Wimp_OpenWindow",,Block%
OpenPlayWindow(Poll%)
->Block%
Block%!0 = HPlayWin%
Poll%
Block%!4 = 0.1*XScreen%*2
Block%!8 = 0.1*YScreen%*2
Block%!12 = 0.9*XScreen%*2
Block%!16 = 0.9*YScreen%*2
Block%!20 = 0
Block%!24 = 100
Block%!28 = -1
Win%=Block%!28
First, let the WIMP correct Block% coordinates.
Block%!0=HPlayWin%
Block%!28=HVUs%
"Wimp_OpenWindow",,Block%
Then, put pane window front of its mother
Block2%!0=HVUs%
Block2%!4=Block%!4
Block2%!8=Block%!16-100
Block2%!12=Block%!12
Block2%!16=Block%!16
Block2%!20=Block%!20
Block2%!24=Block%!24
Block2%!28=Win%
"Wimp_OpenWindow",,Block2%
And finally, the mother behind her child
Block%!0=HPlayWin%
Block%!28=HVUs%
"Wimp_OpenWindow",,Block%
ClosePlayWindow
Block%!0 = HPlayWin%
"Wimp_CloseWindow",,Block%
Block%!0 = HVUs%
"Wimp_CloseWindow",,Block%