189 lines
4.6 KiB
C
189 lines
4.6 KiB
C
|
/*
|
||
|
* caldos.c
|
||
|
*
|
||
|
* Copyright (c) 1991, Microsoft Corporation
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
*
|
||
|
* This file is/was ported from ..\..\progman\pmdos.c
|
||
|
* It contains two routines used by
|
||
|
*
|
||
|
* MODIFICATION HISTORY
|
||
|
* Initial Version: x/x/90 Author Unknown, since he didn't feel
|
||
|
* like commenting the code...
|
||
|
*
|
||
|
* NT 32b Version: 1/9/91 Jeff Pack
|
||
|
* Intitial port to begin.
|
||
|
*
|
||
|
* WARNING: since this is NOT for DOS, I'm making it soley 32bit aware.
|
||
|
* Following functions not ported
|
||
|
* IsRemovable() is in pmcomman.c (already ifdef'd in asm code)
|
||
|
* IsRemote() is in pmcomman.c (ditto!)
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "cal.h"
|
||
|
#include <string.h>
|
||
|
#include <time.h>
|
||
|
|
||
|
/*** GetCurDrive -- get current drive number.
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
* INT GetCurDrive(VOID)
|
||
|
*
|
||
|
* ENTRY - VOID
|
||
|
*
|
||
|
* EXIT - INT CurrentDrive - drive number of current drive (0=a, etc).
|
||
|
*
|
||
|
* SYNOPSIS - calls GetCurrentDirectory, must parse returned string
|
||
|
* for either drive letter, or UNC path. If UNC I gotta
|
||
|
* somehow, covert UNC path to drive letter to drive number.
|
||
|
* WARNINGS - not DBCS aware!
|
||
|
* EFFECTS -
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
INT GetCurDrive(VOID)
|
||
|
{
|
||
|
DWORD nBufferLength = 128;
|
||
|
DWORD dwReturnCode;
|
||
|
LPSTR lpszLocalBuffer;
|
||
|
INT iDriveNumber;
|
||
|
|
||
|
/* alloc local, non-moveable, zero filled buffer */
|
||
|
lpszLocalBuffer = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBufferLength);
|
||
|
if(lpszLocalBuffer == NULL){
|
||
|
OutputDebugStringA("<GetCurDrive> LocalAlloc FAILed\n");
|
||
|
}
|
||
|
|
||
|
GetCurDrive1:
|
||
|
dwReturnCode = GetCurrentDirectory(nBufferLength, lpszLocalBuffer);
|
||
|
|
||
|
/*
|
||
|
* Failed for reason other than bufferlength too small
|
||
|
*/
|
||
|
if(dwReturnCode == 0){
|
||
|
OutputDebugStringA("<GetCurDrive> GetCurrentDirectory() FAILed\n");
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* test for success, if dwReturnCode is > buffer, then need
|
||
|
* increase buffer
|
||
|
*/
|
||
|
if(dwReturnCode > nBufferLength){
|
||
|
lpszLocalBuffer = (LPSTR) LocalReAlloc(lpszLocalBuffer,
|
||
|
nBufferLength + 128,
|
||
|
LMEM_ZEROINIT | LMEM_MOVEABLE);
|
||
|
if(lpszLocalBuffer == NULL){
|
||
|
OutputDebugStringA("<GetCurDrive> LocalAlloc FAILed\n");
|
||
|
}
|
||
|
else{
|
||
|
nBufferLength += 128;
|
||
|
}
|
||
|
goto GetCurDrive1;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Finally lpszLocalBuffer has string containing current directory.
|
||
|
* Now must parse string for ":" or "\\" for drive letter or UNC
|
||
|
* If : then get drive letter, and convert to number a=0, b=1, etc.
|
||
|
* If \\ then gotta enumerate net drives, to learn what drive letter
|
||
|
* corresponds to that UNC path.
|
||
|
*/
|
||
|
|
||
|
/* check for drive letter */
|
||
|
if(lpszLocalBuffer[1] == ':'){
|
||
|
|
||
|
/* is drive letter, proceed */
|
||
|
iDriveNumber = lpszLocalBuffer[1] - 'A'; /* convert letter > number */
|
||
|
}
|
||
|
else{
|
||
|
/* must be UNC path */
|
||
|
|
||
|
/* BUG BUG need write code to convert UNC path */
|
||
|
OutputDebugStringA("<GetCurDrive> Got UNC path, didnt expect, and no code!\n");
|
||
|
}
|
||
|
|
||
|
LocalFree(lpszLocalBuffer);
|
||
|
return(iDriveNumber);
|
||
|
}
|
||
|
|
||
|
/*** FDosDelete -- Delete named file.
|
||
|
*
|
||
|
* INT FDosDelete(LPSTR lpszFileToDelete)
|
||
|
*
|
||
|
* ENTRY - LPSTR lpszFileToDelete - filename to delete.
|
||
|
*
|
||
|
* EXIT - INT xxx - returns (0) if success
|
||
|
*
|
||
|
* SYNOPSIS - calls win32 DeleteFile.
|
||
|
* WARNINGS -
|
||
|
* EFFECTS -
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
INT FDosDelete(LPSTR lpszFileToDelete)
|
||
|
{
|
||
|
BOOL bReturnCode;
|
||
|
|
||
|
bReturnCode = DeleteFile(lpszFileToDelete);
|
||
|
|
||
|
if(bReturnCode){
|
||
|
return(0);
|
||
|
}
|
||
|
else{
|
||
|
return(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*** FDosRename -- Rename file.
|
||
|
*
|
||
|
* INT FDosRename(LPSTR lpszOrgFileName, LPSTR lpszNewFileName)
|
||
|
*
|
||
|
* ENTRY - LPSTR lpszOrgFileName - origianl filename.
|
||
|
* LPSTR lpszNewFileName - New filename.
|
||
|
*
|
||
|
* EXIT - INT xxx - returns (0) if success
|
||
|
*
|
||
|
* SYNOPSIS - calls win32 MoveFile.
|
||
|
* WARNINGS -
|
||
|
* EFFECTS -
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
INT FDosRename(LPSTR lpszOrgFileName, LPSTR lpszNewFileName)
|
||
|
{
|
||
|
|
||
|
BOOL bReturnCode;
|
||
|
|
||
|
/* rename file */
|
||
|
bReturnCode = MoveFile(lpszOrgFileName, lpszNewFileName);
|
||
|
|
||
|
if(bReturnCode){
|
||
|
return(0); /* success */
|
||
|
}
|
||
|
else{
|
||
|
return(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID ReadClock(D3*pd3, TM*pmin)
|
||
|
{
|
||
|
time_t t;
|
||
|
struct tm *ptm;
|
||
|
|
||
|
time(&t);
|
||
|
ptm = localtime(&t);
|
||
|
*pmin = (TM)(ptm->tm_min + ptm->tm_hour * 60);
|
||
|
pd3->wMonth = (WORD)ptm->tm_mon;
|
||
|
|
||
|
//- ReadClock: fixed to be day of month 0-30.
|
||
|
pd3->wDay = ptm->tm_mday - 1;
|
||
|
|
||
|
//- ReadClock: fixed to be years since 1980 instead of since 0.
|
||
|
pd3->wYear = ptm->tm_year - 80;
|
||
|
}
|