#include <stddef.h>
#include <stdlib.h>
#include <errno.h>
#include <fstream.h>
#include "asn-incl.h"
#include "any.h"
#define APPLE_ANY_HACK 1
main (int argc, char *argv[])
{
ofstream outputFile;
AsnBuf outputBuf;
size_t encodedLen;
size_t dataSize = 1024;
#if HAVE_VARIABLE_SIZED_AUTOMATIC_ARRAYS
char data[dataSize];
#else
char *data = new char[dataSize];
if (!data)
return 1;
#endif
AnyTestType att;
TSeq1 ts1;
TSeq2 ts2;
AttrValue1 *atv1ptr;
AttrValue2 *atv2ptr;
AsnInt intVal;
AsnBool boolVal;
AsnOcts octsVal ("Hi Mom");
OctsId octsIdVal = octsVal;
AsnBits bitsVal;
BitsId bitsIdVal (9);
AsnReal realVal;
atv1ptr = att.intMap.Append();
atv1ptr->id = intId;
intVal = -99;
#if APPLE_ANY_HACK
atv1ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&intVal);
#else
atv1ptr->anyDefBy.value = &intVal;
#endif
atv1ptr = att.intMap.Append();
atv1ptr->id = boolId;
boolVal = true;
#if APPLE_ANY_HACK
atv1ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&boolVal);
#else
atv1ptr->anyDefBy.value = &boolVal;
#endif
atv1ptr = att.intMap.Append();
atv1ptr->id = octsId;
#if APPLE_ANY_HACK
atv1ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&octsIdVal);
#else
atv1ptr->anyDefBy.value = &octsIdVal;
#endif
atv1ptr = att.intMap.Append();
atv1ptr->id = bitsId;
bitsIdVal.SetBit (0);
bitsIdVal.ClrBit (1);
bitsIdVal.SetBit (2);
bitsIdVal.ClrBit (3);
bitsIdVal.SetBit (4);
bitsIdVal.ClrBit (5);
bitsIdVal.SetBit (6);
bitsIdVal.ClrBit (7);
bitsIdVal.SetBit (8);
bitsIdVal.ClrBit (9);
#if APPLE_ANY_HACK
atv1ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&bitsIdVal);
#else
atv1ptr->anyDefBy.value = &bitsIdVal;
#endif
atv1ptr = att.intMap.Append();
atv1ptr->id = realId;
realVal = 108.3838;
#if APPLE_ANY_HACK
atv1ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&realVal);
#else
atv1ptr->anyDefBy.value = &realVal;
#endif
atv2ptr = att.oidMap.Append();
atv2ptr->id = intOid;
#if APPLE_ANY_HACK
atv2ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&intVal);
#else
atv2ptr->anyDefBy.value = &intVal;
#endif
atv2ptr = att.oidMap.Append();
atv2ptr->id = boolOid;
#if APPLE_ANY_HACK
atv2ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&boolVal);
#else
atv2ptr->anyDefBy.value = &boolVal;
#endif
atv2ptr = att.oidMap.Append();
atv2ptr->id = octsOid;
#if APPLE_ANY_HACK
atv2ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&octsVal);
#else
atv2ptr->anyDefBy.value = &octsVal;
#endif
atv2ptr = att.oidMap.Append();
atv2ptr->id = bitsOid;
bitsVal = bitsIdVal; #if APPLE_ANY_HACK
atv2ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&bitsVal);
#else
atv2ptr->anyDefBy.value = &bitsVal;
#endif
atv2ptr = att.oidMap.Append();
atv2ptr->id = realOid;
#if APPLE_ANY_HACK
atv2ptr->anyDefBy.value = reinterpret_cast<CSM_Buffer *>(&bitsVal);
#else
atv2ptr->anyDefBy.value = &bitsVal;
#endif
outputBuf.Init (data, dataSize);
outputBuf.ResetInWriteRvsMode();
if (!att.BEncPdu (outputBuf, encodedLen))
cout << "failed encoding AnyTestType value" << endl;
outputFile.open ("att.ber");
if (!outputFile)
{
perror ("ofstream::open");
exit (1);
}
outputBuf.ResetInReadMode();
for ( ; encodedLen > 0; encodedLen--)
outputFile.put (outputBuf.GetByte());
cout << "Wrote the following BER AnyTestType value to att.ber." << endl;
cout << "Test it with \"def\" and \"indef\"" << endl;
return 0;
}