193 lines
4.5 KiB
C++
Executable File
193 lines
4.5 KiB
C++
Executable File
//
|
|
// ATTRNT.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
|
|
|
|
//
|
|
// Problem here with PowerPack and others that use the NT
|
|
// API, but don't support the whole damn thing
|
|
//
|
|
|
|
#ifdef IsBadWritePtr
|
|
#undef IsBadWritePtr
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
#include "filestor.h"
|
|
#include "fileattr.h"
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALFile::ReadAttributesFromFileSys()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Win32
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Read in the attributes of a file under Win32.
|
|
//
|
|
// 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 Win32 file system. At this
|
|
//
|
|
// All this function has to do is call the GetFileAttributes( () function,
|
|
// then translate the returned bits into the appropriate internal attribute
|
|
// bits.
|
|
//
|
|
// 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 */
|
|
{
|
|
DWORD attributes = GetFileAttributes( mName );
|
|
if ( attributes == 0xFFFFFFFF )
|
|
return AL_CANT_OPEN_FILE;
|
|
mAttributes.miUnixBitsPresent = 0;
|
|
mAttributes.miReadOnly = ( attributes & FILE_ATTRIBUTE_READONLY ) != 0;
|
|
mAttributes.miSystem = ( attributes & FILE_ATTRIBUTE_SYSTEM ) != 0;
|
|
mAttributes.miHidden = ( attributes & FILE_ATTRIBUTE_HIDDEN ) != 0;
|
|
mAttributes.miArchive = ( attributes & FILE_ATTRIBUTE_ARCHIVE ) != 0;
|
|
return AL_SUCCESS;
|
|
}
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALFile::WriteAttributesToFileSys()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Win32
|
|
// C++
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Set the attributes of a file under Win32.
|
|
//
|
|
// 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 MS-DOS file system.
|
|
//
|
|
// All this function has to do is call the WriteAttributesToFileSys()
|
|
// function, with the appopriate bits set. This means I have to translate
|
|
// the internal bits into the format expected by the Win32 API.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// Nothing.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release.
|
|
//
|
|
|
|
void AL_PROTO
|
|
ALFile::WriteAttributesToFileSys() /* Tag protected function */
|
|
{
|
|
DWORD attributes = 0;
|
|
if ( !mAttributes.miUnixBitsPresent ) {
|
|
attributes |= mAttributes.miReadOnly ? FILE_ATTRIBUTE_READONLY : 0;
|
|
attributes |= mAttributes.miSystem ? FILE_ATTRIBUTE_SYSTEM : 0;
|
|
attributes |= mAttributes.miHidden ? FILE_ATTRIBUTE_HIDDEN : 0;
|
|
attributes |= mAttributes.miArchive ? FILE_ATTRIBUTE_ARCHIVE : 0;
|
|
}
|
|
SetFileAttributes( mName, attributes );
|
|
}
|
|
|