utility.library/PackBoolTags

Previous:
utility.library/NextTagItem
TOC:
Table of Contents
Index:
All Documents
Next:
utility.library/PackStructureTags

     Title:
PackBoolTags -- builds a "flag" word from a tag list. (V36)
     Synopsis:
flags = PackBoolTags(initialFlags,tagList,boolMap);
D0      D0   A0      A1

ULONG PackBoolTags(ULONG,struct TagItem *,struct TagItem *);
     Function:
Picks out the boolean tag items in a tag list and converts
them into bit-flag representations according to a correspondence
defined by the tag list 'boolMap'.

A boolean tag item is one where only the logical value of
the ti_Data is relevant. If this field is 0, the value is
FALSE, otherwise TRUE.
     Parameters:
initialFlags - a starting set of bit-flags which will be changed
       by the processing of TRUE and FALSE boolean tags
       in tagList.
tagList - a TagItem list which may contain several tag items defined to
  be boolean by their presence in boolMap. The logical value of
  ti_Data determines whether a tag item causes the bit-flag
  value related by boolMap to be set or cleared in the returned
  flag longword.
boolMap - a tag list defining the boolean tags to be recognized, and
  the bit (or bits) in the returned longword that are to be set
  or cleared when a boolean Tag is found to be TRUE or FALSE in
  tagList.
     Results:
flags - the accumulated longword of bit-flags, starting with
initialFlags and modified by each boolean tag item
encountered.
     Examples:
/* define some nice user tag values ... */
enum mytags { tag1 = TAG_USER+1, tag2, tag3, tag4, tag5 };

/* this TagItem list defines the correspondence between boolean tags
 * and bit-flag values.
 */
struct TagItem boolMap[] =
{
    {tag1,     0x0001},
    {tag2,     0x0002},
    {tag3,     0x0004},
    {tag4,     0x0008},
    {TAG_DONE, }
};

/* You are probably passed these by some client, and you want
 * to "collapse" the boolean content into a single longword.
 */

struct TagItem boolExample[] =
{
    {tag1,     TRUE},
    {tag2,     FALSE},
    {tag5,     Irrelevant},
    {tag3,     TRUE},
    {TAG_DONE, }
};

/* Perhaps 'boolFlags' already has a current value of 0x800002. */
boolFlags = PackBoolTags(boolFlags,boolExample,boolMap);

/* The resulting new value of 'boolFlags' will be 0x80005. /*
     *** WARNING ***:
In a case where there is duplication of a tag in tagList, the
last of the identical tags will hold sway.
     Related topics:
<utility/tagitem.h>, GetTagData(), FindTagItem(), NextTagItem()

Browse your own file: