;--------------------------------------
; general messages:

GLOBAL @v_id 0d "device id"

OUT    @m_par     F0 18 04 @v_id 03


;--------------------------------------
; editor:

EDITOR "proteus/1"


;--------------------------------------
; lists:

INCLUDE "p1l"


;--------------------------------------
; receive program buffer:

BUFFER @buf 128d "program buffer"


;--------------------------------------
; program page:

PAGE   @p_prog "program edition" ""

;--------------------------------------

BOX @b_ins1 @p_prog "INSTR 1" 0d 0d 18d 14d ""

CHOICE @v_ins1  @b_ins1 "" @l_samples 0d 125d 0d 10d -11d "sample [0...125]"
NUM    @v_lvl1  @b_ins1 "lvl :" 0d 127d 127d 10d "level [0...127]"
NUM    @v_pan1  @b_ins1 "pan :" -7d 7d 0d 5d "pan [-7...+7]"
CHOICE @v_kmin1 @b_ins1 "kmin:" @l_key 0d 127d 0d 10d 4d "key range lower limit [0...127]=[C-2...G8]"
CHOICE @v_kmax1 @b_ins1 "kmax:" @l_key 0d 127d 127d 10d 4d "key range upper limit [0...127]=[C-2...G8]"
NUM    @v_tran1 @b_ins1 "transp:" -36d 36d 0d 10d "transpose in semi-tones [-36...+36]"
NUM    @v_detu1 @b_ins1 "detune:" -64d 64d 0d 10d "detune in 1/64 semi-tones [-64...+64]"
NUM    @v_dela1 @b_ins1 "delay :" 0d 127d 0d 10d "delay before playing sample [0...127]"
NUM    @v_star1 @b_ins1 "start :" 0d 127d 0d 10d "starting point in sample [0...127]"
CHOICE @v_chor1 @b_ins1 "chorus:" @l_onoff 0d 1d 0d 1d 3d "chorus effects"
CHOICE @v_solo1 @b_ins1 "solo  :" @l_onoff 0d 1d 0d 1d 3d "solo mode (monophonic)"
CHOICE @v_revs1 @b_ins1 "revers:" @l_onoff 0d 1d 0d 1d 3d "reverse playing of the sample"

