modified: myjupyterlab.sh
[GalaxyCodeBases.git] / c_cpp / etc / calc / cal / deg.cal
blobe71b0f332722522785654bc32cc52ba05288cee7
1 /*
2  * deg - calculate in degrees, minutes, and seconds
3  *
4  * Copyright (C) 1999  David I. Bell
5  *
6  * Calc is open software; you can redistribute it and/or modify it under
7  * the terms of the version 2.1 of the GNU Lesser General Public License
8  * as published by the Free Software Foundation.
9  *
10  * Calc is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
13  * Public License for more details.
14  *
15  * A copy of version 2.1 of the GNU Lesser General Public License is
16  * distributed with calc under the filename COPYING-LGPL.  You should have
17  * received a copy with calc; if not, write to Free Software Foundation, Inc.
18  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  *
20  * @(#) $Revision: 30.2 $
21  * @(#) $Id: deg.cal,v 30.2 2010/09/02 06:01:14 chongo Exp $
22  * @(#) $Source: /usr/local/src/bin/calc/cal/RCS/deg.cal,v $
23  *
24  * Under source code control:   1990/02/15 01:50:33
25  * File existed as early as:    before 1990
26  *
27  * Share and enjoy!  :-)        http://www.isthe.com/chongo/tech/comp/calc/
28  */
31 obj deg {deg, min, sec};
33 define deg(deg, min, sec)
35         local ans;
37         if (isnull(sec))
38                 sec = 0;
39         if (isnull(min))
40                 min = 0;
41         obj deg ans;
42         ans.deg = deg;
43         ans.min = min;
44         ans.sec = sec;
45         fixdeg(ans);
46         return ans;
50 define deg_add(a, b)
52         local obj deg   ans;
54         ans.deg = 0;
55         ans.min = 0;
56         ans.sec = 0;
57         if (istype(a, ans)) {
58                 ans.deg += a.deg;
59                 ans.min += a.min;
60                 ans.sec += a.sec;
61         } else
62                 ans.deg += a;
63         if (istype(b, ans)) {
64                 ans.deg += b.deg;
65                 ans.min += b.min;
66                 ans.sec += b.sec;
67         } else
68                 ans.deg += b;
69         fixdeg(ans);
70         return ans;
74 define deg_neg(a)
76         local obj deg   ans;
78         ans.deg = -a.deg;
79         ans.min = -a.min;
80         ans.sec = -a.sec;
81         return ans;
85 define deg_sub(a, b)
87         return a - b;
91 define deg_mul(a, b)
93         local obj deg   ans;
95         if (istype(a, ans) && istype(b, ans))
96                 quit "Cannot multiply degrees together";
97         if (istype(a, ans)) {
98                 ans.deg = a.deg * b;
99                 ans.min = a.min * b;
100                 ans.sec = a.sec * b;
101         } else {
102                 ans.deg = b.deg * a;
103                 ans.min = b.min * a;
104                 ans.sec = b.sec * a;
105         }
106         fixdeg(ans);
107         return ans;
111 define deg_print(a)
113         print a.deg : 'd' : a.min : 'm' : a.sec : 's' :;
117 define deg_abs(a)
119         return a.deg + a.min / 60 + a.sec / 3600;
123 define fixdeg(a)
125         a.min += frac(a.deg) * 60;
126         a.deg = int(a.deg);
127         a.sec += frac(a.min) * 60;
128         a.min = int(a.min);
129         a.min += a.sec // 60;
130         a.sec %= 60;
131         a.deg += a.min // 60;
132         a.min %= 60;
133         a.deg %= 360;
136 if (config("resource_debug") & 3) {
137     print "obj deg {deg, min, sec} defined";