/*
 * CBIND.C -- C binding for the IMFORT interface, for BSD UNIX and derived
 * systems.  As far as possible, the C function calls resemble those of the
 * Fortran oriented IMFORT interface, e.g., the function status is returned
 * as an argument rather than as the function value.
 */

#define	SZ_OPNAME	80
#define SZ_KEYWORD	20

clargc (argno, outstr, ier) int	argno, *ier; char *outstr;
	{ clargc_ (&argno, outstr, ier, SZ_OPNAME); sstrip (outstr,SZ_OPNAME); }

clargi (argno, ival, ier) int argno, *ival, *ier;
	{ clargi_ (&argno, ival, ier); }

clargr (argno, rval, ier) int argno, *ier; float *rval;
	{ clargr_ (&argno, rval, ier); }

clargd (argno, dval, ier) int argno, *ier; double *dval;
	{ clargd_ (&argno, dval, ier); }

clnarg (nargs) int *nargs;
	{ clnarg_ (nargs); }

clrawc (outstr, ier) char *outstr; int *ier;
	{ clrawc_ (outstr, ier, SZ_OPNAME); sstrip (outstr, SZ_OPNAME); }

imacck (im, key, ier) int im, *ier; char *key;
	{ imacck_ (&im, key, ier, strlen(key)); }

imaddk (im, keyw, dtype, comm, ier) int im, dtype; char *keyw, *comm; int *ier;
	{ imaddk_ (&im, keyw, &dtype, comm, ier, strlen(keyw), strlen(comm)); }

imakwb (im, keyw, bval, comm, ier) int im, bval, *ier; char *keyw, *comm; 
	{ imakwb_ (&im, keyw, &bval, comm, ier, strlen(keyw), strlen(comm)); }

imakwc (im, keyw, sval, comm, ier) int im, *ier; char *keyw, *sval, *comm;
	{ imakwc_ (&im, keyw, sval, comm, ier, strlen(keyw), strlen(sval),
	    strlen(comm)); }

imakwi (im, keyw, ival, comm, ier) int im, ival, *ier; char *keyw, *comm;
	{ imakwi_ (&im, keyw, &ival, comm, ier, strlen(keyw), strlen(comm)); }

imakwd (im, keyw, dval, comm, ier) int im, *ier; char *keyw, *comm; double dval;
	{ imakwd_ (&im, keyw, &dval, comm, ier, strlen(keyw), strlen(comm));  }
	
imakwr (im, keyw, rval, comm, ier) int im, *ier; char *keyw, *comm; float rval;
	{ float f = rval;
	  imakwr_ (&im, keyw, &f, comm, ier, strlen(keyw), strlen(comm)); }

imclos (im, ier) int im, *ier;
	{ imclos_ (&im, ier); }

imcrea (f77nam, axlen, naxis, pixtype, ier) char *f77nam; int *axlen, naxis, 
pixtype, *ier;
	{ imcrea_ (f77nam, axlen, &naxis, &pixtype, ier, strlen (f77nam)); }

imcrex (image, axlen, naxis, pixtype, ier) char *image; int *axlen, naxis,
pixtype, *ier;
	{ imcrex_ (image, axlen, &naxis, &pixtype, ier, strlen(image)); }

imdele (image, ier) char *image; int *ier;
	{ imdele_ (image, ier, strlen(image)); }

imdelk (im, keyw, ier) int im, *ier; char *keyw;
	{ imdelk_ (&im, keyw, ier, strlen(keyw)); }

imemsg (ier, errmsg) int ier; char *errmsg;
	{ imemsg_ (&ier, errmsg, SZ_OPNAME); sstrip (errmsg, SZ_OPNAME); }

imflsh (im, ier) int im, *ier;
	{ imflsh_ (&im, ier); }

imgdir (dir) char *dir;
	{ imgdir_ (dir, strlen(dir)); sstrip (dir, SZ_OPNAME); }

imgkwb (im, keyw, bval, ier) int im, *bval, *ier; char *keyw; 
	{ imgkwb_ (&im, keyw, bval, ier, strlen(keyw)); }

imgkwc (im, keyw, sval, ier) int im, *ier; char *keyw, *sval;
	{ imgkwc_ (&im, keyw, sval, ier, strlen(keyw), SZ_OPNAME); 
	  sstrip (sval, SZ_OPNAME); }

