[teklib-general] changeset in /hg/teklib/current: added visual open and close, ad...
Timm S. Mueller
tmueller at neoscientists.org
Mon Nov 26 16:22:09 CET 2007
changeset 837f570b197d in /hg/teklib/current
details: http://teklib.org:8001/hg/teklib/current?cmd=changeset;node=837f570b197d
description:
added visual open and close, adapted bashing demo
diffs (truncated from 485 to 300 lines):
diff -r a21c9873ce63 -r 837f570b197d src/visual/tests/bashing.c
--- a/src/visual/tests/bashing.c Sun Aug 19 20:31:06 2007 +0200
+++ b/src/visual/tests/bashing.c Mon Aug 20 01:35:46 2007 +0200
@@ -185,110 +185,118 @@ TTASKENTRY TVOID TEKMain(TAPTR task)
TExecBase = TGetExecBase(task);
TUtilBase = TOpenModule("util", 0, TNULL);
TTimeBase = TOpenModule("time", 0, TNULL);
+
if (TUtilBase && TTimeBase)
{
- TAPTR v;
- TTAGITEM vistags[4];
-
- vistags[0].tti_Tag = TVisual_PixWidth;
- vistags[0].tti_Value = (TTAG) 680;
- vistags[1].tti_Tag = TVisual_PixHeight;
- vistags[1].tti_Value = (TTAG) 460;
- vistags[2].tti_Tag = TVisual_Title;
- vistags[2].tti_Value = (TTAG) "Visual multibashing";
- vistags[3].tti_Tag = TTAG_DONE;
-
- v = TOpenModule("visual", 0, vistags);
- if (v)
- {
- TIMSG *imsg;
- TBOOL abort = TFALSE;
- TAPTR iport;
-
- TINT x, y, i = 0;
- TVPEN pentab[8];
- TAPTR tasks[6] = {TNULL, TNULL, TNULL, TNULL, TNULL, TNULL};
-
- pentab[0] = TVisualAllocPen(v, 0xffffff);
- pentab[1] = TVisualAllocPen(v, 0xff00ff);
- pentab[2] = TVisualAllocPen(v, 0xff0000);
- pentab[3] = TVisualAllocPen(v, 0x0000ff);
- pentab[4] = TVisualAllocPen(v, 0x00ff00);
- pentab[5] = TVisualAllocPen(v, 0x00ffff);
- pentab[6] = TVisualAllocPen(v, 0x112233);
- pentab[7] = TVisualAllocPen(v, 0x000000);
-
- TVisualClear(v, pentab[7]);
-
- for (y = 0; y < 2; ++y)
+ TAPTR vismod = TOpenModule("visual", 0, TNULL);
+ if (vismod)
+ {
+ TAPTR v;
+ TTAGITEM vistags[4];
+
+ vistags[0].tti_Tag = TVisual_PixWidth;
+ vistags[0].tti_Value = (TTAG) 680;
+ vistags[1].tti_Tag = TVisual_PixHeight;
+ vistags[1].tti_Value = (TTAG) 460;
+ vistags[2].tti_Tag = TVisual_Title;
+ vistags[2].tti_Value = (TTAG) "Visual multibashing";
+ vistags[3].tti_Tag = TTAG_DONE;
+
+ v = TVisualOpen(vismod, vistags);
+ if (v)
{
- for (x = 0; x < 3; ++x)
+ TIMSG *imsg;
+ TBOOL abort = TFALSE;
+ TAPTR iport;
+
+ TINT x, y, i = 0;
+ TVPEN pentab[8];
+ TAPTR tasks[6] = {TNULL, TNULL, TNULL, TNULL, TNULL, TNULL};
+
+ pentab[0] = TVisualAllocPen(v, 0xffffff);
+ pentab[1] = TVisualAllocPen(v, 0xff00ff);
+ pentab[2] = TVisualAllocPen(v, 0xff0000);
+ pentab[3] = TVisualAllocPen(v, 0x0000ff);
+ pentab[4] = TVisualAllocPen(v, 0x00ff00);
+ pentab[5] = TVisualAllocPen(v, 0x00ffff);
+ pentab[6] = TVisualAllocPen(v, 0x112233);
+ pentab[7] = TVisualAllocPen(v, 0x000000);
+
+ TVisualClear(v, pentab[7]);
+
+ for (y = 0; y < 2; ++y)
{
- TTAGITEM tasktags[2];
- struct efxdata init;
- init.x = 20 + x * 220;
- init.y = 20 + y * 220;
- init.pen = pentab[i];
- init.backpen = pentab[6];
- init.whitepen = pentab[0];
- init.blackpen = pentab[7];
- init.visual = v;
- tasktags[0].tti_Tag = TTask_UserData;
- tasktags[0].tti_Value = (TTAG) &init;
- tasktags[1].tti_Tag = TTAG_DONE;
- tasks[i] = TCreateTask(efxfunc,
- efxinitfunc, tasktags);
- i++;
+ for (x = 0; x < 3; ++x)
+ {
+ TTAGITEM tasktags[2];
+ struct efxdata init;
+ init.x = 20 + x * 220;
+ init.y = 20 + y * 220;
+ init.pen = pentab[i];
+ init.backpen = pentab[6];
+ init.whitepen = pentab[0];
+ init.blackpen = pentab[7];
+ init.visual = v;
+ tasktags[0].tti_Tag = TTask_UserData;
+ tasktags[0].tti_Value = (TTAG) &init;
+ tasktags[1].tti_Tag = TTAG_DONE;
+ tasks[i] = TCreateTask(efxfunc,
+ efxinitfunc, tasktags);
+ i++;
+ }
}
+
+ TVisualSetInput(v, TITYPE_NONE, TITYPE_CLOSE |
+ TITYPE_COOKEDKEY | TITYPE_NEWSIZE | TITYPE_REFRESH);
+
+ iport = TVisualGetPort(v);
+
+ do
+ {
+ TWait(TGetPortSignal(iport));
+
+ while ((imsg = (TIMSG *) TGetMsg(iport)))
+ {
+ switch (imsg->timsg_Type)
+ {
+ case TITYPE_REFRESH:
+ case TITYPE_NEWSIZE:
+ TVisualClear(v, pentab[7]);
+ break;
+
+ case TITYPE_CLOSE:
+ abort = TTRUE;
+ break;
+
+ case TITYPE_COOKEDKEY:
+ if (imsg->timsg_Code == TKEYC_ESC)
+ abort = TTRUE;
+ break;
+ }
+ TAckMsg(imsg);
+ }
+
+ } while (!abort);
+
+ for (i = 0; i < 6; ++i)
+ {
+ if (tasks[i])
+ {
+ TSignal(tasks[i], TTASK_SIG_ABORT);
+ TDestroy(tasks[i]);
+ }
+ }
+
+ for (i = 0; i < 8; ++i)
+ TVisualFreePen(v, pentab[i]);
+
+ TVisualClose(vismod, v);
}
- TVisualSetInput(v, TITYPE_NONE, TITYPE_CLOSE | TITYPE_COOKEDKEY |
- TITYPE_NEWSIZE | TITYPE_REFRESH);
-
- iport = TVisualGetPort(v);
-
- do
- {
- TWait(TGetPortSignal(iport));
-
- while ((imsg = (TIMSG *) TGetMsg(iport)))
- {
- switch (imsg->timsg_Type)
- {
- case TITYPE_REFRESH:
- case TITYPE_NEWSIZE:
- TVisualClear(v, pentab[7]);
- break;
-
- case TITYPE_CLOSE:
- abort = TTRUE;
- break;
-
- case TITYPE_COOKEDKEY:
- if (imsg->timsg_Code == TKEYC_ESC)
- abort = TTRUE;
- break;
- }
- TAckMsg(imsg);
- }
-
- } while (!abort);
-
- for (i = 0; i < 6; ++i)
- {
- if (tasks[i])
- {
- TSignal(tasks[i], TTASK_SIG_ABORT);
- TDestroy(tasks[i]);
- }
- }
-
- for (i = 0; i < 8; ++i)
- TVisualFreePen(v, pentab[i]);
-
- TCloseModule(v);
+ TCloseModule(vismod);
}
}
+
TCloseModule(TTimeBase);
TCloseModule(TUtilBase);
}
diff -r a21c9873ce63 -r 837f570b197d src/visual/visual_api.c
--- a/src/visual/visual_api.c Sun Aug 19 20:31:06 2007 +0200
+++ b/src/visual/visual_api.c Mon Aug 20 01:35:46 2007 +0200
@@ -298,3 +298,27 @@ vis_fpoly(TMOD_VIS *mod, TINT16 *array,
TExecDoIO(TGetExecBase(mod), (struct TIORequest *) req);
vis_ungetreq(mod, req);
}
+
+/*****************************************************************************/
+
+EXPORT TAPTR
+vis_open(TMOD_VIS *mod, TTAGITEM *usertags)
+{
+ TTAGITEM vtags[2];
+ vtags[0].tti_Tag = TVisual_Open;
+ vtags[0].tti_Value = TTRUE;
+ vtags[1].tti_Tag = TTAG_MORE;
+ vtags[1].tti_Value = (TTAG) usertags;
+
+ /* Create a new instance: */
+ return TExecOpenModule(TGetExecBase(mod), "visual", 0, vtags);
+}
+
+/*****************************************************************************/
+
+EXPORT TVOID
+vis_close(TMOD_VIS *mod, TAPTR inst)
+{
+ TExecCloseModule(TGetExecBase(mod), inst);
+}
+
diff -r a21c9873ce63 -r 837f570b197d src/visual/visual_mod.c
--- a/src/visual/visual_mod.c Sun Aug 19 20:31:06 2007 +0200
+++ b/src/visual/visual_mod.c Mon Aug 20 01:35:46 2007 +0200
@@ -104,6 +104,8 @@ vis_vectors[VISUAL_NUMVECTORS] =
(TMFPTR) vis_attach,
(TMFPTR) vis_fpoly,
(TMFPTR) vis_setattrs,
+ (TMFPTR) vis_open,
+ (TMFPTR) vis_close,
};
/*****************************************************************************/
@@ -140,9 +142,16 @@ vis_modopen(TMOD_VIS *mod, TTAGITEM *tag
{
TMOD_VIS *inst, *attach;
TAPTR exec = TGetExecBase(mod);
+ TBOOL open = TGetTag(tags, TVisual_Open, TFALSE);
attach = (TMOD_VIS *) TGetTag(tags, TVisual_Attach, TNULL);
if (attach) mod = attach; /* instance to attach to */
+
+ if (!open && !attach)
+ {
+ /* not opening a new instance, just return the module base: */
+ return mod;
+ }
inst = TNewInstance(mod, mod->vis_Module.tmd_PosSize,
mod->vis_Module.tmd_NegSize);
@@ -205,41 +214,47 @@ static TVOID
static TVOID
vis_modclose(TMOD_VIS *mod)
{
- TAPTR exec = TGetExecBase(mod);
- VISREQ *req;
-
- if (mod->vis_IsClient)
- {
- /* detach ourselves */
- vis_remclient(mod);
- vis_wake(mod);
- }
-
- /* wait for and free queued packages in the waitlist */
- while ((req = (VISREQ *) TRemHead(&mod->vis_WaitList)))
- {
- vis_wake(mod);
- TExecWaitIO(exec, (struct TIORequest *) req);
- TExecFree(exec, req);
- }
-
- if (!mod->vis_IsClient)
More information about the teklib-general
mailing list