summaryrefslogtreecommitdiff
path: root/plugins/LotusNotify/src/cnotesapi/include/nif.h
blob: d34d59b574b76f57fcabbae8dd6b075ece0c44a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520

#if defined(OS400) && (__OS400_TGTVRM__ >= 510)
#pragma datamodel(P128)
#endif

/*********************************************************************/
/*                                                                   */
/* Licensed Materials - Property of IBM                              */
/*                                                                   */
/* L-GHUS-5VMPGW, L-GHUS-5S3PEE                                      */
/* (C) Copyright IBM Corp. 1989, 2005  All Rights Reserved           */
/*                                                                   */
/* US Government Users Restricted Rights - Use, duplication or       */
/* disclosure restricted by GSA ADP Schedule Contract with           */
/* IBM Corp.                                                         */
/*                                                                   */
/*********************************************************************/



/*	NIF manipulation routines & basic datatypes */

#ifndef NIF_DEFS
#define NIF_DEFS

#ifndef NSF_DATA_DEFS
#include "nsfdata.h"					/* We need NOTEID */
#endif

#ifndef NSF_NOTE_DEFS
#include "nsfnote.h"					/* We need NOTE_CLASS_VIEW */
#endif

#ifndef POOL_DEFS
#include "pool.h"
#endif

#ifndef STD_NAME_DEFS
#include "stdnames.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

#define DB2NIF_VERSION 11

/*	Collection handle */

typedef WORD HCOLLECTION;				/* Handle to NIF collection */
#define	NULLHCOLLECTION ( (HCOLLECTION) 0 )


/*	NIFOpenCollection "open" flags */

#define OPEN_REBUILD_INDEX		0x0001	/* Throw away existing index and */
										/* rebuild it from scratch */
#define OPEN_NOUPDATE			0x0002	/* Do not update index or unread */
										/* list as part of open (usually */
										/* set by server when it does it */
										/* incrementally instead). */
#define OPEN_DO_NOT_CREATE		0x0004	/* If collection object has not yet */
										/* been created, do NOT create it */
										/* automatically, but instead return */
										/* a special internal error called */
										/* ERR_COLLECTION_NOT_CREATED */
#define OPEN_SHARED_VIEW_NOTE	0x0010	/* Tells NIF to "own" the view note */
										/* (which gets read while opening the */
										/* collection) in memory, rather than */
										/* the caller "owning" the view note */
										/* by default.  If this flag is specified */
										/* on subsequent opens, and NIF currently */
										/* owns a copy of the view note, it */
										/* will just pass back the view note */
										/* handle  rather than re-reading it */
										/* from disk/network.  If specified, */
										/* the the caller does NOT have to */
										/* close the handle.  If not specified, */
										/* the caller gets a separate copy, */
										/* and has to NSFNoteClose the */
										/* handle when its done with it. */
#define OPEN_REOPEN_COLLECTION	0x0020	/* Force re-open of collection and */
										/* thus, re-read of view note. */
										/* Also implicitly prevents sharing */
										/* of collection handle, and thus */
										/* prevents any sharing of associated */
										/* structures such as unread lists, etc */


/*	Collection navigation directives */

#define NAVIGATE_CURRENT			0	/* Remain at current position */
										/* (reset position & return data) */
#define NAVIGATE_PARENT				3	/* Up 1 level */
#define NAVIGATE_CHILD				4	/* Down 1 level to first child */
#define NAVIGATE_NEXT_PEER			5	/* Next node at our level */
#define NAVIGATE_PREV_PEER			6	/* Prev node at our level */
#define NAVIGATE_FIRST_PEER			7	/* First node at our level */
#define NAVIGATE_LAST_PEER			8	/* Last node at our level */
#define NAVIGATE_CURRENT_MAIN		11	/* Highest level non-category entry */
#define NAVIGATE_NEXT_MAIN			12	/* CURRENT_MAIN, then NEXT_PEER */
#define NAVIGATE_PREV_MAIN			13	/* CURRENT_MAIN, then PREV_PEER only if already there */
#define NAVIGATE_NEXT_PARENT		19	/* PARENT, then NEXT_PEER */
#define NAVIGATE_PREV_PARENT		20	/* PARENT, then PREV_PEER */

