static void printLL(double p, double l) { if (oform) { (void)printf(oform, p * RAD_TO_DEG); TAB; (void)printf(oform, l * RAD_TO_DEG); } else { (void)fputs(rtodms(pline, p, 'N', 'S'),stdout); TAB; (void)fputs(rtodms(pline, l, 'E', 'W'),stdout); } }
static void process(FILE *fid) { char line[MAX_LINE], *s, t, pline[100]; projUV val; double tmp; for (;;) { if (input.bin) fread(&val, sizeof(projUV), 1, fid); else if (s = fgets(line, MAX_LINE, fid)) { if (*s == tag) { fputs(line, stdout); continue; } else if (input.ll) { val.u = dmstor(s, &s); val.v = dmstor(s, &s); } else { val.u = strtod(s, &s); val.v = strtod(s, &s); } } if (feof(fid)) break; if (input.rev) { tmp = val.u; val.u = val.v; val.v = tmp; } /* data in, manupulate */ if (input.cnv) val = pj_inv(val, input.cnv); if (input.hp) val = nad_cvt(val, 1, htab); /* nad conversion */ if (ctab) val = nad_cvt(val, input.t83 ? 1 : 0, ctab); if (output.hp) val = nad_cvt(val, 0, htab); if (output.cnv) val = pj_fwd(val, output.cnv); /* output data */ if (output.rev) { tmp = val.u; val.u = val.v; val.v = tmp; } if (output.bin) (void)fwrite(&val, sizeof(projUV), 1, stdout); else { if (echoin) { t = *s; *s = '\0'; (void)fputs(line, stdout); (void)putchar('\t'); *s = t; } if (val.u == HUGE_VAL) (void)fputs(oterr, stdout); else if (output.ll) if (oform) { (void)printf(oform, val.u * RAD_TO_DEG); (void)putchar('\t'); (void)printf(oform, val.v * RAD_TO_DEG); } else if (output.rev) { (void)fputs(rtodms(pline, val.u, 'N', 'S'), stdout); (void)putchar('\t'); (void)fputs(rtodms(pline, val.v, 'E', 'W'), stdout); } else { (void)fputs(rtodms(pline, val.u, 'E', 'W'), stdout); (void)putchar('\t'); (void)fputs(rtodms(pline, val.v, 'N', 'S'), stdout); } else { (void)printf(oform ? oform : "%.2f", val.u); (void)putchar('\t'); (void)printf(oform ? oform : "%.2f", val.v); } if (input.bin) putchar('\n'); else (void)fputs(s, stdout); } } }
static void process(FILE *fid) { char line[MAX_LINE+3], *s, pline[40]; projUV data; for (;;) { double z; ++emess_dat.File_line; if (!(s = fgets(line, MAX_LINE, fid))) break; if (!strchr(s, '\n')) { /* overlong line */ int c; (void)strcat(s, "\n"); /* gobble up to newline */ while ((c = fgetc(fid)) != EOF && c != '\n') ; } if (*s == tag) { fputs(line, stdout); continue; } if (reversein) { data.v = (*informat)(s, &s); data.u = (*informat)(s, &s); } else { data.u = (*informat)(s, &s); data.v = (*informat)(s, &s); } z = strtod( s, &s ); if (data.v == HUGE_VAL) data.u = HUGE_VAL; if (!*s && (s > line)) --s; /* assumed we gobbled \n */ if ( echoin) { int t; t = *s; *s = '\0'; (void)fputs(line, stdout); *s = t; putchar('\t'); } if (data.u != HUGE_VAL) { if( pj_transform( fromProj, toProj, 1, 0, &(data.u), &(data.v), &z ) != 0 ) { data.u = HUGE_VAL; data.v = HUGE_VAL; } } if (data.u == HUGE_VAL) /* error output */ fputs(oterr, stdout); else if (pj_is_latlong(toProj) && !oform) { /*ascii DMS output */ if (reverseout) { fputs(rtodms(pline, data.v, 'N', 'S'), stdout); putchar('\t'); fputs(rtodms(pline, data.u, 'E', 'W'), stdout); } else { fputs(rtodms(pline, data.u, 'E', 'W'), stdout); putchar('\t'); fputs(rtodms(pline, data.v, 'N', 'S'), stdout); } } else { /* x-y or decimal degree ascii output */ if ( pj_is_latlong(toProj) ) { data.v *= RAD_TO_DEG; data.u *= RAD_TO_DEG; } if (reverseout) { printf(oform,data.v); putchar('\t'); printf(oform,data.u); } else { printf(oform,data.u); putchar('\t'); printf(oform,data.v); } } putchar(' '); if( oform != NULL ) printf( oform, z ); else printf( "%.3f", z ); if( s ) printf( "%s", s ); else printf( "\n" ); } }
char* proj_rtodms(char *s, double r, int pos, int neg) { return rtodms(s, r, pos, neg); }
/* file processing function */ static void process(FILE *fid) { char line[MAX_LINE+3], *s = nullptr, pline[40]; PJ_COORD data; for (;;) { int facs_bad = 0; ++emess_dat.File_line; if (bin_in) { /* binary input */ if (fread(&data, sizeof(PJ_UV), 1, fid) != 1) break; } else { /* ascii input */ if (!(s = fgets(line, MAX_LINE, fid))) break; if (!strchr(s, '\n')) { /* overlong line */ int c; (void)strcat(s, "\n"); /* gobble up to newline */ while ((c = fgetc(fid)) != EOF && c != '\n') ; } if (*s == tag) { if (!bin_out) (void)fputs(line, stdout); continue; } if (reversein) { data.uv.v = (*informat)(s, &s); data.uv.u = (*informat)(s, &s); } else { data.uv.u = (*informat)(s, &s); data.uv.v = (*informat)(s, &s); } if (data.uv.v == HUGE_VAL) data.uv.u = HUGE_VAL; if (!*s && (s > line)) --s; /* assumed we gobbled \n */ if (!bin_out && echoin) { char t; t = *s; *s = '\0'; (void)fputs(line, stdout); *s = t; putchar('\t'); } } if (data.uv.u != HUGE_VAL) { PJ_COORD coord; coord.lp = data.lp; if (prescale) { data.uv.u *= fscale; data.uv.v *= fscale; } if (dofactors && !inverse) { facs = proj_factors(Proj, coord); facs_bad = proj_errno(Proj); } data.xy = (*proj.fwd)(data.lp, Proj); if (dofactors && inverse) { facs = proj_factors(Proj, coord); facs_bad = proj_errno(Proj); } if (postscale && data.uv.u != HUGE_VAL) { data.uv.u *= fscale; data.uv.v *= fscale; } } if (bin_out) { /* binary output */ (void)fwrite(&data, sizeof(PJ_UV), 1, stdout); continue; } else if (data.uv.u == HUGE_VAL) /* error output */ (void)fputs(oterr, stdout); else if (inverse && !oform) { /*ascii DMS output */ if (reverseout) { (void)fputs(rtodms(pline, data.uv.v, 'N', 'S'), stdout); putchar('\t'); (void)fputs(rtodms(pline, data.uv.u, 'E', 'W'), stdout); } else { (void)fputs(rtodms(pline, data.uv.u, 'E', 'W'), stdout); putchar('\t'); (void)fputs(rtodms(pline, data.uv.v, 'N', 'S'), stdout); } } else { /* x-y or decimal degree ascii output, scale if warranted by output units */ if (inverse) { if (proj_angular_input(Proj, PJ_FWD)) { data.uv.v *= RAD_TO_DEG; data.uv.u *= RAD_TO_DEG; } } else { if (proj_angular_output(Proj, PJ_FWD)) { data.uv.v *= RAD_TO_DEG; data.uv.u *= RAD_TO_DEG; } } if (reverseout) { (void)printf(oform, data.uv.v); putchar('\t'); (void)printf(oform, data.uv.u); } else { (void)printf(oform, data.uv.u); putchar('\t'); (void)printf(oform, data.uv.v); } } /* print scale factor data */ if (dofactors) { if (!facs_bad) (void)printf("\t<%g %g %g %g %g %g>", facs.meridional_scale, facs.parallel_scale, facs.areal_scale, facs.angular_distortion * RAD_TO_DEG, facs.tissot_semimajor, facs.tissot_semiminor); else (void)fputs("\t<* * * * * *>", stdout); } (void)fputs(bin_in ? "\n" : s, stdout); } }
void static /* file processing function */ process(FILE *fid) { char line[MAXLINE+3], *s; for (;;) { ++emess_dat.File_line; if (!(s = fgets(line, MAXLINE, fid))) break; if (!strchr(s, '\n')) { /* overlong line */ int c; strcat(s, "\n"); /* gobble up to newline */ while ((c = fgetc(fid)) != EOF && c != '\n') ; } if (*s == tag) { fputs(line, stdout); continue; } phi1 = dmstor(s, &s); lam1 = dmstor(s, &s); if (inverse) { phi2 = dmstor(s, &s); lam2 = dmstor(s, &s); geod_invrs(); } else { al12 = dmstor(s, &s); S = strtod(s, &s) * to_meter; geod_prefor(); geod_forwd(); } if (!*s && (s > line)) --s; /* assumed we gobbled \n */ if (pos_azi) { if (al12 < 0.) al12 += TWOPI; if (al21 < 0.) al21 += TWOPI; } if (fullout) { printLL(phi1, lam1); TAB; printLL(phi2, lam2); TAB; if (oform) { (void)printf(oform, al12 * RAD_TO_DEG); TAB; (void)printf(oform, al21 * RAD_TO_DEG); TAB; (void)printf(osform, S * fr_meter); } else { (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB; (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB; (void)printf(osform, S * fr_meter); } } else if (inverse) if (oform) { (void)printf(oform, al12 * RAD_TO_DEG); TAB; (void)printf(oform, al21 * RAD_TO_DEG); TAB; (void)printf(osform, S * fr_meter); } else { (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB; (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB; (void)printf(osform, S * fr_meter); } else { printLL(phi2, lam2); TAB; if (oform) (void)printf(oform, al21 * RAD_TO_DEG); else (void)fputs(rtodms(pline, al21, 0, 0), stdout); } (void)fputs(s, stdout); } }