66 #define MHEG5_SYNC_UPDATE 0 68 #define MAX_ACTION_LISTS (1 << 9) 69 #define ACTION_LIST_MASK (MAX_ACTION_LISTS - 1) 71 #define DO_ANY_EVENT 0x0 72 #define DEFER_ASYNC_EVENTS 0x1 73 #define SUSPEND_EVENTS 0x2 74 #define STOP_ALL_EVENTS 0x4 76 #define SYNC_Q_SIZE 128 77 #define SHORT_Q_SIZE 8 79 #define MAX_USER_EVENTS 2 83 #define DBGPrintAction(at, t, e, p) if (mheg_trace_debug & TACTIONS) { \ 84 TraceAction(at, t, e, p); } else { MHEG5PrintAction(t, e, p); } 86 #define DBGPrintAction(at, t, e, p) if (mheg_trace_debug & TACTIONS) { \ 87 TraceAction(at, t, e, p); } 89 #define DBGTraceEvent(lk) if (mheg_trace_debug & (TACTIONS | TEVNTS)) TraceEvent( lk ); 90 #define DBGTraceToken(lk, t, i) if (mheg_trace_debug & (TACTIONS | TEVNTS)) TraceToken( lk, t, i ); 91 #define DECLARE_RC MHEG5ErrorCode rc; 92 #define ASSIGN_RC extra_trace_param = 0; rc = 93 #define DBGCheckRC(t, a, p) if (rc != MHEG5ERR_NOERROR) TraceActionError(t, a, p, rc); 96 #define DBGPrintAction(at, t, e, p) MHEG5PrintAction(t, e, p); 98 #define ASSIGN_RC (void) 99 #define DBGCheckRC(t, a, p) 102 #define DBGPrintAction(at, t, e, p) printAction(t, e, p); 103 #define DECLARE_RC MHEG5ErrorCode rc; 104 #define ASSIGN_RC rc = 105 #define DBGCheckRC(t, a, p) if (rc != MHEG5ERR_NOERROR) printActionError(t, a, p, rc); 107 #define DBGPrintAction(at, t, e, p) 109 #define ASSIGN_RC (void) 110 #define DBGCheckRC(t, a, p) 113 #define DBGTraceEvent(lk) 114 #define DBGTraceToken(lk, t, i) 118 int extra_trace_param;
179 static void MHEG5DeferProcessing(
void);
180 static void CriticalMessageArrived(
void);
181 static void CriticalMessageProcessed(
void);
183 #ifdef MHEG5PROFILE_UK1_06 184 #define MHEG5toggle ActionNoProfileSupport 185 #define MHEG5setLabel ActionNoProfileSupport 186 #define MHEG5select ActionNoProfileSupport 187 #define MHEG5getSelectionStatus ActionNoProfileSupport 188 #define MHEG5getLabel ActionNoProfileSupport 189 #define MHEG5deselect ActionNoProfileSupport 190 #define MHEG5openConnection ActionNoProfileSupport 191 #define MHEG5closeConnection ActionNoProfileSupport 196 {ActionNotSupported, NOTHING },
197 {MHEG5activate, EXISTS },
202 {MHEG5call, EXISTS },
203 {MHEG5callActionSlot, RUNNING },
207 {MHEG5deactivate, AVAILABLE },
219 {MHEG5fork, EXISTS },
228 {MHEG5getHighlightStatus, AVAILABLE },
229 {MHEG5getInteractionStatus, AVAILABLE },
231 {MHEG5getLabel, EXISTS },
232 {MHEG5getLastAnchorFired, AVAILABLE },
248 {MHEG5launch, NOTHING },
277 {MHEG5setFillColour, AVAILABLE },
280 {MHEG5setHighlightStatus, AVAILABLE },
281 {MHEG5setInteractionStatus, RUNNING },
282 {MHEG5setLabel, AVAILABLE },
283 {MHEG5setLineColour, AVAILABLE },
284 {MHEG5setLineStyle, AVAILABLE },
285 {MHEG5setLineWidth, AVAILABLE },
307 {ActionNotSupported, NOTHING },
308 {ActionNotSupported, NOTHING },
309 {ActionNotSupported, NOTHING },
310 {ActionNotSupported, NOTHING },
311 {ActionNotSupported, NOTHING },
312 {ActionNotSupported, NOTHING },
313 {ActionNotSupported, NOTHING },
314 {ActionNotSupported, NOTHING },
315 {ActionNotSupported, NOTHING },
316 {ActionNotSupported, NOTHING },
317 {ActionNotSupported, NOTHING },
318 {ActionNotSupported, NOTHING },
326 {MHEG5getFocusPosition, AVAILABLE },
327 {MHEG5setFocusPosition, AVAILABLE },
331 {ActionNotSupported, NOTHING },
335 {ActionNotSupported, NOTHING },
341 static unsigned int mainActionListHead = 0;
342 static unsigned int mainActionListTail = 0;
355 static MHEG5Bool queueEvents = MHEG5TRUE;
357 static int processing_state = DO_ANY_EVENT;
358 static void *state_mutex = NULL;
359 static void *queue_notify_hdl = NULL;
364 static int eventProcessingDisableCount = 0;
365 static int critical_msg_count = 0;
368 static MHEG5Bool displayUpdateRequested = MHEG5FALSE;
373 static MHEG5Int userInputEventCount = 0;
379 #if defined(MH5PRINTOUT) || defined(TRACING) 380 int event_indent_num = 0;
390 USE_UNWANTED_PARAM(target);
391 USE_UNWANTED_PARAM(params);
392 return MHEG5ERR_NOTYETSUPPORTED;
397 USE_UNWANTED_PARAM(target);
398 USE_UNWANTED_PARAM(params);
399 return MHEG5ERR_NOTSUPPORTEDBYPROFILE;
412 void MHEG5queuePrint(
char *out)
417 MHEG_PRINT(out,
"Asynchronous event queue:");
421 tail = a_queue->tail;
422 while (tail != a_queue->head)
424 MHEG_PRINT(out,
"Event from (");
425 MHEG5stringPrint(a_queue->events[tail].e_grp->groupName, out);
426 MHEG_PRINT(out,
" ");
427 MHEG5intPrint(a_queue->events[tail].e_id, out);
428 MHEG_PRINT(out,
") ");
429 MHEG5eventPrint((MHEG5EventType)a_queue->events[tail].e_type, out);
430 MHEG5intPrint(a_queue->events[tail].e_data, out);
434 a_queue = a_queue->next;
436 MHEG_PRINT(out,
"Synchronous event queue:");
440 for (tail = 0; tail != the_sync_q->slen; tail++)
442 MHEG_PRINT(out,
"Event from (");
443 MHEG5stringPrint(the_sync_q->links[tail]->ingredient.root.grp->groupName, out);
444 MHEG_PRINT(out,
" ");
445 MHEG5intPrint(the_sync_q->links[tail]->ingredient.root.id, out);
446 MHEG_PRINT(out,
") ");
447 MHEG5eventPrint(the_sync_q->links[tail]->eventType, out);
448 MHEG5intPrint(the_sync_q->links[tail]->eventData.value.i, out);
454 extern int mheg_trace_source;
456 void MHEG5PrintEvent(MHEG5EventType e, MHEG5Int
id)
460 if (mheg_trace_source & 2)
462 ind = (event_indent_num << 1) % MAX_EVENT_INDENT;
471 strcat(buff, MHEG5eventToString(e));
474 MHEG5intPrint(
id, buff);
481 static void TraceEvent(
MHEG5Link *link )
487 ind = (event_indent_num << 1) % MAX_EVENT_INDENT;
497 DBG_PRINTF( MHEG5eventToString(link->eventType));
498 grp_ptr = link->ingredient.root.grp;
499 DBG_PRINTF(
" link: %c%ld ", (grp_ptr->root.clazz == MHEG5SCENE) ?
'S' :
'A', link->ingredient.root.id );
502 if ((grp_ptr == link->sourcegid.ptr.group) ||
503 ((link->sourcegid.len != 0) &&
MHEG5sameGroup(grp_ptr, link->sourcegid)))
505 DBG_PRINTF(
" src: A%ld", link->source );
509 DBG_PRINTF(
" src: S%ld", link->source );
511 if (link->eventData.type == MHEG5INT)
513 DBG_PRINTF(
" data: %ld", link->eventData.value.i );
515 else if (link->eventData.type == MHEG5BOOL)
517 if (link->eventData.value.b)
519 DBG_PRINTF(
" data: TRUE" );
523 DBG_PRINTF(
" data: FALSE" );
539 ind = (event_indent_num << 1) % MAX_EVENT_INDENT;
549 DBG_PRINTF(MHEG5actionToString(a));
555 sprintf(tmp,
"%c%ld ", (at->grp->root.clazz == MHEG5SCENE) ?
'S' :
'A', at->id);
560 sprintf(tmp,
"%c%ld->%c%ld ", (at->grp->root.clazz == MHEG5SCENE) ?
'S' :
'A', at->id,
561 (t->grp->root.clazz == MHEG5SCENE) ?
'S' :
'A', t->id );
567 switch (l->generic.type)
573 assert( !l->generic.indirect );
574 sprintf(tmp,
"%ld", l->generic.value.i);
578 if (l->generic.value.b)
580 strcat(buff,
"true");
584 strcat(buff,
"false");
589 case MHEG5CONTENTREF:
593 case MHEG5OCTETSTRING:
594 assert( !l->generic.indirect );
595 MHEG5stringTrace(l->generic.value.s, buff, 0, 100);
597 case MHEG5BRACKETOPEN:
600 case MHEG5BRACKETCLOSE:
604 strcat(buff, MHEG5eventToString(l->generic.value.e));
607 sprintf(tmp,
"%ld,", l->generic.value.p.x);
609 sprintf(tmp,
"%ld", l->generic.value.p.y);
614 at = MHEG5findObject(l->generic.value.o.gref, l->generic.value.o.id);
617 strcat(buff,
"UNKNOWN:");
618 if (l->generic.value.o.gref.len)
621 MHEG5stringTrace( *((
MHEG5String *)&l->generic.value.o.gref), buff, 0, 100 );
622 sprintf(tmp,
" %ld)", l->generic.value.o.id);
626 sprintf(tmp,
"%ld", l->generic.value.o.id);
632 sprintf(tmp,
"%c%ld", (at->grp->root.clazz == MHEG5SCENE) ?
'S' :
'A', at->id);
634 if (l->generic.indirect && at->clazz == MHEG5OBJECTREFVARIABLE)
636 t = MHEG5resolveRealObject( at );
639 strcat(buff,
"->BAD");
643 sprintf(tmp,
"->%c%ld", (t->grp->root.clazz == MHEG5SCENE) ?
'S' :
'A', t->id );
650 strcat(buff,
"// :InternalError ");
654 if (strlen(buff) > 196)
665 static void TraceActionError(
MHEG5Root *target, MHEG5ElemActionType type,
669 id = (target) ? target->id : -1;
670 if (mheg_trace_debug & TACTIONS)
676 case MHEG5ERR_NOTYETSUPPORTED:
677 TRACE(TERROR, (
"%s(%d) not supported", MHEG5actionToString(type),
id))
679 case MHEG5ERR_NOTSUPPORTEDBYPROFILE:
680 if (extra_trace_param != 0)
682 TRACE(TERROR, (
"%s(%d) \"%s\" not supported by profile", MHEG5actionToString(type),
id, (
char *)extra_trace_param))
686 TRACE(TERROR, (
"%s(%d) not supported by profile", MHEG5actionToString(type),
id))
689 case MHEG5ERR_WRONGNUMBEROFPARAMS:
690 TRACE(TERROR, (
"%s(%d) had wrong number of params", MHEG5actionToString(type),
id))
692 case MHEG5ERR_TARGETNOTAVAILABLE:
695 TRACE(TERROR, (
"%s - target object does not exist", MHEG5actionToString(type)))
702 case MHEG5ERR_WRONGTARGET:
703 TRACE(TERROR, (
"%s(%d) - wrong type of target object", MHEG5actionToString(type),
id))
705 case MHEG5ERR_REFERENCEDPARAMNOTAVAILABLE:
706 TRACE(TERROR, (
"%s(%d) - param not available", MHEG5actionToString(type),
id))
708 case MHEG5ERR_WRONGPARAM:
709 TRACE(TERROR, (
"%s(%d) - wrong type of param", MHEG5actionToString(type),
id))
711 case MHEG5ERR_PARAMNOTACTIVE:
712 TRACE(TERROR, (
"%s(%d) - one param is not active", MHEG5actionToString(type),
id))
714 case MHEG5ERR_NOSCENE:
715 TRACE(TERROR, (
"%s(%d) - missing current scene", MHEG5actionToString(type),
id))
717 case MHEG5ERR_TARGETNOTACTIVE:
718 TRACE(TERROR, (
"%s(%d) - target not active", MHEG5actionToString(type),
id))
720 case MHEG5ERR_NOSUCHITEM:
721 TRACE(TERROR, (
"%s(%d) - no such tokengroup item %d", MHEG5actionToString(type),
id, extra_trace_param >> 16))
723 case MHEG5ERR_NOSUCHSLOT:
724 TRACE(TERROR, (
"%s(%d) - no slot for token position %d, slot %d", MHEG5actionToString(type),
id, extra_trace_param >> 16, extra_trace_param & 0xffff))
750 MHEG5eventPrint((MHEG5EventType)eventItem->e_type, eventName);
751 MHEG5intPrint(eventItem->e_data,
generic);
752 DEBUG_PRINT((
"INFO: Testing event source ( %d ), type %s, data %s\n", eventItem->e_id, eventName,
generic));
764 static void printAction(
MHEG5Root *t, MHEG5ElemActionType type,
770 MHEG5LogPrintf(MHEG5MESSAGE,
"ElementaryAction ");
771 MHEG5LogPrintAction(MHEG5MESSAGE, type );
772 MHEG5LogPrintf(MHEG5MESSAGE,
" from object ");
773 MHEG5LogPrintObjectRef(MHEG5MESSAGE, t->grp, 0);
774 MHEG5LogPrintf(MHEG5MESSAGE,
" - ");
776 paramList = firstParam;
781 MHEG5genericPrint(paramList->generic, buf, 0);
782 MHEG5LogPrintf(MHEG5MESSAGE,
"%s ", buf);
785 while (!paramList->generic.isfirst);
787 MHEG5LogPrintf(MHEG5MESSAGE,
"\n");
790 static void printActionError(
MHEG5Root *target, MHEG5ElemActionType type,
793 MHEG5LogPrintf(MHEG5WARNING,
"ERROR: ElementaryAction ");
794 MHEG5LogPrintAction(MHEG5WARNING, type );
795 MHEG5LogPrintf(MHEG5WARNING,
" from object ");
796 MHEG5LogPrintObjectRef(MHEG5WARNING, target->grp, 0);
797 MHEG5LogPrintf(MHEG5WARNING,
" - ");
800 MHEG5LogPrintf(MHEG5WARNING,
" target ID %d - ", target->id);
804 MHEG5LogPrintf(MHEG5WARNING,
" No target specified");
808 case MHEG5ERR_NOTYETSUPPORTED:
809 MHEG5LogPrintf(MHEG5WARNING,
"action not supported by this engine");
811 case MHEG5ERR_NOTSUPPORTEDBYPROFILE:
812 MHEG5LogPrintf(MHEG5WARNING,
"action not supported by profile %s", MHEG5PROFILEID);
814 case MHEG5ERR_WRONGNUMBEROFPARAMS:
815 MHEG5LogPrintf(MHEG5WARNING,
"wrong number of params given");
817 case MHEG5ERR_TARGETNOTAVAILABLE:
818 MHEG5LogPrintf(MHEG5WARNING,
"target object is not available");
820 case MHEG5ERR_WRONGTARGET:
821 MHEG5LogPrintf(MHEG5WARNING,
"wrong type of target object");
823 case MHEG5ERR_REFERENCEDPARAMNOTAVAILABLE:
824 MHEG5LogPrintf(MHEG5WARNING,
"param not available");
826 case MHEG5ERR_WRONGPARAM:
827 MHEG5LogPrintf(MHEG5WARNING,
"wrong type of param");
829 case MHEG5ERR_PARAMNOTACTIVE:
830 MHEG5LogPrintf(MHEG5WARNING,
" action aborted because one param is not active");
832 case MHEG5ERR_NOSCENE:
833 MHEG5LogPrintf(MHEG5WARNING,
" action aborted because of missing current scene");
835 case MHEG5ERR_TARGETNOTACTIVE:
836 MHEG5LogPrintf(MHEG5WARNING,
" action aborted because target not active");
838 case MHEG5ERR_NOSUCHITEM:
839 MHEG5LogPrintf(MHEG5WARNING,
" action aborted because no such tokengroup item");
841 case MHEG5ERR_NOSUCHSLOT:
842 MHEG5LogPrintf(MHEG5WARNING,
" action aborted - no action slot found");
847 MHEG5LogPrintf(MHEG5WARNING,
"\n");
858 int MHEG5InitQueues(
void)
862 if (frst_a_queue != NULL)
865 if (the_sync_q != NULL)
868 TRACE(TKEYS, (
"state_mutex=%d", state_mutex))
869 if (state_mutex != NULL)
874 CriticalMessageArrived, CriticalMessageProcessed );
876 frst_a_queue->next = NULL;
877 frst_a_queue->tail = 0;
878 frst_a_queue->head = 0;
879 last_a_queue = frst_a_queue;
881 the_sync_q->size = SYNC_Q_SIZE;
882 the_sync_q->slen = 0;
886 MHEG5freeMem(frst_a_queue);
887 MHEG5freeMem(the_sync_q);
895 MHEG5freeMem(frst_a_queue);
920 queueEvents = MHEG5FALSE;
926 DEBUG_PRINT((
"INFO: MHEG5queueReset clearing event and action queues\n"));
927 TRACE(TEVNTS, (
"*************** QUEUE RESET *****************\n"))
928 e_q = frst_a_queue->next;
935 frst_a_queue->tail = frst_a_queue->head;
936 frst_a_queue->next = 0;
937 last_a_queue = frst_a_queue;
939 assert( the_sync_q->size == SYNC_Q_SIZE );
940 the_sync_q->slen = 0;
942 i = mainActionListHead;
943 while (i != mainActionListTail)
945 mainActionLists[i].a_ptr = NULL;
946 mainActionLists[i].total = 0;
947 #if defined(MH5PRINTOUT) || defined(TRACING) 948 mainActionLists[i].indent = 0;
951 i &= ACTION_LIST_MASK;
954 userInputEventCount = 0;
965 TRACE(TEVNTS, (
"**** Scene=%p, e_q->tail=0x%x, e_q->head=0x%x ****\n", grp, e_q->tail, e_q->head))
969 for (t = e_q->tail; t != e_q->head; t++)
971 if (e_q->events[t].e_grp == (
MHEG5Group *)grp)
973 e_q->events[t].e_grp = NULL;
974 e_q->events[t].e_id = 0;
975 e_q->events[t].e_type = MHEG5NONEEVENT;
982 assert( the_sync_q->size == SYNC_Q_SIZE );
983 the_sync_q->slen = 0;
984 i = mainActionListHead;
985 while (i != mainActionListTail)
987 mainActionLists[i].a_ptr = NULL;
988 mainActionLists[i].total = 0;
989 #if defined(MH5PRINTOUT) || defined(TRACING) 990 mainActionLists[i].indent = 0;
994 i &= ACTION_LIST_MASK;
997 userInputEventCount = 0;
1000 void MHEG5ExitQueues(
void)
1002 if (frst_a_queue != NULL)
1004 MHEG5freeMem(frst_a_queue);
1005 frst_a_queue = NULL;
1007 if (the_sync_q != NULL)
1009 MHEG5freeMem(the_sync_q);
1012 if (state_mutex != NULL)
1018 if (queue_notify_hdl != NULL)
1021 queue_notify_hdl = NULL;
1024 userInputEventCount = 0;
1034 unsigned int newTail = (mainActionListTail + 1) & ACTION_LIST_MASK;
1036 if (newTail == mainActionListHead)
1039 TRACE(TERROR, (
"Eeek! MainActionLists is FULL"))
1045 mainActionLists[mainActionListTail] = actions;
1046 #if defined(MH5PRINTOUT) || defined(TRACING) 1047 mainActionLists[mainActionListTail].indent = 1;
1049 mainActionListTail = newTail;
1060 static void doAsyncEvent(
S_EventInfo *eventItem )
1066 link = activeLinksHead[eventItem->e_type];
1068 if (eventItem->e_type == MHEG5USERINPUT)
1071 TRACE(TKEYS, (
": User Input, Edata=%d", eventItem->e_data))
1073 userInputEventCount--;
1076 #if defined(MH5PRINTOUT) || defined(TRACING) 1077 event_indent_num = 0;
1085 assert( eventItem->e_grp != NULL );
1088 assert((
unsigned int)eventItem->e_grp != 0xfeeefeee);
1091 if (link->source == eventItem->e_id)
1094 assert( !eventItem->e_clone );
1097 if ((link->eventData.type == MHEG5NONE) ||
1098 ((link->eventData.type == MHEG5INT) && (link->eventData.value.i == eventItem->e_data)) ||
1099 ((link->eventData.type == MHEG5BOOL) && (link->eventData.value.b == eventItem->e_data)))
1102 if ((eventItem->e_grp == link->sourcegid.ptr.group) ||
1103 ((link->sourcegid.len != 0) &&
MHEG5sameGroup(eventItem->e_grp, link->sourcegid)))
1108 TRACE(TERROR, (
"more than one link (%d) fires: Link %ld", cnt, link->ingredient.root.id))
1112 MHEG5PrintEvent(eventItem->e_type, eventItem->e_id);
1115 DBGTraceEvent( link );
1122 link = link->nextActiveLink;
1131 static void processSyncEvents(
void)
1133 MHEG5Link **pLinks = the_sync_q->links + the_sync_q->slen;
1138 mainActionListHead--;
1139 mainActionListHead &= ACTION_LIST_MASK;
1140 if (mainActionListHead == mainActionListTail)
1147 #ifndef ENABLE_RED_KEY_IN_3_11C 1151 mainActionListHead++;
1152 mainActionListHead &= ACTION_LIST_MASK;
1154 while (mainActionListHead != mainActionListTail &&
1155 mainActionLists[mainActionListHead].total == 0);
1156 mainActionListHead--;
1157 mainActionListHead &= ACTION_LIST_MASK;
1158 if (mainActionListHead == mainActionListTail)
1161 TRACE(TERROR, (
"Eeek! Head reached tail"))
1162 mainActionListHead++;
1163 mainActionListHead &= ACTION_LIST_MASK;
1168 mainActionLists[mainActionListHead] = (*pLinks)->linkEffect;
1169 #if defined(MH5PRINTOUT) || defined(TRACING) 1170 mainActionLists[mainActionListHead].indent = event_indent_num + 1;
1174 while (the_sync_q->slen);
1185 while (actions.total)
1187 if (element_act[(
int)actions.a_ptr->type].stat != NOTHING &&
1188 actions.a_ptr->target == NULL)
1190 params = actions.a_ptr->firstParam;
1191 actions.a_ptr->targetIsIndirect = params->generic.indirect;
1192 actions.a_ptr->firstParam = MHEG5resolveORef( params, &actions.a_ptr->target );
1206 while (actions.total)
1208 actions.a_ptr->firstParam = actions.a_ptr->origFirstParam;
1209 actions.a_ptr->target = NULL;
1222 static void processActions(
void)
1226 E_RQ_STATUS rq_stat;
1230 while (mainActionListHead != mainActionListTail)
1232 while (mainActionLists[mainActionListHead].total != 0)
1235 action = mainActionLists[mainActionListHead].a_ptr;
1236 mainActionLists[mainActionListHead].a_ptr++;
1237 mainActionLists[mainActionListHead].total--;
1238 #if defined(MH5PRINTOUT) || defined(TRACING) 1239 event_indent_num = mainActionLists[mainActionListHead].indent;
1242 #ifdef DEBUG_ACTION_ENUMS 1243 assert( action->magic == ACTION_MAGIC_VAL );
1245 assert( action->type > MHEG5NONEACTION );
1246 assert( action->type < ACTION_LAST );
1249 rq_stat = element_act[(int)action->type].stat;
1250 if (rq_stat == NOTHING)
1256 target = action->target;
1257 if (action->targetIsIndirect && target != NULL)
1259 target = MHEG5resolveRealObject( target );
1266 if (!target->runningStatus)
1271 if (!target->availabilityStatus)
1282 if (rq_stat == NOTHING)
1284 DBGPrintAction( action->target, target, action->type, action->firstParam )
1287 ASSIGN_RC element_act[(int)action->type].func( target, action->firstParam );
1289 DBGCheckRC( target, action->type, action->firstParam )
1292 if (displayUpdateRequested)
1296 displayUpdateRequested = MHEG5FALSE;
1301 if (the_sync_q->slen)
1303 processSyncEvents();
1306 if (processing_state > DEFER_ASYNC_EVENTS)
1312 assert( mainActionLists[mainActionListHead].total == 0 );
1313 mainActionListHead++;
1314 mainActionListHead &= ACTION_LIST_MASK;
1321 displayUpdateRequested = MHEG5FALSE;
1336 unsigned int newHead;
1339 processing_state &= ~DEFER_ASYNC_EVENTS;
1342 if (processing_state == DO_ANY_EVENT)
1346 if (the_sync_q->slen)
1348 processSyncEvents();
1360 assert( frst_a_queue );
1364 a_queue = frst_a_queue;
1366 while (processing_state == DO_ANY_EVENT && a_queue->tail != a_queue->head)
1368 doAsyncEvent( a_queue->events + a_queue->tail );
1378 if (a_queue->next && (a_queue->tail == a_queue->head))
1382 frst_a_queue = a_queue->next;
1383 MHEG5freeMem(a_queue);
1407 E_RQ_STATUS rq_stat;
1411 temp_event_q.size = SHORT_Q_SIZE;
1412 temp_event_q.slen = 0;
1413 tmp_action_q[0] = act_q;
1414 action_list_ptr = tmp_action_q + 1;
1417 save_sync_q = the_sync_q;
1420 #if defined(MH5PRINTOUT) || defined(TRACING) 1427 while (action_list_ptr->total != 0)
1429 action = action_list_ptr->a_ptr;
1430 action_list_ptr->a_ptr++;
1431 action_list_ptr->total--;
1433 assert((action->type != MHEG5LAUNCH) && (action->type != MHEG5QUIT) &&
1434 (action->type != MHEG5SPAWN) && (action->type != MHEG5TRANSITIONTO));
1436 assert( action->type > MHEG5NONEACTION );
1437 assert( action->type < ACTION_LAST );
1439 rq_stat = element_act[(int)action->type].stat;
1440 if (rq_stat == NOTHING)
1446 target = action->target;
1447 if (action->targetIsIndirect && target != NULL)
1449 target = MHEG5resolveRealObject( target );
1455 case RUNNING:
if (!target->runningStatus)
1457 case AVAILABLE:
if (!target->availabilityStatus)
1466 if (rq_stat == NOTHING)
1468 DBGPrintAction( action->target, target, action->type, action->firstParam );
1471 ASSIGN_RC element_act[(int)action->type].func( target, action->firstParam );
1473 DBGCheckRC( target, action->type, action->firstParam )
1477 if (temp_event_q.slen != 0)
1479 MHEG5Link *link = temp_event_q.links[0];
1482 temp_event_q.slen--;
1484 *action_list_ptr = link->linkEffect;
1487 while (temp_event_q.slen != 0);
1490 assert( action_list_ptr->total == 0 );
1491 }
while (action_list_ptr != tmp_action_q);
1493 the_sync_q = save_sync_q;
1494 action_list_ptr = NULL;
1504 if (action_list_ptr != NULL)
1507 *action_list_ptr = actions;
1511 mainActionListHead--;
1512 mainActionListHead &= ACTION_LIST_MASK;
1515 mainActionLists[mainActionListHead] = actions;
1517 #if defined(MH5PRINTOUT) || defined(TRACING) 1518 mainActionLists[mainActionListHead].indent = event_indent_num + 1;
1530 queueEvents = MHEG5TRUE;
1545 assert( a_type >= MHEG5ANCHORFIRED );
1549 INFO_PRINT((
"INFO: MHEG5sendEvent: Ignoring event %d - source is invalid\n", a_type));
1556 INFO_PRINT((
"INFO: MHEG5sendEvent: Ignoring event %d (from %ld) - queueEvents is FALSE\n", a_type, source->id));
1560 if (a_type == MHEG5USERINPUT)
1563 TRACE(TKEYS, (
": User Input, Edata=%d", data))
1565 if (userInputEventCount == MAX_USER_EVENTS)
1568 INFO_PRINT((
"INFO: MHEG5sendEvent: Too many user input events\n"));
1590 new_tail = last_a_queue->head;
1592 if (new_tail == last_a_queue->tail)
1596 if (last_a_queue->next == NULL)
1601 last_a_queue = last_a_queue->next;
1602 last_a_queue->next = NULL;
1603 last_a_queue->tail = 0;
1604 last_a_queue->head = 1;
1605 newInfo = last_a_queue->events;
1609 newInfo = last_a_queue->events + last_a_queue->head;
1610 last_a_queue->head = new_tail;
1614 newInfo->e_grp = source->grp;
1615 newInfo->e_id = source->id;
1616 newInfo->e_type = (U16BIT)a_type;
1617 newInfo->e_data = data;
1619 if (source->clazz == MHEG5SCENE || source->clazz == MHEG5APPLICATION)
1620 newInfo->e_clone = MHEG5FALSE;
1624 if (a_type == MHEG5USERINPUT)
1626 userInputEventCount++;
1655 MHEG5Int source_id = source->id;
1656 #ifdef REVERSE_MULTIPLE_LINK_ORDER 1661 assert( e_type < MHEG5ANCHORFIRED );
1666 INFO_PRINT((
"INFO: MHEG5sendSync: Ignoring event %d (from %ld) - queueEvents is FALSE\n", e_type, source->id));
1673 link = activeLinksHead[e_type];
1678 assert( link->ingredient.root.runningStatus );
1681 if (link->source == source_id)
1684 if ((link->eventData.type == MHEG5NONE) ||
1685 ((link->eventData.type == MHEG5INT) && (link->eventData.value.i == e_data)) ||
1686 ((link->eventData.type == MHEG5BOOL) && (link->eventData.value.b == e_data)))
1689 if ((source->grp == link->sourcegid.ptr.group) ||
1690 ((link->sourcegid.len != 0) &&
MHEG5sameGroup(source->grp, link->sourcegid)))
1695 #ifdef REVERSE_MULTIPLE_LINK_ORDER 1701 links[count++] = link;
1705 if (the_sync_q->slen != the_sync_q->size)
1711 the_sync_q->links[the_sync_q->slen] = link;
1715 TRACE(TERROR, (
"more than one link (%d) fires: Link %ld", count, link->ingredient.root.id))
1725 link = link->nextActiveLink;
1728 #ifdef REVERSE_MULTIPLE_LINK_ORDER 1731 if (the_sync_q->slen != the_sync_q->size)
1733 the_sync_q->links[the_sync_q->slen] = links[count];
1759 assert(eventProcessingDisableCount > 0);
1762 eventProcessingDisableCount--;
1764 if (eventProcessingDisableCount <= 0)
1768 processing_state &= ~SUSPEND_EVENTS;
1774 assert(eventProcessingDisableCount <= 1);
1777 eventProcessingDisableCount++;
1783 processing_state |= SUSPEND_EVENTS;
1797 eventProcessingDisableCount = 0;
1799 processing_state &= ~SUSPEND_EVENTS;
1809 static void MHEG5DeferProcessing(
void)
1812 processing_state |= DEFER_ASYNC_EVENTS;
1822 void CriticalMessageArrived(
void)
1825 critical_msg_count++;
1826 processing_state |= STOP_ALL_EVENTS;
1835 void CriticalMessageProcessed(
void)
1838 assert( critical_msg_count > 0 );
1839 if (critical_msg_count > 0)
1841 critical_msg_count--;
1842 if (critical_msg_count == 0)
1844 processing_state &= ~STOP_ALL_EVENTS;
1857 displayUpdateRequested = MHEG5TRUE;
void MHEG5sendEvent(MHEG5Root *source, MHEG5EventType a_type, MHEG5Int data)
Store an event in the asynchronous event queue .
MHEG5ErrorCode MHEG5subtract(MHEG5Root *target, MHEG5GList *params)
Subtract Value from Target Variable. Target variable is the first operand of the infix operation...
MHEG5ErrorCode MHEG5sendEventAction(MHEG5Root *target, MHEG5GList *params)
The actions inserts an event defined by the given parameters into the systems event queue...
MHEG5ErrorCode MHEG5clone(MHEG5Root *target, MHEG5GList *params)
Implementation of the Clone action Clone (CloneRefVar) If the engine supports the Cloning option the ...
MHEG5ErrorCode MHEG5getLineWidth(MHEG5Root *target, MHEG5GList *params)
Retrieve the current Line Width of the DynamicLineart object Implementation of the GetLineWidth actio...
MHEG5ErrorCode MHEG5move(MHEG5Root *target, MHEG5GList *params)
Move the token between elements of the group. The movement to apply from any particular element locat...
MHEG5Bool MHEG5sameGroup(MH5GroupPtr gptr, MH5GroupRef gref)
Compares group ptr with group ref to see whether they both reference the same group. The first is pointer to group, the second can be a relative group name and will be converted to absolute prior to the comparison, so two different references that resolve to reference the same group name produces a True return value.
MHEG5ErrorCode MHEG5getListItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup GetListItem elementary action.
Event to String conversion.
MHEG5ErrorCode MHEG5getFirstItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup GetFirstItem elementary action.
MHEG5ErrorCode MHEG5openConnection(MHEG5Root *target, MHEG5GList *params)
Impelemtation of the OpenConnection (OpenSucceeded, Protocol, Address, ConnectionTag) action of the a...
MHEG5ErrorCode MHEG5getLineColour(MHEG5Root *target, MHEG5GList *params)
Retrieve the current LineColour of the DynamicLineart Object Implementation of the GetLineColour acti...
MHEG5ErrorCode MHEG5getListSize(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup GetListSize elementary action.
MHEG5ErrorCode MHEG5setCursorShape(MHEG5Root *target, MHEG5GList *params)
This action sets a new cursor shape. Implementation of the SetCursorShape (NewCursorShape) action of ...
void MHEG5stopEventsAndResetQueue(void)
Discard any pending events and actions and prevent future events from being queued. And reset queues. See also MHEG5queueEvents.
MHEG5ErrorCode MHEG5preload(MHEG5Root *target, MHEG5GList *params)
Implementation of the Preload action Preload Prepares an Ingredient and provides a hint to the MHEG-5...
MHEG5ErrorCode MHEG5setCounterTrigger(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to update the list of CounterTriggers for a Stream object SetCounterTrig...
MHEG5ErrorCode MHEG5unload(MHEG5Root *target, MHEG5GList *params)
Implementation of the Unload action Unload Destroys an Ingredient and provides a hint to the MHEG-5 e...
void MHEG5queueUnresolveTargets(MHEG5ActionList actions)
Clear targets for the action list.
MHEG5ErrorCode MHEG5getVideoDecodeOffset(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetVideoDecodeOffset (XOffsetVar, YOffsetVar) action of the video class...
MHEG5ErrorCode MHEG5setFirstItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup SetFirstItem elementary action.
MHEG5ErrorCode MHEG5deselectItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup DeselectItem elementary action.
MHEG5ErrorCode MHEG5setTextColour(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to set the TextColour to the given colour. Implementation of the MHEG5se...
void MHEG5displayUpdate(void)
Update the display, redrawing any visible objects that are in the dirty rectangle.
void STB_OSDeleteMutex(void *mutex)
Delete a mutex.
void MHEG5displayUnlockStreams(void)
Unlock streams, allow stream updates.
MHEG5ErrorCode MHEG5getAvailabilityStatus(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetAvailabilityStatus action GetAvailabilityStatus (AvailabilityStatusVar) Set ...
MHEG5ErrorCode MHEG5getOverwriteMode(MHEG5Root *target, MHEG5GList *params)
Retrieve the overwrite mode of the entryfield Implementation of the GetOverwriteMode action of the en...
MHEG5ErrorCode MHEG5getEngineSupport(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetEngineSupport action of the application class GetEngineSupport (Feature...
MHEG5ErrorCode MHEG5getRunningStatus(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetRunningStatus action GetRunningStatus (RunningStatusVar) Set the Variable re...
MHEG5ErrorCode MHEG5setVideoDecodeOffset(MHEG5Root *target, MHEG5GList *params)
Implementation of the SetVideoDecodeOffset (NewXOffset, NewYOffset) action of the video class...
MHEG5ErrorCode MHEG5getBoxSize(MHEG5Root *target, MHEG5GList *params)
Returns the size of the bounding box of the target Visible. Implementation of the GetBoxSize (XBoxSiz...
MHEG5ErrorCode MHEG5unlockScreen(MHEG5Root *target, MHEG5GList *params)
Impelemtation of the UnlockScreen action of the application class This action may refresh the display...
MHEG5ErrorCode MHEG5setCounterEndPosition(MHEG5Root *target, MHEG5GList *params)
Implementation of the SetCounterEndPosition (Target, NewPosition) action of the stream class...
MHEG5ErrorCode MHEG5drawArc(MHEG5Root *target, MHEG5GList *params)
Draws an arc between "StartAngle" and "StartAngle" + "ArcAngle". Implementation of the DrawArc action...
void initialiseActiveLinkQs(void)
<Function description>="">
MHEG5ErrorCode MHEG5getTextData(MHEG5Root *target, MHEG5GList *params)
Set the Variable referenced by TextDataVar to the value of the TextData attribute. Implementation of the GetTextData (Target, TextDataVar) action of the text class.
MHEG5ErrorCode MHEG5addItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup AddItem elementary action.
void MHEG5sendSync(MHEG5Root *source, MHEG5EventType e_type, MHEG5Int e_data)
Store an event in the synchronous event queue.
MHEG5ErrorCode MHEG5multiply(MHEG5Root *target, MHEG5GList *params)
Multiplies Target Variable by Value. Target variable is the first operand of the infix operation...
MHEG5ErrorCode MHEG5setBackgroundColour(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to set the BackgroundColour to the given colour. Implementation of the M...
MHEG5ErrorCode MHEG5step(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to modify the SliderValue of the target by the number given...
MHEG5ErrorCode MHEG5run(MHEG5Root *target, MHEG5GList *params)
<Function description>="">
MHEG5ErrorCode MHEG5setEntryPoint(MHEG5Root *target, MHEG5GList *params)
Set the entrypoint for the entryfield Implementation of the SetEntryPoint action of the entryfield cl...
MHEG5ErrorCode MHEG5putBehind(MHEG5Root *target, MHEG5GList *params)
Put a Visible exactly below another Visible in the display stack. Implementation of the PutBehind (Re...
void MHEG5requestDisplayUpdate(void)
Request display update at the end of synchronous event processing Note that this function can only be...
MHEG5ErrorCode MHEG5drawRectangle(MHEG5Root *target, MHEG5GList *params)
Draws a rectangle. Implementation of the DrawRectangle action of the dynamiclineart class...
MHEG5ErrorCode MHEG5divide(MHEG5Root *target, MHEG5GList *params)
Divides Target Variable by Value. Target variable is the first operand of the infix operation...
MHEG5ErrorCode MHEG5drawPolygon(MHEG5Root *target, MHEG5GList *params)
Draw a closed polygon. Implementation of the DrawPolygon action of the dynamiclineart class...
MHEG5ErrorCode MHEG5setInputRegister(MHEG5Root *target, MHEG5GList *params)
Change the InputEventRegister attribute of the target Scene object. Changing the register will affect...
MHEG5ErrorCode MHEG5setBitmapDecodeOffset(MHEG5Root *target, MHEG5GList *params)
Implementation of the SetBitmapDecodeOffset (NewXOffset, NewYOffset) action of the bitmap class...
MHEG5ErrorCode MHEG5getCellItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup GetCellItem elementary action.
MHEG5ErrorCode MHEG5delItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup DelItem elementary action.
MHEG5ErrorCode MHEG5setData(MHEG5Root *target, MHEG5GList *params)
Implementation of SetData action SetData (NewContent) Set the Content attribute of the target Ingredi...
void STB_OSMutexUnlock(void *mutex)
Unlock a mutex (a.k.a. 'leave', 'signal' or 'release')
MHEG5ErrorCode MHEG5closeConnection(MHEG5Root *target, MHEG5GList *params)
Impelemtation of the CloseConnection(ConnectionTag) action of the application class |NOT IMPLEMENTED...
void MHEG5sendAppEngineEvent(E_ENGINE_EVENT engine_event)
Store an Engine event in the asynchronous event queue.
MHEG5ErrorCode MHEG5storePersistent(MHEG5Root *target, MHEG5GList *params)
Implementation of the StorePersistent (StoreSucceeded, InVariables, OutFileName) action from the appl...
MHEG5ErrorCode MHEG5sendToBack(MHEG5Root *target, MHEG5GList *params)
Put a Visible at the background of the screen. Implementation of the SendToBack action of the visible...
This file defines the profile for the MHEG engine.
MHEG5ErrorCode MHEG5add(MHEG5Root *target, MHEG5GList *params)
Add Target Variable to Value. Target variable is the first operand of the infix operation. Result is stored in Target Variable. Implementation of the Add (Value) action of the IntegerVariable class.
void * VQ_RegisterNotify(F_QueueNotify normal_rcvd, F_QueueNotify critical_rcvd, F_QueueNotify critical_done)
MHEG5ErrorCode MHEG5moveTo(MHEG5Root *target, MHEG5GList *params)
Move the token to a specific element of the group. Implementation of the MoveTo (Target, Index) action of the TokenManager class.
Implement Functions to support Service Gateways. Functions for standarizing several GroupIDs like +DS...
MHEG5ErrorCode MHEG5setDesktopColour(MHEG5Root *target, MHEG5GList *params)
Impelemtation of the SetDesktopColour action of the application class This action may refresh the dis...
MHEG5ErrorCode MHEG5readPersistent(MHEG5Root *target, MHEG5GList *params)
Implementation of the ReadPersistent (ReadSucceded, OutVariables, InFileName) action from the applica...
MHEG5ErrorCode MHEG5getFillColour(MHEG5Root *target, MHEG5GList *params)
Retrieve the current FillColour of the Dynamic Lineart object. Implementation of the GetFillColour ac...
void * STB_OSCreateMutex(void)
Create a mutex.
MHEG5ErrorCode MHEG5getPortion(MHEG5Root *target, MHEG5GList *params)
This action retrieves the size of the slider portion and stores it in the PortionVar, which is passed to this action as the second parameter. Implementation of the GetPortion (Target, PortionVar) action of the slider class.
MHEG5ErrorCode MHEG5setSpeed(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to change the speed in which the stream is displayed. Implementation of the SetSpeed (Target, NewSpeed) action of the stream class. SetSpeed (NewSpeed) Change the presentation speed of a stream. Execute the following sequence of actions:
MHEG5ErrorCode MHEG5setInputMask(MHEG5Root *target, MHEG5GList *params)
Change the InputMask attribute of the target Scene object. Changing the registermask will affect how ...
Event handling. Implementation of a combined queue for events and actions. This is the eventsystem wh...
MHEG5ErrorCode MHEG5getCursorPosition(MHEG5Root *target, MHEG5GList *params)
The effect of this action is that the current cursor position is retrieved and stored in the given va...
MHEG5ErrorCode MHEG5getVolume(MHEG5Root *target, MHEG5GList *params)
Returns the volume of an Audio. Implementation of the GetVolume (VolumeVar) action of the audio class...
void MHEG5PrependActionList(MHEG5ActionList actions)
The supplied list of actions should execute before others on the queue.
MHEG5ErrorCode MHEG5testVariable(MHEG5Root *target, MHEG5GList *params)
This action tests variables agains each other or against values Implementation of the TestVariable (T...
void MHEG5queueResolveTargets(MHEG5ActionList actions)
Finds targets for the action list.
MHEG5ErrorCode MHEG5setPortion(MHEG5Root *target, MHEG5GList *params)
This action sets the portion of the slider to a new value, given as the second parameter to this acti...
MHEG5ErrorCode MHEG5setVolume(MHEG5Root *target, MHEG5GList *params)
Change the volume of an audio. Implementation of the SetVolume (NewVolume) action of the audio class...
MHEG5ErrorCode MHEG5selectItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup SelectItem elementary action.
void MHEG5AppendActionList(MHEG5ActionList actions)
The supplied list of actions should execute after any already on queue.
Implement functions to retrieve MHEG5objects by GroupID and ID.
Implementation of the MHEG5 Application Class Defines a set of Ingredient objects, which are shared within an application scope. Base class: Group Subclasses: None Status: Concrete class.
void MHEG5actionListExecute(MHEG5Group *source, MHEG5ActionList act_q)
Execute the supplied list of actions immediately. The actions will have been executed by the time the...
MHEG5ErrorCode MHEG5setSliderValue(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to set the SliderValue to the given value. Implementation of the SetSlid...
MHEG5ErrorCode MHEG5getTextContent(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to transfer the data of the content attribute of the text to the variabl...
Mheg5 logging and debug printing.
void MHEG5enableEventProcessing(MHEG5Bool enable)
Enable or disable engine event processing. This function is used to implement the Call action for res...
MHEG5ErrorCode MHEG5clear(MHEG5Root *target, MHEG5GList *params)
Fills up the bounding box with the OriginalRefFillColour. Implementation of the Clear action of the d...
MHEG5ErrorCode MHEG5setVariable(MHEG5Root *target, MHEG5GList *params)
Set the Value attribute of the Target object to NewVariableValue. Implementation of the SetVariable (...
MHEG5ErrorCode MHEG5transitionTo(MHEG5Root *target, MHEG5GList *params)
This function performs the TransitionTo action which leads to a new scene. Implementation of the Tran...
MHEG5ErrorCode MHEG5scaleBitmap(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to scale the contents of the Bitmap to the size (XScale, YScale). Implementation of the ScaleBitmap (XScale, YScale) action of the bitmap class.
MHEG5ErrorCode MHEG5setOverwriteMode(MHEG5Root *target, MHEG5GList *params)
Set the overwrite mode of the entryfield to the new value of the parameter Implementation of the SetO...
void MHEG5processQueue(void)
Process all pending events and actions. After processing all events and actions, Normally there will ...
MHEG5ErrorCode MHEG5drawOval(MHEG5Root *target, MHEG5GList *params)
Draws an ellipse bounded by the rectangle defined by the parameters. Implementation of the DrawOval a...
MHEG5ErrorCode MHEG5drawLine(MHEG5Root *target, MHEG5GList *params)
Draws a line between ("X1", "Y1") and ("X2", "Y2"). Implementation of the DrawLine action of the dyna...
MHEG5ErrorCode MHEG5drawPolyline(MHEG5Root *target, MHEG5GList *params)
Draws series of joint lines. Implementation of the DrawPolyline action of the dynamiclineart class...
MHEG5ErrorCode MHEG5quit(MHEG5Root *target, MHEG5GList *params)
Implementation of the Quit action from the application class Close an application and restart the pre...
MHEG5ErrorCode MHEG5getCounterMaxPosition(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetCounterMaxPosition (Target, CounterPositionVar) action of the stream class...
MHEG5ErrorCode MHEG5setBoxSize(MHEG5Root *target, MHEG5GList *params)
Change the size of the bounding box of the target Visible. Implementation of the SetBoxSize (XNewBoxS...
action to string conversion
void MHEG5queueResetScene(MHEG5Root *grp)
Reset both event queues and the action queue, discarding any pending events and actions for this scen...
MHEG5ErrorCode MHEG5spawn(MHEG5Root *target, MHEG5GList *params)
Implementation of the Spawn action from the application class +Execute the OnSpawnCloseDown Action of...
MHEG5ErrorCode MHEG5setTimer(MHEG5Root *target, MHEG5GList *params)
This actions sets a new Timer which results in a TimerFired event when the given time is reached...
MHEG5ErrorCode MHEG5getPosition(MHEG5Root *target, MHEG5GList *params)
Returns the location of the target Visible.
void STB_OSMutexLock(void *mutex)
Lock a mutex (a.k.a. 'enter', 'wait' or 'get').
MHEG5ErrorCode MHEG5setFontRef(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to change the character font used to preset a text. Implementation of th...
MHEG5ErrorCode MHEG5getBitmapDecodeOffset(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetBitmapDecodeOffset (XOffset, YOffset) action of the bitmap class GetBitmapDe...
MHEG5ErrorCode MHEG5modulo(MHEG5Root *target, MHEG5GList *params)
Returns the remainder modulo Value of Target - as defined by usual integer arithmetic rules...
MHEG5ErrorCode MHEG5lockScreen(MHEG5Root *target, MHEG5GList *params)
Implementation of the LockScreen action of the application class Freeze the display screen and preven...
MHEG5ErrorCode MHEG5getSliderValue(MHEG5Root *target, MHEG5GList *params)
This action retrieves the SliderValue from the target and stores it in the variable, passed as the second parameter of this action. Implementation of the GetSliderValue (Target, SliderValueVar) action of the slider class.
MHEG5ErrorCode MHEG5setPosition(MHEG5Root *target, MHEG5GList *params)
Change the location of the target Visible. Implementation of the SetPosition (NewXPosition, NewYPosition) action of the visible class.
MHEG5ErrorCode MHEG5setCachePriority(MHEG5Root *target, MHEG5GList *params)
Implementation of the SetCachePriority action SetCachePriority (NewCachePriority) Set the GroupCacheP...
MHEG5ErrorCode MHEG5append(MHEG5Root *target, MHEG5GList *params)
Appends AppendValue to Target Variable. Target variable is the first operand of the infix operation...
MHEG5ErrorCode MHEG5scrollItems(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup ScrollItems elementary action.
void MHEG5eventProcessingReset(void)
Causes the MHEG5enableEventProcessing counter to be reset to 0, and event processing to be enabled...
MHEG5ErrorCode MHEG5bringToFront(MHEG5Root *target, MHEG5GList *params)
Put a Visible at the foreground of the screen, i.e. on top of the Display Stack Implementation of the...
MHEG5ErrorCode MHEG5getEntryPoint(MHEG5Root *target, MHEG5GList *params)
Retrieve the current entrypoint of the entryfield Implementation of the GetEntryPoint action of the e...
MHEG5ErrorCode MHEG5drawSector(MHEG5Root *target, MHEG5GList *params)
Draws a sector between "StartAngle" and "StartAngle" + "ArcAngle". Implementation of the DrawSector a...
void VQ_UnRegisterNotify(void *qn)
Implement generic MHEG5-display functions - independent from the OSD These are generic functions used...
MHEG5ErrorCode MHEG5getLineStyle(MHEG5Root *target, MHEG5GList *params)
Retrieve the current Line Style of the DynamicLineArt object Implementation of the GetLineStyle actio...
MHEG5ErrorCode MHEG5getItemStatus(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup GetItemStatus elementary action.
void MHEG5queueEvents(void)
Allow future events to be stored in the event queues. See also MHEG5discardEvents.
MHEG5ErrorCode MHEG5stop(MHEG5Root *target, MHEG5GList *params)
MHEG5ErrorCode MHEG5setPaletteRef(MHEG5Root *target, MHEG5GList *params)
Change the colour look-up table used to render colours of the Visible object. Implementation of the S...
MHEG5ErrorCode MHEG5getCounterPosition(MHEG5Root *target, MHEG5GList *params)
Implementation of the GetCounterPosition (Target, CounterPositionVar) action of the stream class...
MHEG5ErrorCode MHEG5setCounterPosition(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to set the display counter to a new position. Implementation of the SetC...
MHEG5ErrorCode MHEG5setSliderParameters(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to set the MinValue, MaxValue and StepSize to the given values...
MHEG5ErrorCode MHEG5setCellPosition(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup SetCellPosition elementary action.
MHEG5ErrorCode MHEG5setFontAttributes(MHEG5Root *target, MHEG5GList *params)
The effect of this action is to set the FontAttributes to the given attributes. Implementation of the...
MHEG5ErrorCode MHEG5toggleItem(MHEG5Root *target, MHEG5GList *params)
Implementation of the ListGroup ToggleItem elementary action.
MHEG5ErrorCode MHEG5scaleVideo(MHEG5Root *target, MHEG5GList *params)
Implementation of the ScaleVideo (XScale, YScale) action of the video class. The effect of this actio...
MHEG5ErrorCode MHEG5setCursorPosition(MHEG5Root *target, MHEG5GList *params)
This action sets the cursor position to the values given as parameters. Implementation of the SetCurs...
MHEG5ErrorCode MHEG5setTransparency(MHEG5Root *target, MHEG5GList *params)
Change the value of the Transparency attribute. Implementation of the SetTransparency (NewTransparenc...
MHEG5ErrorCode MHEG5getTokenPosition(MHEG5Root *target, MHEG5GList *params)
Set the Variable referenced by TokenPositionVar to the value of the TokenPosition attribute...
MHEG5ErrorCode MHEG5putBefore(MHEG5Root *target, MHEG5GList *params)
Put a Visible exactly in front of another Visible in the display stack. Implementation of the PutBefo...
MHEG5Application * MHEG5getCurrentApplication(void)
<Function description>="">
Header file - Function prototypes for operating system.