PROGRAM_NAME='RICHMOND SOUND, DM1616HD, MIDI, BASIC, 10-98, BA'
(*   DATE:05/20/99    TIME:16:29:37    *)
(***********************************************************)
(* The following code block is provided as a guide to      *)
(* programming the device(s) listed above. This is a       *)
(* sample only, and will most likely require modification  *)
(* to be integrated into a master program.                 *)
(*                                                         *)
(* Device-specific protocols should be obtained directly   *)
(* from the equipment manufacturer to ensure compliance    *)
(* with the most current versions. Within the limits       *)
(* imposed by any non-disclosure agreements, AMX will      *)
(* provide protocols upon request.                         *)
(*                                                         *)
(* If further programming assistance is required, please   *)
(* contact your AMX customer support team.                 *)
(*                                                         *)
(***********************************************************)
(* This program is intended to be used with the Touch      *)
(* Panel file 'Richmond.tpd' in the Equip directory.       *)
(***********************************************************)
(*          DEVICE NUMBER DEFINITIONS GO BELOW             *)
(***********************************************************)
DEFINE_DEVICE

(* AXB-MIDI *)
MIXER      =  3                        (* 1616HD *)

PANEL      =  128                      (* AMX PANEL *)

(***********************************************************)
(*               CONSTANT DEFINITIONS GO BELOW             *)
(***********************************************************)
DEFINE_CONSTANT

(*** GO & STOP CONSTANT VALUES ***)
CUR_SELECT   = 0
SPEC_SELECT  = 1
ALL_CHANNELS = 0
SPEC_CHANNEL = 1

(***********************************************************)
(*               VARIABLE DEFINITIONS GO BELOW             *)
(***********************************************************)
DEFINE_VARIABLE

MIXER_BUFFER[100]                    (* SWITCHER BUFFER *)
PANEL_BUFFER[100]
BUTTON_GROUP

MIXER_ID
MIXER_IN[16]
MIXER_OUT[16]

(* Gain variables *)
GAIN_CHANNEL
INTEGER GAIN_PRESET[16]
INTEGER GAIN_PRESET_OLD[16]
GAIN_PRESET_UP
GAIN_PRESET_DN
GAIN_PRESET_FL

(* delay variables *)
DELAY_PRESET
DELAY_PRESET_OLD
DELAY_CHANNEL
DELAY_OUTPUT_FL
DELAY_ENABLE[2][16]
DELAY_ENABLE_OLD[2][16]

(* EQ variables *)
EQ_CHANNEL
EQ_OUTPUT_FL
EQ_PRESET[2][16]
EQ_PRESET_OLD[2][16]
EQ_PRESET_LEVEL
EQ_PRESET_UP
EQ_PRESET_DN

(* Submaster variables *)
SUBMAST_NUM
SUBMAST_LEVEL[32]
SUBMAST_LEVEL_OLD[32]
SUBMAST_BARGRAPH

(* Audio Playback variables *)
GO_SELECT
GO_CHANNEL
GO_CH_NUM
STOP_SELECT
STOP_CHANNEL
STOP_CH_NUM
GO_SELECT_FL
GO_SAMPLE_FL
STOP_SELECT_FL
STOP_SAMPLE_FL
GO_SELECT_NUM
GO_SAMPLE_NUM
STOP_SELECT_NUM
STOP_SAMPLE_NUM

BUFFER_MESSAGE[100]
NEW_LVL
TEMP_VAR
TEMP_STRING[100]

(***********************************************************)
(*               LATCHING DEFINITIONS GO BELOW             *)
(***********************************************************)
DEFINE_LATCHING

(***********************************************************)
(*       MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW           *)
(***********************************************************)
DEFINE_MUTUALLY_EXCLUSIVE

(***********************************************************)
(*           SUBROUTINE DEFINITIONS GO BELOW               *)
(***********************************************************)

DEFINE_CALL 'BUTTON GROUP' (GRP)
{
  IF (BUTTON_GROUP <> GRP)
  {
    SELECT
    {
      ACTIVE (BUTTON_GROUP = 1):       (* Recall Crosspoint *)
        GAIN_PRESET[GAIN_CHANNEL+1] = GAIN_PRESET_OLD[GAIN_CHANNEL+1]
      ACTIVE (BUTTON_GROUP = 21):      (* Recall Delay *)
        DELAY_PRESET = DELAY_PRESET_OLD
      ACTIVE (BUTTON_GROUP = 31):      (* Enable Delay *)
        DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] =
          DELAY_ENABLE_OLD[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1]
      ACTIVE (BUTTON_GROUP = 51):      (* Recall EQ *)
        EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
          EQ_PRESET_OLD[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]
      ACTIVE (BUTTON_GROUP = 71):      (* Submaster Level *)
        SUBMAST_LEVEL[SUBMAST_NUM+1] = SUBMAST_LEVEL_OLD[SUBMAST_NUM+1]
    }
    BUTTON_GROUP = GRP
  }
}

DEFINE_CALL 'SEND TO AUDIOBOX' (DEV,CMD[20])
{
  SEND_STRING DEV,"$F0,CMD,$F7"
  SEND_STRING 0,"$F0,CMD,$F7"
}


