#include void opnpinc(int argc, char *argv[]); int premsg(char *str); void gparmi(char *str, int *iv); int cvinit(int nca, double gi, double gk, double sp1, double sp2); int prompt(char *str); void gparmd2(char *str, double *dv1, double *dv2); int cviken(double fi, double fk, double *ye, double *xn); void clspin(); int main(int argc, char *argv[]) { char cns, cew; int mc, nc, lat, lon; double latd, latf, lond, lonf, x, y; opnpinc(argc, argv); premsg("\nLat. Long. to UTM x,y coordinates Conversion\n"); while (1) { gparmi("Select DATUM/ellipsoid: WGS (1) or OldTokyo (0) ==> ", &mc); if (mc == 0) mc = 800; else mc = 0; gparmi("Enter Long.E of central meridian ==> ", &lon); nc = (lon+183)/6; if ((nc>0) && (nc<=60) && ((nc*6-183) == lon)) { cvinit(mc+nc, 0., 0., 0., 0.); break; } } if (mc == 0) printf("\nutmcal: New"); else printf("\nutmcal: Old"); printf(" nc = %d (Central meridian = %d)\n\n", nc, lon); while (1) { latd = 99999., latf = 0.; lond = 0.; lonf = 0.; prompt(" Latitude ? [deg. min.]\n"); gparmd2(" < Hit RETURN to Quit > ==> ", &latd,&latf); if (latd == 99999.) { fputc('\n',stderr); break; } gparmd2(" Longitude ? [deg. min.] ==> ", &lond,&lonf); latf = latd*60.+latf; lonf = lond*60.+lonf; cviken(latf, lonf, &y, &x); if (latf < 0.) { cns = 'S'; latf = -latf; } else cns = 'N'; if (lonf < 0.) { cew = 'W'; lonf = -lonf; } else cew = 'E'; lat = (int)(latf/60.); latf = latf - lat*60.; lon = (int)(lonf/60.); lonf = lonf - lon*60.; printf(" %3d: %6.3f\' %c %3d: %6.3f\' %c :" " x = %8.3f y = %8.3f km\n\n", lat, latf, cns, lon, lonf, cew, x, y); } clspin(); return(0); }