Index: trunk/i386/libsaio/xml.c =================================================================== --- trunk/i386/libsaio/xml.c (revision 1103) +++ trunk/i386/libsaio/xml.c (revision 1104) @@ -114,7 +114,6 @@ static long ParseTagInteger(char *buffer, TagPtr *tag); static long ParseTagData(char *buffer, TagPtr *tag); static long ParseTagDate(char *buffer, TagPtr *tag); -static long ParseTagBoolean(char *buffer, TagPtr *tag, long type); static long GetNextTag(char *buffer, char **tag, long *start); static long FixDataMatchingTag(char *buffer, char *tag); static TagPtr NewTag(void); @@ -149,6 +148,40 @@ return 0; } +//========================================================================== +// XMLGetProperty + +TagPtr +XMLGetKey( TagPtr dict, int id ) +{ + TagPtr tagList, tag; + + if (dict->type != kTagTypeDict) return 0; + + tag = 0; + int element = 0; + tagList = dict->tag; + while (tagList && element != id) + { + tag = tagList; + tagList = tag->tagNext; + + if ((tag->type != kTagTypeKey) || (tag->string == 0)) continue; + element++; + if(id == element) return tag; + } + return 0; +} + +TagPtr XMLGetValueForKey(TagPtr key) +{ + if (!key || + key->type != kTagTypeKey) return 0; + + return key->tag; +} + + // XMLGetTag(int index) // XMLTagCount( TagPtr dict ) @@ -169,7 +202,7 @@ && (dict->type != kTagTypeArray) // If we are an array, any element is valid ) continue; - if(tag->type == kTagTypeKey) printf("Located key %s\n", tag->string); + //if(tag->type == kTagTypeKey) printf("Located key %s\n", tag->string); count++; } @@ -819,7 +852,7 @@ //========================================================================== // ParseTagBoolean -static long +long ParseTagBoolean( char * buffer, TagPtr * tag, long type ) { TagPtr tmpTag; @@ -1119,3 +1152,45 @@ if(dict->type == kTagTypeInteger) return (int)(dict->string); return 0; } + +bool XMLAddTagToDictionary(TagPtr dict, char* key, TagPtr value) +{ + if (!dict || dict->type != kTagTypeDict) return false; + + TagPtr tmpTag; + char* string; + + tmpTag = NewTag(); + if (tmpTag == 0) + { + return false; + } + + string = NewSymbol(key); + if (string == 0) + { + XMLFreeTag(tmpTag); + return false; + } + + tmpTag->type = kTagTypeKey; + tmpTag->string = string; + tmpTag->tag = value; + tmpTag->offset = 0; + tmpTag->tagNext = 0; + + TagPtr tagList = dict->tag; + if(!tagList) + { + // First tag + dict->tag = tmpTag; + return true; + } + while(tagList && tagList->tagNext) tagList = tagList->tagNext; + if(tagList) + { + tagList->tagNext = tmpTag; + return true; + } + return false; +} \ No newline at end of file Index: trunk/i386/libsaio/xml.h =================================================================== --- trunk/i386/libsaio/xml.h (revision 1103) +++ trunk/i386/libsaio/xml.h (revision 1104) @@ -84,6 +84,9 @@ TagPtr XMLGetProperty( TagPtr dict, const char * key ); TagPtr XMLGetElement( TagPtr dict, int id ); +TagPtr XMLGetKey( TagPtr dict, int id ); +TagPtr XMLGetValueForKey(TagPtr key); + int XMLTagCount( TagPtr dict ); bool XMLIsType(TagPtr dict, enum xmltype type); @@ -95,6 +98,8 @@ TagPtr XMLCastDict ( TagPtr dict ); TagPtr XMLCastArray( TagPtr dict ); +bool XMLAddTagToDictionary(TagPtr dict, char* key, TagPtr value); + long XMLParseNextTag(char *buffer, TagPtr *tag); void XMLFreeTag(TagPtr tag); char* XMLDecode(const char *in); @@ -106,4 +111,9 @@ // long XMLParseFile( char * buffer, TagPtr * dict ); +//========================================================================== +// ParseTag* +long ParseTagBoolean( char * buffer, TagPtr * tag, long type ); + + #endif /* __LIBSAIO_XML_H */