MCUTIL.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:
Windows编程
开发平台:
Visual C++
- /*++
- Copyright (c) 1991-1997 Microsoft Corporation
- Module Name:
- mcutil.c
- Abstract:
- This file contains utility functions for the Win32 Message Compiler (MC)
- --*/
- #include "mc.h"
- /*++
- Routine Description:
- This routine simply writes/overwrites Name, ID and Value
- to a link list of NAME_INFO structures.
- Arguments:
- PNAME_INFO
- Keyword such as "Facility", "Serverity", ...
- Lauguage Identifier; a combination of a Primary Language ID,
- Sublanguage ID pair such as LANG_NEUTRAL, SUBLANG_NEUTRAL
- An option value specfic to the keyword.
- Return Value:
- The list PNAME_INFO
- --*/
- PNAME_INFO
- McAddName(
- PNAME_INFO *NameListHead,
- char *Name,
- ULONG Id,
- PVOID Value
- )
- {
- PNAME_INFO p;
- int n;
- while (p = *NameListHead) {
- if (!(n = stricmp( p->Name, Name ))) {
- if (p->Id != Id) {
- McInputError( "Redefining value of %s", FALSE, Name );
- }
- p->Id = Id;
- p->Value = Value;
- p->Used = FALSE;
- return( p );
- }
- else
- if (n < 0) {
- break;
- }
- NameListHead = &p->Next;
- }
- p = malloc( sizeof( *p ) + strlen( Name ) );
- p->LastId = 0;
- p->Id = Id;
- p->Value = Value;
- p->Used = FALSE;
- strcpy( p->Name, Name );
- p->Next = *NameListHead;
- *NameListHead = p;
- return( p );
- }
- /*++
- Routine Description:
- This routine returns the NAME_INFO structure cooresponding to the
- given Keyword.
- Arguments:
- PNAME_INFO
- Keyword such as "Facility", "Serverity", ...
- Return Value:
- Either the NAME_INFO structure cooresponding to the keyname or NULL
- --*/
- PNAME_INFO
- McFindName(
- PNAME_INFO NameListHead,
- char *Name
- )
- {
- PNAME_INFO p;
- p = NameListHead;
- while (p) {
- if (!stricmp( p->Name, Name )) {
- p->Used = TRUE;
- break;
- }
- p = p->Next;
- }
- return( p );
- }
- /*++
- Routine Description:
- This converts a string value to the corresponding integer value
- in the specified base.
- Arguments:
- String image of an integer
- Base of resultant integer
- Pointer to a unsigned long
- Return Value:
- A unsigned long
- --*/
- BOOLEAN
- McCharToInteger(
- PCHAR String,
- int Base,
- PULONG Value
- )
- {
- CHAR c;
- ULONG Result, Digit, Shift;
- c = *String;
- String = CharNext(String);
- if (!Base) {
- Base = 10;
- Shift = 0;
- if (c == '0') {
- c = *String++;
- if (c == 'x') {
- Base = 16;
- Shift = 4;
- }
- else
- if (c == 'o') {
- Base = 8;
- Shift = 3;
- }
- else
- if (c == 'b') {
- Base = 2;
- Shift = 1;
- }
- else {
- String--;
- }
- c = *String++;
- }
- }
- else {
- switch( Base ) {
- case 16: Shift = 4; break;
- case 8: Shift = 3; break;
- case 2: Shift = 1; break;
- case 10: Shift = 0; break;
- default: return( FALSE );
- }
- }
- Result = 0;
- while (c) {
- if (c >= '0' && c <= '9') {
- Digit = c - '0';
- }
- else
- if (c >= 'A' && c <= 'F') {
- Digit = c - 'A' + 10;
- }
- else
- if (c >= 'a' && c <= 'f') {
- Digit = c - 'a' + 10;
- }
- else {
- break;
- }
- if ((int)Digit >= Base) {
- break;
- }
- if (Shift == 0) {
- Result = (Base * Result) + Digit;
- }
- else {
- Result = (Result << Shift) | Digit;
- }
- c = *String;
- String = CharNext(String);
- }
- *Value = Result;
- return( TRUE );
- }
- /*++
- Routine Description:
- Duplicates a string
- Arguments:
- A string value
- Return Value:
- The duplicated string value
- --*/
- char *
- McMakeString(
- char *String
- )
- {
- char *s;
- s = malloc( strlen( String ) + 1 );
- strcpy( s, String );
- return( s );
- }