MHEG5
15.3.0
|
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*/