**************************************************************************/
void getTypeAttributes(parse_file_t *in, type_descriptor_t *t,
- sequence_t * unnamed_types, table_t * named_types)
+ sequence_t * unnamed_types, table_t * named_types)
{
char * token;
int car;
t->fmt = NULL;
t->size = 0;
t->custom_write = 0;
- t->network = 0;
+ t->network = 0;
while(1) {
token = getToken(in);
t->size = getSize(in);
} else if(!strcmp("custom_write", token)) {
t->custom_write = 1;
- } else if(!strcmp("byte_order",token)) {
- getEqual(in);
- car = seekNextChar(in);
- if(car == EOF) in->error(in,"byte order was expected (network?)");
- else if(car == '\"') token = getQuotedString(in);
- else token = getName(in);
- if(!strcmp("network", token)) {
- t->network = 1;
- }
- } else if(!strcmp("write",token)) {
- getEqual(in);
- car = seekNextChar(in);
- if(car == EOF) in->error(in,"write type was expected (custom?)");
- else if(car == '\"') token = getQuotedString(in);
- else token = getName(in);
- if(!strcmp("custom", token)) {
- t->custom_write = 1;
- }
- }
- }
+ } else if(!strcmp("byte_order",token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"byte order was expected (network?)");
+ else if(car == '\"') token = getQuotedString(in);
+ else token = getName(in);
+ if(!strcmp("network", token)) {
+ t->network = 1;
+ }
+ } else if(!strcmp("write",token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"write type was expected (custom?)");
+ else if(car == '\"') token = getQuotedString(in);
+ else token = getName(in);
+ if(!strcmp("custom", token)) {
+ t->custom_write = 1;
+ }
+ }
+ }
}
/**************************************************************************
ev->param_buffer = 0;
ev->no_instrument_function = 0;
ev->high_priority = 0;
+ ev->force = 0;
+ ev->compact_data = 0;
while(1) {
token = getToken(in);
ev->no_instrument_function = 1;
else if(!strcmp(token, "high_priority"))
ev->high_priority = 1;
+ else if(!strcmp(token, "force"))
+ ev->force = 1;
+ else if(!strcmp(token, "compact_data"))
+ ev->compact_data = 1;
}
}
}
fac->name = NULL;
fac->arch = NULL;
- fac->user = 0;
+ fac->align = 1;
+ fac->user = 0;
while(1) {
token = getToken(in);
getEqual(in);
car = seekNextChar(in);
if(car == '\"') fac->arch = allocAndCopy(getQuotedString(in));
- else fac->arch = allocAndCopy(getName(in));
- }
+ else fac->arch = allocAndCopy(getName(in));
+ } else if(!strcmp("align", token)) {
+ getEqual(in);
+ fac->align = getSize(in);
+ }
+
}
}
if(strcmp("event",token) == 0){
ev = (event_t*) memAlloc(sizeof(event_t));
sequence_push(&(fac->events),ev);
- parseEvent(in,ev, &(fac->unnamed_types), &(fac->named_types));
+ parseEvent(fac, in, ev, &(fac->unnamed_types), &(fac->named_types));
}else if(strcmp("type",token) == 0){
- parseTypeDefinition(in, &(fac->unnamed_types), &(fac->named_types));
+ parseTypeDefinition(fac, in, &(fac->unnamed_types), &(fac->named_types));
}else if(in->type == FORWARDSLASH){
break;
}else in->error(in,"event or type token expected\n");
/*****************************************************************************
*Function name
* parseEvent : generate event from event definition
- *Input params
+ *Input params
+ * fac : facility holding the event
* in : input file handle
* ev : new event
* unnamed_types : array of unamed types
* ev : new event (parameters are passed to it)
****************************************************************************/
-void parseEvent(parse_file_t *in, event_t * ev, sequence_t * unnamed_types,
+void parseEvent(facility_t *fac, parse_file_t *in, event_t * ev, sequence_t * unnamed_types,
table_t * named_types)
{
char *token;
field_t *f;
+ ev->fac = fac;
sequence_init(&(ev->fields));
//<event name=eventtype_name>
getEventAttributes(in, ev);
if(strcmp("field",token))in->error(in,"expecting a field");
f = (field_t *)memAlloc(sizeof(field_t));
sequence_push(&(ev->fields),f);
- parseFields(in, f, unnamed_types, named_types, 1);
+ parseFields(fac, in, f, unnamed_types, named_types, 1);
break;
default:
in->error(in, "expecting </event> or <field >");
*Function name
* parseField : get field infomation from buffer
*Input params
+ * fac : facility holding the field
* in : input file handle
* f : field
* unnamed_types : array of unamed types
* tag : is field surrounded by a <field> </field> tag ?
****************************************************************************/
-void parseFields(parse_file_t *in, field_t *f,
+void parseFields(facility_t *fac, parse_file_t *in, field_t *f,
sequence_t * unnamed_types,
table_t * named_types,
int tag)
{
char * token;
+ f->fac = fac;
if(tag) {
//<field name=field_name> <description> <type> </field>
getFieldAttributes(in, f);
//<int size=...>
getLAnglebracket(in);
- f->type = parseType(in,NULL, unnamed_types, named_types);
+ f->type = parseType(fac, in,NULL, unnamed_types, named_types);
if(tag) {
getLAnglebracket(in);
* type name:
* type(name,type)
*Input params
+ * fac : facility
* in : input file handle
* inType : a type descriptor
* unnamed_types : array of unamed types
* type_descriptor* : a type descriptor
****************************************************************************/
-type_descriptor_t *parseType(parse_file_t *in, type_descriptor_t *inType,
+type_descriptor_t *parseType(facility_t *fac, parse_file_t *in, type_descriptor_t *inType,
sequence_t * unnamed_types, table_t * named_types)
{
char *token;
sequence_push(unnamed_types,t);
}
else t = inType;
+ t->fac = fac;
token = getName(in);
f = (field_t *)memAlloc(sizeof(field_t));
sequence_push(&(t->fields),f);
- parseFields(in, f, unnamed_types, named_types, 1);
+ parseFields(fac, in, f, unnamed_types, named_types, 1);
//next field
getLAnglebracket(in);
while(strcmp("field",token) == 0){
f = (field_t *)memAlloc(sizeof(field_t));
sequence_push(&(t->fields),f);
- parseFields(in, f, unnamed_types, named_types, 1);
+ parseFields(fac, in, f, unnamed_types, named_types, 1);
//next field
getLAnglebracket(in);
f->name = NULL;
sequence_push(&(t->fields),f);
- parseFields(in, f, unnamed_types, named_types, 0);
+ parseFields(fac, in, f, unnamed_types, named_types, 0);
//getLAnglebracket(in); //<type struct>
//t->nested_type = parseType(in, NULL, unnamed_types, named_types);
f = (field_t *)memAlloc(sizeof(field_t));
f->name = NULL;
sequence_push(&(t->fields),f);
- parseFields(in, f, unnamed_types, named_types, 0);
+ parseFields(fac, in, f, unnamed_types, named_types, 0);
//getLAnglebracket(in); //<subtype>
/* subfield */
f = (field_t *)memAlloc(sizeof(field_t));
f->name = NULL;
sequence_push(&(t->fields),f);
- parseFields(in, f, unnamed_types, named_types, 0);
+ parseFields(fac, in, f, unnamed_types, named_types, 0);
//getLAnglebracket(in); //<type sequence>
//t->length_type = parseType(in, NULL, unnamed_types, named_types);
*Function name
* parseTypeDefinition : get type information from type definition
*Input params
+ * fac : facility
* in : input file handle
* unnamed_types : array of unamed types
* named_types : array of named types
*****************************************************************************/
-void parseTypeDefinition(parse_file_t * in, sequence_t * unnamed_types,
+void parseTypeDefinition(facility_t *fac, parse_file_t * in, sequence_t * unnamed_types,
table_t * named_types)
{
char *token;
token = getName(in);
//MD ??if(strcmp("struct",token))in->error(in,"not a valid type definition");
ungetToken(in);
- parseType(in,t, unnamed_types, named_types);
+ parseType(fac, in,t, unnamed_types, named_types);
//</type>
getLAnglebracket(in);