DEFINE_CALL 'AUDIOBOX MSC' (DEV,MSCCMD[20])
{
  CALL 'SEND TO AUDIOBOX' (DEV,"$7F,MIXER_ID,$02,MSCCMD")
}

(*
DEFINE_CALL 'AUDIOBOX SYS EX' (DEV,SYSCMD[20])
{
  CALL 'SEND TO AUDIOBOX' (DEV,"$00,$00,$40,$02,SYSCMD")
}
*)

DEFINE_CALL 'AUDIOBOX BUFFER'
LOCAL_VAR LEN DATA[100]
{
  LEN = LENGTH_STRING(MIXER_BUFFER)
  IF (MIXER_BUFFER[2] = $7F) (* MSC Command *)
  {
  }
  ELSE IF (MIXER_BUFFER[2] = $00) (* Sys Excl Command *)
  {
    DATA = MID_STRING(MIXER_BUFFER,8,(LEN-9))
    SELECT
    {
      ACTIVE (DATA[1] = $20): (* Device ID Response *)
      {
        BUFFER_MESSAGE = "'Device ID is $',itohex(data[2]),'.'"
      }
      ACTIVE (DATA[1] = $40): (* IO Levels Response *)
      {
        MIXER_IN = MID_STRING(DATA,2,16)
        MIXER_OUT = ""
        BUFFER_MESSAGE = "'Input #1 level is ',itoa(mixer_in[1]),'.'"
      }
      ACTIVE (1):
      {
        BUFFER_MESSAGE = "'Other: ',data"
      }
    }
  }
  CLEAR_BUFFER MIXER_BUFFER
}

(***********************************************************)
(*                STARTUP CODE GOES BELOW                  *)
(***********************************************************)
DEFINE_START

CREATE_BUFFER MIXER,MIXER_BUFFER
CREATE_BUFFER PANEL,PANEL_BUFFER

CREATE_LEVEL PANEL,1,EQ_PRESET_LEVEL
CREATE_LEVEL PANEL,2,SUBMAST_BARGRAPH

SEND_COMMAND MIXER,'INA-4'   (* MidiBox command to route Midi-In to buffer *)


(*** Initialize variables ***)
SET_LENGTH_STRING (SUBMAST_LEVEL,32)
IF (LEFT_STRING(SUBMAST_LEVEL,8) = "0,0,0,0,0,0,0,0")
{
  SUBMAST_LEVEL = "64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
                   64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64"
  SUBMAST_LEVEL_OLD = "64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
                       64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64"
}

IF (GO_CH_NUM < 8)
  GO_CH_NUM = 8
IF (STOP_CH_NUM < 8)
  STOP_CH_NUM = 8

(***********************************************************)
(*            THE ACTUAL PROGRAM GOES BELOW                *)
(***********************************************************)
DEFINE_PROGRAM


(*** Recall Crosspoint Levels ***)
PUSH[PANEL,1]                          (* CHANNEL 1 *)
PUSH[PANEL,2]                          (* CHANNEL 2 *)
PUSH[PANEL,3]                          (* CHANNEL 3 *)
PUSH[PANEL,4]                          (* CHANNEL 4 *)
PUSH[PANEL,5]                          (* CHANNEL 5 *)
PUSH[PANEL,6]                          (* CHANNEL 6 *)
PUSH[PANEL,7]                          (* CHANNEL 7 *)
PUSH[PANEL,8]                          (* CHANNEL 8 *)
PUSH[PANEL,9]                          (* CHANNEL 9 *)
PUSH[PANEL,10]                         (* CHANNEL 10 *)
PUSH[PANEL,11]                         (* CHANNEL 11 *)
PUSH[PANEL,12]                         (* CHANNEL 12 *)
PUSH[PANEL,13]                         (* CHANNEL 13 *)
PUSH[PANEL,14]                         (* CHANNEL 14 *)
PUSH[PANEL,15]                         (* CHANNEL 15 *)
PUSH[PANEL,16]                         (* CHANNEL 16 *)
  IF (GAIN_CHANNEL <> PUSH_CHANNEL - 1)
  {
    GAIN_PRESET[GAIN_CHANNEL+1] = GAIN_PRESET_OLD[GAIN_CHANNEL+1]
    GAIN_CHANNEL = PUSH_CHANNEL - 1
    SEND_COMMAND PANEL,"'TEXT1-',ITOA(GAIN_PRESET[GAIN_CHANNEL+1])"
    CALL 'BUTTON GROUP' (1)
  }

PUSH[PANEL,17]                         (* INCREASE PRESET *)
{
  IF (GAIN_PRESET[GAIN_CHANNEL+1] < 622)
  {
    ON[GAIN_PRESET_UP]
    GAIN_PRESET[GAIN_CHANNEL+1] = GAIN_PRESET[GAIN_CHANNEL+1] + 1
    SEND_COMMAND PANEL,"'TEXT1-',ITOA(GAIN_PRESET[GAIN_CHANNEL+1])"
  }
  CALL 'BUTTON GROUP' (1)
}

PUSH[PANEL,18]                         (* DECREASE PRESET *)
{
  IF (GAIN_PRESET[GAIN_CHANNEL+1] > 0)
  {
    ON[GAIN_PRESET_DN]
    GAIN_PRESET[GAIN_CHANNEL+1] = GAIN_PRESET[GAIN_CHANNEL+1] - 1
    SEND_COMMAND PANEL,"'TEXT1-',ITOA(GAIN_PRESET[GAIN_CHANNEL+1])"
  }
  CALL 'BUTTON GROUP' (1)
}

