home *** CD-ROM | disk | FTP | other *** search
/ Network Support Encyclopedia 96-1 / novell-nsepro-1996-1-cd2.iso / download / netware / usms1.exe / SMSUTAPI.H < prev    next >
Text File  |  1995-09-12  |  29KB  |  810 lines

  1. /* ╔═══════════════════════════════════════════════════════════════════════════
  2.    ║ Program Name:     Storage Management Services (SMS Lib)
  3.    ║
  4.    ║ modname: smsutapi.h    version: 1.7    date: 02/24/95
  5.    ║ PVCS:        $version$    $date$
  6.    ║
  7.    ║ Date Created:     June 27, 1990
  8.    ║
  9.    ║ Version:          3.2
  10.    ║
  11.    ║ Files used:       string.h, stdlib.h, nwlocale.h, smstypes.h, 
  12.    ║                   and smsuterr.h
  13.    ║
  14.    ║ Date Modified:
  15.    ║
  16.    ║ Modifications:
  17.    ║
  18.    ║ Comments:         The followings defines are used to control the 
  19.    ║                       definitions and structures used in the separate 
  20.    ║                       modules.
  21.    ║                   SME:     This define selects the definitions and 
  22.    ║                            structures needed for an NLM Engine and
  23.    ║                            should be defined by all NLM Engines source 
  24.    ║                            files before SMSLIB.H is included.
  25.    ║                   SME_DOS: This define selects the definitions and 
  26.    ║                            structures needed for a DOS Engine and should 
  27.    ║                            be defined by all DOS Engines source files 
  28.    ║                            before SMSLIB.H is included.
  29.    ║                   TSA:     This define selects the definitions and 
  30.    ║                            structures needed for a TSA and should be 
  31.    ║                            defined by all TSA source files before 
  32.    ║                            SMSLIB.H is included.
  33.    ║
  34.    ║               ┌───────────────────────────────────────────────────────┐
  35.    ║               │ DEBUG_CODE, IN_HOUSE:  These defines are for Novell   │
  36.    ║               │    internal use only, they are used for debugging and │
  37.    ║               │    should never be set.                               │
  38.    ║               └───────────────────────────────────────────────────────┘
  39.    ║
  40.    ║ (C) Unpublished Copyright of Novell, Inc.  All Rights Reserved.
  41.    ║
  42.    ║ No part of this file may be duplicated, revised, translated, localized or
  43.    ║ modified in any manner or compiled, linked or uploaded or downloaded to or
  44.    ║ from any computer system without the prior written consent of Novell, Inc.
  45.    ╚═════════════════════════════════════════════════════════════════════════*/
  46.  
  47. #if !defined(_SMSUTAPI_H_INCLUDED)
  48.    #define _SMSUTAPI_H_INCLUDED
  49.  
  50.    #if !defined (_CLIB_HDRS_INCLUDED)
  51.        #define _CLIB_HDRS_INCLUDED
  52.        #if defined(__INLINE_FUNCTIONS__)
  53.            #undef __INLINE_FUNCTIONS__
  54.        #endif
  55.        #include <string.h>
  56.        #include <stdlib.h>
  57.    #if (defined(NLM) || defined(__WATCOMC__))
  58.        #include <nwlocale.h>
  59.    #endif
  60.    #endif
  61.  
  62.    #if defined(DEBUG_CODE)
  63.        void  EnterDebugger(void);
  64.    #else
  65.        #define ROUTINE
  66.    #endif
  67.  
  68.    #include <smstypes.h>
  69.    #include <smsdefns.h>
  70.    #include <smsuterr.h>
  71.  
  72. // ════════════════════════════════════════════════════════════════════════════
  73. /* CRC Flags */
  74.    #define CRC_NO  0
  75.    #define CRC_YES   1
  76.    #define CRC_LATER 2
  77.  
  78. // ════════════════════════════════════════════════════════════════════════════
  79. /* Wild card patterns */
  80.    #define ASTERISK  '\x2A'
  81.    #define QUESTION  '\x3F'
  82.    #define SPERIOD   '\xAE' /*period with parity bit set*/
  83.    #define SASTERISK '\xAA' /*asterisk with parity bit set*/
  84.    #define SQUESTION '\xBF' /*question mark with parity set*/
  85.  
  86.    #define NWSM_MATCH_SUCCESSFUL         0
  87.    #define NWSM_MATCH_TO_END             1
  88.    #define NWSM_MATCH_TO_STRING_END      1
  89.    #define NWSM_MATCH_TO_PATTERN_END     2
  90.    #define NWSM_MATCH_UNSUCCESSFUL      -1
  91.  
  92.  
  93.  
  94.  
  95.    #define TARGET_SERVICE_AGENT            0x2E
  96.    #define GET_ADDRESS                     (void *)1
  97.    #define GET_ADDRESS_NEED_FILE_OFFSET    (void *)2
  98.  
  99.    #define SetUINT64Value(a, b)    (*(UINT32 *)(a) = (((b) is 1) ? (1) :\
  100.                                    (((b) is 2) ? (0x100) : (((b) is 4) ?\
  101.                                    (0x10000L) : (0)))), *((UINT32 *)(a) + 1) =\
  102.                                    ((*(UINT32 *)(a)) ? (0) : (1)))
  103.    #define SMSLIB_H
  104.  
  105.    #define NWSM_BEGIN                      0x10000000L
  106.    #define NWSM_END                        0x20000000L
  107.    #define NWSM_SKIP_FIELD                 0x30000000L
  108.  
  109. // ════════════════════════════════════════════════════════════════════════════
  110. /* nameSpaceType definitions, others are defined in OS, i.e. DOS, MAC etc */
  111.    #define NWSM_ALL_NAME_SPACES            0xFFFFFFFFL
  112.    #define NWSM_TSA_DEFINED_RESOURCE_TYPE  0xFFFFFFFEL
  113.    #define NWSM_CREATOR_NAME_SPACE         0xFFFFFFFDL
  114.    #define NWSM_DIRECTORY_NAME_SPACE       0xFFFFFFFCL
  115.    #define NWSM_NDS_UNICODE_NAME_SPACE     0xFFFFFFFBL
  116.  
  117. /* NetWare Name Space Defines */
  118. #if defined(NLM) || defined(__WATCOMC__)
  119.    #define DOSNameSpace    0
  120.    #define MACNameSpace    1
  121.    #define NFSNameSpace    2
  122.    #define FTAMNameSpace   3
  123.    #define OS2NameSpace    4
  124.    #if defined(NCP)
  125.        #define MaxNameSpaces   1
  126.    #else
  127.        #define MaxNameSpaces   4
  128.    #endif
  129. #else
  130.    #define DOSNameSpace    0L
  131.    #define MACNameSpace    1L
  132.    #define NFSNameSpace    2L
  133.    #define FTAMNameSpace   3L
  134.    #define OS2NameSpace    4L
  135.    #if defined(NCP)
  136.        #define MaxNameSpaces   1L
  137.    #else
  138.        #define MaxNameSpaces   4L
  139.    #endif
  140. #endif
  141.  
  142.    #define PRIMARY_DATA_STREAM 0
  143.    #define MAC_RESOURCE_FORK   1
  144.    #define FTAM_DATA_STREAM    2
  145.    #define MAX_DATA_STREAMS    3
  146.  
  147.    #define NameSpaceName(n)   _GetMessage(((n) <= MaxNameSpaces) ?\
  148.                ((n) + DOS_NAME_SPACE_NAME) : INVALID_NAME_SPACE_NAME)
  149.    #define DataStreamName(n)  _GetMessage(((n) <= MAX_DATA_STREAMS) ?\
  150.                ((n) + PRIMARY_DATA_STREAM_NAME) : INVALID_DATA_STREAM_NAME)
  151.  
  152. /*  Miscellaneous defines */
  153.    #define STANDARD_INCREMENT 1024
  154.  
  155. #define MIN_BLANK_SPACE_SECTION_SIZE 14
  156.  
  157. /* Defines for dataSetInfoRetrieved in NWSM_RECORD_HEADER_INFO */
  158.    #define DATA_SET_INFO_NOT_STARTED       0
  159.    #define DATA_SET_INFO_SPANNED           1
  160.    #define DATA_SET_INFO_COMPLETE          2
  161.    #define DATA_SET_INFO_DOES_NOT_EXIST    3
  162.  
  163. /*  List structures */
  164.    typedef struct NWSM_LIST_STRUCT
  165.    {
  166. /* 0x00 */ UINT8  marked;
  167. /* 0x01 */ struct NWSM_LIST_STRUCT *prev;
  168. /* 0x05 */ struct NWSM_LIST_STRUCT *next;
  169. /* 0x09 */ void  *otherInfo;
  170. /* 0x0D */ BUFFER text[1];
  171.    } NWSM_LIST;
  172.  
  173.    typedef struct
  174.    {
  175. /* 0x00 */ NWSM_LIST *head;
  176. /* 0x04 */ NWSM_LIST *tail;
  177. /* 0x08 */ int (*sortProc)();
  178. /* 0x0C */ void (*freeProcedure)(void *memoryPointer);
  179.    } NWSM_LIST_PTR;
  180.  
  181.    typedef struct
  182.    {
  183.        UINT32  nameSpaceType;
  184.        UINT32  selectionType;
  185.        UINT16  count;
  186.        UINT16  HUGE *namePositions;
  187.        UINT16  HUGE *separatorPositions;
  188.        UINT16  nameLength;
  189.        STRING  name;
  190.    } NWSM_DATA_SET_NAME;
  191.  
  192. // ════════════════════════════════════════════════════════════════════════════
  193. // Parser defines, etc.
  194. /* Bit Field defines */
  195.    #define SMDF_BIT_NONE   0xC0
  196.    #define SMDF_BIT_ONE    0xC1
  197.    #define SMDF_BIT_TWO    0xC2
  198.    #define SMDF_BIT_THREE  0xC4
  199.    #define SMDF_BIT_FOUR   0xC8
  200.    #define SMDF_BIT_FIVE   0xD0
  201.    #define SMDF_BIT_SIX    0xE0
  202.  
  203. /* Misc. defines */
  204.    #define SMDF_MIN_PARSER_BUFFER  13  // The minimum parsr buffer size is 13,
  205.                                        // this provides space for the maximum
  206.                                        // size header, (13 bytes, 4 for the
  207.                                        // Fid and 9 for the Size) is present.
  208.  
  209. /* SMDF Compare Macros, these macros compare a UINT64 (a) with a UINT32 (b)
  210.    and return TRUE if (a op b) where op is EQ (Equal), GE (Greater Than
  211.    or Equal), GT (Greater Than), LE (Less Than or Equal), or LT (Less Than) */
  212.  
  213.    #define SMDF_EQ(a, b)   (!*((UINT32 *)a + 1) and *(UINT32 *)a is b)
  214.    #define SMDF_GE(a, b)   (*((UINT32 *)a + 1) or *(UINT32 *)a >= b)
  215.    #define SMDF_GT(a, b)   (*((UINT32 *)a + 1) or *(UINT32 *)a > b)
  216.    #define SMDF_LE(a, b)   (!*((UINT32 *)a + 1) and *(UINT32 *)a <= b)
  217.    #define SMDF_LT(a, b)   (!*((UINT32 *)a + 1) and *(UINT32 *)a < b)
  218.  
  219. /* SMDF Misc. Macros */
  220.    #define SMDFFixedFid(fid)       ((longFid) ? (((fid) AND 0xF000) is 0xF000)\
  221.                                        : ((fid) AND 0x40))
  222.  
  223.    #define SMDFFixedSize(fid)      (1L << ((longFid) ? (*((UINT8 *)&(fid) + 1)\
  224.                                        AND 0x07) : ((fid) AND 0x07)))
  225.  
  226.    #define SMDFPutUINT64(a, v)     (*((UINT32 *)(a) + 1) = 0, *(UINT32 *)(a) =\
  227.                                        (v))
  228.  
  229.    #define SMDFBit1IsSet(v)        (((v) & SMDF_BIT_ONE) is SMDF_BIT_ONE)
  230.    #define SMDFBit2IsSet(v)        (((v) & SMDF_BIT_TWO) is SMDF_BIT_TWO)
  231.    #define SMDFBit3IsSet(v)        (((v) & SMDF_BIT_THREE) is SMDF_BIT_THREE)
  232.    #define SMDFBit4IsSet(v)        (((v) & SMDF_BIT_FOUR) is SMDF_BIT_FOUR)
  233.    #define SMDFBit5IsSet(v)        (((v) & SMDF_BIT_FIVE) is SMDF_BIT_FIVE)
  234.    #define SMDFBit6IsSet(v)        (((v) & SMDF_BIT_SIX) is SMDF_BIT_SIX)
  235.  
  236.    #define SMDFSetBit1(v)          ((v) |= SMDF_BIT_ONE)
  237.    #define SMDFSetBit2(v)          ((v) |= SMDF_BIT_TWO)
  238.    #define SMDFSetBit3(v)          ((v) |= SMDF_BIT_THREE)
  239.    #define SMDFSetBit4(v)          ((v) |= SMDF_BIT_FOUR)
  240.    #define SMDFSetBit5(v)          ((v) |= SMDF_BIT_FIVE)
  241.    #define SMDFSetBit6(v)          ((v) |= SMDF_BIT_SIX)
  242.  
  243.    #define SMDFSizeOfFID(d)        ((*((UINT8 *)&d + 3)) ? 4 :\
  244.                                    ((*((UINT8 *)&d + 2)) ? 3 :\
  245.                                    ((*((UINT8 *)&d + 1)) ? 2 : 1)))
  246.  
  247.    #define SMDFSizeOfUINT32Data(d) ((*((UINT16 *)&(d) + 1)) ? 4 :\
  248.                                    (((*((UINT8 *)&(d) + 1))) ? 2 : 1))
  249.  
  250.    #define SMDFSizeOfUINT32Data0(d)    ((*((UINT8 *)&(d) + 3)) ? 4 :\
  251.                                    ((*((UINT8 *)&(d) + 2)) ? 3 :\
  252.                                    ((*((UINT8 *)&(d) + 1)) ? 2 : 1)))
  253.  
  254.    #define SMDFSizeOfUINT64Data(d) ((*((UINT32 *)&(d) + 1)) ? 8 :\
  255.                                    ((*((UINT16 *)&(d) + 1)) ? 4 :\
  256.                                    ((*((UINT8 *)&(d) + 1)) ? 2 :\
  257.                                    ((*(UINT8 *)&(d)) ? 1 : 0))))
  258.  
  259.    #define SMDFSizeOfFieldData(d, m)   (m = 0, ((*((UINT32 *)&(d) + 1)) ?\
  260.                                            (m = 0x83, 8) :\
  261.                                    ((*((UINT16 *)&(d) + 1)) ? (m = 0x82, 4) :\
  262.                                    ((*((UINT8 *)&(d) + 1)) ? (m = 0x81, 2) :\
  263.                                    ((*(UINT8 *)&(d) AND 0x80) ? (m = 0x80, 1) :\
  264.                                            0)))))
  265.  
  266.    #define SMDFZeroUINT64(a)       (*(UINT32 *)(a) = *((UINT32 *)(a) + 1) = 0)
  267.  
  268. // ══════════════════════════ Get/PutFields table ═════════════════════════════
  269.    typedef struct
  270.    {
  271. /* 0x00 */ UINT32  fid;
  272. /* 0x04 */ UINT64  dataSize;
  273. /* 0x0C */ void   *data;
  274. /* 0x10 */ UINT32  bytesTransfered;
  275. /* 0x14 */ UINT64  dataOverflow;
  276.    } SMDF_FIELD_DATA;
  277.  
  278.    typedef struct
  279.    {
  280. /* 0x00 */ SMDF_FIELD_DATA field;
  281. /* 0x1C */ UINT32  sizeOfData;
  282. /* 0x20 */ void   *addressOfData;
  283. /* 0x24 */ UINT8   dataSizeMap;
  284. /* 0x25 */ UINT8   reserved[3];
  285.    } NWSM_FIELD_TABLE_DATA;
  286.  
  287.    typedef struct
  288.    {
  289. /* 0x00 */ UINT32  fid;
  290. /* 0x04 */ void   *data;
  291. /* 0x08 */ UINT32  dataSize; /* The size of the data variable passed in */
  292. /* 0x0C */ NWBOOLEAN found;
  293.    } NWSM_GET_FIELDS_TABLE;
  294.  
  295. typedef struct
  296. {
  297.    ECMATime                  timeStamp;        /* time of individual media    */
  298.    ECMATime                  setTimeStamp;     /* time of entire media set */
  299.    BUFFER                    label[NWSM_MAX_MEDIA_LABEL_LEN];
  300.    UINT32                    number;
  301.     NWBOOLEAN32                  indexRequired;    /* partition index is on media */
  302. } NWSM_MEDIA_INFO;
  303.  
  304. /* Defines that are used only in session_info struct. */
  305.  
  306. #define   NWSM_MAX_SIDF_SRC_NM_TYP_LEN    32
  307. #define   NWSM_MAX_SIDF_SRC_NAME_LEN     256
  308.  
  309. typedef struct
  310. {
  311.    ECMATime                  timeStamp;
  312.     UINT32                    sessionID;
  313.     NWBOOLEAN32                  indexPresent;        /* session index is on media */
  314.    BUFFER                    description[NWSM_MAX_DESCRIPTION_LEN];
  315.    BUFFER                    softwareName[NWSM_MAX_SOFTWARE_NAME_LEN];
  316.    BUFFER                    softwareType[NWSM_MAX_SOFTWARE_TYPE_LEN];
  317.    BUFFER                    softwareVersion[NWSM_MAX_SOFTWARE_VER_LEN];
  318.    BUFFER                    sourceName[NWSM_MAX_TARGET_SRVC_NAME_LEN];
  319.    BUFFER                    sourceType[NWSM_MAX_TARGET_SRVC_TYPE_LEN];
  320.    BUFFER                    sourceVersion[NWSM_MAX_TARGET_SRVC_VER_LEN];
  321.    BUFFER                    sidfSourceNameType[NWSM_MAX_SIDF_SRC_NM_TYP_LEN];
  322.    BUFFER                    sidfSourceName[NWSM_MAX_SIDF_SRC_NAME_LEN];
  323. } NWSM_SESSION_INFO;
  324.  
  325. typedef struct
  326. {
  327.    NWBOOLEAN32               isSubRecord;
  328.    UINT32                    headerSize;
  329.    UINT32                    recordSize;
  330.    NWSM_DATA_SET_NAME_LIST  *dataSetName;
  331.    NWSM_SCAN_INFORMATION    *scanInformation;
  332.    ECMATime                  archiveDateAndTime;
  333.    UINT32                   *addressOfRecordSize;
  334.    UINT32                   *addressForCRC;
  335.    UINT32                   *addressOfInvalid;
  336.    BUFFERPTR                 crcBegin;
  337.    UINT32                    crcLength;
  338.    UINT32                    dataSetInfoRetrieved;
  339.    UINT32                    saveBufferSize;
  340.    BUFFER                    *saveBuffer;
  341.    NWBOOLEAN32               pathIsFullyQualified;
  342.    NWBOOLEAN32               dataSetIsInvalid;
  343. } NWSM_RECORD_HEADER_INFO;
  344.  
  345. // ════════════════════════════════════════════════════════════════════════════
  346. /* vstring */
  347. STRING_BUFFER *NWSMAllocString(
  348.                    STRING_BUFFER   **path,
  349.                    INT16             size);
  350.  
  351. /* list */
  352. NWSM_LIST     *NWSMAppendToList(
  353.                    NWSM_LIST_PTR    *list,
  354.                    BUFFERPTR         text,
  355.                    void             *otherInfo);
  356.  
  357. /* vstring */
  358. STRING         NWSMCatString(
  359.                    STRING_BUFFER   **dest,
  360.                    void             *source,
  361.                    INT16             srcLen);
  362.  
  363. /* datetime */
  364. CCODE          NWSMCheckDateAndTimeRange(
  365.                    UINT32            firstDateAndTime,
  366.                    UINT32            lastDateAndTime,
  367.                    UINT32            compareDateAndTime);
  368.  
  369. /* name */
  370. CCODE          NWSMCloseName(
  371.                    UINT32 HUGE      *handle);
  372.  
  373. /* vstring */
  374. STRING         NWSMCopyString(
  375.                    STRING_BUFFER   **dest,
  376.                    void             *src,
  377.                    INT16             srcLen);
  378.  
  379. /* list */
  380. void           NWSMDestroyList(
  381.                    NWSM_LIST_PTR    *list);
  382. /* strip */
  383. STRING         NWSMFixDirectoryPath(
  384.                    STRING path,
  385.                    UINT32 nameSpaceType,
  386.                    STRING_BUFFER **newPath,
  387.                    NWBOOLEAN wildAllowedOnTerminal);
  388.  
  389. /* strip */
  390. STRING         NWSMFixDOSPath(
  391.                    STRING            path,
  392.                    STRING            newPath);
  393.  
  394. /* free */
  395. CCODE          NWSMFreeNameList(
  396.                    NWSM_NAME_LIST  **list);
  397.  
  398. /* vstring */
  399. void           NWSMFreeString(
  400.                    STRING_BUFFER   **path);
  401.  
  402. /* gencrc */
  403. UINT32         NWSMGenerateCRC(
  404.                    UINT32          size,
  405.                    UINT32          crc,
  406.                    BUFFERPTR       ptr);
  407.  
  408. /* datetime */
  409. UINT32         NWSMGetCurrentDateAndTime(void);
  410.  
  411. /* name */
  412. CCODE          NWSMGetDataSetName(
  413.                    void HUGE        *buffer,
  414.                    UINT32            nameSpaceType,
  415.                    NWSM_DATA_SET_NAME HUGE *name);
  416.  
  417. /* name */
  418. CCODE          NWSMGetFirstName(
  419.                    void HUGE        *buffer,
  420.                    NWSM_DATA_SET_NAME HUGE *name,
  421.                    UINT32 HUGE      *handle);
  422.  
  423. /* list */
  424. NWSM_LIST     *NWSMGetListHead(
  425.                    NWSM_LIST_PTR    *listPtr);
  426.  
  427. /* headers */
  428. CCODE          NWSMGetMediaHeaderInfo(
  429.        BUFFERPTR                     headerBuffer,
  430.        UINT32                        headerBufferSize, 
  431.        NWSM_MEDIA_INFO              *mediaInfo);
  432.  
  433. /* name */
  434. CCODE          NWSMGetNextName(
  435.                    UINT32 HUGE      *handle,
  436.                    NWSM_DATA_SET_NAME HUGE *name);
  437.  
  438. /* name */
  439. CCODE          NWSMGetOneName(
  440.                    void HUGE        *buffer,
  441.                    NWSM_DATA_SET_NAME HUGE *name);
  442.  
  443. /* headers */
  444. void           NWSMPadBlankSpace(
  445.                    BUFFERPTR bufferPtr, 
  446.                    UINT32 unusedSize);
  447.  
  448. /* strip */
  449. STRING         NWSMGetPathChild(
  450.                    UINT32            nameSpaceType,
  451.                    STRING            path,
  452.                    STRING           *child);
  453.  
  454. /* headers */
  455. CCODE          NWSMGetRecordHeaderOnly(
  456.        BUFFERPTR                    *buffer, 
  457.        UINT32                       *bufferSize,
  458.        NWSM_RECORD_HEADER_INFO      *recordHeaderInfo);
  459.  
  460. /* headers */
  461. CCODE          NWSMGetDataSetInfo(
  462.        BUFFERPTR                    *buffer, 
  463.        UINT32                       *bufferSize,
  464.        NWSM_RECORD_HEADER_INFO      *recordHeaderInfo);
  465.  
  466. /* headers */
  467. CCODE          NWSMGetRecordHeader(
  468.        BUFFERPTR                    *buffer, 
  469.        UINT32                       *bufferSize,
  470.        NWSM_RECORD_HEADER_INFO      *recordHeaderInfo);
  471.  
  472. /* headers */
  473. CCODE          NWSMGetSessionHeaderInfo(
  474.        BUFFERPTR                     headerBuffer,
  475.        UINT32                        headerBufferSize, 
  476.        NWSM_SESSION_INFO            *sessionInfo);
  477.  
  478. /* strip */
  479. STRING         NWSMGetVolume(
  480.                    STRING           *ptr,
  481.                    UINT32            nameSpaceType,
  482.                    STRING            volume);
  483.  
  484. /* str */
  485. void           NWSMGetTargetName(
  486.                    STRING            source,
  487.                    STRING            name,
  488.                    STRING            type,
  489.                    STRING            version);
  490.  
  491. /* list */
  492. void           NWSMInitList(
  493.                    NWSM_LIST_PTR    *listPtr,
  494.                    void (*freeRoutine)(void *memoryPointer));
  495.  
  496. /* match (should use NWSMMatchName()) */
  497. NWBOOLEAN      NWSMIsWild(
  498.                    STRING            string);
  499.  
  500. /* strip */
  501. NWBOOLEAN      NWSMLegalDOSName(
  502.                    STRING            name);
  503.  
  504. /* pattern match */
  505. int                NWSMMatchName(
  506.                    UINT32            nameSpaceType, 
  507.                    char                 *pattern, 
  508.                    char                 *string,
  509.                     NWBOOLEAN           returnMatchToPatternEndIfWild);
  510.  
  511. /* datetime */
  512. UINT16         NWSMPackDate(
  513.                    UINT16            year,
  514.                    UINT16            month,
  515.                    UINT16            day);
  516.  
  517. /* datetime */
  518. UINT32         NWSMPackDateTime(
  519.                    UINT16            year,
  520.                    UINT16            month,
  521.                    UINT16            day,
  522.                    UINT16            hours,
  523.                    UINT16            minutes,
  524.                    UINT16            seconds);
  525.  
  526. /* datetime */
  527. UINT16         NWSMPackTime(
  528.                    UINT16            hours,
  529.                    UINT16            minutes,
  530.                    UINT16            seconds);
  531.  
  532. /* strip */
  533. NWBOOLEAN      NWSMPathIsNotFullyQualified(
  534.                    UINT32            nameSpaceType,
  535.                    STRING            path);
  536.  
  537. /* name */
  538. CCODE          NWSMPutFirstName(
  539.                    void HUGE       **buffer,
  540.                    UINT32            nameSpaceType,
  541.                    UINT32            selectionType,
  542.                    NWBOOLEAN         reverseOrder,
  543.                    STRING            sep1,
  544.                    STRING            sep2,
  545.                    STRING            name,
  546.                    UINT32 HUGE      *handle);
  547.  
  548. /* name */
  549. CCODE          NWSMPutFirstLName(
  550.                    void HUGE       **buffer,
  551.                    UINT32            nameSpaceType,
  552.                    UINT32            selectionType,
  553.                    NWBOOLEAN         reverseOrder,
  554.                    STRING            sep1,
  555.                    STRING            sep2,
  556.                    UINT32            nameLength,
  557.                    STRING            name,
  558.                    UINT32 HUGE      *handle);
  559.  
  560. /* name */
  561. CCODE          NWSMPutNextName(
  562.                    void HUGE       **buffer,
  563.                    UINT32 HUGE      *handle,
  564.                    UINT32            nameSpaceType,
  565.                    UINT32            selectionType,
  566.                    NWBOOLEAN         reverseOrder,
  567.                    STRING            sep1,
  568.                    STRING            sep2,
  569.                    STRING            name);
  570.  
  571. /* name */
  572. CCODE          NWSMPutNextLName(
  573.                    void HUGE       **buffer,
  574.                    UINT32 HUGE      *handle,
  575.                    UINT32            nameSpaceType,
  576.                    UINT32            selectionType,
  577.                    NWBOOLEAN         reverseOrder,
  578.                    STRING            sep1,
  579.                    STRING            sep2,
  580.                    UINT32            nameLength,
  581.                    STRING            name);
  582.  
  583. /* name */
  584. CCODE          NWSMPutOneName(
  585.                    void HUGE       **buffer,
  586.                    UINT32            nameSpaceType,
  587.                    UINT32            selectionType,
  588.                    NWBOOLEAN         reverseOrder,
  589.                    STRING            sep1,
  590.                    STRING            sep2,
  591.                    STRING            name);
  592.  
  593. /* name */
  594. CCODE          NWSMPutOneLName(
  595.                    void HUGE       **buffer,
  596.                    UINT32            nameSpaceType,
  597.                    UINT32            selectionType,
  598.                    NWBOOLEAN         reverseOrder,
  599.                    STRING            sep1,
  600.                    STRING            sep2,
  601.                    UINT32            nameLength,
  602.                    STRING            name);
  603.  
  604. /* headers */
  605. CCODE          NWSMSetMediaHeaderInfo(
  606.        NWSM_MEDIA_INFO              *mediaInfo, 
  607.        BUFFERPTR                     buffer,
  608.        UINT32                        bufferSize, 
  609.        UINT32                       *headerSize);
  610.  
  611. /* headers */
  612. CCODE          NWSMSetRecordHeader(
  613.        BUFFERPTR                    *buffer, 
  614.        UINT32                       *bufferSize,
  615.        UINT32                       *bufferData,
  616.        NWBOOLEAN                     setCRC, 
  617.        NWSM_RECORD_HEADER_INFO      *recordHeaderInfo);
  618.  
  619. /* headers */
  620. CCODE          NWSMSetNewRecordHeader(
  621.        BUFFERPTR                    *buffer, 
  622.        UINT32                       *bufferSize,
  623.        UINT32                       *bufferData,
  624.        NWBOOLEAN                     setCRC, 
  625.        NWSM_RECORD_HEADER_INFO      *recordHeaderInfo);
  626.  
  627. /* headers */
  628. CCODE          NWSMSetSessionHeaderInfo(
  629.        NWSM_SESSION_INFO            *sessionInfo, 
  630.        BUFFERPTR                     buffer,
  631.        UINT32                        bufferSize, 
  632.        UINT32                       *headerSize);
  633.  
  634. /* str */
  635. STRING         NWSMStr(
  636.                    UINT8             n,
  637.                    void             *dest,
  638.                    void             *src1,
  639.                    void             *src2,
  640.                    ...);
  641.  
  642. /* strip */
  643. CHAR           NWSMStripEndSeparator(
  644.                    UINT32            nameSpaceType,
  645.                    STRING            path,
  646.                    CHAR            **separatorPos);
  647.  
  648. /* strip */
  649. STRING         NWSMStripPathChild(
  650.                    UINT32            nameSpaceType,
  651.                    STRING            path,
  652.                    STRING            child,
  653.                    size_t            maxChildLength);
  654.  
  655. /* vstring */
  656. STRING         NWSMCatStrings(
  657.                    UINT8             numStrings,
  658.                    STRING_BUFFER   **dest,
  659.                    void             *src1,
  660.                    void             *src2,
  661.                    ...);
  662.  
  663. /* datetime */
  664. void           NWSMUnPackDate(
  665.                    UINT16            date,
  666.                    UINT16           *year,
  667.                    UINT16           *month,
  668.                    UINT16           *day);
  669.  
  670. /* datetime */
  671. void           NWSMUnPackDateTime(
  672.                    UINT32            dateTime,
  673.                    UINT16           *year,
  674.                    UINT16           *month,
  675.                    UINT16           *day,
  676.                    UINT16           *hours,
  677.                    UINT16           *minutes,
  678.                    UINT16           *seconds);
  679.  
  680. /* datetime */
  681. void           NWSMUnPackTime(
  682.                    UINT16            time,
  683.                    UINT16           *hours,
  684.                    UINT16           *minutes,
  685.                    UINT16           *seconds);
  686.  
  687. /* headers */
  688. CCODE          NWSMUpdateRecordHeader(
  689.        NWSM_RECORD_HEADER_INFO      *recordHeaderInfo);
  690.  
  691. /* match (should use NWSMMatchName()) */
  692. CCODE          NWSMWildMatch(
  693.                    STRING            pattern,
  694.                    STRING            string);
  695.  
  696. /* parser */
  697. CCODE          SMDFAddUINT64(                                  // sum = a + b
  698.                    UINT64           *a, 
  699.                    UINT64           *b, 
  700.                    UINT64           *sum);
  701.  
  702. /* parser */
  703. CCODE          SMDFDecrementUINT64(                            // a -= b
  704.                    UINT64           *a, 
  705.                    UINT32            b);
  706.  
  707. /* parser */
  708. CCODE          SMDFGetNextField(
  709.                    BUFFERPTR         buffer, 
  710.                    UINT32            bufferSize, 
  711.                    SMDF_FIELD_DATA  *field);
  712.  
  713. /* parser */
  714. CCODE          SMDFGetFields(
  715.                    UINT32            headFID, 
  716.                    NWSM_GET_FIELDS_TABLE table[], 
  717.                    BUFFERPTR        *buffer, 
  718.                    UINT32           *bufferSize);
  719.  
  720. /* parser */
  721. CCODE          SMDFGetUINT64(
  722.                    UINT64           *a, 
  723.                    UINT32           *v);
  724.  
  725. /* parser */
  726. CCODE          SMDFIncrementUINT64(                            // a += b
  727.                    UINT64           *a, 
  728.                    UINT32            b);
  729.  
  730. /* parser */
  731. CCODE          SMDFPutFields(
  732.                    NWSM_FIELD_TABLE_DATA table[], 
  733.                    BUFFERPTR        *buffer, 
  734.                    UINT32           *bufferSize, 
  735.                    UINT32            crcFlag);
  736.  
  737. #if defined(DEBUG_CODE)
  738. /* parser */
  739. void           SMDFPrintUINT64(
  740.                    BUFFERPTR         buffer, 
  741.                    UINT64           *data, 
  742.                    UINT16            pad);
  743. #endif
  744.  
  745. /* parser */
  746. CCODE          SMDFPutNextField(
  747.                    BUFFERPTR         buffer, 
  748.                    UINT32            bufferSize, 
  749.                    SMDF_FIELD_DATA  *field, 
  750.                    UINT8             dataSizeMap, 
  751.                    UINT32            sizeOfData);
  752.  
  753. /* parser */
  754. CCODE          SMDFSetUINT32Data(
  755.                    UINT64           *dataSize, 
  756.                    BUFFERPTR         buffer, 
  757.                    UINT32           *data);
  758.  
  759. /* parser */
  760. CCODE          SMDFSetUINT64(
  761.                    UINT64           *a, 
  762.                    void             *buffer, 
  763.                    UINT16            n);
  764.  
  765. /* parser */
  766. CCODE          SMDFSubUINT64(                                  // dif = a - b
  767.                    UINT64           *a, 
  768.                    UINT64           *b, 
  769.                    UINT64           *dif);
  770. /* str */
  771. int            StrNIEqu(                           // for Enabling
  772.                     const char *__s1,
  773.                     const char *__s2,
  774.                     size_t      __n );
  775. /* str */
  776. int            StrIEqu(
  777.                     const char *__s1, 
  778.                     const char *__s2 );
  779.  
  780.  
  781. #define ECMA_TIME_ZONE_UNKNOWN     -2047            // from the ECMA 167 spec
  782.  
  783. CCODE NWSMUnixTimeToECMA(
  784.                UINT32        unixTime,
  785.                ECMATime     *ECMATime,
  786.                NWBOOLEAN32   local);
  787.  
  788. CCODE NWSMECMAToUnixTime(
  789.                ECMATime     *ECMATime,
  790.                UINT32       *unixTime,
  791.                INT32        *tzOffset );
  792.  
  793. CCODE NWSMDOSTimeToECMA(
  794.                UINT32        dosTime,
  795.                ECMATime     *ECMATime );
  796.  
  797. CCODE NWSMECMAToDOSTime(
  798.                ECMATime     *ECMATime,
  799.                UINT32       *dosTime );
  800.  
  801. int   NWSMECMATimeCompare(
  802.                ECMATime     *ECMATime1,
  803.                ECMATime     *ECMATime2);
  804.  
  805. #endif
  806.  
  807. // ════════════════════════════════════════════════════════════════════════════
  808. // ════════════════════════════════════════════════════════════════════════════
  809.  
  810.