📄 nsfdata.h
字号:
** the number for some breathing room.
**
** The SCHED_LIST and SCHED_ENTRY are the preR6 data types. For R6 we used
** the SCHED_LIST.Spare value to convey the length of the SCHED_ENTRY_EXT
** data that follows. If .Spare is 0, the data that follows is SCHED_ENTRY,
** NOT SCHED_ENTRY_EXT.
** Now that we convey the length of each SCHED_ENTRY_EXT that follows (R6 and
** later), we can easily extend SCHED_ENTRY_EXT w/o adversely affecting
** previous clients since from R6 on the clients should be using
** SCHED_LIST.Spare to do pointer shifts. For example, say in R7 we add
** even more info to SCHED_ENTRY_EXT, we simply append it to the R6 definition
** and adjust SCHED_LIST.Spare to reflect the new size. That way an R6 client
** can get the info it needs/wants and can skip the 'newer' data that it
** has no way of properly using/processing.
**
** Note: If the SCHED_LIST.Spare is 0 then a SCHED_ENTRY MUST follow.
** If the SCHED_LIST.Spare is non-0 then a SCHED_ENTRY_EXT MUST follow.
**
** We are NOT allowing mixing of data types since it would only cause confusion
** for older users! The system will return SCHED_LIST/SCHED_ENTRY data if it
** detects that the caller is using the preR6 API calls (or is using the R6
** API calls with a "preR6" flag to indicate old API call in use).
*/
#define MAXSCHEDLISTSIZE (MAXONESEGSIZE - 100 * sizeof(SCHED_ENTRY))
#define MAXENTRIESPERSCHEDLIST ((MAXSCHEDLISTSIZE - sizeof (SCHED_LIST)) / sizeof(SCHED_ENTRY))
typedef struct {
ALIGNED_NUMBER nLongitude; /* Longitude coordinate value */
ALIGNED_NUMBER nLatitude; /* Latitude coordinate value */
} GEO_INFO;
/* Scheduling list header */
typedef struct {
DWORD NumEntries; /* Total number of schedule entries follow */
WORD wApplicationID; /* application id for UserAttr interpretation */
WORD Spare; /* PreR6: spare
** R6: This now conveys the length of a single
** SCHED_ENTRY_xxx that follows. Use this value
** to skip entries that MAY be larger (ie: R7
** extends SCHED_ENTRY_EXT by appending values
** that R6 does not know about so SCHED_ENTRY_xxx
** would actually be larger than the R6
** SCHED_ENTRY_EXT
*/
/* Now come the schedule entries...
** IFF Spare==0 then SCHED_ENTRYs follow
** Otherwise Spare==the length of the
** SCHED_ENTRY_EXTs that follow
*/
} SCHED_LIST;
/* Scheduling busy time entry */
typedef struct {
UNID Unid; /* UNID of the entry */
TIMEDATE_PAIR Interval; /* Interval of the entry */
BYTE Attr; /* SCHED_ATTR_xxx attributes defined by Notes */
BYTE UserAttr; /* Application specific attributes */
BYTE spare[2];
} SCHED_ENTRY;
/* R6 scheduling busy time entry */
typedef struct {
UNID Unid; /* UNID of the entry */
TIMEDATE_PAIR Interval; /* Interval of the entry */
BYTE Attr; /* SCHED_ATTR_xxx attributes defined by Notes */
BYTE UserAttr; /* Application specific attributes */
BYTE spare[2];
/* Everything above this point is the same as SCHED_ENTRY for preR6 clients!
** Everything from here on down is R6 (or later) only!
*/
UNID ApptUnid; /* ApptUNID of the entry */
DWORD dwEntrySize;/* Size of this entry (for future ease of expansion) */
GEO_INFO GEOInfo; /* Geographical coordinates of the entry */
} SCHED_ENTRY_EXT;
/* R6 Detailed busytime information is harvested and stored in a fairly
** compact manner thanks to length encoding of everything. The format
** is basically:
**
** SCHED_DETAIL_LIST (Detail list prefix header)
** TEXT_LIST (of items that harvested and whose info follows)
** SCHED_DETAIL_ENTRY (Actual harvested info per UNID)
**
** Since it may be desirable in the future to extend the detail format
** the SCHED_DETAIL_xxx structures are length encoded. Any additional
** SCHED_DETAIL_LIST (or 'overhead') extensions MUST be inserted between
** the TEXT_LIST and the SCHED_DETAIL_ENTRY. Any additional
** SCHED_DETAIL_ENTRY extensions MUST be inserted at the end of the
** structure so that they can easily be trimmed off by older clients.
**
** Minor clarification for those nitpickers out there, the SCHED_DETAIL_ENTRY
** is NOT just a single struct but is really composed of 2 parts, a
** 'prefix' that contains all info common to that detail (ie: entry
** UNID or flags) and then the actual data in an encoded form. That
** form is described in greater detail below. A hierarchical view
** of how the data is organzied (where indenting is used to
** semi-convey 'containment') when 3 items are harvested for 2 UNIDs
** would be:
**
** SCHED_DETAIL_LIST (Detail list header)
** TEXT_LIST (of 3 item names that were harvested)
** SCHED_DETAIL_ENTRY (Actual harvested info for UNID1)
** SCHED_DETAIL_DATA (Actual item data)
** SCHED_DETAIL_DATA (Actual item data)
** SCHED_DETAIL_DATA (Actual item data)
** SCHED_DETAIL_ENTRY (Actual harvested info for UNID2)
** SCHED_DETAIL_DATA (Actual item data)
** SCHED_DETAIL_DATA (Actual item data)
** SCHED_DETAIL_DATA (Actual item data)
**
*/
/* Flags used on SCHED_DETAIL_LIST */
#define SCHED_DETAIL_LIST_ATTR_NODATA 0x01 /* List has no data */
#define SCHED_DETAIL_LIST_ATTR_RESERVED2 0x02
#define SCHED_DETAIL_LIST_ATTR_RESERVED3 0x04
#define SCHED_DETAIL_LIST_ATTR_RESERVED4 0x08
#define SCHED_DETAIL_LIST_ATTR_RESERVED5 0x10
#define SCHED_DETAIL_LIST_ATTR_RESERVED6 0x20
#define SCHED_DETAIL_LIST_ATTR_RESERVED7 0x40
#define SCHED_DETAIL_LIST_ATTR_RESERVED8 0x80
/* R6 Schedule detail list header */
typedef struct {
WORD wHeaderLen; /* Length of THIS header, in case it
** ever grows, so that new items can be
** easily skipped
*/
WORD wEntryLen; /* Length of THIS entire list and ALL of
** its related data.
*/
WORD wNumEntries; /* Number of entries that follow */
WORD wOffsetItems; /* Offset from list start to TEXT_LIST */
WORD wOffsetDetails; /* Offset from list start to SCHED_DETAIL_ENTRY */
BYTE Attr; /* SCHED_DETAIL_LIST_ATTR_xxx attributes */
BYTE bReserved; /* Reserved space/padding for ODS */
/* Now comes the TEXT_LIST that corresponds to the item names
** and then comes the SCHED_DETAIL_ENTRY for each UNID
*/
} SCHED_DETAIL_LIST;
/* Flags used on SCHED_DETAIL_ENTRY */
#define SCHED_DETAIL_ENTRY_ATTR_PRIVATE 0x01 /* Entry is private */
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED2 0x02
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED3 0x04
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED4 0x08
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED5 0x10
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED6 0x20
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED7 0x40
#define SCHED_DETAIL_ENTRY_ATTR_RESERVED8 0x80
/* R6 Schedule detail list entry */
typedef struct {
WORD wPrefixLen; /* Length of THIS prefix entry, in case it
** ever grows, so that new items can be
** easily skipped
*/
WORD wEntryLen; /* Length of THIS entire entry and ALL of
** its related data.
*/
UNID Unid; /* UNID of the entry this is details of */
WORD wOffsetDetails; /* Offset from entry start to actual data */
BYTE Attr; /* SCHED_DETAIL_ENTRY_ATTR_xxx attributes (TBD) */
BYTE bReserved; /* Reserved space/padding for ODS */
/* Now comes the data that corresponds to the item values (1 per item name)
** UNLESS dwEntryLen == wPrefixLen (which means NO details available
** for this UNID)
*/
} SCHED_DETAIL_ENTRY;
/* Flags used on SCHED_DETAIL_DATA */
#define SCHED_DETAIL_DATA_ATTR_TRUNCATED 0x01 /* Used to indicate value is trunated */
#define SCHED_DETAIL_DATA_ATTR_NOTFOUND 0x02 /* Item/value not found */
#define SCHED_DETAIL_DATA_ATTR_RESERVED3 0x04
#define SCHED_DETAIL_DATA_ATTR_RESERVED4 0x08
#define SCHED_DETAIL_DATA_ATTR_RESERVED5 0x10
#define SCHED_DETAIL_DATA_ATTR_RESERVED6 0x20
#define SCHED_DETAIL_DATA_ATTR_RESERVED7 0x40
#define SCHED_DETAIL_DATA_ATTR_RESERVED8 0x80
/* R6 Schedule detail list actual data */
typedef struct {
WORD wType; /* Notes data type for the data */
WORD wDataLen; /* Length of the data that immediately follows */
BYTE Attr; /* SCHED_DETAIL_DATA_ATTR_xxx attributes */
BYTE bReserved; /* Reserved space/padding for ODS */
/* Now comes the actual data that corresponds to the item values */
} SCHED_DETAIL_DATA;
/* Since we have new structs for R6, we have to have new MAXSCHEDxxx values */
#define MAXSCHEDLISTEXTSIZE ( MAXONESEGSIZE - 100 * sizeof(SCHED_ENTRY_EXT) )
#define MAXENTRIESPERSCHEDLISTEXT ( ( MAXSCHEDLISTEXTSIZE - sizeof(SCHED_LIST) ) / sizeof(SCHED_ENTRY_EXT) )
/* The Attr field contains these bits. Note that if bit3 is set
** then the entry will take up busy time.
** The lower nibble of the attributes defines the the entry type.
** NOTE: We are reserving the upper 4 bits of the Attr field for future use.
*/
#define SCHED_ATTR_FOREIGN_UNID 0x10 /* Used by gateways to return foreign UNIDs */
#define SCHED_ATTR_REPEAT_EVENT 0x20 /* Used by V5 C&S to identify new repeating meetings */
#define SCHED_ATTR_RESERVED4 0x40
#define SCHED_ATTR_RESERVED8 0x80
/* these are the entry type bits */
#define SCHED_ATTR_TYPE_BITS 0x0F
#define SCHED_ATTR_FREE_BASE 0x00
#define SCHED_ATTR_BUSY_BASE 0x08
/* Entry types that don't block off busy time */
#define SCHED_ATTR_NULL (SCHED_ATTR_FREE_BASE + 0x00)
#define SCHED_ATTR_PENCILED (SCHED_ATTR_FREE_BASE + 0x01)
#define SCHED_ATTR_FREE_RESERVED2 (SCHED_ATTR_FREE_BASE + 0x02)
#define SCHED_ATTR_FREE_RESERVED3 (SCHED_ATTR_FREE_BASE + 0x03)
#define SCHED_ATTR_FREE_RESERVED4 (SCHED_ATTR_FREE_BASE + 0x04)
#define SCHED_ATTR_FREE_RESERVED5 (SCHED_ATTR_FREE_BASE + 0x05)
#define SCHED_ATTR_FREE_RESERVED6 (SCHED_ATTR_FREE_BASE + 0x06)
#define SCHED_ATTR_FREE_RESERVED7 (SCHED_ATTR_FREE_BASE + 0x07)
/* Entry types that block off busy time */
#define SCHED_ATTR_APPT (SCHED_ATTR_BUSY_BASE + 0x00)
#define SCHED_ATTR_NONWORK (SCHED_ATTR_BUSY_BASE + 0x01)
#define SCHED_ATTR_BUSY_RESERVED2 (SCHED_ATTR_BUSY_BASE + 0x02)
#define SCHED_ATTR_BUSY_RESERVED3 (SCHED_ATTR_BUSY_BASE + 0x03)
#define SCHED_ATTR_BUSY_RESERVED4 (SCHED_ATTR_BUSY_BASE + 0x04)
#define SCHED_ATTR_BUSY_RESERVED5 (SCHED_ATTR_BUSY_BASE + 0x05)
#define SCHED_ATTR_BUSY_RESERVED6 (SCHED_ATTR_BUSY_BASE + 0x06)
#define SCHED_ATTR_BUSY_RESERVED7 (SCHED_ATTR_BUSY_BASE + 0x07)
#define SCHED_ATTR_TYPE(attr) ((attr) & SCHED_ATTR_TYPE_BITS)
#define SCHED_ATTR_AVAILABLE(attr) (!((attr) & SCHED_ATTR_BUSY_BASE))
/* Function templates */
STATUS LNPUBLIC NSFTranslateSpecial(void far *InputString,
WORD InputStringLength,
void far *OutputString,
WORD OutputStringBufferLength,
NOTEID NoteID,
void far *IndexPosition,
INDEXSPECIALINFO far *IndexInfo,
HANDLE hUnreadList,
HANDLE hCollapsedList,
char far *FileTitle,
char far *ViewTitle,
WORD far *retLength);
/* End of Note Storage File Data Definitions */
#ifdef __cplusplus
}
#endif
#endif
#if defined(OS400) && (__OS400_TGTVRM__ >= 510)
#pragma datamodel(pop)
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -