/*      $NetBSD: ntpdc.h,v 1.8 2020/05/25 20:47:26 christos Exp $       */

/*
* ntpdc.h - definitions of interest to ntpdc
*/
#include "ntp_fp.h"
#include "ntp.h"
#include "ntp_request.h"
#include "ntp_string.h"
#include "ntp_malloc.h"

/*
* Maximum number of arguments
*/
#define MAXARGS 4
#define MOREARGS 10

/*
* Flags for forming descriptors.
*/
#define OPT             0x80    /* this argument is optional, or'd with type */

#define NO              0x0
#define NTP_STR         0x1     /* string argument */
#define NTP_UINT        0x2     /* unsigned integer */
#define NTP_INT         0x3     /* signed integer */
#define NTP_ADD         0x4     /* IP network address */
#define IP_VERSION      0x5     /* IP version */

/*
* Arguments are returned in a struct - no
* union space saving is attempted.
*/
typedef struct {
       u_char type;
       char *string;
       long ival;
       u_long uval;
       sockaddr_u netnum;
} arg_v;

/*
* Structure for passing parsed command line
*/
struct parse {
       char *keyword;
       arg_v argval[MAXARGS + MOREARGS];
       size_t nargs;
};

/*
* ntpdc includes a command parser which could charitably be called
* crude.  The following structure is used to define the command
* syntax.
*/
struct xcmd {
 const char *keyword;          /* command key word */
       void (*handler) (struct parse *, FILE *);       /* command handler */
       u_char arg[MAXARGS];    /* descriptors for arguments */
 const char *desc[MAXARGS];    /* descriptions for arguments */
 const char *comment;
};

extern  int impl_ver;
extern  int showhostnames;
extern  int s_port;

extern  int     doquery (int, int, int, size_t, size_t, const char *, size_t *, size_t *, const char **, int, int);
extern  const char * nntohost   (sockaddr_u *);