#define NAVIGATE_NEXT				1	/* Next entry over entire tree */
										/* (parent first, then children,...) */
#define NAVIGATE_PREV				9	/* Previous entry over entire tree */
										/* (opposite order of PREORDER) */
#define NAVIGATE_ALL_DESCENDANTS	17	/* NEXT, but only descendants */
										/* below NIFReadEntries StartPos */
#define NAVIGATE_NEXT_UNREAD		10	/* NEXT, but only "unread" entries */
#define NAVIGATE_NEXT_UNREAD_MAIN	18	/* NEXT_UNREAD, but stop at main note also */
#define NAVIGATE_PREV_UNREAD_MAIN	34	/* Previous unread main. */
#define NAVIGATE_PREV_UNREAD		21	/* PREV, but only "unread" entries */
#define NAVIGATE_NEXT_SELECTED		14	/* NEXT, but only "selected" entries */
#define NAVIGATE_PREV_SELECTED		22	/* PREV, but only "selected" entries */
#define NAVIGATE_NEXT_SELECTED_MAIN	32	/* Next selected main. (Next unread */
										/* main can be found above.) */
#define NAVIGATE_PREV_SELECTED_MAIN	33	/* Previous selected main. */
#define NAVIGATE_NEXT_EXPANDED		15	/* NEXT, but only "expanded" entries */
#define NAVIGATE_PREV_EXPANDED		16	/* PREV, but only "expanded" entries */
#define NAVIGATE_NEXT_EXPANDED_UNREAD 23 /* NEXT, but only "expanded" AND "unread" entries */
#define NAVIGATE_PREV_EXPANDED_UNREAD 24 /* PREV, but only "expanded" AND "unread" entries */
#define NAVIGATE_NEXT_EXPANDED_SELECTED 25 /* NEXT, but only "expanded" AND "selected" entries */
#define NAVIGATE_PREV_EXPANDED_SELECTED 26 /* PREV, but only "expanded" AND "selected" entries */
#define NAVIGATE_NEXT_EXPANDED_CATEGORY	27 /* NEXT, but only "expanded" AND "category" entries */
#define NAVIGATE_PREV_EXPANDED_CATEGORY	28 /* PREV, but only "expanded" AND "category" entries */
#define NAVIGATE_NEXT_EXP_NONCATEGORY	39	/* NEXT, but only "expanded" "non-category" entries */
#define NAVIGATE_PREV_EXP_NONCATEGORY	40	/* PREV, but only "expanded" "non-category" entries */
#define NAVIGATE_NEXT_HIT			29	/* NEXT, but only FTSearch "hit" entries */
										/* (in the SAME ORDER as the hit's relevance ranking) */
#define NAVIGATE_PREV_HIT			30	/* PREV, but only FTSearch "hit" entries */
										/* (in the SAME ORDER as the hit's relevance ranking) */
#define NAVIGATE_CURRENT_HIT		31	/* Remain at current position in hit's relevance rank array */
										/* (in the order of the hit's relevance ranking) */
#define NAVIGATE_NEXT_SELECTED_HIT	35	/* NEXT, but only "selected" and FTSearch "hit" entries */
										/* (in the SAME ORDER as the hit's relevance ranking) */
#define NAVIGATE_PREV_SELECTED_HIT	36	/* PREV, but only "selected" and FTSearch "hit" entries */
										/* (in the SAME ORDER as the hit's relevance ranking) */
#define NAVIGATE_NEXT_UNREAD_HIT	37	/* NEXT, but only "unread" and FTSearch "hit" entries */
										/* (in the SAME ORDER as the hit's relevance ranking) */
