#! /usr/bin/gawk -f

BEGIN {

COMMAND      = "cdclpsrgb2cmyk"
VERSION      = "1.0"
DATE         =                                           "2005/01/13 (Kagimoto)"
EX           = "convert RGB color to CMYK color in PostScript file"
USAGE_GAWK   = COMMAND" <file.ps>"
USAGE_NAWK   = COMMAND" <file.ps>"

#-------------------------------------------------------------------------------
# OPTIONS
#-------------------------------------------------------------------------------

  #-----------------------------------------------------------------------------
  AWKCOM = ARGV[0]
  if (ARGC == 1 || ARGV[1] == "-help" || ARGV[1] == "help") print_usage()
}

#-----------------------------------------------------------------------------
# MAIN
#-----------------------------------------------------------------------------
{
  if (/\/RGB/) { # remove the definition of macro, RGB
    getline; getline; getline; next
  } else if (/RGB/) {
    rgb2cmyk_dcl()
    next
  } else {
    print
  }
}
#-----------------------------------------------------------------------------
# function
#-----------------------------------------------------------------------------
function rgb2cmyk_dcl () {
  rgb = $1
  red   = int(rgb/256) / 15.0
  green = int(mod(rgb,256)/16) / 15.0
  blue  = mod(rgb,16) / 15.0
  rgb2cmyk(red,green,blue)
  print cyan, magenta, yellow, black, "setcmykcolor"
}

function rgb2cmyk (r,g,b) {
  black   = min3(1.0-r,1.0-g,1.0-b)
  if (black != 1.0) {
    cyan    = (1.0-r-black)/(1.0-black)
    magenta = (1.0-g-black)/(1.0-black)
    yellow  = (1.0-b-black)/(1.0-black)
  } else {
    cyan    = 0.0
    magenta = 0.0
    yellow  = 0.0
  }
}

function min3(v1,v2,v3) {
  if (v1 > v2) {
    if (v2 > v3) {
      return v3
    } else {
      return v2
    }
  } else {
    if (v1 > v3) {
      return v3
    } else {
      return v1
    }
  }
}

function mod(v1,v2) {
  return v1-int(v1/v2)*v2
}

function print_usage() {
  print "   " COMMAND, VERSION, "      ", DATE
  print " --- ", EX, "\n"
  if (AWKCOM ~ /gawk/) {
    print " Usage : " USAGE_GAWK
    print OPTIONS_GAWK
  } else if (AWKCOM ~ /nawk/) {
    print " Usage : " USAGE_NAWK
    print OPTIONS_NAWK
  }
  exit
}

