From 56a1172439f7138deb47d82fa7c4737822f9c0e3 Mon Sep 17 00:00:00 2001
From: c vw <dl1ycf@darc.de>
Date: Tue, 20 Jul 2021 18:18:40 +0200
Subject: [PATCH] Removed "onoff" flag. This is now hard-coded for special
 events.

---
 midi.h      |  18 +---
 midi2.c     | 259 ++++++++++++++++++++++++++--------------------------
 midi_menu.c |  19 +---
 3 files changed, 138 insertions(+), 158 deletions(-)

diff --git a/midi.h b/midi.h
index 2a29013..3e09d48 100644
--- a/midi.h
+++ b/midi.h
@@ -211,7 +211,6 @@ typedef struct _action_table {
   enum MIDIaction action;
   const char *str;
   enum MIDItype type;
-  int onoff;
 } ACTION_TABLE;
 
 extern ACTION_TABLE ActionTable[];
@@ -230,25 +229,14 @@ extern ACTION_TABLE ActionTable[];
 // a delay: once a wheel event is reported upstream, any such events are suppressed during
 // the delay.
 // 
-// Note that with a MIDI KEY, you can choose that an action is
-// generated only for a NOTE_ON event or both for NOTE_ON and
-// NOTE_OFF. In the first case, if the key is associated to MOX,
-// then MOX is toggled each time the key is pressed. This behaves
-// very much like point-and-clicking the MOX buttion in the GUI.
+// Note that with a MIDI KEY, normally only "NoteOn" messages
+// but no "NoteOff" messages are passed to the next layer.
+// The only exceptions are CWLEFT,CWRIGHT,CWKEYER, and PTTKEYER.
 //
