# 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 NativeEnumerated.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		# Applications should include this file
asn_system.h			# Platform-dependent types
asn_codecs.h			# Return types of encoders and decoders
asn_internal.h			# Internal stuff
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
per_support.h per_support.c	# PER parsing
per_decoder.h per_decoder.c	# PER decoding support
per_encoder.h per_encoder.c	# PER encoding support
per_opentype.h per_opentype.c	# PER "open type" handling

CONVERTER:			# THIS IS A SPECIAL SECTION
converter-sample.c		# A default name for sample transcoder

CODEC-PER:			# THIS IS A SPECIAL SECTION
