Exemple #1
0
/**
 * Sets default values to the properties when there is no user setting.
 */
void setDefault(g2sprop * prop)
{
    char *pargv[2];
    int pargc = 2;
    char *ellps;
    /* if there are no options like -p,-w,-e, sets as -a */
    if (!(prop->parseWpt | prop->parseTrk | prop->parseRte)) {
	prop->parseWpt = 1;
	prop->parseTrk = 1;
	prop->parseRte = 1;
    }
    /* if there is no output setting, sets it as [sourcefile name] - ".gpx" */
    if (prop->output == NULL) {
	char *dot = strrchr(prop->sourcefile, '.');
	prop->output =
	    (char *) malloc(sizeof(char) * strlen(prop->sourcefile) + 1);
	if (0 == strcmp(dot, ".gpx")) {
	    int len = dot - prop->sourcefile;
	    strncpy(prop->output, prop->sourcefile, len);
	    prop->output[len] = 0;
	} else {
	    fprintf(stderr,
		    "The source file doesn't have .gpx extension.\n");
	    exit(ERR_ISNOTGPX);
	}
    }
    /* sets ellipsoid "WGS84" */
    if (prop->ellipsoid == NULL) {
	prop->ellipsoid = (char *) malloc(sizeof(char) * 7);
	strcpy(prop->ellipsoid, "WGS84");
    }
    /* sets lengthUnit "m" */
    if (prop->lengthUnit == NULL) {
	prop->lengthUnit = (char *) malloc(sizeof(char) * 2);
	strcpy(prop->lengthUnit, "m");
    }
    /* sets timeUnit "sec" */
    if (prop->timeUnit == NULL) {
	prop->timeUnit = (char *) malloc(sizeof(char) * 4);
	strcpy(prop->timeUnit, "sec");
    }
    /* sets speedLengthUnit "km" */
    if (prop->speedLengthUnit == NULL) {
	prop->speedLengthUnit = (char *) malloc(sizeof(char) * 3);
	strcpy(prop->speedLengthUnit, "km");
    }
    /* sets speedTimeUnit "hour" */
    if (prop->speedTimeUnit == NULL) {
	prop->speedTimeUnit = (char *) malloc(sizeof(char) * 5);
	strcpy(prop->speedTimeUnit, "hour");
    }
    /* sets ellipsoid setting to geod* programs */
    ellps = malloc(sizeof(char) * (strlen(prop->ellipsoid) + 8));
    strcpy(ellps, "+ellps=");
    strcat(ellps, prop->ellipsoid);
    pargv[0] = ellps;
    pargv[1] = prop->lengthUnit;
    checkEllpsUnit(prop->ellipsoid);
    prop->length2meter = checkLengthUnit(prop->lengthUnit);
    prop->time2sec = checkTimeUnit(prop->timeUnit);
    prop->speed2meter = checkLengthUnit(prop->speedLengthUnit);
    prop->speed2sec = checkTimeUnit(prop->speedTimeUnit);
    geod_set(pargc, pargv);
    if (prop->verbose) {
	printf("source filename:\t%s\n", prop->sourcefile);
	printf("output file base name:\t%s\n", prop->output);
    }
    free(ellps);
}
Exemple #2
0
int main(int argc, char **argv) {
	char *arg, **eargv = argv, *strnchr();
	FILE *fid;
	static int eargc = 0, c;

	if ((emess_dat.Prog_name = strrchr(*argv,'/')) != NULL) ++emess_dat.Prog_name;
	else emess_dat.Prog_name = *argv;
	inverse = ! strncmp(emess_dat.Prog_name, "inv", 3);
	if (argc <= 1 ) {
		(void)fprintf(stderr, usage, pj_get_release(),
                              emess_dat.Prog_name);
		exit (0);
	}
		/* process run line arguments */
	while (--argc > 0) { /* collect run line arguments */
		if(**++argv == '-') for(arg = *argv;;) {
			switch(*++arg) {
			case '\0': /* position of "stdin" */
				if (arg[-1] == '-') eargv[eargc++] = "-";
				break;
			case 'a': /* output full set of values */
				fullout = 1;
				continue;
			case 'I': /* alt. inverse spec. */
				inverse = 1;
				continue;
			case 't': /* set col. one char */
				if (arg[1]) tag = *++arg;
				else emess(1,"missing -t col. 1 tag");
				continue;
			case 'W': /* specify seconds precision */
			case 'w': /* -W for constant field width */
				if ((c = arg[1]) && isdigit(c)) {
					set_rtodms(c - '0', *arg == 'W');
					++arg;
				} else
				    emess(1,"-W argument missing or non-digit");
				continue;
			case 'f': /* alternate output format degrees or xy */
				if (--argc <= 0)
noargument:		   emess(1,"missing argument for -%c",*arg);
				oform = *++argv;
				continue;
			case 'F': /* alternate output format degrees or xy */
				if (--argc <= 0) goto noargument;
				osform = *++argv;
				continue;
			case 'l':
				if (!arg[1] || arg[1] == 'e') { /* list of ellipsoids */
                                    struct PJ_ELLPS *le;
                                    
                                    for (le=pj_get_ellps_ref(); le->id ; ++le)
                                        (void)printf("%9s %-16s %-16s %s\n",
                                                     le->id, le->major, le->ell, le->name);
				} else if (arg[1] == 'u') { /* list of units */
                                    struct PJ_UNITS *lu;
                                    
                                    for (lu = pj_get_units_ref();lu->id ; ++lu)
                                        (void)printf("%12s %-20s %s\n",
                                                     lu->id, lu->to_meter, lu->name);
				} else
                                    emess(1,"invalid list option: l%c",arg[1]);
                                exit( 0 );
			case 'p': /* output azimuths as positive */
				pos_azi = 1;
				continue;
			default:
				emess(1, "invalid option: -%c",*arg);
				break;
			}
			break;
		} else if (**argv == '+') /* + argument */
			if (pargc < MAX_PARGS)
				pargv[pargc++] = *argv + 1;
			else
				emess(1,"overflowed + argument table");
		else /* assumed to be input file name(s) */
			eargv[eargc++] = *argv;
	}
	/* done with parameter and control input */
	geod_set(pargc, pargv); /* setup projection */
	if ((n_alpha || n_S) && eargc)
		emess(1,"files specified for arc/geodesic mode");
	if (n_alpha)
		do_arc();
	else if (n_S)
		do_geod();
	else { /* process input file list */
		if (eargc == 0) /* if no specific files force sysin */
			eargv[eargc++] = "-";
		for ( ; eargc-- ; ++eargv) {
			if (**eargv == '-') {
				fid = stdin;
				emess_dat.File_name = "<stdin>";
			} else {
				if ((fid = fopen(*eargv, "r")) == NULL) {
					emess(-2, *eargv, "input file");
					continue;
				}
				emess_dat.File_name = *eargv;
			}
			emess_dat.File_line = 0;
			process(fid);
			(void)fclose(fid);
			emess_dat.File_name = (char *)0;
		}
	}
	exit(0); /* normal completion */
}