Small helper function in Category Dumper project to print symbols:
void PrintSymbol(const NxCoreMessage *pNxCoreMsg)
{
// If a valid option header
if (pNxCoreMsg->coreHeader.pnxOptionHdr)
{
// If pnxsDateAndStrike->String[1] == ' ', then this symbol is in new OSI format.
if (pNxCoreMsg->coreHeader.pnxOptionHdr->pnxsDateAndStrike->String[1]==' ')
{
// Construct OSI symbol
printf("Category %d Message for Symbol: %s%02d%02d%02d%c%08d\n",
pNxCoreMsg->coreData.Category.pnxStringCategory->Atom,
pNxCoreMsg->coreHeader.pnxStringSymbol->String,
pNxCoreMsg->coreHeader.pnxOptionHdr->nxExpirationDate.Year-2000,
pNxCoreMsg->coreHeader.pnxOptionHdr->nxExpirationDate.Month,
pNxCoreMsg->coreHeader.pnxOptionHdr->nxExpirationDate.Day,
(pNxCoreMsg->coreHeader.pnxOptionHdr->PutCall == 0) ? 'C' : 'P',
pNxCoreMsg->coreHeader.pnxOptionHdr->strikePrice);
}
// Otherwise the symbol is in old OPRA format.
else
{
printf("Category %d Message for Symbol: %s%c%c\n",
pNxCoreMsg->coreData.Category.pnxStringCategory->Atom,
pNxCoreMsg->coreHeader.pnxStringSymbol->String,
pNxCoreMsg->coreHeader.pnxOptionHdr->pnxsDateAndStrike->String[0],
pNxCoreMsg->coreHeader.pnxOptionHdr->pnxsDateAndStrike->String[1]);
}
}
// Else non-option, print symbol only
else
printf("Category %d Message for Symbol: %s\n",
pNxCoreMsg->coreData.Category.pnxStringCategory->Atom,
pNxCoreMsg->coreHeader.pnxStringSymbol->String);
}