Pastey Adding C_ULONGLONG

diff -r 7e229e5759d1 include/std/dll.e 
--- a/include/std/dll.e Fri Feb 13 12:58:19 2015 -0500 
+++ b/include/std/dll.e Fri Feb 13 18:27:01 2015 -0500 
@@ -52,6 +52,8 @@ 
        C_POINTER = #03000001, 
        --** longlong 64-bits 
        C_LONGLONG  = #03000002, 
+       --** unsigned longlong 64-bits 
+       C_ULONGLONG  = #03000010, 
        $ 
 ifdef BITS32 then 
 public constant 
diff -r 7e229e5759d1 source/be_callc.c 
--- a/source/be_callc.c Fri Feb 13 12:58:19 2015 -0500 
+++ b/source/be_callc.c Fri Feb 13 18:27:01 2015 -0500 
@@ -1361,7 +1361,7 @@ 
                                RTFatal("argument out of range."); 
                        } 
                } 
-               else if( size == C_LONGLONG ){ 
+               else if( size == C_LONGLONG || size == C_ULONGLONG ){ 
                        if (IS_ATOM_INT(next_arg)) { 
                                PUSH_INT64_ARG(next_arg); 
                        } 
@@ -1504,6 +1504,24 @@ 
                        return NewDouble( (eudouble) int64_t_result ); 
                } 
        } 
+       else if (return_type == C_ULONGLONG ){ 
+ 
+               #if UINTPTR_MAX == UINT32_MAX 
+                       unsigned long long int uint64_t_result; 
+               #else 
+                       #define uint64_t_result int_result 
+               #endif 
+               #if __ARM_PCS_VFP == 1 
+                       uint64_t_result = icall_x86_64( long_proc_address, (double*)dbl_op, arg_op, int_args SIGNATURE_PARAM ); 
+               #endif 
+               call_routine(uint64_t); 
+               if( uint64_t_result <= (unsigned long long int)MAXINT && int64_t_result >= (unsigned long long int)0 ){ 
+                       return (intptr_t) uint64_t_result; 
+               } 
+               else{ 
+                       return NewDouble( (eudouble) uint64_t_result ); 
+               } 
+       } 
        else if (return_type == C_FLOAT) { 
                // expect float to be returned from C routine 
                call_routine(float); 
diff -r 7e229e5759d1 source/be_runtime.c 
--- a/source/be_runtime.c       Fri Feb 13 12:58:19 2015 -0500 
+++ b/source/be_runtime.c       Fri Feb 13 18:27:01 2015 -0500 
@@ -6467,6 +6467,8 @@ 
                        return sizeof( long ); 
                case C_LONGLONG: 
                        return sizeof( long long ); 
+               case C_ULONGLONG: 
+                       return sizeof( unsigned long long ); 
                default: 
                        return 0; 
        } 
diff -r 7e229e5759d1 source/execute.h 
--- a/source/execute.h  Fri Feb 13 12:58:19 2015 -0500 
+++ b/source/execute.h  Fri Feb 13 18:27:01 2015 -0500 
@@ -308,23 +308,24 @@ 
 #endif 
 
 /* .dll argument & return value types */ 
-#define C_TYPE     0x0F000000 
-#define C_DOUBLE   0x03000008 
-#define C_FLOAT    0x03000004 
-#define C_CHAR     0x01000001 
-#define C_UCHAR    0x02000001 
-#define C_SHORT    0x01000002 
-#define C_USHORT   0x02000002 
-#define E_INTEGER  0x06000004 
-#define E_ATOM     0x07000004 
-#define E_SEQUENCE 0x08000004 
-#define E_OBJECT   0x09000004 
-#define C_INT      0x01000004 
-#define C_UINT     0x02000004 
-#define C_LONG     0x01000008 
-#define C_ULONG    0x02000008 
-#define C_POINTER  0x03000001 
-#define C_LONGLONG 0x03000002 
+#define C_TYPE      0x0F000000 
+#define C_DOUBLE    0x03000008 
+#define C_FLOAT     0x03000004 
+#define C_CHAR      0x01000001 
+#define C_UCHAR     0x02000001 
+#define C_SHORT     0x01000002 
+#define C_USHORT    0x02000002 
+#define E_INTEGER   0x06000004 
+#define E_ATOM      0x07000004 
+#define E_SEQUENCE  0x08000004 
+#define E_OBJECT    0x09000004 
+#define C_INT       0x01000004 
+#define C_UINT      0x02000004 
+#define C_LONG      0x01000008 
+#define C_ULONG     0x02000008 
+#define C_POINTER   0x03000001 
+#define C_LONGLONG  0x03000002 
+#define C_ULONGLONG 0x03000010 
 
 #define C_STDCALL 0 
 #define C_CDECL 1 
