MHEG5  15.3.0
source/core/inc/mh5base.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002  * Copyright © 2014 The DTVKit Open Software Foundation Ltd (www.dtvkit.org)
00003  * Copyright © 2004 Ocean Blue Software Ltd
00004  * Copyright © 2000 Koninklijke Philips Electronics N.V
00005  *
00006  * This file is part of a DTVKit Software Component
00007  * You are permitted to copy, modify or distribute this file subject to the terms
00008  * of the DTVKit 1.0 Licence which can be found in licence.txt or at www.dtvkit.org
00009  * 
00010  * THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
00011  * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
00012  * OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
00013  * 
00014  * If you or your organisation is not a member of DTVKit then you have access
00015  * to this source code outside of the terms of the licence agreement
00016  * and you are expected to delete this and any associated files immediately.
00017  * Further information on DTVKit, membership and terms can be found at www.dtvkit.org
00018  *******************************************************************************/
00026 #ifndef _MH5BASE_H
00027 #define _MH5BASE_H
00028 
00029 /*---includes for this file--------------------------------------------------*/
00030 
00031 #include <stdio.h>
00032 
00033 #include "techtype.h"
00034 #include "glue_debug.h"
00035 
00036 /*---Constant and macro definitions for public use---------------------------*/
00037 
00038 /* Rules for version number:
00039    Realeases to customers             : n.n
00040    Minor releases to testers/internal : n.nbn
00041    Modified minor releases            : n.nbn+
00042 
00043    Example version sequence: 1.2, 1.3b0+, 1.3b1, 1.3b1+, 1.3b2, 1.3b2+, 1.3, ...
00044  */
00045 
00046 /* Boolean values */
00047 #define MHEG5FALSE          (0)
00048 #define MHEG5TRUE           (-1)
00049 
00050 #ifndef MHG_STRNCMP
00051 #define MHEG5strncmp(a, b, n)    strncmp((char *)a, (char *)b, n)
00052 #endif  /* #ifdef MHG_STRNCMP */
00053 
00054 #ifndef MHG_STRCMP
00055 #define MHEG5strcmp(a, b)    strcmp((char *)a, (char *)b)
00056 #endif  /* #ifdef MHG_STRCMP */
00057 
00058 #define INVALID_GRP_REF    0
00059 
00060 /*---Enumerations for public use---------------------------------------------*/
00061 
00062 /*---Global type defs for public use-----------------------------------------*/
00063 
00064 /*
00065      Simple Types
00066  */
00067 typedef short MHEG5Bool;
00068 typedef short MHEG5Short;
00069 typedef long MHEG5Int;
00070 typedef unsigned char MHEG5Byte;
00071 
00072 typedef struct SMHEG5IntPair
00073 {
00074    MHEG5Int x;
00075    MHEG5Int y;
00076 } MHEG5IntPair;
00077 
00078 typedef struct sMHEG5String
00079 {
00080    MHEG5Int len;
00081    MHEG5Byte *data;
00082 } MHEG5String;
00083 
00084 /* forward declaration of group structure */
00085 typedef struct sMHEG5Group sMHEG5Group;
00086 
00087 /* unique id for each new group created */
00088 typedef MHEG5Int MH5GroupId;
00089 
00090 /* forward declaration of pointer to group structure */
00091 typedef struct sMHEG5Group *MH5GroupPtr;
00092 
00093 typedef struct  sMH5GroupRef
00094 {
00095    MHEG5Int len;  /* if (len == 0) 'pgrp' points to group, else len is string length of 'name' */
00096    union
00097    {
00098       MHEG5Byte *name;
00099       MH5GroupPtr group;
00100    } ptr;
00101 } MH5GroupRef;
00102 
00103 typedef struct sMHEG5ObjectReference
00104 {
00105    MHEG5Int id;
00106    MH5GroupRef gref;
00107 } MHEG5ObjectReference;
00108 
00109 
00110 typedef enum
00111 {
00112    MHEG5NONEEVENT,
00113    /* Synchronous events */
00114    MHEG5ISAVAILABLE, MHEG5ISDELETED, MHEG5ISRUNNING, MHEG5ISSTOPPED,
00115    MHEG5TOKENMOVEDFROM, MHEG5TOKENMOVEDTO, MHEG5HIGHLIGHTON, MHEG5HIGHLIGHTOFF,
00116    MHEG5ISSELECTED, MHEG5ISDESELECTED, MHEG5TESTEVENT,
00117    MHEG5HEADITEMS, MHEG5TAILITEMS, MHEG5FIRSTITEMPRESENTED,
00118    MHEG5ITEMSELECTED, MHEG5ITEMDESELECTED, MHEG5LASTITEMPRESENTED,
00119    /* Asynchronous events */
00120    MHEG5ANCHORFIRED, MHEG5ASYNCHSTOPPED, MHEG5CONTENTAVAILABLE,
00121    MHEG5COUNTERTRIGGER, MHEG5CURSORENTER, MHEG5CURSORLEAVE,
00122    MHEG5ENGINEEVENT, MHEG5ENTRYFIELDFULL, MHEG5FOCUSMOVED,
00123    MHEG5INTERACTIONCOMPLETED, MHEG5SLIDERVALUECHANGED,
00124    MHEG5STREAMEVENT, MHEG5STREAMPLAYING, MHEG5STREAMSTOPPED,
00125    MHEG5TIMERFIRED, MHEG5USERINPUT,
00126    /* dummy last event */
00127    MHEG5LASTEVENT
00128 } MHEG5EventType;
00129 
00130 
00131 /*
00132      special MEGA-Type for holding a lot of MHEG5 types
00133  */
00134 typedef enum
00135 {
00136    MHEG5NONE, MHEG5INT, MHEG5BOOL, MHEG5NULL, MHEG5OCTETSTRING,
00137    MHEG5BRACKETOPEN, MHEG5BRACKETCLOSE, MHEG5EVENT, MHEG5CONTENTREF,
00138    MHEG5INTPAIR, MHEG5OBJECTREF, MHEG5OBJREFEXT, MHEG5CONTENTSIZE, MHEG5CONTENTCCP
00139 } E_ParamTypes;
00140 
00141 typedef MHEG5Bool MHEG5Boolean;
00142 
00143 typedef struct
00144 {
00145    U8BIT indirect;
00146    U8BIT isfirst;
00147    U16BIT type;
00148    union
00149    {
00150       MHEG5Int i;
00151       MHEG5Bool b;
00152       MHEG5String s;
00153       MHEG5EventType e;
00154       MHEG5IntPair p;
00155       MHEG5ObjectReference o;
00156    } value;
00157 } MHEG5Generic;
00158 
00159 
00160 
00161 
00162 /*
00163      List of Generic Items
00164  */
00165 struct sMHEG5GList
00166 {
00167    MHEG5Generic generic;
00168    struct sMHEG5GList *next;
00169 };
00170 
00171 typedef struct sMHEG5GList MHEG5GList;
00172 
00173 typedef MHEG5Generic MHEG5Colour;
00174 
00175 typedef struct sParamList
00176 {
00177    MHEG5Int total;
00178    MHEG5GList *params;
00179 } ParamList;
00180 
00181 
00182 
00183 /*
00184      MHEG5 Finals
00185  */
00186 typedef enum
00187 {
00188    MHEG5SCENE, MHEG5APPLICATION, MHEG5LINK, MHEG5PALETTE, MHEG5CURSORSHAPE,
00189    MHEG5FONT, MHEG5RESIDENTPROGRAM, MHEG5REMOTEPROGRAM, MHEG5INTERCHANGEDPROGRAM,
00190    MHEG5BOOLEANVARIABLE, MHEG5INTEGERVARIABLE,
00191    MHEG5OCTETSTRINGVARIABLE, MHEG5OBJECTREFVARIABLE, MHEG5CONTENTREFVARIABLE,
00192    MHEG5STREAM, MHEG5AUDIO, MHEG5TOKENGROUP, MHEG5LISTGROUP, MHEG5RTGRAPHICS,
00193    MHEG5LINEART, MHEG5BITMAP, MHEG5TEXT, MHEG5VIDEO, MHEG5SLIDER, MHEG5DYNAMICLINEART,
00194    MHEG5RECTANGLE, MHEG5ENTRYFIELD, MHEG5HYPERTEXT, MHEG5HOTSPOT, MHEG5PUSHBUTTON,
00195    MHEG5SWITCHBUTTON
00196 } MHEG5Final;
00197 
00198 
00199 typedef enum
00200 {
00201    MHEG5LEFT, MHEG5RIGHT, MHEG5UP, MHEG5DOWN
00202 } MHEG5Orientation;
00203 
00204 typedef enum
00205 {
00206    MHEG5NORMAL, MHEG5THERMOMETER, MHEG5PROPORTIONAL
00207 } MHEG5SliderStyle;
00208 
00209 typedef enum
00210 {
00211    MHEG5PUSHBUTTONS, MHEG5RADIOBUTTON, MHEG5CHECKBOX
00212 } MHEG5PushbuttonStyle;
00213 
00214 
00215 /*
00216      Error Codes
00217  */
00218 typedef enum
00219 {
00220    MHEG5ERR_NOERROR,
00221    MHEG5ERR_NOTYETSUPPORTED,
00222    MHEG5ERR_NOTSUPPORTEDBYPROFILE,
00223    MHEG5ERR_WRONGNUMBEROFPARAMS,
00224    MHEG5ERR_TARGETNOTAVAILABLE,
00225    MHEG5ERR_WRONGTARGET,
00226    MHEG5ERR_REFERENCEDPARAMNOTAVAILABLE,
00227    MHEG5ERR_WRONGPARAM,
00228    MHEG5ERR_PARAMNOTACTIVE,
00229    MHEG5ERR_NOSCENE,
00230    MHEG5ERR_TARGETNOTACTIVE,
00231    MHEG5ERR_NOSUCHITEM,
00232    MHEG5ERR_NOSUCHSLOT,
00233    MHEG5ERR_IGNORE_ACTION          /* Used by Launch, Spawn and TransitionTo */
00234 } MHEG5ErrorCode;
00235 
00236 typedef struct sMHEG5FontBody
00237 {
00238    MHEG5Bool referenced;
00239    union
00240    {
00241       MHEG5String included;
00242       struct
00243       {
00244          MHEG5Int id;
00245          MH5GroupRef grp;
00246       } referenced;
00247    } ref;
00248 } MHEG5FontBody;
00249 
00250 
00251 typedef enum
00252 {
00253    SCENE_RATIO_16x9,
00254    SCENE_RATIO_4x3,
00255    SCENE_RATIO_UNSPECIFIED
00256 } MHEG5SceneRatio_t;
00257 
00258 /*---Global variable declarations for public use-----------------------------*/
00259 
00260 /*---Global Function prototypes for public use-------------------------------*/
00261 
00267 #ifdef MHG_TRACK_MEM
00268 MHEG5String MHEG5stringCopyFunc(MHEG5String source, int line );
00269 #define MHEG5stringCopy(s)   MHEG5stringCopyFunc(s, __LINE__)
00270 #else
00271 MHEG5String MHEG5stringCopy(MHEG5String source);
00272 #endif
00273 MHEG5String MHEG5stringCopyChr(const char *source);
00274 MHEG5String MHEG5stringCat(MHEG5String string1, MHEG5String string2);
00275 void MHEG5stringDestruct(MHEG5String *item);
00276 MHEG5Int MHEG5strToInt(MHEG5String string);
00277 MHEG5Bool MHEG5stringEqual(MHEG5String *s1, MHEG5String *s2);
00278 MHEG5String MHEG5intToStr(MHEG5Int i);
00279 
00280 #ifdef MHEG5LOG
00281 
00282 char* MHEG5stringGet(MHEG5String source);
00283 
00284 #endif
00285 
00286 void MHEG5genericInit(MHEG5Generic *item);
00287 void MHEG5genericSet(MHEG5Generic *item, MHEG5Int initialValue);
00288 void MHEG5genericBSet(MHEG5Generic *item, MHEG5Bool initialValue);
00289 void MHEG5genericSSet(MHEG5Generic *item, char *initialValue);
00290 void MHEG5genericDestruct(MHEG5Generic *item);
00291 MHEG5Bool MHEG5genericEqual(MHEG5Generic *g1, MHEG5Generic *g2);
00292 void MHEG5genericCopy(MHEG5Generic *dest, MHEG5Generic *src);
00293 
00294 void MHEG5gListDestruct(MHEG5GList *item);
00295 MHEG5GList* MHEG5gListCopy(MHEG5GList *list);
00296 void MHEG5colourInit(MHEG5Colour *item, MHEG5Int initialValue);
00297 void MHEG5colourDestruct(MHEG5Colour *item);
00298 
00299 #ifdef MHG_STRNCMP
00300 
00301 int MHEG5strncmp(char *a, char *b, int n);
00302 
00303 #endif  /* #ifdef MHG_STRNCMP */
00304 
00305 #ifdef MHG_STRCMP
00306 
00307 int MHEG5strcmp(char *a, char *b);
00308 
00309 #endif  /* #ifdef MHG_STRCMP */
00310 
00315 unsigned long MHEG5random(void);
00316 
00317 
00328 char* MHEG5safeStrcat(char *dest, size_t destLength,
00329    const char *source);
00330 
00331 
00332 #ifdef _WIN32_WCE
00333 TCHAR* StrToUnicode(char *string);
00334 char* StrFromUnicode(TCHAR *string);
00335 #endif
00336 
00337 /*
00338    Debug
00339  */
00340 #ifdef MH5PRINTOUT
00341 void MHEG5classPrint(MHEG5Final class, char *out);
00342 void MHEG5indent(char *out);
00343 int  MHEG5setIndent(int i);
00344 void MHEG5incIndent(void);
00345 void MHEG5decIndent(void);
00346 void MHEG5newLine(char *out);
00347 
00348 #define MHEG_PRINT(out, str)  STB_DebugLogPrintf(str)
00349 #define MHEG5intPrint(i, out) STB_DebugLogPrintf("%ld", i)
00350 #define MHEG5hexPrint(i, out) STB_DebugLogPrintf("%#x", i)
00351 #endif  /* #ifdef MH5PRINTOUT */
00352 
00353 #if defined(MHEG5LOG) || defined(MH5PRINTOUT)
00354 void MHEG5eventPrint(MHEG5EventType e, char *out);
00355 void MHEG5stringPrint(MHEG5String s, char *out);
00356 void MHEG5objectrefPrint(MHEG5ObjectReference o, char *out);
00357 void MHEG5boolPrint(MHEG5Bool b, char *out);
00358 void MHEG5genericPrint(MHEG5Generic g, char *out, U8BIT dotype);
00359 void MHEG5colourPrint(MHEG5Colour c, char *out);
00360 void MHEG5gListPrint(MHEG5GList *l, char *out, U8BIT noTypeCnt);
00361 void MHEG5cListPrint(MHEG5GList *l, char *out);
00362 void MHEG5sdListPrint(MHEG5GList *l, char *out);
00363 void MHEG5clrListPrint(MHEG5GList *l, char *out);
00364 #endif  /* #ifdef MHEG5LOG */
00365 
00366 #ifdef TRACING
00367 extern int extra_trace_param;
00368 #endif
00369 
00370 #endif /*_MH5BASE_H*/
 All Data Structures Files Functions Variables Typedefs Defines