RELEASE[PANEL,17]
RELEASE[PANEL,18]
{
  CANCEL_WAIT 'GAIN PRESET UP'
  CANCEL_WAIT 'GAIN PRESET DOWN'
  OFF[GAIN_PRESET_UP]
  OFF[GAIN_PRESET_DN]
}

IF (GAIN_PRESET_UP)
  WAIT 1 'GAIN PRESET UP'
  {
    IF (GAIN_PRESET[GAIN_CHANNEL+1] < 622)
    {
      GAIN_PRESET[GAIN_CHANNEL+1] = GAIN_PRESET[GAIN_CHANNEL+1] + 1
      SEND_COMMAND PANEL,"'TEXT1-',ITOA(GAIN_PRESET[GAIN_CHANNEL+1])"
    }
    ELSE
      OFF[GAIN_PRESET_UP]
  }
ELSE IF (GAIN_PRESET_DN)
  WAIT 1 'GAIN PRESET DOWN'
  {
    IF (GAIN_PRESET[GAIN_CHANNEL+1] > 0)
    {
      GAIN_PRESET[GAIN_CHANNEL+1] = GAIN_PRESET[GAIN_CHANNEL+1] - 1
      SEND_COMMAND PANEL,"'TEXT1-',ITOA(GAIN_PRESET[GAIN_CHANNEL+1])"
    }
    ELSE
      OFF[GAIN_PRESET_DN]
  }

PUSH[PANEL,19]                         (* KEYPAD ENTRY *)
{
  ON[GAIN_PRESET_FL]
  SEND_COMMAND PANEL,'AKEYP-'
}

PUSH[PANEL,121]                        (* SEND *)
{
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,$03,GAIN_CHANNEL,
    (GAIN_PRESET[GAIN_CHANNEL+1]%$80),(GAIN_PRESET[GAIN_CHANNEL+1]/$80),
    0,0,0,0,0")

  GAIN_PRESET_OLD[GAIN_CHANNEL+1] = GAIN_PRESET[GAIN_CHANNEL+1]
  CALL 'BUTTON GROUP' (1)
}

[PANEL,1]  = (GAIN_CHANNEL = 0)
[PANEL,2]  = (GAIN_CHANNEL = 1)
[PANEL,3]  = (GAIN_CHANNEL = 2)
[PANEL,4]  = (GAIN_CHANNEL = 3)
[PANEL,5]  = (GAIN_CHANNEL = 4)
[PANEL,6]  = (GAIN_CHANNEL = 5)
[PANEL,7]  = (GAIN_CHANNEL = 6)
[PANEL,8]  = (GAIN_CHANNEL = 7)
[PANEL,9]  = (GAIN_CHANNEL = 8)
[PANEL,10] = (GAIN_CHANNEL = 9)
[PANEL,11] = (GAIN_CHANNEL = 10)
[PANEL,12] = (GAIN_CHANNEL = 11)
[PANEL,13] = (GAIN_CHANNEL = 12)
[PANEL,14] = (GAIN_CHANNEL = 13)
[PANEL,15] = (GAIN_CHANNEL = 14)
[PANEL,16] = (GAIN_CHANNEL = 15)


