00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef FLAC__FORMAT_H
00034 #define FLAC__FORMAT_H
00035
00036 #include "export.h"
00037 #include "ordinals.h"
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00087
00088
00089
00090
00091
00093 #define FLAC__MAX_METADATA_TYPE_CODE (126u)
00094
00096 #define FLAC__MIN_BLOCK_SIZE (16u)
00097
00099 #define FLAC__MAX_BLOCK_SIZE (65535u)
00100
00103 #define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u)
00104
00106 #define FLAC__MAX_CHANNELS (8u)
00107
00109 #define FLAC__MIN_BITS_PER_SAMPLE (4u)
00110
00112 #define FLAC__MAX_BITS_PER_SAMPLE (32u)
00113
00122 #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u)
00123
00128 #define FLAC__MAX_SAMPLE_RATE (655350u)
00129
00131 #define FLAC__MAX_LPC_ORDER (32u)
00132
00135 #define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u)
00136
00140 #define FLAC__MIN_QLP_COEFF_PRECISION (5u)
00141
00145 #define FLAC__MAX_QLP_COEFF_PRECISION (15u)
00146
00148 #define FLAC__MAX_FIXED_ORDER (4u)
00149
00151 #define FLAC__MAX_RICE_PARTITION_ORDER (15u)
00152
00154 #define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u)
00155
00162 extern FLAC_API const char *FLAC__VERSION_STRING;
00163
00168 extern FLAC_API const char *FLAC__VENDOR_STRING;
00169
00171 extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4];
00172
00176 extern FLAC_API const unsigned FLAC__STREAM_SYNC;
00177
00179 extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN;
00180
00182 #define FLAC__STREAM_SYNC_LENGTH (4u)
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00194 typedef enum {
00195 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0,
00199 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1
00202 } FLAC__EntropyCodingMethodType;
00203
00209 extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[];
00210
00211
00214 typedef struct {
00215
00216 unsigned *parameters;
00219 unsigned *raw_bits;
00224 unsigned capacity_by_order;
00229 } FLAC__EntropyCodingMethod_PartitionedRiceContents;
00230
00233 typedef struct {
00234
00235 unsigned order;
00238 const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents;
00241 } FLAC__EntropyCodingMethod_PartitionedRice;
00242
00243 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN;
00244 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN;
00245 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN;
00246 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN;
00248 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
00250 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER;
00255 typedef struct {
00256 FLAC__EntropyCodingMethodType type;
00257 union {
00258 FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice;
00259 } data;
00260 } FLAC__EntropyCodingMethod;
00261
00262 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN;
00264
00265
00267 typedef enum {
00268 FLAC__SUBFRAME_TYPE_CONSTANT = 0,
00269 FLAC__SUBFRAME_TYPE_VERBATIM = 1,
00270 FLAC__SUBFRAME_TYPE_FIXED = 2,
00271 FLAC__SUBFRAME_TYPE_LPC = 3
00272 } FLAC__SubframeType;
00273
00279 extern FLAC_API const char * const FLAC__SubframeTypeString[];
00280
00281
00284 typedef struct {
00285 FLAC__int32 value;
00286 } FLAC__Subframe_Constant;
00287
00288
00291 typedef struct {
00292 const FLAC__int32 *data;
00293 } FLAC__Subframe_Verbatim;
00294
00295
00298 typedef struct {
00299 FLAC__EntropyCodingMethod entropy_coding_method;
00302 unsigned order;
00305 FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER];
00308 const FLAC__int32 *residual;
00310 } FLAC__Subframe_Fixed;
00311
00312
00315 typedef struct {
00316 FLAC__EntropyCodingMethod entropy_coding_method;
00319 unsigned order;
00322 unsigned qlp_coeff_precision;
00325 int quantization_level;
00328 FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER];
00331 FLAC__int32 warmup[FLAC__MAX_LPC_ORDER];
00334 const FLAC__int32 *residual;
00336 } FLAC__Subframe_LPC;
00337
00338 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN;
00339 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN;
00344 typedef struct {
00345 FLAC__SubframeType type;
00346 union {
00347 FLAC__Subframe_Constant constant;
00348 FLAC__Subframe_Fixed fixed;
00349 FLAC__Subframe_LPC lpc;
00350 FLAC__Subframe_Verbatim verbatim;
00351 } data;
00352 unsigned wasted_bits;
00353 } FLAC__Subframe;
00354
00362 extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN;
00363 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN;
00364 extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN;
00366 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK;
00367 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK;
00368 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK;
00369 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK;
00371
00372
00373
00374
00375
00376
00377
00378
00379
00381 typedef enum {
00382 FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0,
00383 FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1,
00384 FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2,
00385 FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3
00386 } FLAC__ChannelAssignment;
00387
00393 extern FLAC_API const char * const FLAC__ChannelAssignmentString[];
00394
00396 typedef enum {
00397 FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER,
00398 FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER
00399 } FLAC__FrameNumberType;
00400
00406 extern FLAC_API const char * const FLAC__FrameNumberTypeString[];
00407
00408
00411 typedef struct {
00412 unsigned blocksize;
00415 unsigned sample_rate;
00418 unsigned channels;
00421 FLAC__ChannelAssignment channel_assignment;
00424 unsigned bits_per_sample;
00427 FLAC__FrameNumberType number_type;
00432 union {
00433 FLAC__uint32 frame_number;
00434 FLAC__uint64 sample_number;
00435 } number;
00439 FLAC__uint8 crc;
00444 } FLAC__FrameHeader;
00445
00446 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC;
00447 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN;
00448 extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN;
00449 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN;
00450 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN;
00451 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN;
00452 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN;
00453 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN;
00454 extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN;
00455 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN;
00460 typedef struct {
00461 FLAC__uint16 crc;
00466 } FLAC__FrameFooter;
00467
00468 extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN;
00473 typedef struct {
00474 FLAC__FrameHeader header;
00475 FLAC__Subframe subframes[FLAC__MAX_CHANNELS];
00476 FLAC__FrameFooter footer;
00477 } FLAC__Frame;
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00489 typedef enum {
00490
00491 FLAC__METADATA_TYPE_STREAMINFO = 0,
00494 FLAC__METADATA_TYPE_PADDING = 1,
00497 FLAC__METADATA_TYPE_APPLICATION = 2,
00500 FLAC__METADATA_TYPE_SEEKTABLE = 3,
00503 FLAC__METADATA_TYPE_VORBIS_COMMENT = 4,
00506 FLAC__METADATA_TYPE_CUESHEET = 5,
00509 FLAC__METADATA_TYPE_PICTURE = 6,
00512 FLAC__METADATA_TYPE_UNDEFINED = 7,
00515 FLAC__MAX_METADATA_TYPE = FLAC__MAX_METADATA_TYPE_CODE,
00517 } FLAC__MetadataType;
00518
00524 extern FLAC_API const char * const FLAC__MetadataTypeString[];
00525
00526
00529 typedef struct {
00530 unsigned min_blocksize, max_blocksize;
00531 unsigned min_framesize, max_framesize;
00532 unsigned sample_rate;
00533 unsigned channels;
00534 unsigned bits_per_sample;
00535 FLAC__uint64 total_samples;
00536 FLAC__byte md5sum[16];
00537 } FLAC__StreamMetadata_StreamInfo;
00538
00539 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN;
00540 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN;
00541 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN;
00542 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN;
00543 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN;
00544 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN;
00545 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN;
00546 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN;
00547 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN;
00550 #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u)
00551
00554 typedef struct {
00555 int dummy;
00560 } FLAC__StreamMetadata_Padding;
00561
00562
00565 typedef struct {
00566 FLAC__byte id[4];
00567 FLAC__byte *data;
00568 } FLAC__StreamMetadata_Application;
00569
00570 extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN;
00574 typedef struct {
00575 FLAC__uint64 sample_number;
00578 FLAC__uint64 stream_offset;
00582 unsigned frame_samples;
00584 } FLAC__StreamMetadata_SeekPoint;
00585
00586 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN;
00587 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN;
00588 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN;
00591 #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u)
00592
00597 extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
00598
00599
00612 typedef struct {
00613 unsigned num_points;
00614 FLAC__StreamMetadata_SeekPoint *points;
00615 } FLAC__StreamMetadata_SeekTable;
00616
00617
00624 typedef struct {
00625 FLAC__uint32 length;
00626 FLAC__byte *entry;
00627 } FLAC__StreamMetadata_VorbisComment_Entry;
00628
00629 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN;
00634 typedef struct {
00635 FLAC__StreamMetadata_VorbisComment_Entry vendor_string;
00636 FLAC__uint32 num_comments;
00637 FLAC__StreamMetadata_VorbisComment_Entry *comments;
00638 } FLAC__StreamMetadata_VorbisComment;
00639
00640 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN;
00647 typedef struct {
00648 FLAC__uint64 offset;
00653 FLAC__byte number;
00655 } FLAC__StreamMetadata_CueSheet_Index;
00656
00657 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN;
00658 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN;
00659 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN;
00666 typedef struct {
00667 FLAC__uint64 offset;
00670 FLAC__byte number;
00673 char isrc[13];
00676 unsigned type:1;
00679 unsigned pre_emphasis:1;
00682 FLAC__byte num_indices;
00685 FLAC__StreamMetadata_CueSheet_Index *indices;
00688 } FLAC__StreamMetadata_CueSheet_Track;
00689
00690 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN;
00691 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN;
00692 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN;
00693 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN;
00694 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN;
00695 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN;
00696 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN;
00703 typedef struct {
00704 char media_catalog_number[129];
00710 FLAC__uint64 lead_in;
00713 FLAC__bool is_cd;
00716 unsigned num_tracks;
00719 FLAC__StreamMetadata_CueSheet_Track *tracks;
00722 } FLAC__StreamMetadata_CueSheet;
00723
00724 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN;
00725 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN;
00726 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN;
00727 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN;
00728 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN;
00732 typedef enum {
00733 FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0,
00734 FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1,
00735 FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2,
00736 FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3,
00737 FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4,
00738 FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5,
00739 FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6,
00740 FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7,
00741 FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8,
00742 FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9,
00743 FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10,
00744 FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11,
00745 FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12,
00746 FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13,
00747 FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14,
00748 FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15,
00749 FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16,
00750 FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17,
00751 FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18,
00752 FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19,
00753 FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20,
00754 FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED
00755 } FLAC__StreamMetadata_Picture_Type;
00756
00763 extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[];
00764
00769 typedef struct {
00770 FLAC__StreamMetadata_Picture_Type type;
00773 char *mime_type;
00784 FLAC__byte *description;
00791 FLAC__uint32 width;
00794 FLAC__uint32 height;
00797 FLAC__uint32 depth;
00800 FLAC__uint32 colors;
00805 FLAC__uint32 data_length;
00808 FLAC__byte *data;
00811 } FLAC__StreamMetadata_Picture;
00812
00813 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN;
00814 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN;
00815 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN;
00816 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN;
00817 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN;
00818 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN;
00819 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN;
00820 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN;
00827 typedef struct {
00828 FLAC__byte *data;
00829 } FLAC__StreamMetadata_Unknown;
00830
00831
00834 typedef struct {
00835 FLAC__MetadataType type;
00840 FLAC__bool is_last;
00843 unsigned length;
00846 union {
00847 FLAC__StreamMetadata_StreamInfo stream_info;
00848 FLAC__StreamMetadata_Padding padding;
00849 FLAC__StreamMetadata_Application application;
00850 FLAC__StreamMetadata_SeekTable seek_table;
00851 FLAC__StreamMetadata_VorbisComment vorbis_comment;
00852 FLAC__StreamMetadata_CueSheet cue_sheet;
00853 FLAC__StreamMetadata_Picture picture;
00854 FLAC__StreamMetadata_Unknown unknown;
00855 } data;
00858 } FLAC__StreamMetadata;
00859
00860 extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN;
00861 extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN;
00862 extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN;
00865 #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u)
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00883 FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate);
00884
00895 FLAC_API FLAC__bool FLAC__format_blocksize_is_subset(unsigned blocksize, unsigned sample_rate);
00896
00906 FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate);
00907
00920 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name);
00921
00936 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length);
00937
00953 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length);
00954
00965 FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table);
00966
00979 FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table);
00980
00999 FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation);
01000
01017 FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation);
01018
01019
01020
01021 #ifdef __cplusplus
01022 }
01023 #endif
01024
01025 #endif