mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
7.6 KiB
296 lines
7.6 KiB
/*** glist.h - Definitions for Generic List Manager
|
|
*
|
|
* Microsoft Confidential
|
|
* Copyright (C) Microsoft Corporation 1994
|
|
* All Rights Reserved.
|
|
*
|
|
* Author:
|
|
* Benjamin W. Slivka
|
|
*
|
|
* History:
|
|
* 05-Apr-1994 bens Initial version
|
|
* 06-Apr-1994 bens Renamed from function manager
|
|
* 11-Apr-1994 bens Add pszDesc
|
|
* 22-Apr-1994 bens Add GLFindNext, GLSetValue, GLGetValue
|
|
*
|
|
* Exported Functions:
|
|
*/
|
|
|
|
#ifndef INCLUDED_GLIST
|
|
#define INCLUDED_GLIST 1
|
|
|
|
#include "types.h"
|
|
#include "asrt.h"
|
|
#include "error.h"
|
|
|
|
|
|
/*** ERRGLIST_Xxxx - GLIST error codes
|
|
*
|
|
*/
|
|
#define ERRGLIST_BASE 0x0100
|
|
|
|
#define ERRGLIST_NOT_UNIQUE (ERRGLIST_BASE+1)
|
|
|
|
|
|
typedef void * HGENLIST; /* hglist - generic list */
|
|
typedef void * HGENERIC; /* hgen - generic item handle */
|
|
|
|
|
|
/*** PFNGLDESTROYVALUE - Function type to destroy HGENERIC values
|
|
/*** FNGLDESTROYVALUE - Macro to help define PFNGLDESTROYVALUE functions
|
|
*
|
|
* Entry:
|
|
* pv - Value to destroy
|
|
*
|
|
* Exit:
|
|
* Value is destroyed.
|
|
*/
|
|
typedef void (*PFNGLDESTROYVALUE)(void *pv); /* pfngldv */
|
|
#define FNGLDESTROYVALUE(fn) void fn(void *pv)
|
|
|
|
|
|
/*** PFNGLDUPLICATEVALUE - Function type to duplicate HGENERIC values
|
|
/*** FNGLDUPLICATEVALUE - Macro to help define PFNGLDUPLICATEVALUE functions
|
|
*
|
|
* Entry:
|
|
* pv - Value to duplicate
|
|
*
|
|
* Exit:
|
|
* Returns duplicated value.
|
|
*/
|
|
typedef void * (*PFNGLDUPLICATEVALUE)(void *pv); /* pfngldup */
|
|
#define FNGLDUPLICATEVALUE(fn) void * fn(void *pv)
|
|
|
|
|
|
/*** GLAdd - Add an item to a list
|
|
*
|
|
* Entry:
|
|
* hglist - List to augment
|
|
* pszKey - Item key value (may be NULL)
|
|
* pv - Item value
|
|
* pszDesc - Item description (for error messages)
|
|
* fUnique - TRUE => Key must not already exist; FALSE => dups allowed
|
|
* perr - ERROR structure
|
|
*
|
|
* Exit-Success:
|
|
* Returns hgen, item is added to list
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL, cannot add item to list
|
|
* ERROR structure filled in with details of error:
|
|
* perr->code == ERRGLIST_NOT_UNIQUE
|
|
* fUnique was TRUE, and pszKey already existed.
|
|
* perr->pv = HGENERIC of already existing item;
|
|
* Otherwise, some other error (out of memory, etc.)
|
|
*/
|
|
HGENERIC GLAdd(HGENLIST hglist,
|
|
char *pszKey,
|
|
void *pv,
|
|
char *pszDesc,
|
|
BOOL fUnique,
|
|
PERROR perr);
|
|
|
|
|
|
/*** GLDelete - Delete item from a list
|
|
*
|
|
* Entry:
|
|
* hgen - Item handle
|
|
*
|
|
* Exit-Success:
|
|
* Always works, since hgen is assumed to be valid.
|
|
*/
|
|
void GLDelete(HGENERIC hgen);
|
|
|
|
|
|
/*** GLCreateList - Create a list of
|
|
*
|
|
* Entry:
|
|
* pv - Item value for *default* item (NULL if not supplied)
|
|
* pfngldv - Function used to destroy values (NULL if not needed)
|
|
* pszDesc - Item description (for error messages)
|
|
* perr - ERROR structure
|
|
*
|
|
* Exit-Success:
|
|
* Returns hgenlist; list is created.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL, cannot create list; perror filled in with error.
|
|
*/
|
|
HGENLIST GLCreateList(void *pv,
|
|
PFNGLDESTROYVALUE pfngldv,
|
|
char *pszDesc,
|
|
PERROR perr);
|
|
|
|
|
|
/*** GLCopyToList - Copy items from one list to another
|
|
*
|
|
* Entry:
|
|
* phglistDst - Pointer to list to receive copy of items from hglistSrc
|
|
* (list is created if necessary).
|
|
* hglistSrc - Source list for copy (if NULL, *phglistDst is not
|
|
* modified, and this function returns immediately).
|
|
* pfngldup - Function used to dupliate item values (NULL if not needed)
|
|
* pszDesc - Item description (for error messages)
|
|
* perr - ERROR structure
|
|
*
|
|
* Exit-Success:
|
|
* Returns TRUE; hglistDst created if necessary, and items copied from
|
|
* hglistSrc to hglistDst;
|
|
*
|
|
* Exit-Failure:
|
|
* Returns FALSE; perror filled in with error.
|
|
*
|
|
* NOTES:
|
|
* If an item with the same key exists in both hglistSrc and hglistDst,
|
|
* then the item is *not* copied to hglistDst.
|
|
*/
|
|
BOOL GLCopyToList(HGENLIST *phglistDst,
|
|
HGENLIST hglistSrc,
|
|
PFNGLDUPLICATEVALUE pfngldup,
|
|
char *pszDesc,
|
|
PERROR perr);
|
|
|
|
|
|
/*** GLDestroyList - Destroy a list
|
|
*
|
|
* Entry:
|
|
* hglist - List to destroy
|
|
*
|
|
* Exit-Success:
|
|
* Always works, since hglist is assumed to be valid.
|
|
*/
|
|
void GLDestroyList(HGENLIST hglist);
|
|
|
|
|
|
/*** GLFind - Search for item in list
|
|
*
|
|
* Entry:
|
|
* hglist - Generic list
|
|
* pszKey - Key to look for (case-insensitive search)
|
|
* pszDesc - Item description (for error messages)
|
|
* perr - ERROR structure
|
|
*
|
|
* Exit-Success:
|
|
* Returns hgen, if item exists.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL, item does not exist; ERROR structure filled.
|
|
*/
|
|
HGENERIC GLFind(HGENLIST hglist,
|
|
char *pszKey,
|
|
char *pszDesc,
|
|
PERROR perr);
|
|
|
|
|
|
/*** GLFindNext - Search for next item in list
|
|
*
|
|
* Entry:
|
|
* hgen - Start search at *next* item after this item
|
|
* pszKey - Key to look for (case-insensitive search)
|
|
*
|
|
* Exit-Success:
|
|
* Returns hgen, if item exists.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL, item does not exist;
|
|
*/
|
|
HGENERIC GLFindNext(HGENERIC hgen,
|
|
char *pszKey);
|
|
|
|
|
|
/*** GLFirstItem - Get first item from a list
|
|
*
|
|
* Entry:
|
|
* hglist - List
|
|
*
|
|
* Exit-Success:
|
|
* Returns HGENERIC of first item in list.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL; hglist is bad or empty.
|
|
*/
|
|
HGENERIC GLFirstItem(HGENLIST hglist);
|
|
|
|
|
|
/*** GLNextItem - Get next item
|
|
*
|
|
* Entry:
|
|
* hgen - Item handle
|
|
*
|
|
* Exit-Success:
|
|
* Returns HGENERIC of next item following hgen in list.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL; no more items, or hgen is bad.
|
|
*/
|
|
HGENERIC GLNextItem(HGENERIC hgen);
|
|
|
|
|
|
/*** GLPreviousItem - Get previous item
|
|
*
|
|
* Entry:
|
|
* hgen - Item handle
|
|
*
|
|
* Exit-Success:
|
|
* Returns HGENERIC of item immediately preceding hgen.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL; no more items, or hgen is bad.
|
|
*/
|
|
HGENERIC GLPreviousItem(HGENERIC hgen);
|
|
|
|
|
|
/*** GLGetKey - Get the item key
|
|
*
|
|
* Entry:
|
|
* hgen - Item handle
|
|
*
|
|
* Exit:
|
|
* Returns pointer to item key (will be NULL if GLAdd() received NULL)
|
|
*/
|
|
char *GLGetKey(HGENERIC hgen);
|
|
|
|
|
|
/*** GLGetValue - Get the item value for a particular item
|
|
*
|
|
* Entry:
|
|
* hgen - Item handle
|
|
*
|
|
* Exit:
|
|
* Returns value of item;
|
|
*/
|
|
void *GLGetValue(HGENERIC hgen);
|
|
|
|
|
|
/*** GLSetValue - Set the item value for a particular item
|
|
*
|
|
* Entry:
|
|
* hgen - Item handle
|
|
* pv - Item value
|
|
*
|
|
* Exit:
|
|
* None.
|
|
*/
|
|
void GLSetValue(HGENERIC hgen, void *pv);
|
|
|
|
|
|
/*** GLFindAndGetValue - Get the item value for a particular item
|
|
*
|
|
* Entry:
|
|
* hglist - Generic list (may be NULL, in which case returns NULL)
|
|
* pszKey - Key to look for (case-insensitive search);
|
|
* Pass NULL to get default value;
|
|
*
|
|
* Exit-Success:
|
|
* Returns value of item if key exists.
|
|
* If the key was not found, but a default value was supplied on the
|
|
* GLGLCreateList() call, then that default value is returned.
|
|
*
|
|
* Exit-Failure:
|
|
* Returns NULL, item does not exist (key not found and no default
|
|
* value was supplied on the GLCreateList() call).
|
|
*/
|
|
void *GLFindAndGetValue(HGENLIST hglist,
|
|
char *pszKey);
|
|
|
|
#endif // INCLUDED_GLIST
|