diff options
| author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-10-12 10:49:29 +0000 | 
|---|---|---|
| committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-10-12 10:49:29 +0000 | 
| commit | 557f2816f5cd30705dec989c97a8a67c026d36d1 (patch) | |
| tree | 4900789ab5d52219bf065744a61f9ea5863b3428 /plugins/FreeImage/Source/LibTIFF/tif_vms.c | |
| parent | 69fe21d6e2262d6fb2b14278b7a20364468cbdcf (diff) | |
FreeImage: folders restructurization
git-svn-id: http://svn.miranda-ng.org/main/trunk@1884 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/FreeImage/Source/LibTIFF/tif_vms.c')
| -rw-r--r-- | plugins/FreeImage/Source/LibTIFF/tif_vms.c | 595 | 
1 files changed, 0 insertions, 595 deletions
diff --git a/plugins/FreeImage/Source/LibTIFF/tif_vms.c b/plugins/FreeImage/Source/LibTIFF/tif_vms.c deleted file mode 100644 index 553f5072e3..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_vms.c +++ /dev/null @@ -1,595 +0,0 @@ -/* $Id: tif_vms.c,v 1.21 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library VMS-specific Routines.
 - */
 -
 -#include <stdlib.h>
 -#include <unixio.h>
 -#include "tiffiop.h"
 -#if !HAVE_IEEEFP
 -#include <math.h>
 -#endif
 -
 -#ifdef VAXC
 -#define	NOSHARE	noshare
 -#else
 -#define	NOSHARE
 -#endif
 -
 -#ifdef __alpha
 -/* Dummy entry point for backwards compatibility */
 -void TIFFModeCCITTFax3(void){}
 -#endif
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (read((int) fd, buf, size));
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (write((int) fd, buf, size));
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	return ((toff_t) lseek((int) fd, (off_t) off, whence));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (close((int) fd));
 -}
 -
 -#include <sys/stat.h>
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	struct stat sb;
 -	return (toff_t) (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
 -}
 -
 -#ifdef HAVE_MMAP
 -#include <starlet.h>
 -#include <fab.h>
 -#include <secdef.h>
 -
 -/*
 - * Table for storing information on current open sections. 
 - * (Should really be a linked list)
 - */
 -#define MAX_MAPPED 100
 -static int no_mapped = 0;
 -static struct {
 -	char *base;
 -	char *top;
 -	unsigned short channel;
 -} map_table[MAX_MAPPED];
 -
 -/* 
 - * This routine maps a file into a private section. Note that this 
 - * method of accessing a file is by far the fastest under VMS.
 - * The routine may fail (i.e. return 0) for several reasons, for
 - * example:
 - * - There is no more room for storing the info on sections.
 - * - The process is out of open file quota, channels, ...
 - * - fd does not describe an opened file.
 - * - The file is already opened for write access by this process
 - *   or another process
 - * - There is no free "hole" in virtual memory that fits the
 - *   size of the file
 - */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	char name[256];
 -	struct FAB fab;
 -	unsigned short channel;
 -	char *inadr[2], *retadr[2];
 -	unsigned long status;
 -	long size;
 -	
 -	if (no_mapped >= MAX_MAPPED)
 -		return(0);
 -	/*
 -	 * We cannot use a file descriptor, we
 -	 * must open the file once more.
 -	 */
 -	if (getname((int)fd, name, 1) == NULL)
 -		return(0);
 -	/* prepare the FAB for a user file open */
 -	fab = cc$rms_fab;
 -	fab.fab$l_fop |= FAB$V_UFO;
 -	fab.fab$b_fac = FAB$M_GET;
 -	fab.fab$b_shr = FAB$M_SHRGET;
 -	fab.fab$l_fna = name;
 -	fab.fab$b_fns = strlen(name);
 -	status = sys$open(&fab);	/* open file & get channel number */
 -	if ((status&1) == 0)
 -		return(0);
 -	channel = (unsigned short)fab.fab$l_stv;
 -	inadr[0] = inadr[1] = (char *)0; /* just an address in P0 space */
 -	/*
 -	 * Map the blocks of the file up to
 -	 * the EOF block into virtual memory.
 -	 */
 -	size = _tiffSizeProc(fd);
 -	status = sys$crmpsc(inadr, retadr, 0, SEC$M_EXPREG, 0,0,0, channel,
 -		TIFFhowmany(size,512), 0,0,0);
 -	if ((status&1) == 0){
 -		sys$dassgn(channel);
 -		return(0);
 -	}
 -	*pbase = (tdata_t) retadr[0];	/* starting virtual address */
 -	/*
 -	 * Use the size of the file up to the
 -	 * EOF mark for UNIX compatibility.
 -	 */
 -	*psize = (toff_t) size;
 -	/* Record the section in the table */
 -	map_table[no_mapped].base = retadr[0];
 -	map_table[no_mapped].top = retadr[1];
 -	map_table[no_mapped].channel = channel;
 -	no_mapped++;
 -
 -        return(1);
 -}
 -
 -/*
 - * This routine unmaps a section from the virtual address space of 
 - * the process, but only if the base was the one returned from a
 - * call to TIFFMapFileContents.
 - */
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	char *inadr[2];
 -	int i, j;
 -	
 -	/* Find the section in the table */
 -	for (i = 0;i < no_mapped; i++) {
 -		if (map_table[i].base == (char *) base) {
 -			/* Unmap the section */
 -			inadr[0] = (char *) base;
 -			inadr[1] = map_table[i].top;
 -			sys$deltva(inadr, 0, 0);
 -			sys$dassgn(map_table[i].channel);
 -			/* Remove this section from the list */
 -			for (j = i+1; j < no_mapped; j++)
 -				map_table[j-1] = map_table[j];
 -			no_mapped--;
 -			return;
 -		}
 -	}
 -}
 -#else /* !HAVE_MMAP */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -}
 -#endif /* !HAVE_MMAP */
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -	    (thandle_t) fd,
 -	    _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
 -	    _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m, fd;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -        if (m&O_TRUNC){
 -                /*
 -		 * There is a bug in open in VAXC. If you use
 -		 * open w/ m=O_RDWR|O_CREAT|O_TRUNC the
 -		 * wrong thing happens.  On the other hand
 -		 * creat does the right thing.
 -                 */
 -                fd = creat((char *) /* bug in stdio.h */ name, 0666,
 -		    "alq = 128", "deq = 64", "mbc = 32",
 -		    "fop = tef");
 -	} else if (m&O_RDWR) {
 -		fd = open(name, m, 0666,
 -		    "deq = 64", "mbc = 32", "fop = tef", "ctx = stm");
 -	} else
 -		fd = open(name, m, 0666, "mbc = 32", "ctx = stm");
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF*)0);
 -	}
 -	return (TIFFFdOpen(fd, name, mode));
 -}
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (malloc((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	free(p);
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (realloc(p, (size_t) s));
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -/*
 - * On the VAX, we need to make those global, writable pointers
 - * non-shareable, otherwise they would be made shareable by default.
 - * On the AXP, this brain damage has been corrected. 
 - * 
 - * I (Karsten Spang, krs@kampsax.dk) have dug around in the GCC
 - * manual and the GAS code and have come up with the following
 - * construct, but I don't have GCC on my VAX, so it is untested.
 - * Please tell me if it does not work.
 - */
 -
 -static void
 -vmsWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -
 -NOSHARE TIFFErrorHandler _TIFFwarningHandler = vmsWarningHandler
 -#if defined(VAX) && defined(__GNUC__)
 -asm("_$$PsectAttributes_NOSHR$$_TIFFwarningHandler")
 -#endif
 -;
 -
 -static void
 -vmsErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -
 -NOSHARE TIFFErrorHandler _TIFFerrorHandler = vmsErrorHandler
 -#if defined(VAX) && defined(__GNUC__)
 -asm("_$$PsectAttributes_NOSHR$$_TIFFerrorHandler")
 -#endif
 -;
 -
 -
 -#if !HAVE_IEEEFP
 -/* IEEE floting point handling */
 -
 -typedef	struct ieeedouble {
 -	unsigned long	mant2;          /* fix NDR: full 8-byte swap */
 -	unsigned long	mant	: 20,
 -		        exp	: 11,
 -		        sign	: 1;
 -} ieeedouble;
 -typedef	struct ieeefloat {
 -	unsigned long   mant	: 23,
 -		        exp	: 8,
 -		        sign	: 1;
 -} ieeefloat;
 -
 -/* 
 - * NB: These are D_FLOAT's, not G_FLOAT's. A G_FLOAT is
 - *  simply a reverse-IEEE float/double.
 - */
 -
 -typedef	struct {
 -	unsigned long	mant1	: 7,
 -		        exp	: 8,
 -		        sign	: 1,
 -		        mant2	: 16,
 -		        mant3   : 16,
 -		        mant4   : 16;
 -} nativedouble;
 -typedef	struct {
 -	unsigned long	mant1	: 7,
 -		        exp	: 8,
 -		        sign	: 1,
 -		        mant2	: 16;
 -} nativefloat;
 -
 -typedef	union {
 -	ieeedouble	ieee;
 -	nativedouble	native;
 -	char		b[8];
 -	uint32		l[2];
 -	double		d;
 -} double_t;
 -
 -typedef	union {
 -	ieeefloat	ieee;
 -	nativefloat	native;
 -	char		b[4];
 -	uint32		l;
 -	float		f;
 -} float_t;
 -
 -#if defined(VAXC) || defined(DECC)
 -#pragma inline(ieeetod,dtoieee)
 -#endif
 -
 -/*
 - * Convert an IEEE double precision number to native double precision.
 - * The source is contained in two longwords, the second holding the sign,
 - * exponent and the higher order bits of the mantissa, and the first
 - * holding the rest of the mantissa as follows:
 - * (Note: It is assumed that the number has been eight-byte swapped to
 - * LSB first.)
 - * 
 - * First longword:
 - *	32 least significant bits of mantissa
 - * Second longword:
 - *	0-19:	20 most significant bits of mantissa
 - *	20-30:	exponent
 - *	31:	sign
 - * The exponent is stored as excess 1023.
 - * The most significant bit of the mantissa is implied 1, and not stored.
 - * If the exponent and mantissa are zero, the number is zero.
 - * If the exponent is 0 (i.e. -1023) and the mantissa is non-zero, it is an
 - * unnormalized number with the most significant bit NOT implied.
 - * If the exponent is 2047, the number is invalid, in case the mantissa is zero,
 - * this means overflow (+/- depending of the sign bit), otherwise
 - * it simply means invalid number.
 - * 
 - * If the number is too large for the machine or was specified as overflow, 
 - * +/-HUGE_VAL is returned.
 - */
 -INLINE static void
 -ieeetod(double *dp)
 -{
 -	double_t source;
 -	long sign,exp,mant;
 -	double dmant;
 -
 -	source.ieee = ((double_t*)dp)->ieee;
 -	sign = source.ieee.sign;
 -	exp = source.ieee.exp;
 -	mant = source.ieee.mant;
 -
 -	if (exp == 2047) {
 -		if (mant)			/* Not a Number (NAN) */
 -			*dp = HUGE_VAL;
 -		else				/* +/- infinity */
 -			*dp = (sign ? -HUGE_VAL : HUGE_VAL);
 -		return;
 -	}
 -	if (!exp) {
 -		if (!(mant || source.ieee.mant2)) {	/* zero */
 -			*dp=0;
 -			return;
 -		} else {			/* Unnormalized number */
 -			/* NB: not -1023, the 1 bit is not implied */
 -			exp= -1022;
 -		}
 -	} else {
 -		mant |= 1<<20;
 -		exp -= 1023;
 -	}
 -	dmant = (((double) mant) +
 -		((double) source.ieee.mant2) / (((double) (1<<16)) *
 -		((double) (1<<16)))) / (double) (1<<20);
 -	dmant = ldexp(dmant, exp);
 -	if (sign)
 -		dmant= -dmant;
 -	*dp = dmant;
 -}
 -
 -INLINE static void
 -dtoieee(double *dp)
 -{
 -	double_t num;
 -	double x;
 -	int exp;
 -
 -	num.d = *dp;
 -	if (!num.d) {			/* Zero is just binary all zeros */
 -		num.l[0] = num.l[1] = 0;
 -		return;
 -	}
 -
 -	if (num.d < 0) {		/* Sign is encoded separately */
 -		num.d = -num.d;
 -		num.ieee.sign = 1;
 -	} else {
 -		num.ieee.sign = 0;
 -	}
 -
 -	/* Now separate the absolute value into mantissa and exponent */
 -	x = frexp(num.d, &exp);
 -
 -	/*
 -	 * Handle cases where the value is outside the
 -	 * range for IEEE floating point numbers. 
 -	 * (Overflow cannot happen on a VAX, but underflow
 -	 * can happen for G float.)
 -	 */
 -	if (exp < -1022) {		/* Unnormalized number */
 -		x = ldexp(x, -1023-exp);
 -		exp = 0;
 -	} else if (exp > 1023) {	/* +/- infinity */
 -		x = 0;
 -		exp = 2047;
 -	} else {			/* Get rid of most significant bit */
 -		x *= 2;
 -		x -= 1;
 -		exp += 1022; /* fix NDR: 1.0 -> x=0.5, exp=1 -> ieee.exp = 1023 */
 -	}
 -	num.ieee.exp = exp;
 -
 -	x *= (double) (1<<20);
 -	num.ieee.mant = (long) x;
 -	x -= (double) num.ieee.mant;
 -	num.ieee.mant2 = (long) (x*((double) (1<<16)*(double) (1<<16)));
 -
 -	if (!(num.ieee.mant || num.ieee.exp || num.ieee.mant2)) {
 -		/* Avoid negative zero */
 -		num.ieee.sign = 0;
 -	}
 -	((double_t*)dp)->ieee = num.ieee;
 -}
 -
 -/*
 - * Beware, these do not handle over/under-flow
 - * during conversion from ieee to native format.
 - */
 -#define	NATIVE2IEEEFLOAT(fp) { \
 -    float_t t; \
 -    if (t.ieee.exp = (fp)->native.exp) \
 -	t.ieee.exp += -129 + 127; \
 -    t.ieee.sign = (fp)->native.sign; \
 -    t.ieee.mant = ((fp)->native.mant1<<16)|(fp)->native.mant2; \
 -    *(fp) = t; \
 -}
 -#define	IEEEFLOAT2NATIVE(fp) { \
 -    float_t t; int v = (fp)->ieee.exp; \
 -    if (v) v += -127 + 129;		/* alter bias of exponent */\
 -    t.native.exp = v;			/* implicit truncation of exponent */\
 -    t.native.sign = (fp)->ieee.sign; \
 -    v = (fp)->ieee.mant; \
 -    t.native.mant1 = v >> 16; \
 -    t.native.mant2 = v;\
 -    *(fp) = t; \
 -}
 -
 -#define IEEEDOUBLE2NATIVE(dp) ieeetod(dp)
 -
 -#define NATIVE2IEEEDOUBLE(dp) dtoieee(dp)
 -
 -
 -/*
 - * These unions are used during floating point
 - * conversions.  The above macros define the
 - * conversion operations.
 - */
 -void
 -TIFFCvtIEEEFloatToNative(TIFF* tif, u_int n, float* f)
 -{
 -	float_t* fp = (float_t*) f;
 -
 -	while (n-- > 0) {
 -		IEEEFLOAT2NATIVE(fp);
 -		fp++;
 -	}
 -}
 -
 -void
 -TIFFCvtNativeToIEEEFloat(TIFF* tif, u_int n, float* f)
 -{
 -	float_t* fp = (float_t*) f;
 -
 -	while (n-- > 0) {
 -		NATIVE2IEEEFLOAT(fp);
 -		fp++;
 -	}
 -}
 -void
 -TIFFCvtIEEEDoubleToNative(TIFF* tif, u_int n, double* f)
 -{
 -	double_t* fp = (double_t*) f;
 -
 -	while (n-- > 0) {
 -		IEEEDOUBLE2NATIVE(fp);
 -		fp++;
 -	}
 -}
 -
 -void
 -TIFFCvtNativeToIEEEDouble(TIFF* tif, u_int n, double* f)
 -{
 -	double_t* fp = (double_t*) f;
 -
 -	while (n-- > 0) {
 -		NATIVE2IEEEDOUBLE(fp);
 -		fp++;
 -	}
 -}
 -#endif
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
  | 
