/* Compute sexagesimal from decimal */ #include #include #include #include int main(int argc,char *argv[]) { int h=0; double sec,deg,min; char c,sign,d=' '; double x; char s[14]; if (argc==1) { printf("Usage: dec2s [options] \n\nCompute sexagesimal from decimal input x.\n"); printf("Options: -r gives hours instead of degrees\n"); printf(" -d uses character a as delimiter\n"); printf(" -h uses hms as delimiters\n"); printf(" -s always prints sign\n\n"); return -1; } // Get Decimal Value x=(double) atof(argv[--argc]); sign=(x<0 ? '-' : ' '); // Get Options while (--argc > 0 && (*++argv)[0] == '-') { while (c = *++argv[0]) { if (c == 'r') x /= 15.; if (c == 's') sign=(x<0 ? '-' : '+'); if (c == 'd') if (strlen(argv[0])!=1) d=(*argv)[1]; if (c == 'h') h++; } } x=3600.*fabs(x); sec=fmod(x,60.); x=(x-sec)/60.; min=fmod(x,60.); x=(x-min)/60.; deg=x; if (h==0) printf("%c%02i%c%02i%c%06.3f\n",sign,(int) deg,d,(int) min,d,(float) sec); else printf("%c%02ih%02im%06.3fs\n",sign,(int) deg,(int) min,(float) sec); return 0; }