(*** Recall & Enable Delay ***)
PUSH[PANEL,21]                         (* DELAY PRESET #0 *)
PUSH[PANEL,22]                         (* DELAY PRESET #1 *)
PUSH[PANEL,23]                         (* DELAY PRESET #2 *)
PUSH[PANEL,24]                         (* DELAY PRESET #3 *)
PUSH[PANEL,25]                         (* DELAY PRESET #4 *)
PUSH[PANEL,26]                         (* DELAY PRESET #5 *)
PUSH[PANEL,27]                         (* DELAY PRESET #6 *)
PUSH[PANEL,28]                         (* DELAY PRESET #7 *)
{
  DELAY_PRESET = PUSH_CHANNEL - 21
  CALL 'BUTTON GROUP' (21)
}

PUSH[PANEL,122]                        (* SEND *)
{
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,$00,$15,DELAY_PRESET,0")
  DELAY_PRESET_OLD = DELAY_PRESET
  CALL 'BUTTON GROUP' (21)
}


PUSH[PANEL,31]                         (* CHANNEL 1 *)
PUSH[PANEL,32]                         (* CHANNEL 2 *)
PUSH[PANEL,33]                         (* CHANNEL 3 *)
PUSH[PANEL,34]                         (* CHANNEL 4 *)
PUSH[PANEL,35]                         (* CHANNEL 5 *)
PUSH[PANEL,36]                         (* CHANNEL 6 *)
PUSH[PANEL,37]                         (* CHANNEL 7 *)
PUSH[PANEL,38]                         (* CHANNEL 8 *)
PUSH[PANEL,39]                         (* CHANNEL 9 *)
PUSH[PANEL,40]                         (* CHANNEL 10 *)
PUSH[PANEL,41]                         (* CHANNEL 11 *)
PUSH[PANEL,42]                         (* CHANNEL 12 *)
PUSH[PANEL,43]                         (* CHANNEL 13 *)
PUSH[PANEL,44]                         (* CHANNEL 14 *)
PUSH[PANEL,45]                         (* CHANNEL 15 *)
PUSH[PANEL,46]                         (* CHANNEL 16 *)
  IF (DELAY_CHANNEL <> PUSH_CHANNEL - 31)
  {
    DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] =
      DELAY_ENABLE_OLD[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1]
    DELAY_CHANNEL = PUSH_CHANNEL - 31
    CALL 'BUTTON GROUP' (31)
  }

PUSH[PANEL,47]                         (* INPUT *)
PUSH[PANEL,48]                         (* OUTPUT *)
  IF (DELAY_OUTPUT_FL <> PUSH_CHANNEL - 47)
  {
    DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] =
      DELAY_ENABLE_OLD[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1]
    DELAY_OUTPUT_FL = PUSH_CHANNEL - 47
    CALL 'BUTTON GROUP' (31)
  }

PUSH[PANEL,29]                         (* ENABLE *)
PUSH[PANEL,30]                         (* BYPASS *)
{
  DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] = 30 - PUSH_CHANNEL
  CALL 'BUTTON GROUP' (31)
}

PUSH[PANEL,123]                        (* SEND *)
{
  TEMP_VAR = DELAY_CHANNEL + ($20 * DELAY_OUTPUT_FL)
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,$00,$0B,TEMP_VAR,
    DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1]")
  DELAY_ENABLE_OLD[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] =
    DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1]
  CALL 'BUTTON GROUP' (31)
}

[PANEL,21] = (DELAY_PRESET = 0)
[PANEL,22] = (DELAY_PRESET = 1)
[PANEL,23] = (DELAY_PRESET = 2)
[PANEL,24] = (DELAY_PRESET = 3)
[PANEL,25] = (DELAY_PRESET = 4)
[PANEL,26] = (DELAY_PRESET = 5)
[PANEL,27] = (DELAY_PRESET = 6)
[PANEL,28] = (DELAY_PRESET = 7)

[PANEL,29] = (DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] = 1)
[PANEL,30] = (DELAY_ENABLE[DELAY_OUTPUT_FL+1][DELAY_CHANNEL+1] = 0)

[PANEL,31] = (DELAY_CHANNEL = 0)
[PANEL,32] = (DELAY_CHANNEL = 1)
[PANEL,33] = (DELAY_CHANNEL = 2)
[PANEL,34] = (DELAY_CHANNEL = 3)
[PANEL,35] = (DELAY_CHANNEL = 4)
[PANEL,36] = (DELAY_CHANNEL = 5)
[PANEL,37] = (DELAY_CHANNEL = 6)
[PANEL,38] = (DELAY_CHANNEL = 7)
[PANEL,39] = (DELAY_CHANNEL = 8)
[PANEL,40] = (DELAY_CHANNEL = 9)
[PANEL,41] = (DELAY_CHANNEL = 10)
[PANEL,42] = (DELAY_CHANNEL = 11)
[PANEL,43] = (DELAY_CHANNEL = 12)
[PANEL,44] = (DELAY_CHANNEL = 13)
[PANEL,45] = (DELAY_CHANNEL = 14)
[PANEL,46] = (DELAY_CHANNEL = 15)

[PANEL,47] = NOT(DELAY_OUTPUT_FL)
[PANEL,48] = DELAY_OUTPUT_FL


(*** Recall EQ ***)
PUSH[PANEL,51]                         (* CHANNEL 1 *)
PUSH[PANEL,52]                         (* CHANNEL 2 *)
PUSH[PANEL,53]                         (* CHANNEL 3 *)
PUSH[PANEL,54]                         (* CHANNEL 4 *)
PUSH[PANEL,55]                         (* CHANNEL 5 *)
PUSH[PANEL,56]                         (* CHANNEL 6 *)
PUSH[PANEL,57]                         (* CHANNEL 7 *)
PUSH[PANEL,58]                         (* CHANNEL 8 *)
PUSH[PANEL,59]                         (* CHANNEL 9 *)
PUSH[PANEL,60]                         (* CHANNEL 10 *)
PUSH[PANEL,61]                         (* CHANNEL 11 *)
PUSH[PANEL,62]                         (* CHANNEL 12 *)
PUSH[PANEL,63]                         (* CHANNEL 13 *)
PUSH[PANEL,64]                         (* CHANNEL 14 *)
PUSH[PANEL,65]                         (* CHANNEL 15 *)
PUSH[PANEL,66]                         (* CHANNEL 16 *)
  IF (EQ_CHANNEL <> PUSH_CHANNEL - 51)
  {
    EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
      EQ_PRESET_OLD[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]
    EQ_CHANNEL = PUSH_CHANNEL - 51
    SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
    EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
    SEND_LEVEL PANEL,1,EQ_PRESET_LEVEL
    CALL 'BUTTON GROUP' (51)
  }

PUSH[PANEL,67]                         (* INPUT *)
PUSH[PANEL,68]                         (* OUTPUT *)
  IF (EQ_OUTPUT_FL <> PUSH_CHANNEL - 67)
  {
    EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
      EQ_PRESET_OLD[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]
    EQ_OUTPUT_FL = PUSH_CHANNEL - 67
    SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
    EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
    SEND_LEVEL PANEL,1,EQ_PRESET_LEVEL
    CALL 'BUTTON GROUP' (51)
  }

PUSH[PANEL,69]                         (* INCREASE PRESET *)
{
  IF (EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] < 32)
  {
    ON[EQ_PRESET_UP]
    EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
      EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] + 1
    SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
    EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
    SEND_LEVEL PANEL,1,EQ_PRESET_LEVEL
  }
  CALL 'BUTTON GROUP' (51)
}

