コード例 #1
0
ファイル: visual_mod.c プロジェクト: ld-test/tekui
TMODENTRY TUINT
tek_init_visual(struct TTask *task, struct TModule *vis, TUINT16 version,
	TTAGITEM *tags)
{
	struct TVisualBase *mod = (struct TVisualBase *) vis;
	if (mod == TNULL)
	{
		if (version == 0xffff)
			return sizeof(TAPTR) * VISUAL_NUMVECTORS;

		if (version <= VISUAL_VERSION)
			return sizeof(struct TVisualBase);

		return 0;
	}

	for (;;)
	{
		struct TExecBase *TExecBase = TGetExecBase(mod);
		mod->vis_Lock = TCreateLock(TNULL);
		if (mod->vis_Lock == TNULL) break;

		mod->vis_Module.tmd_Version = VISUAL_VERSION;
		mod->vis_Module.tmd_Revision = VISUAL_REVISION;
		mod->vis_Module.tmd_Handle.thn_Hook.thk_Entry = vis_dispatch;
		mod->vis_Module.tmd_Flags = TMODF_VECTORTABLE | TMODF_OPENCLOSE;
		TInitVectors(&mod->vis_Module, vis_vectors, VISUAL_NUMVECTORS);
		return TTRUE;
	}

	vis_destroy(mod);
	return TFALSE;
}
コード例 #2
0
ファイル: display_rfb_mod.c プロジェクト: technosaurus/tekui
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;
}
コード例 #3
0
ファイル: display_rfb_mod.c プロジェクト: technosaurus/tekui
TMODENTRY TUINT tek_init_display_rawfb(struct TTask *task, 
	struct TModule *vis, TUINT16 version, TTAGITEM *tags)
{
	RFBDISPLAY *mod = (RFBDISPLAY *) vis;

	if (mod == TNULL)
	{
		if (version == 0xffff)
			return sizeof(TAPTR) * RFB_DISPLAY_NUMVECTORS;

		if (version <= RFB_DISPLAY_VERSION)
			return sizeof(RFBDISPLAY);

		return 0;
	}

	for (;;)
	{
		TAPTR TExecBase = TGetExecBase(mod);
		
		if (FT_Init_FreeType(&mod->rfb_FTLibrary) != 0)
			break;
		if (FTC_Manager_New(mod->rfb_FTLibrary, 0, 0, 0, rfb_fontrequester, 
				NULL, &mod->rfb_FTCManager) != 0)
			break;
		if (FTC_CMapCache_New(mod->rfb_FTCManager, &mod->rfb_FTCCMapCache) 
			!= 0)
			break;
		if (FTC_SBitCache_New(mod->rfb_FTCManager, &mod->rfb_FTCSBitCache)
			!= 0)
			break;
		
		mod->rfb_ExecBase = TExecBase;
		mod->rfb_Lock = TCreateLock(TNULL);
		if (mod->rfb_Lock == TNULL)
			break;
		
		mod->rfb_Module.tmd_Version = RFB_DISPLAY_VERSION;
		mod->rfb_Module.tmd_Revision = RFB_DISPLAY_REVISION;
		mod->rfb_Module.tmd_Handle.thn_Hook.thk_Entry = rfb_dispatch;
		mod->rfb_Module.tmd_Flags = TMODF_VECTORTABLE | TMODF_OPENCLOSE;
		TInitVectors(&mod->rfb_Module, rfb_vectors, RFB_DISPLAY_NUMVECTORS);
		return TTRUE;
	}
	
	rfb_destroy(mod);
	return TFALSE;
}
コード例 #4
0
ファイル: display_win_mod.c プロジェクト: ld-test/tekui
TMODENTRY TUINT
tek_init_display_windows(TAPTR task, struct TModule *vis, TUINT16 version,
	TTAGITEM *tags)
{
	WINDISPLAY *mod = (WINDISPLAY *) vis;

	if (mod == TNULL)
	{
		if (version == 0xffff)
			return sizeof(TAPTR) * FB_DISPLAY_NUMVECTORS;

		if (version <= FB_DISPLAY_VERSION)
			return sizeof(WINDISPLAY);

		return 0;
	}

	TDBPRINTF(TDB_TRACE,("Module init...\n"));

	for (;;)
	{
		struct TExecBase *TExecBase = TGetExecBase(mod);
		mod->fbd_ExecBase = TExecBase;
		mod->fbd_Lock = TCreateLock(TNULL);
		if (mod->fbd_Lock == TNULL) break;

		mod->fbd_Module.tmd_Version = FB_DISPLAY_VERSION;
		mod->fbd_Module.tmd_Revision = FB_DISPLAY_REVISION;
		mod->fbd_Module.tmd_Handle.thn_Hook.thk_Entry = fb_dispatch;
		mod->fbd_Module.tmd_Flags = TMODF_VECTORTABLE | TMODF_OPENCLOSE;
		TInitVectors(&mod->fbd_Module, fb_vectors, FB_DISPLAY_NUMVECTORS);
		return TTRUE;
	}
	fb_destroy(mod);

	return TFALSE;
}
コード例 #5
0
ファイル: display_rfb_mod.c プロジェクト: callcc/tekui
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;
}