コード例 #1
0
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);
}
コード例 #2
0
/**
 * 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);
}
コード例 #3
0
/*
 *			      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);
}