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; }
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; }
static struct TVisualBase * vis_modopen(struct TVisualBase *mod, TTAGITEM *tags) { struct TExecBase *TExecBase = TGetExecBase(mod); struct TVisualBase *inst = TNULL; TBOOL success = TTRUE; TLock(mod->vis_Lock); if (mod->vis_RefCount == 0) success = vis_init(mod); if (success) mod->vis_RefCount++; TUnlock(mod->vis_Lock); if (success) { struct TVisualBase *base = (struct TVisualBase *) TGetTag(tags, TVisual_Attach, TNULL); if (TGetTag(tags, TVisual_NewInstance, TFALSE)) base = mod; if (base) { inst = (struct TVisualBase *) TNewInstance((struct TModule *) base, base->vis_Module.tmd_PosSize, base->vis_Module.tmd_NegSize); if (inst) { TInitList(&inst->vis_ReqPool); TInitList(&inst->vis_WaitList); inst->vis_IMsgPort = (struct TMsgPort *) TGetTag(tags, TVisual_IMsgPort, TNULL); if (inst->vis_IMsgPort == TNULL) { inst->vis_IMsgPort = TCreatePort(TNULL); inst->vis_Flags |= TVISFL_IMSGPORT_OWNER; } inst->vis_CmdRPort = (struct TMsgPort *) TGetTag(tags, TVisual_CmdRPort, TNULL); if (inst->vis_CmdRPort == TNULL) { inst->vis_CmdRPort = TCreatePort(TNULL); inst->vis_Flags |= TVISFL_CMDRPORT_OWNER; } if (inst->vis_IMsgPort == TNULL || inst->vis_CmdRPort == TNULL) { vis_destroyports(inst); TFreeInstance(&inst->vis_Module); inst = TNULL; } } if (inst == TNULL) vis_modclose(mod); } else inst = mod; } return inst; }