 # include <stdio.h>   $ int nims_expand_hrs(work,ibkg,idata)O /****************************************************************************** O *_Title  NIMS_EXPAND_HRS  Expand NIMS HRS (background & data) into 16-bit words   @ *_Args	Type                Variable	   I/O Description		      */I 	unsigned char       work[90];    /* !I  Buffer of 72 10-bit data items*/ I 	unsigned short int  ibkg[4];     /* !O  Buffer of 4 background items  */ I 	unsigned short int  idata[68];   /* !O  Buffer of 17*4 sensor items   */  /*J *_Descr Expand NIMS HRS background and sensor data from packed 10-bit formB *	to 16-bit signed integers: 4 background items and 17*4=68 sensorD *	items.  Each contiguous 5-byte segment containing 4 10-bit numbers" *	is expanded to 4 16-bit numbers.  - *_Calls NIMS_EXPAND4 (not generally portable)    *_Keys  NIMS, STRING  F *_Hist	16feb90  R Mehlman UCLA/IGPP Original Version (VAX/VMS Fortran)G *	26may92  RMX  Fixed incorrect WORK dimension: (18.5) should have been 9 *			(5,18) but didn't actually matter.  Made it WORK(90). I *	02nov92  RMX  Renamed from HRS_EXPAND.  NIMEXP changed to NIMS_EXPAND4. C *	28feb93  RMX  Portable C version (calls C or Assembler version of 3 *			 NIMS_EXPAND4, which is not generally portable)  *_End P *******************************************************************************/   { A     unsigned char *ip;		/* Address of current 5-byte input set */ F     unsigned short int *jp;	/* Address of current 4-word output set */.     long k;			/* Index of 4-word output set */  =     nims_expand4(work, ibkg);	/* Expand 4 background items */   <     ip = work+5;		/* Point to start of input sensor items */7     jp = idata;			/* Point to start of output buffer */ G     for (k = 0; k < 17; k++) {  /* Loop on 17 sets of 4 sensor items */ -       nims_expand4(ip, jp);	/*  Expand set */ 2       ip = ip + 5;		/*  Increment input pointer */3       jp = jp + 4;		/*  Increment output pointer */ 9     }      			/* End loop on 17 sets of 4 sensor items */      return (0);    } P /*******************************************************************************P * In SunOS systems, the fortran compiler will insert an underscore character (_)J * at the end of all subroutine names. The code enclosed by the "ifdef sun"? * preprocesser statement will fortran routines to also call the  * nims_expand routine.P *******************************************************************************/
 #ifdef sun int nims_expand_hrs_(ibuf,obuf) I 	unsigned char       work[90];    /* !I  Buffer of 72 10-bit data items*/ I 	unsigned short int  ibkg[4];     /* !O  Buffer of 4 background items  */ I 	unsigned short int  idata[68];   /* !O  Buffer of 17*4 sensor items   */  { $    nims_expand_hrs(work,ibkg,idata);    return(0);  }  #endif # include <stdio.h>    int nims_expand4(ibuf,obuf) O /****************************************************************************** E * The definition of these sub-scripts takes care of the byte swapping  * required on VAX systems.O ******************************************************************************/ 
 #ifdef vax #define SCP1 0 #define SCP2 1 #else  #define SCP1 1 #define SCP2 0 #endifP /*******************************************************************************E *_Title NIMS_EXPAND4  Expand NIMS data: 5-byte input to 4 INT*2 words   A *_Args	Type                Variable   I/O  Description			      */ I 	unsigned char       ibuf[5]; /* !I  Input buffer of 4 10-bit items    */ I 	unsigned short int  obuf[4]; /* !O  Output buffer of 4 16-bit items   */  /*G *_Desc	Expand 5-byte data or background segment of NIMS HRS packet from D *	Galileo/NIMS EDR:  4 10-bit items into 4 16-bit (INTEGER*2) items.   *_Lims  VAX-specific version   *_Keys	NIMS, STRING   C *_Hist	17oct83  R. Mehlman UCLA/IGPP ORIGINAL VAX ASSEMBLER VERSION  *			Used by NIMS SE programs. 9 *			Recoded for VAX from WDS PDP-11 XPND rtne in DESE.MAC 8 *	16feb90  RMX  NIMS EDR processing version:  documented$ *	02nov92  RMX  Renamed from NIMEXP.6 *	26feb93  RMX  VAX C version (not generally portable)@ *       18mar93  EME  Make routine compatible with SunOS systems *_End O ******************************************************************************/    { '     unsigned short int mask10 = 0x03ff; 	     union        {  	unsigned char work1[4][2];  	unsigned short int work2[4];        } work;   "     work.work1[0][SCP1] = ibuf[1];"     work.work1[0][SCP2] = ibuf[0];,     obuf[0] = (work.work2[0] >> 6) & mask10;  "     work.work1[1][SCP1] = ibuf[2];"     work.work1[1][SCP2] = ibuf[1];,     obuf[1] = (work.work2[1] >> 4) & mask10;  "     work.work1[2][SCP1] = ibuf[3];"     work.work1[2][SCP2] = ibuf[2];,     obuf[2] = (work.work2[2] >> 2) & mask10;  "     work.work1[3][SCP1] = ibuf[4];"     work.work1[3][SCP2] = ibuf[3];%     obuf[3] = work.work2[3] & mask10;        return (0);    }   P /*******************************************************************************P * In SunOS systems, the fortran compiler will insert an underscore character (_)J * at the end of all subroutine names. The code enclosed by the "ifdef sun"? * preprocesser statement will fortran routines to also call the  * nims_expand routine.P *******************************************************************************/
 #ifdef sun int nims_expand4_(ibuf,obuf)K    unsigned char       ibuf[5]; /* !I  Input buffer of 4 10-bit items    */ K    unsigned short int  obuf[4]; /* !O  Output buffer of 4 16-bit items   */  {     nims_expand4(ibuf,obuf);     return(0);  }  #endif