#define NAVIGATE_PREV_UNREAD_HIT	38	/* PREV, but only "unread" and FTSearch "hit" entries */
										/* (in the SAME ORDER as the hit's relevance ranking) */
#define NAVIGATE_NEXT_CATEGORY		41	/* NEXT, but only "category" entries */
#define NAVIGATE_PREV_CATEGORY		42	/* PREV, but only "category" entries */
#define NAVIGATE_NEXT_NONCATEGORY	43	/* NEXT, but only "non-category" entries */
#define NAVIGATE_PREV_NONCATEGORY	44	/* PREV, but only "non-category" entries */

#define NAVIGATE_MASK			0x007F	/* Navigator code (see above) */


/*	Flag which can be used with ALL navigators which causes the navigation
	to be limited to entries at a specific level (specified by the
	field "MinLevel" in the collection position) or any higher levels
	but never a level lower than the "MinLevel" level.  Note that level 0
	means the top level of the index, so the term "minimum level" really
	means the "highest level" the navigation can move to.
	This can be used to find all entries below a specific position
	in the index, limiting yourself only to that subindex, and yet be
	able to use any of the navigators to move around within that subindex.
	This feature was added in Version 4 of Notes, so it cannot be used
	with earlier Notes Servers. */

#define NAVIGATE_MINLEVEL		0x0100	/* Honor "Minlevel" field in position */
#define NAVIGATE_MAXLEVEL		0x0200	/* Honor "Maxlevel" field in position */

/*  This flag can be combined with any navigation directive to
	prevent having a navigation (Skip) failure abort the (ReadEntries) operation.
	For example, this is used by the Notes user interface when
	getting the entries to display in the view, so that if an attempt is made to
	skip past either end of the index (e.g. using PageUp/PageDown),
	the skip will be left at the end of the index, and the return will return
	whatever can be returned using the separate return navigator.

	This flag is also used to get the "last" N entries of a view by setting the
	Skip Navigator to NAVIGATE_NEXT | NAVIGATE_CONTINUE, setting the SkipCount to MAXDWORD,
	setting the ReturnNavigator to NAVIGATE_PREV_EXPANDED, and setting the ReturnCount
	to N (N must be greater than 0). */

#define NAVIGATE_CONTINUE		0x8000	/* "Return" even if "Skip" error */

/*	Structure which describes statistics about the overall collection,
	and can be requested using the READ_MASK_COLLECTIONSTATS flag.  If
	requested, this structure is returned at the beginning of the returned
	ReadEntries buffer. */

typedef struct
	{
	WORD	TopLevelEntries;			/* # top level entries (level 0) */
	WORD	spare[3];					/* 0 */
	} COLLECTIONSTATS16;

typedef struct
	{
	DWORD	TopLevelEntries;			/* # top level entries (level 0) */
	DWORD	spare;						/* 0 */
	} COLLECTIONSTATS;

/*	Structure which specifies collection index position. */

#define MAXTUMBLERLEVELS_V2 8			/* Max. levels in hierarchy tree in V2 */
#define MAXTUMBLERLEVELS 32				/* Max. levels in hierarchy tree */

typedef struct
	{
	WORD	Level;						/* # levels -1 in tumbler */
										/* (top level = 0) */
	WORD	Tumbler[MAXTUMBLERLEVELS_V2]; /* Current tumbler (1.2.3, etc) */
										/* (an array of ordinal ranks) */
										/* (0th entry = top level) */
	} COLLECTIONPOSITION16;

typedef struct
	{
	WORD	Level;						/* # levels -1 in tumbler */
										/* (top level = 0) */
	BYTE	MinLevel;					/* MINIMUM level that this position */
										/* is allowed to be nagivated to. */
										/* This is useful to navigate a */
										/* subtree using all navigator codes. */
										/* This field is IGNORED unless */
										/* the NAVIGATE_MINLEVEL flag is */
										/* enabled (for backward compat) */
	BYTE	MaxLevel;					/* MAXIMUM level that this position */
										/* is allowed to be nagivated to. */
										/* This is useful to navigate a */
										/* subtree using all navigator codes. */
										/* This field is IGNORED unless */
										/* the NAVIGATE_MAXLEVEL flag is */
										/* enabled (for backward compat) */
	DWORD	Tumbler[MAXTUMBLERLEVELS];	/* Current tumbler (1.2.3, etc) */
										/* (an array of ordinal ranks) */
										/* (0th entry = top level) */
										/* Actual number of array entries */
										/* is Level+1 */
	} COLLECTIONPOSITION;


