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