1 /*  -- translated by f2c (version 20100827).
2    You must link the resulting object file with libf2c:
3 	on Microsoft Windows system, link with libf2c.lib;
4 	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
5 	or, if you install libf2c.a in a standard place, with -lf2c -lm
6 	-- in that order, at the end of the command line, as in
7 		cc *.o -lf2c -lm
8 	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
9 
10 		http://www.netlib.org/f2c/libf2c.zip
11 */
12 
13 #include "libtinyf2c.h"
14 
15 /* Table of constant values */
16 
17 static real c_b4 = 360.f;
18 
19 /* ----------------------------------------------------------------------- */
clrgsv_(integer * r__,integer * g,integer * b,real * h__,real * s,real * v,integer * n,integer * m)20 /* Subroutine */ int clrgsv_(integer *r__, integer *g, integer *b, real *h__,
21 	real *s, real *v, integer *n, integer *m)
22 {
23     /* System generated locals */
24     integer r_dim1, r_offset, g_dim1, g_offset, b_dim1, b_offset, h_dim1,
25 	    h_offset, s_dim1, s_offset, v_dim1, v_offset, i__1, i__2;
26 
27     /* Builtin functions */
28     double r_mod(real *, real *);
29 
30     /* Local variables */
31     static integer i__, j, min__, max__;
32 
33     /* Parameter adjustments */
34     v_dim1 = *n;
35     v_offset = 1 + v_dim1;
36     v -= v_offset;
37     s_dim1 = *n;
38     s_offset = 1 + s_dim1;
39     s -= s_offset;
40     h_dim1 = *n;
41     h_offset = 1 + h_dim1;
42     h__ -= h_offset;
43     b_dim1 = *n;
44     b_offset = 1 + b_dim1;
45     b -= b_offset;
46     g_dim1 = *n;
47     g_offset = 1 + g_dim1;
48     g -= g_offset;
49     r_dim1 = *n;
50     r_offset = 1 + r_dim1;
51     r__ -= r_offset;
52 
53     /* Function Body */
54     i__1 = *n;
55     for (i__ = 1; i__ <= i__1; ++i__) {
56 	i__2 = *m;
57 	for (j = 1; j <= i__2; ++j) {
58 	    if (r__[i__ + j * r_dim1] >= g[i__ + j * g_dim1] && r__[i__ + j *
59 		    r_dim1] >= b[i__ + j * b_dim1]) {
60 		max__ = r__[i__ + j * r_dim1];
61 	    } else if (g[i__ + j * g_dim1] >= b[i__ + j * b_dim1]) {
62 		max__ = g[i__ + j * g_dim1];
63 	    } else {
64 		max__ = b[i__ + j * b_dim1];
65 	    }
66 	    if (r__[i__ + j * r_dim1] <= g[i__ + j * g_dim1] && r__[i__ + j *
67 		    r_dim1] <= b[i__ + j * b_dim1]) {
68 		min__ = r__[i__ + j * r_dim1];
69 	    } else if (g[i__ + j * g_dim1] <= b[i__ + j * b_dim1]) {
70 		min__ = g[i__ + j * g_dim1];
71 	    } else {
72 		min__ = b[i__ + j * b_dim1];
73 	    }
74 	    if (max__ == r__[i__ + j * r_dim1]) {
75 		h__[i__ + j * h_dim1] = (g[i__ + j * g_dim1] - b[i__ + j *
76 			b_dim1]) * 60.f / (max__ - min__);
77 	    } else if (max__ == g[i__ + j * g_dim1]) {
78 		h__[i__ + j * h_dim1] = (b[i__ + j * b_dim1] - r__[i__ + j *
79 			r_dim1]) * 60.f / (max__ - min__) + 120.f;
80 	    } else {
81 		h__[i__ + j * h_dim1] = (r__[i__ + j * r_dim1] - g[i__ + j *
82 			g_dim1]) * 60.f / (max__ - min__) + 240.f;
83 	    }
84 	    h__[i__ + j * h_dim1] = r_mod(&h__[i__ + j * h_dim1], &c_b4);
85 	    s[i__ + j * s_dim1] = (real) ((max__ - min__) / max__);
86 	    v[i__ + j * v_dim1] = (r__[i__ + j * r_dim1] + g[i__ + j * g_dim1]
87 		     + b[i__ + j * b_dim1]) / 3.f;
88 /* L20: */
89 	}
90 /* L10: */
91     }
92     return 0;
93 } /* clrgsv_ */
94 
95