MHEG5  18.9.0
MHEG5 Documentation
mh5group.c
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright © 2014 The DTVKit Open Software Foundation Ltd (www.dtvkit.org)
3  * Copyright © 2004 Ocean Blue Software Ltd
4  * Copyright © 2000 Koninklijke Philips Electronics N.V
5  *
6  * This file is part of a DTVKit Software Component
7  * You are permitted to copy, modify or distribute this file subject to the terms
8  * of the DTVKit 1.0 Licence which can be found in licence.txt or at www.dtvkit.org
9  *
10  * THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
11  * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
12  * OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
13  *
14  * If you or your organisation is not a member of DTVKit then you have access
15  * to this source code outside of the terms of the licence agreement
16  * and you are expected to delete this and any associated files immediately.
17  * Further information on DTVKit, membership and terms can be found at www.dtvkit.org
18  *******************************************************************************/
31 /*---includes for this file--------------------------------------------------*/
32 #include <string.h>
33 
34 #include "mh5profile.h"
35 #include "mh5group.h"
36 #include "mh5object.h" /*for actions */
37 #include "mh5classes.h"
38 #include "mh5queue.h" /*Events */
39 #include "mh5memory.h" /*destruct */
40 #include "mh5display.h"
41 #include "mh5debug.h"
42 #include "stb_os.h"
43 #include "glue_queue.h"
44 #include "glue_timers.h"
45 #include "glue_main.h"
46 #ifdef MH5PRINTOUT
47 #include "mh5final.h"
48 #endif
49 #ifdef SURFACE_THRESHOLD
50 #include "mg_api.h"
51 #endif
52 
53 /*---constant definitions for this file--------------------------------------*/
54 
55 /* UK profile - section "6.8.4 Timer count and granularity" says
56  * should allow at least 16 concurrent timers, but DTG test does
57  * try starting 24 timers, so that is what we will support.
58  */
59 #define MAX_TIMERS 24
60 #define GROUP_CP_DEFAULT 127
61 #define ZERO_TIMER_HDL ((void*)0x2EA02EA0)
62 
63 #ifdef TRACING
64 extern int asn_bitmap_count;
65 extern int asn_group_item_count;
66 #endif
67 
68 /*---local typedef structs for this file-------------------------------------*/
69 
70 typedef struct _GroupTimer
71 {
75 } GroupTimer;
76 
77 /*---local (static) variable declarations for this file----------------------*/
78 
79 static MH5GroupId nextFreeGroupId = INVALID_GRP_REF;
80 
81 static GroupTimer group_timers[MAX_TIMERS];
82 static void *group_mutex = NULL;
83 static MHEG5Int processing_timers = 0;
84 
85 /*---local function definitions----------------------------------------------*/
86 
87 /*---global function definitions---------------------------------------------*/
88 
93 void MH5_GroupInit(void)
94 {
95  memset(group_timers, 0, MAX_TIMERS * sizeof(GroupTimer));
96  group_mutex = STB_OSCreateMutex();
97  processing_timers = 0;
98  TRACE(TSTATE, ("grp_mutex=%d", group_mutex))
99 }
100 
101 /* debug */
102 #ifdef MH5PRINTOUT
103 
109 void MHEG5groupPrint(MHEG5Group *group, char *out)
110 {
111  MHEG5Ingredient *currItem;
112 
113  /* Inherited types */
114  MHEG5indent(out);
115  MHEG5classPrint(group->root.clazz, out);
116  MHEG_PRINT(out, " (");
117  MHEG5stringPrint(group->groupName, out);
118  MHEG_PRINT(out, " 0 )");
119  MHEG5newLine(out);
120  MHEG5incIndent();
121 
122  /* Exchanged Attributes */
123  /* if ( (group->standardID[0]!=2) || (group->standardID[1]!=19) )
124  *{
125  * MHEG5indent(out);
126  * MHEG_PRINT(out,":StdID ");
127  * MHEG5intPrint(group->standardID[0], out);
128  * MHEG_PRINT(out,", ");
129  * MHEG5intPrint(group->standardID[1], out);
130  * MHEG5newLine(out);
131  * }
132  * if (group->standardVersion != 1)
133  * {
134  * MHEG5indent(out);
135  * MHEG_PRINT(out,":StdVersion ");
136  * MHEG5intPrint(group->standardVersion, out);
137  * MHEG5newLine(out);
138  * }*/
139  if (group->objectInformation.len)
140  {
141  MHEG5indent(out);
142  MHEG_PRINT(out, ":ObjectInfo ");
143  MHEG5stringPrint(group->objectInformation, out);
144  MHEG5newLine(out);
145  }
146  if (group->onStartUp.a_ptr)
147  {
148  MHEG5indent(out);
149  MHEG_PRINT(out, ":OnStartUp ");
150  MHEG5actionPrint(group->onStartUp, out);
151  MHEG5newLine(out);
152  }
153  if (group->onCloseDown.a_ptr)
154  {
155  MHEG5indent(out);
156  MHEG_PRINT(out, ":OnCloseDown ");
157  MHEG5actionPrint(group->onCloseDown, out);
158  MHEG5newLine(out);
159  }
161  {
162  MHEG5indent(out);
163  MHEG_PRINT(out, ":OrigGCPriority ");
164  MHEG5intPrint(group->originalCachePriority, out);
165  MHEG5newLine(out);
166  }
167 
168  currItem = group->itemHead;
169  if (currItem)
170  {
171  MHEG5indent(out);
172  MHEG_PRINT(out, ":Items ( ");
173  MHEG5newLine(out);
174  MHEG5incIndent();
175  do
176  {
177  MHEG5finalPrint((MHEG5Root *)currItem, out);
178  currItem = currItem->next;
179  }
180  while (currItem != NULL);
181  MHEG5decIndent();
182  MHEG5indent(out);
183  MHEG_PRINT(out, ")");
184  MHEG5newLine(out);
185  }
186  /* local attributes */
187  if (group->cachePriority != GROUP_CP_DEFAULT)
188  {
189  MHEG5indent(out);
190  MHEG_PRINT(out, "// cachePriority ");
191  MHEG5intPrint(group->cachePriority, out);
192  MHEG5newLine(out);
193  }
194 }
195 
196 #endif /* MH5PRINTOUT */
197 
198 
206 {
207  unsigned int key;
208 
209  assert(group);
210  assert(item);
211  item->root.grp = group;
212  item->next = 0;
213  item->prev = group->itemTail;
214  item->hnxt = 0;
215  if (!group->itemTail)
216  {
217  group->itemHead = item;
218  }
219  else
220  {
221  group->itemTail->next = item;
222  }
223  group->itemTail = item;
224  key = item->root.id & 0xff;
225  item->hnxt = group->hashIngred[key];
226  group->hashIngred[key] = item;
227 }
228 
236 {
237  MHEG5Ingredient *s, **h;
238  unsigned int key;
239 
240  assert(group);
241  assert(item);
242  s = group->itemHead;
243  while (s)
244  {
245  if (s == item)
246  {
247  if (s->next)
248  {
249  s->next->prev = s->prev;
250  }
251  else
252  {
253  group->itemTail = s->prev;
254  }
255  if (s->prev)
256  {
257  s->prev->next = s->next;
258  }
259  else
260  {
261  group->itemHead = s->next;
262  }
263  break;
264  }
265  s = s->next;
266  }
267 
268  if (s)
269  {
270  key = item->root.id & 0xff;
271  h = &group->hashIngred[key];
272  while (*h != s)
273  {
274  h = &(*h)->hnxt;
275  }
276  *h = s->hnxt;
277  }
278 }
279 
286 {
287  int i;
288  assert(group);
289 
290  MHEG5rootInit(&group->root);
291 
292  group->group_id = ++nextFreeGroupId;
293 
294  /*group->standardID[0] = 2;
295  * group->standardID[1] = 19;
296  * group->standardVersion = 1;*/
297  /*group->magic = GROUP_MAGIC_NUM;*/
300  group->itemTail = 0;
301  group->itemHead = 0;
302  for (i = 0; i != 256; i++)
303  {
304  group->hashIngred[i] = 0;
305  }
306 }
307 
316 {
317  assert(group);
318 
319  MHEG5rootFree(&group->root);
320 
322 
324  group->onStartUp.a_ptr = 0;
325  group->onStartUp.total = 0;
326 
328  group->onCloseDown.a_ptr = 0;
329  group->onCloseDown.total = 0;
330 
332 }
333 
334 /*
335  Internal behaviours
336  */
337 
350 {
351  TRACER(int count = 0; )
352  MHEG5Ingredient * item;
353 
354  if (group->onStartUp.a_ptr)
355  {
356  TRACE(TEVNTS, ("OnStartUp %p, %p", group, group->onStartUp))
358  }
359  if (group->onCloseDown.a_ptr)
360  {
361  TRACE(TEVNTS, ("onCloseDown %p, %p", group, group->onCloseDown))
363  }
364 
365  assert(group);
366  item = group->itemHead;
367  while (item)
368  {
369  TRACER(count++; )
370  if (!item->initiallyStopped)
371  {
372  //TRACE(TFILE,("clzz=%d",item->root.clazz))
373  switch (item->root.clazz)
374  {
375  case MHEG5SCENE:
376  case MHEG5APPLICATION:
377  ERROR_PRINT(("MHEG5groupPrepare: item is invalid class %d\n", item->root.clazz));
378  break;
379  case MHEG5LINK:
380  MHEG5linkPrepare((MHEG5Link *) item);
381  break;
382  case MHEG5BITMAP:
384  break;
385  case MHEG5TEXT:
386  MHEG5textPrepare((MHEG5Text *) item);
387  break;
388  case MHEG5LINEART:
390  break;
391  case MHEG5DYNAMICLINEART:
393  break;
394  case MHEG5RECTANGLE:
396  break;
398  case MHEG5REMOTEPROGRAM:
401  break;
404  break;
407  break;
410  break;
413  break;
416  break;
417  case MHEG5STREAM:
419  break;
420  case MHEG5AUDIO:
421  /*MHEG5audioPrepare((MHEG5Audio *) item); <- done by parent stream */
422  break;
423  case MHEG5VIDEO:
424  /*MHEG5videoPrepare((MHEG5Video *) item); <- done by parent stream */
425  break;
426  #ifndef MHEG5PROFILE_UK1_06
427  case MHEG5HOTSPOT:
429  break;
430  case MHEG5PUSHBUTTON:
432  break;
433  case MHEG5SWITCHBUTTON:
435  break;
436  case MHEG5RTGRAPHICS:
437  /*MHEG5rtgraphicsPrepare((MHEG5RTGraphics *) item); <- done by parent stream */
438  break;
439  case MHEG5PALETTE:
441  break;
442  case MHEG5CURSORSHAPE:
444  break;
445  #endif
446  case MHEG5FONT:
447  MHEG5fontPrepare((MHEG5Font *)item);
448  break;
449  case MHEG5TOKENGROUP:
451  break;
452  case MHEG5LISTGROUP:
454  break;
455  case MHEG5ENTRYFIELD:
457  break;
458  case MHEG5HYPERTEXT:
460  break;
461  case MHEG5SLIDER:
463  break;
464  default:
465  ERROR_PRINT(("INTERNAL ERROR: MHEG5groupPrepare Unrecognised class %d\n", item->root.clazz));
466  assert(0);
467  }
468  }
469  else if ((item->root.clazz == MHEG5RESIDENTPROGRAM) ||
470  (item->root.clazz == MHEG5REMOTEPROGRAM) ||
471  (item->root.clazz == MHEG5INTERCHANGEDPROGRAM))
472  {
473  if (((MHEG5Program *) item)->initiallyAvailable)
474  {
475  //TRACE(TFILE, ("clzz=%d", item->root.clazz))
477  }
478  }
479  item = item->next;
480  }
481  group->cachePriority = group->originalCachePriority;
482 
483  MHEG5rootPrepare(&group->root);
484 
485  TRACE(TFILE, (" item count=%d grp_itm_cnt=%d asn_bmp_cnt=%d", count, asn_group_item_count, asn_bitmap_count))
486 }
487 
498 {
499  MHEG5Ingredient *item, *prev;
500  int t_ndx;
501 
502  assert(group);
503 
504  if (group->onCloseDown.a_ptr && MH5GlueActiveState())
505  {
506  TRACE(TEVNTS, ("OnCloseDown %p, %p", group, group->onCloseDown))
507  MHEG5actionListExecute( group, group->onCloseDown );
508  }
509 
510  item = group->itemTail;
511  while (item)
512  {
513  prev = item->prev;
514 
515  switch (item->root.clazz)
516  {
517  case MHEG5LINK:
518  MHEG5linkDestruct((MHEG5Link *) item);
519  MHEG5linkFree((MHEG5Link *)item);
520  break;
521  case MHEG5BITMAP:
523  MHEG5bitmapFree((MHEG5Bitmap *)item);
524  break;
525  case MHEG5TEXT:
526  MHEG5textDestruct((MHEG5Text *) item);
527  MHEG5textFree((MHEG5Text *)item);
528  break;
529  case MHEG5LINEART:
532  break;
533  case MHEG5DYNAMICLINEART:
536  break;
537  case MHEG5RECTANGLE:
540  break;
542  case MHEG5REMOTEPROGRAM:
546  break;
550  break;
554  break;
558  break;
562  break;
566  break;
567  case MHEG5STREAM:
569  MHEG5streamFree((MHEG5Stream *)item);
570  break;
571  case MHEG5AUDIO:
572  MHEG5audioDestruct((MHEG5Audio *) item);
573  MHEG5audioFree((MHEG5Audio *)item);
574  break;
575  case MHEG5VIDEO:
576  MHEG5videoDestruct((MHEG5Video *) item);
577  MHEG5videoFree((MHEG5Video *)item);
578  break;
579  #ifndef MHEG5PROFILE_UK1_06
580  case MHEG5HOTSPOT:
583  break;
584  case MHEG5PUSHBUTTON:
587  break;
588  case MHEG5SWITCHBUTTON:
591  break;
592  case MHEG5RTGRAPHICS:
595  break;
596  case MHEG5PALETTE:
599  break;
600  case MHEG5CURSORSHAPE:
603  break;
604  #endif
605  case MHEG5FONT:
606  MHEG5fontDestruct((MHEG5Font *)item);
607  MHEG5fontFree((MHEG5Font *)item);
608  break;
609  case MHEG5TOKENGROUP:
612  break;
613  case MHEG5LISTGROUP:
616  break;
617  case MHEG5ENTRYFIELD:
620  break;
621  case MHEG5HYPERTEXT:
624  break;
625  case MHEG5SLIDER:
627  MHEG5sliderFree((MHEG5Slider *)item);
628  break;
629  default:
630  ERROR_PRINT(("INTERNAL ERROR: MHEG5groupDestruct Unrecognised class %d\n", item->root.clazz));
631  }
632  MHEG5freeMem(item);
633  item = prev;
634  }
635  group->itemTail = 0;
636  group->itemHead = 0;
637 
638  group->root.runningStatus = MHEG5FALSE;
639  /* do we need to do? -> MHEG5groupDeactivate( group ); */
640 
641  for (t_ndx = 0; t_ndx != MAX_TIMERS; t_ndx++)
642  {
643  if (group_timers[t_ndx].group_ptr == group)
644  {
645  if (group_timers[t_ndx].t_handle != 0)
646  {
647  if (group_timers[t_ndx].t_handle != ZERO_TIMER_HDL)
648  {
649  mhegTimerDestroy( group_timers[t_ndx].t_handle );
650  }
651  group_timers[t_ndx].t_handle = 0;
652  }
653  }
654  }
655 
656  MHEG5rootDestruct((MHEG5Root *) group);
657 }
658 
673 {
674  MHEG5Ingredient *item;
675 
676  assert(group);
677 
678  if (!group->root.availabilityStatus)
679  {
680  MHEG5groupPrepare( group );
681  }
682 
683  if (group->onStartUp.a_ptr)
684  {
685  TRACE(TEVNTS, ("OnStartUp %p, %p", group, group->onStartUp))
686  MHEG5actionListExecute( group, group->onStartUp );
687  }
688 
689  item = group->itemHead;
690 
691  while (item)
692  {
693  if (!item->initiallyStopped)
694  {
695  switch (item->root.clazz)
696  {
697  case MHEG5SCENE:
698  case MHEG5APPLICATION:
699  ERROR_PRINT(("MHEG5groupActivate: item is invalid class %d\n", item->root.clazz));
700  break;
701  case MHEG5LINK:
702  MHEG5linkActivate((MHEG5Link *) item);
703  break;
704  case MHEG5BITMAP:
706  break;
707  case MHEG5TEXT:
708  MHEG5textActivate((MHEG5Text *) item);
709  break;
710  case MHEG5LINEART:
712  break;
713  case MHEG5DYNAMICLINEART:
715  break;
716  case MHEG5RECTANGLE:
718  break;
720  case MHEG5REMOTEPROGRAM:
723  break;
730  break;
731  case MHEG5STREAM:
733  break;
734  case MHEG5AUDIO:
735  /*MHEG5audioActivate((MHEG5Audio *) item); <- done by parent stream */
736  break;
737  case MHEG5VIDEO:
738  /*MHEG5videoActivate((MHEG5Video *) item); <- done by parent stream */
739  break;
740  #ifndef MHEG5PROFILE_UK1_06
741  case MHEG5HOTSPOT:
743  break;
744  case MHEG5PUSHBUTTON:
746  break;
747  case MHEG5SWITCHBUTTON:
749  break;
750  case MHEG5RTGRAPHICS:
751  /*MHEG5rtgraphicsActivate((MHEG5RTGraphics *) item); <- done by parent stream */
752  break;
753  case MHEG5PALETTE:
755  break;
756  case MHEG5CURSORSHAPE:
758  break;
759  #endif
760  case MHEG5FONT:
761  MHEG5fontActivate((MHEG5Font *)item);
762  break;
763  case MHEG5TOKENGROUP:
765  break;
766  case MHEG5LISTGROUP:
768  break;
769  case MHEG5ENTRYFIELD:
771  break;
772  case MHEG5HYPERTEXT:
774  break;
775  case MHEG5SLIDER:
777  break;
778  default:
779  ERROR_PRINT(("INTERNAL ERROR: MHEG5groupActivate Unrecognised class %d\n", item->root.clazz));
780  }
781  }
782  item = item->next;
783  }
784  group->root.runningStatus = MHEG5TRUE;
786 
787  MHEG5sendSync((MHEG5Root *) group, MHEG5ISRUNNING, 0);
788 }
789 
803 {
804  assert(group);
805  if (group->root.runningStatus)
806  {
807  MHEG5Ingredient *item;
809 
810  if (ca)
811  {
812  ca->lockCount++;
813  }
814 
815  item = group->itemTail;
816 
817  while (item)
818  {
819  switch (item->root.clazz)
820  {
821  case MHEG5LINK:
822  MHEG5linkDeactivate((MHEG5Link *) item);
823  break;
824  case MHEG5BITMAP:
826  break;
827  case MHEG5TEXT:
828  MHEG5textDeactivate((MHEG5Text *) item);
829  break;
830  case MHEG5LINEART:
832  break;
833  case MHEG5DYNAMICLINEART:
835  break;
836  case MHEG5RECTANGLE:
838  break;
840  case MHEG5REMOTEPROGRAM:
843  break;
850  break;
851  case MHEG5STREAM:
853  break;
854  case MHEG5AUDIO:
856  break;
857  case MHEG5VIDEO:
859  break;
860  #ifndef MHEG5PROFILE_UK1_06
861  case MHEG5HOTSPOT:
863  break;
864  case MHEG5PUSHBUTTON:
866  break;
867  case MHEG5SWITCHBUTTON:
869  break;
870  case MHEG5RTGRAPHICS:
872  break;
873  case MHEG5PALETTE:
875  break;
876  case MHEG5CURSORSHAPE:
878  break;
879  #endif
880  case MHEG5FONT:
882  break;
883  case MHEG5TOKENGROUP:
885  break;
886  case MHEG5LISTGROUP:
888  break;
889  case MHEG5ENTRYFIELD:
891  break;
892  case MHEG5HYPERTEXT:
894  break;
895  case MHEG5SLIDER:
897  break;
898  default:
899  ERROR_PRINT(("INTERNAL ERROR: MHEG5groupDeactivate Unrecognised class %d\n", item->root.clazz));
900  }
901  item = item->prev;
902  }
903 
904  MHEG5rootDeactivate(&group->root);
905 
906  if (ca)
907  {
908  ca->lockCount--;
909  if (ca->lockCount <= 0)
910  {
911  ca->lockCount = 0;
913  }
914  }
915  }
916 }
917 
918 /*
919  * Actions
920  */
921 
938 {
939  MHEG5Int value = 0;
940 
941  assert(target);
942 
943  if (!params)
944  {
946  }
947  MHEG5resolveGenericInteger(params, &value);
948 
949  ((MHEG5Group *) target)->cachePriority = value;
950 
951  return MHEG5ERR_NOERROR;
952 }
953 
959 static void MH5_GroupTimer( void *data )
960 {
962  GroupTimer *gt = (GroupTimer *)params->callerRef;
963 
964  if (gt->t_handle == params->timerHandle)
965  {
966  if (params->triggered == TRUE) /* sanity check */
967  {
968  TRACE(TTIME, ("Main Timer fired, id=%ld hdl=%x", gt->timer_id, gt->t_handle))
970  }
971  gt->t_handle = 0;
972  gt->timer_id = 0;
973  gt->group_ptr = 0;
974  }
975  else
976  {
977  TRACE(TTIME, ("Timer %ld Fired, but it was cancelled while fire event was waiting in Queue (0x%x 0x%x)",
978  gt->timer_id, gt->t_handle, params->timerHandle))
979  }
980  STB_OSMutexLock(group_mutex);
981  processing_timers--;
982  STB_OSMutexUnlock(group_mutex);
983 }
984 
995 static void TimerCallback( BOOLEAN triggered, void *callerRef, H_Timer timerHandle )
996 {
997  GroupTimer *gt = (GroupTimer *)callerRef;
998  MHEG5eventMessage_t event;
999  if (triggered)
1000  {
1001  TRACE(TTIME, ("Timer Callback, id=%ld hdl=%x thdl=%x", gt->timer_id, gt->t_handle, timerHandle))
1002  /* Send event to component task */
1003  event.proc_msg_func = MH5_GroupTimer;
1004  event.data_type = DT_VALUE;
1005  event.data.timer.triggered = triggered;
1006  event.data.timer.callerRef = callerRef;
1007  event.data.timer.timerHandle = (void *)timerHandle;
1008  STB_OSMutexLock(group_mutex);
1009  processing_timers++;
1010  STB_OSMutexUnlock(group_mutex);
1011  if (VQ_PutMsg(&event, PRTY_HIGH) != MHERR_OK)
1012  {
1013  TRACE(TERROR, ("VQ_PutMsg returned Error\n"))
1014  gt->t_handle = 0;
1015  gt->group_ptr = 0;
1016  gt->timer_id = 0;
1017  STB_OSMutexLock(group_mutex);
1018  processing_timers--;
1019  STB_OSMutexUnlock(group_mutex);
1020  }
1021  }
1022  else
1023  {
1024  TRACE(TTIME, ("Timer Cancelled, id=%ld hdl=%x thdl=%x", gt->timer_id, gt->t_handle, timerHandle))
1025  /* only get here with mheg task calling destroy timer */
1026  gt->t_handle = 0;
1027  gt->group_ptr = 0;
1028  gt->timer_id = 0;
1029  }
1030 }
1031 
1071 {
1072  MHEG5GList *thirdParam = 0, *fourthParam = 0;
1073  MHEG5Group *group = 0;
1074  MHEG5Int timerId = 0, timerValue = -1;
1075  MHEG5Bool absoluteTime = MHEG5FALSE;
1076  U32BIT currentTime;
1077  int t_ndx;
1078 
1079  assert(target);
1080 
1081  if (!params)
1082  {
1084  }
1085 
1086  group = (MHEG5Group *) target;
1087  currentTime = STB_OSGetClockMilliseconds();
1088 
1089  thirdParam = MHEG5resolveGenericInteger(params, &timerId);
1090 
1091  for (t_ndx = 0; t_ndx != MAX_TIMERS; t_ndx++)
1092  {
1093  if ((group_timers[t_ndx].group_ptr == group) &&
1094  (group_timers[t_ndx].timer_id == timerId))
1095  {
1096  TRACE(TTIME, ("Cancel timer id=%ld ndx=%d hdl=%x", timerId, t_ndx, group_timers[t_ndx].t_handle))
1097  /* Cancel existing timer */
1098  if (group_timers[t_ndx].t_handle != 0)
1099  {
1100  if (group_timers[t_ndx].t_handle != ZERO_TIMER_HDL)
1101  {
1102  mhegTimerDestroy( group_timers[t_ndx].t_handle );
1103  }
1104  group_timers[t_ndx].t_handle = 0;
1105  }
1106  else
1107  {
1108  group_timers[t_ndx].group_ptr = 0;
1109  group_timers[t_ndx].timer_id = 0;
1110  }
1111  break;
1112  }
1113  }
1114  if (thirdParam)
1115  {
1116  /* TimerValue has been encoded */
1117  fourthParam = MHEG5resolveGenericInteger(thirdParam, &timerValue);
1118  if (fourthParam)
1119  {
1120  MHEG5resolveGenericBoolean(fourthParam, &absoluteTime);
1121  if (absoluteTime)
1122  {
1123  timerValue -= currentTime - group->startTime;
1124  }
1125  }
1126  for (t_ndx = 0; t_ndx != MAX_TIMERS; t_ndx++)
1127  {
1128  if (group_timers[t_ndx].t_handle == 0)
1129  {
1130  group_timers[t_ndx].group_ptr = group;
1131  group_timers[t_ndx].timer_id = timerId;
1132  if (timerValue > 0)
1133  {
1134  if (mhegTimerCreate((U32BIT) timerValue, (F_TimerCallback) TimerCallback,
1135  (void *) &group_timers[t_ndx], &group_timers[t_ndx].t_handle ) != MHERR_OK)
1136  {
1137  group_timers[t_ndx].group_ptr = 0;
1138  group_timers[t_ndx].timer_id = 0;
1139  }
1140  TRACE(TTIME, ("Create timer id=%ld val=%ld,ndx=%d hdl=%x", timerId, timerValue, t_ndx, group_timers[t_ndx].t_handle))
1141  }
1142  else if (!absoluteTime && (timerValue == 0))
1143  {
1144  STB_OSMutexLock(group_mutex);
1145  timerValue = processing_timers;
1146  STB_OSMutexUnlock(group_mutex);
1147  if (timerValue)
1148  {
1149  /* Other timer(s) are waiting to fire, so put this zero timer on queue to be processed after them */
1150  TRACE(TTIME, ("Zero Timer fired, id=%ld, handle via queue", timerId))
1151  group_timers[t_ndx].t_handle = ZERO_TIMER_HDL;
1152  TimerCallback(TRUE, (void *) &group_timers[t_ndx], group_timers[t_ndx].t_handle);
1153  }
1154  else
1155  {
1156  /* No other timers, so can short-circuit firing of timer */
1157  TRACE(TTIME, ("Zero Timer fired, id=%ld, handle immediately", timerId))
1158  MHEG5sendEvent((MHEG5Root *) group, MHEG5TIMERFIRED, timerId);
1159  group_timers[t_ndx].group_ptr = 0;
1160  group_timers[t_ndx].timer_id = 0;
1161  }
1162  }
1163  break;
1164  }
1165  }
1166  }
1167 
1168  return MHEG5ERR_NOERROR;
1169 }
1170 
1171 #ifdef SURFACE_THRESHOLD
1172 
1177 void MHEG5groupDestroySurfaces(MHEG5Int pixels)
1178 {
1179  MHEG5Group *group;
1180  MHEG5Int i;
1181  MHEG5Ingredient *ingredient;
1182  MHEG5Visible *visible;
1183 
1185  for (i = 0; group != NULL && i < 2; i++)
1186  {
1187  for (ingredient = group->itemHead; ingredient != NULL;
1188  ingredient = ingredient->next)
1189  {
1190  switch (ingredient->root.clazz)
1191  {
1192  case MHEG5RTGRAPHICS:
1193  case MHEG5BITMAP:
1194  case MHEG5TEXT:
1195  case MHEG5SLIDER:
1196  case MHEG5DYNAMICLINEART:
1197  case MHEG5RECTANGLE:
1198  case MHEG5ENTRYFIELD:
1199  case MHEG5HYPERTEXT:
1200  case MHEG5HOTSPOT:
1201  case MHEG5PUSHBUTTON:
1202  case MHEG5SWITCHBUTTON:
1203  /* Visible */
1204  visible = (MHEG5Visible *)ingredient;
1205  MG_ApplySurfaceThreshold(&visible->graphic_data, pixels);
1206  break;
1207  default:
1208  ;
1209  }
1210  }
1211  group = (MHEG5Group *)MHEG5getCurrentScene();
1212  }
1213 }
1214 
1215 #endif /* SURFACE_THRESHOLD */
void MHEG5groupFree(MHEG5Group *group)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5group.c:315
MHEG5ErrorCode MHEG5setTimer(MHEG5Root *target, MHEG5GList *params)
This actions sets a new Timer which results in a TimerFired event when the given time is reached...
Definition: mh5group.c:1070
MHEG5Bool availabilityStatus
Definition: mh5root.h:52
U32BIT STB_OSGetClockMilliseconds(void)
Get Current Computer Clock Time.
void MHEG5sliderDestruct(MHEG5Slider *slider)
Destruct a slider object.
Definition: mh5slider.c:292
void MHEG5videoDestruct(MHEG5Video *video)
Destruct a video object. See also MHEG5videoInit.
Definition: mh5video.c:200
void MHEG5hotspotDeactivate(MHEG5Hotspot *hotspot)
Definition: mh5hotspot.c:101
E_MhegErr VQ_PutMsg(S_MhegMessage *pMsg, E_PRIORITY priority)
Post event or section message on queue. Copies data into queue.
Definition: glue_queue.c:248
BOOLEAN MH5GlueActiveState(void)
Definition: glue_main.c:993
void MHEG5bitmapDestruct(MHEG5Bitmap *bitmap)
Destruct a bitmap object.
Definition: mh5bitmap.c:250
Distributor for Prepare, Destruct, Activate, Deactivate and Clone calls. Distribute the +Prepare +Des...
void MHEG5programFree(MHEG5Program *program)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5program.c:121
void MH5_GroupInit(void)
This function initialises Group Timers.
Definition: mh5group.c:93
struct sMHEG5Ingredient * next
Definition: mh5ingredient.h:83
void MHEG5contentVariableFree(MHEG5ContentVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:622
void MHEG5programDeactivate(MHEG5Program *program)
Definition: mh5program.c:314
void MHEG5tokenGroupActivate(MHEG5TokenGroup *tokenGroup)
const char * data
Definition: mh5gate.c:56
void MHEG5dynamicLineartDeactivate(MHEG5DynamicLineart *dynamicLineart)
Apply the deactivation behaviour of the dynamiclineart class.
void MHEG5fontActivate(MHEG5Font *font)
Definition: mh5font.c:160
void * H_Timer
Definition: glue_timers.h:58
void MHEG5octetStringVariablePrepare(MHEG5OctetStringVariable *variable)
Sets all internal attributes for the specified object to their default values.
Definition: mh5variable.c:458
void MHEG5contentVariablePrepare(MHEG5ContentVariable *variable)
Sets all internal attributes for the specified object to their default values.
Definition: mh5variable.c:606
void MHEG5actionListExecute(MHEG5Group *source, MHEG5ActionList actions)
Execute the supplied list of actions immediately. The actions will have been executed by the time the...
Definition: mh5queue.c:1400
void MHEG5videoDeactivate(MHEG5Video *video)
Apply the deactivation behaviour of the video class. As this class has no own deactivation behaviour ...
Definition: mh5video.c:171
void MHEG5pushbuttonActivate(MHEG5Pushbutton *pushbutton)
void MHEG5contentVariableDestruct(MHEG5ContentVariable *variable)
Definition: mh5variable.c:631
void MHEG5cursorShapePrepare(MHEG5CursorShape *cursorShape)
Apply the preparation behaviour of the cursorshape class Apply the preparation behaviour of the curso...
void MHEG5booleanVariablePrepare(MHEG5BooleanVariable *variable)
Sets all internal attributes for the specified object to their default values.
Definition: mh5variable.c:376
void MHEG5cursorShapeFree(MHEG5CursorShape *cursorShape)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
#define ZERO_TIMER_HDL
Definition: mh5group.c:61
void MHEG5rootDestruct(MHEG5Root *root)
Implementation of the Destruction behaviour Destruction This behaviour has the basic semantics of ask...
Definition: mh5root.c:247
void MHEG5rectangleDeactivate(MHEG5Rectangle *rectangle)
Definition: mh5rectangle.c:130
MHEG5 queue.
void MHEG5octetStringVariableFree(MHEG5OctetStringVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:474
void MHEG5rtgraphicsFree(MHEG5RTGraphics *rtgraphics)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
void MHEG5hypertextFree(MHEG5Hypertext *hypertext)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5hypertext.c:246
MHEG5GList * MHEG5resolveGenericInteger(MHEG5GList *params, MHEG5Int *value)
Definition: mh5object.c:510
MHEG5Int MH5GroupId
Definition: mh5base.h:92
MHEG5ErrorCode MHEG5setCachePriority(MHEG5Root *target, MHEG5GList *params)
Implementation of the SetCachePriority action SetCachePriority (NewCachePriority) Set the GroupCacheP...
Definition: mh5group.c:937
void MHEG5switchbuttonActivate(MHEG5Switchbutton *switchbutton)
Apply the activation behaviour of the switchbutton class. As this class has no own activation behavio...
void MHEG5audioDeactivate(MHEG5Audio *audio)
Apply the deactivation behaviour off the audio class. As this class has no own deactivation behaviour...
Definition: mh5audio.c:177
void MHEG5textDestruct(MHEG5Text *text)
Destruct a text object.
Definition: mh5text.c:365
MHEG5Final clazz
Definition: mh5root.h:55
void MHEG5listGroupActivate(MHEG5ListGroup *listGroup)
Implementation of the ListGroup Activation behaviour.
Definition: mh5listgroup.c:423
MHEG5Ingredient * hashIngred[256]
Definition: mh5group.h:64
void MHEG5ingredientDestruct(MHEG5Ingredient *ingredient)
Implementation of the Destruction behaviour Execute the following sequence of actions: ...
void MHEG5fontFree(MHEG5Font *font)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5font.c:129
void MHEG5rectangleActivate(MHEG5Rectangle *rectangle)
Definition: mh5rectangle.c:125
Implementation of the Group class Description Defines the structure and behaviour of objects used as ...
void MHEG5groupDestruct(MHEG5Group *group)
Implementation of the Destruction behaviour Destruction.
Definition: mh5group.c:497
void MHEG5groupDelItem(MHEG5Group *group, MHEG5Ingredient *item)
Delete Item from the List.
Definition: mh5group.c:235
void MHEG5tokenGroupPrepare(MHEG5TokenGroup *tokenGroup)
#define mhegTimerCreate
Definition: glue_timers.h:85
void MHEG5streamDeactivate(MHEG5Stream *stream)
Apply the deactivation behaviour of the stream class. Execute the following sequence of actions: ...
Definition: mh5stream.c:406
void MHEG5streamFree(MHEG5Stream *stream)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5stream.c:203
void MHEG5textPrepare(MHEG5Text *text)
Apply the preparation behaviour of the text class Apply the preparation behaviour of the text class...
Definition: mh5text.c:293
void MHEG5listGroupDeactivate(MHEG5ListGroup *listGroup)
Implementation of the ListGroup Deactivation behaviour.
Definition: mh5listgroup.c:462
MH5GroupPtr grp
Definition: mh5root.h:57
void MHEG5groupPrepare(MHEG5Group *group)
Implementation of the Preparation behaviour Preparation.
Definition: mh5group.c:349
void MHEG5listGroupDestruct(MHEG5ListGroup *listGroup)
Implementation of the ListGroup Destruction behaviour.
Definition: mh5listgroup.c:404
void MHEG5stringDestruct(MHEG5String *item)
Destruct a MHEG5String.
Definition: mh5base.c:686
void MHEG5fontDestruct(MHEG5Font *font)
Definition: mh5font.c:151
void * graphic_data
Definition: mh5visible.h:64
long MHEG5Int
Definition: mh5base.h:73
void MHEG5hotspotDestruct(MHEG5Hotspot *hotspot)
Definition: mh5hotspot.c:107
void MHEG5listGroupFree(MHEG5ListGroup *listGroup)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5listgroup.c:238
void MHEG5objectRefVariablePrepare(MHEG5ObjectRefVariable *variable)
Sets all internal attributes for the specified object to their default values.
Definition: mh5variable.c:560
void MHEG5entryfieldDestruct(MHEG5Entryfield *entryfield)
Destruct a entryfield object.
void MHEG5entryfieldFree(MHEG5Entryfield *entryfield)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
void(* F_TimerCallback)(BOOLEAN triggered, void *callerRef, H_Timer timerHandle)
Definition: glue_timers.h:77
void MHEG5streamActivate(MHEG5Stream *stream)
Apply the activation behaviour of the stream class. Execute the following sequence of actions: ...
Definition: mh5stream.c:340
struct _GroupTimer GroupTimer
void MHEG5integerVariablePrepare(MHEG5IntegerVariable *variable)
Sets all internal attributes for the specified object to their default values.
Definition: mh5variable.c:417
#define INVALID_GRP_REF
Definition: mh5base.h:59
void MHEG5groupInit(MHEG5Group *group)
Initialise an Group object with default Values.
Definition: mh5group.c:285
MHEG5ActionList onStartUp
Definition: mh5group.h:59
void STB_OSMutexUnlock(void *mutex)
Unlock a mutex (a.k.a. &#39;leave&#39;, &#39;signal&#39; or &#39;release&#39;)
#define MHEG5freeMem
Definition: glue_memory.h:94
void MHEG5dynamicLineartPrepare(MHEG5DynamicLineart *dynamicLineart)
Apply the preparation behaviour of the dynamiclineart class Apply the preparation behaviour of the dy...
unsigned long startTime
Definition: mh5group.h:70
void MHEG5tokenGroupDestruct(MHEG5TokenGroup *tokenGroup)
MHEG5Action * a_ptr
Definition: mh5action.h:201
This file defines the profile for the MHEG engine.
void MHEG5sliderActivate(MHEG5Slider *slider)
Apply the activation behaviour of the slider class. As this class has no own activation behaviour thi...
Definition: mh5slider.c:257
void MHEG5cursorShapeDestruct(MHEG5CursorShape *cursorShape)
Destruct a cursorshape object.
struct sMHEG5Ingredient * hnxt
Definition: mh5ingredient.h:85
void MHEG5lineartFree(MHEG5Lineart *lineart)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5lineart.c:198
void MHEG5rootPrepare(MHEG5Root *root)
Implementation of the Preparation behaviour Preparation This behaviour has the basic semantics of all...
Definition: mh5root.c:139
void MHEG5variableActivate(MHEG5Ingredient *variable)
Apply the activation behaviour of the Variable class. Apply the activation behaviour of the variable ...
Definition: mh5variable.c:665
void MHEG5hotspotPrepare(MHEG5Hotspot *hotspot)
Definition: mh5hotspot.c:89
void MHEG5tokenGroupDeactivate(MHEG5TokenGroup *tokenGroup)
void MHEG5hypertextDeactivate(MHEG5Hypertext *hypertext)
Definition: mh5hypertext.c:291
void MHEG5sliderPrepare(MHEG5Slider *slider)
Apply the preparation behaviour of the slider class Apply the preparation behaviour of the slider cla...
Definition: mh5slider.c:235
void MHEG5variableDeactivate(MHEG5Ingredient *variable)
Apply the deactivation behaviour of the variable class. As this class has no own deactivation behavio...
Definition: mh5variable.c:708
void MHEG5streamDestruct(MHEG5Stream *stream)
Destruct a stream object. Execute the following sequence of actions:
Definition: mh5stream.c:451
void MHEG5rectangleFree(MHEG5Rectangle *rectangle)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5rectangle.c:110
void MHEG5fontDeactivate(MHEG5Font *font)
Definition: mh5font.c:178
short MHEG5Bool
Definition: mh5base.h:71
void MHEG5entryfieldDeactivate(MHEG5Entryfield *entryfield)
Apply the deactivation behaviour of the entryfield class. As this class has no own deactivation behav...
MHEG5ErrorCode
Definition: mh5base.h:222
void MHEG5paletteActivate(MHEG5Palette *palette)
Definition: mh5palette.c:102
void * STB_OSCreateMutex(void)
Create a mutex.
void MHEG5rootDeactivate(MHEG5Root *root)
Implementation of the Deactivation behaviour Deactivation This behaviour has the basic semantics of n...
Definition: mh5root.c:210
struct sMHEG5Ingredient * prev
Definition: mh5ingredient.h:84
MHEG5ActionList onCloseDown
Definition: mh5group.h:60
Event handling. Implementation of a combined queue for events and actions. This is the eventsystem wh...
void MHEG5paletteDestruct(MHEG5Palette *palette)
Definition: mh5palette.c:93
void MHEG5textDeactivate(MHEG5Text *text)
Apply the deactivation behaviour of the text class. As this class has no own deactivation behaviour t...
Definition: mh5text.c:348
H_Timer t_handle
Definition: mh5group.c:72
void MHEG5streamPrepare(MHEG5Stream *stream)
Apply the preparation behaviour of the stream class.
Definition: mh5stream.c:227
void MHEG5switchbuttonDestruct(MHEG5Switchbutton *switchbutton)
Destruct a switchbutton object.
void MHEG5bitmapFree(MHEG5Bitmap *bitmap)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5bitmap.c:109
#define MHEG5TRUE
Definition: mh5base.h:49
void MHEG5groupDeactivate(MHEG5Group *group)
Implementation of the Deactivation behaviour Deactivation If group is not active, ignore behaviour...
Definition: mh5group.c:802
MHEG5String objectInformation
Definition: mh5group.h:58
void MHEG5entryfieldActivate(MHEG5Entryfield *entryfield)
Apply the activation behaviour of the entryfield class. As this class has no own activation behaviour...
MHEG5Bool initiallyStopped
Definition: mh5ingredient.h:71
MH5GroupId group_id
Definition: mh5group.h:54
Implement functions to retrieve MHEG5objects by GroupID and ID.
void MHEG5palettePrepare(MHEG5Palette *palette)
Definition: mh5palette.c:84
MHEG5Ingredient * itemHead
Definition: mh5group.h:62
#define TRACER(x)
Definition: glue_debug.h:123
Mheg5 logging and debug printing.
void MHEG5bitmapActivate(MHEG5Bitmap *bitmap)
Apply the activation behaviour of the bitmap class. As this class has no own activation behaviour thi...
Definition: mh5bitmap.c:164
void MHEG5textActivate(MHEG5Text *text)
Apply the activation behaviour of the text class. As this class has no own activation behaviour this ...
Definition: mh5text.c:330
#define MAX_TIMERS
Definition: mh5group.c:59
MHEG5Int timer_id
Definition: mh5group.c:74
MHEG5Bool runningStatus
Definition: mh5root.h:51
void MHEG5integerVariableFree(MHEG5IntegerVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:433
void MHEG5rectanglePrepare(MHEG5Rectangle *rectangle)
Definition: mh5rectangle.c:120
void MHEG5videoFree(MHEG5Video *video)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5video.c:106
void MHEG5lineartDeactivate(MHEG5Lineart *lineart)
Definition: mh5lineart.c:238
void MHEG5switchbuttonDeactivate(MHEG5Switchbutton *switchbutton)
Apply the deactivation behaviour of the switchbutton class. As this class has no own deactivation beh...
#define GROUP_CP_DEFAULT
Definition: mh5group.c:60
MHEG5String groupName
Definition: mh5group.h:53
MHEG5Root root
Definition: mh5group.h:50
redirection include
void MHEG5actionDestruct(MHEG5ActionList actions)
<Function description>="">
Definition: mh5action.c:118
MHEG5Int id
Definition: mh5root.h:48
MHEG5Int originalCachePriority
Definition: mh5group.h:61
void MHEG5rtgraphicsDeactivate(MHEG5RTGraphics *rtgraphics)
Apply the deactivation behaviour of the RTGraphics class. As this class has no own deactivation behav...
void MHEG5switchbuttonPrepare(MHEG5Switchbutton *switchbutton)
Apply the preparation behaviour of the switchbutton class Apply the preparation behaviour of the swit...
void MHEG5cursorShapeActivate(MHEG5CursorShape *cursorShape)
Apply the activation behaviour of the cursorshape class. As this class has no own activation behaviou...
void MHEG5rtgraphicsDestruct(MHEG5RTGraphics *rtgraphics)
Destruct a RTGraphics object.
void MHEG5pushbuttonPrepare(MHEG5Pushbutton *pushbutton)
void MHEG5groupActivate(MHEG5Group *group)
Implementation of the Activation behaviour Activation.
Definition: mh5group.c:672
#define ERROR_PRINT(x)
Definition: mh5debug.h:76
MHEG5Scene * MHEG5getCurrentScene(void)
<Function description>="">
Definition: mh5scene.c:207
void MHEG5sendEvent(MHEG5Root *source, MHEG5EventType event, MHEG5Int data)
Store an event in the asynchronous event queue.
Definition: mh5queue.c:1540
void MHEG5rootInit(MHEG5Root *root)
Initialise a Root object with default values.
Definition: mh5root.c:87
void MHEG5hotspotFree(MHEG5Hotspot *hotspot)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5hotspot.c:75
void MHEG5listGroupPrepare(MHEG5ListGroup *listGroup)
Implementation of the ListGroup Preparation behaviour.
Definition: mh5listgroup.c:304
void STB_OSMutexLock(void *mutex)
Lock a mutex (a.k.a. &#39;enter&#39;, &#39;wait&#39; or &#39;get&#39;).
The timer module allows the use of timers within the MHEG5 component. These timers can be set by othe...
void MHEG5objectRefVariableFree(MHEG5ObjectRefVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:576
void MHEG5tokenGroupFree(MHEG5TokenGroup *tokenGroup)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
void MHEG5hotspotActivate(MHEG5Hotspot *hotspot)
Definition: mh5hotspot.c:95
MHEG5ErrorCode MHEG5programActivate(MHEG5Program *program)
Definition: mh5program.c:236
void MHEG5fontPrepare(MHEG5Font *font)
Definition: mh5font.c:142
void MHEG5switchbuttonFree(MHEG5Switchbutton *switchbutton)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
void MHEG5dynamicLineartFree(MHEG5DynamicLineart *dla)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
MHEG5Int cachePriority
Definition: mh5group.h:67
MHEG5GList * MHEG5resolveGenericBoolean(MHEG5GList *params, MHEG5Bool *value)
Definition: mh5object.c:454
void MHEG5octetStringVariableDestruct(MHEG5OctetStringVariable *variable)
Definition: mh5variable.c:483
void MHEG5lineartDestruct(MHEG5Lineart *lineart)
Definition: mh5lineart.c:245
MHEG5Int len
Definition: mh5base.h:84
void MHEG5booleanVariableFree(MHEG5BooleanVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:392
void MHEG5queueResolveTargets(MHEG5ActionList actions)
Finds targets for the action list.
Definition: mh5queue.c:1182
void MHEG5hypertextPrepare(MHEG5Hypertext *hypertext)
Definition: mh5hypertext.c:262
U8BIT BOOLEAN
Definition: techtype.h:99
#define TRUE
Definition: techtype.h:69
void MHEG5groupAddItem(MHEG5Group *group, MHEG5Ingredient *item)
Add an Item to the List.
Definition: mh5group.c:205
void MHEG5displayShowAll(void)
Redisplay all active visible objects. AKD: Optimised 12/5/99.
Definition: mh5display.c:1362
void MHEG5paletteFree(MHEG5Palette *palette)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5palette.c:71
void MHEG5pushbuttonDeactivate(MHEG5Pushbutton *pushbutton)
Include all classes.
void MHEG5lineartPrepare(MHEG5Lineart *lineart)
Definition: mh5lineart.c:215
#define mhegTimerDestroy
Definition: glue_timers.h:86
void MHEG5cursorShapeDeactivate(MHEG5CursorShape *cursorShape)
Apply the deactivation behaviour of the cursorshape class. As this class has no own deactivation beha...
void MHEG5textFree(MHEG5Text *text)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5text.c:204
Implement generic MHEG5-display functions - independent from the OSD These are generic functions used...
void MHEG5bitmapPrepare(MHEG5Bitmap *bitmap)
Apply the preparation behaviour of the bitmap class. As this class has no own preparation behaviour t...
Definition: mh5bitmap.c:146
void MHEG5dynamicLineartDestruct(MHEG5DynamicLineart *dynamicLineart)
Destruct a dynamiclineart object.
void MHEG5hypertextDestruct(MHEG5Hypertext *hypertext)
Definition: mh5hypertext.c:300
MHEG5Group * group_ptr
Definition: mh5group.c:73
void MHEG5rootFree(MHEG5Root *root)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5root.c:99
void MHEG5hypertextActivate(MHEG5Hypertext *hypertext)
Definition: mh5hypertext.c:276
void MHEG5dynamicLineartActivate(MHEG5DynamicLineart *dynamicLineart)
Apply the activation behaviour of the dynamiclineart class.
void MHEG5sliderDeactivate(MHEG5Slider *slider)
Apply the deactivation behaviour of the slider class. As this class has no own deactivation behaviour...
Definition: mh5slider.c:276
void MHEG5pushbuttonFree(MHEG5Pushbutton *pushbutton)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5pushbutton.c:97
void MHEG5paletteDeactivate(MHEG5Palette *palette)
Definition: mh5palette.c:117
void MHEG5audioDestruct(MHEG5Audio *audio)
Destruct an audio object.
Definition: mh5audio.c:205
void MHEG5sliderFree(MHEG5Slider *slider)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5slider.c:212
#define MHEG5FALSE
Definition: mh5base.h:48
uint32_t U32BIT
Definition: techtype.h:86
void MHEG5programPrepare(MHEG5Program *program)
Definition: mh5program.c:214
void MHEG5rectangleDestruct(MHEG5Rectangle *rectangle)
Definition: mh5rectangle.c:135
void MHEG5sendSync(MHEG5Root *source, MHEG5EventType event, MHEG5Int data)
Store an event in the synchronous event queue.
Definition: mh5queue.c:1651
void MHEG5lineartActivate(MHEG5Lineart *lineart)
Definition: mh5lineart.c:227
void MHEG5pushbuttonDestruct(MHEG5Pushbutton *pushbutton)
void MHEG5audioFree(MHEG5Audio *audio)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5audio.c:111
MHEG5Ingredient * itemTail
Definition: mh5group.h:63
void MHEG5bitmapDeactivate(MHEG5Bitmap *bitmap)
Apply the deactivation behaviour of the bitmap class. As this class has no own deactivation behaviour...
Definition: mh5bitmap.c:210
void MHEG5programDestruct(MHEG5Program *program)
Definition: mh5program.c:327
MHEG5Int total
Definition: mh5action.h:202
MHEG5Application * MHEG5getCurrentApplication(void)
<Function description>="">
void MHEG5entryfieldPrepare(MHEG5Entryfield *entryfield)
Apply the preparation behaviour of the entryfield class Apply the preparation behaviour of the entryf...
#define TRACE(t, x)
Definition: glue_debug.h:118
Header file - Function prototypes for operating system.