40 #include "dsm_types.h" 45 #define MHEG5CP_DEFAULT 127 53 static int indent = 0;
67 void MHEG5indent(
char *out)
71 for (i = 0; i < indent; i++)
77 int MHEG5setIndent(
int i)
84 void MHEG5incIndent(
void)
89 void MHEG5decIndent(
void)
94 void MHEG5newLine(
char *out)
96 MHEG_PRINT(out,
"\n");
99 void MHEG5classPrint(MHEG5Final
class,
char *out)
104 MHEG_PRINT(out,
"{ :Scene");
106 case MHEG5APPLICATION:
107 MHEG_PRINT(out,
"{ :Application");
110 MHEG_PRINT(out,
"{ :Link");
113 MHEG_PRINT(out,
"{ :Palette");
115 case MHEG5CURSORSHAPE:
116 MHEG_PRINT(out,
"{ :Cursorshape");
119 MHEG_PRINT(out,
"{ :Font");
121 case MHEG5RESIDENTPROGRAM:
122 MHEG_PRINT(out,
"{ :ResidentPrg");
124 case MHEG5REMOTEPROGRAM:
125 MHEG_PRINT(out,
"{ :Remoteprogram");
127 case MHEG5INTERCHANGEDPROGRAM:
128 MHEG_PRINT(out,
"{ :Interchangedprogram");
130 case MHEG5BOOLEANVARIABLE:
131 MHEG_PRINT(out,
"{ :BooleanVar");
133 case MHEG5INTEGERVARIABLE:
134 MHEG_PRINT(out,
"{ :IntegerVar");
136 case MHEG5OCTETSTRINGVARIABLE:
137 MHEG_PRINT(out,
"{ :OStringVar");
139 case MHEG5OBJECTREFVARIABLE:
140 MHEG_PRINT(out,
"{ :ObjectRefVar");
142 case MHEG5CONTENTREFVARIABLE:
143 MHEG_PRINT(out,
"{ :ContentRefVar");
146 MHEG_PRINT(out,
"{ :Stream");
149 MHEG_PRINT(out,
"{ :Audio");
151 case MHEG5TOKENGROUP:
152 MHEG_PRINT(out,
"{ :Tokengroup");
155 MHEG_PRINT(out,
"{ :Listgroup");
157 case MHEG5RTGRAPHICS:
158 MHEG_PRINT(out,
"{ :Rtgraphics");
161 MHEG_PRINT(out,
"{ :Lineart");
164 MHEG_PRINT(out,
"{ :Bitmap");
167 MHEG_PRINT(out,
"{ :Text");
170 MHEG_PRINT(out,
"{ :Video");
173 MHEG_PRINT(out,
"{ :Slider");
175 case MHEG5DYNAMICLINEART:
176 MHEG_PRINT(out,
"{ :Dynamiclineart");
179 MHEG_PRINT(out,
"{ :Rectangle");
181 case MHEG5ENTRYFIELD:
182 MHEG_PRINT(out,
"{ :Entryfield");
185 MHEG_PRINT(out,
"{ :Hypertext");
188 MHEG_PRINT(out,
"{ :Hotspot");
190 case MHEG5PUSHBUTTON:
191 MHEG_PRINT(out,
"{ :Pushbutton");
193 case MHEG5SWITCHBUTTON:
194 MHEG_PRINT(out,
"{ :Switchbutton");
197 MHEG_PRINT(out,
"{:InternalError");
204 #if defined(MHEG5LOG) || defined(MH5PRINTOUT) 208 void MHEG5eventPrint(MHEG5EventType e,
char *out)
210 MHEG_PRINT(out, MHEG5eventToString(e));
219 for (i = 0; i != s.len && j < 1020; i++)
221 if ((s.data[i] >=
' ' && s.data[i] <
'=') ||
222 (s.data[i] >
'=' && s.data[i] <= 127) ||
225 buff[j++] = s.data[i];
230 buff[j++] = (s.data[i] >> 4) < 10 ? (s.data[i] >> 4) +
'0' : (s.data[i] >> 4) +
'A' - 10;
231 buff[j++] = (s.data[i] & 0x0F) < 10 ? (s.data[i] & 0x0F) +
'0' : (s.data[i] & 0x0F) +
'A' - 10;
235 MHEG_PRINT(out,
"'");
236 MHEG_PRINT(out, buff);
237 MHEG_PRINT(out,
"'");
246 for (i = 0; i != s.len && j < 124; i++)
249 buff[j++] = (s.data[i] >> 4) < 10 ? (s.data[i] >> 4) +
'0' : (s.data[i] >> 4) +
'A' - 10;
250 buff[j++] = (s.data[i] & 0x0F) < 10 ? (s.data[i] & 0x0F) +
'0' : (s.data[i] & 0x0F) +
'A' - 10;
253 MHEG_PRINT(out,
"'");
254 MHEG_PRINT(out, buff);
255 MHEG_PRINT(out,
"'");
262 MHEG_PRINT(out,
"(");
263 MHEG5stringPrint( *((
MHEG5String *)&o.gref), out );
264 MHEG_PRINT(out,
" ");
265 MHEG5intPrint(o.id, out);
266 MHEG_PRINT(out,
")");
270 MHEG5intPrint(o.id, out);
274 void MHEG5boolPrint(MHEG5Bool b,
char *out)
278 MHEG_PRINT(out,
"TRUE");
282 MHEG_PRINT(out,
"FALSE");
291 pGroup = gref.ptr.group;
292 if (pGroup && gref.len == 0)
294 search = pGroup->hashIngred[
id & 0xff];
295 while (search && (search->root.id !=
id))
297 search = search->hnxt;
305 search = pGroup->hashIngred[
id & 0xff];
306 while (search && (search->root.id !=
id))
308 search = search->hnxt;
315 void MHEG5genericPrint(
MHEG5Generic g,
char *out, U8BIT dotype)
324 MHEG_PRINT(out,
":GInteger ");
326 MHEG_PRINT(out,
":IndirectRef ");
327 MHEG5intPrint(g.value.i, out);
331 MHEG_PRINT(out,
":GBoolean ");
333 MHEG_PRINT(out,
":IndirectRef ");
334 MHEG5boolPrint(g.value.b, out);
339 case MHEG5OCTETSTRING:
341 MHEG_PRINT(out,
":GOctetString ");
343 MHEG_PRINT(out,
":IndirectRef ");
344 MHEG5stringPrint(g.value.s, out);
346 case MHEG5BRACKETOPEN:
347 MHEG_PRINT(out,
"(");
349 case MHEG5BRACKETCLOSE:
350 MHEG_PRINT(out,
")");
353 MHEG5eventPrint(g.value.e, out);
356 MHEG5intPrint(g.value.p.x, out);
357 MHEG_PRINT(out,
" ");
358 MHEG5intPrint(g.value.p.y, out);
369 object = FindObject(g.value.o.gref, g.value.o.id);
372 switch (object->clazz)
374 case MHEG5BOOLEANVARIABLE:
375 MHEG_PRINT(out,
":GBoolean ");
377 case MHEG5OCTETSTRINGVARIABLE:
380 MHEG_PRINT(out,
":GOctetString ");
382 else if (dotype == 4)
384 MHEG_PRINT(out,
":NewAbsoluteColour ");
387 case MHEG5INTEGERVARIABLE:
388 MHEG_PRINT(out,
":GInteger ");
390 case MHEG5OBJECTREFVARIABLE:
391 MHEG_PRINT(out,
":GObjectRef ");
393 case MHEG5CONTENTREFVARIABLE:
396 MHEG_PRINT(out,
":NewRefContent (");
401 MHEG_PRINT(out,
":GContentRef ");
408 MHEG_PRINT(out,
":IndirectRef ");
412 MHEG_PRINT(out,
":GObjectRef ");
414 MHEG5objectrefPrint(g.value.o, out);
420 case MHEG5CONTENTREF:
421 MHEG_PRINT(out,
":NewRefContent (");
422 MHEG5stringPrint(g.value.s, out);
425 MHEG_PRINT(out,
"// :InternalError ");
435 MHEG5hexPrint(c.value.i, out);
437 case MHEG5OCTETSTRING:
438 MHEG5octetPrint(c.value.s, out);
441 MHEG_PRINT(out,
"??");
446 void MHEG5gListPrint(
MHEG5GList *l,
char *out, U8BIT noTypeCnt)
451 MHEG5genericPrint(l->generic, out, (count > noTypeCnt) ? 1 : 0);
452 MHEG_PRINT(out,
" ");
456 while (!l->generic.isfirst);
459 void MHEG5sdListPrint(
MHEG5GList *l,
char *out)
461 MHEG5genericPrint(l->generic, out, 0);
462 MHEG_PRINT(out,
" ");
464 if (l->generic.type == MHEG5CONTENTREF)
466 MHEG5genericPrint(l->generic, out, 0);
467 MHEG_PRINT(out,
" ");
469 if (!l->generic.isfirst)
472 if (!l->generic.isfirst &&
473 l->generic.type == MHEG5INT &&
474 l->generic.value.i != MHEG5CP_DEFAULT)
476 MHEG_PRINT(out,
" :NewCCPriority ");
477 MHEG5intPrint(l->generic.value.i, out);
480 MHEG_PRINT(out,
" )");
486 MHEG5genericPrint(l->generic, out, 2);
487 MHEG_PRINT(out,
" ");
490 while (!l->generic.isfirst);
494 void MHEG5clrListPrint(
MHEG5GList *l,
char *out)
496 MHEG5genericPrint(l->generic, out, FALSE);
497 MHEG_PRINT(out,
" ");
501 MHEG5genericPrint(l->generic, out, 4);
502 MHEG_PRINT(out,
" ");
505 while (!l->generic.isfirst);
508 void MHEG5cListPrint(
MHEG5GList *l,
char *out)
510 MHEG5genericPrint(l->generic, out, 0);
511 MHEG_PRINT(out,
" ");
513 MHEG5genericPrint(l->generic, out, 0);
514 MHEG_PRINT(out,
" ");
519 if (l->generic.type != MHEG5NONE)
523 MHEG5genericPrint(l->generic, out, 1);
524 MHEG_PRINT(out,
" ");
528 while (!l->generic.isfirst);
551 rc = MHEG5getMem( source.len + 1 );
555 memcpy(rc, source.data, source.len);
556 rc[source.len] =
'\0';
582 rc.data = STR_DataAllocFunc( source.len, line + 5000 );
584 rc.data = STR_DataAlloc( source.len );
588 assert(rc.data != source.data);
589 memcpy(rc.data, source.data, source.len);
617 rc.len = strlen(source);
626 rc.data = STR_DataAlloc( rc.len );
634 memcpy(rc.data, source, rc.len);
652 if (source1.len + source2.len == 0)
659 rc.data = STR_DataAlloc( source1.len + source2.len );
668 memcpy(rc.data, source1.data, source1.len);
672 memcpy(&rc.data[source1.len], source2.data, source2.len);
674 rc.len = source1.len + source2.len;
689 if (item->data != NULL)
692 STR_DataFree( item->data, item->len );
712 if (s1->len != s2->len)
718 if (s1->data == s2->data)
724 if (memcmp(s1->data, s2->data, s1->len) != 0)
741 register int i, mp = 1, j = 0;
746 if ((
string.len > 1) && ((
string.data[1] ==
'x') || (
string.data[1] ==
'X')))
748 for (i = 2; i <
string.len; i++)
749 if ((
string.data[i] >=
'0') && (
string.data[i] <=
'9'))
750 rc = rc * 16 + ((int)
string.data[i] - (
int)
'0');
751 else if ((
string.data[i] >=
'a') && (
string.data[i] <=
'z'))
752 rc = rc * 16 + ((int)
string.data[i] - (
int)
'a') + 10;
753 else if ((
string.data[i] >=
'A') && (
string.data[i] <=
'Z'))
754 rc = rc * 16 + ((int)
string.data[i] - (
int)
'A') + 10;
762 if (
string.data[0] ==
'-')
767 if (
string.data[0] ==
'+')
772 for (i = j; i <
string.len; i++)
773 if ((
string.data[i] >=
'0') && (
string.data[i] <=
'9'))
774 rc = rc * 10 + ((int)
string.data[i] - (
int)
'0');
790 register int pos = 0, jj, sgn = 0;
798 while (i != (MHEG5Int)0)
802 buf[pos++] = (char) (abs(jj) + (int)
'0');
812 rc.data = STR_DataAlloc( pos );
819 for (jj = 0; jj < pos; jj++)
821 rc.data[jj] = buf[pos - 1 - jj];
839 case MHEG5OCTETSTRING:
840 case MHEG5CONTENTREF:
875 if (src->type == MHEG5OCTETSTRING)
897 if (g1->type != g2->type)
899 if (g1->indirect != g2->indirect)
908 case MHEG5BRACKETOPEN:
909 case MHEG5BRACKETCLOSE:
913 return (MHEG5Bool) (g1->value.i == g2->value.i);
915 return (MHEG5Bool) ((g1->value.b != MHEG5FALSE) == (g2->value.b != MHEG5FALSE));
916 case MHEG5OCTETSTRING:
919 return (MHEG5Bool) (g1->value.e == g2->value.e);
981 item->indirect = MHEG5FALSE;
982 item->type = MHEG5INT;
983 item->value.i = initialValue;
990 int MHEG5strncmp(
char *a,
char *b,
int n)
994 for (i = 0; i < n; i++)
996 if ((a[i] == 0) && (b[i] == 0))
1015 else if (a[i] > b[i])
1029 int MHEG5strcmp(
char *a,
char *b)
1035 if ((a[i] == 0) && (b[i] == 0))
1054 else if (a[i] > b[i])
1073 static unsigned long randval = 0;
1088 randval = 1664525 * randval + 1013904223;
1108 destIndex = strlen(dest);
1110 while ((source[sourceIndex] !=
'\0') && (destIndex < destLength - 1))
1112 dest[destIndex] = source[sourceIndex];
1116 dest[destIndex] =
'\0';
1121 #if defined(_WIN32_WCE) 1124 TCHAR wtempstr[256];
1126 TCHAR* StrToUnicode(
char *
string)
1128 MultiByteToWideChar(CP_ACP, MB_COMPOSITE,
string, -1, wtempstr, 255);
1132 char* StrFromUnicode(TCHAR *
string)
1134 WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR | WC_SEPCHARS,
string, -1, tempstr,
sizeof(tempstr) - 1, NULL, NULL);
U32BIT STB_OSGetClockMilliseconds(void)
Get Current Computer Clock Time.
MHEG5Int MHEG5strToInt(MHEG5String string)
Convert a MHEG5String to a MHEG5Integer.
Event to String conversion.
unsigned long MHEG5random(void)
Calculate and return a psuedo random number.
MHEG5Bool MHEG5genericEqual(MHEG5Generic *g1, MHEG5Generic *g2)
Compare two generic Variables.
void MHEG5gListDestruct(MHEG5GList *item)
Destruct a list of MHEG5Generic objects.
MHEG5String MHEG5stringCat(MHEG5String source1, MHEG5String source2)
Concatenate two MHEG5Strings.
Implementation of the Group class Description Defines the structure and behaviour of objects used as ...
MHEG5GList * MHEG5gListCopy(MHEG5GList *list)
Copy a list of MHEG5Generic objects.
MHEG5String MHEG5intToStr(MHEG5Int i)
Convert MHEG5Int to MHEG5String.
MHEG5String MHEG5stringCopy(MHEG5String source)
<Function description>="">
void MHEG5stringDestruct(MHEG5String *item)
Destruct a MHEG5String.
char * MHEG5safeStrcat(char *dest, size_t destLength, const char *source)
Perform a standard strcat restricted to the length of the destination. The dest string will always be...
void MHEG5genericDestruct(MHEG5Generic *item)
Destruct a MHEG5Generic.
Implementation of the MHEG5 Application Class Defines a set of Ingredient objects, which are shared within an application scope. Base class: Group Subclasses: None Status: Concrete class.
Mheg5 logging and debug printing.
MHEG5Bool MHEG5stringEqual(MHEG5String *s1, MHEG5String *s2)
Compare two Strings (case sensitive!)
void MHEG5genericSet(MHEG5Generic *item, MHEG5Int initialValue)
Set a MHEG5Generic to the MHEG5Int value.
MHEG5String MHEG5stringCopyChr(const char *source)
Copy the C-String source to a MHEG5String.
void MHEG5genericCopy(MHEG5Generic *dest, MHEG5Generic *src)
Copy a MHEG5Generic.
MHEG5Application * MHEG5getCurrentApplication(void)
<Function description>="">
Header file - Function prototypes for operating system.