|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
utils.c
Abstract:
Environment:
User mode only
Revision History:
03-26-96 : Created
--*/
//
// this module may be compiled at warning level 4 with the following
// warnings disabled:
//
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <assert.h>
#include <windows.h>
#include <devioctl.h>
#include "jobmgr.h"
VOID xprintf( ULONG Depth, PTSTR Format, ... ) { va_list args; ULONG i; TCHAR DebugBuffer[256];
for (i=0; i<Depth; i++) { _tprintf (" "); }
va_start(args, Format); _vsntprintf(DebugBuffer, 255, Format, args); _tprintf (DebugBuffer); va_end(args); }
VOID DumpFlags( ULONG Depth, PTSTR Name, ULONG Flags, PFLAG_NAME FlagTable ) { ULONG i; ULONG mask = 0; ULONG count = 0;
UCHAR prolog[64];
xprintf(Depth, "%s (0x%08x)%c\n", Name, Flags, Flags ? TEXT(':') : TEXT(' '));
if(Flags == 0) { return; }
memset(prolog, 0, sizeof(prolog));
memset(prolog, ' ', min(6, _tcslen(Name)) * sizeof(TCHAR)); xprintf(Depth, "%s", prolog);
for(i = 0; FlagTable[i].Name != 0; i++) {
PFLAG_NAME flag = &(FlagTable[i]);
mask |= flag->Flag;
if((Flags & flag->Flag) == flag->Flag) {
//
// print trailing comma
//
if(count != 0) {
_tprintf(", ");
//
// Only print two flags per line.
//
if((count % 2) == 0) { _tprintf("\n"); xprintf(Depth, "%s", prolog); } }
_tprintf("%s", flag->Name);
count++; } }
_tprintf("\n");
if((Flags & (~mask)) != 0) { xprintf(Depth, "%sUnknown flags %#010lx\n", prolog, (Flags & (~mask))); }
return; }
#define MICROSECONDS ((ULONGLONG) 10) // 10 nanoseconds
#define MILLISECONDS (MICROSECONDS * 1000)
#define SECONDS (MILLISECONDS * 1000)
#define MINUTES (SECONDS * 60)
#define HOURS (MINUTES * 60)
#define DAYS (HOURS * 24)
LPCTSTR TicksToString( LARGE_INTEGER TimeInTicks ) { static TCHAR ticksToStringBuffer[256] = ""; LPTSTR buffer = ticksToStringBuffer;
ULONGLONG t = TimeInTicks.QuadPart; ULONGLONG days; ULONGLONG hours; ULONGLONG minutes; ULONGLONG seconds; ULONGLONG ticks; LPTSTR comma = "";
if(t == 0) { return TEXT("0 Seconds"); }
days = t / DAYS; t %= DAYS;
hours = t / HOURS; t %= HOURS;
minutes = t / MINUTES; t %= MINUTES;
seconds = t / SECONDS; t %= SECONDS;
ticks = t;
buffer[0] = TEXT('\0');
if(days) { _stprintf(buffer, "%I64d Days", days); comma = ", "; buffer += _tcslen(buffer); }
if(hours) { _stprintf(buffer, "%s%I64d Hours", comma, hours); comma = ", "; buffer += _tcslen(buffer); }
if(minutes) { _stprintf(buffer, "%s%I64d Minutes", comma, minutes); comma = ", "; buffer += _tcslen(buffer); }
if(seconds | ticks) { _stprintf(buffer, "%s%I64d.%06I64d Seconds", comma, seconds, ticks); }
return ticksToStringBuffer; }
|