// Returns given RGB color as an HSV color in 23bit INT format // usage: /rgbtohsv R G B [ action ] rgbtohsv = [ local r g b mn d h s v r = (divf $arg1 0xFF) g = (divf $arg2 0xFF) b = (divf $arg3 0xFF) v = (maxf $r $g $b) mn = (minf $r $g $b) if (=f $mn $v) [ d = 0 h = 0 s = 0 ] [ d = (-f $v $mn) s = (divf $d $v) h = (casef $v $r [ floor (*f 60 (modf (divf (-f $g $b) $d) 6)) ] $g [ *f 60 (+f (divf (-f $b $r) $d) 2) ] $b [ *f 60 (+f (divf (-f $r $g) $d) 4) ]) ] if (>= $numargs 4) [ doargs $arg4 ] [ | $v (<< $s 7) (<< $h 16) ] ]