Beispiel #1
0
Exec_stat MCEPS::getprop_legacy(uint4 parid, Properties which, MCExecPoint& ep, Boolean effective)
{
	switch (which)
	{
#ifdef /* MCEPS::getprop */ LEGACY_EXEC
	case P_SIZE:
		ep.setint(size);
		break;
	case P_ANGLE:
		ep.setr8(angle, ep.getnffw(), ep.getnftrailing(), ep.getnfforce());
		break;
	case P_POSTSCRIPT:
		ep.setsvalue(postscript);
		break;
	case P_PROLOG:
		ep.setsvalue(prolog);
		break;
	case P_RETAIN_IMAGE:
		ep.setboolean(getflag(F_RETAIN_IMAGE));
		break;
	case P_RETAIN_POSTSCRIPT:
		ep.setboolean(getflag(F_RETAIN_POSTSCRIPT));
		break;
	case P_SCALE_INDEPENDENTLY:
		ep.setboolean(getflag(F_SCALE_INDEPENDENTLY));
		break;
	case P_BOUNDING_RECT:
		ep.setrectangle(tx, ty, tx + ex, ty + ey);
		break;
	case P_SCALE:
	case P_X_SCALE:
		ep.setr8(xscale, ep.getnffw(), ep.getnftrailing(), ep.getnfforce());
		break;
	case P_Y_SCALE:
		ep.setr8(yscale, ep.getnffw(), ep.getnftrailing(), ep.getnfforce());
		break;
	case P_X_OFFSET:
		ep.setint(tx);
		break;
	case P_Y_OFFSET:
		ep.setint(ty);
		break;
	case P_X_EXTENT:
		ep.setint(ex);
		break;
	case P_Y_EXTENT:
		ep.setint(ey);
		break;
	case P_CURRENT_PAGE:
		ep.setint(MCU_max(curpage, 1));
		break;
	case P_PAGE_COUNT:
		ep.setint(MCU_max(pagecount, 1));
		break;
#endif /* MCEPS::getprop */
	default:
		return MCControl::getprop_legacy(parid, which, ep, effective);
	}
	return ES_NORMAL;
}
Beispiel #2
0
Exec_stat MCMarking::exec(MCExecPoint &ep)
{
	if (card != NULL)
	{
		MCObject *optr;
		uint4 parid;
		if (card->getobj(ep, optr, parid, True) != ES_NORMAL
		        || optr->gettype() != CT_CARD)
		{
			MCeerror->add
			(EE_MARK_BADCARD, line, pos);
			return ES_ERROR;
		}
		ep.setboolean(mark);
		return optr->setprop(0, P_MARKED, ep, False);
	}
	if (tofind == NULL)
		MCdefaultstackptr->mark(ep, where, mark);
	else
	{
		if (tofind->eval(ep) != ES_NORMAL)
		{
			MCeerror->add
			(EE_MARK_BADSTRING, line, pos);
			return ES_ERROR;
		}
		MCdefaultstackptr->markfind(ep, mode, ep.getsvalue(), field, mark);
	}
	return ES_NORMAL;
}
Beispiel #3
0
Exec_stat MCVideoClip::getprop(uint4 parid, Properties which, MCExecPoint &ep, Boolean effective)
{
	switch (which)
	{
	case P_DONT_REFRESH:
		ep.setboolean(getflag(F_DONT_REFRESH));
		break;
	case P_FRAME_RATE:
		if (flags & F_FRAME_RATE)
			ep.setint(framerate);
		else
			ep.clear();
		break;
	case P_SCALE:
		ep.setnvalue(scale);
		break;
	case P_SIZE:
		ep.setint(size);
		break;
	case P_TEXT:
		{
			MCString s((const char *)frames, size);
			ep.setsvalue(s);
		}
		break;
	default:
		return MCObject::getprop(parid, which, ep, effective);
	}
	return ES_NORMAL;
}
Beispiel #4
0
void MCS_delete_registry(const char *key, MCExecPoint &dest)
{
	HKEY hkey = NULL;

	/* get the root key string, it is at the begining of the key       */
	char *str = (char *)strchr(key, '\\');
	if (!str)
	{
		MCresult->sets("no key");
		dest.setboolean(False);
		return;
	}
	*str++ = '\0';  //str now pointing to the begining of subkey string

	/* find the matching key for the root key string                   */
	MCString s = key;
	uint1 i;
	for (i = 0 ; i < ELEMENTS(Regkeys) ; i++)
	{
		if (s == Regkeys[i].token)
			break;
	}
	if (i >= ELEMENTS(Regkeys))
	{
		MCresult->sets("bad key");
		dest.setboolean(False);
		return;
	}
	errno = RegDeleteKeyNT(Regkeys[i].key, str);
	if (errno != ERROR_SUCCESS)
	{
		MCresult->sets("could not delete key");
		dest.setboolean(False);
	}
	else
	{
		MCresult->clear(False);
		dest.setboolean(True);
	}
}
Exec_stat MCStack::mode_getprop(uint4 parid, Properties which, MCExecPoint &ep, const MCString &carray, Boolean effective)
{
	switch(which)
	{
	case P_REFERRING_STACK:
		if (m_mode_data -> referrer != NULL)
			return m_mode_data -> referrer -> getprop(0, P_LONG_ID, ep, False);
		else
			ep . clear();
	break;

	case P_UNPLACED_GROUP_IDS:
		ep . clear();
		
		if (controls != NULL)
		{
			uint4 t_count;
			t_count = 0;
			
			MCControl *t_control;
			t_control = controls;
			do
			{
				if (t_control -> gettype() == CT_GROUP && t_control -> getparent() != curcard)
				{
					ep . concatuint(t_control -> getid(), EC_RETURN, t_count == 0);
					t_count += 1;
				}
					
				t_control = t_control -> next();
			}
			while(t_control != controls);
		}
	break;

	case P_IDE_OVERRIDE:
		ep.setboolean(getextendedstate(ECS_IDE));
	break;

	default:
		return ES_NOT_HANDLED;
	}
	return ES_NORMAL;
}
Beispiel #6
0
void MCS_set_registry(const char *key, MCExecPoint &dest, char *type)
{
	HKEY hkey = NULL;
	DWORD keyState; //REG_CREATED_NEW_KEY or REG_OPENED_EXISTING_KEY

	/* get the root key string, it is at the begining of the key       */
	char *str = (char *)strchr(key, '\\');
	*str++ = '\0';  //str now pointing to the begining of subkey string

	/* find the matching key for the root key string                   */
	MCString s = key;
	uint1 i;
	for (i = 0 ; i < ELEMENTS(Regkeys) ; i++)
		if (s == Regkeys[i].token)
			break;
	if (i >= ELEMENTS(Regkeys))
	{
		MCresult->sets("bad key");
		dest.setboolean(False);
		return;
	}
	/* get the value name string, it is at the end of the key          */
	char *VName = strrchr(str, '\\');
	if (VName == NULL)
	{ //invalid key path specified
		MCresult->sets("bad key specified");
		dest.setboolean(False);
		return;
	}
	*VName++ = '\0';
	if (RegCreateKeyExA(Regkeys[i].key, str, 0, NULL, REG_OPTION_NON_VOLATILE,
	                   KEY_ALL_ACCESS, NULL, &hkey, &keyState) != ERROR_SUCCESS)
	{
		MCS_seterrno(GetLastError());
		MCresult->sets("can't create key");
		dest.setboolean(False);
		return;
	}
	if (dest.getsvalue().getlength() == 0)
	{//delete this value
		if ((errno = RegDeleteValueA(hkey, VName)) != ERROR_SUCCESS)
		{
			MCS_seterrno(GetLastError());
			MCresult->sets("can't delete value");
			dest.setboolean(False);
			RegCloseKey(hkey); //write data to registry
			return;
		}
	}
	else
	{
		DWORD VType = REG_SZ;
		if (type != NULL)
			for (i = 0 ; i < ELEMENTS(RegDatatypes) ; i++)
				if (!MCU_strncasecmp(type, RegDatatypes[i].token, strlen(type) + 1))
				{
					VType = RegDatatypes[i].type;
					break;
				}
		char *VValue = dest.getsvalue().clone();
		uint4 VLength = dest.getsvalue().getlength();
		if (RegSetValueExA(hkey, VName, 0, VType, (const BYTE *)VValue,
		                  VLength + (VType == REG_SZ ? 1 : 0)) != ERROR_SUCCESS)
		{
			MCS_seterrno(GetLastError());
			MCresult->sets("can't set value");
			dest.setboolean(False);
			delete VValue;
			return;
		}
		delete VValue;
	}
	MCresult->clear(False);
	dest.setboolean(True);
	RegCloseKey(hkey); //write data to registry
}