/*	Macro which computes size of portion of COLLECTIONPOSITION structure
	which is actually used.  This is the size which is returned by
	NIFReadEntries when READ_MASK_INDEXPOSITION is specified. */

#define COLLECTIONPOSITIONSIZE16(p) (sizeof(WORD) * ((p)->Level+2))
#define COLLECTIONPOSITIONSIZE(p) (sizeof(DWORD) * ((p)->Level+2))
/*	NIFReadEntries return mask flags

	These flags specified what information is returned in the return
	buffer.  With the exception of READ_MASK_COLLECTIONSTATS, the
	information which corresponds to each of the flags in this mask
	are returned in the buffer, repeated for each index entry, in the
	order in which the bits are listed here.

	The return buffer consists of:

	1) COLLECTIONSTATS structure, if requested (READ_MASK_COLLECTIONSTATS).
		This structure is returned only once at the beginning of the
		buffer, and is not repeated for each index entry.

	2) Information about each index entry.  Each flag requested a different
		bit of information about the index entry.  If more than one flag
		is defined, the values follow each other, in the order in which
		the bits are listed here.  This portion repeats for as many
		index entries as are requested.
*/

	/*	Fixed length stuff */
#define READ_MASK_NOTEID			0x00000001L	/* NOTEID of entry */
#define READ_MASK_NOTEUNID			0x00000002L	/* UNID of entry */
#define READ_MASK_NOTECLASS			0x00000004L	/* WORD of "note class" */
#define READ_MASK_INDEXSIBLINGS		0x00000008L	/* DWORD/WORD of # siblings of entry */
#define READ_MASK_INDEXCHILDREN		0x00000010L	/* DWORD/WORD of # direct children of entry */
#define READ_MASK_INDEXDESCENDANTS	0x00000020L	/* DWORD/WORD of # descendants below entry */
#define READ_MASK_INDEXANYUNREAD	0x00000040L	/* WORD of TRUE if "unread" or */
											/* "unread" descendants; else FALSE */
#define READ_MASK_INDENTLEVELS		0x00000080L	/* WORD of # levels that this */
											/* entry should be indented in */
											/* a formatted view. */
	 										/* For category entries: */
											/*  # sub-levels that this */
											/*  category entry is within its */
											/*  Collation Descriptor.  Used */
											/*  for multiple-level category */
											/*  columns (backslash-delimited). */
											/*  "0" for 1st level in this column, etc. */
											/* For response entries: */
											/*  # levels that this response */
											/*  is below the "main note" level. */
											/* For normal entries: 0 */
#define READ_MASK_SCORE				0x00000200L	/* Relavence "score" of entry */
											/*  (only used with FTSearch). */
#define READ_MASK_INDEXUNREAD		0x00000400L /* WORD of TRUE if this entry (only) "unread" */


	/*	Stuff returned only once at beginning of return buffer */
#define READ_MASK_COLLECTIONSTATS	0x00000100L	/* Collection statistics (COLLECTIONSTATS/COLLECTIONSTATS16) */


	/*	Variable length stuff */
#define READ_MASK_INDEXPOSITION		0x00004000L	/* Truncated COLLECTIONPOSITION/COLLECTIONPOSITION16 */
#define READ_MASK_SUMMARYVALUES		0x00002000L	/* Summary buffer w/o item names */
#define READ_MASK_SUMMARY			0x00008000L	/* Summary buffer with item names */
/*	Structures which are used by NIFGetCollectionData to return data
	about the collection. NOTE: If the COLLECTIONDATA structure changes,
	nifods.c must change as well. */

