jon@gaia.UUCP (Jonathan Corbet) (05/09/87)
Somebody recently asked about how one might quickly see if a DECnet node
is reachable. Below is some code which does just that. It uses the
(undocumented) netacp calls that were published in the Pageswapper last
year. Be warned: this stuff is undocumented, unsupported. It could break
at any new release of the system!
There are two files here, "reachable.c" and "nfbdef.h". The latter is a
little long, but I have modified it enough (mostly by adding structure
definitions) that I couldn't just say "get it from lib.mlb".
enjoy.
Jonathan Corbet
{seismo | hplabs | gatech}!hao!gaia!jon
{ucbvax | allegra | cbosgd}!nbires!gaia!jon
------- reachable.c ---------------------
/* 1/86 jc */
# include "nfbdef.h"
# include <iodef.h>
# include <stdio.h>
# define error(s) (((s) & 0x1) == 0)
reachable (node)
char *node;
/*
* Return TRUE iff the given node is reachable.
* NOTE: This routine relies on an undocumented interface to NETACP
* that is discussed in the January '86 Pageswapper.
*/
{
struct nfb nfb;
struct nfbkey key;
int chan = 0, status, len = 0, ef = 0;
short iosb[4];
char buf[1024];
int nfbd[2] = { sizeof (struct nfb), &nfb };
int keyd[2] = { sizeof (struct nfbkey), &key };
/*
* Set up the NFB.
*/
nfb.nfb$b_fct = NFB$C_FC_SHOW;
nfb.nfb$b_flags = NFB$M_MULT;
nfb.nfb$b_database = NFB$C_DB_NDI;
nfb.nfb$l_srch_key = NFB$C_NDI_REA;
nfb.nfb$b_oper = NFB$C_OP_EQL;
nfb.nfb$l_srch2_key = NFB$C_NDI_LOO;
nfb.nfb$b_oper2 = NFB$C_OP_NEQ;
nfb.nfb$b_mbz1 = 0;
nfb.nfb$w_cell_size = 0;
nfb.nfb$l_fldid[0] = NFB$C_NDI_NNA;
nfb.nfb$l_fldid[1] = NFB$C_ENDOFLIST;
/*
* Set up the match key.
*/
key.p4_count = 0;
key.srch = 1;
key.srch2 = 1;
key.start = 0;
/*
* Get a net channel.
*/
lib$get_ef (&ef);
status = sys$assign (descr ("_NET:"), &chan, 0, 0);
if (error (status))
syserr (status, "Assign to net");
/*
* Do the qio.
*/
status = sys$qiow (ef, chan, IO$_ACPCONTROL, iosb, 0, 0,
nfbd, keyd, &len, descr_n (buf, 1024), 0, 0);
if (error (status))
syserr (status, "QIO status");
else if error (iosb[0])
syserr (iosb[0], "QIO iosb");
/*
* Release our resources.
*/
sys$dassgn (chan);
lib$free_ef (&ef);
/*
* See if the node is reachable.
*/
return (is_reachable (buf, len, node));
}
is_reachable (buf, len, node)
char *buf;
int len;
char *node;
/*
* Pass through the given buffer and see if the given node appears therein.
*/
{
int length;
char *cp = buf;
/*
* Pass through the structure.
*/
while ((cp - buf) < len)
{
/*
* The first two bytes are the length of the node name. Sometimes
* one sees a length of zero, caused by nodes in the same area for
* which no name has been set.
*/
if (length = * (short *) cp)
{
if (! strncmp (node, cp + 2, length))
return (TRUE);
}
/*
* Advance to the next name.
*/
cp += length + 2;
}
return (FALSE);
}
------- nfbdef.h -----------------------
/*
$NFBDEF symbol definitions from LIB.MLB
*/
/*
* My own version of this file, with comments and structure definitions
* added. jc.
*/
# define NFB$B_DATABASE 0X2
# define NFB$B_FCT 0X0
# define NFB$B_FLAGS 0X1
# define NFB$B_MBZ1 0XD
# define NFB$B_OPER 0X3
# define NFB$B_OPER2 0XC
# define NFB$B_STR_TEXT 0X2
# define NFB$C_AJI_ADD 0X13010010
# define NFB$C_AJI_BLO 0X13010013
# define NFB$C_AJI_CIR 0X13020042
# define NFB$C_AJI_COL 0X13020040
# define NFB$C_AJI_LCK 0X13000001
# define NFB$C_AJI_LIT 0X13010012
# define NFB$C_AJI_NNA 0X13020041
# define NFB$C_AJI_REA 0X13000002
# define NFB$C_AJI_RPR 0X13010014
# define NFB$C_AJI_TYP 0X13010011
# define NFB$C_ARI_ADD 0X14010010
# define NFB$C_ARI_COL 0X14020040
# define NFB$C_ARI_DCO 0X14010011
# define NFB$C_ARI_DHO 0X14010012
# define NFB$C_ARI_DLI 0X14020041
# define NFB$C_ARI_LCK 0X14000001
# define NFB$C_ARI_NND 0X14010013
# define NFB$C_ARI_REA 0X14000002
# define NFB$C_CRI_ACB 0X4010029
# define NFB$C_CRI_ACI 0X401002A
# define NFB$C_CRI_BBT 0X4010025
# define NFB$C_CRI_BLK 0X4000003
# define NFB$C_CRI_BLO 0X4010017
# define NFB$C_CRI_CHN 0X4010021
# define NFB$C_CRI_CHR 0X4020043
# define NFB$C_CRI_CNT 0X4020044
# define NFB$C_CRI_COL 0X4020040
# define NFB$C_CRI_COS 0X4010018
# define NFB$C_CRI_CTA 0X4010011
# define NFB$C_CRI_DEVNAM 0X402004A
# define NFB$C_CRI_DLM 0X4000005
# define NFB$C_CRI_DRT 0X4010036
# define NFB$C_CRI_DTE 0X4020049
# define NFB$C_CRI_DTH 0X4010031
# define NFB$C_CRI_DYB 0X401002E
# define NFB$C_CRI_DYI 0X401002F
# define NFB$C_CRI_DYT 0X4010030
# define NFB$C_CRI_HET 0X4010019
# define NFB$C_CRI_IAB 0X401002B
# define NFB$C_CRI_IAI 0X401002C
# define NFB$C_CRI_IAT 0X401002D
# define NFB$C_CRI_LCK 0X4000001
# define NFB$C_CRI_LCT 0X4010015
# define NFB$C_CRI_LIT 0X401001A
# define NFB$C_CRI_LOO 0X4020046
# define NFB$C_CRI_MBL 0X4010022
# define NFB$C_CRI_MRB 0X4010027
# define NFB$C_CRI_MRC 0X401001B
# define NFB$C_CRI_MRT 0X4010034
# define NFB$C_CRI_MST 0X4010032
# define NFB$C_CRI_MTR 0X4010028
# define NFB$C_CRI_MWI 0X4010023
# define NFB$C_CRI_NAM 0X4020041
# define NFB$C_CRI_NUM 0X4020048
# define NFB$C_CRI_OWPID 0X4010010
# define NFB$C_CRI_P2P 0X4020045
# define NFB$C_CRI_PLS 0X401001E
# define NFB$C_CRI_PNA 0X4010016
# define NFB$C_CRI_PNN 0X4020047
# define NFB$C_CRI_POL 0X401001D
# define NFB$C_CRI_RCT 0X401001C
# define NFB$C_CRI_RPR 0X4010035
# define NFB$C_CRI_SER 0X4000002
# define NFB$C_CRI_SRV 0X4010012
# define NFB$C_CRI_STA 0X4010013
# define NFB$C_CRI_SUB 0X4010014
# define NFB$C_CRI_TRI 0X4010024
# define NFB$C_CRI_TRT 0X4010026
# define NFB$C_CRI_TYP 0X4010020
# define NFB$C_CRI_USE 0X401001F
# define NFB$C_CRI_VER 0X4000004
# define NFB$C_CRI_VMSNAM 0X4020042
# define NFB$C_CRI_XPT 0X4010033
# define NFB$C_CTX_SIZE 0X40
# define NFB$C_DB_AJI 0X13 /* Adjacency information */
# define NFB$C_DB_ARI 0X14 /* Area information */
# define NFB$C_DB_CRI 0X4 /* Circuit information */
# define NFB$C_DB_EFI 0X6 /* Event logging filters */
# define NFB$C_DB_ESI 0X7 /* Event logging sinks */
# define NFB$C_DB_LLI 0X8 /* Logical links */
# define NFB$C_DB_LNI 0X1 /* Local node information */
# define NFB$C_DB_MAX 0X1B
# define NFB$C_DB_NDI 0X2 /* Common node information */
# define NFB$C_DB_OBI 0X3 /* Object information */
# define NFB$C_DB_PLI 0X5 /* Line information */
# define NFB$C_DB_PSI1 0X15
# define NFB$C_DB_PSI2 0X16
# define NFB$C_DB_PSI3 0X17
# define NFB$C_DB_PSI4 0X18
# define NFB$C_DB_PSI5 0X19
# define NFB$C_DB_SDI 0X1A /* Service (DLE) Information */
# define NFB$C_DB_SPI 0X12 /* Server process info */
# define NFB$C_DB_XAI 0X1B /* X.25 access database */
# define NFB$C_DB_XD5 0XD
# define NFB$C_DB_XD9 0XF
# define NFB$C_DB_XDI 0XB
# define NFB$C_DB_XGI 0XA
# define NFB$C_DB_XNI 0X9
# define NFB$C_DB_XS5 0XC
# define NFB$C_DB_XS9 0XE
# define NFB$C_DB_XTI 0X10
# define NFB$C_DB_XTT 0X11
# define NFB$C_DB_XXX 0X1C
# define NFB$C_DECLNAME 0X15 /* Declare name */
# define NFB$C_DECLOBJ 0X16 /* Declare object */
# define NFB$C_DECLSERV 0X17 /* Declare server avail */
# define NFB$C_EFI_B1 0X6010012
# define NFB$C_EFI_B2 0X6010013
# define NFB$C_EFI_COL 0X6020040
# define NFB$C_EFI_EVE 0X6020041
# define NFB$C_EFI_LCK 0X6000001
# define NFB$C_EFI_SB1 0X6020042
# define NFB$C_EFI_SB2 0X6020043
# define NFB$C_EFI_SB3 0X6020044
# define NFB$C_EFI_SIN 0X6010010
# define NFB$C_EFI_SP1 0X6010011
# define NFB$C_ENDOFLIST 0X0
# define NFB$C_ESI_B1 0X7010013
# define NFB$C_ESI_B2 0X7010014
# define NFB$C_ESI_COL 0X7020040
# define NFB$C_ESI_LCK 0X7000001
# define NFB$C_ESI_LNA 0X7020041
# define NFB$C_ESI_SB1 0X7020042
# define NFB$C_ESI_SB2 0X7020043
# define NFB$C_ESI_SB3 0X7020044
# define NFB$C_ESI_SNK 0X7010010
# define NFB$C_ESI_SP1 0X7010012
# define NFB$C_ESI_STA 0X7010011
# define NFB$C_FC_CLEAR 0X24 /* Clear field values */
# define NFB$C_FC_DELETE 0X21 /* Delete an entry from db */
# define NFB$C_FC_LOOP 0X26 /* (PSI) loop x.25 lines */
# define NFB$C_FC_MAX 0X26
# define NFB$C_FC_SET 0X23 /* Set/modify field values */
# define NFB$C_FC_SHOW 0X22 /* Return specified info */
# define NFB$C_FC_ZERCOU 0X25 /* Zero counters */
# define NFB$C_LENGTH 0X10
# define NFB$C_LLI_CNT 0X8010018
# define NFB$C_LLI_COL 0X8020040
# define NFB$C_LLI_DLY 0X8010010
# define NFB$C_LLI_IPID 0X8010016
# define NFB$C_LLI_LCK 0X8000001
# define NFB$C_LLI_LLN 0X8010012
# define NFB$C_LLI_PID 0X8010015
# define NFB$C_LLI_PNA 0X8010014
# define NFB$C_LLI_PNN 0X8020043
# define NFB$C_LLI_PRC 0X8020042
# define NFB$C_LLI_RID 0X8020044
# define NFB$C_LLI_RLN 0X8010013
# define NFB$C_LLI_STA 0X8010011
# define NFB$C_LLI_USR 0X8020041
# define NFB$C_LLI_XWB 0X8010017
# define NFB$C_LNI_ACL 0X1010011
# define NFB$C_LNI_ADD 0X1010010
# define NFB$C_LNI_ALI 0X1010033
# define NFB$C_LNI_AMC 0X1010030
# define NFB$C_LNI_AMH 0X1010031
# define NFB$C_LNI_BRT 0X101002C
# define NFB$C_LNI_BUS 0X1010024
# define NFB$C_LNI_CNT 0X1020042
# define NFB$C_LNI_COL 0X1020040
# define NFB$C_LNI_DAC 0X1010028
# define NFB$C_LNI_DFA 0X1010016
# define NFB$C_LNI_DPX 0X1010029
# define NFB$C_LNI_DWE 0X1010017
# define NFB$C_LNI_ETY 0X101001A
# define NFB$C_LNI_IAT 0X1010018
# define NFB$C_LNI_IDE 0X1020043
# define NFB$C_LNI_ITI 0X1010012
# define NFB$C_LNI_LCK 0X1000001
# define NFB$C_LNI_LPC 0X1010025
# define NFB$C_LNI_LPD 0X1010027
# define NFB$C_LNI_LPH 0X101002B
# define NFB$C_LNI_LPL 0X1010026
# define NFB$C_LNI_MAD 0X101001E
# define NFB$C_LNI_MAR 0X101002D
# define NFB$C_LNI_MBE 0X101002E
# define NFB$C_LNI_MBR 0X101002F
# define NFB$C_LNI_MBU 0X1010023
# define NFB$C_LNI_MCO 0X1010020
# define NFB$C_LNI_MHO 0X1010021
# define NFB$C_LNI_MLK 0X1010015
# define NFB$C_LNI_MLN 0X101001F
# define NFB$C_LNI_MVE 0X1020044
# define NFB$C_LNI_MVI 0X1010022
# define NFB$C_LNI_NAM 0X1020041
# define NFB$C_LNI_NVE 0X1020045
# define NFB$C_LNI_OTI 0X1010013
# define NFB$C_LNI_PHA 0X1020047
# define NFB$C_LNI_PIQ 0X101002A
# define NFB$C_LNI_RFA 0X1010019
# define NFB$C_LNI_RSI 0X101001C
# define NFB$C_LNI_RTI 0X101001B
# define NFB$C_LNI_RVE 0X1020046
# define NFB$C_LNI_SAD 0X101001D
# define NFB$C_LNI_SBS 0X1010032
# define NFB$C_LNI_STA 0X1010014
# define NFB$C_LNI_SUP 0X1000002
# define NFB$C_LOGEVENT 0X1C
/*
* Node information that can be gotten.
*/
# define NFB$C_NDI_ACC 0X2010020 /* L: Access switch */
# define NFB$C_NDI_ACL 0X2010014 /* L: Active links */
# define NFB$C_NDI_ADD 0X2010012 /* L: address */
# define NFB$C_NDI_CNT 0X2020042 /* S: Counters */
# define NFB$C_NDI_COL 0X2020040 /* S: Collating fields */
# define NFB$C_NDI_CPU 0X201001A /* L: CPU type */
# define NFB$C_NDI_CTA 0X2010011 /* L: Due time for counters */
# define NFB$C_NDI_CTI 0X2010013 /* L: Counter timer */
# define NFB$C_NDI_DAD 0X201001C /* L: Dump address */
# define NFB$C_NDI_DCO 0X2010017 /* L: Destination cost */
# define NFB$C_NDI_DCT 0X201001D /* L: Dump count */
# define NFB$C_NDI_DEL 0X2010015 /* L: Delay */
# define NFB$C_NDI_DFL 0X2020056 /* S: Diagnostic load file */
# define NFB$C_NDI_DHO 0X2010018 /* L: Destination hops */
# define NFB$C_NDI_DLI 0X202004D /* S: Destination line */
# define NFB$C_NDI_DTY 0X2010016 /* L: Destination type */
# define NFB$C_NDI_DUM 0X202004A /* S: Dump file */
# define NFB$C_NDI_HAC 0X2020041 /* S: Node addr/loopline */
# define NFB$C_NDI_HWA 0X2020057 /* S: Hardware NI addr */
# define NFB$C_NDI_IHO 0X201001F /* L: Host */
# define NFB$C_NDI_LCK 0X2000001 /* B: Parameters are locked */
# define NFB$C_NDI_LOA 0X2020046 /* S: Load file */
# define NFB$C_NDI_LOO 0X2000002 /* B: Loopback node */
# define NFB$C_NDI_LPA 0X2020058 /* S: Loop assist NI addr */
# define NFB$C_NDI_NAC 0X2020052 /* S: Nonpriv user account */
# define NFB$C_NDI_NLI 0X202004C /* S: Loopback line */
# define NFB$C_NDI_NNA 0X2020043 /* S: Node name */
# define NFB$C_NDI_NND 0X2010022 /* L: Next node address */
# define NFB$C_NDI_NNN 0X2020059 /* S: Next node name */
# define NFB$C_NDI_NPW 0X2020053 /* S: Nonpriv password */
# define NFB$C_NDI_NUS 0X2020051 /* S: Nonpriv user id */
# define NFB$C_NDI_OHO 0X201001E /* L: Host */
# define NFB$C_NDI_PAC 0X202004F /* S: Priveleged account */
# define NFB$C_NDI_PPW 0X2020050 /* S: Priveleged password */
# define NFB$C_NDI_PRX 0X2010021 /* L: Proxy parameter */
# define NFB$C_NDI_PUS 0X202004E /* S: Priveleged user ID */
# define NFB$C_NDI_REA 0X2000003 /* B: Node is reachable */
# define NFB$C_NDI_RPA 0X2020054 /* S: Receive password */
# define NFB$C_NDI_SDU 0X202004B /* S: Secondary dumper */
# define NFB$C_NDI_SDV 0X2010019 /* L: Service device */
# define NFB$C_NDI_SID 0X2020049 /* S: Software ID */
# define NFB$C_NDI_SLI 0X2020044 /* S: Service line */
# define NFB$C_NDI_SLO 0X2020047 /* S: Secondary loader */
# define NFB$C_NDI_SNV 0X2010023 /* L: Service node version */
# define NFB$C_NDI_SPA 0X2020045 /* S: Service password */
# define NFB$C_NDI_STY 0X201001B /* L: Software type */
# define NFB$C_NDI_TAD 0X2010010 /* L: Local node address */
# define NFB$C_NDI_TLO 0X2020048 /* S: Tertiary loader */
# define NFB$C_NDI_TPA 0X2020055 /* S: Transmit password */
# define NFB$C_OBI_ACC 0X3020047
# define NFB$C_OBI_CHN 0X3010013
# define NFB$C_OBI_COL 0X3020040
# define NFB$C_OBI_FID 0X3020045
# define NFB$C_OBI_HPR 0X3010011
# define NFB$C_OBI_IAC 0X3020043
# define NFB$C_OBI_LCK 0X3000001
# define NFB$C_OBI_LPR 0X3010010
# define NFB$C_OBI_NAM 0X3020044
# define NFB$C_OBI_NUM 0X3010014
# define NFB$C_OBI_PID 0X3010015
# define NFB$C_OBI_PRX 0X3010016
# define NFB$C_OBI_PSW 0X3020048
# define NFB$C_OBI_SET 0X3000002
# define NFB$C_OBI_SFI 0X3020042
# define NFB$C_OBI_UCB 0X3010012
# define NFB$C_OBI_USR 0X3020046
# define NFB$C_OBI_ZNA 0X3020041
/*
* Comparison operation codes.
*/
# define NFB$C_OP_EQL 0X0 /* Equal to */
# define NFB$C_OP_FNDMAX 0X5 /* */
# define NFB$C_OP_FNDMIN 0X4
# define NFB$C_OP_FNDPOS 0X6
# define NFB$C_OP_GTRU 0X1 /* Greater than, unsigned */
# define NFB$C_OP_LSSU 0X2 /* Less than, unsigned */
# define NFB$C_OP_MAXFCT 0X3
# define NFB$C_OP_MAXINT 0X6
# define NFB$C_OP_NEQ 0X3 /* Not equal */
# define NFB$C_PLI_BFN 0X501001E
# define NFB$C_PLI_BFS 0X5010027
# define NFB$C_PLI_BUS 0X501001F
# define NFB$C_PLI_CHR 0X5020043
# define NFB$C_PLI_CLO 0X5000005
# define NFB$C_PLI_CNT 0X5020044
# define NFB$C_PLI_COL 0X5020040
# define NFB$C_PLI_CON 0X5000004
# define NFB$C_PLI_CTA 0X5010010
# define NFB$C_PLI_DDT 0X501001B
# define NFB$C_PLI_DEVNAM 0X5020047
# define NFB$C_PLI_DLT 0X501001C
# define NFB$C_PLI_DUP 0X5000003
# define NFB$C_PLI_EPT 0X5010026
# define NFB$C_PLI_HTI 0X5010016
# define NFB$C_PLI_HWA 0X5020046
# define NFB$C_PLI_LCK 0X5000001
# define NFB$C_PLI_LCT 0X5010013
# define NFB$C_PLI_LPC 0X5010023
# define NFB$C_PLI_LPD 0X5010025
# define NFB$C_PLI_LPL 0X5010024
# define NFB$C_PLI_MBL 0X5010017
# define NFB$C_PLI_MCD 0X5020045
# define NFB$C_PLI_MOD 0X5010022
# define NFB$C_PLI_MRT 0X5010018
# define NFB$C_PLI_MWI 0X5010019
# define NFB$C_PLI_NAM 0X5020041
# define NFB$C_PLI_PLVEC 0X5010020
# define NFB$C_PLI_PRO 0X5010014
# define NFB$C_PLI_RTT 0X5010021
# define NFB$C_PLI_SER 0X5000002
# define NFB$C_PLI_SLT 0X501001A
# define NFB$C_PLI_SRT 0X501001D
# define NFB$C_PLI_STA 0X5010011
# define NFB$C_PLI_STI 0X5010015
# define NFB$C_PLI_SUB 0X5010012
# define NFB$C_PLI_VMSNAM 0X5020042
# define NFB$C_READEVENT 0X1D
# define NFB$C_SDI_CIR 0X1A020041
# define NFB$C_SDI_COL 0X1A020040
# define NFB$C_SDI_LCK 0X1A000001
# define NFB$C_SDI_PHA 0X1A020042
# define NFB$C_SDI_PID 0X1A010011
# define NFB$C_SDI_PRC 0X1A020043
# define NFB$C_SDI_SUB 0X1A010010
# define NFB$C_SPI_ACS 0X12020041
# define NFB$C_SPI_CHN 0X12010012
# define NFB$C_SPI_COL 0X12020040
# define NFB$C_SPI_IRP 0X12010011
# define NFB$C_SPI_LCK 0X12000001
# define NFB$C_SPI_NCB 0X12020044
# define NFB$C_SPI_PID 0X12010010
# define NFB$C_SPI_PNM 0X12020045
# define NFB$C_SPI_PRL 0X12000002
# define NFB$C_SPI_RID 0X12020042
# define NFB$C_SPI_RNA 0X12010013
# define NFB$C_SPI_SFI 0X12020043
# define NFB$C_TYP_BIT 0X0
# define NFB$C_TYP_L 0X1
# define NFB$C_TYP_LNG 0X1
# define NFB$C_TYP_S 0X2
# define NFB$C_TYP_STR 0X2
# define NFB$C_TYP_V 0X0
# define NFB$C_WILDCARD 0X1
# define NFB$C_XAI_ACC 0X1B020044
# define NFB$C_XAI_COL 0X1B020040
# define NFB$C_XAI_LCK 0X1B000001
# define NFB$C_XAI_NDA 0X1B010010
# define NFB$C_XAI_NET 0X1B020041
# define NFB$C_XAI_NOD 0X1B020045
# define NFB$C_XAI_PSW 0X1B020043
# define NFB$C_XAI_USR 0X1B020042
# define NFB$C_XD5_ACC 0XD02004A
# define NFB$C_XD5_CMK 0XD020042
# define NFB$C_XD5_COL 0XD020040
# define NFB$C_XD5_CVL 0XD020043
# define NFB$C_XD5_DST 0XD020041
# define NFB$C_XD5_FIL 0XD020047
# define NFB$C_XD5_GRP 0XD020044
# define NFB$C_XD5_LCK 0XD000001
# define NFB$C_XD5_NOD 0XD010012
# define NFB$C_XD5_NUM 0XD020045
# define NFB$C_XD5_OBJ 0XD020046
# define NFB$C_XD5_PRI 0XD010010
# define NFB$C_XD5_PSW 0XD020049
# define NFB$C_XD5_SAD 0XD010011
# define NFB$C_XD5_USR 0XD020048
# define NFB$C_XD9_ACC 0XF02004A
# define NFB$C_XD9_CMK 0XF020042
# define NFB$C_XD9_COL 0XF020040
# define NFB$C_XD9_CVL 0XF020043
# define NFB$C_XD9_DST 0XF020041
# define NFB$C_XD9_FIL 0XF020047
# define NFB$C_XD9_GRP 0XF020044
# define NFB$C_XD9_LCK 0XF000001
# define NFB$C_XD9_NOD 0XF010012
# define NFB$C_XD9_NUM 0XF020045
# define NFB$C_XD9_OBJ 0XF020046
# define NFB$C_XD9_PRI 0XF010010
# define NFB$C_XD9_PSW 0XF020049
# define NFB$C_XD9_SAD 0XF010011
# define NFB$C_XD9_USR 0XF020048
# define NFB$C_XDI_ACH 0XB010010
# define NFB$C_XDI_ASW 0XB010011
# define NFB$C_XDI_CHN 0XB020042
# define NFB$C_XDI_CNT 0XB020045
# define NFB$C_XDI_COL 0XB020040
# define NFB$C_XDI_CTM 0XB010012
# define NFB$C_XDI_DTE 0XB020041
# define NFB$C_XDI_LCK 0XB000001
# define NFB$C_XDI_LIN 0XB020043
# define NFB$C_XDI_MCH 0XB010013
# define NFB$C_XDI_MCI 0XB010016
# define NFB$C_XDI_NET 0XB020044
# define NFB$C_XDI_STA 0XB010014
# define NFB$C_XDI_SUB 0XB010015
# define NFB$C_XGI_COL 0XA020040
# define NFB$C_XGI_GDT 0XA020042
# define NFB$C_XGI_GNM 0XA010010
# define NFB$C_XGI_GRP 0XA020041
# define NFB$C_XGI_GTY 0XA010011
# define NFB$C_XGI_LCK 0XA000001
# define NFB$C_XNI_CAT 0X9010010
# define NFB$C_XNI_CLT 0X9010011
# define NFB$C_XNI_COL 0X9020040
# define NFB$C_XNI_DBL 0X9010012
# define NFB$C_XNI_DWI 0X9010013
# define NFB$C_XNI_LCK 0X9000001
# define NFB$C_XNI_MBL 0X9010014
# define NFB$C_XNI_MCL 0X9010015
# define NFB$C_XNI_MNS 0X9000002
# define NFB$C_XNI_MRS 0X9010016
# define NFB$C_XNI_MST 0X9010017
# define NFB$C_XNI_MWI 0X9010018
# define NFB$C_XNI_NET 0X9020041
# define NFB$C_XNI_RST 0X9010019
# define NFB$C_XNI_STT 0X901001A
# define NFB$C_XS5_ACI 0XC010012
# define NFB$C_XS5_CNT 0XC020041
# define NFB$C_XS5_COL 0XC020040
# define NFB$C_XS5_CTM 0XC010013
# define NFB$C_XS5_LCK 0XC000001
# define NFB$C_XS5_MCI 0XC010010
# define NFB$C_XS5_STA 0XC010011
# define NFB$C_XS9_ACI 0XE010012
# define NFB$C_XS9_CNT 0XE020041
# define NFB$C_XS9_COL 0XE020040
# define NFB$C_XS9_CTM 0XE010013
# define NFB$C_XS9_LCK 0XE000001
# define NFB$C_XS9_MCI 0XE010010
# define NFB$C_XS9_STA 0XE010011
# define NFB$C_XTI_BFZ 0X10010011
# define NFB$C_XTI_COL 0X10020040
# define NFB$C_XTI_CPL 0X10010012
# define NFB$C_XTI_FNM 0X10020041
# define NFB$C_XTI_LCK 0X10000001
# define NFB$C_XTI_MBF 0X10010014
# define NFB$C_XTI_MBK 0X10010013
# define NFB$C_XTI_MVR 0X10010015
# define NFB$C_XTI_STA 0X10010010
# define NFB$C_XTT_COL 0X11020040
# define NFB$C_XTT_CPS 0X11010011
# define NFB$C_XTT_LCK 0X11000001
# define NFB$C_XTT_TPT 0X11020041
# define NFB$C_XTT_TST 0X11010010
# define NFB$K_LENGTH 0X10
# define NFB$L_BIT_VALUE 0X0
# define NFB$L_FLDID 0X10
# define NFB$L_LNG_VALUE 0X0
# define NFB$L_PARAM_ID 0X0
# define NFB$L_SRCH2_KEY 0X8
# define NFB$L_SRCH_KEY 0X4
# define NFB$M_DB 0XFF000000
# define NFB$M_ERRUPD 0X1
# define NFB$M_INX 0XFFFF
# define NFB$M_MULT 0X2
# define NFB$M_NOCTX 0X4
# define NFB$M_SPARE 0XFC0000
# define NFB$M_TYP 0X30000
# define NFB$S_DB 0X8
# define NFB$S_INX 0X10
# define NFB$S_SPARE 0X6
# define NFB$S_TYP 0X2
# define NFB$V_DB 0X18
# define NFB$V_ERRUPD 0X0
# define NFB$V_INX 0X0
# define NFB$V_MULT 0X1
# define NFB$V_NOCTX 0X2
# define NFB$V_SPARE 0X12
# define NFB$V_TYP 0X10
# define NFB$W_CELL_SIZE 0XE
# define NFB$W_STR_COUNT 0X0
# define NFB$_ERR_CELL 0X9
# define NFB$_ERR_DB 0X2
# define NFB$_ERR_FCT 0X1
# define NFB$_ERR_FLAGS 0XE
# define NFB$_ERR_OPER 0XA
# define NFB$_ERR_OPER2 0XD
# define NFB$_ERR_P1 0X3
# define NFB$_ERR_P2 0X4
# define NFB$_ERR_P3 0X5
# define NFB$_ERR_P4 0X6
# define NFB$_ERR_P5 0X7
# define NFB$_ERR_P6 0X8
# define NFB$_ERR_SRCH 0XB
# define NFB$_ERR_SRCH2 0XC
/*
* The NFB definition.
*/
# define NFB_RQST 40
struct nfb
{
unsigned char nfb$b_fct;
unsigned char nfb$b_flags;
unsigned char nfb$b_database;
unsigned char nfb$b_oper;
unsigned long nfb$l_srch_key;
unsigned long nfb$l_srch2_key;
unsigned char nfb$b_oper2;
unsigned char nfb$b_mbz1;
unsigned short int nfb$w_cell_size;
unsigned long int nfb$l_fldid[NFB_RQST];
};
/*
* The match key structure.
*/
struct nfbkey
{
unsigned int p4_count;
unsigned int srch;
unsigned int srch2;
unsigned short start;
unsigned char ctx[NFB$C_CTX_SIZE];
};
--
Jonathan Corbet
{seismo | hplabs | gatech}!hao!gaia!jon
{ucbvax | allegra | cbosgd}!nbires!gaia!jon