
/*
   Note: libiis.h in PDL distribution has iis_display 
   redefined 
*/

/*

  libiis.h - IIS constants for IIS C library v1.0

  Loosely based on code from various sources 

  Karl Glazebrook, Anglo-Australian Observatory 30/May/1996

  email: kgb@aaoepp.aao.gov.au

*/

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define TRANSFER_ID	0
#define THING_COUNT	1
#define	SUB_UNIT	2
#define	CHECK_SUM	3
#define	X_REGISTER	4
#define Y_REGISTER	5
#define Z_REGISTER	6
#define T_REGISTER	7

/* Transfer ID definitions */

#define  IREAD             0100000
#define  IWRITE                 00
#define  PACKED             040000
#define  BYPASSIFM          020000
#define  BYTE               010000
#define  ADDWRITE            04000
#define  ACCUM               02000
#define  BLOCKXFER           01000
#define  VRETRACE             0400
#define  MUX32                0200
#define  IMT800               0100

/* Subunits */

#define  REFRESH                 01
#define  LUT                     02
#define  OFM                     03
#define  IFM                     04
#define  FEEDBACK                05
#define  SCROLL                  06
#define  VIDEOM                  07
#define  SUMPROC                 010
#define  GRAPHICS                011
#define  CURSOR                  012
#define  ALU                     013
#define  ZOOM                    014
#define  IPB                     017

/* following from iraf "iis.h" */
#define  IMCURSOR                020
#define  WCS	                 021

/* checksum */
#define	CHECKSUMVAL		0177777

/* Command definitions from iraf iis.h */

#define  COMMAND           100000B


/* X-register */
#define  ADVXONTC          0100000
#define  ADVXONYOV          040000

/* Y-register */

#define  ADVYONXOV         0100000
#define  ADVYONTC           040000

/* Z-register */

#define  CHAN1                  01
#define  CHAN2                  02
#define  CHAN3                  04
#define  CHAN4                 010
#define  GRCHAN            0100000

/* T-register */

#define  BITPL0                 01
#define  BITPL1                 02
#define  BITPL2                 04
#define  BITPL3                010
#define  BITPL4                020
#define  BITPL5                040
#define  BITPL6               0100
#define  BITPL7               0200
#define  ALLBITPL             0377

/* IIS WCS buffer */


/* Imtool colour numbers */

#define FMIN                    1
#define	FMAX			200
#define	IIS_GREEN		201
#define IIS_BLACK		202
#define	IIS_WHITE		203
#define IIS_RED			204
#define IIS_BLUE		206
#define IIS_YELLOW		207

/* Buffer sizes */

#define BUFFSZ    16384  /* Approx number of bytes to transfer per record */
#define RBUFFSZ    2048  /* Approx number of bytes to transfer when reading */
#define STRSIZE    1024  /* Useful string size */
#define SZ_WCSTEXT  320  /* WCS text */

/* Global variables */

static int iispipe_i;   /* FIFO pipe handles */
static int iispipe_o;
static int fbconfig;    /* Frame buffer configaration */
static int frameX;
static int frameY;

/* Public functions prototypes */

int  iis_display(void *f, int datatype,
         int N1, int N2, float fmin, float fmax, int frame);
void iis_cur(float*x, float*y, char* ch);
void iis_drawcirc(float xcen, float ycen, float radius, int colour, int frame);
void iis_open(char* inpipe, char* outpipe, int fb, int fbx, int fby);
void iis_close();

/* Private functions prototypes */

void iis_write(char* buf, int size);
void iis_read (char* buf, int size);
void iis_checksum(unsigned short *hdr);
void iis_error(char* error1, char* error2);
int iis_chan(int frame);
int iis_round ( float i );
float iis_abs (float x);


