diff srf2fastq/io_lib-1.12.2/io_lib/os.h @ 0:d901c9f41a6a default tip

Migrated tool version 1.0.1 from old tool shed archive to new tool shed repository
author dawe
date Tue, 07 Jun 2011 17:48:05 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srf2fastq/io_lib-1.12.2/io_lib/os.h	Tue Jun 07 17:48:05 2011 -0400
@@ -0,0 +1,456 @@
+/*
+ * File: os.h
+ *
+ * Author: 
+ *         MRC Laboratory of Molecular Biology
+ *	   Hills Road
+ *	   Cambridge CB2 2QH
+ *	   United Kingdom
+ *
+ * Description: operating system specific type definitions
+ *
+ */
+
+#ifndef _OS_H_
+#define _OS_H_
+
+/*
+ * The autoconf setup doesn't use options.mk as the Makefile is rebuilt.
+ * I haven't worked out how to do the analogous via autoconf, so for now
+ * I take the easy approach and hard-code all formats to be enabled
+ */
+#ifdef HAVE_CONFIG_H
+#include "io_lib_config.h"
+#define IOLIB_ABI
+#define IOLIB_SCF
+#define IOLIB_ALF
+#define IOLIB_PLN
+#define IOLIB_CTF
+#define IOLIB_EXP
+#define IOLIB_SFF
+#endif
+
+#include <limits.h>
+#include <inttypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Emulation of config.h stuff when not using autoconf
+ */
+#ifndef HAVE_CONFIG_H
+#    ifndef HAVE_ZLIB
+#        define HAVE_ZLIB
+#    endif
+#    ifndef HAVE_SYS_WAIT_H
+#        define HAVE_SYS_WAIT_H
+#    endif
+#endif
+
+/*
+ *-----------------------------------------------------------------------------
+ * <inttypes.h> definitions, incase they're not present
+ *-----------------------------------------------------------------------------
+ */
+#ifndef PRId64
+#define __PRI64__ "l"
+#define PRId64 __PRI64__ "d"
+#define PRId32 "d"
+#define PRId16 "d"
+#define PRId8  "d"
+#define PRIu64 __PRI64__ "u"
+#define PRIu32 "u"
+#define PRIu16 "u"
+#define PRIu8  "u"
+#endif
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * Operating system specifics
+ *-----------------------------------------------------------------------------
+ */
+/*
+ * SunOS 4.x
+ * Even though we use the ANSI gcc, we make use the the standard SunOS 4.x
+ * libraries and include files, which are non-ansi
+ */
+#if defined(__sun__) && !defined(__svr4__)
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+#define FOPEN_MAX 64
+#define FILENAME_MAX 1024
+
+/* Missing functions, defined in strings.c */
+#define NOMEMMOVE
+#define NOSTRERROR
+#define BUGGY_SSCANF
+#endif
+
+/* 
+ * SunOS 5.x - gcc or Sun's cc 
+ */ 
+#if (defined(__sun__) || defined(__sun)) && (defined(__svr4__) || defined(__SVR4))
+#  define IMAGEDISPLAY 
+#  define NOSTRDUP 
+#endif 
+
+/*
+ * Microsoft Visual C++
+ * Windows
+ */
+#if defined(_MSC_VER)
+#define popen _popen
+#define pclose _pclose
+typedef int mode_t;
+#define ftruncate(fd,len) _chsize(fd,len)
+#define sysconf(x) 512
+#define NOPIPE
+#define NOLOCKF
+#define NOSTRCASECMP
+#define NO_STRPTIME
+#undef HAVE_SYS_WAIT_H
+#endif
+
+
+/*
+ * Microsoft Windows running MinGW
+ */
+#if defined(__MINGW32__)
+/* #define mkdir(filename,mode) mkdir((filename)) */
+#define NOPIPE
+#define NOLOCKF
+#define NO_STRPTIME
+#define sysconf(x) 512
+#define ftruncate(fd,len) _chsize(fd,len)
+#undef HAVE_SYS_WAIT_H
+#endif
+
+/* Generic WIN32 API issues */
+#ifdef _WIN32
+#  ifndef HAVE_FSEEKO
+#    if __MSVCRT_VERSION__ >= 0x800
+       /* if you have MSVCR80 installed then you can use these definitions: */
+#      define off_t __int64
+#      define fseeko _fseeki64
+#      define ftello _ftelli64
+#    else
+       /* otherwise we're stuck with 32-bit file support */
+#      define off_t long
+#      define fseeko fseek
+#      define ftello ftell
+#    endif
+#  endif /* !HAVE_FSEEKO */
+#endif /* _WIN32 */
+
+/*
+ * Linux on AMD64 also needs to use va_copy()
+ */
+#if defined(__linux__) && defined(__amd64__)
+#  ifndef NEED_VA_COPY
+#    define NEED_VA_COPY
+#  endif
+#endif
+
+/*
+ * DEC Alpha's running Digital UNIX
+ */
+#if defined(__alpha)
+/* Nothing as yet */
+#endif
+
+/*
+ * Silicon Graphics - Irix
+ */
+#if defined(__sgi)
+#define NOSTRDUP
+#define NO_STRPTIME
+#endif
+
+/*
+ * Macs (<= OS 9) - yuk!
+ */
+#if defined(MAC)
+#define NOSTRDUP
+#endif
+
+#if defined(__APPLE__) && defined(__ppc__)
+#define NO_STRPTIME
+#define NOLOCKF
+#endif
+
+#if defined(__APPLE__) && defined(__i386__)
+/* nothing untoward as yet */
+#endif
+
+/*
+ *-----------------------------------------------------------------------------
+ * Machine endianness.
+ * These are overridden at the end when using autoconf, but are here for
+ * when being built as part of the Staden Package.
+ *-----------------------------------------------------------------------------
+ */
+
+/*
+ * First guess via autoconf. This is here as endianness can only be computed
+ * by autoconf for the machine we're building on. Hence cross-compilations
+ * or MacOSX "fat binaries" cannot work via autoconf in this manner.
+ *
+ * These provide a default for when the machine specific ifdefs below do you
+ * catch your system type.
+ */
+#ifdef HAVE_CONFIG_H
+#    if defined(WORDS_BIGENDIAN)
+#        ifdef SP_LITTLE_ENDIAN
+#            undef SP_LITTLE_ENDIAN
+#        endif
+#        define SP_BIG_ENDIAN
+#    else
+#        ifdef SP_BIG_ENDIAN
+#            undef SP_BIG_ENDIAN
+#        endif
+#        define SP_LITTLE_ENDIAN
+#    endif
+#endif
+
+/*
+ * x86 equivalents
+ */
+#if defined(__i386__) || defined(__i386) || defined(__amd64__) || defined(__amd64)
+#  if defined(SP_BIG_ENDIAN)
+#    undef SP_BIG_ENDIAN
+#  endif
+#  define SP_LITTLE_ENDIAN
+#endif
+
+/*
+ * DEC Alpha
+ */
+#if defined(__alpha__) || defined(__alpha)
+#  if defined(SP_LITTLE_ENDIAN)
+#    undef SP_LITTLE_ENDIAN
+#  endif
+#  define SP_BIG_ENDIAN
+#endif
+
+/*
+ * SUN Sparc
+ */
+#if defined(__sparc__) || defined(__sparc)
+#  if defined(SP_LITTLE_ENDIAN)
+#    undef SP_LITTLE_ENDIAN
+#  endif
+#  define SP_BIG_ENDIAN
+#endif
+
+/*
+ * PowerPC
+ */
+#if defined(__ppc__) || defined(__ppc)
+#  if defined(SP_LITTLE_ENDIAN)
+#    undef SP_LITTLE_ENDIAN
+#  endif
+#  define SP_BIG_ENDIAN
+#endif
+
+/* Some catch-alls */
+#if defined(__LITTLE_ENDIAN__) || defined(__LITTLEENDIAN__)
+#    define SP_LITTLE_ENDIAN
+#endif
+
+#if defined(__BIG_ENDIAN__) || defined(__BIGENDIAN__)
+#    define SP_BIG_ENDIAN
+#endif
+
+#if defined(SP_BIG_ENDIAN) && defined(SP_LITTLE_ENDIAN)
+#    error Both BIG and LITTLE endian defined. Fix os.h and/or Makefile
+#endif
+
+#if !defined(SP_BIG_ENDIAN) && !defined(SP_LITTLE_ENDIAN)
+#    error Neither BIG nor LITTLE endian defined. Fix os.h and/or Makefile
+#endif
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * Typedefs for data sizes. Note there's umpteen versions of typedefs here
+ * due to old code being supported. The ones that should be used everywhere
+ * are {u,}int[124].
+ *
+ * C9X defines its own versions of these in inttypes.h so new code should
+ * ideally be using the (for example) int32_t style of types.
+ *-----------------------------------------------------------------------------
+ */
+
+/*
+ * One byte integers
+ */ 
+typedef unsigned char	int1;
+typedef unsigned char	uint1;
+
+/*
+ * Two byte integers
+ */
+typedef signed short	int2;
+typedef unsigned short	uint2;
+
+/*
+ * Four byte integers
+ */
+typedef signed int	int4;
+typedef unsigned int	uint4;
+
+typedef int64_t		int8;
+typedef uint64_t	uint8;
+
+/*
+ * Backwards compatibility
+ */
+typedef signed char	int_1;
+typedef unsigned char	uint_1;
+typedef signed short	int_2;
+typedef unsigned short	uint_2;
+typedef signed int	int_4;
+typedef unsigned int	uint_4;
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * The FORTRAN interface.
+ *-----------------------------------------------------------------------------
+ */
+
+typedef int4 f_int;
+typedef int4 f_implicit;
+typedef void f_proc_ret;	/* procedure return value */
+
+/* James Bonfield compatability mode */
+typedef int4 int_f;		/* f_int */
+typedef int4 int_fl;		/* f_implicit */
+
+#define f_proc_return() return /* (f_proc_ret) 0 */
+
+/*
+ * Use when calling/defining a Fortran function from C.
+ */
+#ifdef VMS
+#    define FORT(symbol) (symbol)
+#else
+#    define FORT(symbol) (_symbol)
+#endif
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * Some handy definitions.
+ *-----------------------------------------------------------------------------
+ */
+
+#define MAXINT8 (9223372036854775807LL)
+#define MAXINT4 (INT_MAX)
+#define MAXINT2 (SHRT_MAX)
+
+
+/*
+ *=============================================================================
+ * Anything below here should not be changed.
+ *=============================================================================
+ */
+
+#define False 0
+#define True 1
+
+
+/*
+ * Our new swap runs at the same speed on Ultrix, but substantially faster
+ * (300% for swap_int4, ~50% for swap_int2) on an Alpha (due to the lack of
+ * decent 'char' support).
+ *
+ * They also have the ability to swap in situ (src == dst). Newer code now
+ * relies on this so don't change back!
+ */
+#define iswap_int8(x) \
+    (((x & 0x00000000000000ffLL) << 56) + \
+     ((x & 0x000000000000ff00LL) << 40) + \
+     ((x & 0x0000000000ff0000LL) << 24) + \
+     ((x & 0x00000000ff000000LL) <<  8) + \
+     ((x & 0x000000ff00000000LL) >>  8) + \
+     ((x & 0x0000ff0000000000LL) >> 24) + \
+     ((x & 0x00ff000000000000LL) >> 40) + \
+     ((x & 0xff00000000000000LL) >> 56))
+
+#define iswap_int4(x) \
+    (((x & 0x000000ff) << 24) + \
+     ((x & 0x0000ff00) <<  8) + \
+     ((x & 0x00ff0000) >>  8) + \
+     ((x & 0xff000000) >> 24))
+
+#define iswap_int2(x) \
+    (((x & 0x00ff) << 8) + \
+     ((x & 0xff00) >> 8))
+
+#define swap_int8(src, dst) ((dst) = iswap_int8(src))
+#define swap_int4(src, dst) ((dst) = iswap_int4(src))
+#define swap_int2(src, dst) ((dst) = iswap_int2(src))
+
+
+/*
+ * Linux systems may use byteswap.h to get assembly versions of byte-swap
+ * on intel systems. This can be as trivial as the bswap opcode, which works
+ * out at over 2-times faster than iswap_int4 above.
+ */
+#if 0
+#if defined(__linux__)
+#    include <byteswap.h>
+#    undef iswap_int8
+#    undef iswap_int4
+#    undef iswap_int2
+#    define iswap_int8 bswap_64
+#    define iswap_int4 bswap_32
+#    define iswap_int2 bswap_16
+#endif
+#endif
+
+
+/*
+ * Macros to specify that data read in is of a particular endianness.
+ * The macros here swap to the appropriate order for the particular machine
+ * running the macro and return the new answer. These may also be used when
+ * writing to a file to specify that we wish to write in (eg) big endian
+ * format.
+ *
+ * This leads to efficient code as most of the time these macros are
+ * trivial.
+ */
+#ifdef SP_BIG_ENDIAN
+#define be_int8(x) (x)
+#define be_int4(x) (x)
+#define be_int2(x) (x)
+#define be_int1(x) (x)
+
+#define le_int8(x) iswap_int8((x))
+#define le_int4(x) iswap_int4((x))
+#define le_int2(x) iswap_int2((x))
+#define le_int1(x) (x)
+#endif
+
+#ifdef SP_LITTLE_ENDIAN
+#define be_int8(x) iswap_int8((x))
+#define be_int4(x) iswap_int4((x))
+#define be_int2(x) iswap_int2((x))
+#define be_int1(x) (x)
+
+#define le_int8(x) (x)
+#define le_int4(x) (x)
+#define le_int2(x) (x)
+#define le_int1(x) (x)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_OS_H_*/