#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[]) { int nc=0, mc, i, k, lat, lon; int io[24] = { 0, 1980, 1980, 2160, 1980, 2160, 2160, 2160, 2160, 2160, 2400, 2640, 2640, 2640, 1560, 1560, 1560, 1560, 2100, 2100, 2100, 1560, 1560, 1560 } ; int ko[24] = { 0, 7770, 7860, 7930, 8010, 8060, 8160, 8230, 8310, 8390, 8450, 8415, 8535, 8655, 8520, 7650, 7440, 7860, 8400, 8400, 8400, 7650, 7440, 7860 } ; double glat, glon, latd, latf, lond, lonf, x, y; char out[80]; opnpinc(argc, argv); premsg("\nLat. Long. to JTM coordinates Conversion\n"); while ((nc<1) || (nc>23)) { gparmi("Select DATUM/ellipsoid: WGS (1) or OldTokyo (0) ==> ", &mc); if (mc == 0) mc = 800; else mc = 0; gparmi("Enter coordinates number (1-23) ==> ", &nc); } i = io[nc]; k = ko[nc]; glat = (double)i; glon = (double)k; sprintf(out, " origin : %d:%02d'N, %d:%02d'E", i/60,i%60,k/60,k%60); premsg(out); if (mc == 0) printf("\nxycal: New"); else printf("\nxycal: Old"); printf(" JTM-%d Org.(%d:%02d'N, %d:%02d'E)\n\n", nc,i/60,i%60,k/60,k%60); cvinit(mc, glat, glon, 0., 0.); while (1) { latd = 99999.; latf = 0.; lond = 0.; lonf = 0.; prompt("\n Latitude ? [deg. min.)\n"); gparmd2(" < Hit RETURN to Quit > ==> ", &latd,&latf); if (latd == 99999.) { fputc('\n',stderr); break; } latf = latd*60.+latf; if ((latf < 1200.) || (latf > 3000.)) { printf(" *** out of valid range\n"); continue; } gparmd2(" Longitude ? [deg. min.] ==> ", &lond,&lonf); lonf = lond*60.+lonf; if ((lonf < 7200.) || (lonf > 9000.)) { printf(" *** out of valid range\n"); continue; } cviken(latf, lonf, &y, &x); lat = (int)(latf/60.); latf = latf - lat*60.; lon = (int)(lonf/60.); lonf = lonf - lon*60.; printf(" %3d:%6.3f\' N %3d:%6.3f\' E :" " x = %8.3f y = %8.3f km\n", lat, latf, lon, lonf, x, y); } clspin(); return(0); }