171 lines
3.4 KiB
C
171 lines
3.4 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997 FORE Systems, Inc.
|
||
|
Copyright (c) 1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
utils.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
ATM ARP Admin Utility.
|
||
|
|
||
|
Usage:
|
||
|
|
||
|
atmarp
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Who When What
|
||
|
-------- -------- ---------------------------------------------
|
||
|
josephj 06-10-1998 Created (adapted from atmlane admin utility).
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
Modelled after atmlane utility.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "common.h"
|
||
|
|
||
|
//
|
||
|
// LoadMessageTable
|
||
|
//
|
||
|
// Loads internationalizable strings into a table, replacing the default for
|
||
|
// each. If an error occurs, the English language default is left in place.
|
||
|
//
|
||
|
//
|
||
|
VOID
|
||
|
LoadMessageTable(
|
||
|
PMESSAGE_STRING Table,
|
||
|
UINT MessageCount
|
||
|
)
|
||
|
{
|
||
|
LPTSTR string;
|
||
|
DWORD count;
|
||
|
|
||
|
//
|
||
|
// for all messages in a MESSAGE_STRING table, load the string from this
|
||
|
// module, replacing the default string in the table (only there in case
|
||
|
// we get an error while loading the string, so we at least have English
|
||
|
// to fall back on)
|
||
|
//
|
||
|
|
||
|
while (MessageCount--) {
|
||
|
if (Table->Message != MSG_NO_MESSAGE) {
|
||
|
|
||
|
//
|
||
|
// we really want LoadString here, but LoadString doesn't indicate
|
||
|
// how big the string is, so it doesn't give us an opportunity to
|
||
|
// allocate exactly the right buffer size. FormatMessage does the
|
||
|
// right thing
|
||
|
//
|
||
|
|
||
|
count = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
|
||
|
| FORMAT_MESSAGE_FROM_HMODULE,
|
||
|
NULL, // use default hModule
|
||
|
Table->Message,
|
||
|
0, // use default language
|
||
|
(LPTSTR)&string,
|
||
|
0, // minimum size to allocate
|
||
|
NULL // no arguments for inclusion in strings
|
||
|
);
|
||
|
if (count) {
|
||
|
|
||
|
//
|
||
|
// Format message returned the string: replace the English
|
||
|
// language default
|
||
|
//
|
||
|
|
||
|
Table->String = string;
|
||
|
} else {
|
||
|
|
||
|
//
|
||
|
// this is ok if there is no string (e.g. just %0) in the .mc
|
||
|
// file
|
||
|
//
|
||
|
|
||
|
Table->String = TEXT("");
|
||
|
}
|
||
|
}
|
||
|
++Table;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
DisplayMessage(
|
||
|
IN BOOLEAN Tabbed,
|
||
|
IN DWORD MessageId,
|
||
|
...
|
||
|
)
|
||
|
{
|
||
|
va_list pArg;
|
||
|
CHAR MessageBuffer[2048];
|
||
|
INT Count;
|
||
|
|
||
|
va_start(pArg, MessageId);
|
||
|
|
||
|
Count = FormatMessage(
|
||
|
FORMAT_MESSAGE_FROM_HMODULE,
|
||
|
NULL, // default hModule
|
||
|
MessageId,
|
||
|
0, // default language
|
||
|
MessageBuffer,
|
||
|
sizeof(MessageBuffer),
|
||
|
&pArg
|
||
|
);
|
||
|
|
||
|
va_end(pArg);
|
||
|
|
||
|
if (Tabbed)
|
||
|
{
|
||
|
putchar('\t');
|
||
|
}
|
||
|
|
||
|
printf(MessageBuffer);
|
||
|
}
|
||
|
|
||
|
HANDLE
|
||
|
OpenDevice(
|
||
|
CHAR *pDeviceName
|
||
|
)
|
||
|
{
|
||
|
DWORD DesiredAccess;
|
||
|
DWORD ShareMode;
|
||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL;
|
||
|
|
||
|
DWORD CreationDistribution;
|
||
|
DWORD FlagsAndAttributes;
|
||
|
HANDLE TemplateFile;
|
||
|
HANDLE Handle;
|
||
|
|
||
|
DesiredAccess = GENERIC_READ|GENERIC_WRITE;
|
||
|
ShareMode = 0;
|
||
|
CreationDistribution = OPEN_EXISTING;
|
||
|
FlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
|
||
|
TemplateFile = (HANDLE)INVALID_HANDLE_VALUE;
|
||
|
|
||
|
Handle = CreateFile(
|
||
|
pDeviceName,
|
||
|
DesiredAccess,
|
||
|
ShareMode,
|
||
|
lpSecurityAttributes,
|
||
|
CreationDistribution,
|
||
|
FlagsAndAttributes,
|
||
|
TemplateFile
|
||
|
);
|
||
|
|
||
|
return (Handle);
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
CloseDevice(
|
||
|
HANDLE DeviceHandle
|
||
|
)
|
||
|
{
|
||
|
CloseHandle(DeviceHandle);
|
||
|
}
|