#include <stdio.h>
#include <string.h>
#define ATTRIBUTE struct attribute
ATTRIBUTE{
int token;
#define MAX_BUFFER_SIZE 128
char buffer[MAX_BUFFER_SIZE];
int length;
#define FORMAT_NONE 0
#define FORMAT_CHAR 1
#define FORMAT_DECIMAL 2
#define FORMAT_HEXIDECIMAL 3
#define FORMAT_OCTAL 4
#define FORMAT_FLOAT 5
int format;
};
#define DATA struct data
DATA
{
//define the scanner attribute table
#define MAX_ATTRIBUTES 128
ATTRIBUTE attributes[MAX_ATTRIBUTES];
unsigned int index;
int column;
int flags;
#define FLAGS_ECHO 0x0001
#define FLAGS_DEBUG 0x0002
#define FLAGS_PARSE 0x0004
#define FLAGS_SYMBOL 0x0008
#define IS_FLAGS_ECHO(a) (a & FLAGS_ECHO)
#define SET_FLAGS_ECHO(a) (a |= FLAGS_ECHO)
#define CLR_FLAGS_ECHO(a) (a &= ~FLAGS_ECHO)
#define IS_FLAGS_DEBUG(a) (a & FLAGS_DEBUG)
#define SET_FLAGS_DEBUG(a) (a |= FLAGS_DEBUG)
#define CLR_FLAGS_DEBUG(a) (a &= ~FLAGS_DEBUG)
#define IS_FLAGS_PARSE(a) (a & FLAGS_PARSE)
#define SET_FLAGS_PARSE(a) (a |= FLAGS_PARSE)
#define CLR_FLAGS_PARSE(a) (a &= ~FLAGS_PARSE)
#define IS_FLAGS_SYMBOL(a) (a & FLAGS_SYMBOL)
#define SET_FLAGS_SYMBOL(a) (a |= FLAGS_SYMBOL)
#define CLR_FLAGS_SYMBOL(a) (a &= ~FLAGS_SYMBOL)
};
int main(void) {
int token = 1;
char buffer[] = "This Is A Buffer";
int format = 1;
struct data data = {.flags = 255};
struct attribute attr = {.token = token, .buffer = buffer, .length = length, .format = format};
fprintf(stdout
, "after struct: %d\n", data.
flags); data.attributes[0] = attr;
fprintf(stdout
, "after data.attributes[i] = attr: %d\n", data.
flags); return 0;
}