714dd74636
git-svn-id: svn://10.65.10.50/trunk@5350 c028cbd2-c16b-5b4b-a496-9718f37d4682
237 lines
6.5 KiB
C++
Executable File
237 lines
6.5 KiB
C++
Executable File
//
|
|
// ATTROS2.CPP
|
|
//
|
|
// Source file for ArchiveLib 2.0
|
|
//
|
|
// Copyright (c) Greenleaf Software, Inc. 1994-1996
|
|
// All Rights Reserved
|
|
//
|
|
// CONTENTS
|
|
//
|
|
// ALFile::ReadAttributesFromFileSys()
|
|
// ALFile::WriteAttributesToFileSys()
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// These two files provide system-dependent functionality for ALFile.
|
|
// It takes different code to set the attributes for files depending
|
|
// on which O/S you are targetting.
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release
|
|
|
|
#include "arclib.h"
|
|
#if !defined( AL_IBM )
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#define INCL_DOSFILEMGR
|
|
#include <os2.h>
|
|
#include <io.h>
|
|
#include <time.h>
|
|
#include "filestor.h"
|
|
#include "fileattr.h"
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALFile::ReadAttributesFromFileSys()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// OS/2
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Read in the attributes of a file under OS/2.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "filestor.h"
|
|
//
|
|
// int ALFile::ReadAttributesFromFileSys();
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// None, this internal protected function has no C version.
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, this internal protected function has no VB version.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, this internal protected function has no Delphi version.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// None.
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// When an ALFile object is opened, we have to read the file attributes.
|
|
// This is an O/S dependent function, but I don't want to have too many
|
|
// #ifdefs, so I package it in a separate directory that gets compiled
|
|
// in an environment dependent fashion. This particular file gets
|
|
// compiled for any library that's using the OS/2 file system.
|
|
//
|
|
// All this function has to do is call the DosQueryFileInfo() function,
|
|
// then translate the returned bits into the appropriate internal attribute
|
|
// bits. Note that we don't try to translate any extended bits beyond
|
|
// those in DOS compatiblity mode. If there is extra stuff that goes with
|
|
// the HPFS, for example, we aren't paying any attention to it.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// AL_SUCCESS or AL_CANT_OPEN_FILE.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release.
|
|
//
|
|
|
|
int AL_PROTO
|
|
ALFile::ReadAttributesFromFileSys() /* Tag protected function */
|
|
{
|
|
FILESTATUS3 InfoBuf;
|
|
APIRET rc;
|
|
rc = DosQueryFileInfo( miHandle,
|
|
FIL_STANDARD,
|
|
(PVOID) &InfoBuf,
|
|
sizeof( InfoBuf ) );
|
|
if ( rc != 0 )
|
|
return mStatus.SetError( AL_CANT_OPEN_FILE,
|
|
"Couldn't get file attribute "
|
|
"information for %s. errno = %d.",
|
|
mName.GetName(),
|
|
rc );
|
|
mAttributes.miUnixBitsPresent = 0;
|
|
mAttributes.miReadOnly = ( InfoBuf.attrFile & FILE_READONLY ) != 0;
|
|
mAttributes.miSystem = ( InfoBuf.attrFile & FILE_SYSTEM ) != 0;
|
|
mAttributes.miHidden = ( InfoBuf.attrFile & FILE_HIDDEN ) != 0;
|
|
mAttributes.miArchive = ( InfoBuf.attrFile & FILE_ARCHIVED ) != 0;
|
|
return AL_SUCCESS;
|
|
}
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALFile::WriteAttributesToFileSys()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// OS/2
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Set the attributes of a file under OS/2.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
// #include "filestor.h"
|
|
//
|
|
// int ALFile::WriteAttributesToFileSys();
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// None, this internal protected function has no C version.
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// None, this internal protected function has no VB version.
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// None, this internal protected function has no Delphi version.
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// None.
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// When an ALFile object is closed, we have to set the file attributes.
|
|
// This is an O/S dependent function, but I don't want to have too many
|
|
// #ifdefs, so I package it in a separate directory that gets compiled
|
|
// in an environment dependent fashion. This particular file gets
|
|
// compiled for any library that's using the OS/2 file system.
|
|
//
|
|
// This function calls DosSetPathInfo() to set both the time and date
|
|
// stamp for the given file. This differs somewhat from the NT and
|
|
// DOS versions of the function, which only set the attributes.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// Nothing.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release.
|
|
//
|
|
|
|
void AL_PROTO
|
|
ALFile::WriteAttributesToFileSys() /* Tag protected function */
|
|
{
|
|
FILESTATUS3 InfoBuf;
|
|
DosQueryPathInfo( (PSZ)(char*)mName,
|
|
FIL_STANDARD,
|
|
(PVOID) &InfoBuf,
|
|
sizeof( InfoBuf ) );
|
|
if ( mAttributes.miReadOnly )
|
|
InfoBuf.attrFile |= FILE_READONLY;
|
|
else
|
|
InfoBuf.attrFile &= ~FILE_READONLY;
|
|
if ( mAttributes.miSystem )
|
|
InfoBuf.attrFile |= FILE_SYSTEM;
|
|
else
|
|
InfoBuf.attrFile &= ~FILE_SYSTEM;
|
|
if ( mAttributes.miHidden )
|
|
InfoBuf.attrFile |= FILE_HIDDEN;
|
|
else
|
|
InfoBuf.attrFile &= ~FILE_HIDDEN;
|
|
if ( mAttributes.miArchive )
|
|
InfoBuf.attrFile |= FILE_ARCHIVED;
|
|
else
|
|
InfoBuf.attrFile &= ~FILE_ARCHIVED;
|
|
|
|
struct tm tblock;
|
|
mTimeDate.GetTimeDate( &tblock );
|
|
InfoBuf.ftimeCreation.hours = tblock.tm_hour;
|
|
InfoBuf.ftimeCreation.minutes = tblock.tm_min;
|
|
InfoBuf.ftimeCreation.twosecs = tblock.tm_sec / 2;
|
|
InfoBuf.ftimeLastAccess.hours = tblock.tm_hour;
|
|
InfoBuf.ftimeLastAccess.minutes = tblock.tm_min;
|
|
InfoBuf.ftimeLastAccess.twosecs = tblock.tm_sec / 2;
|
|
InfoBuf.ftimeLastWrite.hours = tblock.tm_hour;
|
|
InfoBuf.ftimeLastWrite.minutes = tblock.tm_min;
|
|
InfoBuf.ftimeLastWrite.twosecs = tblock.tm_sec / 2;
|
|
InfoBuf.fdateCreation.day = tblock.tm_mday;
|
|
InfoBuf.fdateCreation.month = tblock.tm_mon + 1;
|
|
InfoBuf.fdateCreation.year = tblock.tm_year + 1900 - 1980;
|
|
InfoBuf.fdateLastAccess.day = tblock.tm_mday;
|
|
InfoBuf.fdateLastAccess.month = tblock.tm_mon + 1;
|
|
InfoBuf.fdateLastAccess.year = tblock.tm_year + 1900 - 1980;
|
|
InfoBuf.fdateLastWrite.day = tblock.tm_mday;
|
|
InfoBuf.fdateLastWrite.month = tblock.tm_mon + 1;
|
|
InfoBuf.fdateLastWrite.year = tblock.tm_year + 1900 -1980;
|
|
DosSetPathInfo( (PSZ)(char*)mName,
|
|
FIL_STANDARD,
|
|
(PVOID) &InfoBuf,
|
|
sizeof( InfoBuf ),
|
|
0L );
|
|
}
|
|
|