
  # -------------------------------------------------------------------------------------------------------------------------  #
  #  -----------------------------------------------------------------------------------------------------------------------   #
  #                                                                                                                            #
  #           File Name              :  showkcols.r                                                                            #
  #           Last Updated Funclist  :  08 Feb 2015,  5:12 AM (Sunday)                                                         #
  #                                                                                                                            #
  #           Author Name            :  Rick Saporta                                                                           #
  #           Author Email           :  RickSaporta@gmail.com                                                                  #
  #           Author URL             :  www.github.com/rsaporta                                                                #
  #                                                                                                                            #
  #           Packages Called        :  NA                                                                                     #
  #           Packages Used via NS   :  NA                                                                                     #
  #                                                                                                                            #
  #  -----------------------------------------------------------------------------------------------------------------------   #
  #                                                                                                                            #
  #   showkcols          ( dateCol="date", having=c(), not.having=c(), envir=globalenv(), allOrAny.having=all                  #
  #                        , allOrAny.nothaving=any )                                                                          #
  #                                                                                                                            #
  #                                                                                                                            #
  #                                                     <END FUNCS>                                                            #
  #  -----------------------------------------------------------------------------------------------------------------------   #
  # -------------------------------------------------------------------------------------------------------------------------  #

showkcols <- function(dateCol="date", having=c(), not.having=c(), envir=globalenv(), allOrAny.having=all, allOrAny.nothaving=any) {

  allOrAny.having <- match.fun(allOrAny.having)
  allOrAny.nothaving <- match.fun(allOrAny.nothaving)

  nms.kCols <- ls(pattern="^[Kk][Cc]ols\\.?.*", envir=envir)
  vals.kCols <- gapply(nms.kCols, rbind)

  if (length(having))
    vals.kCols <- vals.kCols [sapply(vals.kCols, function(x) allOrAny.having(x %cont% having))]
  if (length(not.having))
    vals.kCols <- vals.kCols [sapply(vals.kCols, function(x) allOrAny.nothaving(!(x %cont% not.having)))]

  if (!length(vals.kCols)) {
    warning("no length in vals.kCols")
    return(NULL)
  }

  ## Check for alernate dateCol
  if (missing(dateCol)) {
    allVals <- unique(unlist(vals.kCols))
    if (dateCol %ni% allVals) {
      if (length(d <- extract(dateCol, allVals)))
        dateCol <- d[[1]]
      else if (length(d <- extract("MoNth", allVals)))
        dateCol <- d[[1]]
    } 
  }

  len <- sapply(vals.kCols, length)
  date.first <- sapply(vals.kCols, function(x) x[[1]] == dateCol)
  smaller.date <- vals.kCols[len <= 8 & date.first]
  smaller.nodate <- vals.kCols[len <= 8 & !date.first]


  larger  <- vals.kCols[len >  8]
  if (length(larger)) {
    print (larger)
    cat("\n")
  }
  # ------------------------ #
  if (length(smaller.nodate)) {
    ret.smaller.nodate <- do.call(rbind, c(lapply(smaller.nodate, as.data.table), fill=TRUE))
    ret.smaller.nodate <- cbind(ret.smaller.nodate, Name=sprintf("%-24s", names(smaller.nodate)))
    setkey(ret.smaller.nodate)
    setcolorderpt(ret.smaller.nodate, "Name")
    print(ret.smaller.nodate)
    cat("\n")
  }
  # ------------------------ #
  if (length(smaller.date)) {
    ret.smaller.date <- do.call(rbind, c(lapply(smaller.date, as.data.table), fill=TRUE))
    setnames(ret.smaller.date, "V1", dateCol)
    ret.smaller.date <- cbind(ret.smaller.date, Name=sprintf("%-24s", names(smaller.date)))
    setkey(ret.smaller.date)
    setcolorderpt(ret.smaller.date, "Name")
    print(ret.smaller.date)
    cat("\n")
  }
  # ------------------------ #


  return(invisible(vals.kCols))
}
