Exemple #1
0
int parseinput(int argc, char *argv[]) {
    int num_params = 0;

    if (p == CV) {
        t1 = atof(argv[T1]);
        num_params++;

        if (argc >= 5) {
            t2 = parsedouble(argv[T2]);
            num_params++;
        }

        if (argc == 6) {
            npoints = parsepoints(argv[T_NPOINTS]);
        }

        bool any_below_zero_K = t1 < 0 || (argc >= 5 && t2 < 0);
        bool decreasing_temp = argc >= 5 && t1 > t2;

        if (any_below_zero_K || decreasing_temp) {
            if (any_below_zero_K)
                fprintf(stderr, "Temperature must be greater or equal than 0 K\n");
            if (decreasing_temp)
                fprintf(stderr, "T1 must be less than T2\n");
            fprintf(stderr, "\n");
            return 0;
        }
    }

    else if (p == GAMMA || p == OMEGA) {
        q1[X] = parsedouble(argv[QX1]);
        q1[Y] = parsedouble(argv[QY1]);
        q1[Z] = parsedouble(argv[QZ1]);
        num_params++;

        if (argc >= 9) {
            q2[X] = parsedouble(argv[QX2]);
            q2[Y] = parsedouble(argv[QY2]);
            q2[Z] = parsedouble(argv[QZ2]);
            num_params++;
        }

        bool any_zero_vec = is_zero_vec(q1) || (argc >= 9 && is_zero_vec(q2));

        if (p == GAMMA && any_zero_vec) {
            fprintf(stderr, "Can't evaluate gamma for q = (0,0,0)\n\n");
            return 0;
        }

        if (argc == 10) {
            npoints = parsepoints(argv[Q_NPOINTS]);
        }
    }

    return num_params;
}
int scriptfile_getdouble(scriptfile *sf, double *num)
{
	skipoverws(sf);
	if (sf->textptr >= sf->eof)
	{
		initprintf("Error on line %s:%d: unexpected eof\n",sf->filename,scriptfile_getlinum(sf,sf->textptr));
		return -1;
	}
	
	sf->ltextptr = sf->textptr;

	// On Linux, locale settings interfere with interpreting x.y format numbers
	//(*num) = strtod((const char *)sf->textptr,&sf->textptr);
	(*num) = parsedouble(sf->textptr, &sf->textptr);
	
	if (!ISWS(*sf->textptr) && *sf->textptr) {
		char *p = sf->textptr;
		skipovertoken(sf);
		initprintf("Error on line %s:%d: expecting float, got \"%s\"\n",sf->filename,scriptfile_getlinum(sf,sf->ltextptr),p);
		return -2;
	}
	return 0;
}