135 lines
3.9 KiB
C++
135 lines
3.9 KiB
C++
|
// FILE.C -- Utilities for File handling
|
||
|
//
|
||
|
// Copyright (c) 1989, Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// Purpose:
|
||
|
// This module contains routines that help in file handling. These routines
|
||
|
// have a behaviour which depends upon the Operating System Version.
|
||
|
//
|
||
|
// Revision History:
|
||
|
// 08-Jun-1992 SS Port to DOSX32
|
||
|
// 20-Apr-1989 SB Created
|
||
|
//
|
||
|
// Notes: Created to give OS/2 Version 1.2 filename support.
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#define bitsin(type) sizeof(type) * 8
|
||
|
|
||
|
// getFileName -- get file name from struct
|
||
|
//
|
||
|
// Purpose: returns filename from file search structure passed to it.
|
||
|
//
|
||
|
// Input: findBuf -- address of pointer to structure
|
||
|
//
|
||
|
// Output: Returns a pointer to filename in the file search structure.
|
||
|
//
|
||
|
// Assumes:
|
||
|
// That the structure of appropriate size is given to it. This means that the
|
||
|
// size is as per --
|
||
|
// find_t : DOS Real Mode
|
||
|
// _finddata_t : FLAT Protect Mode
|
||
|
//
|
||
|
// Notes: The functionality depends upon the OS version and mode
|
||
|
|
||
|
char *
|
||
|
getFileName(
|
||
|
void *findBuf
|
||
|
)
|
||
|
{
|
||
|
char *fileName;
|
||
|
|
||
|
fileName = ((struct _finddata_t *) findBuf)->name;
|
||
|
|
||
|
return(fileName);
|
||
|
}
|
||
|
|
||
|
// getDateTime -- get file timestamp from struct
|
||
|
//
|
||
|
// Purpose: returns timestamp from the file search structure passed to it.
|
||
|
//
|
||
|
// Input: findBuf -- address of pointer to structure
|
||
|
//
|
||
|
// Output: Returns timestamp of the file in the structure
|
||
|
//
|
||
|
// Assumes:
|
||
|
// That the structure of appropriate size is given to it. This means that the
|
||
|
// size is as per --
|
||
|
// find_t : DOS Real Mode
|
||
|
// _finddata_t : FLAT Protect Mode
|
||
|
//
|
||
|
// Notes:
|
||
|
// The timestamp is an unsigned long value that gives the date and time of last
|
||
|
// change to the file. If the date is high byte then two times of creation of
|
||
|
// two files can be compared by comparing their timestamps. This is easy in the
|
||
|
// DOS struct but becomes complex for the OS/2 structs because the order of date
|
||
|
// and time has been reversed (for some unexplicable reason).
|
||
|
//
|
||
|
// The functionality depends upon the OS version and mode.
|
||
|
|
||
|
time_t
|
||
|
getDateTime(
|
||
|
const _finddata_t *pfd
|
||
|
)
|
||
|
{
|
||
|
time_t dateTime;
|
||
|
|
||
|
if( pfd->attrib & _A_SUBDIR ) {
|
||
|
// subdir return create date
|
||
|
if (pfd->time_create == -1) {
|
||
|
// except on FAT
|
||
|
dateTime = pfd->time_write;
|
||
|
}
|
||
|
else {
|
||
|
dateTime = pfd->time_create;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
dateTime = pfd->time_write ;
|
||
|
}
|
||
|
|
||
|
return dateTime;
|
||
|
}
|
||
|
|
||
|
// putDateTime -- change the timestamp in the struct
|
||
|
//
|
||
|
// Purpose: changes timestamp in the file search structure passed to it.
|
||
|
//
|
||
|
// Input: findBuf -- address of pointer to structure
|
||
|
// lDateTime -- new value of timestamp
|
||
|
//
|
||
|
// Assumes:
|
||
|
// That the structure of appropriate size is given to it. This means that the
|
||
|
// size is as per --
|
||
|
// find_t : DOS Real Mode
|
||
|
// FileFindBuf : OS/2 (upto Ver 1.10) Protect Mode
|
||
|
// _FILEFINDBUF : OS/2 (Ver 1.20 & later) Protect Mode
|
||
|
//
|
||
|
// Notes:
|
||
|
// The timestamp is a time_t value that gives the date and time of last
|
||
|
// change to the file. If the date is high byte then two times of creation of
|
||
|
// two files can be compared by comparing their timestamps. This is easy in the
|
||
|
// DOS struct but becomes complex for the OS/2 structs because the order of date
|
||
|
// and time has been reversed (for some unexplicable reason).
|
||
|
//
|
||
|
// The functionality depends upon the OS version and mode.
|
||
|
//
|
||
|
// Efficient method to get a long with high and low bytes reversed is
|
||
|
// (long)high << 16 | (long)low //high, low being short
|
||
|
|
||
|
void
|
||
|
putDateTime(
|
||
|
_finddata_t *pfd,
|
||
|
time_t lDateTime
|
||
|
)
|
||
|
{
|
||
|
if (pfd->attrib & _A_SUBDIR) {
|
||
|
// return the creation date on directories
|
||
|
pfd->time_create = lDateTime;
|
||
|
}
|
||
|
else {
|
||
|
pfd->time_write = lDateTime;
|
||
|
}
|
||
|
}
|