#ifndef _SCAN_H
#define _SCAN_H

#define whitespace_remove(p)  {char *_z; while (((p) != NULL) && (*(p) != '\0') \
                                       && ((*(p) == ' ') || (*(p) == '\t'))) \
				    (p)++; \
			      _z = (p) + strlen ((p)); \
                              while ((_z-- > (p)) && (*_z == ' ' || *_z == '\t' || *_z == '\n')) \
							*_z = '\0';}

#define whitespace_newline_remove(p) while (((p) != NULL) && (*(p) != '\0') \
					    && ((*(p) == ' ') || (*(p) == '\t'))) (p)++; \
				     *((p) + strlen ((p)) - 1) = '\0'
/* Object bit fields used for filtering
 * purposes.  A corresponding bit-field
 * set in database->obj_filter will
 * cause that object to be filtered out
 * on reloads, mirroring, and updates.
 */
enum OBJECT_FILTERS {
  XXX_F           = 0, /* this special filter value is given to all
			* non-key fields or to any field that should
			* never be filtered.
			*/
  AUTNUM_F        = 01, 
  ASMACRO_F       = 02,
  COMMUNITY_F     = 04,
  DOMAIN_F        = 010,
  INETNUM_F       = 020,
  INET6NUM_F      = 040,
  PERSON_F        = 0100,
  DOMAIN_PREFIX_F = 0200,
  INET_RTR_F      = 0400,
  LIMERICK_F      = 01000,
  MNTNER_F        = 02000,
  ROUTE_F         = 04000,
  ROLE_F          = 010000,
  IPV6_SITE_F     = 020000,
  AS_SET_F        = 040000,
  ROUTE_SET_F     = 0100000,
  FILTER_SET_F    = 0200000,
  RTR_SET_F       = 0400000,
  PEERING_SET_F   = 01000000,
  DICTIONARY_F    = 02000000,
  KEY_CERT_F      = 04000000,
  REPOSITORY_F    = 010000000,
  /* NOTE: if you make any changes to this list
   * update 'o_filter' in config.c
   */
};
#define MAX_OBJECT_FILTERS 23
#define ROUTING_REGISTRY_OBJECTS (AUTNUM_F|INET_RTR_F|MNTNER_F|ROUTE_F|AS_SET_F|ROUTE_SET_F|FILTER_SET_F|RTR_SET_F|PEERING_SET_F|KEY_CERT_F|REPOSITORY_F)

/* m_info [] in commands.c uses these values.  So any changes 
 * to this data struct should also be reflected in m_info [].
 * m_info[] is used in the !m command query lookup to identify 
 * the query object type via values in this data struct.
 *
 * obj_template [] in templates.c also uses these values.  For
 * the '-t' command (ie, object template flag/command) uses
 * this data struct as a pointer into the obj_template[] array
 * to identify the requested object template type.
 *
 * key_info [] in scan.c uses this data struct as an array index.
 * Function get_curr_f () returns values of this data type which
 * are the index into key_info [].
 *
 * m_info [], obj_template [] and key_info [] are all dependent on
 * this data struct and so changes need to be fully propagated.
 */ 
enum IRR_OBJECTS {
  AUT_NUM=0,	/* 0 */ /* this should be first for !man to be fast */
  ROUTE,	/* 1 */
  AS_MACRO,     /* 2 */
  COMMUNITY,	/* 3 */
  MAINT,	/* 4 */
  INET_RTR,	/* 5 */
  PERSON,       /* 6 */
  ROLE,		/* 7 */
  IPV6_SITE,	/* 8 */
  AS_LIST,	/* 9 */
  INETNUM,	/* 10 */
  ORIGIN,	/* 11 */
  COMM_LIST,	/* 12 */
  WITHDRAWN,	/* 13 */
  MNT_BY,	/* 14 */
  ADMIN_C,      /* 15 */
  TECH_C,       /* 16 */
  NIC_HDL,      /* 17 */
  DOMAIN,       /* 18 */
  SYNTAX_ERR,   /* 19 */
  WARNING,      /* 20 */
  MBRS_BY_REF,	/* 21 */
  MEMBER_OF,	/* 22 */
  MEMBERS,	/* 23 */
  PREFIX,	/* 24 */
  AS_SET,       /* 25 */
  RS_SET,       /* 26 */
  CONTACT,      /* 27 */
  FILTER_SET,   /* 28 */
  RTR_SET,      /* 29 */
  PEERING_SET,  /* 30 */
  KEY_CERT,     /* 31 */
  DICTIONARY,   /* 32 */
  REPOSITORY,   /* 33 */
  INET6NUM,     /* 34 */
  DOMAIN_PREFIX,/* 35 */
  NO_FIELD      /* 36 */
};
/* max keys should be one less than actual number */
#define IRR_MAX_KEYS	36

enum STATES {
  BLANK_LINE = 01, /* line starting with a '\n' */
  START_F = 02,  /* read the beginning of a line which fits in buffer */
  LINE_CONT = 04,  /* line continuation of previous line */
                   /* for overflow buffer lines, dump them */
  OVRFLW = 010,  /* read the beginning of a line which does not fit in buffer */
  OVRFLW_END = 020, /* we have finally encountered a '\n' for an OVRFLW line */
  DB_EOF = 040,     /* end of file, ie, nothing read */
  COMMENT = 0100    /* line starting with '#' */
};

enum F_PROPERTY { /* each field is either the class name field or non-class name field */
  NAME_F,
  NON_NAME_F
};

enum SCAN_T { /* tell scan file to scan whole file or single object only */
  SCAN_FILE,
  SCAN_OBJECT
};

#endif /* SCAN_H */



syntax highlighted by Code2HTML, v. 0.9.1