155682Smarkm/* 2233294Sstas * Copyright (c) 1997 - 2005 Kungliga Tekniska H��gskolan 3233294Sstas * (Royal Institute of Technology, Stockholm, Sweden). 4233294Sstas * All rights reserved. 555682Smarkm * 6233294Sstas * Redistribution and use in source and binary forms, with or without 7233294Sstas * modification, are permitted provided that the following conditions 8233294Sstas * are met: 955682Smarkm * 10233294Sstas * 1. Redistributions of source code must retain the above copyright 11233294Sstas * notice, this list of conditions and the following disclaimer. 1255682Smarkm * 13233294Sstas * 2. Redistributions in binary form must reproduce the above copyright 14233294Sstas * notice, this list of conditions and the following disclaimer in the 15233294Sstas * documentation and/or other materials provided with the distribution. 1655682Smarkm * 17233294Sstas * 3. Neither the name of the Institute nor the names of its contributors 18233294Sstas * may be used to endorse or promote products derived from this software 19233294Sstas * without specific prior written permission. 2055682Smarkm * 21233294Sstas * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22233294Sstas * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23233294Sstas * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24233294Sstas * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25233294Sstas * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26233294Sstas * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27233294Sstas * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28233294Sstas * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29233294Sstas * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30233294Sstas * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31233294Sstas * SUCH DAMAGE. 3255682Smarkm */ 3355682Smarkm 34233294Sstas/* $Id$ */ 3555682Smarkm 3655682Smarkm#ifndef _SYMBOL_H 3755682Smarkm#define _SYMBOL_H 3855682Smarkm 39178825Sdfr#include "asn1_queue.h" 4055682Smarkm 41233294Sstasenum typetype { 42178825Sdfr TBitString, 43178825Sdfr TBoolean, 44233294Sstas TChoice, 45178825Sdfr TEnumerated, 46233294Sstas TGeneralString, 47233294Sstas TTeletexString, 48233294Sstas TGeneralizedTime, 49178825Sdfr TIA5String, 50233294Sstas TInteger, 51178825Sdfr TNull, 52233294Sstas TOID, 53233294Sstas TOctetString, 54178825Sdfr TPrintableString, 55233294Sstas TSequence, 56178825Sdfr TSequenceOf, 57233294Sstas TSet, 58178825Sdfr TSetOf, 59233294Sstas TTag, 60233294Sstas TType, 61233294Sstas TUTCTime, 62178825Sdfr TUTF8String, 63178825Sdfr TBMPString, 64178825Sdfr TUniversalString, 65178825Sdfr TVisibleString 66178825Sdfr}; 67178825Sdfr 6855682Smarkmtypedef enum typetype Typetype; 6955682Smarkm 7055682Smarkmstruct type; 7155682Smarkm 72178825Sdfrstruct value { 73233294Sstas enum { booleanvalue, 74233294Sstas nullvalue, 75233294Sstas integervalue, 76233294Sstas stringvalue, 77178825Sdfr objectidentifiervalue 78178825Sdfr } type; 79178825Sdfr union { 80178825Sdfr int booleanvalue; 81178825Sdfr int integervalue; 82178825Sdfr char *stringvalue; 83178825Sdfr struct objid *objectidentifiervalue; 84178825Sdfr } u; 85178825Sdfr}; 86178825Sdfr 8755682Smarkmstruct member { 88178825Sdfr char *name; 89178825Sdfr char *gen_name; 90178825Sdfr char *label; 91178825Sdfr int val; 92178825Sdfr int optional; 93178825Sdfr int ellipsis; 94178825Sdfr struct type *type; 95178825Sdfr ASN1_TAILQ_ENTRY(member) members; 96178825Sdfr struct value *defval; 9755682Smarkm}; 9855682Smarkm 9955682Smarkmtypedef struct member Member; 10055682Smarkm 101178825SdfrASN1_TAILQ_HEAD(memhead, member); 102178825Sdfr 10355682Smarkmstruct symbol; 10455682Smarkm 105178825Sdfrstruct tagtype { 106178825Sdfr int tagclass; 107178825Sdfr int tagvalue; 108178825Sdfr enum { TE_IMPLICIT, TE_EXPLICIT } tagenv; 109178825Sdfr}; 110178825Sdfr 111178825Sdfrstruct range { 112178825Sdfr int min; 113178825Sdfr int max; 114178825Sdfr}; 115178825Sdfr 116178825Sdfrenum ctype { CT_CONTENTS, CT_USER } ; 117178825Sdfr 118178825Sdfrstruct constraint_spec; 119178825Sdfr 12055682Smarkmstruct type { 121178825Sdfr Typetype type; 122178825Sdfr struct memhead *members; 123178825Sdfr struct symbol *symbol; 124178825Sdfr struct type *subtype; 125178825Sdfr struct tagtype tag; 126178825Sdfr struct range *range; 127178825Sdfr struct constraint_spec *constraint; 12855682Smarkm}; 12955682Smarkm 13055682Smarkmtypedef struct type Type; 13155682Smarkm 132178825Sdfrstruct constraint_spec { 133178825Sdfr enum ctype ctype; 134178825Sdfr union { 135178825Sdfr struct { 136178825Sdfr Type *type; 137178825Sdfr struct value *encoding; 138178825Sdfr } content; 139178825Sdfr } u; 140178825Sdfr}; 141178825Sdfr 142178825Sdfrstruct objid { 143178825Sdfr const char *label; 144178825Sdfr int value; 145178825Sdfr struct objid *next; 146178825Sdfr}; 147178825Sdfr 14855682Smarkmstruct symbol { 149178825Sdfr char *name; 150178825Sdfr char *gen_name; 151178825Sdfr enum { SUndefined, SValue, Stype } stype; 152178825Sdfr struct value *value; 153178825Sdfr Type *type; 15455682Smarkm}; 15555682Smarkm 15655682Smarkmtypedef struct symbol Symbol; 15755682Smarkm 15855682Smarkmvoid initsym (void); 15955682SmarkmSymbol *addsym (char *); 16055682Smarkmvoid output_name (char *); 161178825Sdfrint checkundefined(void); 16255682Smarkm#endif 163