/* routine to get an unique name for a temporary file */ /* example call */ tempFile = GetTempFile() if tempFile <> "" then say "The name of the temporary file is " || tempFile else say "Error: Cannot find a name for a temporary file!" /* close & delete the temporary file */ if tempFile <> "" then do call stream tempFile, "C", "CLOSE" '@del "' || tempFile || '"2>NUL 1>NUL' end /* if tempFile <> "" then */ exit 0 /* ------------------------------------------------------------------ */ /* function: Get an unique name for a temporary file */ /* */ /* call: GetTempFile {noOfTrys} {,targetDir} */ /* */ /* where: noOfTrys - no. of trys */ /* (optional, def.: 999) */ /* targetDir - target dir for the file */ /* The directory must exist */ /* (optional, def.: use the environment */ /* variable TEMP, the environment variable */ /* TMP or the current directory [in this order])*/ /* */ /* returns: name of the file */ /* or "" if no name was found */ /* */ /* note: If GetTempFile finds a name for a new temporary file, */ /* it opens this file to prevent it from being used by */ /* another process! */ /* The name of the file is in the format $$nnn$$.TMP where */ /* nnn is a number between 000 and 999. */ /* */ /* RXTT v2.90: Added parameter noOfTrys and tPath */ /* */ GetTempFile: PROCEDURE expose (exposeList) parse arg noOfTrys, tPath /* v2.90 */ if noOfTrys = '' | datatype( noOfTrys ) <> 'NUM' then /* v2.90 */ noOfTrys = 999 /* v2.90 */ if tPath = '' then /* v2.90 */ do /* get the path for the temporary file */ tPath = value( "TEMP", , prog.__Env ) if tPath = "" then tPath = value( "TMP", , prog.__Env ) if tPath = "" then tPath = directory() tPath = translate( tPath ) /* v2.20 */ end /* if */ tName = "" /* save the current drive and directory */ CurDir = directory() /* get the drive with the directory for the */ /* temporary files */ CurTDrive = filespec( "Drive", tPath ) /* save the current directory of the drive */ /* with the directory for temporary files! */ CurTDir = directory( curTDrive ) if directory( tPath ) = tPath then do /* restore the current directory of the drive */ /* with the directory for temporary files! */ call directory CurTDir /* restore the current drive and directory */ call directory CurDir tPath = strip( tPath, "B", '"' ) if right( tPath, 1 ) <> "\" then tPath = tPath || "\" do i=0 to noOfTrys tName = tPath || "$$" || right( "000" || i, 3 ) || "$$" || ".TMP" if stream( tName, "C", "QUERY EXISTS" ) = "" then if stream( tName, "C",, "OPEN WRITE" ) = "READY:" then /* v2.20 */ leave i tName = "" end /* do i=1 to noOfTrys */ end /* if directory() = ... */ RETURN tName