[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]


   NAME
        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.

   INPUTS
        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.

   EXAMPLE
        /* 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.

   SEE ALSO
        <utility/tagitem.h>, gettagdata(), findtagitem(), nexttagitem()