imgkwd (im, keyw, dval, ier) int im, *ier; char *keyw; double *dval;
	{ imgkwd_ (&im, keyw, dval, ier, strlen(keyw)); }

imgkwi (im, keyw, ival, ier) int im, *ival, *ier; char *keyw;
	{ imgkwi_ (&im, keyw, ival, ier, strlen(keyw)); }

imgkwr (im, keyw, rval, ier) int im, *ier; char *keyw; float *rval;
	{ imgkwr_ (&im, keyw, rval, ier, strlen (keyw)); }

imgl1r (im, buf, ier) int im, *ier; float *buf;
	{ imgl1r_ (&im, buf, ier); }

imgl1s (im, buf, ier) int im, *ier; short *buf;
	{ imgl1s_ (&im, buf, ier); }

imgl2r (im, buf, lineno, ier) int im, lineno, *ier; float *buf;
	{ imgl2r_ (&im, buf, &lineno, ier); }

imgl2s (im, buf, lineno, ier) int im, lineno, *ier; short *buf;
	{ imgl2s_ (&im, buf, &lineno, ier); }

imgl3r (im, buf, lineno, bandno, ier) 
	int im, lineno, bandno, *ier; float *buf;
	{ imgl3r_ (&im, buf, &lineno, &bandno, ier); }

imgl3s (im, buf, lineno, bandno, ier) 
	int im, lineno, bandno, *ier; short *buf;
	{ imgl3s_ (&im, buf, &lineno, &bandno, ier); }

imgs1r (im, buf, i1, i2, ier) int im, i1, i2, *ier; float *buf;
	{ imgs1r_ (&im, buf, &i1, &i2, ier); }

imgs1s (im, buf, i1, i2, ier) int im, i1, i2, *ier; short *buf;
	{ imgs1s_ (&im, buf, &i1, &i2, ier); }

imgs2r (im, buf, i1, i2, j1, j2, ier) int im, i1, i2, j1, j2, *ier; float *buf;
	{ imgs2r_ (&im, buf, &i1, &i2, &j1, &j2, ier); }

imgs2s (im, buf, i1, i2, j1, j2, ier)
	int im, i1, i2, j1, j2, *ier; short *buf;
	{ imgs2s_ (&im, buf, &i1, &i2, &j1, &j2, ier); }

imgs3r (im, buf, i1, i2, j1, j2, k1, k2, ier)
	int im, i1, i2, j1, j2, k1, k2, *ier; float *buf;
	{ imgs3r_ (&im, buf, &i1, &i2, &j1, &j2, &k1, &k2, ier); }

imgs3s (im, buf, i1, i2, j1, j2, k1, k2, ier) 
	int im, i1, i2, j1, j2, k1, k2, *ier; short *buf;
	{ imgs3s_ (&im, buf, &i1, &i2, &j1, &j2, &k1, &k2, ier); }

imgsiz (im, axlen, naxis, pixtype, ier) int im, *axlen, *naxis, *pixtype, *ier;
	{ imgsiz_ (&im, axlen, naxis, pixtype, ier); }

imhcpy (o_im, n_im, ier) int o_im, n_im, *ier;
	{ imhcpy_ (&o_im, &n_im, ier); }

imokwl (im, patstr, sortit, kwl, ier)
	int im, *kwl, *ier; char *patstr; int sortit;
	{ imokwl_ (&im, patstr, &sortit, kwl, ier, strlen(patstr)); }

imgnkw (kwl, outstr, ier) int kwl, *ier; char *outstr;
	{ imgnkw_ (&kwl, outstr, ier, SZ_KEYWORD); sstrip (outstr,SZ_KEYWORD); }

imckwl (kwl, ier) int kwl, *ier;
	{ imckwl_ (&kwl, ier); }

imopen (f77nam, acmode, im, ier) char *f77nam; int acmode, *im, *ier;
	{ imopen_ (f77nam, &acmode, im, ier, strlen (f77nam)); }

imopnc (nimage, o_im, n_im, ier) char *nimage; int o_im, *n_im, *ier;
	 { imopnc_ (nimage, &o_im, n_im, ier, strlen(nimage)); }

imopnx (image, acmode, im, ier) char *image; int acmode, *im, *ier;
	{ imopnx_ (image, &acmode, im, ier, strlen(image)); }

