Skip to content

ITEM

Data Type : Item (Field) Information
ITEM - Item (Field) structure.

#include <nsfdata.h>

Definition :

typedef struct {
   USHORT NameLength;  /* Length of Item Name following this struct.*/
                       /* may be zero (0) if not required by func(s)*/
                       /* manipulating this ITEM.                   */
   USHORT ValueLength; /* Length of Item Value following this   */
                       /* struct, incl. Notes data type.        */
} ITEM;

Description :

Used to define the length of an item name and the length of an item value when this data resides in a summary buffer.

Sample Usage :

char       *pSummaryPos;        /* current position in summary */
ITEM_TABLE  ItemTable;          /* header at start of summary */
USHORT      ItemCount;          /* number of items in summary */
USHORT      NameLength;         /* length of item name w/out terminator*/
USHORT      ValueLength;        /* length of item value, incl. type */
WORD        DataType;           /* item data type word */
char       *szDataType;         /* printable data type name */
USHORT      TextLen;            /* length of printable item text */
USHORT      i;                  /* counter for loop over items */
ITEM    Items[MAX_ITEMS];       /* Stores the array of ITEMs */
char    ItemText[MAX_ITEM_LEN]; /* Text rendering of item value */
char    ItemName[MAX_ITEM_NAME_LEN];/* Zero terminated item name */

/* pSummaryPos points to the beginning of the summary buffer. Copy 
  the ITEM_TABLE header at the beginning of the summary buffer 
  to a local variable. Advance pSummaryPos to point to the next 
  byte in the summary buffer after the ITEM_TABLE.
*/
memcpy ((char*)(&ItemTable), pSummaryPos, sizeof(ITEM_TABLE));
pSummaryPos += sizeof(ItemTable);

/* pSummaryPos now points to the first ITEM in an array of ITEM 
  structures. Copy this array of ITEM structures into the global 
  Items[] array.
*/

ItemCount = ItemTable.Items;
for (i=0; i < ItemCount; i++)
{
    memcpy((char*)(&Items[i]), pSummaryPos, sizeof(ITEM));
    pSummaryPos += sizeof(ITEM);
}

/* pSummaryPos now points to the first item name. Loop over each
  item, copying the item name into the ItemName variable and 
  converting the item value to printable text in ItemText.
*/

for (i=0; i < ItemCount; i++)
{
    NameLength = Items[i].NameLength; 
    memcpy (ItemName, pSummaryPos, NameLength);
    ItemName[NameLength] = '\0';
    pSummaryPos += NameLength;

 /* pSummaryPos now points to the item value. First get the
    data type. Then step over the data type word to the data 
    value and convert the value to printable text. Store the 
    text in ItemText.
  */

    memcpy ((char*)(&DataType), pSummaryPos, sizeof(WORD));
    pSummaryPos += sizeof(WORD);

    ValueLength = Items[i].ValueLength - sizeof(WORD);

 /* If the item data type is text, copy into ItemText[]. */       

    if (DataType == TYPE_TEXT)
    {
        memcpy (ItemText, pSummaryPos, ValueLength);
        ItemText[ValueLength] = '\0';
        pSummaryPos += ValueLength;
    }

See Also : ITEM_TABLE NSFSearch NSFItemScan NIFReadEntries