From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- sys/imio/imgibf.x | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 sys/imio/imgibf.x (limited to 'sys/imio/imgibf.x') diff --git a/sys/imio/imgibf.x b/sys/imio/imgibf.x new file mode 100644 index 00000000..9155ae78 --- /dev/null +++ b/sys/imio/imgibf.x @@ -0,0 +1,65 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include + +# IMGIBF -- Get an input buffer. + +pointer procedure imgibf (im, vs, ve, ndim, dtype) + +pointer im +long vs[ARB], ve[ARB] +int dtype, ndim + +pointer bdes +int i +long nget, nchars, totpix + +long imcssz() +errchk imopsf, calloc, realloc, mfree, malloc + +begin + # If first input transfer, allocate and initialize array of + # input buffer descriptors. + + if (IM_IBDES(im) == NULL) { + call imopsf (im) + call calloc (IM_IBDES(im), LEN_BDES * IM_VNBUFS(im), TY_STRUCT) + } + + # Compute pointer to the next input buffer descriptor. + # Increment NGET, the count of the number of GETPIX calls. + + nget = IM_NGET(im) + bdes = IM_IBDES(im) + mod (nget, IM_VNBUFS(im)) * LEN_BDES + IM_NGET(im) = nget + 1 + + # Compute the size of the buffer needed. Check buffer + # descriptor to see if the old buffer is the right size. + # If so, use it, otherwise make a new one. + + nchars = imcssz (im, vs, ve, ndim, dtype, totpix, IM_READ) + + if (nchars < BD_BUFSIZE(bdes)) + call realloc (BD_BUFPTR(bdes), nchars, TY_CHAR) + else if (nchars > BD_BUFSIZE(bdes)) { + call mfree (BD_BUFPTR(bdes), TY_CHAR) + call malloc (BD_BUFPTR(bdes), nchars, TY_CHAR) + } + + # Save section coordinates, datatype in buffer descriptor, and + # return buffer pointer to calling program. + + IM_LASTBDES(im) = bdes + BD_BUFSIZE(bdes) = nchars + BD_DTYPE(bdes) = dtype + BD_NPIX(bdes) = totpix + BD_NDIM(bdes) = ndim + + do i = 1, ndim { + BD_VS(bdes,i) = vs[i] + BD_VE(bdes,i) = ve[i] + } + + return (BD_BUFPTR(bdes)) # return ptr to CHAR +end -- cgit