/* Definitions which are used by NIFGetCollectionData to return data about the collection.  */

#define PERCENTILE_COUNT	11

#define PERCENTILE_0		0
#define PERCENTILE_10		1
#define PERCENTILE_20		2
#define PERCENTILE_30		3
#define PERCENTILE_40		4
#define PERCENTILE_50		5
#define PERCENTILE_60		6
#define PERCENTILE_70		7
#define PERCENTILE_80		8
#define PERCENTILE_90		9
#define PERCENTILE_100		10

typedef struct
	{
	DWORD		DocCount;	 	/* Total number of documents in the collection */
	DWORD		DocTotalSize;	/* Total number of bytes occupied by the documents in the collection */
	DWORD		BTreeLeafNodes;	/* Number of B-Tree leaf nodes for this index. */
	WORD		BTreeDepth;		/* Number of B-tree levels for this index. */
	WORD		Spare;			/* Unused */
	DWORD		KeyOffset[PERCENTILE_COUNT];  /* Offset of ITEM_VALUE_TABLE for each 10th-percentile key value */
				/* A series of ITEM_VALUE_TABLEs follows this structure. */
	} COLLECTIONDATA;



/*	Flag in index entry's NOTEID to indicate (ghost) "category entry" */
/*	Note: this relies upon the fact that NOTEID_RESERVED is high bit! */

#define NOTEID_CATEGORY			0x80000000L /* Bit 31 -> (ghost) "category entry" */
#define NOTEID_CATEGORY_TOTAL	0xC0000000L /* Bit 31+30 -> (ghost) "grand total entry" */
#define NOTEID_CATEGORY_INDENT	0x3F000000L	/* Bits 24-29 -> category indent level within this column */
#define NOTEID_CATEGORY_ID		0x00FFFFFFL	/* Low 24 bits are unique category # */


/*	SignalFlags word returned by NIFReadEntries and V4+ NIFFindByKey */

#define SIGNAL_DEFN_ITEM_MODIFIED 0x0001
									/* At least one of the "definition" */
									/* view items ($FORMULA, $COLLATION, */
									/* or $FORMULACLASS) has been modified */
									/* by another user since last ReadEntries. */
									/* Upon receipt, you may wish to */
									/* re-read the view note if up-to-date */
									/* copies of these items are needed. */
									/* Upon receipt, you may also wish to */
									/* re-synchronize your index position */
									/* and re-read the rebuilt index. */
									/* Signal returned only ONCE per detection */
#define SIGNAL_VIEW_ITEM_MODIFIED 0x0002
									/* At least one of the non-"definition" */
									/* view items ($TITLE,etc) has been */
									/* modified since last ReadEntries. */
									/* Upon receipt, you may wish to */
									/* re-read the view note if up-to-date */
									/* copies of these items are needed. */
									/* Signal returned only ONCE per detection */
#define SIGNAL_INDEX_MODIFIED	  0x0004
									/* Collection index has been modified */
									/* by another user since last ReadEntries. */
									/* Upon receipt, you may wish to */
									/* re-synchronize your index position */
									/* and re-read the modified index. */
									/* Signal returned only ONCE per detection */
#define SIGNAL_UNREADLIST_MODIFIED 0x0008
									/* Unread list has been modified */
									/* by another window using the same */
									/* hCollection context */
									/* Upon receipt, you may wish to */
									/* repaint the window if the window */
									/* contains the state of unread flags */
									/* (This signal is never generated */
									/*  by NIF - only unread list users) */
#define SIGNAL_DATABASE_MODIFIED  0x0010
									/* Collection is not up to date */
#define SIGNAL_MORE_TO_DO		  0x0020
									/* End of collection has not been reached */
									/* due to buffer being too full. */
									/* The ReadEntries should be repeated */
									/* to continue reading the desired entries. */