PUSH[PANEL,70]                         (* DECREASE PRESET *)
{
  IF (EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] > 0)
  {
    ON[EQ_PRESET_DN]
    EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
      EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] - 1
    SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
    EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
    SEND_LEVEL PANEL,1,EQ_PRESET_LEVEL
  }
  CALL 'BUTTON GROUP' (51)
}

RELEASE[PANEL,69]
RELEASE[PANEL,70]
{
  CANCEL_WAIT 'EQ PRESET UP'
  CANCEL_WAIT 'EQ PRESET DOWN'
  OFF[EQ_PRESET_UP]
  OFF[EQ_PRESET_DN]
}

IF (EQ_PRESET_UP)
  WAIT 5 'EQ PRESET UP'
  {
    IF (EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] < 32)
    {
      EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
        EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] + 1
      SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
      EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
      SEND_LEVEL PANEL,1,EQ_PRESET_LEVEL
    }
    ELSE
      OFF[EQ_PRESET_UP]
  }
ELSE IF (EQ_PRESET_DN)
  WAIT 5 'EQ PRESET DOWN'
  {
    IF (EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] > 0)
    {
      EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
        EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] - 1
      SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
      EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
      SEND_LEVEL PANEL,1,EQ_PRESET_LEVEL
    }
    ELSE
      OFF[EQ_PRESET_DN]
  }

IF (EQ_PRESET_LEVEL <> (EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32))
{
  EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] = EQ_PRESET_LEVEL *32/255
  EQ_PRESET_LEVEL = EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]*255/32
  SEND_COMMAND PANEL,"'TEXT3-',ITOA(EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1])"
}


PUSH[PANEL,124]                        (* SEND *)
{
  TEMP_VAR = DELAY_CHANNEL + ($20 * DELAY_OUTPUT_FL)
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,$0A,TEMP_VAR,
    EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1],0")
  EQ_PRESET_OLD[EQ_OUTPUT_FL+1][EQ_CHANNEL+1] =
    EQ_PRESET[EQ_OUTPUT_FL+1][EQ_CHANNEL+1]
  CALL 'BUTTON GROUP' (51)
}

[PANEL,51] = (EQ_CHANNEL = 0)
[PANEL,52] = (EQ_CHANNEL = 1)
[PANEL,53] = (EQ_CHANNEL = 2)
[PANEL,54] = (EQ_CHANNEL = 3)
[PANEL,55] = (EQ_CHANNEL = 4)
[PANEL,56] = (EQ_CHANNEL = 5)
[PANEL,57] = (EQ_CHANNEL = 6)
[PANEL,58] = (EQ_CHANNEL = 7)
[PANEL,59] = (EQ_CHANNEL = 8)
[PANEL,60] = (EQ_CHANNEL = 9)
[PANEL,61] = (EQ_CHANNEL = 10)
[PANEL,62] = (EQ_CHANNEL = 11)
[PANEL,63] = (EQ_CHANNEL = 12)
[PANEL,64] = (EQ_CHANNEL = 13)
[PANEL,65] = (EQ_CHANNEL = 14)
[PANEL,66] = (EQ_CHANNEL = 15)
[PANEL,67] = (EQ_OUTPUT_FL = 0)
[PANEL,68] = (EQ_OUTPUT_FL = 1)


(*** Set Submaster Levels ***)
PUSH[PANEL,71]                         (* SUBMASTER 1 *)
PUSH[PANEL,72]                         (* SUBMASTER 2 *)
PUSH[PANEL,73]                         (* SUBMASTER 3 *)
PUSH[PANEL,74]                         (* SUBMASTER 4 *)
PUSH[PANEL,75]                         (* SUBMASTER 5 *)
PUSH[PANEL,76]                         (* SUBMASTER 6 *)
PUSH[PANEL,77]                         (* SUBMASTER 7 *)
PUSH[PANEL,78]                         (* SUBMASTER 8 *)
PUSH[PANEL,79]                         (* SUBMASTER 9 *)
PUSH[PANEL,80]                         (* SUBMASTER 10 *)
PUSH[PANEL,81]                         (* SUBMASTER 11 *)
PUSH[PANEL,82]                         (* SUBMASTER 12 *)
PUSH[PANEL,83]                         (* SUBMASTER 13 *)
PUSH[PANEL,84]                         (* SUBMASTER 14 *)
PUSH[PANEL,85]                         (* SUBMASTER 15 *)
PUSH[PANEL,86]                         (* SUBMASTER 16 *)
PUSH[PANEL,87]                         (* SUBMASTER 17 *)
PUSH[PANEL,88]                         (* SUBMASTER 18 *)
PUSH[PANEL,89]                         (* SUBMASTER 19 *)
PUSH[PANEL,90]                         (* SUBMASTER 20 *)
PUSH[PANEL,90]                         (* SUBMASTER 20 *)
PUSH[PANEL,91]                         (* SUBMASTER 21 *)
PUSH[PANEL,92]                         (* SUBMASTER 22 *)
PUSH[PANEL,93]                         (* SUBMASTER 23 *)
PUSH[PANEL,94]                         (* SUBMASTER 24 *)
PUSH[PANEL,95]                         (* SUBMASTER 25 *)
PUSH[PANEL,96]                         (* SUBMASTER 26 *)
PUSH[PANEL,97]                         (* SUBMASTER 27 *)
PUSH[PANEL,98]                         (* SUBMASTER 28 *)
PUSH[PANEL,99]                         (* SUBMASTER 29 *)
PUSH[PANEL,100]                        (* SUBMASTER 30 *)
PUSH[PANEL,101]                        (* SUBMASTER 31 *)
PUSH[PANEL,102]                        (* SUBMASTER 32 *)
  IF (SUBMAST_NUM <> PUSH_CHANNEL - 71)
  {
    SUBMAST_LEVEL[SUBMAST_NUM+1] =
      SUBMAST_LEVEL_OLD[SUBMAST_NUM+1]
    SUBMAST_NUM = PUSH_CHANNEL - 71
    SEND_COMMAND PANEL,"'TEXT4-',ITOA(SUBMAST_LEVEL[SUBMAST_NUM+1])"
    SUBMAST_BARGRAPH = SUBMAST_LEVEL[SUBMAST_NUM+1]*2
    SEND_LEVEL PANEL,2,SUBMAST_BARGRAPH
    CALL 'BUTTON GROUP' (71)
  }

