+ char * token;
+ int car;
+
+ ev->name = NULL;
+ ev->per_trace = 0;
+ ev->per_tracefile = 0;
+ 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);
+ if(strcmp("/",token) == 0 || strcmp(">",token) == 0){
+ ungetToken(in);
+ break;
+ }
+
+ if(!strcmp("name",token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"name was expected");
+ else if(car == '\"') ev->name = allocAndCopy(getQuotedString(in));
+ else ev->name = allocAndCopy(getName(in));
+ } else if(!strcmp("scope", token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"scope was expected");
+ else if(car == '\"') token = getQuotedString(in);
+ else token = getName(in);
+ if(!strcmp(token, "trace")) ev->per_trace = 1;
+ else if(!strcmp(token, "tracefile")) ev->per_tracefile = 1;
+ } else if(!strcmp("param", token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"parameter type was expected");
+ else if(car == '\"') token = getQuotedString(in);
+ else token = getName(in);
+ if(!strcmp(token, "buffer")) ev->param_buffer = 1;
+ } else if(!strcmp("attribute", token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"attribute was expected");
+ else if(car == '\"') token = getQuotedString(in);
+ else token = getName(in);
+ if(!strcmp(token, "no_instrument_function"))
+ 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;
+ }
+ }
+}
+
+/**************************************************************************
+ * Function :
+ * getFacilityAttributes
+ * Description :
+ * Read the attribute from the input file.
+ *
+ * Parameters :
+ * in , input file handle.
+ * fac , the facility to fill.
+ *
+ **************************************************************************/
+
+void getFacilityAttributes(parse_file_t *in, facility_t *fac)
+{
+ char * token;
+ int car;
+
+ fac->name = NULL;
+ fac->arch = NULL;
+ fac->align = 1;
+ fac->user = 0;
+
+ while(1) {
+ token = getToken(in);
+ if(strcmp("/",token) == 0 || strcmp(">",token) == 0){
+ ungetToken(in);
+ break;
+ }
+
+ if(!strcmp("name",token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"name was expected");
+ else if(car == '\"') fac->name = allocAndCopy(getQuotedString(in));
+ else fac->name = allocAndCopy(getName(in));
+ if(!strncmp(fac->name, "user_", sizeof("user_")-1))
+ fac->user = 1;
+ } else if(!strcmp("arch", token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == '\"') fac->arch = allocAndCopy(getQuotedString(in));
+ else fac->arch = allocAndCopy(getName(in));
+ } else if(!strcmp("align", token)) {
+ getEqual(in);
+ fac->align = getSize(in);
+ }
+
+ }
+}
+
+/**************************************************************************
+ * Function :
+ * getFieldAttributes
+ * Description :
+ * Read the attribute from the input file.
+ *
+ * Parameters :
+ * in , input file handle.
+ * f , the field to fill.
+ *
+ **************************************************************************/
+
+void getFieldAttributes(parse_file_t *in, field_t *f)
+{
+ char * token;
+ int car;
+
+ f->name = NULL;
+
+ while(1) {
+ token = getToken(in);
+ if(strcmp("/",token) == 0 || strcmp(">",token) == 0){
+ ungetToken(in);
+ break;
+ }
+
+ if(!strcmp("name",token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"name was expected");
+ else if(car == '\"') f->name = allocAndCopy(getQuotedString(in));
+ else f->name = allocAndCopy(getName(in));
+ }
+ }
+}
+
+char *getNameAttribute(parse_file_t *in)
+{
+ char * token;
+ char *name = NULL;
+ int car;
+
+ while(1) {
+ token = getToken(in);
+ if(!strcmp("name",token)) {
+ getEqual(in);
+ car = seekNextChar(in);
+ if(car == EOF) in->error(in,"name was expected");
+ else if(car == '\"') name = allocAndCopy(getQuotedString(in));
+ else name = allocAndCopy(getName(in));
+ } else {
+ ungetToken(in);
+ break;
+ }
+
+ }
+ if(name == NULL) in->error(in, "Name was expected");
+ return name;
+}
+
+
+
+//for <label name=label_name value=n format="...">, value is an option
+//Return value : 0 : no value, 1 : has a value
+int getValueAttribute(parse_file_t *in, long long *value)
+{
+ char * token, * endptr;
+
+ token = getToken(in);
+
+ if(strcmp("/",token) == 0 || strcmp(">", token) == 0){
+ ungetToken(in);
+ return 0;
+ }
+ if(strcmp("value",token))in->error(in,"value was expected");
+
+ getEqual(in);
+ token = getToken(in);
+
+ *value = strtoll(token, &endptr, 0);
+ if(*endptr != '\0')
+ goto error;
+ return 1;
+error:
+ in->error(in,"invalid number specified");
+ return 0;
+}