/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Copyright <c> 1993 Microsoft Corporation

Module Name :

    global.c

Abtract :

    Contains some global variable declarations for the NDR library.

Author :

    David Kays  dkays   October 1993

Revision History :

--------------------------------------------------------------------*/

#include "ndrp.h"

//
// Simple type buffer alignment masks.
//
const unsigned char SimpleTypeAlignment[] =
				{
    			0, 		// FC_ZERO

    			0, 		// FC_BYTE
    			0, 		// FC_CHAR
    			0, 		// FC_SMALL
    			0, 		// FC_USMALL

    			1, 		// FC_WCHAR
    			1, 		// FC_SHORT
    			1, 		// FC_USHORT

    			3, 		// FC_LONG
    			3, 		// FC_ULONG
    			3, 		// FC_FLOAT

    			7, 		// FC_HYPER
    			7, 		// FC_DOUBLE

				1, 		// FC_ENUM16
				3, 		// FC_ENUM32
				3, 		// FC_IGNORE
				3  		// FC_ERROR_STATUS_T
				};

//
// Simple type buffer sizes.
//
const unsigned char SimpleTypeBufferSize[] =
				{
    			0, 		// FC_ZERO

    			1, 		// FC_BYTE
    			1, 		// FC_CHAR
    			1, 		// FC_SMALL
    			1, 		// FC_USMALL

    			2, 		// FC_WCHAR
    			2, 		// FC_SHORT
    			2, 		// FC_USHORT

    			4, 		// FC_LONG
    			4, 		// FC_ULONG
    			4, 		// FC_FLOAT

    			8, 		// FC_HYPER
    			8, 		// FC_DOUBLE

				2, 		// FC_ENUM16
				4, 		// FC_ENUM32
				4, 		// FC_IGNORE
				4  		// FC_ERROR_STATUS_T
				};

//
// Simple type memory sizes.
//
const unsigned char SimpleTypeMemorySize[] =
				{
    			0, 		// FC_ZERO

    			1, 		// FC_BYTE
    			1, 		// FC_CHAR
    			1, 		// FC_SMALL
    			1, 		// FC_USMALL

    			2, 		// FC_WCHAR
    			2, 		// FC_SHORT
    			2, 		// FC_USHORT

    			4, 		// FC_LONG
    			4, 		// FC_ULONG
    			4, 		// FC_FLOAT

    			8, 		// FC_HYPER
    			8, 		// FC_DOUBLE

				sizeof(int), 		// FC_ENUM16
				sizeof(int), 		// FC_ENUM32
				sizeof(void *), 	// FC_IGNORE
				4  					// FC_ERROR_STATUS_T
				};

//
// Contains information about individual ndr types defined in ndrtypes.h.
// Currently is used only by the interpreter.  A set entry indicates that
// the type is a by-value type.  This may be expanded in the future to 
// contain additional attributes.
//
const unsigned long NdrTypeFlags[] =
    {
    0,        

    //
    // Simple types
    //
    _SIMPLE_TYPE_,        
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,
    _SIMPLE_TYPE_,

    //
    // Pointer types
    //
    _BASIC_POINTER_ | _POINTER_,        
    _BASIC_POINTER_ | _POINTER_,
    _BASIC_POINTER_ | _POINTER_,
    _BASIC_POINTER_ | _POINTER_,

    //
    // Structures
    //
    _STRUCT_ | _BY_VALUE_,        
    _STRUCT_ | _BY_VALUE_,
    _STRUCT_ | _BY_VALUE_,
    _STRUCT_ | _BY_VALUE_,
    _STRUCT_ | _BY_VALUE_,
    _STRUCT_ | _BY_VALUE_,

    //
    // Arrays
    //
    _ARRAY_,        
    _ARRAY_,
    _ARRAY_,
    _ARRAY_,
    _ARRAY_,
    _ARRAY_,
    _ARRAY_,

    //
    // Conformant Strings
    //
    _STRING_,        
    _STRING_,
    _STRING_,
    _STRING_,

    //
    // Non-conformant String.
    //
    _STRING_,        
    _STRING_,
    _STRING_,
    _STRING_,

    // Encapsulated Union
    _UNION_ | _BY_VALUE_,        

    // Non-encapsulated Union
    _UNION_ | _BY_VALUE_,        

    // Byte count pointer (does NOT get _POINTER_ attribute)
    0,        

    // Transmit as
    _XMIT_AS_ | _BY_VALUE_,        

    // Represent as
    _XMIT_AS_ | _BY_VALUE_,        

    // Interface pointer 
    _POINTER_,        

    // Handles (only explicit handles get the _HANDLE_ attribute)
    _HANDLE_,        
    _HANDLE_,
    _HANDLE_,
    0,
    0,
    0,

    // ** Unused section ***
    0,

    0,
    0,
    0,
    0,
    0,
    0,

    0,
    0,
    0,
    0,
    0,
    0,
    0,

    0,
    0,

    0,
    0,
    0,
    0,
    0,

    0,

    0,

    0,
    0,
    0,
    0,
    0,
    0,
    0,

    0,
    0,
    0,
    0,
    0,
    0,

    0,

    0,        // FC_END
    0,        // FC_PAD
    // ** Unused section end ***

    // ** Gap before new format string types ** 
    0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0,
    // ** Gap before new format string types end **

    // 
    // Post NT 3.5 format characters.
    //

    // Hard struct
    _STRUCT_ | _BY_VALUE_,

    // Transmit_as and Represent_as via poiner

    _XMIT_AS_ | _BY_VALUE_,        
    _XMIT_AS_ | _BY_VALUE_,        

    // User_marshal

    _XMIT_AS_ | _BY_VALUE_,

    0
    };