コード例 #1
0
ファイル: Instance.cpp プロジェクト: dakyri/qua
Instance::Instance(Schedulable &s, const std::string &nm, const Time &t, const Time &d, Channel * const c)
	: Notified(s.uberQua)
	, schedulable(s)
	, startTime(t)
	, duration(d)
{
	thruEnabled = false;
	channel = c;
	status = STATUS_SLEEPING;
	wokenAt = Time::zero;
	wakeDuration = Time::zero;

	mainStack = nullptr;
	rxStack = nullptr;
	wakeStack = nullptr;
	sleepStack = nullptr;
	startStack = nullptr;
	stopStack = nullptr;
	cueStack = nullptr;
	

	uberQua = s.uberQua;
	std::string nmbuf = glob.makeUniqueName(s.sym, nm != "" ? nm : s.sym->name, 0);
	sym = DefineSymbol(nmbuf, TypedValue::S_INSTANCE, 0,
		this, s.sym,
		TypedValue::REF_VALUE, false, false, StabEnt::DISPLAY_NOT);
	//		interfaceBridge.SetSymbol(sym);
	cerr << "instance " << sym->uniqueName() << " of " << s.sym->name<< " defined at "<< startTime.StringValue() << " on " << channel->chanId << endl;

// keep a list of  the standard controllers
//	controlVariables = new QuaControllerBridge(s->uberQua, this, nullptr, s->standardControlInfo);
}
コード例 #2
0
ファイル: Schedulable.cpp プロジェクト: dakyri/qua
Schedulable::Schedulable(StabEnt *s, Qua *q, class Metric *m):
	Notifiable(s),
	wake("Wake", s),
	sleep("Sleep", s),
	rx("Rx", s),
	cue("Cue", s),
	start("Start", s),
	stop("Stop", s),
	record("Record", s),
	init("Init", s)
{
	cerr  << "building schedulable " << endl;

	uberQua = q;
	metric = m;

//	insertableBridge.SetSymbol(s);
	mainBlock = nullptr;
	
	status = STATUS_SLEEPING;
	
	Instance	*i=0;

	chanSym = DefineSymbol("chan", TypedValue::S_CHANNEL, 0,
			(char*)&i->channel, sym, TypedValue::REF_INSTANCE, false, false, StabEnt::DISPLAY_CTL);
	starttSym = DefineSymbol("starttime", TypedValue::S_TIME, 0,
			(char*)&i->startTime, sym, TypedValue::REF_INSTANCE, false, false, StabEnt::DISPLAY_CTL);
	durSym = DefineSymbol("duration", TypedValue::S_TIME, 0,
			(char*)&i->duration, sym, TypedValue::REF_INSTANCE, false, false, StabEnt::DISPLAY_CTL);


    DefineSymbol("wakedurclock", TypedValue::S_INT, 0,
    		((char *)&i->wakeDuration.ticks), sym,
    		TypedValue::REF_INSTANCE, false, false, StabEnt::DISPLAY_NOT);
    DefineSymbol("wakeatclock", TypedValue::S_INT, 0,
    		((char*)&i->wokenAt.ticks), sym,
    		TypedValue::REF_INSTANCE, false, false, StabEnt::DISPLAY_NOT);

}
コード例 #3
0
// Process the source files directives
vector<string> PreProcessor::Process(fstream &source)
{
	symbolTable->~SymbolTable();
	symbolTable = new SymbolTable();
	file = &source;
	output->clear();

	string line;

	if (file->is_open())
	{
		while (getline(*file, line))
		{
			// Tokenize line on whitespace
			vector<string> lineTokens;
			char delim = ' ';
			split(line, delim, lineTokens);

			// Ignore Comments
			if (ProcessInlineComments(lineTokens, line));
			// Ignore =end and =else that aren't scanned to
			else if (line.compare(directives[1]) == 0 || line.compare(directives[6]) == 0);
			// Escape from empty lines
			else if (lineTokens.empty());
			// Handle =begin comment blocks
			else if (ProcessCommentBlocks(lineTokens));
			// Handle =ifdef
			else if (ProcessIfDefined(lineTokens));
			// Handle =ifndef
			else if (ProcessIfNotDefined(lineTokens));
			// Handle =def
			else if (DefineSymbol(lineTokens));
			// Send line to output with symbol replacement
			else { RecordOutput(lineTokens, line); }
		}
	}

	return *output;
}
コード例 #4
0
vector<string> PreProcessor::Process(vector<string> &source)
{
	symbolTable->~SymbolTable();
	symbolTable = new SymbolTable();
	output->clear();

	string line;


	for (vector<string>::iterator iter = source.begin(); iter < source.end(); ++iter)
	{
		// Tokenize line on whitespace
		vector<string> lineTokens;

		line = (*iter);
		char delim = ' ';
		split(line, delim, lineTokens);

		// Ignore Comments
		if (ProcessInlineComments(lineTokens, line));
		// Ignore =end and =else that aren't scanned to
		else if (line.compare(directives[1]) == 0 || line.compare(directives[6]) == 0);
		// Escape from empty lines
		else if (lineTokens.empty());
		// Handle =begin comment blocks
		else if (ProcessCommentBlocks(lineTokens));
		// Handle =ifdef
		else if (ProcessIfDefined(lineTokens));
		// Handle =ifndef
		else if (ProcessIfNotDefined(lineTokens));
		// Handle =def
		else if (DefineSymbol(lineTokens));
		// Send line to output with symbol replacement
		else { RecordOutput(lineTokens, line); }
	}

	return *output;
}
コード例 #5
0
ファイル: asmdrctv.c プロジェクト: dex4er/deb-z88dk
long 
Parsedefvarsize (long offset)
{
  long varoffset = 0;

  switch (sym)
    {
    case name:
      if (strcmp (ident, "DS") != 0)
	{
	  DefineSymbol (ident, offset, 0);
	  GetSym ();
	}
      if (sym == name)
	  varoffset = Parsevarsize ();
      break;

    default:
      ReportError (CURRENTFILE->fname, CURRENTFILE->line, 1);
    }

  return varoffset;
}
コード例 #6
0
ファイル: asmdrctv.c プロジェクト: dex4er/deb-z88dk
void 
DEFGROUP (void)
{
  struct expr *postfixexpr;
  long constant, enumconst = 0;

  writeline = OFF;		/* DEFGROUP definitions are not output'ed to listing file */

  while (!feof (z80asmfile) && GetSym () != lcurly)
    {
      Skipline (z80asmfile);
      EOL = OFF;
      ++CURRENTFILE->line;
    }

  if (sym == lcurly)
    {
      while (!feof (z80asmfile) && sym != rcurly)
	{
	  if (EOL == ON)
	    {
	      ++CURRENTFILE->line;
	      EOL = OFF;
	    }
	  else
	    {
	      do
		{
		  GetSym ();
		  switch (sym)
		    {
		    case rcurly:
		    case semicolon:
		    case newline:
		      break;

		    case name:
		      strcpy (stringconst, ident);	/* remember name */
		      if (GetSym () == assign)
			{
			  GetSym ();

			  if ((postfixexpr = ParseNumExpr ()) != NULL)
			    {
			      if (postfixexpr->rangetype & NOTEVALUABLE)
				ReportError (CURRENTFILE->fname, CURRENTFILE->line, 2);
			      else
				{
				  constant = EvalPfixExpr (postfixexpr);
				  enumconst = constant;
				  DefineSymbol (stringconst, enumconst++, 0);
				}
			      RemovePfixlist (postfixexpr);
			    }
			  GetSym ();	/* prepare for next identifier */
			}
		      else
			DefineSymbol (stringconst, enumconst++, 0);
		      break;

		    default:
		      ReportError (CURRENTFILE->fname, CURRENTFILE->line, 1);
		      break;
		    }
		}
	      while (sym == comma);	/* get enum definitions separated by comma in current line */

	      Skipline (z80asmfile);	/* ignore rest of line */
	    }
	}
    }
}
コード例 #7
0
static orl_return ProcSymbol( orl_symbol_handle symhdl )
/******************************************************/
{
    orl_symbol_type     type;
    char                *name;
    orl_symbol_value    value;
    orl_sec_handle      sechdl;
    symbol              *sym;
    size_t              namelen;
    sym_flags           symop;
    extnode             *newnode;
    segnode             *snode;
    bool                isweak;
    orl_symbol_handle   assocsymhdl;
    symbol              *assocsym;
    orl_symbol_binding  binding;

    sechdl = ORLSymbolGetSecHandle( symhdl );
    snode = FindSegNode( sechdl );
    type = ORLSymbolGetType( symhdl );
    name = ORLSymbolGetName( symhdl );
    if( type & ORL_SYM_TYPE_FILE ) {
        if( (CurrMod->modinfo & MOD_GOT_NAME) == 0 ) {
            CurrMod->modinfo |= MOD_GOT_NAME;
            _LnkFree( CurrMod->name );
            CurrMod->name = AddStringStringTable( &PermStrings, name );
        }
        return( ORL_OKAY );
    }
    if( type & ORL_SYM_TYPE_DEBUG )
        return( ORL_OKAY );
    if( type & (ORL_SYM_TYPE_OBJECT|ORL_SYM_TYPE_FUNCTION) ||
        (type & (ORL_SYM_TYPE_NOTYPE|ORL_SYM_TYPE_UNDEFINED) &&
         name != NULL)) {
        namelen = strlen( name );
        if( namelen == 0 ) {
            BadObject();
        }
        if( CurrMod->modinfo & MOD_IMPORT_LIB ) {
            ImpProcSymbol( snode, type, name, namelen );
            return( ORL_OKAY );
        }
        newnode = AllocNode( ExtNodes );
        newnode->handle = symhdl;
        binding = ORLSymbolGetBinding( symhdl );
        symop = ST_CREATE;
        if( binding == ORL_SYM_BINDING_LOCAL ) {
            symop |= ST_STATIC | ST_NONUNIQUE;
        }
        if( (type & ORL_SYM_TYPE_UNDEFINED) && binding != ORL_SYM_BINDING_ALIAS ){
            symop |= ST_REFERENCE;
        } else {
            symop |= ST_NOALIAS;
        }
        sym = SymOp( symop, name, namelen );
        CheckIfTocSym( sym );
        if( type & ORL_SYM_TYPE_COMMON ) {
            value = ORLSymbolGetValue( symhdl );
            sym = MakeCommunalSym( sym, value.u._32[I64LO32], false, true );
        } else if( type & ORL_SYM_TYPE_UNDEFINED ) {
            DefineReference( sym );
            isweak = false;
            switch( binding ) {
            case ORL_SYM_BINDING_WEAK:
                isweak = true;
            case ORL_SYM_BINDING_ALIAS:
            case ORL_SYM_BINDING_LAZY:
                assocsymhdl = ORLSymbolGetAssociated( symhdl );
                name = ORLSymbolGetName( assocsymhdl );
                namelen = strlen(name);
                if( binding == ORL_SYM_BINDING_ALIAS ) {
                    MakeSymAlias( sym->name, strlen(sym->name), name, namelen );
                } else {
                    assocsym = SymOp( ST_CREATE | ST_REFERENCE, name, namelen );
                    DefineLazyExtdef( sym, assocsym, isweak );
                    newnode->isweak = true;
                }
            }
        } else {
            newnode->isdefd = true;
            value = ORLSymbolGetValue( symhdl );
            if( (type & ORL_SYM_TYPE_COMMON) && (type & ORL_SYM_TYPE_OBJECT) && sechdl == NULL) {
                sym = MakeCommunalSym( sym, value.u._32[I64LO32], false, true );
            } else if( snode != NULL && snode->entry != NULL && snode->entry->iscdat ) {
                DefineComdatSym( snode, sym, value );
            } else {
                sym->info |= SYM_DEFINED;
                DefineSymbol( sym, snode, value.u._32[I64LO32], 0 );
            }
        }
        newnode->entry = sym;
    } else if( (type & ORL_SYM_TYPE_SECTION) && (type & ORL_SYM_CDAT_MASK)
                            && snode != NULL && !(snode->info & SEG_DEAD) ) {
        snode->entry->select = (type & ORL_SYM_CDAT_MASK) >> ORL_SYM_CDAT_SHIFT;
    }
コード例 #8
0
ファイル: Quaddon.cpp プロジェクト: dakyri/qua
Quaddon::Quaddon(char *path, image_id id, int n):
	Stackable(DefineSymbol(AddonName(id,n), S_QUADDON, 0,
					this, nullptr,
					REF_VALUE, ATTRIB_NONE, false, DISP_MODE_NOT))
{
	status_t	err;
	
	srcImage = id;
	srcIndex = n;
	
	fprintf(stderr, "addon %s, image %d, hook %d: name %s\n", path, id, n, sym->name);
	
	uint32	*addon_id_p;
	if ((err=get_image_symbol(
			id, "addon_id", B_SYMBOL_TYPE_DATA, (void**)&addon_id_p)) >= B_NO_ERROR) {
		subType = *addon_id_p;
	} else if ((err=get_image_symbol(
			id, "addon_id_array", B_SYMBOL_TYPE_DATA, (void**)&addon_id_p)) >= B_NO_ERROR) {
		subType = addon_id_p[n];
	} else {
		subType = 0;
	}
	
	char		**addon_formal_p;
	if ((err=get_image_symbol(
			id, "addon_params", B_SYMBOL_TYPE_DATA, (void **)&addon_formal_p)) >= B_NO_ERROR) {
		controlVariableDef = new char[strlen(*addon_formal_p)+1];
		strcpy(controlVariableDef, *addon_formal_p);
	} else if ((err=get_image_symbol(
			id, "addon_params_array", B_SYMBOL_TYPE_DATA, (void**)&addon_formal_p)) >= B_NO_ERROR) {
		controlVariableDef = new char[strlen(addon_formal_p[n])+1];
		strcpy(controlVariableDef, addon_formal_p[n]);
	} else {
		controlVariableDef = new char[strlen("()")+1];
		strcpy(controlVariableDef, "()");
	}

	InitFnPtr	*addon_init_array_p;
	if ((err=get_image_symbol(
			id, "init", B_SYMBOL_TYPE_TEXT, (void**)&init)) >= B_NO_ERROR) {
		;
	} else if ((err=get_image_symbol(
			id, "init_array", B_SYMBOL_TYPE_DATA, (void**)&addon_init_array_p)) >= B_NO_ERROR) {
		init = addon_init_array_p[n];
	} else {
		init = nullptr;
	}
	
	DisInitFnPtr	*addon_disinit_array_p;
	if ((err=get_image_symbol(
			id, "disinit", B_SYMBOL_TYPE_TEXT, (void**)&disInit)) >= B_NO_ERROR) {
		;
	} else if ((err=get_image_symbol(
			id, "disinit_array", B_SYMBOL_TYPE_DATA, (void**)&addon_disinit_array_p)) >= B_NO_ERROR) {
		disInit = addon_disinit_array_p[n];
	} else {
		disInit = nullptr;
	}
	
	ApplyFnPtr	*addon_apply_array_p;
	if ((err=get_image_symbol(
			id, "apply", B_SYMBOL_TYPE_TEXT, (void **)&apply)) >= B_NO_ERROR) {
		;
	} else if ((err=get_image_symbol(
			id, "apply_array", B_SYMBOL_TYPE_DATA, (void**)&addon_apply_array_p)) >= B_NO_ERROR) {
		apply = addon_apply_array_p[n];
	} else {
		apply = nullptr;
	}
	
	ResetFnPtr	*addon_reset_array_p;
	if ((err=get_image_symbol(
			id, "reset", B_SYMBOL_TYPE_TEXT, (void**)&reset)) >= B_NO_ERROR) {
		;
	} else if ((err=get_image_symbol(
			id, "reset_array", B_SYMBOL_TYPE_DATA, (void**)&addon_reset_array_p)) >= B_NO_ERROR) {
		reset = addon_reset_array_p[n];
	} else {
		reset = nullptr;
	}
	
	SetParamFnPtr	*addon_setp_array_p;
	if ((err=get_image_symbol(
			id, "set_parameters", B_SYMBOL_TYPE_TEXT, (void**)&setParameters)) >= B_NO_ERROR) {
		;
	} else if ((err=get_image_symbol(
			id, "set_parameters_array", B_SYMBOL_TYPE_DATA, (void**)&addon_setp_array_p)) >= B_NO_ERROR) {
		setParameters = addon_setp_array_p[n];
	} else {
		setParameters = nullptr;
	}
	
	// allocate a pointer on the stack for the cookie...
	cookieVar.Set(S_STRANGE_POINTER, REF_STACK, sym,
			(long)AllocStack(sym, S_STRANGE_POINTER, 1));

	TxtParser	*p = new TxtParser(controlVariableDef, path, nullptr);
	p->GetToken();
	p->ParseFormalsList(sym);
	next = nullptr;
}
コード例 #9
0
ファイル: MFCSimpleTypeView.cpp プロジェクト: dakyri/qua
void
MFCSimpleTypeView::ContextMenu(UINT nFlags, CPoint point)
{
	long	caty[] = {
//				TypedValue::S_DOUBLE,
//				TypedValue::S_LAMBDA,
		TypedValue::S_FLOAT,
		TypedValue::S_INT,
		TypedValue::S_SHORT,
		TypedValue::S_BYTE,
		TypedValue::S_BOOL
			};
	CPoint		popPt = point;
	ClientToScreen(&popPt);

	CMenu		*ctxtMenu = new CMenu;
	ctxtMenu->CreatePopupMenu();
	CMenu		*addVarMenu = new CMenu;
	addVarMenu->CreatePopupMenu();

	char		buf[512];
	long	item = ItemAtPoint(point);
	for (short i=0; i<sizeof(caty)/sizeof(caty[0]); i++) {
		if (ID_VARIABLECONTEXT_ADD_VAR + caty[i] > ID_VARIABLECONTEXT_ADD_VAR_TYPE_RANGE) {
			reportError("Internal error. type index value exceeded in menu creator, is %d and shouldn't exceed %d",
					caty[i], ID_VARIABLECONTEXT_ADD_VAR_TYPE_RANGE-ID_VARIABLECONTEXT_ADD_VAR);
		} else {
			string tnm = findTypeName(caty[i]);
			if (tnm.size()) {
				sprintf(buf, "%s", tnm.c_str());
				addVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_ADD_VAR + caty[i], buf);
			}
		}
	}

	ctxtMenu->AppendMenu(MF_POPUP, (UINT) addVarMenu->m_hMenu, "add variable");
	ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_ADD_METHOD, "add method");
	StabEnt		*itemSym = NULL;
	if (item >= 0) {
// delete selected item
// set selected item envelope
// set selected item display type
// set selected item length ... to create an array
		itemSym = SymForItem(item);

		if (itemSym != NULL) {
			CMenu		*setVarTypeMenu = new CMenu;
			setVarTypeMenu->CreatePopupMenu();
			for (short i=0; i<sizeof(caty)/sizeof(caty[0]); i++) {
				if (ID_VARIABLECONTEXT_SET_VAR_TYPE + caty[i] > ID_VARIABLECONTEXT_SET_VAR_TYPE_RANGE) {
					reportError("Internal error. type index value exceeded in menu creator, is %d and shouldn't exceed %d",
							caty[i], ID_VARIABLECONTEXT_SET_VAR_TYPE_RANGE-ID_VARIABLECONTEXT_SET_VAR_TYPE);
				} else {
					string tnm = findTypeName(caty[i]);
					if (tnm.size() && itemSym->type != caty[i]) {
						sprintf(buf, "%s", tnm.c_str());
						setVarTypeMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_SET_VAR_TYPE + caty[i], buf);
					}
				}
			}

			sprintf(buf, "set '%s' type", itemSym->uniqueName());
			ctxtMenu->AppendMenu(MF_POPUP, (UINT) setVarTypeMenu->m_hMenu, buf);

			sprintf(buf, "delete '%s'", itemSym->uniqueName());
			ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_DELETE_SELECTED, buf);
			sprintf(buf, "set '%s' envelope", itemSym->uniqueName());
			ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_ENVELOPE_SELECTED, buf);

			CMenu		*dispVarMenu = new CMenu;
			dispVarMenu->CreatePopupMenu();
			dispVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_NODISPLAY_SELECTED, "none");
			dispVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_CONTROL_SELECTED, "control");
			dispVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_DISPLAY_SELECTED, "display");
			sprintf(buf, "set '%s' display", itemSym->uniqueName());
			ctxtMenu->AppendMenu(MF_POPUP, (UINT) dispVarMenu->m_hMenu, buf);

			ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_SET_LENGTH_SELECTED, "set length");
		}
	}