#define SIGNAL_VIEW_TIME_RELATIVE 0x0040
									/* The view contains a time-relative formula */
									/* (e.g., @Now).  Use this flag to tell if the */
									/* collection will EVER be up-to-date since */
									/* time-relative views, by definition, are NEVER */
									/* up-to-date. */
#define SIGNAL_NOT_SUPPORTED      0x0080
									/* Returned if signal flags are not supported */
									/* This is used by NIFFindByKeyExtended when it */
									/* is talking to a pre-V4 server that does not */
									/* support signal flags for FindByKey */

/*	Mask that defines all "sharing conflicts", which are cases when
	the database or collection has changed out from under the user. */

#define SIGNAL_ANY_CONFLICT	(SIGNAL_DEFN_ITEM_MODIFIED | \
							SIGNAL_VIEW_ITEM_MODIFIED | \
							SIGNAL_INDEX_MODIFIED | \
							SIGNAL_UNREADLIST_MODIFIED | \
							SIGNAL_DATABASE_MODIFIED)

/*	Mask that defines all "sharing conflicts" except for SIGNAL_DATABASE_MODIFIED.
	This can be used in combination with SIGNAL_VIEW_TIME_RELATIVE to tell if
	the database or collection has truly changed out from under the user or if the
	view is a time-relative view which will NEVER be up-to-date.  SIGNAL_DATABASE_MODIFIED
	is always returned for a time-relative view to indicate that it is never up-to-date. */

#define SIGNAL_ANY_NONDATA_CONFLICT	(SIGNAL_DEFN_ITEM_MODIFIED | \
									SIGNAL_VIEW_ITEM_MODIFIED | \
									SIGNAL_INDEX_MODIFIED | \
									SIGNAL_UNREADLIST_MODIFIED)

/*	NIFFindByKey "find" flags */

#define FIND_PARTIAL			0x0001	/* Match only initial characters */
										/* ("T" matches "Tim") */
#define FIND_CASE_INSENSITIVE	0x0002	/* Case insensitive */
										/* ("tim" matches "Tim") */
#define	FIND_RETURN_DWORD		0x0004	/* Input/Output is DWORD COLLECTIONPOSITION */
#define FIND_ACCENT_INSENSITIVE	0x0008	/* Accent insensitive (ignore diacritical marks */
#define	FIND_UPDATE_IF_NOT_FOUND	0x0020 /* If key is not found, update collection */
										   /* and search again */

/* At most one of the following four flags should be specified */
#define	FIND_LESS_THAN			0x0040	/* Find last entry less than the key value */
#define	FIND_FIRST_EQUAL		0x0000	/* Find first entry equal to the key value (if more than one) */
#define	FIND_LAST_EQUAL			0x0080	/* Find last entry equal to the key value (if more than one) */
#define	FIND_GREATER_THAN 		0x00C0	/* Find first entry greater than the key value */
#define	FIND_EQUAL		 		0x0800	/* Qualifies LESS_THAN and GREATER_THAN to mean */
										/* LESS_THAN_OR_EQUAL and GREATER_THAN_OR_EQUAL */
#define	FIND_COMPARE_MASK		0x08C0	/* Bitmask of the comparison flags defined above */

#define FIND_RANGE_OVERLAP		0x0100	/* Overlapping ranges match, and values within a range match */
#define	FIND_RETURN_ANY_NON_CATEGORY_MATCH	0x0200
											/* Return First Match at bottom level of
											Categorized view (Doesn't have
											to be first of duplicates */
#define FIND_NONCATEGORY_ONLY	0x0400	/* Only match non-category entries */

/*	NIF public entry points */

STATUS LNPUBLIC		NIFOpenCollection (DBHANDLE hViewDB, DBHANDLE hDataDB,
									NOTEID ViewNoteID, WORD OpenFlags,
									HANDLE hUnreadList,
									HCOLLECTION far *rethCollection,
									NOTEHANDLE far *rethViewNote, UNID far *retViewUNID,
									HANDLE far *rethCollapsedList,
									HANDLE far *rethSelectedList);
