# This file contains dependency information for the asn1c compiler's skeletons.
# Feel free to edit this file.
# The format is like this:
# 	<filename> <dependent-file> ...
#
# $Id$
#

ANY.h ANY.c
BMPString.h BMPString.c UTF8String.h
BOOLEAN.h BOOLEAN.c
ENUMERATED.h ENUMERATED.c INTEGER.h
GeneralString.h GeneralString.c
GeneralizedTime.h GeneralizedTime.c
GraphicString.h GraphicString.c
IA5String.h IA5String.c
INTEGER.h INTEGER.c
ISO646String.h ISO646String.c
NULL.h NULL.c BOOLEAN.h
NativeEnumerated.h NativeEnumerated.c NativeInteger.h
NativeInteger.h NativeInteger.c INTEGER.h
NativeReal.h NativeReal.c REAL.h
NumericString.h NumericString.c
OBJECT_IDENTIFIER.h OBJECT_IDENTIFIER.c INTEGER.h
ObjectDescriptor.h ObjectDescriptor.c GraphicString.h
PrintableString.h PrintableString.c
REAL.h REAL.c INTEGER.h
RELATIVE-OID.h RELATIVE-OID.c OBJECT_IDENTIFIER.h
T61String.h T61String.c
TeletexString.h TeletexString.c	
UTCTime.h UTCTime.c GeneralizedTime.h
UTF8String.h UTF8String.c
UniversalString.h UniversalString.c UTF8String.h
VideotexString.h VideotexString.c
VisibleString.h VisibleString.c
asn_SEQUENCE_OF.h asn_SEQUENCE_OF.c asn_SET_OF.h
asn_SET_OF.h asn_SET_OF.c
constr_CHOICE.h constr_CHOICE.c
constr_SEQUENCE.h constr_SEQUENCE.c
constr_SEQUENCE_OF.h constr_SEQUENCE_OF.c asn_SEQUENCE_OF.h constr_SET_OF.h
constr_SET.h constr_SET.c
constr_SET_OF.h constr_SET_OF.c asn_SET_OF.h

COMMON-FILES:	# This is a special section
asn_application.h
asn_internal.h
asn_codecs.h
asn_system.h			# Platform-dependent types
OCTET_STRING.h OCTET_STRING.c	# This one is used too widely
BIT_STRING.h BIT_STRING.c	# This one is necessary for the above one
asn_codecs_prim.c asn_codecs_prim.h	# enc/decoders for primitive types
ber_tlv_length.h ber_tlv_length.c	# BER TLV L (length)
ber_tlv_tag.h ber_tlv_tag.c	# BER TLV T (tag)
ber_decoder.h ber_decoder.c	# BER decoder support code
der_encoder.h der_encoder.c	# DER encoder support code
constr_TYPE.h constr_TYPE.c	# Description of a type
constraints.h constraints.c	# Subtype constraints support
xer_support.h xer_support.c	# XML parsing
xer_decoder.h xer_decoder.c	# XER decoding support
xer_encoder.h xer_encoder.c	# XER encoding support
