1 /* Convert radian argument to DMS ascii format */
6 ** RES is fractional second figures
8 ** CONV = 180 * 3600 * RES / PI (radians to RES seconds)
13 CONV
= 206264806.24709635515796003417;
15 format
[50] = "%dd%d'%.3f\"%c";
19 set_rtodms(int fract
, int con_w
) {
22 if (fract
>= 0 && fract
< 9 ) {
24 /* following not very elegant, but used infrequently */
25 for (i
= 0; i
< fract
; ++i
)
28 CONV
= 180. * 3600. * RES
/ PI
;
30 (void)sprintf(format
,"%%dd%%d'%%.%df\"%%c", fract
);
32 (void)sprintf(format
,"%%dd%%02d'%%0%d.%df\"%%c",
33 fract
+2+(fract
?1:0), fract
);
38 rtodms(char *s
, double r
, int pos
, int neg
) {
45 if (!pos
) { *ss
++ = '-'; sign
= 0; }
49 r
= floor(r
* CONV
+ .5);
50 sec
= fmod(r
/ RES
, 60.);
57 (void)sprintf(ss
,format
,deg
,min
,sec
,sign
);
61 (void)sprintf(ss
,format
,deg
,min
,sec
,sign
);
62 for (q
= p
= ss
+ strlen(ss
) - (sign
? 3 : 2); *p
== '0'; --p
) ;
68 (void)sprintf(ss
,"%dd%d'%c",deg
,min
,sign
);
70 (void)sprintf(ss
,"%dd%c",deg
, sign
);