00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "debug.h"
00025 #include "macros.h"
00026 #include "Tag.h"
00027
00028 tag *tag_GetNextTag(tag *TagList)
00029 {
00030 tag *Tag = TagList;
00031
00032 debug_Begin();
00033
00034 if(Tag!=NULL)
00035 {
00036 if(Tag->Name<16)
00037 {
00038 while ((Tag != NULL) && (Tag->Name < 16))
00039 {
00040 switch (Tag->Name)
00041 {
00042 case TAG_END:
00043 {
00044 Tag = NULL;
00045 }
00046 break;
00047
00048 case TAG_MORE:
00049 {
00050 Tag = (tag *)Tag->Data;
00051 }
00052 break;
00053
00054 case TAG_SKIP:
00055 {
00056 Tag += Tag->Data + 1;
00057 }
00058 break;
00059
00060 case TAG_IGNORE:
00061 {
00062 Tag++;
00063 }
00064 break;
00065
00066 default:
00067 {
00068 Tag++;
00069 }
00070 break;
00071 }
00072 }
00073 }
00074 else Tag++;
00075 }
00076
00077 debug_End();
00078
00079 return (Tag);
00080 }
00081
00082 tag *tag_FindTag(tag *TagList, u32 TagName)
00083 {
00084 tag *Tag;
00085
00086 debug_Begin();
00087
00088 for (Tag = TagList; Tag != NULL; Tag = tag_GetNextTag(Tag))
00089 {
00090 if (Tag->Name == TagName) break;
00091 }
00092
00093 debug_End();
00094
00095 return (Tag);
00096 }
00097
00098 u32 tag_GetTagData(tag *TagList, u32 TagName, u32 DefaultTagData)
00099 {
00100 tag *Tag;
00101 u32 ret=0L;
00102
00103 debug_Begin();
00104
00105 if (TagList!=NULL && (Tag = tag_FindTag(TagList, TagName)))
00106 {
00107 ret = Tag->Data;
00108 }
00109 else
00110 {
00111 ret = DefaultTagData;
00112 }
00113
00114 debug_End();
00115
00116 return (ret);
00117 }
00118
00119 u32 tag_GetTagDataChg(tag *TagList, u32 TagName, u32 DefaultTagData)
00120 {
00121 tag *Tag;
00122 u32 ret=0L;
00123
00124 debug_Begin();
00125
00126 if (TagList!=NULL && (Tag = tag_FindTag(TagList, TagName)))
00127 {
00128 Tag->Name=TAG_IGNORE;
00129 ret = Tag->Data;
00130 }
00131 else
00132 {
00133 ret = DefaultTagData;
00134 }
00135
00136 debug_End();
00137
00138 return (ret);
00139 }
00140
00141
00142 int tag_CountTags(tag *TagList)
00143 {
00144 tag *Tag;
00145 int TagCount;
00146
00147 debug_Begin();
00148
00149 for (TagCount=0, Tag = TagList; Tag != NULL; Tag = tag_GetNextTag(Tag), TagCount++);
00150
00151 debug_End();
00152
00153 return (TagCount);
00154 }