int read_point (FILE *fp, fastf_t *c_p, int c_len, int normalize, struct bu_vls *tail) { char *cp = NULL; fastf_t sum; int i; int return_code = 1; static int line_nm = 0; struct bu_vls *bp; for (bp = bu_vls_vlsinit();; bu_vls_trunc(bp, 0)) { if (bu_vls_gets(bp, fp) == -1) { return_code = EOF; goto wrap_up; } ++line_nm; cp = bu_vls_addr(bp); while ((*cp == ' ') || (*cp == '\t')) ++cp; if ((*cp == '#') || (*cp == '\0')) continue; for (i = 0; i < c_len; ++i) { char *endp; c_p[i] = strtod(cp, &endp); if (endp == cp) bu_exit (1, "Illegal input at line %d: '%s'\n", line_nm, bu_vls_addr(bp)); cp = endp; } if (normalize) { sum = 0.0; for (i = 0; i < c_len; ++i) sum += c_p[i]; for (i = 0; i < c_len; ++i) c_p[i] /= sum; } goto wrap_up; } wrap_up: if ((return_code == 1) && (tail != 0)) { bu_vls_trunc(tail, 0); bu_vls_strcat(tail, cp); } bu_vls_vlsfree(bp); return (return_code); }
/** * List formats installed in global nirt data directory */ void listformats(void) { size_t files, i; char **filearray = NULL; char suffix[6]="*.nrt"; FILE *cfPtr = NULL; int fnddesc; struct bu_vls nirtfilespath = BU_VLS_INIT_ZERO; struct bu_vls nirtpathtofile = BU_VLS_INIT_ZERO; struct bu_vls vlsfileline = BU_VLS_INIT_ZERO; /* get a nirt directory listing */ bu_vls_printf(&nirtfilespath, "%s", bu_brlcad_data("nirt", 0)); files = bu_dir_list(bu_vls_addr(&nirtfilespath), suffix, &filearray); /* open every nirt file we find and extract the description */ for (i = 0; i < files; i++) { bu_vls_trunc(&nirtpathtofile, 0); bu_vls_trunc(&vlsfileline, 0); bu_vls_printf(&nirtpathtofile, "%s/%s", bu_vls_addr(&nirtfilespath), filearray[i]); cfPtr = fopen(bu_vls_addr(&nirtpathtofile), "rb"); fnddesc = 0; while (bu_vls_gets(&vlsfileline, cfPtr) && fnddesc == 0) { if (bu_strncmp(bu_vls_addr(&vlsfileline), "# Description: ", 15) == 0) { fnddesc = 1; bu_log("%s\n", bu_vls_addr(&vlsfileline)+15); } bu_vls_trunc(&vlsfileline, 0); } fclose(cfPtr); } /* release resources */ bu_free_argv(files, filearray); bu_vls_free(&vlsfileline); bu_vls_free(&nirtfilespath); bu_vls_free(&nirtpathtofile); }
/* * G E T _ E D G E ( ) */ int get_edge (FILE *fp, long int *index, char **label, double *w, int numeric) /* Indices of edge endpoints */ /* Labels of edge endpoints */ /* Weight */ /* Use indices instead of labels? */ { char *bp; static int line_nm = 0; struct bu_vls buf; bu_vls_init_if_uninit(&buf); for (;;) { ++line_nm; bu_vls_trunc(&buf, 0); if (bu_vls_gets(&buf, fp) == -1) return (0); bp = bu_vls_addr(&buf); while ((*bp == ' ') || (*bp == '\t')) ++bp; if (*bp == '#') continue; if (numeric) { if (sscanf(bp, "%ld%ld%lg", &index[0], &index[1], w) != 3) { bu_log("Illegal input on line %d: '%s'\n", line_nm, bp); return (-1); } else { label[0] = label[1] = NULL; break; } } else { char *bep; for (bep = bp; (*++bep != ' ') && (*bep != '\t'); ++bep) if (*bep == '\0') { bu_log("Illegal input on line %d: '%s'\n", line_nm, bu_vls_addr(&buf)); return (-1); } *bep = '\0'; label[0] = bu_strdup(bp); for (bp = bep + 1; (*bp == ' ') || (*bp == '\t'); ++bp) if (*bep == '\0') { bu_log("Illegal input on line %d: '%s'\n", line_nm, bu_vls_addr(&buf)); return (-1); } for (bep = bp; (*++bep != ' ') && (*bep != '\t'); ++bep) if (*bep == '\0') { bu_log("Illegal input on line %d: '%s'\n", line_nm, bu_vls_addr(&buf)); return (-1); } *bep = '\0'; label[1] = bu_strdup(bp); if (sscanf(bep + 1, "%lg", w) != 1) { bu_log("Illegal input on line %d: '%s'\n", line_nm, bu_vls_addr(&buf)); return (-1); } else { index[0] = index[1] = -1; break; } } } return (1); }