audio_types.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1992-2001 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _MULTIMEDIA_AUDIO_TYPES_H
#define _MULTIMEDIA_AUDIO_TYPES_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* NOTE: The following is the contents of c_varieties.h. We'll use the
* _C_VARIETIES_H header guard so there's no conflict if c_varieties.h
* is also included. The C_VARIETIES_H header guard is in <xview/xv_c_types.h>
*/
#ifndef _C_VARIETIES_H
#define _C_VARIETIES_H
#ifndef C_VARIETIES_H
#define C_VARIETIES_H
/*
* This file defines some macros that are used to make code
* portable among the major C dialects currently in use at
* Sun. As of 12/90, these include Sun C (a lot like K&R C),
* ANSI C, and C++.
*
* external functions:
* To declare an external function, invoke the EXTERN_FUNCTION
* macro; the macro's first parameter should be the function's
* return type and function name, and the second macro parameter
* should be the parenthesized list of function arguments (or an
* ellipsis - DOTDOTDOT macro should be used to indicate the
* ellipsis as explained later in this file - if the arguments are
* unspecified or of varying number or type, or the uppercase word
* "_VOID_" if the function takes no arguments). Some examples:
*
* EXTERN_FUNCTION( void printf, (char *, DOTDOTDOT) );
* EXTERN_FUNCTION( int fread, (char*, int, int, FILE*) );
* EXTERN_FUNCTION( int getpid, (_VOID_) );
*
* Note that to be ANSI-C conformant, one should put "," at the end
* first argument of printf() declaration.
*
* structure tags:
* In order to handle cases where a structure tag has the same name
* as a type, the STRUCT_TAG macro makes the tag disappear in C++.
* An example (from <sys/types.h>):
*
* typedef struct STRUCT_TAG(fd_set) { ... } fd_set;
*
* enum bitfields:
* In K&R C as interpreted at UCB, bitfields may be declared to
* be of an enumerated type. Neither ANSI C nor C++ permit this,
* so the ENUM_BITFIELD macro replaces the enum declaration with
* "unsigned". An example (from <sunwindow/attr.h>):
*
* struct {
* ENUM_BITFIELD( Attr_pkg ) pkg : 8;
* unsigned ordinal : 8;
* ENUM_BITFIELD( Attr_list_type ) list_type : 8;
* ...
* };
*
* enum type specifier:
* In K&R C, it is OK to use "enum xyz" as return type but in C++,
* one should use "xyz". ENUM_TYPE macro is used to handle this.
*
* ENUM_TYPE(enum, xyz) (*func) (...);
*
* "struct s s;":
* C++ does not allow this sort of name conflict, since struct tags are
* in the same namespace as variables. In this case, we use the
* NAME_CONFLICT macro to prepend (for C++) an underscore to the
* variable (or struct member) name. E.g. from <pixrect/pixrect.h>:
*
* typedef struct pixrect {
* struct pixrectops *pr_ops;
* struct pr_size NAME_CONFLICT(pr_size);
* } Pixrect;
* #define pr_height NAME_CONFLICT(pr_size).y
* #define pr_width NAME_CONFLICT(pr_size).x
*
* Note that no spaces are allowed within the parentheses in the
* invocation of NAME_CONFLICT.
*
* Pointers to functions declared as struct members:
* Instead of getting picky about the types expected by struct
* members which are pointers to functions, we use DOTDOTDOT to
* tell C++ not to be so uptight:
*
* struct pixrectops {
* int (*pro_rop)( DOTDOTDOT );
* int (*pro_stencil)( DOTDOTDOT );
* int (*pro_batchrop)( DOTDOTDOT );
* . . .
* };
*
*/
/* Which type of C/C++ compiler are we using? */
#if defined(__cplusplus)
/*
* Definitions for C++ 2.0 and later require extern "C" { decl; }
*/
#define EXTERN_FUNCTION(rtn, args) extern "C" { rtn args; }
#define STRUCT_TAG(tag_name) /* the tag disappears */
#define ENUM_BITFIELD(enum_type) unsigned
#define ENUM_TYPE(enum_sp, enum_ty) enum_ty
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
#define NAME_CONFLICT(name) _##name
#else
#define NAME_CONFLICT(name) _**name
#endif
#define DOTDOTDOT ...
#define _VOID_ /* anachronism */
#define CONST const
/*
* This is not necessary for 2.0 since 2.0 has corrected the void (*) () problem
*/
typedef void (*_PFV_)();
typedef int (*_PFI_)();
#elif defined(c_plusplus)
/*
* Definitions for C++ 1.2
*/
#define EXTERN_FUNCTION(rtn, args) rtn args
#define STRUCT_TAG(tag_name) /* the tag disappears */
#define ENUM_BITFIELD(enum_type) unsigned
#define ENUM_TYPE(enum_sp, enum_ty) enum_ty
#define NAME_CONFLICT(name) _**name
#define DOTDOTDOT ...
#define _VOID_ /* anachronism */
#define CONST const
typedef void (*_PFV_)();
typedef int (*_PFI_)();
#elif defined(__STDC__)
/*
* Definitions for ANSI C
*/
#define EXTERN_FUNCTION(rtn, args) rtn args
#define STRUCT_TAG(tag_name) tag_name
#define ENUM_BITFIELD(enum_type) unsigned
#define ENUM_TYPE(enum_sp, enum_ty) enum_sp enum_ty
#define NAME_CONFLICT(name) name
#define DOTDOTDOT ...
#define _VOID_ void
#define CONST
#else
/*
* Definitions for Sun/K&R C -- ignore function prototypes,
* but preserve tag names and enum bitfield declarations.
*/
#define EXTERN_FUNCTION(rtn, args) rtn()
#define STRUCT_TAG(tag_name) tag_name
#define ENUM_BITFIELD(enum_type) enum_type
#define ENUM_TYPE(enum_sp, enum_ty) enum_sp enum_ty
#define NAME_CONFLICT(name) name
#define DOTDOTDOT
#define _VOID_
/* VOID is only used where it disappears anyway */
#define CONST
#endif /* Which type of C/C++ compiler are we using? */
#endif /* !C_VARIETIES_H */
#endif /* !_C_VARIETIES_H */
#ifdef __cplusplus
}
#endif
#endif /* !_MULTIMEDIA_AUDIO_TYPES_H */