/*
 * %W% %G% CERN CN-SW/DC Frederic Hemmer
 */

/*      vms.h   VMS peculiarities                                       */

#ifndef _VMS_H_INCLUDED_
#define _VMS_H_INCLUDED_

#if defined(vms)

#ifndef IO$S_FCODE
#define IO$S_FCODE      6
#endif  IO$S_FCODE

/*
 *      Internet I/O Definitions!
 */

#define IO$_SEND        (IO$_WRITEVBLK)
#define IO$_RECEIVE     (IO$_READVBLK)
#define IO$_SOCKET      (IO$_ACCESS | (0 << IO$S_FCODE))
#define IO$_BIND        (IO$_ACCESS | (1 << IO$S_FCODE))
#define IO$_LISTEN      (IO$_ACCESS | (2 << IO$S_FCODE))
#define IO$_ACCEPT      (IO$_ACCESS | (3 << IO$S_FCODE))
#define IO$_CONNECT     (IO$_ACCESS | (4 << IO$S_FCODE))
#define IO$_SETSOCKOPT  (IO$_ACCESS | (5 << IO$S_FCODE))
#define IO$_GETSOCKOPT  (IO$_ACCESS | (6 << IO$S_FCODE))
#define IO$_SOCKETADDR  (IO$_ACCESS | (7 << IO$S_FCODE)) /* OBSOLETE */
#define IO$_IOCTL       (IO$_ACCESS | (8 << IO$S_FCODE))
#define IO$_PIPE        (IO$_ACCESS | (9 << IO$S_FCODE))
#define IO$_ACCEPT_WAIT (IO$_ACCESS | (10<< IO$S_FCODE))
#define IO$_NETWORK_PTY (IO$_ACCESS | (11<< IO$S_FCODE))
#define IO$_SHUTDOWN    (IO$_ACCESS | (12<< IO$S_FCODE))
#define IO$_GETSOCKNAME (IO$_ACCESS | (13 << IO$S_FCODE))
#define IO$_SOCKETPAIR  (IO$_ACCESS | (14 << IO$S_FCODE))
#define IO$_GETPEERNAME (IO$_ACCESS | (15 << IO$S_FCODE))

#define close(x)        socket_close(x)

#endif /* vms */

#define DN_MAXADDL      2         /* max size of DECnet address         */
#define DN_MAXNAML      6         /* max size of Decnet node            */

/*
 * DECnet address format
 */
struct dn_naddr {
	unsigned short  a_len;          /* length of address */
	unsigned char a_addr[DN_MAXADDL]; /* address as bytes */
};

/*
 * DECnet node name format
 */
struct dn_nname {
	unsigned short  n_len;          /* length of name       */
	unsigned char   n_name[DN_MAXNAML]; /* name as char     */
};

/*
 * DECnet socket address format
 */

struct sockaddr_dn {
	unsigned short  sdn_family;     /* AF_DECnet */
	unsigned char   sdn_flags;      /* flags */
	unsigned char   sdn_objnum;     /* object number */
	unsigned short  sdn_objnamel;   /* size of object name */
	char    sdn_objname[16];        /* object name */
	struct dn_nname  sdn_nam;       /* node name */
	struct dn_naddr  sdn_add;       /* node address */
};

#define sdn_nodeaddrl	sdn_add.a_len		/* node address length */
#define sdn_nodeaddr	sdn_add.a_addr 		/* node address */
#define sdn_nodenamel	sdn_nam.n_len		/* node name length */
#define sdn_nodename	sdn_nam.n_name		/* node name */

#endif /* _VMS_H_INCLUDED_ */
