diff options
Diffstat (limited to 'mig/type.h')
-rw-r--r-- | mig/type.h | 218 |
1 files changed, 0 insertions, 218 deletions
diff --git a/mig/type.h b/mig/type.h deleted file mode 100644 index f199059..0000000 --- a/mig/type.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1992,1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ - -#ifndef _TYPE_H -#define _TYPE_H - -#include <sys/types.h> - -#include "boolean.h" -#include "mig_string.h" - -typedef u_int ipc_flags_t; - -#define flNone (0x00) -#define flLong (0x01) /* IsLong specified */ -#define flNotLong (0x02) /* NotIsLong specified */ -#define flDealloc (0x04) /* Dealloc specified */ -#define flNotDealloc (0x08) /* NotDealloc specified */ -#define flMaybeDealloc (0x10) /* Dealloc[] specified */ -#define flServerCopy (0x20) /* ServerCopy specified */ -#define flCountInOut (0x40) /* CountInOut specified */ - -typedef enum dealloc { - d_NO, /* do not deallocate */ - d_YES, /* always deallocate */ - d_MAYBE /* deallocate according to parameter */ -} dealloc_t; - -/* Convert dealloc_t to TRUE/FALSE */ -#define strdealloc(d) (strbool(d == d_YES)) - -/* - * itName and itNext are internal fields (not used for code generation). - * They are only meaningful for types entered into the symbol table. - * The symbol table is a simple self-organizing linked list. - * - * The function itCheckDecl checks & fills in computed information. - * Every type actually used (pointed at by argType) is so processed. - * - * The itInName, itOutName, itSize, itNumber, itInLine, itLongForm, - * and itDeallocate fields correspond directly to mach_msg_type_t fields. - * For out-of-line variable sized types, itNumber is zero. For - * in-line variable sized types, itNumber is the maximum size of the - * array. itInName is the msgt_name value supplied to the kernel, - * and itOutName is the msgt_name value received from the kernel. - * Either or both may be MACH_MSG_TYPE_POLYMORPHIC, indicating a - * "polymorphic" msgt_name. For itInName, this means the user - * supplies the value with an argument. For itOutName, this means the - * the value is returned in an argument. - * - * The itInNameStr and itOutNameStr fields contain "printing" versions - * of the itInName and itOutName values. The mapping from number->string - * is not into (eg, MACH_MSG_TYPE_UNSTRUCTURED/MACH_MSG_TYPE_BOOLEAN/ - * MACH_MSG_TYPE_BIT). These fields are used for code-generation and - * pretty-printing. - * - * itFlags contains the user's requests for itLongForm and itDeallocate - * values. itCheckDecl takes it into account when setting itLongForm - * and itDeallocate, but they can be overridden (with a warning message). - * - * itTypeSize is the calculated size of the C type, in bytes. - * itPadSize is the size of any padded needed after the data field. - * itMinTypeSize is the minimum size of the data field, including padding. - * For variable-length inline data, it is zero. - * - * itUserType, itServerType, itTransType are the C types used in - * code generation. itUserType is the C type passed to the user-side stub - * and used for msg declarations in the user-side stub. itServerType - * is the C type used for msg declarations in the server-side stub. - * itTransType is the C type passed to the server function by the - * server-side stub. Normally it differs from itServerType only when - * translation functions are defined. - * - * itInTrans and itOutTrans are translation functions. itInTrans - * takes itServerType values and returns itTransType values. itOutTrans - * takes itTransType vaulues and returns itServerType values. - * itDestructor is a finalization function applied to In arguments - * after the server-side stub calls the server function. It takes - * itTransType values. Any combination of these may be defined. - * - * The following type specification syntax modifies these values: - * type new = old - * ctype: name // itUserType and itServerType - * cusertype: itUserType - * cservertype: itServerType - * intran: itTransType itInTrans(itServerType) - * outtran: itServerType itOutTrans(itTransType) - * destructor: itDestructor(itTransType); - * - * At most one of itStruct and itString should be TRUE. If both are - * false, then this is assumed to be an array type (msg data is passed - * by reference). If itStruct is TRUE, then msg data is passed by value - * and can be assigned with =. If itString is TRUE, then the msg_data - * is a null-terminated string, assigned with strncpy. The itNumber - * value is a maximum length for the string; the msg field always - * takes up this much space. - * - * itVarArray means this is a variable-sized array. If it is inline, - * then itStruct and itString are FALSE. If it is out-of-line, then - * itStruct is TRUE (because pointers can be assigned). - * - * itIndefinite means this is an indefinite-length array - it may be sent - * either inline or out-of-line. itNumber is assigned so that at most - * 2048 bytes are sent inline. - * - * itElement points to any substructure that the type may have. - * It is only used with variable-sized array types. - */ - -typedef struct ipc_type -{ - identifier_t itName; /* Mig's name for this type */ - struct ipc_type *itNext; /* next type in symbol table */ - - u_int itTypeSize; /* size of the C type */ - u_int itPadSize; /* amount of padding after data */ - u_int itMinTypeSize; /* minimal amount of space occupied by data */ - - u_int itInName; /* name supplied to kernel in sent msg */ - u_int itOutName; /* name in received msg */ - u_int itSize; - u_int itNumber; - boolean_t itInLine; - boolean_t itLongForm; - dealloc_t itDeallocate; - - const_string_t itInNameStr; /* string form of itInName */ - const_string_t itOutNameStr;/* string form of itOutName */ - - /* what the user wants, not necessarily what he gets */ - ipc_flags_t itFlags; - - boolean_t itStruct; - boolean_t itString; - boolean_t itVarArray; - boolean_t itIndefinite; - - struct ipc_type *itElement; /* may be NULL */ - - identifier_t itUserType; - identifier_t itServerType; - identifier_t itTransType; - - identifier_t itInTrans; /* may be NULL */ - identifier_t itOutTrans; /* may be NULL */ - identifier_t itDestructor; /* may be NULL */ -} ipc_type_t; - -#define itNULL ((ipc_type_t *) 0) - -extern ipc_type_t *itLookUp(identifier_t name); -extern void itInsert(identifier_t name, ipc_type_t *it); -extern void itTypeDecl(identifier_t name, ipc_type_t *it); - -extern ipc_type_t *itShortDecl(u_int inname, const_string_t instr, - u_int outname, const_string_t outstr, - u_int defsize); -extern ipc_type_t *itLongDecl(u_int inname, const_string_t instr, - u_int outname, const_string_t outstr, - u_int defsize, u_int size, ipc_flags_t flags); -extern ipc_type_t *itPrevDecl(identifier_t name); -extern ipc_type_t *itResetType(ipc_type_t *it); -extern ipc_type_t *itVarArrayDecl(u_int number, const ipc_type_t *it); -extern ipc_type_t *itArrayDecl(u_int number, const ipc_type_t *it); -extern ipc_type_t *itPtrDecl(ipc_type_t *it); -extern ipc_type_t *itStructDecl(u_int number, const ipc_type_t *it); -extern ipc_type_t *itCStringDecl(u_int number, boolean_t varying); - -extern ipc_type_t *itRetCodeType; -extern ipc_type_t *itDummyType; -extern ipc_type_t *itRequestPortType; -extern ipc_type_t *itZeroReplyPortType; -extern ipc_type_t *itRealReplyPortType; -extern ipc_type_t *itWaitTimeType; -extern ipc_type_t *itMsgOptionType; -extern ipc_type_t *itMakeCountType(void); -extern ipc_type_t *itMakePolyType(void); -extern ipc_type_t *itMakeDeallocType(void); - -extern void init_type(void); - -extern void itCheckReturnType(identifier_t name, const ipc_type_t *it); -extern void itCheckRequestPortType(identifier_t name, const ipc_type_t *it); -extern void itCheckReplyPortType(identifier_t name, const ipc_type_t *it); -extern void itCheckIntType(identifier_t name, const ipc_type_t *it); -extern void itCheckNaturalType(identifier_t name, ipc_type_t *it); - - -extern ipc_flags_t itCheckFlags(ipc_flags_t flags, identifier_t name); -extern dealloc_t itCheckDeallocate(const ipc_type_t *it, ipc_flags_t flags, - dealloc_t dfault, identifier_t name); -extern boolean_t itCheckIsLong(const ipc_type_t *it, ipc_flags_t flags, - boolean_t dfault, identifier_t name); - -#endif /* _TYPE_H */ |