On Wed, 23 Jul 2008, David Arturo Macias Corona wrote:

Hi David,

> >2008-07-22 12:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
> >  * harbour/source/rtl/filesys.c
> >    + implemented hb_fsGetAttr() and hb_fsGetFileTime() for DOS, MS-Win,
> >      OS2 and *nixes. Please test it on different platforms.
> What kind of tests ? Can you post some test ?

I guess the first one you've already done - the modifications can
be compiled under OS2.
The second one is a runtime test. You can use the code below for it.
Just try if it works. Please remember that time resolution depends
on used FS and OS API. In OS2 it's 2 seconds.

best regards,
Przemek


#include "fileio.ch"
proc main()
local cFile := "_tst.tmp"
set date format to "YYYY-MM-DD"
ferase( cFile )
fclose( fcreate( cFile ) )
? HB_FSETDATETIME( cFile, 0d20070521, "21:45:37.123" )
? HB_FSETATTR( cFile, FC_READONLY )
aeval( directory( cFile ), { |x| qout( x[1], x[2], x[3], x[4], x[5] ) } )
? HB_FGETDATETIME( cFile ), "0x" + HB_NUMTOHEX( HB_FGETATTR( cFile ) )
? HB_FSETATTR( cFile, ;
               HB_BITOR( HB_FGETATTR( cFile ), FC_HIDDEN, FC_SYSTEM ) )
aeval( directory( cFile ), { |x| qout( x[1], x[2], x[3], x[4], x[5] ) } )
? HB_FGETDATETIME( cFile ), "0x" + HB_NUMTOHEX( HB_FGETATTR( cFile ) )
return

#pragma begindump

#include "hbapi.h"
#include "hbapiitm.h"
#include "hbapifs.h"
#include "hbapierr.h"
#include "hbdate.h"

HB_FUNC( HB_FSETDATETIME )
{
   char * szFile = hb_parc( 1 );
   if( szFile )
   {
      PHB_ITEM pDate, pTime;
      long lJulian, lMillisec;

      pDate = hb_param( 2, HB_IT_DATE );
      lJulian = pDate ? hb_itemGetDL( pDate ) : 0;
      pTime = hb_param( 3, HB_IT_STRING );
      if( pTime )
      {
         int hour = 0, minute = 0, second = 0, millisec = 0;
         hb_timeStrGet( hb_itemGetCPtr( pTime ), &hour, &minute,
                                                 &second, &millisec );
         lMillisec = hb_timeStampEncode( hour, minute, second, millisec );
      }
      else
         lMillisec = -1;
      hb_retl( hb_fsSetFileTime( ( BYTE * ) szFile, lJulian, lMillisec ) );
   }
   else
      hb_errRT_BASE( EG_ARG, 2021, NULL, HB_ERR_FUNCNAME,
                     HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_FGETDATETIME )
{
   char * szFile = hb_parc( 1 );
   if( szFile )
   {
      long lJulian, lMillisec;
      if( hb_fsGetFileTime( ( BYTE * ) szFile, &lJulian, &lMillisec ) )
      {
         char szDateTime[ 24 ];
         hb_retc( hb_dateTimeStampStr( szDateTime, lJulian, lMillisec ) );
      }
      else
         hb_retc( NULL );
   }
   else
      hb_errRT_BASE( EG_ARG, 2021, NULL, HB_ERR_FUNCNAME,
                     HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_FSETATTR )
{
   char * szFile = hb_parc( 1 );
   if( szFile && ISNUM( 2 ) )
   {
      hb_retl( hb_fsSetAttr( ( BYTE * ) szFile, hb_parnl( 2 ) ) );
   }
   else
      hb_errRT_BASE( EG_ARG, 2021, NULL, HB_ERR_FUNCNAME,
                     HB_ERR_ARGS_BASEPARAMS );
}

HB_FUNC( HB_FGETATTR )
{
   char * szFile = hb_parc( 1 );
   if( szFile )
   {
      ULONG ulAttr;
      if( hb_fsGetAttr( ( BYTE * ) szFile, &ulAttr ) )
         hb_retnint( ulAttr );
      else
         hb_retni( -1 );
   }
   else
      hb_errRT_BASE( EG_ARG, 2021, NULL, HB_ERR_FUNCNAME,
                     HB_ERR_ARGS_BASEPARAMS );
}
#pragma enddump
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to