#include main(int argc, char *argv[]) { char str[3]; int m, n=-3; double year=0.; double latd, latf, lond, lonf, alt, f, fm[6]; opnpinc(argc, argv); premsg("\nCalculate IGRF components\n"); while (n < -2) { prompt("Select model - DGRF (d), PGRF (p), IGRF (i),\n"); gparma(" or by Generation (1-) ==> ", 3, &str); if ((str[0]=='d') || (str[0]=='D')) n = -2; else if ((str[0]=='p') || (str[0]=='P')) n = -1; else if ((str[0]=='i') || (str[0]=='I')) n = 0; else if ((str[0]>='0') || (str[0]<='9')) { m = str[0] - '0'; if ((m!=0) && ((str[1]=='\0') || (str[1]==' '))) n = m; else if ((str[1]>='0') || (str[1]<='9')) n = m*10 + str[1] - '0'; } } while (year < 1900.) gparmd("Select the YEAR of calculation ==> ", &year); if (n == -2) { sdgrf(year); printf("\nDGRF in %7.2f\n", year); } else if (n == -1) { spgrf(year); printf("\nPGRF in %7.2f\n", year); } else if (n == 0) { sigrf(year); printf("\nIGRF in %7.2f\n", year); } else { gigrf(n, year); printf("\nIGRF-%d in %7.2f\n", n,year); } while (1) { latd = 99999.; latf = 0.; lond = 0.; lonf = 0.; alt = 0.; prompt("\n Latitude ? (deg. min.)\n"); gparmd2(" < Hit RETURN to Quit > ==> ", &latd,&latf); if (latd == 99999.) { fputc('\n',stderr); break; } gparmd2(" Longitude ? (deg. min.) ==> ", &lond,&lonf); gparmd(" Altitude ? (in meters) ==> ", &alt); latd = latd+latf/60.; lond = lond+lonf/60.; igrfc(latd, lond, alt, &f); igrfm(fm); printf("%7.3f N %8.3f E %6.0f m : F =%8.1f H =%8.3f Z =%8.3f\n", latd, lond, alt, f, fm[3], fm[2]); printf(" dip =%8.3f dec =%8.3f\n", fm[4], fm[5]); } clspin(); }