Compile Insert IDX_SETS.EQU
!
*   $INSERT record for R/BASIC callers of the IDX_SETS function
*
*
*   IDX_SETS is a function that performs union, intersection and difference
*     of delimited sets of row data.  The function has 9 calling modes that
*     allow it to create, add data to, intersect, union, differnce, extract
*     data from, and clear sets.  The parameters for each calling mode are
*     specific to the calling mode, but basically the use of IDX_SETS is:
*
*     return_parm = IDX_SETS(mode, parm_1,...parm_n)
!
* MrC   06-20-16  Added header guards
* rjc   05-21-09  Copied to SYSPROCS
!
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#ifndef _IDX_SETS_EQU_
#define _IDX_SETS_EQU_
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
!
*   Calling modes
!
EQU INIT_SET$           TO  1          ;* Initializes a set returning a
                                        *  set_handle (a positive integer) or
                                        *  an error code (a negative integer).
                                        *  Parameters are: the data, the
                                        *  "specification", and the map

EQU ADD_TO_SET$         TO  2          ;* Adds data to an existing set.  Returns
                                        *  0 on successful completion or an
                                        *  an error code (a negative integer).
                                        *  Parameters are: the data, and the
                                        *  handle of the set to add to

EQU UNION_SETS$         TO  3          ;* Performs the union of two sets
                                        *  returning a set_handle (a positive
                                        *  integer) or an error code (a
                                        *  negative integer).
                                        *  Parameters are: the 1st handle, the
                                        *  2nd handle, and the union spec

EQU INTERSECT_SETS$     TO  4          ;* Performs the intersection of two
                                        *  sets returning a set_handle (a
                                        *  positive integer) or an error code
                                        *  (a negative integer).
                                        *  Parameters are: the 1st handle, the
                                        *  2nd handle, and the intersect spec

EQU DIFFERENCE_SETS$    TO  5          ;* Performs the difference of two
                                        *  sets returning a set_handle (a
                                        *  positive integer) or an error code
                                        *  (a negative integer).
                                        *  Parameters are: the 1st handle, the
                                        *  2nd handle, and the intersect spec

EQU RESET_EXTRACT$      TO  6          ;* Sets the extract parameters (restart
                                        *  the extract or set for desc. extract)
                                        *  Parameters are: the handle, and
                                        *  a reset specification

EQU EXTRACT_FROM_SET$   TO  7          ;* Extracts row data from a set.  Returns
                                        *  1 if more data exists in the set, 0
                                        *  if all data has been extracted, or
                                        *  an error code (a negative integer).
                                        *  Parameter is: the handle.  A 3rd
                                        *  variable is passed, it is filled
                                        *  with data by Set_Lib on "no error".

EQU SET_INFO$           TO  8          ;* Reports data about a set.
                                        *  Parameter is: the handle.  Set_Lib
                                        *  returns the count of all rows in the
                                        *  3rd variable, the count of index
                                        *  rows in the 4th variable and the
                                        *  MODEFLAGS variable from the handle
                                        *  in the 5th variable.

EQU CLEAR_SET$          TO  9          ;* Clears a set_handle from the library's
                                        *  storage.  Returns 0 always.

!
*  Error codes
!

EQU ERR_BAD_MODE$       TO -1          ;* Returned if calling mode is not a
                                        *  positive integer >= 1 and <= 9.
EQU ERR_OUT_OF_HANDLES$ TO -2          ;* IDX_SETS supports up to 7 active sets.
                                        *  This error is returned when modes
                                        *  1, 3, or 4 cannot create a necessary
                                        *  set.  Clear and recall.
EQU ERR_BAD_MAP$        TO -3          ;* Returned by mode 1 when the map to a
                                        *  set is bad.
EQU ERR_BAD_SET_STR$    TO -4          ;* Returned by modes 1 and 2 when the
                                        *  set data passed is corrupt (missing
                                        *  a trailing record mark).
EQU ERR_FILE_IO$        TO -5          ;* Returned by modes 1, 2, 3, 4, and 5
                                        *  if an error occurs in support file
                                        *  I/O.  There is nothing you can do
                                        *  at this point but blow away the set
                                        *  and start again. The most common
                                        *  sources for this error are: 1) the
                                        *  user's sort path has become corrupt;
                                        *  and 2) the user is out of disk space.
EQU ERR_OUT_OF_MEM$     TO -6          ;* Returned by modes 1, 3, 4 or 5 when
                                        *  not enough memory for operation.
EQU ERR_BAD_HANDLE$     TO -7          ;* Returned by modes 2, 3, 4, 5 when a
                                        *  handle parameter is no good.
EQU ERR_BAD_SRC_HANDLE$ TO -8          ;* Returned by modes 2, 3, 4, 5 when a
                                        *  source handle parameter is no good.
EQU ERR_BAD_TGT_HANDLE$ TO -9          ;* Returned by modes 2, 3, 4, 5 when a
                                        *  target handle parameter is no good.

EQU ERR_NULL_SET$       TO -20         ;* Currently not returned by Set_Lib but
                                        *  used by "wrap around" R/Basic code to
                                        *  indicate that the set is NULL (no rows
                                        *  match requested criteria).


EQU IS_MORE_ROWS$       TO  1          ;* Returned by extract when more rows
                                        *  exist in the set than can be returned
                                        *  by the current call to IDX_SETS.
EQU IS_NO_MORE_ROWS$    TO  0          ;* Returned by extract when all rows
                                        *  have been returned from the set.

EQU IS_ERR_NONE$        TO  0

!
* Intialization specification equates
!
EQU IS_NULL_SPEC$       TO  0          ;* No user specification
EQU IS_SORTED$          TO  2          ;* User set string is already sorted
EQU IS_UNIQUE$          TO  4          ;* All set items in the user string are
                                        *  unique

!
* Extraction specification equates
!
EQU IS_DESC_EXT$        TO  1
EQU IS_RESET_EXT$       TO  2

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#endif
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