// add item
//    by type
// structures ????
	short ret = ctxtMenu->TrackPopupMenuEx(
						TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RETURNCMD,
						popPt.x, popPt.y, this, NULL);

	if (ret >= ID_VARIABLECONTEXT_ADD_VAR && ret <= ID_VARIABLECONTEXT_ADD_VAR_TYPE_RANGE) {
		long typ = ret - ID_VARIABLECONTEXT_ADD_VAR;
		if (parent && parent->Symbol()) {
			StabEnt	*pSym = parent->Symbol();
			Stackable	*stkbl = pSym->StackableValue();
			if (stkbl) {
				char	*vnm = "variable%d";
				switch(typ) {
				case TypedValue::S_BYTE: vnm = "bytevar"; break;
					case TypedValue::S_SHORT: vnm = "wordvar"; break;
					case TypedValue::S_INT: vnm = "intvar"; break;
					case TypedValue::S_LONG: vnm = "longvar"; break;
					case TypedValue::S_FLOAT: vnm = "floatvar"; break;
				}
				string	nmbuf = glob.makeUniqueName(pSym, vnm, 1);
				StabEnt	*nsym=DefineSymbol(nmbuf, typ, 0, 0, pSym, TypedValue::REF_STACK, false, false, StabEnt::DISPLAY_NOT);
				stkbl->ReAllocateChildren();
				AddSym(nsym);
			}
		}
	} else if (ret == ID_VARIABLECONTEXT_ADD_METHOD) {
		if (parent && parent->Symbol()) {
			StabEnt	*pSym = parent->Symbol();
			string nmbuf = glob.makeUniqueName(pSym, "action", 1);
			QuaPerceptualSet	*quaLink=parent->QuaLink();
			if (quaLink) {
                StabEnt *mSym = quaLink->CreateMethod(nmbuf, pSym);
				if (mSym) {
					AddSym(mSym);
					fprintf(stderr, "tried to add method element\n");
				}
			}
		}
	} else if (ret >= ID_VARIABLECONTEXT_SET_VAR_TYPE && ret <= ID_VARIABLECONTEXT_SET_VAR_TYPE_RANGE) {
		long typ = ret - ID_VARIABLECONTEXT_SET_VAR_TYPE;
		if (itemSym && parent && parent->Symbol()) {
			StabEnt	*pSym = parent->Symbol();
			Stackable	*stkbl = pSym->StackableValue();
			if (stkbl) {
				bool	validChange = false;
				switch(typ) {
				case TypedValue::S_BYTE: validChange = true; break;
					case TypedValue::S_SHORT: validChange = true; break;
					case TypedValue::S_INT: validChange = true; break;
					case TypedValue::S_LONG: validChange = true; break;
					case TypedValue::S_FLOAT: validChange = true; break;
				}
				if (validChange) {
					itemSym->type = typ;
					stkbl->ReAllocateChildren();
				}
			}
		}
	} else if (ret == ID_VARIABLECONTEXT_DELETE_SELECTED) {
		if (itemSym) {
			glob.DeleteSymbol(itemSym, true);
			RemoveSym(itemSym);
			if (parent && parent->Symbol()) {
				StabEnt	*pSym = parent->Symbol();
				Stackable	*stkbl = pSym->StackableValue();
				if (stkbl) {
					stkbl->ReAllocateChildren();
				}
			}
		}
	} else if (ret == ID_VARIABLECONTEXT_ENVELOPE_SELECTED) {
		if (itemSym) {
			itemSym->SetEnvelopeMode(true);
		}
	} else if (ret == ID_VARIABLECONTEXT_NODISPLAY_SELECTED) {
		if (itemSym) {
			itemSym->SetDisplayMode(StabEnt::DISPLAY_NOT);
// forces redisplay of this entry to show icon change
			GetListCtrl().SetItemText(item, 3, "N");
		}
	} else if (ret == ID_VARIABLECONTEXT_DISPLAY_SELECTED) {
		if (itemSym) {
			itemSym->SetDisplayMode(StabEnt::DISPLAY_DISP);
// forces redisplay of this entry
			GetListCtrl().SetItemText(item, 3, "D");
		}
	} else if (ret == ID_VARIABLECONTEXT_CONTROL_SELECTED) {
		if (itemSym) {
			itemSym->SetDisplayMode(StabEnt::DISPLAY_CTL);
// forces redisplay of this entry
			GetListCtrl().SetItemText(item, 3, "C");
		}
	} else if (ret == ID_VARIABLECONTEXT_SET_LENGTH_SELECTED) {
		reportError("Currently only undimensioned data are supported by this interface .... but they can be added manually by hand-editting the script");
	}
}