--- a
+++ b/panorama.h
@@ -0,0 +1,279 @@
+/* Panorama_Tools	-	Generate, Edit and Convert Panoramic Images
+   Copyright (C) 1998,1999 - Helmut Dersch  der@fh-furtwangen.de
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*------------------------------------------------------------*/
+
+
+
+#ifndef PANORAMA_H
+#define PANORAMA_H
+
+
+#include "version.h"
+
+
+// Determine which machine we are using. Macs are set to BIGENDIAN, all others not
+
+// If you need BIGENDIAN, and don't use MacOS, define it here:
+// #define BIGENDIAN			1
+
+
+// Create a definition if we're on a Windows machine:
+#ifndef __Win__
+	#if (defined(MSDOS) || defined(WIN32) || defined(__INTEL__))
+		#define __Win__			1
+	#endif
+#endif
+
+
+// Create a definition if we're on a Macintosh:
+#ifndef __Mac__
+	#if (defined(macintosh) || defined(__MC68K__) || defined(__POWERPC__) || defined(__powerc))
+		#define __Mac__			1
+		#define BIGENDIAN		1
+	#endif
+#endif
+
+
+
+// Use FSSpec on Macs as Path-specifyers, else strings
+#define PATH_SEP							'/'
+
+#ifdef __Mac__
+
+	#include <Files.h>
+	#define			fullPath							FSSpec
+	#undef  PATH_SEP
+	#define PATH_SEP									':'
+
+#else // __Mac__, use ANSI-filefunctions
+
+	#ifdef __Win__
+		#ifndef __NO_SYSTEM__
+			#include <windows.h> // including this causes problems with libjpeg
+		#endif
+		#define MAX_PATH_LENGTH		260
+		// was MAX_PATH
+		#undef  PATH_SEP
+		#define PATH_SEP							'\\'
+	#else
+		#define MAX_PATH_LENGTH		512
+	#endif
+
+	typedef	struct{char name[MAX_PATH_LENGTH];} fullPath;
+
+#endif
+
+
+
+
+
+// Enumerates for TrFormStr.tool
+
+enum{							// Panorama Tools
+		_perspective,					
+		_correct,
+		_remap,
+		_adjust,
+		_interpolate,
+		_sizep,					// dummy for size-preferences
+		_version,				// dummy for version
+		_panright,				// Pan Controls
+		_panleft,
+		_panup,
+		_pandown,
+		_zoomin,
+		_zoomout,
+		_apply,
+		_getPano,
+		_increment
+	};
+
+// Enumerates for TrFormStr.mode
+
+enum{							// Modes
+		_interactive,			// display dialogs and do Xform
+		_useprefs,				// load saved prefs and do Xform/ no dialogs
+		_setprefs,				// display dialogs and set preferences, no Xform	
+		_usedata,				// use supplied data in TrFormStr.data, do Xform
+		_honor_valid 	= 8,	// Use only pixels with alpha channel set
+		_show_progress 	= 16,   // Interpolator displays progress bar
+		_hostCanResize 	= 32,	// o-no; 1-yes (Photoshop: no; GraphicConverter: yes)
+		_destSupplied 	= 64,	// Destination image allocated by plug-in host
+		_wrapX		= 128	// Wrap image horizontally (if HFOV==360 degrees)
+	};
+		
+
+// Enumerates for Image.dataformat
+
+enum{							
+		_RGB,					
+		_Lab,
+		_Grey
+	};
+
+// Enumerates for TrFormStr.interpolator
+
+enum{							// Interpolators
+		_poly3		= 0,		// Third order polynomial fitting 16 nearest pixels
+		_spline16	= 1,		// Cubic Spline fitting 16 nearest pixels
+		_spline36	= 2,		// Cubic Spline fitting 36 nearest pixels
+		_sinc256	= 3,		// Sinc windowed to 8 pixels
+		_spline64,				// Cubic Spline fitting 64 nearest pixels
+		_bilinear,				// Bilinear interpolation
+		_nn	,					// Nearest neighbor
+		_sinc1024
+	};
+
+// Corrections
+
+struct  correct_Prefs{							//  Preferences structure for tool correct
+		unsigned long 	magic;					//  File validity check, must be 20
+		int 			radial;					//  Radial correction requested?
+		double			radial_params[3][5];	//  3 colors x (4 coeffic. for 3rd order polys + correction radius)
+		int 			vertical;				//  Vertical shift requested ?
+		double			vertical_params[3];		//  3 colors x vertical shift value
+		int			horizontal;				//  horizontal tilt ( in screenpoints)
+		double			horizontal_params[3];	//  3 colours x horizontal shift value
+		int			shear;					//  shear correction requested?
+		double			shear_x;				//  horizontal shear values
+		double			shear_y;				//  vertical shear values
+		int 			resize;					//  scaling requested ?
+		long			width;					//  new width
+		long			height;					//  new height
+		int			luminance;				//  correct luminance variation?
+		double			lum_params[3];			//  parameters for luminance corrections
+		int			correction_mode;		//  0 - radial correction;1 - vertical correction;2 - deregistration
+		int			cutFrame;				//  remove frame? 0 - no; 1 - yes
+		int			fwidth;
+		int 			fheight;
+		int			frame;
+		int			fourier;				//  Fourier filtering requested?
+		int			fourier_mode;			//  _faddBlurr vs _fremoveBlurr
+		fullPath		psf;					//  Point Spread Function, full path/fsspec to psd-file
+		int			fourier_nf;				//  Noise filtering: _nf_internal vs _nf_custom
+		fullPath		nff;					//  noise filtered file: full path/fsspec to psd-file
+		double			filterfactor;			//  Hunt factor
+		double			fourier_frame;			//  To correct edge errors
+		} ;
+
+typedef struct correct_Prefs cPrefs;
+
+enum{
+	correction_mode_radial 		= 0,
+	correction_mode_vertical 	= 1,
+	correction_mode_deregister 	= 2,
+	correction_mode_morph		= 4
+	};
+	
+
+enum{
+	_faddBlurr,
+	_fremoveBlurr,
+	_nf_internal,
+	_nf_custom,
+	_fresize
+	};
+	
+
+enum{				// Enumerates for Image.format
+	_rectilinear 	= 0,
+	_panorama 		= 1,
+	_fisheye_circ	= 2,
+	_fisheye_ff		= 3,
+	_equirectangular= 4,
+	_spherical_cp	= 5,
+	_spherical_tp	= 6,
+	_mirror			= 7,
+	_orthographic 	= 8,
+	_cubic			= 9
+	};
+
+// A large rectangle
+
+typedef struct{
+	long	top;
+	long	bottom;
+	long	left;
+	long	right;
+	}	PTRect;
+
+
+
+struct Image{
+		// Pixel data
+		long 			width;
+		long 			height;
+		long 			bytesPerLine;
+		long 			bitsPerPixel;	// Must be 24 or 32
+		unsigned long 	dataSize; 
+		unsigned char** data;
+		long			dataformat;		// rgb, Lab etc
+		long			format;			// Projection: rectilinear etc
+		double			hfov;
+		double			yaw;
+		double			pitch;
+		double			roll;
+		cPrefs			cP;				// How to correct the image
+		char			name[256];
+		PTRect			selection;
+	};
+		
+typedef struct Image Image;
+
+
+struct TrformStr 				// This structure holds all image information
+	{
+		Image *src;				// Source image, must be supplied on entry
+		Image *dest;			// Destination image data, valid if success = 1 
+		long success; 			// 0 - no, 1 - yes 
+
+
+		long tool;				// Panorama Tool requested
+		long mode;				// how to run transformation
+		void *data;				// data for tool requested.
+								// Required only if mode = _usedata; then it
+								// must point to valid preferences structure
+								// for requested tool (see filter.h).
+
+		long interpolator;		// Select interpolator
+		double gamma;			// Gamma value for internal gamma correction
+	};
+
+typedef struct TrformStr TrformStr;	
+
+
+// Useful for looping through images
+
+#define LOOP_IMAGE( image, action ) { 	int x,y,bpp=(image)->bitsPerPixel/8; \
+					unsigned char *idata;										\
+					for(y=0; y<(image)->height; y++){							\
+						idata = *((image)->data) + y * (image)->bytesPerLine;	\
+						for(x=0; x<(image)->width;x++, idata+=bpp){				\
+							action;} } }								
+											
+											
+											
+											
+											
+
+void filter_main();
+
+
+#endif // PANORAMA_H
+
+