IF (SUBMAST_LEVEL[SUBMAST_NUM+1] <> (SUBMAST_BARGRAPH/2))
{
  SUBMAST_LEVEL[SUBMAST_NUM+1] = SUBMAST_BARGRAPH/2
  SEND_COMMAND PANEL,"'TEXT4-',ITOA(SUBMAST_LEVEL[SUBMAST_NUM+1])"
}

PUSH[PANEL,125]                        (* SEND *)
{
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,$00,$06,SUBMAST_NUM,
    SUBMAST_LEVEL[SUBMAST_NUM+1]")
  SUBMAST_LEVEL_OLD[SUBMAST_NUM+1] = SUBMAST_LEVEL[SUBMAST_NUM+1]
  CALL 'BUTTON GROUP' (71)
}

[PANEL,71] = (SUBMAST_NUM = 0)
[PANEL,72] = (SUBMAST_NUM = 1)
[PANEL,73] = (SUBMAST_NUM = 2)
[PANEL,74] = (SUBMAST_NUM = 3)
[PANEL,75] = (SUBMAST_NUM = 4)
[PANEL,76] = (SUBMAST_NUM = 5)
[PANEL,77] = (SUBMAST_NUM = 6)
[PANEL,78] = (SUBMAST_NUM = 7)
[PANEL,79] = (SUBMAST_NUM = 8)
[PANEL,80] = (SUBMAST_NUM = 9)
[PANEL,81] = (SUBMAST_NUM = 10)
[PANEL,82] = (SUBMAST_NUM = 11)
[PANEL,83] = (SUBMAST_NUM = 12)
[PANEL,84] = (SUBMAST_NUM = 13)
[PANEL,85] = (SUBMAST_NUM = 14)
[PANEL,86] = (SUBMAST_NUM = 15)
[PANEL,87] = (SUBMAST_NUM = 16)
[PANEL,88] = (SUBMAST_NUM = 17)
[PANEL,89] = (SUBMAST_NUM = 18)
[PANEL,90] = (SUBMAST_NUM = 19)
[PANEL,91] = (SUBMAST_NUM = 20)
[PANEL,92] = (SUBMAST_NUM = 21)
[PANEL,93] = (SUBMAST_NUM = 22)
[PANEL,94] = (SUBMAST_NUM = 23)
[PANEL,95] = (SUBMAST_NUM = 24)
[PANEL,96] = (SUBMAST_NUM = 25)
[PANEL,97] = (SUBMAST_NUM = 26)
[PANEL,98] = (SUBMAST_NUM = 27)
[PANEL,99] = (SUBMAST_NUM = 28)
[PANEL,100]= (SUBMAST_NUM = 29)
[PANEL,101]= (SUBMAST_NUM = 30)
[PANEL,102]= (SUBMAST_NUM = 31)


(*** Audio Playback ***)
PUSH[PANEL,103]                        (* PLAY *)
{
  OFF[PANEL,104]
  ON[PANEL,103]

  IF ((GO_SELECT = CUR_SELECT) AND (GO_CHANNEL = ALL_CHANNELS))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$01,$30")
  ELSE IF ((GO_SELECT = SPEC_SELECT) AND (GO_CHANNEL = ALL_CHANNELS))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$01,GO_SELECT_NUM")
  ELSE IF ((GO_SELECT = CUR_SELECT) AND (GO_CHANNEL = SPEC_CHANNEL))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$01,$30,$00,GO_CH_NUM")
  ELSE IF ((GO_SELECT = SPEC_SELECT) AND (GO_CHANNEL = SPEC_CHANNEL))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$01,GO_SELECT_NUM,$00,GO_CH_NUM")
}

