1*00b67f09SDavid van Moolenbroek /* $NetBSD: sexpr.h,v 1.4 2014/12/10 04:38:01 christos Exp $ */ 2*00b67f09SDavid van Moolenbroek 3*00b67f09SDavid van Moolenbroek /* 4*00b67f09SDavid van Moolenbroek * Portions Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") 5*00b67f09SDavid van Moolenbroek * Portions Copyright (C) 2001 Internet Software Consortium. 6*00b67f09SDavid van Moolenbroek * 7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 10*00b67f09SDavid van Moolenbroek * 11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NOMINUM DISCLAIMS ALL 12*00b67f09SDavid van Moolenbroek * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 13*00b67f09SDavid van Moolenbroek * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY 14*00b67f09SDavid van Moolenbroek * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15*00b67f09SDavid van Moolenbroek * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16*00b67f09SDavid van Moolenbroek * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17*00b67f09SDavid van Moolenbroek * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18*00b67f09SDavid van Moolenbroek * 19*00b67f09SDavid van Moolenbroek * Portions Copyright (C) 2001 Nominum, Inc. 20*00b67f09SDavid van Moolenbroek * 21*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 22*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 23*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 24*00b67f09SDavid van Moolenbroek * 25*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NOMINUM DISCLAIMS ALL 26*00b67f09SDavid van Moolenbroek * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 27*00b67f09SDavid van Moolenbroek * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY 28*00b67f09SDavid van Moolenbroek * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 29*00b67f09SDavid van Moolenbroek * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 30*00b67f09SDavid van Moolenbroek * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 31*00b67f09SDavid van Moolenbroek * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 32*00b67f09SDavid van Moolenbroek */ 33*00b67f09SDavid van Moolenbroek 34*00b67f09SDavid van Moolenbroek /* Id: sexpr.h,v 1.11 2007/08/28 07:20:43 tbox Exp */ 35*00b67f09SDavid van Moolenbroek 36*00b67f09SDavid van Moolenbroek #ifndef ISCCC_SEXPR_H 37*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPR_H 1 38*00b67f09SDavid van Moolenbroek 39*00b67f09SDavid van Moolenbroek /*! \file isccc/sexpr.h */ 40*00b67f09SDavid van Moolenbroek 41*00b67f09SDavid van Moolenbroek #include <stdio.h> 42*00b67f09SDavid van Moolenbroek 43*00b67f09SDavid van Moolenbroek #include <isc/lang.h> 44*00b67f09SDavid van Moolenbroek #include <isccc/types.h> 45*00b67f09SDavid van Moolenbroek 46*00b67f09SDavid van Moolenbroek ISC_LANG_BEGINDECLS 47*00b67f09SDavid van Moolenbroek 48*00b67f09SDavid van Moolenbroek /*% dotted pair structure */ 49*00b67f09SDavid van Moolenbroek struct isccc_dottedpair { 50*00b67f09SDavid van Moolenbroek isccc_sexpr_t *car; 51*00b67f09SDavid van Moolenbroek isccc_sexpr_t *cdr; 52*00b67f09SDavid van Moolenbroek }; 53*00b67f09SDavid van Moolenbroek 54*00b67f09SDavid van Moolenbroek /*% iscc_sexpr structure */ 55*00b67f09SDavid van Moolenbroek struct isccc_sexpr { 56*00b67f09SDavid van Moolenbroek unsigned int type; 57*00b67f09SDavid van Moolenbroek union { 58*00b67f09SDavid van Moolenbroek char * as_string; 59*00b67f09SDavid van Moolenbroek isccc_dottedpair_t as_dottedpair; 60*00b67f09SDavid van Moolenbroek isccc_region_t as_region; 61*00b67f09SDavid van Moolenbroek } value; 62*00b67f09SDavid van Moolenbroek }; 63*00b67f09SDavid van Moolenbroek 64*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPRTYPE_NONE 0x00 /*%< Illegal. */ 65*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPRTYPE_T 0x01 66*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPRTYPE_STRING 0x02 67*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPRTYPE_DOTTEDPAIR 0x03 68*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPRTYPE_BINARY 0x04 69*00b67f09SDavid van Moolenbroek 70*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPR_CAR(s) (s)->value.as_dottedpair.car 71*00b67f09SDavid van Moolenbroek #define ISCCC_SEXPR_CDR(s) (s)->value.as_dottedpair.cdr 72*00b67f09SDavid van Moolenbroek 73*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 74*00b67f09SDavid van Moolenbroek isccc_sexpr_cons(isccc_sexpr_t *car, isccc_sexpr_t *cdr); 75*00b67f09SDavid van Moolenbroek 76*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 77*00b67f09SDavid van Moolenbroek isccc_sexpr_tconst(void); 78*00b67f09SDavid van Moolenbroek 79*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 80*00b67f09SDavid van Moolenbroek isccc_sexpr_fromstring(const char *str); 81*00b67f09SDavid van Moolenbroek 82*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 83*00b67f09SDavid van Moolenbroek isccc_sexpr_frombinary(const isccc_region_t *region); 84*00b67f09SDavid van Moolenbroek 85*00b67f09SDavid van Moolenbroek void 86*00b67f09SDavid van Moolenbroek isccc_sexpr_free(isccc_sexpr_t **sexprp); 87*00b67f09SDavid van Moolenbroek 88*00b67f09SDavid van Moolenbroek void 89*00b67f09SDavid van Moolenbroek isccc_sexpr_print(isccc_sexpr_t *sexpr, FILE *stream); 90*00b67f09SDavid van Moolenbroek 91*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 92*00b67f09SDavid van Moolenbroek isccc_sexpr_car(isccc_sexpr_t *list); 93*00b67f09SDavid van Moolenbroek 94*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 95*00b67f09SDavid van Moolenbroek isccc_sexpr_cdr(isccc_sexpr_t *list); 96*00b67f09SDavid van Moolenbroek 97*00b67f09SDavid van Moolenbroek void 98*00b67f09SDavid van Moolenbroek isccc_sexpr_setcar(isccc_sexpr_t *pair, isccc_sexpr_t *car); 99*00b67f09SDavid van Moolenbroek 100*00b67f09SDavid van Moolenbroek void 101*00b67f09SDavid van Moolenbroek isccc_sexpr_setcdr(isccc_sexpr_t *pair, isccc_sexpr_t *cdr); 102*00b67f09SDavid van Moolenbroek 103*00b67f09SDavid van Moolenbroek isccc_sexpr_t * 104*00b67f09SDavid van Moolenbroek isccc_sexpr_addtolist(isccc_sexpr_t **l1p, isccc_sexpr_t *l2); 105*00b67f09SDavid van Moolenbroek 106*00b67f09SDavid van Moolenbroek isc_boolean_t 107*00b67f09SDavid van Moolenbroek isccc_sexpr_listp(isccc_sexpr_t *sexpr); 108*00b67f09SDavid van Moolenbroek 109*00b67f09SDavid van Moolenbroek isc_boolean_t 110*00b67f09SDavid van Moolenbroek isccc_sexpr_emptyp(isccc_sexpr_t *sexpr); 111*00b67f09SDavid van Moolenbroek 112*00b67f09SDavid van Moolenbroek isc_boolean_t 113*00b67f09SDavid van Moolenbroek isccc_sexpr_stringp(isccc_sexpr_t *sexpr); 114*00b67f09SDavid van Moolenbroek 115*00b67f09SDavid van Moolenbroek isc_boolean_t 116*00b67f09SDavid van Moolenbroek isccc_sexpr_binaryp(isccc_sexpr_t *sexpr); 117*00b67f09SDavid van Moolenbroek 118*00b67f09SDavid van Moolenbroek char * 119*00b67f09SDavid van Moolenbroek isccc_sexpr_tostring(isccc_sexpr_t *sexpr); 120*00b67f09SDavid van Moolenbroek 121*00b67f09SDavid van Moolenbroek isccc_region_t * 122*00b67f09SDavid van Moolenbroek isccc_sexpr_tobinary(isccc_sexpr_t *sexpr); 123*00b67f09SDavid van Moolenbroek 124*00b67f09SDavid van Moolenbroek ISC_LANG_ENDDECLS 125*00b67f09SDavid van Moolenbroek 126*00b67f09SDavid van Moolenbroek #endif /* ISCCC_SEXPR_H */ 127