( mbox )

needs note: music
needs Form: gui

variable KeyToPlay
variable mode 0 mode !
: keys: create 12 0 do
' w, loop ;

keys: k1 C# D# C D F# G# A# E F G A B
keys: k2 C# D# F# G# A# C D E F G A B

: 2ndRow ( id -- f ) 1012 < 0= ;
: keys ( id -- addr )
2ndRow if k2 else k1 then ;
: keynum ( id -- n )
dup 2ndRow if 1012 else 1000 then - ;
: PlayKey ( id -- ) >r
r@ 2ndRow if o++ then
r@ keys r@ keynum 2* +
w@ execute
r> 2ndRow if o-- then
;

1001 Form:

: PlayingKey? ( id -- f )
1000 1024 within ;
: OctaveKey? ( id -- f )
1100 1104 within ;
: ModeKey? ( id -- f )
1110 1113 within ;

e:
ctlEnterEvent IsEvent e>
ev. controlID PlayingKey? e>
ev. controlID
mode @ if
	KeyToPlay !
else
	PlayKey
then
;e

e: penUpEvent IsEvent e>
mode @ 1 = e>
0 KeyToPlay !
;e

e: ctlExitEvent IsEvent e>
mode @ 2 = e>
0 KeyToPlay !
;e

e:
ctlEnterEvent IsEvent e>
ev. controlID OctaveKey? e>
ev. controlID 1101 - o
unhandled
;e

e:
ctlEnterEvent IsEvent e>
ev. controlID ModeKey? e>
ev. controlID 1110 - mode !
unhandled
;e

;Form

\ 'rsrc' 'mbox' use-resource
s" forms" included
api: FrmGotoForm
:noname
1001 ShowForm \ FrmGotoForm
-1 o
begin wekey drop
mode @ if
	KeyToPlay @ ?dup if
		PlayKey
	then
then
again ; to PilotMain

s" MusicBox" 'mb0x' build
'rsrc' 'mbox' use-resource
'tFRM' 1001 CopyRes
'tSTR' 1000 CopyRes