This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/Borland/BCC55/Include/objectty.h

378 lines
12 KiB
C
Raw Normal View History

// *************************************************************************
//
// File: OBJECTTY.H
//
// Copyright (c) 1994, 1995 Microsoft Corp.
//
// This is the header file for the obejctity engine. The objectity
// engine is the core of the SMS API set.
//
// This file contains externally visible structures, and certain manifests
// needed by them.
//
//
// *************************************************************************
//
#ifndef _OBJECTITY_H_
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define _OBJECTITY_H_
// ====================================================================
//
// Manifests.
//
// ====================================================================
typedef DWORD SMS_STATUS; // API return codes are all of this type.
#define F_ANY 0 // Indicates any folder type.
// ====================================================================
// Scalar values can be strings, integers (DWORDs), time, or binary.
//NOTE: binary not yet implemented.
// ====================================================================
typedef enum {
SCALAR_STRING,
SCALAR_INT,
SCALAR_TIME,
SCALAR_BINARY
} SCALARTYPE;
// ====================================================================
// SCALAR
// This structure is used by the application and the engine to
// communicate a scalar's details.
//
// All scalars have a type (SCALARTYPE), a name (a character string),
// and a value, which is determined by the scalar's type.
// There are separate fields here for the value in all its guises.
// Additionally, if the scalar is a string or a binary, a length
// field indicates the datum's size.
//
// This length field can also be set by the application when
// retrieving a scalar. In this case it indicates the size of the
// receiving buffer (string and binary).
//
// ====================================================================
typedef struct _SCALAR {
SCALARTYPE scType; // string, int, time etc
char *pszName; // Scalar name.
char *pszValue; // Scalar value as a string.
DWORD dwValue; // Scalar value as a DWORD.
time_t tValue; // Scalar value as a time.
void *pValue; // Scalar as a binary.
DWORD dwLen; // Size of the scalar value either as a string
// or as a binary.
// If a get scalar API is called with NULL
// for the appropriate value, then the
// length of that value is returned here.
BOOL bStringEquivalence; // True if a string exists for an INT or
// TIME scalar. String will be in pszValue.
DWORD fAccess; // Access mode.
} SCALAR;
// --------------------------------------------------------------------
// Manifests used in filter token APIs.
// --------------------------------------------------------------------
#define OTT_AT_START -1 // Token will be inserted at start of
// expression.
#define OTT_AT_END -2 // Token will be appended to end of
// expression.
// ====================================================================
//
// Return codes from the objectity engine.
//
// ====================================================================
#define OTT_OK 0
#define OTT_MORE_DATA 1
#define OTT_NO_MORE_DATA 2
#define OTT_FOLDER_NO_UPDATE 3
#define OTT_DUPLICATE_CONTAINER_ID 4
#define OTT_DUPLICATE_FOLDER_ID 5
#define OTT_DUPLICATE_FILTER_ID 6
#define OTT_SCALAR_NO_UPDATE 7
#define OTT_SCALAR_WRONG_TYPE 8
#define OTT_INVALID_CONTAINER_ID 9
#define OTT_INVALID_FOLDER_ID 10
#define OTT_INVALID_FILTER_ID 11
#define OTT_CONTAINER_NO_UPDATE 12
#define OTT_PARAMETER_ERROR 13
#define OTT_UNSUPPORTED 14
#define OTT_NOT_FOUND 15
#define OTT_PARENT_NOT_FOUND 16
#define OTT_CANT_DELETE 17
#define OTT_NEW_FOLDER 18
// Error when attempting to multiply link a folder.
#define OTT_FOLDER_LINKED 19
//
// Filter operations.
#define OTT_RANGE_ERROR 20
#define OTT_DUPLICATE_FILTER 21
// Container operations that are out of sequence.
#define OTT_CONTAINER_NOT_POPULATED 22
#define OTT_CONTAINER_POPULATED 23
// Only persistent filters have scalars.
#define OTT_FILTER_NOT_PERSISTENT 24
// Error return if the connection handle of a filter doesn't match
// that of a container to which the filter is being applied.
#define OTT_INVALID_CONNECTION_HANDLE 25
#define OTT_INVALID_FILTER_TYPE 26
// Folder's can't be unlinked if there are multiple handles
// to the same object.
#define OTT_IN_USE_BY_OTHER 27
// The last one, user codes start from here to give
// leaway for future expansion.
//
#define OTT_END 50
// ====================================================================
//
// Other manifests.
//
// ====================================================================
// Access rights to containers/folders/scalars.
// -------------------------------------------------------------
#define ACCESS_READ 0x0001
#define ACCESS_CREATE 0x0002
#define ACCESS_MODIFY 0x0004
#define ACCESS_DELETE 0x0008
// Modification flags
// ------------------
#define MOD_UNMODIFIED 0x0000
#define MOD_CREATED 0x0001
#define MOD_DELETED 0x0002
#define MOD_DENY_ACCESS 0x0004
// Tokens are ANDed or ORed into filters.
// -------------------------------------------------------------
typedef enum { OP_AND = 0x03, OP_OR = 0x02 } ANDOR;
// Options for Rewind on a folder.
// -------------------------------------------------------------
#define RW_FOLDER 0x080000000 // Rewind folder lists.
#define RW_SCALAR 0x040000000 // Rewind scalar list only.
#define RW_ALL (RW_FOLDER | RW_SCALAR) // Rewind both.
// These structures are used to retrieve container and filter
// information from the engine.
// These are used in enumertaing containers and filters.
// -------------------------------------------------------------
#define BUFF_SIZE 256
// An objectity is either a container or a folder.
// -------------------------------------------------------------
typedef enum {
T_CONTAINER,
T_FOLDER
} BASETYPE;
// ====================================================================
//
// The structures.
//
// ====================================================================
//
// NOTIFY structure.
//
// This struct used for async population. Enables async operation to
// use either event handle or window handle/message.
typedef struct _NOTIFY {
DWORD dwFreq; // Notify after this number of rows retrieved.
HANDLE hEvent; // Event handle if type=POP_EVENT
HWND hwnd; // hwnd if type=POP_WINDOW
UINT uiMsg; // Message if type=POP_WINDOW
} NOTIFY;
//
// TOKEN structure.
//
#define TOKEN_STRING_SIZE 4608 // 4.5k
// The manifest is this large because it can used in the package inventory
// rules. In these rules we are allowed to define upto four string fields,
// each of which can be 1k long. This size allows us to accommodate it all.
typedef struct _TOKEN {
INT tokenType; // Returns: type of token (ie USER, AND,
// OR, LEFT_PAREN, RIGHT_PAREN).
char szName[BUFF_SIZE];
char szValue[BUFF_SIZE];
DWORD dwOp;
char szArchitecture[BUFF_SIZE];
char szGroupClass[BUFF_SIZE];
char szAttributeName[BUFF_SIZE];
char szTokenString[TOKEN_STRING_SIZE]; // Display form of the token.
BOOL bIndent; // Request display indentation.
} TOKEN;
//
// FILTER_INFO
//
// This structure is used to provide the user a filter template.
// An array of these structures is returned via the SmsEnumFilters API.
// This returns information about all filters registered with the engine.
//
// It is considered that the user will use this information in order to
// display information. The information that is provided here is:
// a) the type and tag of the filter, b) the fields that comprise a
// particular filter's tokens, and c) the names that should be used
// for these fields for display purposes. That is, for a GUI application,
// they provide the labels for edit controls. If a field in the structure
// is empty (ie NULL) then that field is not used for that particular
// filter.
//
// As an example consider a group filter. If the developer wants to
// present, say, a dialogue box to the end user, they would use the
// following fields: szName, szValue. Looking at the template they
// will see that the strings associated with these fields are 'Name'
// and 'GroupClass'. They would thus display a dialogue box with
// two edit controls, the first labelled 'Name', the second labelled
// 'GroupClass. Since these are the only two fields that are filled in
// no other fields should be presented to the user.
//
//
// Job filter:
// szName = 'Type'
// szValue = 'Value'
// szOperator = 'Operator'
//
// Machine filter:
// szArchitecture = 'Architecture'
// szGroupClass = 'GroupClass'
// szAttributeName = 'Attribute name'
// szValue = 'Value'
// szOperator = 'Operator'
//
// Site filter:
// szName = 'Type'
// szValue = 'Site code'
// szOperator = 'Operator'
//
// Group filter:
// szName = 'Name'
// szValue = 'GroupClass'
// szOperator = 'Operator'
//
// Architecture filter:
// szName = 'Name'
// szValue = 'Architecture'
// szOperator = 'Operator'
//
// Package filter:
// szName = 'Type'
// szValue = 'Value'
// szOperator = 'Operator'
//
// Attribute filter:
// szArchitecture = 'Architecture'
// szGroupClass = 'GroupClass'
// szAttributeName = 'Attribute name'
//
// SiteLimit filter:
// szName = 'Site'
// szValue = 'Domain'
//
//
#define NAME_SIZE 52
typedef struct _FILTER_INFO {
char szTag[NAME_SIZE]; // Filter tag (eg "Architecture filter").
DWORD filterType; // Type number (eg ARCHITECTURE_FILTER).
// The filter descriptor information.
char szName[NAME_SIZE];
char szValue[NAME_SIZE];
char szOperator[NAME_SIZE];
char szArchitecture[NAME_SIZE];
char szGroupClass[NAME_SIZE];
char szAttributeName[NAME_SIZE];
} FILTER_INFO;
// This is what the user gets as a description of a scalar.
// Currently this is only used internally in objectty.cpp (RegisterObjectity).
// I'll proably make this externally visible though very soon now.
typedef struct _SCALAR_INFO {
char szName[BUFF_SIZE]; // Scalar's name.
SCALARTYPE scType; // Type: SCALAR_STRING, INT, TIME etc
DWORD fAccess; // Access mode: ACCESS_READ, MODIFY etc
} SCALAR_INFO;
// Now the C struct form of CFolderInfo. This is what we'll
// return in a call to DescribeFolder().
// This is created during a call to RegisterObjectity. It is stored
// in the CFolderInfo object, itself held in the Folder registry.
// 29-Sep-94. Expanded to deal with Containers as well as folders.
typedef struct _FOLDER_INFO {
BASETYPE tObjectity; // T_CONTAINER or T_FOLDER.
char *pszTag;
DWORD dwTag;
DWORD ctFolders;
DWORD *pFolderTags;
DWORD ctFilters;
DWORD *pFilterTags;
DWORD ctScalars; // Not used by for containers.
SCALAR_INFO *pScalars; // ditto.
void *pNewFunc; // needs cast!! Used when registering
// a container. This is a pointer to
// the container's 'new' function.
} FOLDER_INFO;
#pragma option pop /*P_O_Pop*/
#endif // _OBJECTITY_H_
/* EOF: objectty.h */