#!/usr/bin/ksh93
################################################################
function usagemsg_mktemp_k93 {
  print "
Program: mktemp_k93

This script generates a random temporary file and returns
the name of the generated file to standard output.

Usage: ${1##*/} [-?] [-v] [-V] [-d DIRECTORY]

    Where:
          '-d' = Directory in which to create the temporary file
          '-v' = Verbose mode
          '-V' = Very Verbose Mode

Author: Dana French (dfrench@mtxia.com)    Copyright 2004

\"AutoContent\" enabled"
return 0
}
################################################################
function mktemp_k93 {
  typeset TRUE="0"
  typeset FALSE="1"
  typeset VERBOSE="${FALSE}"
  typeset VERYVERB="${FALSE}"
  typeset DD_TMP="/tmp"
  typeset EXITCODE="0"
  
  while getopts ":d:vV" OPTION
  do
      case "${OPTION}" in
          'd') DD_TMP="${OPTARG}";;
          'v') VERBOSE="${TRUE}";;
          'V') VERYVERB="${TRUE}";;
          '?') usagemsg_mktemp_k93 "${0}" && return 1;;
      esac
  done
   
  shift $(( ${OPTIND} - 1 ))
  
  if [[ ! -d "${DD_TMP}" ]]
  then
      print -u 2 "# ERROR: Invalid Directory: ${DD_TMP}"
      return 2
  fi

  (( VERYVERB == TRUE )) && set -x
  
################################################################
  
#### 
#### Generate a random number at least 6 characters long
#### and assign it to a variable that is exactly 6 characters
#### long.  Build a temporary file name from this 6
#### character variable using the default temporary
#### directory, or a user specified directory.
#### 

  typeset -L6 RAND="${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}"
  TEMPFILE="${DD_TMP%/}/temp.${RAND}"

  (( VERBOSE == TRUE )) && print -u 2 "# Generated Random Number: ${RAND}"

#### Check to see if a file already exists with this full
#### path file name, if so, regenerate the 6 character random
#### number and retest.  Repeat this process until a file
#### name is found that does not already exist.

  until [[ ! -f ${TEMPFILE} ]]
  do
     (( VERBOSE == TRUE )) && print -u 2 "# ${TEMPFILE} already exists, retrying"

     typeset -L6 RAND="${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}"
     TEMPFILE="${DD_TMP%/}/temp.${RAND}"

     (( VERBOSE == TRUE )) && print -u 2 "# Generated Random Number: ${RAND}"
  done

#### Create an empty file using this randomly generated file
#### name.  Set the umask to create the file with 600 permissions,
#### meaning the owner has read-write permission, all other
#### permissions are denied.  Reset the umask back to its
#### orignal setting after the temporary file is created.

  (( VERBOSE == TRUE )) && print -u 2 "# Creating ${TEMPFILE}"

  UMASK=$( umask )
  umask 0077
  if ! exec 3>"${TEMPFILE}"
  then
      print -u 2 "# ERROR: Unable to create temporary file"
      EXITCODE="3"    
  fi
  exec 3>&-
  umask ${UMASK}

#### Print the file name to standard output so the calling
#### program will know the name of the randomly generated
#### temporary file.

  print -- "${TEMPFILE}"

#### Return to the calling function with a successful return code.

  return ${EXITCODE}

}
################################################################

mktemp_k93 "${@}"