OUT @ @m_par i(23d) i(#v_ins1) F7
OUT @ @m_par i(27d) i(#v_lvl1) F7
OUT @ @m_par i(28d) i(#v_pan1) F7
OUT @ @m_par i(30d) i(#v_kmin1) F7
OUT @ @m_par i(31d) i(#v_kmax1) F7
OUT @ @m_par i(25d) i(#v_tran1) F7
OUT @ @m_par i(26d) i(#v_detu1) F7
OUT @ @m_par i(29d) i(#v_dela1) F7
OUT @ @m_par i(24d) i(#v_star1) F7
OUT @ @m_par i(39d) i(#v_chor1) F7
OUT @ @m_par i(38d) i(#v_solo1) F7
OUT @ @m_par i(40d) i(#v_revs1) F7

CHGNUM @v_ins1  :(#buf,23d)
CHGNUM @v_lvl1  :(#buf,27d)
CHGNUM @v_pan1  s(:(#buf,28d))
CHGNUM @v_kmin1 :(#buf,30d)
CHGNUM @v_kmax1 :(#buf,31d)
CHGNUM @v_tran1 s(:(#buf,25d))
CHGNUM @v_detu1 s(:(#buf,26d))
CHGNUM @v_dela1 :(#buf,29d)
CHGNUM @v_star1 :(#buf,24d)
CHGNUM @v_chor1 :(#buf,39d)
CHGNUM @v_solo1 :(#buf,38d)
CHGNUM @v_revs1 :(#buf,40d)

;--------------------------------------

BOX @b_ins2 @p_prog "INSTR 2" 0d 14d 18d 14d ""

CHOICE @v_ins2  @b_ins2 "" @l_samples 0d 125d 0d 10d -11d "sample [0...125]"
NUM    @v_lvl2  @b_ins2 "lvl :" 0d 127d 127d 10d "level [0...127]"
NUM    @v_pan2  @b_ins2 "pan :" -7d 7d 0d 5d "pan [-7...+7]"
CHOICE @v_kmin2 @b_ins2 "kmin:" @l_key 0d 127d 0d 10d 4d "key range lower limit [0...127]=[C-2...G8]"
CHOICE @v_kmax2 @b_ins2 "kmax:" @l_key 0d 127d 127d 10d 4d "key range upper limit [0...127]=[C-2...G8]"
NUM    @v_tran2 @b_ins2 "transp:" -36d 36d 0d 10d "transpose in semi-tones [-36...+36]"
NUM    @v_detu2 @b_ins2 "detune:" -64d 64d 0d 10d "detune in 1/64 semi-tones [-64...+64]"
NUM    @v_dela2 @b_ins2 "delay :" 0d 127d 0d 10d "delay before playing sample [0...127]"
NUM    @v_star2 @b_ins2 "start :" 0d 127d 0d 10d "starting point in sample [0...127]"
CHOICE @v_chor2 @b_ins2 "chorus:" @l_onoff 0d 1d 0d 1d 3d "chorus effect (doubles polyphony)"
CHOICE @v_solo2 @b_ins2 "solo  :" @l_onoff 0d 1d 0d 1d 3d "solo mode (monophonic)"
CHOICE @v_revs2 @b_ins2 "revers:" @l_onoff 0d 1d 0d 1d 3d "reverse playing of the sample"

OUT @ @m_par i(41d) i(#v_ins2) F7
OUT @ @m_par i(45d) i(#v_lvl2) F7
OUT @ @m_par i(46d) i(#v_pan2) F7
OUT @ @m_par i(48d) i(#v_kmin2) F7
OUT @ @m_par i(49d) i(#v_kmax2) F7
OUT @ @m_par i(43d) i(#v_tran2) F7
OUT @ @m_par i(44d) i(#v_detu2) F7
OUT @ @m_par i(47d) i(#v_dela2) F7
OUT @ @m_par i(42d) i(#v_star2) F7
OUT @ @m_par i(57d) i(#v_chor2) F7
OUT @ @m_par i(56d) i(#v_solo2) F7
OUT @ @m_par i(58d) i(#v_revs2) F7

CHGNUM @v_ins2  :(#buf,41d)
CHGNUM @v_lvl2  :(#buf,45d)
CHGNUM @v_pan2  s(:(#buf,46d))
CHGNUM @v_kmin2 :(#buf,48d)
CHGNUM @v_kmax2 :(#buf,49d)
CHGNUM @v_tran2 s(:(#buf,43d))
CHGNUM @v_detu2 s(:(#buf,44d))
CHGNUM @v_dela2 :(#buf,47d)
CHGNUM @v_star2 :(#buf,42d)
CHGNUM @v_chor2 :(#buf,57d)
CHGNUM @v_solo2 :(#buf,56d)
CHGNUM @v_revs2 :(#buf,58d)

;--------------------------------------

BOX @b_eg1 @p_prog "ALT EG1" 18d 5d 9d 9d ""

CHOICE @v_eg1   @b_eg1 "" @l_onoff 0d 1d 0d 1d 3d "use alternate enveloppe"
SEPARATOR       @b_eg1 ""
NUM    @v_att1  @b_eg1 "att:" 0d 99d 0d 10d "alternate enveloppe attack [0...99]"
NUM    @v_hld1  @b_eg1 "hld:" 0d 99d 0d 10d "alternate enveloppe hold [0...99]"
NUM    @v_dec1  @b_eg1 "dec:" 0d 99d 0d 10d "alternate enveloppe decay [0...99]"
NUM    @v_sus1  @b_eg1 "sus:" 0d 99d 0d 10d "alternate enveloppe sustain [0...99]"
NUM    @v_rel1  @b_eg1 "rel:" 0d 99d 0d 10d "alternate enveloppe release [0...99]"

OUT @ @m_par i(37d) i(#v_eg1) F7
OUT @ @m_par i(32d) i(#v_att1) F7
OUT @ @m_par i(33d) i(#v_hld1) F7
OUT @ @m_par i(34d) i(#v_dec1) F7
OUT @ @m_par i(35d) i(#v_sus1) F7
OUT @ @m_par i(36d) i(#v_rel1) F7

CHGNUM @v_eg1   :(#buf,37d)
CHGNUM @v_att1  :(#buf,32d)
CHGNUM @v_hld1  :(#buf,33d)
CHGNUM @v_dec1  :(#buf,34d)
CHGNUM @v_sus1  :(#buf,35d)
CHGNUM @v_rel1  :(#buf,36d)

;--------------------------------------

BOX @b_eg2 @p_prog "ALT EG2" 18d 14d 9d 9d ""

CHOICE @v_eg2   @b_eg2 "" @l_onoff 0d 1d 0d 1d 3d "use alternate enveloppe"
SEPARATOR       @b_eg2 ""
NUM    @v_att2  @b_eg2 "att:" 0d 99d 0d 10d "alternate enveloppe attack [0...99]"
NUM    @v_hld2  @b_eg2 "hld:" 0d 99d 0d 10d "alternate enveloppe hold [0...99]"
NUM    @v_dec2  @b_eg2 "dec:" 0d 99d 0d 10d "alternate enveloppe decay [0...99]"
NUM    @v_sus2  @b_eg2 "sus:" 0d 99d 0d 10d "alternate enveloppe sustain [0...99]"
NUM    @v_rel2  @b_eg2 "rel:" 0d 99d 0d 10d "alternate enveloppe release [0...99]"

OUT @ @m_par i(55d) i(#v_eg2) F7
OUT @ @m_par i(50d) i(#v_att2) F7
OUT @ @m_par i(51d) i(#v_hld2) F7
OUT @ @m_par i(52d) i(#v_dec2) F7
OUT @ @m_par i(53d) i(#v_sus2) F7
OUT @ @m_par i(54d) i(#v_rel2) F7

CHGNUM @v_eg2   :(#buf,55d)
CHGNUM @v_att2  :(#buf,50d)
CHGNUM @v_hld2  :(#buf,51d)
CHGNUM @v_dec2  :(#buf,52d)
CHGNUM @v_sus2  :(#buf,53d)
CHGNUM @v_rel2  :(#buf,54d)

;--------------------------------------

BOX @b_mix @p_prog "MIX" 27d 10d 17d 9d ""

CHOICE @v_out   @b_mix "output:" @l_output 0d 2d 0d 1d 4d "output redirection"
SEPARATOR       @b_mix ""
CHOICE @v_xfa   @b_mix "Xfade :" @l_xfade 0d 2d 0d 1d 6d "crossfade mode"
CHOICE @v_xfad  @b_mix "Xf dir:" @l_xfadedir 0d 1d 0d 1d 4d "crossfade direction"
NUM    @v_xfab  @b_mix "Xf bal:" 0d 127d 0d 10d "crossfade initial balance [0...127]"
NUM    @v_xfaa  @b_mix "Xf amt:" 0d 255d 0d 10d "crossfade amount [0...255]"
CHOICE @v_xfas  @b_mix "Xf swi:" @l_key 0d 127d 64d 10d -4d "crossfade switch point [0...127]/[C-2...G8]"

OUT @ @m_par i(126d) i(#v_out) F7
OUT @ @m_par i(59d)  i(#v_xfa) F7
OUT @ @m_par i(60d)  i(#v_xfad) F7
OUT @ @m_par i(61d)  i(#v_xfab) F7
OUT @ @m_par i(62d)  i(#v_xfaa) F7
OUT @ @m_par i(63d)  i(#v_xfas) F7

CHGNUM @v_out  :(#buf,126d)
CHGNUM @v_xfa  :(#buf,59d)
CHGNUM @v_xfad :(#buf,60d)
CHGNUM @v_xfab :(#buf,61d)
CHGNUM @v_xfaa :(#buf,62d)
CHGNUM @v_xfas :(#buf,63d)


;--------------------------------------

BOX @b_ega @p_prog "AUX Eg" 44d 0d 10d 9d ""

NUM    @v_amta  @b_ega "amt:" -128d 127d 0d 10d "auxiliary enveloppe amount [-128...+127]"
NUM    @v_dela  @b_ega "del:" 0d 127d 0d 10d "auxiliary enveloppe delay [0...127]"
NUM    @v_atta  @b_ega "att:" 0d 99d 0d 10d "auxiliary enveloppe attack [0...99]"
NUM    @v_hlda  @b_ega "hld:" 0d 99d 0d 10d "auxiliary enveloppe hold [0...99]"
NUM    @v_deca  @b_ega "dec:" 0d 99d 0d 10d "auxiliary enveloppe decay [0...99]"
NUM    @v_susa  @b_ega "sus:" 0d 99d 0d 10d "auxiliary enveloppe sustain [0...99]"
NUM    @v_rela  @b_ega "rel:" 0d 99d 0d 10d "auxiliary enveloppe release [0...99]"

OUT @ @m_par i(80d) i(#v_amta) F7
OUT @ @m_par i(74d) i(#v_dela) F7
OUT @ @m_par i(75d) i(#v_atta) F7
OUT @ @m_par i(76d) i(#v_hlda) F7
OUT @ @m_par i(77d) i(#v_deca) F7
OUT @ @m_par i(78d) i(#v_susa) F7
OUT @ @m_par i(79d) i(#v_rela) F7

CHGNUM @v_amta s(:(#buf,80d))
CHGNUM @v_dela :(#buf,74d)
CHGNUM @v_atta :(#buf,75d)
CHGNUM @v_hlda :(#buf,76d)
CHGNUM @v_deca :(#buf,77d)
CHGNUM @v_susa :(#buf,78d)
CHGNUM @v_rela :(#buf,79d)

;--------------------------------------

BOX @b_lfo1 @p_prog "LFO 1" 54d 0d 10d 7d ""

CHOICE @v_l1wav @b_lfo1 "wav:" @l_wav 0d 4d 0d 2d 4d "LFO1 wave shape [RAND,TRI,SINE,SAW,SQU]"
NUM    @v_l1amt @b_lfo1 "amt:" -128d 127d 0d 10d "LFO1 amount [-128...+127]"
NUM    @v_l1rat @b_lfo1 "rat:" 0d 127d 0d 10d "LFO1 rate/speed [0...127]=[0.052...25Hz]"
NUM    @v_l1del @b_lfo1 "del:" 0d 127d 0d 10d "LFO1 delay [0...127]=[0...13s]"
NUM    @v_l1var @b_lfo1 "var:" 0d 127d 0d 10d "LFO1 variation [0...127]"

OUT @ @m_par i(64d) i(#v_l1wav) F7
OUT @ @m_par i(68d) i(#v_l1amt) F7
OUT @ @m_par i(65d) i(#v_l1rat) F7
OUT @ @m_par i(66d) i(#v_l1del) F7
OUT @ @m_par i(67d) i(#v_l1var) F7

CHGNUM @v_l1wav :(#buf,64d)
CHGNUM @v_l1amt s(:(#buf,68d))
CHGNUM @v_l1rat :(#buf,65d)
CHGNUM @v_l1del :(#buf,66d)
CHGNUM @v_l1var :(#buf,67d)

;--------------------------------------

BOX @b_lfo2 @p_prog "LFO 2" 64d 0d 10d 7d ""

CHOICE @v_l2wav @b_lfo2 "wav:" @l_wav 0d 4d 0d 2d 4d "LFO2 wave shape [RAND,TRI,SINE,SAW,SQU]"
NUM    @v_l2amt @b_lfo2 "amt:" -128d 127d 0d 10d "LFO2 amount [-128...+127]"
NUM    @v_l2rat @b_lfo2 "rat:" 0d 127d 0d 10d "LFO2 rate/speed [0...127]=[0.052...25Hz]"
NUM    @v_l2del @b_lfo2 "del:" 0d 127d 0d 10d "LFO2 delay [0...127]=[0...13s]"
NUM    @v_l2var @b_lfo2 "var:" 0d 127d 0d 10d "LFO2 variation [0...127]"

OUT @ @m_par i(69d) i(#v_l2wav) F7
OUT @ @m_par i(73d) i(#v_l2amt) F7
OUT @ @m_par i(70d) i(#v_l2rat) F7
OUT @ @m_par i(71d) i(#v_l2del) F7
OUT @ @m_par i(72d) i(#v_l2var) F7

CHGNUM @v_l2wav :(#buf,69d)
CHGNUM @v_l2amt s(:(#buf,73d))
CHGNUM @v_l2rat :(#buf,70d)
CHGNUM @v_l2del :(#buf,71d)
CHGNUM @v_l2var :(#buf,72d)

;--------------------------------------

BOX @b_glo @p_prog "GLOBAL" 27d 24d 15d 13d ""

CHOICE @v_gkmin @b_glo "kmin:" @l_key 0d 127d 0d 10d 4d "global key range lower limit [0...127]=[C-2...G8]"
CHOICE @v_gkmax @b_glo "kmax:" @l_key 0d 127d 127d 10d 4d "global key range upper limit [0...127]=[C-2...G8]"
NUM    @v_gctla @b_glo "ct.A:" -128d 127d 0d 10d "controller A amount [-128...+127]"
NUM    @v_gctlb @b_glo "ct.B:" -128d 127d 0d 10d "controller B amount [-128...+127]"
NUM    @v_gctlc @b_glo "ct.C:" -128d 127d 0d 10d "controller C amount [-128...+127]"
NUM    @v_gctld @b_glo "ct.D:" -128d 127d 0d 10d "controller D amount [-128...+127]"
NUM    @v_gaftt @b_glo "aftt:" -128d 127d 0d 10d "aftertouch amount [-128...+127]"
CHOICE @v_gbend @b_glo "bend:" @l_bend 0d 13d 0d 5d 7d "bend range [0...12,PROG]"
CHOICE @v_gvelo @b_glo "velo:" @l_velo 0d 5d 0d 5d 7d "velocity curve [OFF,CURVE1...CURVE4,PROG]"
CHOICE @v_gkctr @b_glo "k.ct:" @l_key 0d 127d 60d 10d 4d "keyboard center for key modulation [0...127]=[C-2...G8]"
CHOICE @v_gtune @b_glo "tune:" @l_tune 0d 5d 0d 2d 8d "keyboard tuning (temperament)"

OUT @ @m_par i(15d)  i(#v_gkmin) F7
OUT @ @m_par i(19d)  i(#v_gkmax) F7
OUT @ @m_par i(118d) i(#v_gctla) F7
OUT @ @m_par i(119d) i(#v_gctlb) F7
OUT @ @m_par i(120d) i(#v_gctlc) F7
OUT @ @m_par i(121d) i(#v_gctld) F7
OUT @ @m_par i(122d) i(#v_gaftt) F7
OUT @ @m_par i(123d) i(#v_gbend) F7
OUT @ @m_par i(124d) i(#v_gvelo) F7
OUT @ @m_par i(125d) i(#v_gkctr) F7
OUT @ @m_par i(127d) i(#v_gtune) F7

CHGNUM @v_gkmin :(#buf,15d)
CHGNUM @v_gkmax :(#buf,19d)
CHGNUM @v_gctla s(:(#buf,118d))
CHGNUM @v_gctlb s(:(#buf,119d))
CHGNUM @v_gctlc s(:(#buf,120d))
CHGNUM @v_gctld s(:(#buf,121d))
CHGNUM @v_gaftt :(#buf,122d)
CHGNUM @v_gbend :(#buf,123d)
CHGNUM @v_gvelo :(#buf,124d)
CHGNUM @v_gkctr :(#buf,125d)
CHGNUM @v_gtune :(#buf,127d)

;--------------------------------------

BOX @b_m1s @p_prog "MOD SRC" 44d 10d 11d 8d "source: 0=keyboard 1=velocity"

CHOICE @v_m1s1 @b_m1s "1:" @l_m1s 0d 1d 0d 1d 7d ""
CHOICE @v_m1s2 @b_m1s "2:" @l_m1s 0d 1d 0d 1d 7d ""
CHOICE @v_m1s3 @b_m1s "3:" @l_m1s 0d 1d 0d 1d 7d ""
CHOICE @v_m1s4 @b_m1s "4:" @l_m1s 0d 1d 0d 1d 7d ""
CHOICE @v_m1s5 @b_m1s "5:" @l_m1s 0d 1d 0d 1d 7d ""
CHOICE @v_m1s6 @b_m1s "6:" @l_m1s 0d 1d 0d 1d 7d ""

OUT @ @m_par i(81d) i(#v_m1s1) F7
OUT @ @m_par i(82d) i(#v_m1s2) F7
OUT @ @m_par i(83d) i(#v_m1s3) F7
OUT @ @m_par i(84d) i(#v_m1s4) F7
OUT @ @m_par i(85d) i(#v_m1s5) F7
OUT @ @m_par i(86d) i(#v_m1s6) F7

CHGNUM @v_m1s1 :(#buf,81d)
CHGNUM @v_m1s2 :(#buf,82d)
CHGNUM @v_m1s3 :(#buf,83d)
CHGNUM @v_m1s4 :(#buf,84d)
CHGNUM @v_m1s5 :(#buf,85d)
CHGNUM @v_m1s6 :(#buf,86d)

;--------------------------------------

BOX @b_m1d @p_prog "MOD DEST" 55d 10d 17d 8d "dest: [0...33]=PITCH/VOL/ATT/DEC/REL/XFADE/LFO1/LFO2/AUXEG/START/PAN/TONE"

CHOICE @v_m1d1 @b_m1d "" @l_m1d 0d 33d 0d 5d 15d ""
CHOICE @v_m1d2 @b_m1d "" @l_m1d 0d 33d 0d 5d 15d ""
CHOICE @v_m1d3 @b_m1d "" @l_m1d 0d 33d 0d 5d 15d ""
CHOICE @v_m1d4 @b_m1d "" @l_m1d 0d 33d 0d 5d 15d ""
CHOICE @v_m1d5 @b_m1d "" @l_m1d 0d 33d 0d 5d 15d ""
CHOICE @v_m1d6 @b_m1d "" @l_m1d 0d 33d 0d 5d 15d ""

OUT @ @m_par i(87d) i(#v_m1d1) F7
OUT @ @m_par i(88d) i(#v_m1d2) F7
OUT @ @m_par i(89d) i(#v_m1d3) F7
OUT @ @m_par i(90d) i(#v_m1d4) F7
OUT @ @m_par i(91d) i(#v_m1d5) F7
OUT @ @m_par i(92d) i(#v_m1d6) F7

CHGNUM @v_m1d1 :(#buf,87d)
CHGNUM @v_m1d2 :(#buf,88d)
CHGNUM @v_m1d3 :(#buf,89d)
CHGNUM @v_m1d4 :(#buf,90d)
CHGNUM @v_m1d5 :(#buf,91d)
CHGNUM @v_m1d6 :(#buf,92d)

;--------------------------------------

BOX @b_m1a @p_prog "AMT" 72d 10d 6d 8d "amount: [-128...127]"

NUM    @v_m1a1 @b_m1a "" -128d 127d 0d 10d ""
NUM    @v_m1a2 @b_m1a "" -128d 127d 0d 10d ""
NUM    @v_m1a3 @b_m1a "" -128d 127d 0d 10d ""
NUM    @v_m1a4 @b_m1a "" -128d 127d 0d 10d ""
NUM    @v_m1a5 @b_m1a "" -128d 127d 0d 10d ""
NUM    @v_m1a6 @b_m1a "" -128d 127d 0d 10d ""

OUT @ @m_par i(93d) i(#v_m1a1) F7
OUT @ @m_par i(94d) i(#v_m1a2) F7
OUT @ @m_par i(95d) i(#v_m1a3) F7
OUT @ @m_par i(96d) i(#v_m1a4) F7
OUT @ @m_par i(97d) i(#v_m1a5) F7
OUT @ @m_par i(98d) i(#v_m1a6) F7

CHGNUM @v_m1a1 s(:(#buf,93d))
CHGNUM @v_m1a2 s(:(#buf,94d))
CHGNUM @v_m1a3 s(:(#buf,95d))
CHGNUM @v_m1a4 s(:(#buf,96d))
CHGNUM @v_m1a5 s(:(#buf,97d))
CHGNUM @v_m1a6 s(:(#buf,98d))

;--------------------------------------

BOX @b_m2s @p_prog "MOD SRC" 44d 18d 11d 10d "source: 0=keyboard 1=velocity"

CHOICE @v_m2s1 @b_m2s "1:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s2 @b_m2s "2:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s3 @b_m2s "3:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s4 @b_m2s "4:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s5 @b_m2s "5:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s6 @b_m2s "6:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s7 @b_m2s "7:" @l_m2s 0d 9d 0d 5d 7d ""
CHOICE @v_m2s8 @b_m2s "8:" @l_m2s 0d 9d 0d 5d 7d ""

OUT @ @m_par i(099d) i(#v_m2s1) F7
OUT @ @m_par i(100d) i(#v_m2s2) F7
OUT @ @m_par i(101d) i(#v_m2s3) F7
OUT @ @m_par i(102d) i(#v_m2s4) F7
OUT @ @m_par i(103d) i(#v_m2s5) F7
OUT @ @m_par i(104d) i(#v_m2s6) F7
OUT @ @m_par i(105d) i(#v_m2s7) F7
OUT @ @m_par i(106d) i(#v_m2s8) F7

CHGNUM @v_m2s1 :(#buf,099d)
CHGNUM @v_m2s2 :(#buf,100d)
CHGNUM @v_m2s3 :(#buf,101d)
CHGNUM @v_m2s4 :(#buf,102d)
CHGNUM @v_m2s5 :(#buf,103d)
CHGNUM @v_m2s6 :(#buf,104d)
CHGNUM @v_m2s7 :(#buf,105d)
CHGNUM @v_m2s8 :(#buf,106d)

;--------------------------------------

BOX @b_m2d @p_prog "MOD DEST" 55d 18d 17d 10d "dest: [0...24]=OFF/PITCH/VOL/ATT/DEC/REL/XFADE/LFO1/LFO2/AUXEG"

CHOICE @v_m2d1 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d2 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d3 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d4 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d5 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d6 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d7 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""
CHOICE @v_m2d8 @b_m2d "" @l_m2d 0d 24d 0d 5d 15d ""

OUT @ @m_par i(107d) i(#v_m2d1) F7
OUT @ @m_par i(108d) i(#v_m2d2) F7
OUT @ @m_par i(109d) i(#v_m2d3) F7
OUT @ @m_par i(110d) i(#v_m2d4) F7
OUT @ @m_par i(111d) i(#v_m2d5) F7
OUT @ @m_par i(112d) i(#v_m2d6) F7
OUT @ @m_par i(113d) i(#v_m2d7) F7
OUT @ @m_par i(114d) i(#v_m2d8) F7

CHGNUM @v_m2d1 :(#buf,107d)
CHGNUM @v_m2d2 :(#buf,108d)
CHGNUM @v_m2d3 :(#buf,109d)
CHGNUM @v_m2d4 :(#buf,110d)
CHGNUM @v_m2d5 :(#buf,111d)
CHGNUM @v_m2d6 :(#buf,112d)
CHGNUM @v_m2d7 :(#buf,113d)
CHGNUM @v_m2d8 :(#buf,114d)

;--------------------------------------

BOX @b_foot @p_prog "FOOTSWITCH CONTROL" 44d 28d 20d 5d "dest: [0...10]=OFF/SUS/ALTEG/ALTREL/XSWITCH"

CHOICE @v_foot1 @b_foot "1->" @l_foot 0d 9d 0d 5d 15d ""
CHOICE @v_foot2 @b_foot "2->" @l_foot 0d 9d 0d 5d 15d ""
CHOICE @v_foot3 @b_foot "3->" @l_foot 0d 9d 0d 5d 15d ""

OUT @ @m_par i(115d) i(#v_foot1) F7
OUT @ @m_par i(116d) i(#v_foot2) F7
OUT @ @m_par i(117d) i(#v_foot3) F7

CHGNUM @v_foot1 :(#buf,115d)
CHGNUM @v_foot2 :(#buf,116d)
CHGNUM @v_foot3 :(#buf,117d)

;--------------------------------------

BOX @b_link @p_prog "LINKS" 44d 34d 8d 5d "links: [-1:OFF,0...193]"

CHOICE @v_link1 @b_link "1->" @l_links -1d 193d -1d 10d 3d ""
CHOICE @v_link2 @b_link "2->" @l_links -1d 193d -1d 10d 3d ""
CHOICE @v_link3 @b_link "3->" @l_links -1d 193d -1d 10d 3d ""

OUT @ @m_par i(12d) i(#v_link1) F7
OUT @ @m_par i(13d) i(#v_link2) F7
OUT @ @m_par i(14d) i(#v_link3) F7

CHGNUM @v_link1 s(:(#buf,12d))
CHGNUM @v_link2 s(:(#buf,13d))
CHGNUM @v_link3 s(:(#buf,14d))

;--------------------------------------

BOX @b_lkmin @p_prog "KMIN" 52d 34d 6d 5d "links key range lower limit [0...127]=[C-2...G8]"

CHOICE @v_lkmin1 @b_lkmin "" @l_key 0d 127d 0d 10d 4d ""
CHOICE @v_lkmin2 @b_lkmin "" @l_key 0d 127d 0d 10d 4d ""
CHOICE @v_lkmin3 @b_lkmin "" @l_key 0d 127d 0d 10d 4d ""

OUT @ @m_par i(16d) i(#v_lkmin1) F7
OUT @ @m_par i(17d) i(#v_lkmin2) F7
OUT @ @m_par i(18d) i(#v_lkmin3) F7

CHGNUM @v_lkmin1 :(#buf,16d)
CHGNUM @v_lkmin2 :(#buf,17d)
CHGNUM @v_lkmin3 :(#buf,18d)


;--------------------------------------

BOX @b_lkmax @p_prog "KMAX" 58d 34d 6d 5d "links key range upper limit [0...127]=[C-2...G8]"

CHOICE @v_lkmax1 @b_lkmax "" @l_key 0d 127d 127d 10d 4d ""
CHOICE @v_lkmax2 @b_lkmax "" @l_key 0d 127d 127d 10d 4d ""
CHOICE @v_lkmax3 @b_lkmax "" @l_key 0d 127d 127d 10d 4d ""

OUT @ @m_par i(20d) i(#v_lkmax1) F7
OUT @ @m_par i(21d) i(#v_lkmax2) F7
OUT @ @m_par i(22d) i(#v_lkmax3) F7

CHGNUM @v_lkmax1 :(#buf,20d)
CHGNUM @v_lkmax2 :(#buf,21d)
CHGNUM @v_lkmax3 :(#buf,22d)

;--------------------------------------

BOX    @b_name @p_prog "NAME" 27d 37d 14d 3d ""
STRING @v_name @b_name "" 20 7F 12d "noname      " "preset name (12 characters)"

OUT @ \
  @m_par i(00d) i(:(#v_name,00d)) F7 \
  @m_par i(01d) i(:(#v_name,01d)) F7 \
  @m_par i(02d) i(:(#v_name,02d)) F7 \
  @m_par i(03d) i(:(#v_name,03d)) F7 \
  @m_par i(04d) i(:(#v_name,04d)) F7 \
  @m_par i(05d) i(:(#v_name,05d)) F7 \
  @m_par i(06d) i(:(#v_name,06d)) F7 \
  @m_par i(07d) i(:(#v_name,07d)) F7 \
  @m_par i(08d) i(:(#v_name,08d)) F7 \
  @m_par i(09d) i(:(#v_name,09d)) F7 \
  @m_par i(10d) i(:(#v_name,10d)) F7 \
  @m_par i(11d) i(:(#v_name,11d)) F7

CHGBUF @v_name #buf

;--------------------------------------
; write/read synth ; load/save disk:

BOX     @b_wr   @p_prog "WRITE/READ" 0d 39d 27d 5d ""

NUM     @v_pr_nu    @b_wr "preset num = " 0d 191d 0d 10d "preset number [0...191]"
REQ     @rq_pr_nu   F0 18 04 @v_id 00 i(@v_pr_nu) F7
RECEIVE @r_pr_nu @b_wr "read from preset num" @rq_pr_nu &buf 1d 1d 7d 262d 'e' ""
OUT     @m_pr_dump F0 18 04 @v_id 01 i(@v_pr_nu) {c {e \
        @v_name @v_link1 @v_link2 @v_link3 \
        @v_gkmin @v_lkmin1 @v_lkmin2 @v_lkmin3 \
        @v_gkmax @v_lkmax1 @v_lkmax2 @v_lkmax3 \
        @v_ins1 @v_star1 @v_tran1 @v_detu1 @v_lvl1 @v_pan1 @v_dela1 @v_kmin1 @v_kmax1 \
        @v_att1 @v_hld1 @v_dec1 @v_sus1 @v_rel1 @v_eg1 @v_solo1 @v_chor1 @v_revs1 \
        @v_ins2 @v_star2 @v_tran2 @v_detu2 @v_lvl2 @v_pan2 @v_dela2 @v_kmin2 @v_kmax2 \
        @v_att2 @v_hld2 @v_dec2 @v_sus2 @v_rel2 @v_eg2 @v_solo2 @v_chor2 @v_revs2 \
        @v_xfa @v_xfad @v_xfab @v_xfaa @v_xfas \
        @v_l1wav @v_l1rat @v_l1del @v_l1var @v_l1amt \
        @v_l2wav @v_l2rat @v_l2del @v_l2var @v_l2amt \
        @v_dela @v_atta @v_hlda @v_deca @v_susa @v_rela @v_amta \
        @v_m1s1 @v_m1s2 @v_m1s3 @v_m1s4 @v_m1s5 @v_m1s6 \
        @v_m1d1 @v_m1d2 @v_m1d3 @v_m1d4 @v_m1d5 @v_m1d6 \
        @v_m1a1 @v_m1a2 @v_m1a3 @v_m1a4 @v_m1a5 @v_m1a6 \
        @v_m2s1 @v_m2s2 @v_m2s3 @v_m2s4 @v_m2s5 @v_m2s6 @v_m2s7 @v_m2s8 \
        @v_m2d1 @v_m2d2 @v_m2d3 @v_m2d4 @v_m2d5 @v_m2d6 @v_m2d7 @v_m2d8 \
        @v_foot1 @v_foot2 @v_foot3 @v_gctla @v_gctlb @v_gctlc @v_gctld \
        @v_gaftt @v_gbend @v_gvelo @v_gkctr @v_out @v_gtune \
        }e }c F7
SEND    @s_pr_nu  @b_wr "write to prg num (user)" @m_pr_dump ""

BOX     @b_sl   @p_prog "SAVE/LOAD" 27d 40d 51d 4d ""

SAVE    @@save @b_sl "save to file  :" 34d "p-noname.p1" @m_pr_dump ""

LOAD    @@load @b_sl "load from file:" 34d "p-noname.p1" &buf 1d 1d 7d 262d 'e' ""

;--------------------------------------
; master page:

PAGE   @p_master "master settings" ""

;--------------------------------------

BOX @b_main @p_master "MAIN PARAMS" 0d 0d 24d 26d ""

NUM     @v_ch   @b_main "cur channel:" 1d 16d 1d 5d "current midi channel [1...16]"
NUM     @v_vol  @b_main "cur volume :" 0d 127d 127d 10d "current midi volume [0...127]"
CHOICE  @v_pan  @b_main "cur pan    :" @l_pan -8d 7d 0d 5d 4d "current midi pan [-8:PROG,-7...+7]"
NUM     @v_pre  @b_main "cur preset :" 0d 193d 0d 10d "current preset [0...193]"
NUM     @v_tun  @b_main "master tune:" -64d 64d 0d 10d "master tune [-64...+64]"
NUM     @v_trp  @b_main "transpose  :" -12d 12d 0d 5d "master transpose [-12...+12]"
NUM     @v_bnd  @b_main "bend range :+-" 0d 12d 0d 5d "global pitch bend range [0...12]"
CHOICE  @v_vel  @b_main "velo curve :" @l_velo 0d 4d 0d 2d 7d "global velocity curve [OFF,CURVE1...CURVE4]"
CHOICE  @v_mod  @b_main "midi mode  :" @l_mode 0d 3d 2d 2d 5d "midi mode [OMNI,POLY,MULTI,MONO]"
CHOICE  @v_ovr  @b_main "midi overfl:" @l_onoff 0d 1d 0d 1d 3d "midi overflow to MIDI OUT"
NUM     @v_cta  @b_main "control. A :" 0d 31d 0d 10d "controller A [0...31]"
NUM     @v_ctb  @b_main "control. B :" 0d 31d 0d 10d "controller B [0...31]"
NUM     @v_ctc  @b_main "control. C :" 0d 31d 0d 10d "controller C [0...31]"
NUM     @v_ctd  @b_main "control. D :" 0d 31d 0d 10d "controller D [0...31]"
NUM     @v_ft1  @b_main "footsw. 1  :" 64d 79d 64d 10d "footswitch 1 [64...79]"
NUM     @v_ft2  @b_main "footsw. 2  :" 64d 79d 64d 10d "footswitch 2 [64...79]"
NUM     @v_ft3  @b_main "footsw. 3  :" 64d 79d 64d 10d "footswitch 3 [64...79]"
CHOICE  @v_mch  @b_main "mode change:" @l_enadis 0d 1d 0d 1d 3d "mode change enable"
NUM     @v_id2  @b_main "device ID  :" 0d 15d 0d 5d "device ID [0...15]"
SEPARATOR      @b_main ""
NUM     @v_ind  @b_main "midi channel:" 1d 16d 1d 5d "midi channel [1...16]"
TABLE/C @t_che  @b_main "-> channel enable=" @v_ind -1d 16d @l_enadis 0d 1d 0d 1d 3d "midi channel enable"
TABLE/C @t_pch  @b_main "-> prg chg enable=" @v_ind -1d 16d @l_enadis 0d 1d 0d 1d 3d "program change enable"
TABLE/C @t_out  @b_main "-> output        =" @v_ind -1d 16d @l_output 0d 3d 3d 1d 4d "output [MAIN/SUB1/SUB2/PROG]"

CHGNUM @v_id #v_id2

CHGNUM @v_ch +(#@channel,1d)
OUT @ @m_par i(256d) i(#@channel) F7
OUT @ @m_par i(256d) -(i(#v_ch),1d) F7
OUT @ @m_par i(257d) i(#v_vol) F7
OUT @ @m_par i(258d) i(#v_pan) F7
OUT @ @m_par i(259d) i(#v_pre) F7
OUT @ @m_par i(260d) i(#v_tun) F7
OUT @ @m_par i(261d) i(#v_trp) F7
OUT @ @m_par i(262d) i(#v_bnd) F7
OUT @ @m_par i(263d) i(#v_vel) F7
OUT @ @m_par i(264d) i(#v_mod) F7
OUT @ @m_par i(265d) i(#v_ovr) F7
OUT @ @m_par i(266d) i(#v_cta) F7
OUT @ @m_par i(267d) i(#v_ctb) F7
OUT @ @m_par i(268d) i(#v_ctc) F7
OUT @ @m_par i(269d) i(#v_ctd) F7
OUT @ @m_par i(270d) i(#v_ft1) F7
OUT @ @m_par i(271d) i(#v_ft2) F7
OUT @ @m_par i(272d) i(#v_ft3) F7
OUT @ @m_par i(273d) i(#v_mch) F7
OUT @ @m_par i(274d) i(#v_id2) F7
OUT @ @m_par i(+(383d,@v_ind)) i(v(#t_che))
OUT @ @m_par i(+(399d,@v_ind)) i(v(#t_pch))
OUT @ @m_par i(+(415d,@v_ind)) i(v(#t_out))

;--------------------------------------

BOX @b_main2 @p_master "MAIN PARAMS READ/WRITE/SAVE/LOAD" 24d 20d 52d 6d ""

BUFFER @buf_main 1000d "main params buffer"

REQ     @rq_main
RECEIVE @r_main @b_main2 "wait and read main params" @rq_main &buf_main 1d 3d 5d 1000d 'e' ""
OUT     @m_main F0 18 04 @v_id 07 {e i(@buf_main) }e F7
SEND    @s_main @b_main2 "write to main" @m_main ""
SAVE    @sa_main @b_main2 "save to file  :" 34d "s-noname.p1" @m_main ""
LOAD    @lo_main @b_main2 "load from file:" 34d "s-noname.p1" &buf_main 1d 1d 5d 260d 'e' ""

;--------------------------------------

BOX @b_map @p_master "PROG/PRESET MAP" 24d 26d 52d 9d ""

NUM     @v_prg  @b_map "midi prog:" 0d 127d 0d 10d "midi program [0...127]"
TABLE/N @t_pre  @b_map "-> preset=" @v_prg 0d 128d 0d 193d 0d 10d "preset [0...193]"
OUT @ @m_par i(+(512d,@v_prg)) i(v(#t_pre))

SEPARATOR      @b_map ""

BUFFER @buf_map 128d "prog/preset map buffer"
CHGBUF @t_pre #buf_map

REQ     @rq_map F0 18 04 @v_id 06 F7
RECEIVE @r_map @b_map "read map" @rq_map &buf_map 1d 1d 5d 260d 'e' ""
OUT     @m_map F0 18 04 @v_id 07 {e i(@buf_map) }e F7
SEND    @s_map @b_map "write to map" @m_map ""
SAVE    @sa_map @b_map "save to file  :" 34d "m-noname.p1" @m_map ""
LOAD    @lo_map @b_map "load from file:" 34d "m-noname.p1" &buf_map 1d 1d 5d 260d 'e' ""

;--------------------------------------

BOX @b_tun @p_master "TUNING TABLE" 24d 35d 52d 9d ""

CHOICE  @v_key  @b_tun "key:" @l_key 0d 127d 0d 10d -4d "key [0...127]=[C-2...G8]"
TABLE/N @t_tun  @b_tun "-> tune=" @v_key 0d 128d 0d 8128d 0d 10d "tuning [0...(8128=127*64)]"
OUT @ F0 18 04 @v_id 05 i(#t_tun) F7

SEPARATOR      @b_tun ""

BUFFER @buf_tun 128d "tuning table buffer"
CHGBUF @t_tun #buf_tun

REQ     @rq_tun F0 18 04 @v_id 04 F7
RECEIVE @r_tun @b_tun "read tuning table" @rq_tun &buf_tun 1d 1d 5d 260d 'e' ""
OUT     @m_tun F0 18 04 @v_id 05 {e i(@buf_tun) }e F7
SEND    @s_tun @b_tun "write to tuning table" @m_tun ""
SAVE    @sa_tun @b_tun "save to file  :" 34d "t-noname.p1" @m_tun ""
LOAD    @lo_tun @b_tun "load from file:" 34d "t-noname.p1" &buf_tun 1d 1d 5d 260d 'e' ""


