155682Smarkm/* 2178825Sdfr * Copyright (c) 1997 - 2005 Kungliga Tekniska H�gskolan 355682Smarkm * (Royal Institute of Technology, Stockholm, Sweden). 455682Smarkm * All rights reserved. 555682Smarkm * 655682Smarkm * Redistribution and use in source and binary forms, with or without 755682Smarkm * modification, are permitted provided that the following conditions 855682Smarkm * are met: 955682Smarkm * 1055682Smarkm * 1. Redistributions of source code must retain the above copyright 1155682Smarkm * notice, this list of conditions and the following disclaimer. 1255682Smarkm * 1355682Smarkm * 2. Redistributions in binary form must reproduce the above copyright 1455682Smarkm * notice, this list of conditions and the following disclaimer in the 1555682Smarkm * documentation and/or other materials provided with the distribution. 1655682Smarkm * 1755682Smarkm * 3. Neither the name of the Institute nor the names of its contributors 1855682Smarkm * may be used to endorse or promote products derived from this software 1955682Smarkm * without specific prior written permission. 2055682Smarkm * 2155682Smarkm * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 2255682Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2355682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2455682Smarkm * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 2555682Smarkm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2655682Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2755682Smarkm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2855682Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2955682Smarkm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3055682Smarkm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3155682Smarkm * SUCH DAMAGE. 3255682Smarkm */ 3355682Smarkm 34178825Sdfr/* $Id: symbol.h 19539 2006-12-28 17:15:05Z lha $ */ 3555682Smarkm 3655682Smarkm#ifndef _SYMBOL_H 3755682Smarkm#define _SYMBOL_H 3855682Smarkm 39178825Sdfr#include "asn1_queue.h" 4055682Smarkm 41178825Sdfrenum typetype { 42178825Sdfr TBitString, 43178825Sdfr TBoolean, 44178825Sdfr TChoice, 45178825Sdfr TEnumerated, 46178825Sdfr TGeneralString, 47178825Sdfr TGeneralizedTime, 48178825Sdfr TIA5String, 49178825Sdfr TInteger, 50178825Sdfr TNull, 51178825Sdfr TOID, 52178825Sdfr TOctetString, 53178825Sdfr TPrintableString, 54178825Sdfr TSequence, 55178825Sdfr TSequenceOf, 56178825Sdfr TSet, 57178825Sdfr TSetOf, 58178825Sdfr TTag, 59178825Sdfr TType, 60178825Sdfr TUTCTime, 61178825Sdfr TUTF8String, 62178825Sdfr TBMPString, 63178825Sdfr TUniversalString, 64178825Sdfr TVisibleString 65178825Sdfr}; 66178825Sdfr 6755682Smarkmtypedef enum typetype Typetype; 6855682Smarkm 6955682Smarkmstruct type; 7055682Smarkm 71178825Sdfrstruct value { 72178825Sdfr enum { booleanvalue, 73178825Sdfr nullvalue, 74178825Sdfr integervalue, 75178825Sdfr stringvalue, 76178825Sdfr objectidentifiervalue 77178825Sdfr } type; 78178825Sdfr union { 79178825Sdfr int booleanvalue; 80178825Sdfr int integervalue; 81178825Sdfr char *stringvalue; 82178825Sdfr struct objid *objectidentifiervalue; 83178825Sdfr } u; 84178825Sdfr}; 85178825Sdfr 8655682Smarkmstruct member { 87178825Sdfr char *name; 88178825Sdfr char *gen_name; 89178825Sdfr char *label; 90178825Sdfr int val; 91178825Sdfr int optional; 92178825Sdfr int ellipsis; 93178825Sdfr struct type *type; 94178825Sdfr ASN1_TAILQ_ENTRY(member) members; 95178825Sdfr struct value *defval; 9655682Smarkm}; 9755682Smarkm 9855682Smarkmtypedef struct member Member; 9955682Smarkm 100178825SdfrASN1_TAILQ_HEAD(memhead, member); 101178825Sdfr 10255682Smarkmstruct symbol; 10355682Smarkm 104178825Sdfrstruct tagtype { 105178825Sdfr int tagclass; 106178825Sdfr int tagvalue; 107178825Sdfr enum { TE_IMPLICIT, TE_EXPLICIT } tagenv; 108178825Sdfr}; 109178825Sdfr 110178825Sdfrstruct range { 111178825Sdfr int min; 112178825Sdfr int max; 113178825Sdfr}; 114178825Sdfr 115178825Sdfrenum ctype { CT_CONTENTS, CT_USER } ; 116178825Sdfr 117178825Sdfrstruct constraint_spec; 118178825Sdfr 11955682Smarkmstruct type { 120178825Sdfr Typetype type; 121178825Sdfr struct memhead *members; 122178825Sdfr struct symbol *symbol; 123178825Sdfr struct type *subtype; 124178825Sdfr struct tagtype tag; 125178825Sdfr struct range *range; 126178825Sdfr struct constraint_spec *constraint; 12755682Smarkm}; 12855682Smarkm 12955682Smarkmtypedef struct type Type; 13055682Smarkm 131178825Sdfrstruct constraint_spec { 132178825Sdfr enum ctype ctype; 133178825Sdfr union { 134178825Sdfr struct { 135178825Sdfr Type *type; 136178825Sdfr struct value *encoding; 137178825Sdfr } content; 138178825Sdfr } u; 139178825Sdfr}; 140178825Sdfr 141178825Sdfrstruct objid { 142178825Sdfr const char *label; 143178825Sdfr int value; 144178825Sdfr struct objid *next; 145178825Sdfr}; 146178825Sdfr 14755682Smarkmstruct symbol { 148178825Sdfr char *name; 149178825Sdfr char *gen_name; 150178825Sdfr enum { SUndefined, SValue, Stype } stype; 151178825Sdfr struct value *value; 152178825Sdfr Type *type; 15355682Smarkm}; 15455682Smarkm 15555682Smarkmtypedef struct symbol Symbol; 15655682Smarkm 15755682Smarkmvoid initsym (void); 15855682SmarkmSymbol *addsym (char *); 15955682Smarkmvoid output_name (char *); 160178825Sdfrint checkundefined(void); 16155682Smarkm#endif 162