windows-nt/Source/XPSP1/NT/shell/osshell/accesory/calendar/caldos.c
2020-09-26 16:20:57 +08:00

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;
}