home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / nfsrc21.zip / TEMPFILE.PRG < prev    next >
Text File  |  1992-09-29  |  4KB  |  144 lines

  1. /*
  2.  * File......: TEMPFILE.PRG
  3.  * Author....: Glenn Scott
  4.  * CIS ID....: 71620,1521
  5.  * Date......: $Date:   28 Sep 1992 23:48:48  $
  6.  * Revision..: $Revision:   1.7  $
  7.  * Log file..: $Logfile:   C:/nanfor/src/tempfile.prv  $
  8.  * 
  9.  * This is an original work by Glenn Scott and is placed in the
  10.  * public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log:   C:/nanfor/src/tempfile.prv  $
  16.  * 
  17.  *    Rev 1.7   28 Sep 1992 23:48:48   GLENN
  18.  * Deleted #define for FLAG_CARRY as Toolkit v2.1's ftint86.ch has it.
  19.  * 
  20.  *    Rev 1.6   03 Oct 1991 18:36:28   GLENN
  21.  * Tim Wong from Nantucket pointed out that this DOS function actually
  22.  * leaves a file handle in AX.  In order to preserve the functionality,
  23.  * I now fclose() that handle if the call is succsessful.
  24.  * 
  25.  *    Rev 1.5   15 Aug 1991 23:05:04   GLENN
  26.  * Forest Belt proofread/edited/cleaned up doc
  27.  * 
  28.  *    Rev 1.4   17 Jul 1991 22:11:18   GLENN
  29.  * Stripped off chr(0)s in the return value (aRegs[DS])
  30.  * 
  31.  *    Rev 1.3   03 Jul 1991 01:08:08   GLENN
  32.  * Changed one line in FT_TEST driver ( cHide == "Y" )
  33.  * 
  34.  *    Rev 1.2   14 Jun 1991 19:53:10   GLENN
  35.  * Minor edit to file header
  36.  * 
  37.  *    Rev 1.1   12 Jun 1991 02:45:40   GLENN
  38.  * Documentation mods, and convert to new ft_int86() syntax, return value.
  39.  * 
  40.  *    Rev 1.0   01 Apr 1991 01:02:24   GLENN
  41.  * Nanforum Toolkit
  42.  *
  43.  */
  44.  
  45.  
  46. /*  $DOC$
  47.  *  $FUNCNAME$
  48.  *     FT_TEMPFIL()
  49.  *  $CATEGORY$
  50.  *     DOS/BIOS
  51.  *  $ONELINER$
  52.  *     Create a file with a unique name
  53.  *  $SYNTAX$
  54.  *     FT_TEMPFIL( [ <cPath> ] [, <lHide> ] ) -> cFileSpec
  55.  *  $ARGUMENTS$
  56.  *     <cPath> is the directory where you want to create the temporary
  57.  *     file.  If you omit this argument, the root of the current drive
  58.  *     is assumed ("\").
  59.  *
  60.  *     If <lHide> is .T., then the file will be created with the hidden
  61.  *     attribute set.  The default is .F.
  62.  *  $RETURNS$
  63.  *     <cFileSpec> should be your path, including the name of the newly
  64.  *     created unique file.  Use this with FOPEN(), etc.
  65.  *
  66.  *     If a DOS error occurred when trying to create the file, a 
  67.  *     null string will be returned.
  68.  *
  69.  *  $DESCRIPTION$
  70.  *     This function uses DOS Interrupt 21, service 5Ah (Create temporary
  71.  *     file) to create a unique filename in a directory you specify.
  72.  *     There will be no extension.  After the file is created, you may
  73.  *     then fopen() it and do any i/o you need (see the test driver
  74.  *     in the source code).
  75.  *   
  76.  *     This function requires FT_INT86().
  77.  *  $EXAMPLES$
  78.  *     Create a unique file in the root of the current drive:
  79.  *
  80.  *            myFile := FT_TEMPFIL()
  81.  *
  82.  *     Create a unique file in the current directory and hide it:
  83.  *
  84.  *            myFile := FT_TEMPFIL(".\", .t.)
  85.  *
  86.  *     Create a unique file on another drive, but do not hide it:
  87.  *
  88.  *            myFile := FT_TEMPFIL("e:\nanfor\src\")
  89.  *  $END$
  90.  */
  91.  
  92. #include "FTINT86.CH"
  93.  
  94. #define DOS         33
  95. #define TEMPNAME    90
  96.  
  97. #ifdef FT_TEST
  98.   FUNCTION MAIN( cPath, cHide )
  99.      LOCAL cFile, nHandle
  100.      cFile := FT_TEMPFIL( cPath, (cHide == "Y") )
  101.  
  102.      if !empty( cFile )
  103.         QOut( cFile )
  104.         nHandle := fopen( cFile, 1 )
  105.         fwrite( nHandle, "This is a test!" )
  106.         fclose( nHandle )
  107.      else
  108.         Qout( "An error occurred" )
  109.      endif
  110.   RETURN nil
  111. #endif
  112.  
  113.  
  114.  
  115. FUNCTION FT_TEMPFIL( cPath, lHide )
  116.   LOCAL aRegs[ INT86_MAX_REGS ], cRet
  117.  
  118.   cPath := iif( valType(cPath) != "C",           ;
  119.                    repl( chr(0),12) ,            ;
  120.                    cPath += repl( chr(0), 12 )   ;
  121.               )
  122.  
  123.   lHide := iif( valType(lHide) != "L", .f., lHide )
  124.  
  125.   aRegs[AX]        := MAKEHI( TEMPNAME )
  126.   aRegs[CX]        := iif( lHide, 2, 0 )
  127.   aRegs[DS]        := cPath
  128.   aRegs[DX]        := REG_DS
  129.  
  130.   FT_INT86( DOS, aRegs )
  131.  
  132.   /*  If carry flag is clear, then call succeeded and a file handle is
  133.    *  sitting in AX that needs to be closed. 
  134.    */
  135.  
  136.   if !ft_isBitOn( aRegs[FLAGS], FLAG_CARRY )
  137.      fclose( aRegs[AX] )
  138.      cRet := strtran( aRegs[DS], chr(0) )
  139.   else
  140.      cRet := ""
  141.   endif
  142.  
  143. RETURN cRet
  144.