/* input ranges */
H = [0,360)
L = [0,1]
S = [0,1]

/* HLS to RGB (from Raster Graphics Handbook p.337) */
if (L <= 0.5)
  {
   M = L * (1 + S);
  }
else
  {
   M = L + S - L * S;
  }

m = 2 * L - M;

/* red */
case H = [0,60):    R = m + (M - m) * (H / 60);
case H = [60,180):  R = M;
case H = [180,240): R = m + (m - m) * ((240 - H) / 60);
case H = [240,360): R = m;

/* green */
case H = [0,120):   G = m;
case H = [120,180): G = m + (M - m) * ((H - 120) / 60);
case H = [180,300): G = M;
case H = [300,360): G = m + (M - m) * ((360 - H) / 60);

/* blue */
case H = [0,60):    B = M;
case H = [60,120):  B = m + (M - m) * ((120 - H) / 60);
case H = [120,240): B = m
case H = [240,360): B = m + (M - m) * ((H - 240) / 60);

/* output ranges */
R = [0,1]
G = [0,1]
B = [0,1]