Hm. Interesting.
This useless bit is some sort of sick derivative.
Ignore it.
Code:
/*
multiple evals after match and assign in set_keyname? 
*/

/*
parallel arrays
*/
var in_atos1[512];
var in_aton1[512];
var in_aact1[32];



TEXT in_t1 {
	strings = 50;
}

var in_n1 = 0;
var in_n2 = 0;
var in_nLines1 = 0;
STRING in_s1;

function inf_t1(_n1, _s1) {
	if (in_nLines1 >= in_t1.strings) {
		error("err: in_t1.strings exceeded!");
		return(0);
	}
	in_atos1[_n1] = in_nLines1;
	in_aton1[in_nLines1] = _n1;
	str_cpy(in_t1.string[in_nLines1], _s1);
	
	in_nLines1+=1;
	return(1);
}
function inf_new1() {
	in_n1 = 0;
	inf_t1(12, "minus");
	inf_t1(14, "backspace");
	inf_t1(39, "semicolon");
	inf_t1(40, "apostrophe");
	inf_t1(42, "left shift");
	inf_t1(43, "backslash");
	inf_t1(51, "comma");
	inf_t1(52, "period");
	inf_t1(54, "right shift");
	inf_t1(70, "scroll lock");
	inf_t1(72, "up arrow");
	inf_t1(73, "page up");
	inf_t1(77, "right arrow");
	inf_t1(80, "down arrow");
	inf_t1(81, "page down");
	inf_t1(82, "insert");
	inf_t1(83, "delete");
	inf_t1(256, "joy1 button1");
	inf_t1(280, "mouse left");
}
// inf_s1(82);
// in_s1 is "insert"
function inf_s1(_nCode) {
	in_n2 = in_atos1[_nCode];
	str_cpy(in_s1, in_t1.string[in_n2]);
}

// inf_n1("insert") is 82
function inf_n1(_sName) {
	in_n1 = 0;
	if (_sName == NULL) { return(-1); }
	while(in_n1 < in_nLines1) {
		if (str_cmpni(in_t1.string[in_n1], _sName)) { 
			return(in_aton1[in_n1]);
		}
		in_n1 += 1;
	}
	return(-1);
}

// tested to here

var act_run = 0;
var in_nAct1 = 0;

function inf_set1(&_nAct, _s1) {
	_nAct[0] = in_nAct1;
	in_aact1[_nAct] = inf_n1(_s1);
	in_nAct1 += 1;
}
/*
inf_set1(act_run, "left shift");
*/
function inf_h(_nAct) {
	return(key_pressed(in_aact1[_nAct]));
}
/*
if (inf_h(act_run)) {
*/


Quote:
I found that I had headed down a specific route which turned out to be a blind alley.

Yes, that's probably a bad case of wall redistribution.
Of course, your route planner could have faults.