#ifndef _UTILS_H
#define _UTILS_H
#define LOG_USER 0
#define LOG_SERVER 1
#define LOG_REQUEST 0
#define LOG_REPLY 1
extern void WriteMigExternal(FILE *file);
extern void WriteMigInternal(FILE *file);
extern void WriteImport(FILE *file, string_t filename);
extern void WriteRCSDecl( FILE *file, identifier_t name, string_t rcs );
extern void WriteBogusDefines( FILE *file );
extern void WriteList( FILE *file, argument_t *args,
void (*func)(FILE *file, argument_t *arg),
u_int mask, char *between, char *after );
extern void WriteReverseList( FILE *file, argument_t *args,
void (*func)(FILE *file, argument_t *arg),
u_int mask, char *between, char *after );
extern void WriteNameDecl( FILE *file, argument_t *arg );
extern void WriteUserVarDecl( FILE *file, argument_t *arg );
extern void WriteServerVarDecl( FILE *file, argument_t *arg );
extern void WriteTemplateDeclIn( FILE *file, argument_t *arg );
extern void WriteTemplateDeclOut( FILE *file, argument_t *arg );
extern void WriteCheckDecl( FILE *file, argument_t *arg );
extern char *ReturnTypeStr( routine_t *rt );
extern char *FetchUserType( ipc_type_t *it );
extern char *FetchServerType( ipc_type_t *it );
extern char *FetchKPDType( ipc_type_t *it );
extern void WriteKPDFieldDecl(FILE *file, argument_t *arg);
extern void WriteFieldDeclPrim( FILE *file, argument_t *arg, char *(*tfunc)(ipc_type_t *it) );
extern void WriteStructDecl( FILE *file, argument_t *args,
void (*func)(FILE *file, argument_t *arg),
u_int mask, char *name,
boolean_t simple, boolean_t trailer,
boolean_t isuser,
boolean_t template_only );
extern void WriteStaticDecl( FILE *file, argument_t *arg );
extern void WriteCopyType(FILE *file, ipc_type_t *it, char *left, char *right, ...);
extern void WriteCopyArg(FILE *file, argument_t *arg, char *left, char *right, ...);
extern void WriteLogMsg( FILE *file, routine_t *rt, int where, int what );
extern void WriteCheckTrailerHead( FILE *file, routine_t *rt, boolean_t isuser );
extern void WriteCheckTrailerSize( FILE *file, boolean_t isuser, argument_t *arg );
extern void WriteReturnMsgError( FILE *file, routine_t *rt, boolean_t isuser, argument_t *arg, string_t error );
extern void WriteRPCRoutineDescriptor( FILE *file, routine_t *rt, int arg_count, int descr_count, string_t stub_routine, string_t sig_array );
extern void WriteRPCRoutineArgDescriptor( FILE *file, routine_t *rt );
extern void WriteRequestTypes( FILE *file, statement_t *stats);
extern void WriteCheckRequests( FILE *file, statement_t *stats);
extern void WriteUserRequestUnion( FILE *file, statement_t *stats );
extern void WriteServerRequestUnion( FILE *file, statement_t *stats );
extern void WriteReplyTypes( FILE *file, statement_t *stats);
extern void WriteCheckReplies( FILE *file, statement_t *stats);
extern void WriteUserReplyUnion( FILE *file, statement_t *stats );
extern void WriteServerReplyUnion( FILE *file, statement_t *stats );
extern void WriteNDRConvertArgDecl( FILE *file, argument_t *arg, char *convert, char *dir);
#endif