STATUS LNPUBLIC		NIFCloseCollection (HCOLLECTION hCollection);
STATUS LNPUBLIC		NIFUpdateCollection (HCOLLECTION hCollection);

STATUS LNPUBLIC		NIFOpenCollectionWithUserNameList (DBHANDLE hViewDB, DBHANDLE hDataDB,
									NOTEID ViewNoteID, WORD OpenFlags,
									HANDLE hUnreadList,
									HCOLLECTION far *rethCollection,
									NOTEHANDLE far *rethViewNote, UNID far *retViewUNID,
									HANDLE far *rethCollapsedList,
									HANDLE far *rethSelectedList,
									HANDLE nameList);
STATUS LNPUBLIC		NIFReadEntries (HCOLLECTION hCollection, COLLECTIONPOSITION far *IndexPos,
									WORD SkipNavigator, DWORD SkipCount,
									WORD ReturnNavigator, DWORD ReturnCount,
									DWORD ReturnMask,
									HANDLE far *rethBuffer, WORD far *retBufferLength,
									DWORD far *retNumEntriesSkipped,
									DWORD far *retNumEntriesReturned,
									WORD far *retSignalFlags);

STATUS LNPUBLIC  NIFSetCollation(HCOLLECTION hCollection, WORD CollationNum);
STATUS LNPUBLIC  NIFGetCollation(HCOLLECTION hCollection, WORD *retCollationNum);


STATUS LNPUBLIC  NIFLocateNote (HCOLLECTION hCollection, COLLECTIONPOSITION far *IndexPos, NOTEID NoteID);
STATUS LNPUBLIC		NIFFindByKey (HCOLLECTION hCollection, void far *KeyBuffer,
									WORD FindFlags,
									COLLECTIONPOSITION far *retIndexPos,
									DWORD far *retNumMatches);
STATUS LNPUBLIC		NIFFindByName (HCOLLECTION hCollection, const char far *Name, WORD FindFlags,
									COLLECTIONPOSITION far *retIndexPos,
									DWORD far *retNumMatches);

STATUS LNPUBLIC		NIFFindDesignNote (DBHANDLE hFile, const char far *Name, WORD Class, NOTEID far *retNoteID);
#define NIFFindView(hFile,Name,retNoteID) 			  NIFFindDesignNoteExt(hFile,Name,NOTE_CLASS_VIEW, DFLAGPAT_VIEWS_AND_FOLDERS, retNoteID, 0)
#define NIFFindDesignNoteByName(hFile,Name,retNoteID) NIFFindDesignNote(hFile,Name,NOTE_CLASS_ALL,retNoteID) /* Only for V2 backward compatibility */

STATUS LNPUBLIC		NIFFindPrivateDesignNote (DBHANDLE hFile, const char far *Name, WORD Class, NOTEID far *retNoteID);
#define NIFFindPrivateView(hFile,Name,retNoteID) NIFFindPrivateDesignNote(hFile,Name,NOTE_CLASS_VIEW,retNoteID)
STATUS LNPUBLIC		NIFGetCollectionData (HCOLLECTION hCollection,
										  HANDLE far *rethCollData);

#define	FIND_DESIGN_NOTE_PARTIAL	1   /* Find design note with a partial match.  This means that
										when you are looking for "Inbox" it will also
										match on "($Inbox)".  And when you are looking
										for "All Escalated Bugs" it will match
										"QA\All Escalated Bugs"  */

STATUS LNPUBLIC		NIFFindDesignNoteExt (DBHANDLE hFile, const char far *Name, WORD Class, const char *pszFlagsPattern, NOTEID far *retNoteID, DWORD Options);
void LNPUBLIC	 NIFGetLastModifiedTime (HCOLLECTION hCollection,
										TIMEDATE far *retLastModifiedTime);

#ifdef __cplusplus
}
#endif

#endif


#if defined(OS400) && (__OS400_TGTVRM__ >= 510)
#pragma datamodel(pop)
#endif