15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ioapi.h -- IO base function header for compress/uncompress .zip 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Modifications for Zip64 support 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) For more info read MiniZip_info.txt 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Changes 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) More if/def section may be needed to support other platforms 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (but you should use iowin32.c for windows instead) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _ZLIBIOAPI64_H 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _ZLIBIOAPI64_H 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (!defined(_WIN32)) && (!defined(WIN32)) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Linux needs this to support file operation on files larger then 4+GB 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But might need better if/def to select just the platforms that needs them. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef __USE_FILE_OFFSET64 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define __USE_FILE_OFFSET64 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef __USE_LARGEFILE64 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define __USE_LARGEFILE64 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef _LARGEFILE64_SOURCE 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define _LARGEFILE64_SOURCE 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef _FILE_OFFSET_BIT 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define _FILE_OFFSET_BIT 64 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/zlib/zlib.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_FILE32API) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define fopen64 fopen 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ftello64 ftell 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define fseeko64 fseek 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _MSC_VER 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define fopen64 fopen 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define ftello64 _ftelli64 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define fseeko64 _fseeki64 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #else // old MSC 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define ftello64 ftell 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define fseeko64 fseek 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ZPOS64_T 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifdef _WIN32 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define ZPOS64_T fpos_t 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #else 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include <stdint.h> 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define ZPOS64_T uint64_t 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_MINIZIP64_CONF_H 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "mz64conf.h" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* a type choosen by DEFINE */ 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_64BIT_INT_CUSTOM 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAS_STDINT_H 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "stdint.h" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef uint64_t ZPOS64_T; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_MSC_VER) || defined(__BORLANDC__) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned __int64 ZPOS64_T; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long long int ZPOS64_T; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_SEEK_CUR (1) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_SEEK_END (2) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_SEEK_SET (0) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_MODE_READ (1) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_MODE_WRITE (2) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_MODE_EXISTING (4) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZLIB_FILEFUNC_MODE_CREATE (8) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ZCALLBACK 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define ZCALLBACK CALLBACK 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #else 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define ZCALLBACK 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* here is the "old" 32 bits structure structure */ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct zlib_filefunc_def_s 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open_file_func zopen_file; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_file_func zread_file; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) write_file_func zwrite_file; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tell_file_func ztell_file; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) seek_file_func zseek_file; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_file_func zclose_file; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testerror_file_func zerror_file; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voidpf opaque; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} zlib_filefunc_def; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct zlib_filefunc64_def_s 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open64_file_func zopen64_file; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_file_func zread_file; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) write_file_func zwrite_file; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tell64_file_func ztell64_file; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) seek64_file_func zseek64_file; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_file_func zclose_file; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testerror_file_func zerror_file; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voidpf opaque; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} zlib_filefunc64_def; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* now internal definition, only for zip.c and unzip.h */ 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct zlib_filefunc64_32_def_s 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zlib_filefunc64_def zfile_func64; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open_file_func zopen32_file; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tell_file_func ztell32_file; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) seek_file_func zseek32_file; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} zlib_filefunc64_32_def; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream)) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode)) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 201