PUSH[PANEL,104]                        (* STOP *)
{
  OFF[PANEL,103]
  ON[PANEL,104]

  IF ((GO_SELECT = CUR_SELECT) AND (GO_CHANNEL = ALL_CHANNELS))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$02,$30")
  ELSE IF ((GO_SELECT = SPEC_SELECT) AND (GO_CHANNEL = ALL_CHANNELS))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$02,GO_SELECT_NUM")
  ELSE IF ((GO_SELECT = CUR_SELECT) AND (GO_CHANNEL = SPEC_CHANNEL))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$02,$30,$00,GO_CH_NUM")
  ELSE IF ((GO_SELECT = SPEC_SELECT) AND (GO_CHANNEL = SPEC_CHANNEL))
    CALL 'AUDIOBOX MSC' (MIXER,"$13,$02,GO_SELECT_NUM,$00,GO_CH_NUM")
}

PUSH[PANEL,105]                        (* GO - CURRENT SELECTION *)
{
  GO_SELECT = CUR_SELECT
  SEND_COMMAND PANEL,'TEXT11-'
  SEND_COMMAND PANEL,'TEXT12-'
}

PUSH[PANEL,106]                        (* GO - SPECIFIC SELECTION *)
{
  GO_SELECT = SPEC_SELECT
  SEND_COMMAND PANEL,"'TEXT11-',ITOA(GO_SELECT_NUM)"
  SEND_COMMAND PANEL,"'TEXT12-',ITOA(GO_SAMPLE_NUM)"
}

PUSH[PANEL,107]                        (* GO - ALL CHANNELS *)
{
  GO_CHANNEL = ALL_CHANNELS
}

PUSH[PANEL,108]                        (* GO - SPECIFIC CHANNEL *)
{
  GO_CHANNEL = SPEC_CHANNEL
}

PUSH[PANEL,127]                        (* SELECTION NUMBER *)
  IF (GO_SELECT = CUR_SELECT)
  {
    ON[GO_SELECT_FL]
    SEND_COMMAND PANEL,'AKEYP-'
  }

PUSH[PANEL,128]                        (* SAMPLE NUMBER *)
  IF (GO_SELECT = CUR_SELECT)
  {
    ON[GO_SAMPLE_FL]
    SEND_COMMAND PANEL,'AKEYP-'
  }

PUSH[PANEL,113]                        (* CHANNEL 9 *)
PUSH[PANEL,114]                        (* CHANNEL 10 *)
PUSH[PANEL,115]                        (* CHANNEL 11 *)
PUSH[PANEL,116]                        (* CHANNEL 12 *)
PUSH[PANEL,117]                        (* CHANNEL 13 *)
PUSH[PANEL,118]                        (* CHANNEL 14 *)
PUSH[PANEL,119]                        (* CHANNEL 15 *)
PUSH[PANEL,120]                        (* CHANNEL 16 *)
  IF (GO_CHANNEL = SPEC_CHANNEL)
  {
    GO_CH_NUM = PUSH_CHANNEL - 105
  }


PUSH[PANEL,109]                        (* STOP - CURRENT SELECTION *)
{
  STOP_SELECT = CUR_SELECT
  SEND_COMMAND PANEL,'TEXT13-'
  SEND_COMMAND PANEL,'TEXT14-'
}

PUSH[PANEL,110]                        (* STOP - SPECIFIC SELECTION *)
{
  STOP_SELECT = SPEC_SELECT
  SEND_COMMAND PANEL,"'TEXT13-',ITOA(STOP_SELECT_NUM)"
  SEND_COMMAND PANEL,"'TEXT14-',ITOA(STOP_SAMPLE_NUM)"
}

PUSH[PANEL,111]                        (* STOP - ALL CHANNELS *)
{
  STOP_CHANNEL = ALL_CHANNELS
}

PUSH[PANEL,112]                        (* STOP - SPECIFIC CHANNEL *)
{
  STOP_CHANNEL = SPEC_CHANNEL
}

PUSH[PANEL,129]                        (* SELECTION NUMBER *)
  IF (STOP_SELECT = CUR_SELECT)
  {
    ON[STOP_SELECT_FL]
    SEND_COMMAND PANEL,'AKEYP-'
  }

PUSH[PANEL,130]                        (* SAMPLE NUMBER *)
  IF (STOP_SELECT = CUR_SELECT)
  {
    ON[STOP_SAMPLE_FL]
    SEND_COMMAND PANEL,'AKEYP-'
  }

PUSH[PANEL,131]                        (* CHANNEL 9 *)
PUSH[PANEL,132]                        (* CHANNEL 10 *)
PUSH[PANEL,133]                        (* CHANNEL 11 *)
PUSH[PANEL,134]                        (* CHANNEL 12 *)
PUSH[PANEL,135]                        (* CHANNEL 13 *)
PUSH[PANEL,136]                        (* CHANNEL 14 *)
PUSH[PANEL,137]                        (* CHANNEL 15 *)
PUSH[PANEL,138]                        (* CHANNEL 16 *)
  IF (STOP_CHANNEL = SPEC_CHANNEL)
  {
    STOP_CH_NUM = PUSH_CHANNEL - 123
  }



