* contrib/libnf/tempfile.prg
+ New code for plataform diferent of HB_OS_DOS and HB_OS_DOS_32.
The new code not use call to C function.
+ Add new parameter. FT_TEMPFIL( cPath, [lHidden], [@nHandle] )
if [@]nHandle is used, the function not close the temp file and
return the handle by nHandle.
This parameter should be passed by reference.
If this parameter is not used or not passed by reference, the temp
file is closed.
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* File......: TEMPFILE.PRG
|
||||
* Author....: Glenn Scott
|
||||
@@ -84,10 +88,123 @@
|
||||
* $END$
|
||||
*/
|
||||
|
||||
#include "ftint86.ch"
|
||||
#ifdef HB_OS_DOS
|
||||
#define FT_TEMPFILE_ORIGINAL
|
||||
#endif
|
||||
|
||||
#define DOS 33
|
||||
#define TEMPNAME 90
|
||||
#ifdef HB_OS_DOS_32
|
||||
#undef FT_TEMPFILE_ORIGINAL
|
||||
#endif
|
||||
|
||||
#ifdef FT_TEMPFILE_ORIGINAL
|
||||
|
||||
#include "ftint86.ch"
|
||||
|
||||
#define DOS 33
|
||||
#define TEMPNAME 90
|
||||
|
||||
FUNCTION FT_TEMPFIL( cPath, lHide, nHandle )
|
||||
LOCAL cRet,aRegs[3]
|
||||
|
||||
cPath := iif( valType(cPath) != "C", ;
|
||||
replicate( chr(0),13) , ;
|
||||
cPath += replicate( chr(0), 13 ) ;
|
||||
)
|
||||
|
||||
lHide := iif( valType(lHide) != "L", .f., lHide )
|
||||
/*
|
||||
aRegs[AX] := MAKEHI( TEMPNAME )
|
||||
aRegs[CX] := iif( lHide, 2, 0 )
|
||||
aRegs[DS] := cPath
|
||||
aRegs[DX] := REG_DS
|
||||
|
||||
FT_INT86( DOS, aRegs )
|
||||
*/
|
||||
aRegs:=_ft_tempfil(cPath,lHide)
|
||||
/* If carry flag is clear, then call succeeded and a file handle is
|
||||
* sitting in AX that needs to be closed.
|
||||
*/
|
||||
|
||||
if !ft_isBitOn( aRegs[3], FLAG_CARRY )
|
||||
if hb_isbyref( @nHandle )
|
||||
nHandle = aRegs[1]
|
||||
else
|
||||
fclose( aRegs[1] )
|
||||
endif
|
||||
cRet := alltrim( strtran( aRegs[2], chr(0) ) )
|
||||
else
|
||||
cRet := ""
|
||||
endif
|
||||
|
||||
RETURN cRet
|
||||
|
||||
#else
|
||||
|
||||
#include "common.ch"
|
||||
#include "fileio.ch"
|
||||
|
||||
FUNCTION FT_TEMPFIL( cPath, lHide, nHandle )
|
||||
LOCAL nError := 0, cFile
|
||||
|
||||
Default cPath to ".\"
|
||||
Default lHide to .f.
|
||||
|
||||
cPath = alltrim( cPath )
|
||||
if right( cPath ) # "\"
|
||||
cPath += "\"
|
||||
endif
|
||||
|
||||
|
||||
do while .t.
|
||||
cFile = ntoc( int( ft_rand1( 65535 ) ), 16 ) + ntoc( int( ft_rand1( 65535 ) ), 16 )
|
||||
|
||||
nHandle := fopen( cPath + cFile ) // Use this method because
|
||||
// the FILE() function can't see
|
||||
// the hidden and system files
|
||||
|
||||
if ferror() = 2 // File not found
|
||||
|
||||
nHandle = fcreate( cPath + cFile, if( lHide, FC_HIDDEN, FC_NORMAL ) )
|
||||
|
||||
if ferror() = 5
|
||||
fclose( nHandle )
|
||||
loop
|
||||
endif
|
||||
|
||||
if ferror() # 0
|
||||
nError ++
|
||||
if nError > 10
|
||||
cFile = ""
|
||||
exit
|
||||
endif
|
||||
endif
|
||||
fclose( nHandle )
|
||||
|
||||
nHandle = fopen( cPath + cFile, FO_EXCLUSIVE + FO_READWRITE )
|
||||
if ferror() = 0
|
||||
exit
|
||||
else
|
||||
nError ++
|
||||
if nError > 10
|
||||
cFile = ""
|
||||
exit
|
||||
endif
|
||||
endif
|
||||
|
||||
else
|
||||
fclose( nHandle )
|
||||
|
||||
endif
|
||||
|
||||
enddo
|
||||
|
||||
if !hb_isbyref( @nHandle )
|
||||
fclose( nHandle )
|
||||
endif
|
||||
|
||||
return cFile
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef FT_TEST
|
||||
FUNCTION MAIN( cPath, cHide )
|
||||
@@ -105,36 +222,3 @@
|
||||
RETURN nil
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
FUNCTION FT_TEMPFIL( cPath, lHide )
|
||||
LOCAL cRet,aRegs[3]
|
||||
|
||||
cPath := iif( valType(cPath) != "C", ;
|
||||
repl( chr(0),12) , ;
|
||||
cPath += repl( chr(0), 12 ) ;
|
||||
)
|
||||
|
||||
lHide := iif( valType(lHide) != "L", .f., lHide )
|
||||
/*
|
||||
aRegs[AX] := MAKEHI( TEMPNAME )
|
||||
aRegs[CX] := iif( lHide, 2, 0 )
|
||||
aRegs[DS] := cPath
|
||||
aRegs[DX] := REG_DS
|
||||
|
||||
FT_INT86( DOS, aRegs )
|
||||
*/
|
||||
aRegs:=_ft_tempfil(cPath,lHide)
|
||||
/* If carry flag is clear, then call succeeded and a file handle is
|
||||
* sitting in AX that needs to be closed.
|
||||
*/
|
||||
|
||||
if !ft_isBitOn( aRegs[3], FLAG_CARRY )
|
||||
fclose( aRegs[1] )
|
||||
cRet := strtran( aRegs[2], chr(0) )
|
||||
else
|
||||
cRet := ""
|
||||
endif
|
||||
|
||||
RETURN cRet
|
||||
|
||||
|
||||
Reference in New Issue
Block a user