Example #1
0
LOCAL void
fb_setinput(WINDISPLAY *mod, struct TVRequest *req)
{
	WINWINDOW *v = req->tvr_Op.SetInput.Window;
	req->tvr_Op.SetInput.OldMask = v->fbv_InputMask;
	v->fbv_InputMask = req->tvr_Op.SetInput.Mask;
	TDBPRINTF(TDB_TRACE,("Setinputmask: %08x\n", v->fbv_InputMask));
	/* spool out possible remaining messages: */
	fb_sendimessages(mod, TFALSE);
}
Example #2
0
LOCAL void
fb_setinput(WINDISPLAY *mod, struct TVRequest *req)
{
	WINWINDOW *v = req->tvr_Op.SetInput.Window;
	TUINT oldmask = v->fbv_InputMask;
	TUINT newmask = req->tvr_Op.SetInput.Mask;

	if (oldmask & TITYPE_INTERVAL)
		--mod->fbd_NumInterval;
	if (newmask & TITYPE_INTERVAL)
		++mod->fbd_NumInterval;

	req->tvr_Op.SetInput.OldMask = oldmask;
	v->fbv_InputMask = newmask;
	TDBPRINTF(TDB_TRACE,("Setinputmask: %08x\n", v->fbv_InputMask));
	/* spool out possible remaining messages: */
	fb_sendimessages(mod);
}
Example #3
0
static void fb_runinstance(TAPTR task)
{
	struct TExecBase *TExecBase = TGetExecBase(task);
	WINDISPLAY *mod = TGetTaskData(task);
	struct TVRequest *req;
	TUINT sig;

	/* interval time: 1/50s: */
	TTIME intt = { 20000 };
	/* next absolute time to send interval message: */
	TTIME nextt;
	TTIME waitt, nowt;

	TGetSystemTime(&nextt);
	TAddTime(&nextt, &intt);

	TDBPRINTF(TDB_INFO,("Device instance running\n"));

	do
	{
		TBOOL do_interval = TFALSE;

		while ((req = TGetMsg(mod->fbd_CmdPort)))
		{
			fb_docmd(mod, req);
			TReplyMsg(req);
		}

		fb_notifywindows(mod);

		/* calculate new delta to wait: */
		TGetSystemTime(&nowt);
		waitt = nextt;
		TSubTime(&waitt, &nowt);

		TWaitTime(&waitt, mod->fbd_CmdPortSignal);

		/* check if time interval has expired: */
		TGetSystemTime(&nowt);
		if (TCmpTime(&nowt, &nextt) > 0)
		{
			/* expired; send interval: */
			do_interval = TTRUE;
			TAddTime(&nextt, &intt);
			if (TCmpTime(&nowt, &nextt) >= 0)
			{
				/* nexttime expired already; create new time from now: */
				nextt = nowt;
				TAddTime(&nextt, &intt);
			}
		}

		/* send out input messages: */
		fb_sendimessages(mod, do_interval);

		/* get signal state: */
		sig = TSetSignal(0, TTASK_SIG_ABORT);

	} while (!(sig & TTASK_SIG_ABORT));

	TDBPRINTF(TDB_INFO,("Device instance closedown\n"));
	fb_exitinstance(mod);
}