MHEG-5  19.3.0
MHEG-5 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 {
72  H_Timer t_handle;
73  MHEG5Group *group_ptr;
74  MHEG5Int timer_id;
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  }
160  if (group->originalCachePriority != GROUP_CP_DEFAULT)
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;*/
298  group->cachePriority = GROUP_CP_DEFAULT;
299  group->originalCachePriority = GROUP_CP_DEFAULT;
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 
321  MHEG5stringDestruct(&group->objectInformation);
322 
323  MHEG5actionDestruct(group->onStartUp);
324  group->onStartUp.a_ptr = 0;
325  group->onStartUp.total = 0;
326 
327  MHEG5actionDestruct(group->onCloseDown);
328  group->onCloseDown.a_ptr = 0;
329  group->onCloseDown.total = 0;
330 
331  MHEG5stringDestruct(&group->groupName);
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))
357  MHEG5queueResolveTargets( group->onStartUp );
358  }
359  if (group->onCloseDown.a_ptr)
360  {
361  TRACE(TEVNTS, ("onCloseDown %p, %p", group, group->onCloseDown))
362  MHEG5queueResolveTargets( 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:
389  MHEG5lineartPrepare((MHEG5Lineart *) item);
390  break;
391  case MHEG5DYNAMICLINEART:
393  break;
394  case MHEG5RECTANGLE:
395  MHEG5rectanglePrepare((MHEG5Rectangle *) item);
396  break;
397  case MHEG5RESIDENTPROGRAM:
398  case MHEG5REMOTEPROGRAM:
399  case MHEG5INTERCHANGEDPROGRAM:
400  MHEG5programPrepare((MHEG5Program *) item);
401  break;
402  case MHEG5BOOLEANVARIABLE:
404  break;
405  case MHEG5INTEGERVARIABLE:
407  break;
408  case MHEG5OCTETSTRINGVARIABLE:
410  break;
411  case MHEG5OBJECTREFVARIABLE:
413  break;
414  case MHEG5CONTENTREFVARIABLE:
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:
428  MHEG5hotspotPrepare((MHEG5Hotspot *)item);
429  break;
430  case MHEG5PUSHBUTTON:
431  MHEG5pushbuttonPrepare((MHEG5Pushbutton *)item);
432  break;
433  case MHEG5SWITCHBUTTON:
435  break;
436  case MHEG5RTGRAPHICS:
437  /*MHEG5rtgraphicsPrepare((MHEG5RTGraphics *) item); <- done by parent stream */
438  break;
439  case MHEG5PALETTE:
440  MHEG5palettePrepare((MHEG5Palette *)item);
441  break;
442  case MHEG5CURSORSHAPE:
444  break;
445  #endif
446  case MHEG5FONT:
447  MHEG5fontPrepare((MHEG5Font *)item);
448  break;
449  case MHEG5TOKENGROUP:
450  MHEG5tokenGroupPrepare((MHEG5TokenGroup *)item);
451  break;
452  case MHEG5LISTGROUP:
454  break;
455  case MHEG5ENTRYFIELD:
457  break;
458  case MHEG5HYPERTEXT:
459  MHEG5hypertextPrepare((MHEG5Hypertext *)item);
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))
476  MHEG5programPrepare((MHEG5Program *) item);
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:
530  MHEG5lineartDestruct((MHEG5Lineart *) item);
532  break;
533  case MHEG5DYNAMICLINEART:
536  break;
537  case MHEG5RECTANGLE:
538  MHEG5rectangleDestruct((MHEG5Rectangle *) item);
540  break;
541  case MHEG5RESIDENTPROGRAM:
542  case MHEG5REMOTEPROGRAM:
543  case MHEG5INTERCHANGEDPROGRAM:
544  MHEG5programDestruct((MHEG5Program *) item);
546  break;
547  case MHEG5BOOLEANVARIABLE:
550  break;
551  case MHEG5INTEGERVARIABLE:
554  break;
555  case MHEG5OCTETSTRINGVARIABLE:
556  MHEG5octetStringVariableDestruct((MHEG5OctetStringVariable *) item);
558  break;
559  case MHEG5OBJECTREFVARIABLE:
562  break;
563  case MHEG5CONTENTREFVARIABLE:
564  MHEG5contentVariableDestruct((MHEG5ContentVariable *) item);
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:
581  MHEG5hotspotDestruct((MHEG5Hotspot *)item);
583  break;
584  case MHEG5PUSHBUTTON:
585  MHEG5pushbuttonDestruct((MHEG5Pushbutton *)item);
587  break;
588  case MHEG5SWITCHBUTTON:
591  break;
592  case MHEG5RTGRAPHICS:
595  break;
596  case MHEG5PALETTE:
597  MHEG5paletteDestruct((MHEG5Palette *)item);
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:
610  MHEG5tokenGroupDestruct((MHEG5TokenGroup *)item);
612  break;
613  case MHEG5LISTGROUP:
616  break;
617  case MHEG5ENTRYFIELD:
620  break;
621  case MHEG5HYPERTEXT:
622  MHEG5hypertextDestruct((MHEG5Hypertext *)item);
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:
711  MHEG5lineartActivate((MHEG5Lineart *) item);
712  break;
713  case MHEG5DYNAMICLINEART:
715  break;
716  case MHEG5RECTANGLE:
717  MHEG5rectangleActivate((MHEG5Rectangle *) item);
718  break;
719  case MHEG5RESIDENTPROGRAM:
720  case MHEG5REMOTEPROGRAM:
721  case MHEG5INTERCHANGEDPROGRAM:
722  MHEG5programActivate((MHEG5Program *) item);
723  break;
724  case MHEG5BOOLEANVARIABLE:
725  case MHEG5INTEGERVARIABLE:
726  case MHEG5OCTETSTRINGVARIABLE:
727  case MHEG5OBJECTREFVARIABLE:
728  case MHEG5CONTENTREFVARIABLE:
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:
742  MHEG5hotspotActivate((MHEG5Hotspot *)item);
743  break;
744  case MHEG5PUSHBUTTON:
745  MHEG5pushbuttonActivate((MHEG5Pushbutton *)item);
746  break;
747  case MHEG5SWITCHBUTTON:
749  break;
750  case MHEG5RTGRAPHICS:
751  /*MHEG5rtgraphicsActivate((MHEG5RTGraphics *) item); <- done by parent stream */
752  break;
753  case MHEG5PALETTE:
754  MHEG5paletteActivate((MHEG5Palette *)item);
755  break;
756  case MHEG5CURSORSHAPE:
758  break;
759  #endif
760  case MHEG5FONT:
761  MHEG5fontActivate((MHEG5Font *)item);
762  break;
763  case MHEG5TOKENGROUP:
764  MHEG5tokenGroupActivate((MHEG5TokenGroup *)item);
765  break;
766  case MHEG5LISTGROUP:
768  break;
769  case MHEG5ENTRYFIELD:
771  break;
772  case MHEG5HYPERTEXT:
773  MHEG5hypertextActivate((MHEG5Hypertext *)item);
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;
785  group->startTime = STB_OSGetClockMilliseconds();
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:
831  MHEG5lineartDeactivate((MHEG5Lineart *) item);
832  break;
833  case MHEG5DYNAMICLINEART:
835  break;
836  case MHEG5RECTANGLE:
837  MHEG5rectangleDeactivate((MHEG5Rectangle *) item);
838  break;
839  case MHEG5RESIDENTPROGRAM:
840  case MHEG5REMOTEPROGRAM:
841  case MHEG5INTERCHANGEDPROGRAM:
842  MHEG5programDeactivate((MHEG5Program *) item);
843  break;
844  case MHEG5BOOLEANVARIABLE:
845  case MHEG5INTEGERVARIABLE:
846  case MHEG5OCTETSTRINGVARIABLE:
847  case MHEG5OBJECTREFVARIABLE:
848  case MHEG5CONTENTREFVARIABLE:
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:
862  MHEG5hotspotDeactivate((MHEG5Hotspot *)item);
863  break;
864  case MHEG5PUSHBUTTON:
865  MHEG5pushbuttonDeactivate((MHEG5Pushbutton *)item);
866  break;
867  case MHEG5SWITCHBUTTON:
869  break;
870  case MHEG5RTGRAPHICS:
872  break;
873  case MHEG5PALETTE:
874  MHEG5paletteDeactivate((MHEG5Palette *)item);
875  break;
876  case MHEG5CURSORSHAPE:
878  break;
879  #endif
880  case MHEG5FONT:
881  MHEG5fontDeactivate((MHEG5Font *)item);
882  break;
883  case MHEG5TOKENGROUP:
884  MHEG5tokenGroupDeactivate((MHEG5TokenGroup *)item);
885  break;
886  case MHEG5LISTGROUP:
888  break;
889  case MHEG5ENTRYFIELD:
891  break;
892  case MHEG5HYPERTEXT:
893  MHEG5hypertextDeactivate((MHEG5Hypertext *)item);
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 
937 MHEG5ErrorCode MHEG5setCachePriority(MHEG5Root *target, MHEG5GList *params)
938 {
939  MHEG5Int value = 0;
940 
941  assert(target);
942 
943  if (!params)
944  {
945  return MHEG5ERR_WRONGNUMBEROFPARAMS;
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))
969  MHEG5sendEvent((MHEG5Root *) gt->group_ptr, MHEG5TIMERFIRED, gt->timer_id );
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 
1070 MHEG5ErrorCode MHEG5setTimer(MHEG5Root *target, MHEG5GList *params)
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  {
1083  return MHEG5ERR_WRONGNUMBEROFPARAMS;
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
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
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
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
void MHEG5contentVariableFree(MHEG5ContentVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:622
void MHEG5dynamicLineartDeactivate(MHEG5DynamicLineart *dynamicLineart)
Apply the deactivation behaviour of the dynamiclineart class.
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 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...
void MHEG5rootDestruct(MHEG5Root *root)
Implementation of the Destruction behaviour Destruction This behaviour has the basic semantics of ask...
Definition: mh5root.c:247
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
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
void MHEG5listGroupActivate(MHEG5ListGroup *listGroup)
Implementation of the ListGroup Activation behaviour.
Definition: mh5listgroup.c:423
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
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 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
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 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 MHEG5streamActivate(MHEG5Stream *stream)
Apply the activation behaviour of the stream class. Execute the following sequence of actions: ...
Definition: mh5stream.c:340
void MHEG5integerVariablePrepare(MHEG5IntegerVariable *variable)
Sets all internal attributes for the specified object to their default values.
Definition: mh5variable.c:417
void MHEG5groupInit(MHEG5Group *group)
Initialise an Group object with default Values.
Definition: mh5group.c:285
void STB_OSMutexUnlock(void *mutex)
Unlock a mutex (a.k.a. &#39;leave&#39;, &#39;signal&#39; or &#39;release&#39;)
void MHEG5dynamicLineartPrepare(MHEG5DynamicLineart *dynamicLineart)
Apply the preparation behaviour of the dynamiclineart class Apply the preparation behaviour of the dy...
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.
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 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 MHEG5entryfieldDeactivate(MHEG5Entryfield *entryfield)
Apply the deactivation behaviour of the entryfield class. As this class has no own deactivation behav...
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
Event handling. Implementation of a combined queue for events and actions. This is the eventsystem wh...
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
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
void MHEG5groupDeactivate(MHEG5Group *group)
Implementation of the Deactivation behaviour Deactivation If group is not active, ignore behaviour...
Definition: mh5group.c:802
void MHEG5entryfieldActivate(MHEG5Entryfield *entryfield)
Apply the activation behaviour of the entryfield class. As this class has no own activation behaviour...
Implement functions to retrieve MHEG5objects by GroupID and ID.
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
void MHEG5integerVariableFree(MHEG5IntegerVariable *variable)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5variable.c:433
void MHEG5videoFree(MHEG5Video *video)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5video.c:106
void MHEG5switchbuttonDeactivate(MHEG5Switchbutton *switchbutton)
Apply the deactivation behaviour of the switchbutton class. As this class has no own deactivation beh...
redirection include
void MHEG5actionDestruct(MHEG5ActionList actions)
<Function description>="">
Definition: mh5action.c:118
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 MHEG5groupActivate(MHEG5Group *group)
Implementation of the Activation behaviour Activation.
Definition: mh5group.c:672
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 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...
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 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
Include all classes.
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 MHEG5rootFree(MHEG5Root *root)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5root.c:99
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 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
void MHEG5sendSync(MHEG5Root *source, MHEG5EventType event, MHEG5Int data)
Store an event in the synchronous event queue.
Definition: mh5queue.c:1651
void MHEG5audioFree(MHEG5Audio *audio)
Free off all memory associated with the specified object, including any exchanged attributes and inte...
Definition: mh5audio.c:111
void MHEG5bitmapDeactivate(MHEG5Bitmap *bitmap)
Apply the deactivation behaviour of the bitmap class. As this class has no own deactivation behaviour...
Definition: mh5bitmap.c:210
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.