impixf (im, pixfd, pixfil, pixoff, szline, ier)
	int im, *pixfd, *pixoff, *szline, *ier; char *pixfil;
	{impixf_ (&im, &pixfd, pixfil, &pixoff, &szline, ier, SZ_OPNAME); 
	 sstrip (pixfil, SZ_OPNAME);}

impkwb (im, keyw, bval, ier) int im, bval, *ier; char *keyw;
	{ impkwb_ (&im, keyw, &bval, ier, strlen(keyw)); }

impkwc (im, keyw, sval, ier) int im, *ier; char *keyw, *sval;
	{ impkwc_ (&im, keyw, sval, ier, strlen(keyw)); }

impkwd (im, keyw, dval, ier) int im, *ier; char *keyw; double dval;
	{ impkwd_ (&im, keyw, &dval, ier, strlen(keyw)); }

impkwi (im, keyw, ival, ier) int im, ival, ier; char *keyw;
	{ impkwi_ (&im, keyw, &ival, ier, strlen(keyw)); }

impkwr (im, keyw, rval, ier) int im, *ier; char *keyw; float rval;
	{ float f = rval; impkwr_ (&im, keyw, &f, ier, strlen(keyw)); }

impl1r (im, buf, ier) int im, *ier; float *buf;
	{ impl1r_ (&im, buf, ier); }

impl1s (im, buf, ier) int im, *ier; short *buf;
	{ impl1s_ (&im, buf, ier); }

impl2r (im, buf, lineno, ier) int im, lineno, *ier; float *buf;
	{ impl2r_ (&im, buf, &lineno, ier); }

impl2s (im, buf, lineno, ier) int im, lineno, *ier; short *buf;
	{ impl2s_ (&im, buf, &lineno, ier); }

impl3r (im, buf, lineno, bandno, ier) 
	int im, lineno, bandno, *ier; float *buf;
	{ impl3r_ (&im, buf, &lineno, &bandno, ier); }

impl3s (im, buf, lineno, bandno, ier) 
	int im, lineno, bandno, *ier; short *buf;
	{ impl3s_ (&im, buf, &lineno, &bandno, ier); }

imps1r (im, buf, i1, i2, ier) int im, i1, i2, *ier; float *buf;
	{ imps1r_ (&im, buf, &i1, &i2, ier); }

imps1s (im, buf, i1, i2, ier) int im, i1, i2, *ier; short *buf;
	{ imps1s_ (&im, buf, &i1, &i2, ier); }

imps2r (im, buf, i1, i2, j1, j2, ier) 
	int im, i1, i2, j1, j2, *ier; float *buf;
	{ imps2r_ (&im, buf, &i1, &i2, &j1, &j2, ier); }

imps2s (im, buf, i1, i2, j1, j2, ier) 
	int im, i1, i2, j1, j2, *ier; short *buf;
	{ imps2s_ (&im, buf, &i1, &i2, &j1, &j2, ier); }

imps3r (im, buf, i1, i2, j1, j2, k1, k2, ier)
	int im, i1, i2, j1, j2, k1, k2, *ier; float *buf;
	{ imps3r_ (&im, buf, &i1, &i2, &j1, &j2, &k1, &k2, ier); }

imps3s (im, buf, i1, i2, j1, j2, k1, k2, ier)
	int im, i1, i2, j1, j2, k1, k2, *ier; short *buf;
	{ imps3s_ (&im, buf, &i1, &i2, &j1, &j2, &k1, &k2, ier); }

imrnam (oimage, nimage, ier) char *oimage, *nimage; int *ier;
	{ imrnam_ (oimage, nimage, ier, strlen(oimage), strlen(nimage)); }

imsdir (dir) char *dir;
	{ imsdir_ (dir, strlen (dir)); }

imtypk (im, keyw, dtype, comm, ier) int im, *dtype, *ier; char *keyw, *comm;
	{ imtypk_ (&im, keyw, dtype, comm, ier, strlen(keyw), SZ_OPNAME); 
	   sstrip (comm, SZ_OPNAME);}

/* Support utility to trim trailing blanks from string and add
 * a null terminator.
 */

sstrip (outstr, length) char outstr[SZ_OPNAME]; int length;
{
	int i;
	for (i=length-1;
	    (outstr[i] == '\0' || outstr[i]  == ' ') && i >= 0; i--);
	if (i == length - 1)
	    outstr[i] = '\0';
	else
	    outstr[i+1] = '\0';
}