diff -r 7e229e5759d1 source/test818.c 
--- a/source/test818.c  Fri Feb 13 12:58:19 2015 -0500 
+++ b/source/test818.c  Fri Feb 13 18:27:01 2015 -0500 
@@ -21,6 +21,7 @@ 
 #define C000_LONG_VALUE (0xC * (1L << (8*sizeof(long)-8))) 
 #define C000_SHORT_VALUE (0xC * (1 << (8*sizeof(short)-8))) 
 #define C000_LONGLONG_VALUE (0xC * (1LL << (8*sizeof(long long)-8))) 
+#define C000_ULONGLONG_VALUE (0xC * (1ULL << (8*sizeof(unsigned long long)-8))) 
 #define C000_FLOAT_VALUE (float)(0xC * (1 << (8*sizeof(float)-8))) 
 #define C000_DOUBLE_VALUE (double)(0xC * (1 << (8*sizeof(double)-8))) 
 typedef signed char Byte; 
@@ -58,6 +59,7 @@ 
 MAKE_BORDER_FUNCTIONS(long,C_LONG) 
 #endif 
 MAKE_BORDER_FUNCTIONS(long long,C_LONGLONG) 
+MAKE_BORDER_FUNCTIONS(unsigned long long,C_ULONGLONG) 
 MAKE_BORDER_FUNCTIONS(float, C_FLOAT) 
 MAKE_BORDER_FUNCTIONS(double, C_DOUBLE) 
 
@@ -78,6 +80,7 @@ 
 MAKE_ID_FUNCTION(long, C_LONG) 
 MAKE_ID_FUNCTION(unsigned long, C_ULONG) 
 MAKE_ID_FUNCTION(long long, C_LONGLONG) 
+MAKE_ID_FUNCTION(unsigned long long, C_ULONGLONG) 
 
 MAKE_ID_FUNCTION(float, C_FLOAT) 
 MAKE_ID_FUNCTION(double, C_DOUBLE) 
@@ -92,18 +95,21 @@ 
 MAKE_GET_VAL_FN(int,       C_INT,      _BFF_FD, C000_INT_VALUE - 20) 
 MAKE_GET_VAL_FN(long,      C_LONG,     _BFF_FD, C000_LONG_VALUE - 20) 
 MAKE_GET_VAL_FN(long long, C_LONGLONG, _BFF_FD, C000_LONGLONG_VALUE - 20) 
+MAKE_GET_VAL_FN(unsigned long long, C_ULONGLONG, _BFF_FD, C000_LONGLONG_VALUE - 20) 
 
 MAKE_GET_VAL_FN(char,      C_CHAR,     _M20, -20) 
 MAKE_GET_VAL_FN(short,     C_SHORT,    _M20, -20) 
 MAKE_GET_VAL_FN(int,       C_INT,      _M20, -20) 
 MAKE_GET_VAL_FN(long,      C_LONG,     _M20, -20) 
 MAKE_GET_VAL_FN(long long, C_LONGLONG, _M20, -20) 
+MAKE_GET_VAL_FN(unsigned long long, C_ULONGLONG, _M20, -20) 
 
 MAKE_GET_VAL_FN(char,      C_CHAR,     _M100, -100) 
 MAKE_GET_VAL_FN(short,     C_SHORT,    _M100, -10000) 
 MAKE_GET_VAL_FN(int,       C_INT,      _M100, -1000000000) 
 MAKE_GET_VAL_FN(long,      C_LONG,     _M100, ((sizeof(long) == sizeof(long long)) ? -1000000000000000000LL : -1000000000L) ) 
 MAKE_GET_VAL_FN(long long, C_LONGLONG, _M100, -1000000000000000000LL) 
+MAKE_GET_VAL_FN(unsigned long long, C_ULONGLONG, _M100, -1000000000000000000LL) 
 
 
 EXPORT double sum_C_FLOAT_C_DOUBLE(float f1, double d1) {