[PANEL,105] = (GO_SELECT = CUR_SELECT)
[PANEL,106] = (GO_SELECT = SPEC_SELECT)
[PANEL,107] = (GO_CHANNEL = ALL_CHANNELS)
[PANEL,108] = (GO_CHANNEL = SPEC_CHANNEL)
[PANEL,109] = (STOP_SELECT = CUR_SELECT)
[PANEL,110] = (STOP_SELECT = SPEC_SELECT)
[PANEL,111] = (STOP_CHANNEL = ALL_CHANNELS)
[PANEL,112] = (STOP_CHANNEL = SPEC_CHANNEL)

[PANEL,113] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 8))
[PANEL,114] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 9))
[PANEL,115] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 10))
[PANEL,116] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 11))
[PANEL,117] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 12))
[PANEL,118] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 13))
[PANEL,119] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 14))
[PANEL,120] = ((GO_CHANNEL = SPEC_CHANNEL) AND (GO_CH_NUM = 15))


[PANEL,131] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 8))
[PANEL,132] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 9))
[PANEL,133] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 10))
[PANEL,134] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 11))
[PANEL,135] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 12))
[PANEL,136] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 13))
[PANEL,137] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 14))
[PANEL,138] = ((STOP_CHANNEL = SPEC_CHANNEL) AND (STOP_CH_NUM = 15))




IF (LENGTH_STRING(MIXER_BUFFER))
{
  IF (FIND_STRING(MIXER_BUFFER,"$F7",1))
  {
    CANCEL_WAIT 'CLEAR BUFFER'
    CALL 'AUDIOBOX BUFFER'
  }
  ELSE
    WAIT 10 'CLEAR BUFFER'
      CLEAR_BUFFER MIXER_BUFFER
}


(*** TOUCH PANEL BUFFER ***)
IF (LENGTH_STRING(PANEL_BUFFER))
{
  SELECT
  {
    ACTIVE (GAIN_PRESET_FL):
    {
      OFF[GAIN_PRESET_FL]
      IF (FIND_STRING(PANEL_BUFFER,'KEYP-',1))
      {
        TEMP_STRING = REMOVE_STRING(PANEL_BUFFER,'KEYP-',1)
        IF (LENGTH_STRING(PANEL_BUFFER))
          TEMP_VAR = ATOI(PANEL_BUFFER)
        ELSE
          TEMP_VAR = 9999
        IF (TEMP_VAR <= 622)
        {
          GAIN_PRESET[GAIN_CHANNEL+1] = TEMP_VAR
          SEND_COMMAND PANEL,"'TEXT1-',ITOA(GAIN_PRESET[GAIN_CHANNEL+1])"
        }
      }
    }
    ACTIVE (GO_SELECT_FL):
    {
      OFF[GO_SELECT_FL]
      IF (FIND_STRING(PANEL_BUFFER,'KEYP-',1))
      {
        TEMP_STRING = REMOVE_STRING(PANEL_BUFFER,'KEYP-',1)
        GO_SELECT_NUM = ATOI(PANEL_BUFFER)
        SEND_COMMAND PANEL,"'TEXT11-',ITOA(GO_SELECT_NUM)"
      }
    }
    ACTIVE (GO_SAMPLE_FL):
    {
      OFF[GO_SAMPLE_FL]
      IF (FIND_STRING(PANEL_BUFFER,'KEYP-',1))
      {
        TEMP_STRING = REMOVE_STRING(PANEL_BUFFER,'KEYP-',1)
        GO_SAMPLE_NUM = ATOI(PANEL_BUFFER)
        SEND_COMMAND PANEL,"'TEXT12-',ITOA(GO_SAMPLE_NUM)"
      }
    }
    ACTIVE (STOP_SELECT_FL):
    {
      OFF[STOP_SELECT_FL]
      IF (FIND_STRING(PANEL_BUFFER,'KEYP-',1))
      {
        TEMP_STRING = REMOVE_STRING(PANEL_BUFFER,'KEYP-',1)
        STOP_SELECT_NUM = ATOI(PANEL_BUFFER)
        SEND_COMMAND PANEL,"'TEXT13-',ITOA(STOP_SELECT_NUM)"
      }
    }
    ACTIVE (STOP_SAMPLE_FL):
    {
      OFF[STOP_SAMPLE_FL]
      IF (FIND_STRING(PANEL_BUFFER,'KEYP-',1))
      {
        TEMP_STRING = REMOVE_STRING(PANEL_BUFFER,'KEYP-',1)
        STOP_SAMPLE_NUM = ATOI(PANEL_BUFFER)
        SEND_COMMAND PANEL,"'TEXT14-',ITOA(STOP_SAMPLE_NUM)"
      }
    }
  }

  CLEAR_BUFFER PANEL_BUFFER
}



(*** Other Functions ***)
PUSH[PANEL,201]                        (* Set Input 1 to 100% *)
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,0,0,0,NEW_LVL,0,0,0,0,0")

PUSH[PANEL,202]                        (* Set Output 1 to 100% *)
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,0,3,0,NEW_LVL,0,0,0,0,0")

PUSH[PANEL,203]                        (* Set Crosspoint 1-1 to 100% *)
  CALL 'AUDIOBOX MSC' (MIXER,"$10,$06,1,0,0,NEW_LVL,0,0,0,0,0")



(***********************************************************)
(*                     END OF PROGRAM                      *)
(*        DO NOT PUT ANY CODE BELOW THIS COMMENT           *)
(***********************************************************)

