2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
23 /* include TSM Header Files. */
29 typedef char BSA_Boolean;
32 typedef short BSA_Int16;
35 typedef long BSA_Int32;
38 typedef struct { /* defined as two 32-bit integers */
44 typedef unsigned short BSA_UInt16;
47 typedef unsigned long BSA_UInt32;
50 typedef struct { /* defined as two unsigned 32-bit integers*/
55 /*-------------------------------------------------------------------------+
56 | ADSM specific constants and return codes |
57 +-------------------------------------------------------------------------*/
58 /* TSM library version, release, level
60 #define BSA_API_VERSION 5
61 #define BSA_API_RELEASE 2
62 #define BSA_API_LEVEL 0
65 #define ADSM_MAX_DESC 100 /* ADSM max Desc size */
66 #define ADSM_MAX_OBJINFO 100 /* ADSM max object info size */
67 #define ADSM_LOWEST_BOUND 0x0000 /* value for LowerBound min */
68 #define ADSM_HIGHEST_BOUND 0xFFFF /* value for UpperBound max */
69 #define ADSM_ENV_STRS 3 /* number of env strings */
70 #define ObjectDescriptorVersion 1 /* ver for ObjectDescriptor */
71 #define UserDescriptorVersion 1 /* ver for UserDescriptor */
72 #define BSAObjectType_DATABASE 4 /* ObjectType for Databases */
76 #define BSA_RC_OK 0x00
77 #define BSA_RC_SUCCESS 0x00
79 #define ADSM_RC_ERROR 0x60 /* see ADSM error log */
80 #define ADSM_RC_INVALID_NODE 0x61 /* BSAObjOwner not match Init*/
81 #define ADSM_RC_INVALID_COPYTYPE 0x62 /* invalid copyType */
82 #define ADSM_RC_INVALID_OBJTYPE 0x63 /* invalid objectType */
83 #define ADSM_RC_INVALID_STATUS 0x64 /* invalid object status */
84 #define ADSM_RC_INVALID_ST_VER 0x65 /* invalid structure version */
85 #define ADSM_RC_OWNER_TOO_LONG 0x66 /* owner too long */
86 #define ADSM_RC_PSWD_TOO_LONG 0x67 /* pswd too long */
87 #define ADSM_RC_PSWD_GEN 0x68 /* pswd access = generate */
91 * Maximum string lengths (lower bound), including trailing null
93 #define BSA_LIST_ELEMENT_DELIMITER null /* Element delimiter in list */
94 #define BSA_MAX_ADMIN_NAME 64 /* Administrator name */
95 #define BSA_MAX_APPOBJECT_OWNER 64 /* Max end-object owner length */
96 #define BSA_MAX_BSAOBJECT_OWNER 64 /* Max BSA object owner length */
97 #define BSA_MAX_CG_DEST 31 /* Copy group destination */
98 #define BSA_MAX_CG_NAME 31 /* Max copy group name length */
99 #define BSA_MAX_COPYGROUPS 16 /* Max number of copy groups */
100 /* which can be specified in a */
101 /* lifecycle group */
102 #define BSA_MAX_DESC 256 /* Description field */
103 #define BSA_MAX_ENCODINGMETHOD 31 /* Max encoding method length */
104 #define BSA_MAX_EVENTINFO 256 /* Max event info size */
105 #define BSA_MAX_FILTERRULESET 8192 /* Max filter rule set size */
106 #define BSA_MAX_OSNAME 1024 /* Max Objectspace name length */
107 #define BSA_MAX_LG_NAME 31 /* Life cycle group name */
108 #define BSA_MAX_LIFECYCLEGROUPS 64 /* Max number of life cycle */
109 /* groups in a policy set */
110 #define BSA_MAX_OBJINFO 512 /* Max object info size */
111 #define BSA_MAX_PATHNAME 1024 /* Max path name length */
112 #define BSA_MAX_POLICYDOMAINS 256 /* Max number of specific policy */
113 /* domains an administrator may */
114 /* be responsible for */
115 #define BSA_MAX_POLICYDOMAIN_NAME 31 /* Policy domain name */
116 #define BSA_MAX_POLICYSETS 16 /* Max number of policy sets */
118 #define BSA_MAX_POLICYSET_NAME 31 /* Policy set name */
119 #define BSA_MAX_RESOURCETYPE 31 /* Max resource mgr name length */
120 #define BSA_MAX_TOKEN_SIZE 64 /* Max size of a security token */
121 #define BSA_PUBLIC "BSA_ANY" /* Default string */
125 * Return Code descriptions are given in Section 4.3.
127 #define BSA_RC_ABORT_ACTIVE_NOT_FOUND 0x02
128 #define BSA_RC_ABORT_SYSTEM_ERROR 0x03
129 #define BSA_RC_AUTHENTICATION_FAILURE 0x04
130 #define BSA_RC_BAD_CALL_SEQUENCE 0x05
131 #define BSA_RC_BAD_HANDLE 0x06
132 #define BSA_RC_BUFFER_TOO_SMALL 0x07
133 #define BSA_RC_DESC_TOO_LONG 0x08
134 #define BSA_RC_OBJECTSPACE_TOO_LONG 0x09
135 #define BSA_RC_INVALID_TOKEN 0x0a
136 #define BSA_RC_INVALID_VOTE 0x0b
137 #define BSA_RC_INVALID_KEYWORD 0x0c
138 #define BSA_RC_MATCH_EXISTS 0x0d
139 #define BSA_RC_MORE_DATA 0x0e
140 #define BSA_RC_MORE_RULES 0x0f
141 #define BSA_RC_NEWTOKEN_REQD 0x10
142 #define BSA_RC_NO_MATCH 0x11
143 #define BSA_RC_NO_MORE_DATA 0x12
144 #define BSA_RC_NO_RESOURCES 0x13
145 #define BSA_RC_NULL_DATABLKPTR 0x14
146 #define BSA_RC_NULL_OBJNAME 0x15
147 #define BSA_RC_NULL_POINTER 0x16
148 #define BSA_RC_NULL_RULEID 0x17
149 #define BSA_RC_OBJECT_NAME_TOO_LONG 0x18
150 #define BSA_RC_OBJECT_NOT_EMPTY 0x19
151 #define BSA_RC_OBJECT_NOT_FOUND 0x1a
152 #define BSA_RC_OBJINFO_TOO_LONG 0x1b
153 #define BSA_RC_OBJNAME_TOO_LONG 0x1c
154 #define BSA_RC_OPERATION_NOT_AUTHORIZED 0x1d
155 #define BSA_RC_OLDTOKEN_REQD 0x1e
156 #define BSA_RC_TOKEN_EXPIRED 0x1f
157 #define BSA_RC_TXN_ABORTED 0x20
158 #define BSA_RC_UNMATCHED_QUOTE 0x21
159 #define BSA_RC_USER_OWNS_OBJECTS 0x22
163 typedef char AppObjectOwner[BSA_MAX_APPOBJECT_OWNER];
167 typedef char BSAObjectOwner[BSA_MAX_BSAOBJECT_OWNER];
171 typedef char CopyGpDest[BSA_MAX_CG_DEST];
175 typedef char CopyGpName[BSA_MAX_CG_NAME];
179 * Constant Value Explanation
180 * -------- ----- -----------
181 * INCREMENTAL 1 Specifies that the Backup Services should make a
182 * copy only if the application object has been
183 * modified since the last time this copy group was
184 * used to create the object's copy.
185 * ABSOLUTE 2 Specifies that the Backup Services should make a
186 * copy even if the application object has not been
187 * modified since the last time this copy group was
188 * used to create the object's copy.
191 BSACopyMode_INCREMENTAL = 1,
192 BSACopyMode_ABSOLUTE = 2
197 * Constant Value Explanation
198 * -------- ----- -----------
199 * STATIC 1 Specifies that the Backup Services must create a
200 * consistent (unmodified during the operation) copy of
201 * the object. If the application is unable to create a
202 * consistent copy then it should skip the operation
203 * (creating backup or archive copy) for the object.
204 * SHAREDSTATIC 2 Specifies that the Backup Services must create a
205 * consistent copy of the object. It can retry the
206 * operation a number of times (application dependent).
207 * If the Backup Services is unable to create a
208 * consistent copy even after retries, then it should
209 * skip creating a backup or archive copy of the
211 * SHAREDDYNAMIC 3 Specifies that the Backup Services must create a
212 * copy of the object. It can retry the operation a
213 * number of times in an attempt to create a consistent
214 * copy; however, if it fails to make a consistent
215 * copy, a copy must still be made, ignoring the fact
216 * that the copy may have been modified during the
217 * operation. Such copies are useful for log file
218 * objects which are being continuously modified.
219 * DYNAMIC 4 Specifies that the Backup Services must create a
220 * copy of the obbject even if the source object is
221 * modified during the operation. No retries should be
222 * attempted to create a consistent copy.
225 BSACopySerialization_STATIC = 1,
226 BSACopySerialization_SHAREDSTATIC = 2,
227 BSACopySerialization_SHAREDDYNAMIC = 3,
228 BSACopySerialization_DYNAMIC = 4
233 * Constant Value Explanation
234 * -------- ----- -----------
235 * ANY 1 Used for matching any copy type (e.g. "backup" or
236 * "archive" in the copy type field of structures for
237 * selecting query results).
238 * ARCHIVE 2 Specifies that the copy type should be "archive".
239 * When used in the copy type field of the CopyGroup,
240 * it identifies the copy data as of type
241 * ArchiveCopyData, which is used to create archive
243 * BACKUP 3 Specifies that the copy type should be "backup".
244 * When used in the copy type field of the CopyGroup,
245 * it identifies the copy data as of type
246 * BackupCopyData, which is used to create backup
251 BSACopyType_ARCHIVE = 2,
252 BSACopyType_BACKUP = 3
257 typedef char Description[BSA_MAX_DESC];
261 typedef char * DomainName[BSA_MAX_POLICYDOMAIN_NAME];
265 typedef char EventInfo[BSA_MAX_EVENTINFO];
269 typedef char LGName[BSA_MAX_LG_NAME];
273 typedef char ObjectInfo[BSA_MAX_OBJINFO];
278 char objectSpaceName[BSA_MAX_OSNAME]; /* Highest-level name qualifier */
279 char pathName[BSA_MAX_PATHNAME]; /* Object name within */
286 BSAObjectOwner bsaObjectOwner; /* BSA Owner name - this is the name */
287 /* that Backup Services authenticates */
288 AppObjectOwner appObjectOwner; /* End-owner name, this is the name */
289 /* defined by the application */
294 typedef BSA_UInt64 ObjectSize; /* Unsigned 64-bit integer */
298 * Constant Value Explanation
299 * -------- ----- -----------
300 * ANY 1 Provides a wild card function. Can only be used in
302 * ACTIVE 2 Indicates that this is the most recent backup copy
304 * INACTIVE 3 Indicates that this is not the most recent backup
305 * copy, or that the object itself no longer exists.
308 BSAObjectStatus_ANY = 1,
309 BSAObjectStatus_ACTIVE = 2,
310 BSAObjectStatus_INACTIVE = 3
315 * Constant Value Explanation
316 * -------- ----- -----------
317 * any 1 Used for matching any object type (e.g. "file" or
318 * "directory") value in the object type field of
319 * structures for selecting query results.
320 * file 2 Used by the application to indicate that the type of
321 * application object is a "file" or single object.
322 * directory 3 Used by the application to indicate that the type of
323 * application object is a "directory" or container of
328 BSAObjectType_ANY = 1,
329 BSAObjectType_FILE = 2,
330 BSAObjectType_DIRECTORY = 3
335 * Constant Value Explanation
336 * -------- ----- -----------
337 * archive 1 Used to indicate that a scheduled operation is of
339 * backup 2 Used to indicate that a scheduled operation is of
343 BSAOperation_ARCHIVE = 1,
344 BSAOperation_BACKUP = 2
349 * Use of the Period structure in a Schedule for an event:
350 * 1. The Schedule structure specifies 3 timing elements:
351 * a. "firstStartTime" - a timestamp showing the "earliest"
352 * possible time the event could take place
353 * b. "day" - the day of the week the event should occur
354 * c. "frequency" - the period between successive events
355 * 2. To determine the day the event should occur (this does
356 * not change the time of the event in the day):
357 * a. Determine the requested day from "firstStartTime".
358 * b. If "day" does not equal XBSA_DAYOFWEEK_ANY
359 * i. Compare "day" to the day of the week corresponding
360 * to "firstStartTime" determined in 2a above.
361 * ii.If the days match, then use "firstStartTime" else
362 * use the first "day" *following* the day shown
363 * in "firstStartTime" as the day of the event.
364 * 3. If the PeriodWhich field in the Period structure is other
365 * than XBSA_PERIOD_UNDEFINED, then successive events are
366 * determined using the value of "periodData".
367 * a. For seconds and days, the appropriate seconds or days
368 * are added to the "firstStartTime" and step 2 to correct
369 * for the day of the week (if needed) is applied again.
370 * b. If a monthly period is specified, then the appropriate
371 * number of months are added by incrementing the month index is
372 * made (for example, a one month increment from February to
373 * March). If the monthly date is not valid (for example, January
374 * 30 --> February 30) then the last day of the desired month is
375 * used (example January 30 --> February 28). Then step 2 is
376 * followed to adjust for the requested day (which might move the
377 * event time into the following month).
380 BSAPeriod_SECONDS = 1,
382 BSAPeriod_MONTHS = 3,
383 BSAPeriod_UNDEFINED = -9,
384 BSAPeriod_DAILY = 4, BSAPeriod_WEEKLY = 5, BSAPeriod_MONTHLY = 6,
385 BSAPeriod_QUARTERLY = 7, BSAPeriod_ANNUALLY = 8
399 typedef char ResourceType[BSA_MAX_RESOURCETYPE];
403 typedef BSA_UInt64 RuleId;
407 typedef BSA_UInt64 ScheduleId;
411 * Constant Value Explanation
412 * -------- ----- -----------
413 * GET 1 Access right for getting an object from Backup
414 * Services, also includes access right for querying
415 * (getting attributes) an object from Backup Services.
416 * QUERY 2 Access right for querying (getting attributes) an
417 * object from Backup Services.
420 BSAAccessRight_GET = 1,
421 BSAAcessRight_QUERY = 2
427 RuleId ruleId; /* Provided by Backup Services */
428 ObjectName objName; /* Object name to be given access */
429 ObjectOwner objectOwner; /* BSA object owner and Applicaton object */
430 /* owner to be given access */
431 AccessRight rights; /* The access rights to be given */
437 BSA_UInt16 version; /* Version of this API */
438 BSA_UInt16 release; /* Release of this API */
439 BSA_UInt16 level; /* Level of this API */
445 CopyGpName cGName; /* Copy group name */
446 BSA_UInt16 freq; /* Archive frequency */
447 CopySerialization copySer; /* Copy serialization code */
448 CopyMode copyMode; /* Copy mode */
449 CopyGpDest destName; /* Copy destination name */
450 BSA_UInt16 retVersion; /* Retention time for the version */
456 CopyGpName cGName; /* Copy group name */
457 BSA_UInt16 freq; /* Backup frequency */
458 CopySerialization copySer; /* Copy serialization code */
459 CopyMode copyMode; /* Copy mode: 1=modified, 2=absolute */
460 CopyGpDest destName; /* Copy destination name */
461 BSA_UInt16 verDataEx; /* Versions (number of versions */
463 BSA_UInt16 verDataDel; /* Versions (data deleted) */
464 Period retXtraVer; /* Retain extra versions */
465 Period retOnlyVer; /* Retain only versions */
471 CopyType copyType; /* Type of copy group: archive, backup, etc */
473 ArchiveCopyData archive;
474 BackupCopyData backup;
480 typedef BSA_UInt64 CopyId;
485 BSA_UInt16 bufferLen;
486 BSA_UInt16 numBytes; /* Actual number of bytes read from */
487 /* or written to the buffer, or the */
488 /* minimum number of bytes needed */
495 BSADayOfWeek_Monday = 1, BSADayOfWeek_Tuesday = 2,
496 BSADayOfWeek_Wednesday = 3, BSADayOfWeek_Thursday = 4,
497 BSADayOfWeek_Friday = 5, BSADayOfWeek_Saturday = 6,
498 BSADayOfWeek_Sunday = 7
504 char * envVariables; /* Identifies the Backup Services instance and other */
505 /* implementation-dependent variables such as */
506 /* communication ports, etc. Each variable is a */
507 /* (keyword, value) pair separated by a space. */
508 /* If a value contains spaces, it must be */
509 /* enclosed in single or double quotes. */
515 BSA_UInt32 eventId; /* This is an internal (to Backup Services) id*/
516 ObjectOwner objectOwner;/* Identifies the owner of the event */
517 struct tm time; /* Identifies the time the action is to start */
518 Operation action; /* Identifies the action (backup, archive) */
519 ObjectName objName; /* Identifies objects to be acted on */
520 ResourceType resourceType;/* Identifies the resource manager for the */
522 EventInfo eventInfo; /* User- and resource-manager-specific info */
527 typedef char EncodingMethod[BSA_MAX_ENCODINGMETHOD];
532 BSA_UInt32 version; /* Version number for this structure */
533 ObjectOwner Owner; /* Owner of the object */
534 ObjectName objName; /* Object name */
535 struct tm createTime; /* Supplied by Backup Services */
536 CopyType copyType; /* Copy type: archive or backup */
537 CopyId copyId; /* Supplied by Backup Services */
538 BSA_UInt64 restoreOrder; /* Supplied by Backup Services */
539 LGName lGName; /* Associated Lifecycle Group name */
540 CopyGpName cGName; /* Copy group within the lifecycle group */
541 ObjectSize size; /* Object size may be up to 63 bits */
542 ResourceType resourceType; /* e.g. UNIX file system */
543 ObjectType objectType; /* e.g. file, directory, etc. */
544 ObjectStatus status; /* Active/inactive, supplied by */
545 /* Backup Services */
546 EncodingMethod * encodingList; /* List of encoding Methods used, in */
547 /* application-defined order, */
548 /* terminated with a null entry */
549 Description desc; /* Descriptive label for the object */
550 ObjectInfo objectInfo; /* Application information */
556 ObjectOwner owner; /* Owner of the object */
557 ObjectName objName; /* Object name */
558 struct tm createTimeLB; /* Lower bound on create time */
559 struct tm createTimeUB; /* Upper bound on create time */
560 struct tm expireTimeLB; /* Lower bound on expiration time */
561 struct tm expireTimeUB; /* Upper bound on expiration time */
562 CopyType copyType; /* Copy type: archive or backup */
563 LGName lGName; /* Associated Lifecycle Group name */
564 CopyGpName cGName; /* Copy group within the lifecycle group */
565 ResourceType resourceType; /* e.g. UNIX file system */
566 ObjectType objectType; /* e.g. file, directory, etc. */
567 ObjectStatus status; /* Active/inactive, supplied by Backup */
569 Description desc; /* Descriptive label for the object */
570 } QueryDescriptor; /* "*" is interpreted as a meta character */
572 /* Any undefined value is interpreted as */
578 ScheduleId schedId; /* Provided by Backup Services */
579 ObjectOwner objectOwner; /* Specifies the owner of the schedule */
580 Operation operation; /* Specifies the action to be taken */
581 struct tm firstStartTime; /* Specifies the first time the action */
582 /* is to take place */
583 DayOfWeek day; /* Specifies the day of week for the event*/
584 Period frequency; /* Specifies the frequency, e.g. daily */
585 ObjectName objectName; /* Identifies objects to be acted on */
586 ResourceType resourceType; /* Identifies the resource manager for the*/
588 EventInfo scheduleInfo; /* Resource manager specific information */
593 typedef char SecurityToken[BSA_MAX_TOKEN_SIZE];
597 typedef int StreamHandle;
601 typedef struct t_UserDescriptor {
602 BSA_UInt16 version; /* Version num of this structure */
603 BSAObjectOwner bsaObjectOwner; /* BSA Object owner name */
604 DomainName domainName; /* Policy domain for the user */
605 Description desc; /* User information */
615 /* Function Prototypes for Data Movement API Subset
616 * Note that int and long have been replaced with typedefs
628 SecurityToken *oldTokenPtr,
629 SecurityToken *newTokenPtr
635 ObjectDescriptor *objectDescriptorPtr,
636 DataBlock *dataBlockPtr
642 ObjectDescriptor *objectDescriptorPtr,
643 StreamHandle *streamPtr
650 ObjectName *objectName,
668 DataBlock *dataBlockPtr
674 ObjectOwner *objectOwnerPtr,
675 char **environmentPtr
679 BSAGetNextQueryObject
681 ObjectDescriptor *objectDescriptorPtr
687 ObjectDescriptor *objectDescriptorPtr,
688 DataBlock *dataBlockPtr
694 ObjectDescriptor *objectDescriptorPtr,
695 StreamHandle *streamPtr
701 SecurityToken *tokenPtr,
702 ObjectOwner *objectOwnerPtr,
703 char **environmentPtr
707 BSAMarkObjectInactive
709 ObjectName *objectNamePtr
714 ( ApiVersion *apiVersionPtr
720 QueryDescriptor *queryDescriptorPtr,
721 ObjectDescriptor *objectDescriptorPtr
727 DataBlock *dataBlockPtr
733 char **environmentPtr
742 BSAResolveLifecycleGroup(
744 ObjectDescriptor *BSAobjDescP
753 ApiSessInfo dsmSessInfo;
754 BSAObjectOwner bsaObjectOwner; /* node value on BSAInit */
755 dsUint16_t sessFlags; /* misc flags */
756 dsUint8_t oper; /* send or recv operation */
757 CopyType copyType; /* Backup or Archive type */
758 char *nextQryP; /* ptr to respArchive or respBackup */
761 /* flag masks for sessFlags */
762 /* to set on use sessFlags = (sessFlags | FL_IN_BSA_TXN) */
763 /* to set off use sessFlags = (sessFlags ^ FL_IN_BSA_TXN) */
764 /* to test on use if (sessFlags & FL_IN_BSA_TXN) */
765 #define FL_IN_BSA_TXN 0x0001 /* within a BSA type txn */
766 #define FL_IN_DSM_TXN 0x0002 /* within a actual ADSM txn */
767 #define FL_IN_BSA_QRY 0x0004 /* within a query txn */
768 #define FL_PSWD_EXPIRE 0x0008 /* pswd has expired */
769 #define FL_RC_WILL_ABORT 0x0010 /* recvd 157 on SendObj or SendData */
770 #define FL_END_DATA_DONE 0x0020 /* Get error already did EndData */
772 #define OPER_NONE 0 /* values for oper field */
773 #define OPER_SEND_START 1
774 #define OPER_SEND_ISSUED 2
775 #define OPER_RECV_START 3
776 #define OPER_RECV_ISSUED 4
778 /* structure def for objInfo - max len = 255 */
781 ResourceType resourceType; /* 31 bytes */
782 ObjectSize size; /* 8 bytes */
783 char partDesc[ADSM_MAX_DESC]; /* 100 bytes */
784 char partObjInfo[ADSM_MAX_OBJINFO]; /* 100 bytes */
787 /* ******* G l o b a l s ******** */
789 /* xGlobal xopenGbl; */
791 extern BSA_Int16 xlateRC(
796 extern BSA_Int16 xparsePath(
802 extern xGlobal xopenGbl;
803 extern char traceStr[];
804 extern char traceStr1[];
805 extern char traceStr2[];
807 #define dsMalloc(a) malloc(a)
808 #define dsFree(a) free(a)
810 extern void StrUpper(char *s);
811 /* Min() and Max() macros */
813 #define min(a,b) (((a) < (b)) ? (a) : (b))
817 #define max(a,b) (((a) > (b)) ? (a) : (b))
820 /* Combined file name w/ line number */
821 #define TrFL __FILE__, __LINE__
823 /*=== MACRO for exit tracing ===*/
824 #define XOPENRETURN(BSAHandle,functionName,bsaRC,fileName,lineNumber) {sprintf(traceStr2,"%s EXIT: rc = >%d<.",functionName, bsaRC); ourTrace(BSAHandle,fileName,lineNumber,traceStr2); return(bsaRC);}
826 /* Define license error log file name */
827 #define TSMLicLog "tsmlic.log"
829 #define custMin_retcode 96
830 #define custMax_retcode 104
832 /*=======================================================
833 Function to places a trace message in the API tracefile,
834 the message includes the xopen file name and line number.
835 ======================================================*/
836 void ourTrace(long BSAHandle,
841 /*================================================
842 Function to log events with call to dsmLogEventEx
843 ===============================================*/
844 void ourLogEvent_Ex(dsUint32_t handle, dsmLogType type, char* msg,
845 char *appMsg, dsmLogSeverity severity);
847 /*=================================================================
848 Function to retrieve a message by routing to dsmRCMsg or stdXOpenMsgMap.
849 ===============================================================*/
850 char* ourRCMsg(dsInt16_t dsmRC, char *msg);
852 /*====================================================
853 Function to build fully qualified license file name.
854 void build_lfname(char *lfname
855 ========================================================*/
856 extern void build_lfname(char *lfname);
858 /*=== Function to deliver standard XOpen API message above API range. */
859 void stdXOpenMsgMap(dsInt16_t, char*);