-// If an action is generated both on NOTE_ON and NOTE_OFF,
-// then MOX is engaged when pressing the key and disengaged
-// when releasing it. For MOX this makes little send but you
-// might want to configure the TUNE button this way.
-// The latter behaviour is triggered when the line assigning the key
-// or "NOTE OFF". The table speficying the behaviour of layer-2 thus
-// contains the key word "ONOFF". This is stored in the field "onoff"
-// in struct desc.
 
 struct desc {
    int               channel;     // -1 for ANY channel
    enum MIDIevent    event;	  // type of event (NOTE on/off, Controller change, Pitch value)
-   int               onoff;       // 1: generate upstream event both for Note-on and Note-off
    enum MIDItype     type;        // Key, Knob, or Wheel
    int               vfl1,vfl2;   // Wheel only: range of controller values for "very fast left"
    int               fl1,fl2;     // Wheel only: range of controller values for "fast left"
diff --git a/midi2.c b/midi2.c
index ebc6f63..1dce648 100644
--- a/midi2.c
+++ b/midi2.c
@@ -56,9 +56,21 @@ void NewMidiEvent(enum MIDIevent event, int channel, int note, int val) {
 	    // Found matching entry
 	    switch (desc->event) {
 		case MIDI_EVENT_NOTE:
-		    if ((val == 1 || (desc->onoff == 1)) && desc->type == MIDI_TYPE_KEY) {
-			DoTheMidi(desc->action, desc->type, val);
-		    }
+                    if (desc->type == MIDI_TYPE_KEY) {
+                      switch (desc->action) {
+                        case MIDI_ACTION_CWLEFT:
+                        case MIDI_ACTION_CWRIGHT:
+                        case MIDI_ACTION_CWKEYER:
+                        case MIDI_ACTION_PTTKEYER:
+                          // deliver message for note-on and note-off
+			  DoTheMidi(desc->action, desc->type, val);
+                          break;
+                        default:
+                          // deliver only note-on messages
+			  if (val == 1) DoTheMidi(desc->action, desc->type, val);
+                          break;
+                      }
+                    }
 		    break;
 		case MIDI_EVENT_CTRL:
 		    if (desc->type == MIDI_TYPE_KNOB) {
@@ -124,117 +136,117 @@ gchar *midi_events[] = {"NONE","NOTE","CTRL","PITCH"};
  */
 
 ACTION_TABLE ActionTable[] = {
-        { MIDI_ACTION_NONE,     	"NONE",         	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,   0},
-        { MIDI_ACTION_VFO_A2B,         	"A2B",          	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_AF_GAIN,         	"AFGAIN",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_AGCATTACK,       	"AGCATTACK",    	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_AGC,             	"AGCVAL",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-	{ MIDI_ACTION_ANF,             	"ANF",          	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_ATT,             	"ATT",          	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,   0},
-        { MIDI_ACTION_VFO_B2A,        	"B2A",          	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_10,         	"BAND10",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_12,         	"BAND12",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_1240,       	"BAND1240",     	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_144,        	"BAND144",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_15,         	"BAND15",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_160,        	"BAND160",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_17,         	"BAND17",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_20,         	"BAND20",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_220,        	"BAND220",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_2300,       	"BAND2300",     	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_30,         	"BAND30",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_3400,       	"BAND3400",     	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_40,         	"BAND40",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_430,        	"BAND430",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_6,          	"BAND6",        	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_60,         	"BAND60",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_70,         	"BAND70",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_80,         	"BAND80",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_902,        	"BAND902",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_AIR,        	"BANDAIR",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_DOWN,	"BANDDOWN",     	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,	0},
-        { MIDI_ACTION_BAND_GEN,      	"BANDGEN",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_BAND_UP,         	"BANDUP",       	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,	0},
-        { MIDI_ACTION_BAND_WWV,        	"BANDWWV",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_COMPRESS,        	"COMPRESS",     	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_CTUN,            	"CTUN",         	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_VFO,             	"CURRVFO",      	MIDI_TYPE_WHEEL,				0},
-        { MIDI_ACTION_CWKEYER,         	"CW(Keyer)",        	MIDI_TYPE_KEY,					1},
-        { MIDI_ACTION_CWLEFT,         	"CWLEFT",          	MIDI_TYPE_KEY,					1},
-        { MIDI_ACTION_CWRIGHT,         	"CWRIGHT",          	MIDI_TYPE_KEY,					1},
-        { MIDI_ACTION_CWSPEED,         	"CWSPEED",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_COARSEGAIN,  	"DIVCOARSEGAIN",        MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_COARSEPHASE,  "DIVCOARSEPHASE",       MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_FINEGAIN,     "DIVFINEGAIN",  	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_FINEPHASE,    "DIVFINEPHASE", 	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_GAIN,         "DIVGAIN",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_PHASE,        "DIVPHASE",     	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_DIV_TOGGLE,       "DIVTOGGLE",    	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_DUP,             	"DUP",          	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_FILTER_DOWN,      "FILTERDOWN",   	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,	0},
-        { MIDI_ACTION_FILTER_UP,        "FILTERUP",     	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,	0},
-        { MIDI_ACTION_LOCK,            	"LOCK",         	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MEM_RECALL_M0,    "RECALLM0",  		MIDI_TYPE_KEY,          			0},
-        { MIDI_ACTION_MEM_RECALL_M1,    "RECALLM1",  		MIDI_TYPE_KEY,          			0},
-        { MIDI_ACTION_MEM_RECALL_M2,    "RECALLM2",  		MIDI_TYPE_KEY,          			0},
-        { MIDI_ACTION_MEM_RECALL_M3,    "RECALLM3",  		MIDI_TYPE_KEY,          			0},
-        { MIDI_ACTION_MEM_RECALL_M4,    "RECALLM4",  		MIDI_TYPE_KEY,          			0},
-        { MIDI_ACTION_MENU_FILTER,      "MENU_FILTER",  	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MENU_MODE,        "MENU_MODE",    	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MIC_VOLUME,       "MICGAIN",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_MODE_DOWN,        "MODEDOWN",     	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,	0},
-        { MIDI_ACTION_MODE_UP,          "MODEUP",       	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,	0},
-        { MIDI_ACTION_MOX,             	"MOX",  		MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MUTE,            	"MUTE", 		MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NB,             	"NOISEBLANKER", 	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NR,              	"NOISEREDUCTION",       MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_0,        	"NUMPAD0",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_1,        	"NUMPAD1",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_2,        	"NUMPAD2",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_3,        	"NUMPAD3",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_4,        	"NUMPAD4",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_5,        	"NUMPAD5",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_6,        	"NUMPAD6",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_7,        	"NUMPAD7",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_8,        	"NUMPAD8",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_9,        	"NUMPAD9",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_CL,       	"NUMPADCL",     	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_NUMPAD_ENTER,    	"NUMPADENTER",  	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_PAN,             	"PAN",  		MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_PAN_HIGH,        	"PANHIGH",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_PAN_LOW,         	"PANLOW",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_PRE,             	"PREAMP",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_PTTKEYER,        	"PTT(Keyer)",     	MIDI_TYPE_KEY,					1},
-        { MIDI_ACTION_PS,               "PURESIGNAL",   	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_RF_GAIN,         	"RFGAIN",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_TX_DRIVE,         "RFPOWER",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_RIT_CLEAR,       	"RITCLEAR",     	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_RIT_STEP,         "RITSTEP",      	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_RIT_TOGGLE,       "RITTOGGLE",    	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_RIT_VAL,          "RITVAL",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_SAT,             	"SAT",  		MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_SNB,              "SNB",  		MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_SPLIT,           	"SPLIT",        	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MEM_STORE_M0,     "STOREM0",             	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MEM_STORE_M1,     "STOREM1",             	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MEM_STORE_M2,     "STOREM2",             	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MEM_STORE_M3,     "STOREM3",              MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_MEM_STORE_M4,     "STOREM4",              MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_SWAP_RX,          "SWAPRX",       	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_SWAP_VFO,         "SWAPVFO",      	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_TUNE,            	"TUNE", 		MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_VFOA,             "VFOA", 		MIDI_TYPE_WHEEL,				0},
-        { MIDI_ACTION_VFOB,             "VFOB", 		MIDI_TYPE_WHEEL,				0},
-        { MIDI_ACTION_VFO_STEP_UP,      "VFOSTEPUP",    	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_VFO_STEP_DOWN,    "VFOSTEPDOWN",  	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_VOX,              "VOX",  		MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_VOXLEVEL,         "VOXLEVEL",     	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_XIT_CLEAR,       	"XITCLEAR",     	MIDI_TYPE_KEY,					0},
-        { MIDI_ACTION_XIT_VAL,          "XITVAL",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_ZOOM,            	"ZOOM", 		MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_ZOOM_UP,          "ZOOMUP",       	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_ZOOM_DOWN,        "ZOOMDOWN",     	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL,			0},
-        { MIDI_ACTION_LAST,		"NONE", 		MIDI_TYPE_NONE,					0},
+        { MIDI_ACTION_NONE,     	"NONE",         	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL     },
+        { MIDI_ACTION_VFO_A2B,         	"A2B",          	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_AF_GAIN,         	"AFGAIN",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_AGCATTACK,       	"AGCATTACK",    	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_AGC,             	"AGCVAL",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+	{ MIDI_ACTION_ANF,             	"ANF",          	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_ATT,             	"ATT",          	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL     },
+        { MIDI_ACTION_VFO_B2A,        	"B2A",          	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_10,         	"BAND10",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_12,         	"BAND12",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_1240,       	"BAND1240",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_144,        	"BAND144",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_15,         	"BAND15",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_160,        	"BAND160",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_17,         	"BAND17",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_20,         	"BAND20",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_220,        	"BAND220",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_2300,       	"BAND2300",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_30,         	"BAND30",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_3400,       	"BAND3400",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_40,         	"BAND40",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_430,        	"BAND430",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_6,          	"BAND6",        	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_60,         	"BAND60",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_70,         	"BAND70",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_80,         	"BAND80",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_902,        	"BAND902",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_AIR,        	"BANDAIR",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_DOWN,	"BANDDOWN",     	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 	 },
+        { MIDI_ACTION_BAND_GEN,      	"BANDGEN",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_BAND_UP,         	"BANDUP",       	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 	 },
+        { MIDI_ACTION_BAND_WWV,        	"BANDWWV",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_COMPRESS,        	"COMPRESS",     	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_CTUN,            	"CTUN",         	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_VFO,             	"CURRVFO",      	MIDI_TYPE_WHEEL 				 },
+        { MIDI_ACTION_CWKEYER,         	"CW(Keyer)",        	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_CWLEFT,         	"CWLEFT",          	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_CWRIGHT,         	"CWRIGHT",          	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_CWSPEED,         	"CWSPEED",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_COARSEGAIN,  	"DIVCOARSEGAIN",        MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_COARSEPHASE,  "DIVCOARSEPHASE",       MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_FINEGAIN,     "DIVFINEGAIN",  	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_FINEPHASE,    "DIVFINEPHASE", 	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_GAIN,         "DIVGAIN",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_PHASE,        "DIVPHASE",     	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_DIV_TOGGLE,       "DIVTOGGLE",    	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_DUP,             	"DUP",          	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_FILTER_DOWN,      "FILTERDOWN",   	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 	 },
+        { MIDI_ACTION_FILTER_UP,        "FILTERUP",     	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 	 },
+        { MIDI_ACTION_LOCK,            	"LOCK",         	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MEM_RECALL_M0,    "RECALLM0",  		MIDI_TYPE_KEY           			 },
+        { MIDI_ACTION_MEM_RECALL_M1,    "RECALLM1",  		MIDI_TYPE_KEY           			 },
+        { MIDI_ACTION_MEM_RECALL_M2,    "RECALLM2",  		MIDI_TYPE_KEY           			 },
+        { MIDI_ACTION_MEM_RECALL_M3,    "RECALLM3",  		MIDI_TYPE_KEY           			 },
+        { MIDI_ACTION_MEM_RECALL_M4,    "RECALLM4",  		MIDI_TYPE_KEY           			 },
+        { MIDI_ACTION_MENU_FILTER,      "MENU_FILTER",  	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MENU_MODE,        "MENU_MODE",    	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MIC_VOLUME,       "MICGAIN",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 		         },
+        { MIDI_ACTION_MODE_DOWN,        "MODEDOWN",     	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL     },
+        { MIDI_ACTION_MODE_UP,          "MODEUP",       	MIDI_TYPE_KEY|MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 	 },
+        { MIDI_ACTION_MOX,             	"MOX",  		MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MUTE,            	"MUTE", 		MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NB,             	"NOISEBLANKER", 	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NR,              	"NOISEREDUCTION",       MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_0,        	"NUMPAD0",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_1,        	"NUMPAD1",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_2,        	"NUMPAD2",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_3,        	"NUMPAD3",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_4,        	"NUMPAD4",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_5,        	"NUMPAD5",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_6,        	"NUMPAD6",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_7,        	"NUMPAD7",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_8,        	"NUMPAD8",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_9,        	"NUMPAD9",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_CL,       	"NUMPADCL",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_NUMPAD_ENTER,    	"NUMPADENTER",  	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_PAN,             	"PAN",  		MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_PAN_HIGH,        	"PANHIGH",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_PAN_LOW,         	"PANLOW",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_PRE,             	"PREAMP",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_PTTKEYER,        	"PTT(Keyer)",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_PS,               "PURESIGNAL",   	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_RF_GAIN,         	"RFGAIN",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_TX_DRIVE,         "RFPOWER",      	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_RIT_CLEAR,       	"RITCLEAR",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_RIT_STEP,         "RITSTEP",      	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_RIT_TOGGLE,       "RITTOGGLE",    	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_RIT_VAL,          "RITVAL",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_SAT,             	"SAT",  		MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_SNB,              "SNB",  		MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_SPLIT,           	"SPLIT",        	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MEM_STORE_M0,     "STOREM0",             	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MEM_STORE_M1,     "STOREM1",             	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MEM_STORE_M2,     "STOREM2",             	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MEM_STORE_M3,     "STOREM3",              MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_MEM_STORE_M4,     "STOREM4",              MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_SWAP_RX,          "SWAPRX",       	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_SWAP_VFO,         "SWAPVFO",      	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_TUNE,            	"TUNE", 		MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_VFOA,             "VFOA", 		MIDI_TYPE_WHEEL 				 },
+        { MIDI_ACTION_VFOB,             "VFOB", 		MIDI_TYPE_WHEEL 				 },
+        { MIDI_ACTION_VFO_STEP_UP,      "VFOSTEPUP",    	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_VFO_STEP_DOWN,    "VFOSTEPDOWN",  	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_VOX,              "VOX",  		MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_VOXLEVEL,         "VOXLEVEL",     	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_XIT_CLEAR,       	"XITCLEAR",     	MIDI_TYPE_KEY 					 },
+        { MIDI_ACTION_XIT_VAL,          "XITVAL",       	MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_ZOOM,            	"ZOOM", 		MIDI_TYPE_KNOB|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_ZOOM_UP,          "ZOOMUP",       	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_ZOOM_DOWN,        "ZOOMDOWN",     	MIDI_TYPE_KEY|MIDI_TYPE_WHEEL 			 },
+        { MIDI_ACTION_LAST,		"NONE", 		MIDI_TYPE_NONE       				 },
 };
 
 
@@ -242,19 +254,14 @@ ACTION_TABLE ActionTable[] = {
  * Translation from keyword in midi.props file to MIDIaction
  */
 
-static void keyword2action(char *s, enum MIDIaction *action, int *onoff) {
+static int keyword2action(char *s) {
     int i=0;
 
     for (i=0; i< (sizeof(ActionTable) / sizeof(ActionTable[0])); i++) {
-	if (!strcmp(s, ActionTable[i].str)) {
-          *action = ActionTable[i].action;
-          *onoff  = ActionTable[i].onoff;
-          return;
-        }
+	if (!strcmp(s, ActionTable[i].str)) return ActionTable[i].action;
     }
     g_print("%s: action keyword %s NOT FOUND.\n", __FUNCTION__, s);
-    *action = MIDI_ACTION_NONE;
-    *onoff  = 0;
+    return MIDI_ACTION_NONE;
 }
 
 int MIDIstop() {
@@ -326,7 +333,7 @@ int MIDIstartup(char *filename) {
     enum MIDIaction action;
     int chan;
     int t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12;
-    int onoff, delay;
+    int delay;
     struct desc *desc;
     enum MIDItype type;
     enum MIDIevent event;
@@ -373,7 +380,6 @@ int MIDIstartup(char *filename) {
       t5= 0; t6= 63;
       t7=65; t8=127;
       t9 = t10 = t11 = t12 = -1;
-      onoff=0;                  // this will be set automatically
       event=MIDI_EVENT_NONE;
       type=MIDI_TYPE_NONE;
       key=0;
@@ -440,8 +446,8 @@ int MIDIstartup(char *filename) {
         cq=cp+7;
         while (*cq != 0 && *cq != '\n' && *cq != ' ' && *cq != '\t') cq++;
 	*cq=0;
-        keyword2action(cp+7, &action, &onoff);
-//g_print("MIDI:ACTION:%s (%d), onoff=%d\n",cp+7, action, onoff);
+        action = keyword2action(cp+7);
+        //g_print("MIDI:ACTION:%s (%d)\n",cp+7, action);
       }
       //
       // All data for a descriptor has been read. Construct it!
@@ -451,7 +457,6 @@ int MIDIstartup(char *filename) {
       desc->action = action;
       desc->type = type;
       desc->event = event;
-      desc->onoff = onoff;
       desc->delay = delay;
       desc->vfl1  = t1;
       desc->vfl2  = t2;
diff --git a/midi_menu.c b/midi_menu.c
index 3c5ff64..71d5794 100644
--- a/midi_menu.c
+++ b/midi_menu.c
@@ -564,7 +564,6 @@ static void add_cb(GtkButton *widget,gpointer user_data) {
   gint i;
   gint type;
   gint action;
-  gint onoff;
 
   if(str_type==NULL) {
     return;
@@ -585,12 +584,10 @@ static void add_cb(GtkButton *widget,gpointer user_data) {
   }
 
   action=MIDI_ACTION_NONE;
-  onoff=0;
   i=0;
   while(ActionTable[i].action!=MIDI_ACTION_LAST) {
     if(strcmp(ActionTable[i].str,str_action)==0) {
       action=ActionTable[i].action;
-      onoff=ActionTable[i].onoff;
       break;
     }
     i++;
@@ -604,7 +601,6 @@ static void add_cb(GtkButton *widget,gpointer user_data) {
   desc->action = action; // MIDIaction
   desc->type = type; // MIDItype
   desc->event = thisEvent; // MIDevent
-  desc->onoff = onoff;
   desc->delay = thisDelay;
   desc->vfl1  = thisVfl1;
   desc->vfl2  = thisVfl2;
@@ -640,7 +636,6 @@ static void update_cb(GtkButton *widget,gpointer user_data) {
   char str_channel[16];
   char str_note[16];
   int i;
-  int onoff;
 
   if (current_cmd == NULL) {
     g_print("%s: current_cmd is NULL!\n", __FUNCTION__);
@@ -666,12 +661,10 @@ static void update_cb(GtkButton *widget,gpointer user_data) {
   //g_print("%s: type=%s action=%s\n",__FUNCTION__,str_type,str_action);
 
   thisAction=MIDI_ACTION_NONE;
-  onoff=0;
   i=0;
   while(ActionTable[i].action!=MIDI_ACTION_LAST) {
     if(strcmp(ActionTable[i].str,str_action)==0) {
       thisAction=ActionTable[i].action;
-      onoff=ActionTable[i].onoff;
       break;
     }
     i++;
@@ -680,7 +673,6 @@ static void update_cb(GtkButton *widget,gpointer user_data) {
   current_cmd->channel=thisChannel;
   current_cmd->type   =thisType;
   current_cmd->action =thisAction;
-  current_cmd->onoff =onoff;
   current_cmd->delay =thisDelay;
 
   current_cmd->vfl1  =thisVfl1;
@@ -1606,7 +1598,6 @@ void midi_restore_state() {
   gint indices;
   gint channel;
   gint event;
-  gint onoff;
   gint type;
   gint action;
   gint delay;
@@ -1676,7 +1667,7 @@ void midi_restore_state() {
 	action=MIDI_ACTION_NONE;
         if(value) {
 	  int j=0;
-	  while(ActionTable[j].type!=MIDI_ACTION_LAST) {
+	  while(ActionTable[j].action!=MIDI_ACTION_LAST) {
             if(strcmp(value,ActionTable[j].str)==0) {
               action=ActionTable[j].action;
 	      break;
@@ -1751,16 +1742,12 @@ void midi_restore_state() {
         vfr2=-1;
         if (value) vfr2=atoi(value);
 
-	// ATTENTION: this assumes ActionTable is sorted by Action enums
-        onoff=ActionTable[action].onoff;
-
 	struct desc *desc = (struct desc *) malloc(sizeof(struct desc));
 
         desc->next     = NULL;
         desc->action   = action; // MIDIaction
         desc->type     = type;   // MIDItype
         desc->event    = event;  // MIDevent
-        desc->onoff    = onoff;
         desc->delay    = delay;
         desc->vfl1     = vfl1;
         desc->vfl2     = vfl2;
@@ -1776,8 +1763,8 @@ void midi_restore_state() {
         desc->vfr2     = vfr2;
         desc->channel  = channel;
 
-//g_print("DESC INIT Note=%3d Action=%3d Type=%3d Event=%3d OnOff=%3d Chan=%3d Delay=%3d THR=%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
-//        i, action, type, event, onoff, channel, delay,
+//g_print("DESC INIT Note=%3d Action=%3d Type=%3d Event=%3d Chan=%3d Delay=%3d THR=%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
+//        i, action, type, event, channel, delay,
 //        vfl1, vfl2, fl1, fl2, lft1, lft2, rgt1, rgt2, fr1, fr2, vfr1, vfr2);
         MidiAddCommand(i, desc);
       }
-- 
2.45.2