Ejemplo n.º 1
0
LOCAL TBOOL rfb_getimsg(RFBDISPLAY *mod, RFBWINDOW *v, TIMSG **msgptr, 
	TUINT type)
{
	TAPTR TExecBase = TGetExecBase(mod);
	TIMSG *msg;
	
	TLock(mod->rfb_InstanceLock);
	msg = (TIMSG *) TRemHead(&mod->rfb_IMsgPool);
	TUnlock(mod->rfb_InstanceLock);
	if (msg == TNULL)
		msg = TAllocMsg(sizeof(TIMSG));
	*msgptr = msg;
	if (msg)
	{
		memset(msg, 0, sizeof(TIMSG));
		msg->timsg_Instance = v;
		msg->timsg_UserData = v->userdata;
		msg->timsg_Type = type;
		msg->timsg_Qualifier = mod->rfb_KeyQual;
		msg->timsg_MouseX = mod->rfb_MouseX;
		msg->timsg_MouseY = mod->rfb_MouseY;
		TGetSystemTime(&msg->timsg_TimeStamp);
		return TTRUE;
	}
	return TFALSE;
}
Ejemplo n.º 2
0
static int tek_lib_exec_sendmsg(lua_State *L)
{
	struct LuaExecTask *lexec = tek_lib_exec_check(L);
	struct TExecBase *TExecBase = lexec->exec;
	const char *taskname = luaL_checkstring(L, 1);
	size_t msglen;
	const char *src = luaL_checklstring(L, 2, &msglen);
	TAPTR ref, task;
	char *msg = TAllocMsg(msglen + TEK_LIB_TASKNAME_LEN);
	if (msg == TNULL)
		luaL_error(L, "out of memory");
	task = tek_lib_exec_locktask(TExecBase, taskname, &ref);
	if (task)
	{
		memcpy(msg, src, msglen);
        strcpy(msg + msglen, lexec->taskname);
		TPutMsg(TGetUserPort(task), TNULL, msg);
		tek_lib_exec_unlocktask(TExecBase, ref);
		lua_pushboolean(L, TTRUE);
	}
	else
	{
		TFree(msg);
		lua_pushnil(L);
	}
	return 1;
}
Ejemplo n.º 3
0
static TBOOL rfb_inittask(struct TTask *task)
{
	TAPTR TExecBase = TGetExecBase(task);
	RFBDISPLAY *mod = TGetTaskData(task);

	for (;;)
	{
		TTAGITEM *opentags = mod->rfb_OpenTags;
		TSTRPTR subname;
		
		/* Initialize rectangle pool */
		region_initpool(&mod->rfb_RectPool, TExecBase);
		
		/* list of free input messages: */
		TInitList(&mod->rfb_IMsgPool);

		/* list of all open visuals: */
		TInitList(&mod->rfb_VisualList);

		/* init fontmanager and default font */
		TInitList(&mod->rfb_FontManager.openfonts);

		/* Instance lock (currently needed for async VNC) */
		mod->rfb_InstanceLock = TCreateLock(TNULL);
		if (mod->rfb_InstanceLock == TNULL)
			break;
		
		/* Open sub device, if one is requested: */
		subname = (TSTRPTR) TGetTag(opentags, TVisual_DriverName,
			(TTAG) SUBDEVICE_NAME);
		if (subname)
		{
			TTAGITEM subtags[2];
			subtags[0].tti_Tag = TVisual_IMsgPort;
			subtags[0].tti_Value = TGetTag(opentags, TVisual_IMsgPort, TNULL);
			subtags[1].tti_Tag = TTAG_DONE;
			
			mod->rfb_RndRPort = TCreatePort(TNULL);
			if (mod->rfb_RndRPort == TNULL)
				break;
			mod->rfb_RndDevice = TOpenModule(subname, 0, subtags);
			if (mod->rfb_RndDevice == TNULL)
				break;
			mod->rfb_RndRequest = TAllocMsg(sizeof(struct TVRequest));
			if (mod->rfb_RndRequest == TNULL)
				break;
			mod->rfb_RndIMsgPort = TCreatePort(TNULL);
			if (mod->rfb_RndIMsgPort == TNULL)
				break;
		}

		TDBPRINTF(TDB_TRACE,("Instance init successful\n"));
		return TTRUE;
	}

	rfb_exittask(mod);
	return TFALSE;
}
Ejemplo n.º 4
0
static TMODAPI struct TVRequest *
fb_allocreq(WINDISPLAY *mod)
{
	struct TExecBase *TExecBase = TGetExecBase(mod);
	struct TVRequest *req = TAllocMsg(sizeof(struct TVRequest));
	if (req)
		req->tvr_Req.io_Device = (struct TModule *) mod;
	return req;
}
Ejemplo n.º 5
0
static int tek_lib_exec_child_sendmsg(lua_State *L)
{
	struct LuaExecChild *ctx = luaL_checkudata(L, 1, TEK_LIB_TASK_CLASSNAME);
	if (ctx->task)
	{
		struct TExecBase *TExecBase = ctx->exec;
		size_t len;
		const char *buf = luaL_checklstring(L, 2, &len);
		char *msg = TAllocMsg(len + TEK_LIB_TASKNAME_LEN);
		if (msg == TNULL)
			luaL_error(L, "out of memory");
		memcpy(msg, buf, len);
		strcpy(msg + len, ctx->parent->taskname);
		TPutMsg(TGetUserPort(ctx->task), TNULL, msg);
	}
	else
		luaL_error(L, "closed handle");
	return 0;
}
Ejemplo n.º 6
0
static TBOOL rfb_inittask(struct TTask *task)
{
	TAPTR TExecBase = TGetExecBase(task);
	struct rfb_Display *mod = TGetTaskData(task);

	for (;;)
	{
		TTAGITEM *opentags = mod->rfb_OpenTags;
		TSTRPTR subname;

		/* Initialize rectangle pool */
		region_initpool(&mod->rfb_RectPool, TExecBase);

		/* list of free input messages: */
		TInitList(&mod->rfb_IMsgPool);

		/* list of all open visuals: */
		TInitList(&mod->rfb_VisualList);

		/* init fontmanager and default font */
		TInitList(&mod->rfb_FontManager.openfonts);

		region_init(&mod->rfb_RectPool, &mod->rfb_DirtyRegion, TNULL);

		mod->rfb_PixBuf.tpb_Format = TVPIXFMT_UNDEFINED;
		mod->rfb_DevWidth = RFB_DEF_WIDTH;
		mod->rfb_DevHeight = RFB_DEF_HEIGHT;

		mod->rfb_Flags = RFBFL_BUFFER_CAN_RESIZE;

#if defined(ENABLE_LINUXFB)
		if (!rfb_linux_init(mod))
			break;
#endif
		/* Instance lock (currently needed for async VNC) */
		mod->rfb_InstanceLock = TCreateLock(TNULL);
		if (mod->rfb_InstanceLock == TNULL)
			break;

		/* Open sub device, if one is requested: */
		subname = (TSTRPTR) TGetTag(opentags, TVisual_DriverName,
			(TTAG) SUBDEVICE_NAME);
		if (subname)
		{
			TTAGITEM subtags[2];

			subtags[0].tti_Tag = TVisual_IMsgPort;
			subtags[0].tti_Value = TGetTag(opentags, TVisual_IMsgPort, TNULL);
			subtags[1].tti_Tag = TTAG_DONE;

			mod->rfb_RndRPort = TCreatePort(TNULL);
			if (mod->rfb_RndRPort == TNULL)
				break;
			mod->rfb_RndDevice = TOpenModule(subname, 0, subtags);
			if (mod->rfb_RndDevice == TNULL)
				break;
			mod->rfb_RndRequest = TAllocMsg(sizeof(struct TVRequest));
			if (mod->rfb_RndRequest == TNULL)
				break;
			mod->rfb_RndIMsgPort = TCreatePort(TNULL);
			if (mod->rfb_RndIMsgPort == TNULL)
				break;
		}

		TDBPRINTF(TDB_TRACE, ("Instance init successful\n"));
		return TTRUE;
	}

	rfb_exittask(mod);
	return TFALSE;
}