26 vector<CHECDataBlock *>::iterator iter;
28 for (iter = DB.begin(); iter != DB.end(); iter++) {
42 strcpy(fname, file_name);
43 fp = fopen(fname,
"w");
45 if (!fp)
return false;
47 vector<CHECDataBlock *>::iterator iter;
49 for (iter = DB.begin(); iter != DB.end(); iter++) {
72 char *c = (
char *)fmt;
78 for (
int i = 0; i < n; i++, c++) {
79 strcpy(param, va_arg(va,
char *));
86 sprintf(s,
"%d", va_arg(va,
int));
91 ftos(va_arg(va,
double), s);
95 sprintf(s,
"%s", va_arg(va,
char *));
105 fprintf(fp,
"%s\n", line);
117 char *c = (
char *)fmt;
123 for (
int i = 0; i < n; i++, c++) {
124 strcpy(param, va_arg(va,
char *));
126 if (i != 0) strcat(line,
",");
133 sprintf(s,
"%d", va_arg(va,
int));
138 ftos(va_arg(va,
double), s);
142 sprintf(s,
"%s", va_arg(va,
char *));
152 fprintf(fp,
"%s\n", line);
166 char *c = (
char *)fmt;
171 for (
int i = 0; i < n; i++, c++) {
172 if (i != 0) strcat(line,
",");
176 sprintf(s,
"%d", va_arg(va,
int));
181 ftos(va_arg(va,
double), s);
185 sprintf(s,
"%s", va_arg(va,
char *));
195 fprintf(fp,
"%s\n", line);
205 char *c = (
char *)fmt;
208 for (
int i = 0; i < n; i++, c++) {
211 sprintf(s,
"%d", va_arg(va,
int));
216 ftos(va_arg(va,
double), s);
220 sprintf(s,
"%s", va_arg(va,
char *));
227 strcat(data_line_buffer, s);
228 strcat(data_line_buffer,
",");
235 int len = strlen(data_line_buffer);
236 char *p = &data_line_buffer[len - 1];
239 while (p >= data_line_buffer) {
244 }
else if (*p ==
' ') {
254 fprintf(fp,
"%s\n", data_line_buffer);
255 ClearDataLineBuffer();
264 return AddLoad(file_name);
269 fg_header_pushed =
false;
270 strcpy(fname, file_name);
271 fp = fopen(fname,
"r");
273 if (!fp)
return false;
276 char header_name[256];
279 while (ReadLine(line)) {
280 if (!GetHeaderName(line, header_name)) {
285 if (strcmp(header_name,
"!END") == 0)
break;
287 block = CreateDataBlock(header_name);
294 if (!block->
Read(
this, line)) {
310 if (fg_header_pushed) {
311 strcpy(s, header_line_buffer);
312 fg_header_pushed =
false;
316 while (fgets(s, size, fp)) {
317 if (s[0] == 0 || s[0] ==
'#' || s[0] ==
'\r' || s[0] ==
'\n')
continue;
319 if (s[0] ==
'!' && s[1] ==
'!')
continue;
329 strcpy(header_line_buffer, s);
330 fg_header_pushed =
true;
339 #define is_separator(x) \
340 (x == ',' || x == ' ' || x == '\t' || x == '\r' || x == '\n')
341 char *p = (
char *)header_line;
345 if (*p !=
'!')
return false;
347 char *bp = header_name;
377 static bool get_param_token(
char *&p,
char *token) {
378 #define is_separator(x) \
379 (x == ',' || x == ' ' || x == '\t' || x == '\r' || x == '\n')
383 if (!*p)
return false;
396 if (!*p)
return false;
410 const int max_param_n = 40;
411 char param_name[max_param_n][20];
412 void *param[max_param_n];
413 int param_n = strlen(fmt);
417 for (i = 0; i < param_n; i++) {
418 strcpy(param_name[i], va_arg(va,
char *));
419 param[i] = va_arg(va,
void *);
423 ip = (
int *)param[i];
434 while (get_param_token(p, p_token)) {
438 for (i = 0; i < param_n; i++) {
439 if (strcmp(p_str, param_name[i]) == 0)
break;
442 if (i == param_n)
return false;
447 ip = (
int *)param[i];
453 if (!get_param_token(p, eq_token) || eq_token[0] !=
'=') {
458 if (!get_param_token(p, v_token)) {
465 if (sscanf(v_token,
"%s", (
char *)(param[i])) != 1) {
473 if (sscanf(v_token,
"%d", (
int *)(param[i])) != 1) {
481 if (sscanf(v_token,
"%lf", (
double *)(param[i])) != 1) {
501 bool fg = vParseParameter(line, rcode, fmt, va);
508 char *p = header_line;
511 if (*p ==
',' || *p ==
'\r' || *p ==
'\n') {
520 bool fg = vParseParameter(p, rcode, fmt, va);
528 if (!ReadLine(line))
return false;
536 bool fg = vParseParameter(p, rcode, fmt, va);
551 if (!ReadLine(line))
return false;
553 if (line[0] ==
'!') {
558 const int max_param_n = 100;
560 int param_n = strlen(fmt);
561 void *param[max_param_n];
565 for (i = 0; i < param_n; i++) {
566 param[i] = va_arg(va,
void *);
571 char *token = strtok(line,
",\r\n");
574 while (token && i < param_n) {
577 if (sscanf(token,
"%d", (
int *)(param[i])) != 1)
return false;
582 if (sscanf(token,
"%lf", (
double *)(param[i])) != 1)
return false;
587 if (sscanf(token,
"%s", (
char *)(param[i])) != 1)
return false;
596 token = strtok(0,
",\r\n");
605 char *token = strtok(line,
",\r\n");
608 if (sscanf(token,
"%lf", &
data[n]) != 1)
return -(n + 1);
611 token = strtok(0,
",\r\n");
619 char *token = strtok(line,
",\r\n");
622 if (sscanf(token,
"%d", &
data[n]) != 1)
return -(n + 1);
625 token = strtok(0,
",\r\n");
637 vector<CHECDataBlock *>::iterator iter;
639 for (iter = hd->
DB.begin(); iter != hd->
DB.end(); iter++) {
640 if ((*iter)->data_type == data_type) {
641 T block = (T)(*iter);
643 if (strcmp(block->name, name) == 0) {
653 return hecdata_get<CHECDB_Material *>(
this,
HECDB_MATERIAL, name);
657 return hecdata_get<CHECDB_NGroup *>(
this,
HECDB_NGROUP, name);
661 return hecdata_get<CHECDB_EGroup *>(
this,
HECDB_EGROUP, name);
665 return hecdata_get<CHECDB_SGroup *>(
this,
HECDB_SGROUP, name);
669 vector<CHECDataBlock *>::iterator iter;
671 for (iter = DB.begin(); iter != DB.end(); iter++) {
672 if ((*iter)->data_type !=
HECDB_NODE)
continue;
676 if (nitem)
return nitem;
683 vector<CHECDataBlock *>::iterator iter;
685 for (iter = DB.begin(); iter != DB.end(); iter++) {
690 if (eitem)
return eitem;
697 vector<CHECDataBlock *>::iterator iter;
699 for (iter = DB.begin(); iter != DB.end(); iter++) {