#ifndef AROS_CONFIG_SASC_PREPROTOS_H
#define AROS_CONFIG_SASC_PREPROTOS_H
/* (C) 1995 AROS - The Amiga Replacement OS */

/******************************************************************************

    MODUL
	$Ver: aros/config/sasc/preprotos.h

    DESCRIPTION

******************************************************************************/

/**************************************
		Includes
**************************************/
#ifndef AROS_LIBCALL_H
#   include <aros/libcall.h>
#endif

#if LibBaseShouldBeAParameter
/* Header for functions that use LibBase */
#   define __AROS_LP_HEADER0(type,name,libname,basetype,basename) \
	extern type __AROS_LIBCALL libname ## _ ## name (A6 basetype
/* Header for functions that don't use Libbase */
#   define __AROS_LPI_HEADER0(type,name,libname) \
	extern type __AROS_LIBCALL libname ## _ ## name (
/* This is neccessary to expand things if they are a macros and to map
    arguments */
#   define __AROS_LP_HEADER(t,n,bt,bn,o,m)  __AROS_LP_HEADER0(t,n,m,bt,bn)
#   define __AROS_LPI_HEADER(t,n,bt,bn,o,m) __AROS_LPI_HEADER0(t,n,m)

/* Special case: if there are no arguments, then there might be a
    void or not (depending on the fact whether the function uses LibBase
    or not). */
#   define __AROS_LP0(t,n,bt,bn,o,m)  __AROS_LP_HEADER(t,n,bt,bn,o,m));
#   define __AROS_LP_COMMA  ,
#else /* No Libbase as Parameter */
/* If the function doesn't want the LibBase as parameter, things
    are more simple */
#   define __AROS_LP_HEADER0(t,n,ln) \
	extern t __AROS_LIBCALL ln ## _ ## n (
#   define __AROS_LPI_HEADER0(t,n,ln) \
	extern t __AROS_LIBCALL ln ## _ ## n (
/* This is neccessary to expand things if they are a macros and to map
    arguments */
#   define __AROS_LP_HEADER(t,n,bt,bn,o,m)  __AROS_LP_HEADER0(t,n,m)
#   define __AROS_LPI_HEADER(t,n,bt,bn,o,m) __AROS_LPI_HEADER0(t,n,m)

/* Special case */
#   define __AROS_LP0(t,n,bt,bn,o,m) \
	__AROS_LP_HEADER(t,n,bt,bn,o,m)void);
#   define __AROS_LP_COMMA
#endif /* Libbase as parameter or not */

/* Declare an argument for a function */
#define __AROS_LPA(t,p,r)   t, p, r

/*
    Macros for Prototypes
*/
/* __AROS_LP0 is a special case. See above. */
#define __AROS_LP0I(t,n,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,\
    bt,bn,o,m));
#define __AROS_LP0P(t,n,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,\
    bt,bn,o,m));
#define __AROS_LP0S(t,n,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,\
    bt,bn,o,m));

#define __AROS_LP1(t,n,a1,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1)\
    );
#define __AROS_LP1I(t,n,a1,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1)\
    );
#define __AROS_LP1P(t,n,a1,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1)\
    );
#define __AROS_LP1S(t,n,a1,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1)\
    );

#define __AROS_LP2(t,n,a1,a2,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2)\
    );
#define __AROS_LP2I(t,n,a1,a2,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2)\
    );

#define __AROS_LP3(t,n,a1,a2,a3,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3)\
    );
#define __AROS_LP3I(t,n,a1,a2,a3,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3)\
    );

#define __AROS_LP4(t,n,a1,a2,a3,a4,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4)\
    );
#define __AROS_LP4I(t,n,a1,a2,a3,a4,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4)\
    );

#define __AROS_LP5(t,n,a1,a2,a3,a4,a5,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5)\
    );
#define __AROS_LP5I(t,n,a1,a2,a3,a4,a5,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5)\
    );

#define __AROS_LP6(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6)\
    );
#define __AROS_LP6I(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6)\
    );

#define __AROS_LP7(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7)\
    );
#define __AROS_LP7I(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7)\
    );

#define __AROS_LP8(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8)\
    );
#define __AROS_LP8I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8)\
    );

#define __AROS_LP9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8),\
    __AROS_LCAET(a9)\
    );
#define __AROS_LP9I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8),\
    __AROS_LCAET(a9)\
    );

#define __AROS_LP10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8),\
    __AROS_LCAET(a9),\
    __AROS_LCAET(a10)\
    );
#define __AROS_LP10I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8),\
    __AROS_LCAET(a9),\
    __AROS_LCAET(a10)\
    );

#define __AROS_LP11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,m) \
    __AROS_LP_HEADER(t,n,bt,bn,o,m) __AROS_LP_COMMA\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8),\
    __AROS_LCAET(a9),\
    __AROS_LCAET(a10),\
    __AROS_LCAET(a11)\
    );
#define __AROS_LP11I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,m) \
    __AROS_LPI_HEADER(t,n,bt,bn,o,m)\
    __AROS_LCAET(a1),\
    __AROS_LCAET(a2),\
    __AROS_LCAET(a3),\
    __AROS_LCAET(a4),\
    __AROS_LCAET(a5),\
    __AROS_LCAET(a6),\
    __AROS_LCAET(a7),\
    __AROS_LCAET(a8),\
    __AROS_LCAET(a9),\
    __AROS_LCAET(a10),\
    __AROS_LCAET(a11)\
    );

/******************************************************************************
*****  ENDE aros/config/sasc/preprotos.h
******************************************************************************/

#endif /* AROS_CONFIG_SASC_PREPROTOS_H */
