From 4e44a666397bbceb31c9c9764304881a817cfeaf Mon Sep 17 00:00:00 2001
From: Erik von Reis <evonreis@caltech.edu>
Date: Tue, 2 Jun 2020 12:46:03 -0700
Subject: [PATCH] Added back in site_prefix and archive.  Removed awgapi.h and
 awgapi.c for being unused.  cleaned up readChnInfo() in gdschannel.c, but it
 now no longer tries to open a non-existant channel database file.

---
 src/gds/CMakeLists.txt |    2 -
 src/gds/awg_server.c   |    5 -
 src/gds/awgapi.c       | 2888 ----------------------------------------
 src/gds/awgapi.h       |  441 ------
 src/gds/awgtpman.c     |  108 +-
 src/gds/awgtype.h      |    2 +-
 src/gds/excitation.cc  |    1 -
 src/gds/ezcademod.cc   |    1 -
 src/gds/gdschannel.c   |   67 +-
 9 files changed, 19 insertions(+), 3496 deletions(-)
 delete mode 100644 src/gds/awgapi.c
 delete mode 100644 src/gds/awgapi.h

diff --git a/src/gds/CMakeLists.txt b/src/gds/CMakeLists.txt
index 2911183dd..90f25c5b1 100644
--- a/src/gds/CMakeLists.txt
+++ b/src/gds/CMakeLists.txt
@@ -11,7 +11,6 @@ endif (${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
 
 
 SET (GDS_SRC
-        awgapi.c
         awgfunc.c
         awg.c
         awg_server.c
@@ -54,7 +53,6 @@ SET (GDS_CC_SRC
         )
 
 SET (GDS_HDR
-        awgapi.h
         awgfunc.h
         awg.h
         awg_server.h
diff --git a/src/gds/awg_server.c b/src/gds/awg_server.c
index a597c0156..e18759f1d 100644
--- a/src/gds/awg_server.c
+++ b/src/gds/awg_server.c
@@ -73,7 +73,6 @@ static char *versionId = "Version $Id$" ;
 #include "dtt/rmapi.h"
 #endif	
 #include "dtt/awg.h"
-#include "dtt/awgapi.h"
 #include "dtt/rawgapi.h"
 #include "dtt/confserver.h"
 #include "dtt/awg_server.h"
@@ -944,7 +943,6 @@ extern int testpoint_manager_rpc;
       static confServices conf;		/* configuration service */
       static char	confbuf[256];	/* configuration buffer */
       struct in_addr	host;		/* local host address */
-      char		section[30];	/* section name */
 
       /* test if low level init */
       gdsDebug ("start awg server client");
@@ -975,9 +973,6 @@ extern int testpoint_manager_rpc;
       /* get rpc parameters from parameter file */
       prognum = RPC_PROGNUM_AWG;
       progver = RPC_PROGVER_AWG;
-
-      /* make section header */
-      sprintf (section, "%s-awg%i", ifo_prefix,  testpoint_manager_node);
       
       if ((prognum == 0) || (progver == 0)) {
          return -5;
diff --git a/src/gds/awgapi.c b/src/gds/awgapi.c
deleted file mode 100644
index 1f21a2c47..000000000
--- a/src/gds/awgapi.c
+++ /dev/null
@@ -1,2888 +0,0 @@
-static char *versionId = "Version $Id$" ;
-/* -*- mode: c; c-basic-offset: 3; -*- */
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Module Name: awgapi							*/
-/*                                                         		*/
-/* Module Description: implements functions for controlling the AWG	*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-
-#ifndef __EXTENSIONS__
-#define __EXTENSIONS__
-#endif
-#ifndef _BSD_SOURCE
-#define _BSD_SOURCE
-#endif
-#ifndef _DEFAULT_SOURCE
-#define _DEFAULT_SOURCE
-#endif
-
-/* Header File List: */
-#include <stdlib.h>
-#include <time.h>
-#include <string.h>
-#include <math.h>
-#include <ctype.h>
-
-#ifdef OS_VXWORKS
-#include <vxWorks.h>
-#include <semLib.h>
-#include <taskLib.h>
-#include <inetLib.h>
-#include <hostLib.h>
-#include <sysLib.h>
-#include <timers.h>
-
-#else
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
-#include "dtt/gdsutil.h"
-#include "dtt/awgapi.h"
-#include "dtt/rawgapi.h"
-#include "dtt/awgfunc.h"
-#include "dtt/gdschannel.h"
-#include "dtt/ds340.h"
-#ifndef _NO_TESTPOINTS
-#include "dtt/testpointinfo.h"
-#endif
-#include "dtt/targets.h"
-#include "dtt/rmorg.h"
-#if defined (_CONFIG_DYNAMIC)
-#include "dtt/confinfo.h" 
-#endif
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Defines: Describes the local AWG capabilities			*/
-/*          _AWG_LOCAL		local AWG is present			*/
-/*          _AWG_LOCAL_SLOT	slot # of local AWG			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-#if (TARGET == TARGET_H1_GDS_AWG1) ||  (TARGET == TARGET_H1_GDS_AWG1+10) 
-#define _AWG_LOCAL
-#define _AWG_LOCAL_SLOT		AWG_ID(0,0)
-
-#elif (TARGET == TARGET_H2_GDS_AWG1) || (TARGET == TARGET_H2_GDS_AWG1+10)
-#define _AWG_LOCAL
-#define _AWG_LOCAL_SLOT		AWG_ID(1,0)
-
-#elif (TARGET == TARGET_L1_GDS_AWG1) || (TARGET == TARGET_L1_GDS_AWG1+10)
-#define _AWG_LOCAL
-#define _AWG_LOCAL_SLOT		AWG_ID(0,0)
-
-#elif (TARGET == TARGET_M_GDS_UNIX || TARGET == TARGET_L_GDS_UNIX || TARGET == TARGET_H_GDS_UNIX)
-#define _AWG_LOCAL
-#define _AWG_LOCAL_SLOT		AWG_ID(0,0)
-#endif
-
-#ifdef _AWG_LOCAL
-#include "awg.h"
-#endif
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Constants: _NETID		  net protocol used for rpc		*/
-/* 	      _MAX_IFO		  maximum number of ifo's		*/
-/*            _MAX_AWG_PER_IFO	  maximum number of awg's / ifo		*/
-/*            _SHOWBUF_SIZE	  maximum size of show reply		*/
-/*            MAX_SLOT_NAME	  maximum length of channel name	*/
-/*            MAX_SLOT_LIST	  maximum number of cached channel names*/
-/*            PRM_PATH		  parameter file path			*/
-/*            PRM_FILE		  parameter file name			*/
-/*            PRM_SECTION	  section heading for awg		*/
-/*            PRM_SECTION2	  section heading for cobox		*/
-/*            PRM_ENTRY1	  parameter file host entry		*/
-/*            PRM_ENTRY2	  parameter file rpc prog.num. entry	*/
-/*            PRM_ENTRY3	  parameter file rpc vers.num. entry	*/
-/*            PRM_ENTRY4	  parameter file cobox port # entry	*/
-/*            _HELP_TEXT	  help text for cmd line interface	*/
-/*            								*/
-/*----------------------------------------------------------------------*/
-#define _NETID			"tcp"
-#define _MAX_IFO		256
-#define _MAX_AWG_PER_IFO	5
-#define MAX_SLOT_NAME 		256
-#define MAX_SLOT_LIST 		16
-#define _SHOWBUF_SIZE		(256 * 1024)
-#if !defined (_AWG_LIB) && !defined (_CONFIG_DYNAMIC)
-#define PRM_FILE		gdsPathFile ("/param", "awg.par")
-#define PRM_SECTION		"awg"
-#define PRM_SECTION2		"dsg"
-#define PRM_ENTRY1		"hostname"
-#define PRM_ENTRY2		"prognum"
-#define PRM_ENTRY3		"progver"
-#define PRM_ENTRY4		"port"
-#endif
-#define _HELP_TEXT \
-	"Arbitrary waveform generator commands:\n" \
-	"  help: shows this help text\n" \
-	"  channels : display all excitation channels\n" \
-	"  show 'node'.'awg': show awg usage\n" \
-	"  new 'channel': reserve an awg slot\n" \
-	"  free 'slot' : frees the awg slot\n" \
-	"  set/add 'slot' 'waveform': sets/adds a waveform\n" \
-	"  gain 'slot' 'value' 'tRamp': sets the overall gain of a slot\n" \
-	"  stop 'slot': stops wavforms of an awg slot\n" \
-	"  ramp 'tRamp': sets the general phase in/out time\n" \
-	"  clear 'node'.'awg' : reset an awg\n" \
-	"  stat 'node'.'awg' : get statistics data\n" \
-	"Parameters:\n" \
-	"   node: interferometer number, starting at zero\n" \
-	"   awg: awg number, stating at zero\n" \
-	"   channel: full channel name, e.g. H1:LSC-TEST_IN\n" \
-	"   slot: slot number returned by new or original channel name\n" \
-	"   tRamp: ramp time; default is 1\n" \
-	"   waveform 1: 'func' freq ampl ofs phase ratio\n" \
-	"   waveform 2: impulse freq ampl duration delay\n" \
-	"   waveform 3: const ampl\n" \
-	"   waveform 4: 'noise' freq1 freq2 ampl ofs\n" \
-	"   waveform 5: sweep freq1 freq2 ampl1 ampl2 time 'sweeptype' 'updn'\n" \
-	"   waveform 6: arb freq scale 'trigger' rate point1 point2 point3 ...\n" \
-	"   waveform 7: stream scaling\n" \
-	"   func: sine, square, ramp or triangle\n" \
-	"   noise: normal or uniform\n" \
-	"   sweeptype: linear or log\n" \
-	"   updn: + (up), - (down) or blank for bidirectional\n" \
-	"   trigger: c (continous) r (random) w (wait) t (trig) \n"
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Types:   awgHost_t		host addresses type            		*/
-/*          slotentry		channel name cache for slots		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-#if defined (_AWG_LIB) || defined (_CONFIG_DYNAMIC)
-   struct awgHost_t {
-      int		valid;
-      char		hostname[100];
-      unsigned long	prognum;
-      unsigned long	progver;
-   };
-   typedef struct awgHost_t awgHost_t;
-#endif
-
-   struct slotentry {
-      char name[MAX_SLOT_NAME];
-      int slot;
-   };
-   typedef struct slotentry slotentry;
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Globals: awg_init		whether clients were already init.	*/
-/*          awg_clnt		rpc client handles		 	*/
-/*          ds340addr		network address of DS340		*/
-/*          ds340port		network port of DS340  			*/
-/*          awgHost		host addresses            		*/
-/*          slotlist		channel name cache for slot numbers	*/
-/*          slotinit		slot initialized	       		*/
-/*          ramptime		general phase in/out time in sec	*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   static int		awg_init = 0;
-   static CLIENT*	awg_clnt[_MAX_IFO][_MAX_AWG_PER_IFO];
-   static char		ds340addr[NUM_DS340][256] = {{0}};
-   static int		ds340port[NUM_DS340] = {0};
-#if defined (_AWG_LIB) || defined (_CONFIG_DYNAMIC)
-   static awgHost_t	awgHost[_MAX_IFO][_MAX_AWG_PER_IFO] = {{{0}}};
-#endif
-   static slotentry 	slotlist[MAX_SLOT_LIST];
-   static int 		slotinit = 1;
-   static double 	ramptime = 0.0;
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Forward declarations: 						*/
-/*	initAWGclient		init of rpc client			*/
-/*      								*/
-/*----------------------------------------------------------------------*/
-   static int initAWGclient (void);
-#if defined (_CONFIG_DYNAMIC) && !defined (_AWG_LIB)
-   static int ds340SetHostAddress (int ds340, const char* hostname, 
-                     int port);
-   static int awgSetHostAddress (int ifo, int awg, const char* hostname, 
-                     unsigned long prognum, unsigned long progver);
-#endif
-   static void initSlot (void);
-   static int updateSlot (int slot, const char* name);
-   static int freeSlot (int slot);
-   static const char* readSlot (const char* p, int* slot);
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: awgCheckInterface				*/
-/*                                                         		*/
-/* Procedure Description: check if AWG interface exists			*/
-/*                                                         		*/
-/* Procedure Arguments: node, awg #					*/
-/*                                                         		*/
-/* Procedure Returns: 1 if exists, 0 otherwise				*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   static int awgCheckInterface (int node, int j)
-   {
-      if ((node < 0) || (node >= _MAX_IFO) ||
-         ((j < 0) || (j >= _MAX_AWG_PER_IFO))) {
-         return 0;
-      }
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (node, j) == _AWG_LOCAL_SLOT) {
-         return 1;
-      }
-   #endif
-      return (awg_clnt[node][j] != NULL);
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgSetChannel				*/
-/*                                                         		*/
-/* Procedure Description: reserves an awg slot to a channel		*/
-/*                                                         		*/
-/* Procedure Arguments: channel name					*/
-/*                                                         		*/
-/* Procedure Returns: slot number if successful, <0 if failed		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgSetChannel (const char* name)
-   {
-      static int	lastawgnum = 0; /* stores the last awg num */
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		node;	/* node ID */
-      int		j;	/* index */
-      gdsChnInfo_t	chn;	/* channel info */
-      int		chntype;/* channel type */
-      int		arg1 = 0;/* first argument for new channel */
-      int		arg2 = 0;/* second argument for new channel */
-      int		id;	/* channel id */
-   #ifndef _NO_TESTPOINTS
-      testpoint_t	tp;	/* test point id */
-   #endif
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* get channel information */
-      if (gdsChannelInfo (name, &chn) < 0) {
-         return -1;
-      }
-   #ifdef _NO_TESTPOINTS
-      if (chn.rmOffset < 0) {
-         chntype = AWG_DS340_CHANNEL;
-         node = chn.rmId;
-         id = chn.chNum;
-         arg1 = arg2 = 0;
-      }
-      else {
-         chntype = AWG_MEM_CHANNEL;
-         node = chn.rmId;
-         id = chn.rmOffset;
-         arg1 = chn.rmBlockSize;
-         arg2 = chn.dataRate / NUMBER_OF_EPOCHS;
-      }
-   #else
-      chntype = 0;
-      if (tpIsValid (&chn, &node, &tp)) {
-         id = tp;
-      }
-      else {
-         /* not a valid excitation channel */
-         return -1;
-      }
-   
-      /* determine channel type */
-      if (chntype == 0) {
-         arg1 = arg2 = 0;
-         switch (TP_ID_TO_INTERFACE (tp))
-         {
-            /* LSC test point channel */
-            case TP_LSC_EX_INTERFACE:
-               {
-                  chntype = AWG_LSC_TESTPOINT;
-                  break;
-               }
-            /* ASC test point channel */
-            case TP_ASC_EX_INTERFACE:
-               {
-                  chntype = AWG_ASC_TESTPOINT;
-                  break;
-               }
-            /* DAC channel */
-            case TP_DAC_INTERFACE:
-               {
-                  chntype = AWG_DAC_CHANNEL;
-                  arg1 = AWG_DAC_DELAY;
-                  break;
-               }
-            /* DS340 channel */
-            case TP_DS340_INTERFACE:
-               {
-                  chntype = AWG_DS340_CHANNEL;
-                  break;
-               }
-            /* not an excitation test point/channel */
-            default : 
-               {
-                  return -2;
-               }
-         }
-      }
-   #endif
-   
-      /* treat DS340 separately */
-      if (chntype == AWG_DS340_CHANNEL) {
-         char		buf[512];
-         id -= TP_ID_DS340_OFS;
-         /* printf ("test %i - %s - %i\n", id,
-                ds340addr[id], ds340port[id]);*/
-         if ((id >= 0) && (id < NUM_DS340) &&
-            (connectCoboxDS340 (id, ds340addr[id], ds340port[id]) >= 0)) {
-            sprintf (buf, "found DSG @ cobox %s/port%i\n", 
-                    ds340addr[id], ds340port[id]);
-            gdsDebug (buf);
-            return AWG_ID (_MAX_IFO, 0) + id;
-         }
-         else {
-            sprintf (buf, "no DSG @ cobox %s/port%i\n", 
-                    ds340addr[id], ds340port[id]);
-            gdsDebug (buf);
-            return -7;
-         }
-      }
-   
-      /* we have a valid awg output type! Now check node id */
-      if ((node < 0) || (node >= _MAX_IFO)) {
-         return -3;
-      }
-   
-      /* cycle through awg number */
-      for (j = lastawgnum + 1; j <= lastawgnum + _MAX_AWG_PER_IFO; j++) {
-         if (awgCheckInterface (node, j % _MAX_AWG_PER_IFO)) {
-            break;
-         }
-      }
-      j %= _MAX_AWG_PER_IFO;
-      lastawgnum = j;
-   
-      /* test validity of awg */
-      if (!awgCheckInterface (node,j)) {
-         return -4;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (node, j) == _AWG_LOCAL_SLOT) {
-         ret = getIndexAWG (chntype, id, arg1, arg2);
-      }
-      else {
-      #endif
-      
-      /* ask awg for free slot */
-         if (awgnewchannel_1 (chntype, id, arg1, arg2, &ret, 
-            awg_clnt[node][j]) != RPC_SUCCESS) {
-            return -5;
-         }
-      #ifdef _AWG_LOCAL
-      }
-   #endif
-   
-      /* was a free slot available */
-      if (ret < 0) {
-         return -6;
-      }
-   
-      /* return slot number */
-      return AWG_ID (node, j) + ret;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgRemoveChannel				*/
-/*                                                         		*/
-/* Procedure Description: removes a channel/slot from an awg 		*/
-/*                                                         		*/
-/* Procedure Arguments: slot						*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgRemoveChannel (int slot)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if ((i == _MAX_IFO) && (sl >= 0) && (sl < NUM_DS340)) {
-         return resetDS340 (sl);
-      }
-   
-      /* test parameters */
-      if (!awgCheckInterface (i,j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return releaseIndexAWG (sl);
-      }
-   #endif
-   
-      /* clear channel on remote AWG */
-      if (awgremovechannel_1 (sl, &ret, awg_clnt[i][j]) != 
-         RPC_SUCCESS) {
-         return -2;
-      }
-   
-      /* return error code */
-      if (ret >= 0) {
-         return 0;
-      }
-      else {
-         return ret - 2;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: isExcitationChannel				*/
-/*                                                         		*/
-/* Procedure Description: returns true if a valid excitation channel	*/
-/*                                                         		*/
-/* Procedure Arguments: channel info					*/
-/*                                                         		*/
-/* Procedure Returns: true if excitation channel			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int isExcitationChannel (const gdsChnInfo_t* info)
-   {
-      int		node;
-      testpoint_t	tp;
-
-      if (!tpIsValid (info, &node, &tp)) {
-         return 0;
-      }
-
-      if ((node < 0) || (node >= _MAX_IFO)) {
-         return 0;
-      }
-      switch (tpType (info)) {
-         case tpInvalid:
-         case tpLSC:
-         case tpASC:
-            return 0;
-         default:
-            return 1;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgGetChannelNames				*/
-/*                                                         		*/
-/* Procedure Description: get all valid channel names	 		*/
-/*                                                         		*/
-/* Procedure Arguments: names, length					*/
-/*                                                         		*/
-/* Procedure Returns: length if successful, <0 when failed		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgGetChannelNames (char* names, int len, int info)
-   {
-      int		status;	/* status flag */
-      int		size;	/* size of channel list */
-      char*		chn;	/* channel list */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-
-      /* allocate channel list */
-      chn = gdsChannelNames (-1, isExcitationChannel, info);
-      size = strlen (chn);
-      if (names == NULL) {
-         free (chn);
-         return size;
-      }
-      else {
-         if (size > len - 1) size = len - 1;
-         strncpy (names, chn, size);
-         names[size] = 0;
-         free (chn);
-         return size;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgAddWaveform				*/
-/*                                                         		*/
-/* Procedure Description: adds waveforms to an awg slot			*/
-/*                                                         		*/
-/* Procedure Arguments: slot, list of components			*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgAddWaveform (int slot, AWG_Component* comp, int numComp)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-      int		k;	/* index */
-      int		l;	/* index */
-      awgcomponent_list_r wforms;	/* awg components */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* anything to do? */
-      if (numComp <= 0) {
-         return 0;
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if ((i == _MAX_IFO) && (sl >= 0) && (sl < NUM_DS340) &&
-         isDS340Alive (sl)) {
-         DS340_ConfigBlock	conf;	/* configuration block */
-      
-         /* get configuration */;
-         getDS340 (sl, &conf);
-         conf.toggles &= DS340_INVT | DS340_SYNC | DS340_TERM;
-      
-         /* set waveform */
-         if (comp->wtype == awgSine) {
-            conf.func = ds340_sin;
-         } 
-         else if (comp->wtype == awgSquare) {
-            conf.func = ds340_square;
-         }
-         else if (comp->wtype == awgRamp) {
-            conf.func = ds340_ramp;
-         }
-         else if (comp->wtype == awgTriangle) {
-            conf.func = ds340_triangle;
-         } 
-         else if (comp->wtype == awgNoiseN) {
-            conf.func = ds340_noise;
-         }
-         else if (comp->wtype == awgArb) {
-            conf.func = ds340_arb;
-            conf.toggles |= DS340_TSRC;
-         }
-         else {
-            return -3;
-         }
-      
-         if ((comp->ramptime[0] < 1E-9) && (comp->ramptime[1] < 1E-9)) {
-             /* periodic, noise or abritrary waveform */
-            if (comp->wtype == awgNoiseN) {
-               conf.ampl = comp->par[0];
-               conf.offs = comp->par[3];
-            }
-            else if (comp->wtype == awgArb) {
-               conf.fsmp = comp->par[1];
-               conf.ampl = comp->par[0];
-               conf.offs = comp->par[3];
-            }
-            else {
-               conf.freq = comp->par[1];
-               conf.ampl = comp->par[0];
-               conf.offs = comp->par[3];
-            }
-         }
-         /* no test for sweep */
-         else if ((comp->ramptime[0] == 0) && (comp->ramptime[1] != 0) &&
-                 (comp->restart > 0) && (comp->duration > 0) &&
-                 (conf.func != ds340_noise)) {
-            /* sweep waveform */
-            conf.toggles |= DS340_SWEN | DS340_STRS;
-            if (SWEEP_OUT_TYPE (comp->ramptype) == AWG_PHASING_LOG) {
-               conf.toggles |= DS340_STYP;
-            } 
-            else if (SWEEP_OUT_TYPE (comp->ramptype) != 
-                    AWG_PHASING_LINEAR) {
-               return -3;
-            }
-            if ((numComp > 1) && 
-               (comp[1].start == comp[0].start + comp[0].duration) &&
-               (comp[0].par[1] == comp[1].ramppar[1]) &&
-               (comp[1].par[1] == comp[0].ramppar[1])) {
-               conf.toggles |= DS340_SDIR;
-            }
-            conf.func = ds340_sin;
-            conf.stfr = comp[0].par[1];
-            conf.spfr = comp[0].ramppar[1];
-            conf.ampl = comp[0].par[0];
-            conf.srat = 1.0/(double)comp[0].restart;
-            if ((conf.toggles & DS340_STYP) != 0) {
-               conf.srat *= 2;
-            }
-         }
-         else {
-            return -3;
-         }
-      	 /* set waveform */
-         setDS340 (sl, &conf);
-         if (uploadDS340Block (sl) < 0) {
-            return -2;
-         } 
-         else {
-            return 0;
-         }
-      }
-   
-      /* test parameters */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return addWaveformAWG (sl, comp, numComp);
-      }
-   #endif
-   
-      /* allocate memory */
-      wforms.awgcomponent_list_r_len = numComp;
-      wforms.awgcomponent_list_r_val = 
-         calloc (numComp, sizeof (awgcomponent_r));
-      if (wforms.awgcomponent_list_r_val == NULL) {
-         return -2;
-      }
-   
-      /* copy components */
-      for (k = 0; k < numComp; k++) {
-         wforms.awgcomponent_list_r_val[k].wtype = comp[k].wtype;
-         for (l = 0; l < 4; l++) {
-            wforms.awgcomponent_list_r_val[k].par[l] = comp[k].par[l];
-         }
-         wforms.awgcomponent_list_r_val[k].start = comp[k].start;
-         wforms.awgcomponent_list_r_val[k].duration = comp[k].duration;
-         wforms.awgcomponent_list_r_val[k].restart = comp[k].restart;
-         for (l = 0; l < 2; l++) {
-            wforms.awgcomponent_list_r_val[k].ramptime[l] = 
-               comp[k].ramptime[l];
-         }
-         wforms.awgcomponent_list_r_val[k].ramptype = comp[k].ramptype;
-         for (l = 0; l < 4; l++) {
-            wforms.awgcomponent_list_r_val[k].ramppar[l] = 
-               comp[k].ramppar[l];
-         }
-      }
-   
-      /* add waveforms */
-      if (awgaddwaveform_1 (sl, &wforms, &ret, awg_clnt[i][j]) != 
-         RPC_SUCCESS) {
-         free (wforms.awgcomponent_list_r_val);
-         return -2;
-      }
-      free (wforms.awgcomponent_list_r_val);
-   
-      /* return error code */
-      if (ret >= 0) {
-         return 0;
-      }
-      else {
-         return ret - 2;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgSetWaveform				*/
-/*                                                         		*/
-/* Procedure Description: set arbitrary waveform of an awg slot		*/
-/*                                                         		*/
-/* Procedure Arguments: slot, data array, length			*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgSetWaveform (int slot, float y[], int len)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-      awgwaveform_r	wform;	/* awg components */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* anything to do? */
-      if (len < 0) {
-         return 0;
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if ((i == _MAX_IFO) && (sl >= 0) && (sl < NUM_DS340) &&
-         isDS340Alive (sl)) {
-         return sendWaveDS340 (sl, y, len);
-      }
-   
-      /* test parameters */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return setWaveformAWG (sl, y, len);
-      }
-   #endif
-   
-      /* set waveforms */
-      wform.awgwaveform_r_len = len;
-      wform.awgwaveform_r_val = y;
-      if (awgsetwaveform_1 (sl, wform, &ret, awg_clnt[i][j]) != 
-         RPC_SUCCESS) {
-         return -2;
-      }
-   
-      /* return error code */
-      return ret;
-   }
-
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgSendWaveform				*/
-/*                                                         		*/
-/* Procedure Description: send stream to an awg slot			*/
-/*                                                         		*/
-/* Procedure Arguments: slot, time, epoch, data array, length		*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgSendWaveform (int slot, taisec_t time, int epoch,
-                     float y[], int len)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-      awgwaveform_r	wform;	/* awg components */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return -5;
-         }
-      }
-   
-      /* anything to do? */
-      if (len <= 0) {
-         return -2;
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* test parameters: DS340not supported */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return sendWaveformAWG (sl, time, epoch, y, len);
-      }
-   #endif
-   
-      /* set waveforms */
-      wform.awgwaveform_r_len = len;
-      wform.awgwaveform_r_val = y;
-      if (awgsendwaveform_1 (sl, time, epoch, wform, 
-         &ret, awg_clnt[i][j]) != RPC_SUCCESS) {
-         return -5;
-      }
-   
-      /* return error code */
-      return ret;
-   }
-
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgStopWaveform				*/
-/*                                                         		*/
-/* Procedure Description: clears waveforms from an awg slot		*/
-/*                                                         		*/
-/* Procedure Arguments: slot						*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgStopWaveform (int slot, int terminate, tainsec_t time)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if ((i == _MAX_IFO) && (sl >= 0) && (sl < NUM_DS340) &&
-         isDS340Alive (sl)) {
-         return awgClearWaveforms (slot);
-      }
-   
-      /* test parameters */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local AWG */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return stopWaveformAWG (sl, terminate, time);
-      }
-   #endif
-   
-      /* clear waveforms on remote AWG */
-      if (awgstopwaveform_1 (sl, terminate, time, &ret, 
-         awg_clnt[i][j]) != RPC_SUCCESS) {
-         return -2;
-      }
-   
-      /* return error code */
-      if (ret >= 0) {
-         return 0;
-      }
-      else {
-         return ret - 2;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgClearWaveforms				*/
-/*                                                         		*/
-/* Procedure Description: clears waveforms from an awg slot		*/
-/*                                                         		*/
-/* Procedure Arguments: slot						*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgClearWaveforms (int slot)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if ((i == _MAX_IFO) && (sl >= 0) && (sl < NUM_DS340) &&
-         isDS340Alive (sl)) {
-         DS340_ConfigBlock	conf;
-         getDS340 (sl, &conf);
-         conf.ampl = 0;
-         conf.offs = 0;
-         setDS340 (sl, &conf);
-         if (uploadDS340Wave (sl) < 0) {
-            return -2;
-         } 
-         else {
-            return 0;
-         }
-      }
-   
-      /* test parameters */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local AWG */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return resetAWG (sl);
-      }
-   #endif
-   
-      /* clear waveforms on remote AWG */
-      if (awgclearwaveforms_1 (sl, &ret, awg_clnt[i][j]) != 
-         RPC_SUCCESS) {
-         return -2;
-      }
-   
-      /* return error code */
-      if (ret >= 0) {
-         return 0;
-      }
-      else {
-         return ret - 2;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgQueryWaveforms				*/
-/*                                                         		*/
-/* Procedure Description: queries an arbitrary waveform generator	*/
-/*                                                         		*/
-/* Procedure Arguments: slot id, pointer to result array, max length	*/
-/*                                                         		*/
-/* Procedure Returns: length of wave form list if successful, 		*/
-/*		      <0 when failed					*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgQueryWaveforms (int slot, AWG_Component* comp, int maxComp)
-   {
-      int		status;	/* status flag */
-      awgquerywaveforms_r 	ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if ((i == _MAX_IFO) && (sl >= 0) && (sl < NUM_DS340) &&
-         isDS340Alive (sl)) {
-         DS340_ConfigBlock	conf;	/* DS340 configuration */
-         AWG_WaveType 		wtype;	/* wave type */
-      
-         if (downloadDS340Block (sl) < 0) {
-            return -2;
-         }
-         getDS340 (sl, &conf);
-      	 /* determine waveform */
-         if (conf.func == ds340_sin) {
-            wtype = awgSine;
-         }
-         else if (conf.func == ds340_square) {
-            wtype = awgSquare;
-         }
-         else if (conf.func == ds340_ramp) {
-            wtype = awgSquare;
-         }
-         else if (conf.func == ds340_triangle) {
-            wtype = awgSquare;
-         }
-         else if (conf.func == ds340_noise) {
-            wtype = awgNoiseN;
-         }
-         else {
-            return -3;
-         }
-      
-      	 /* test for sweep */
-         if ((conf.toggles & DS340_SWEN) != 0) {
-            int		cnum;		/* number fo components */
-            int		flag;		/* AWG component flag */
-         
-            /* test sweep directions */
-            if ((conf.toggles & DS340_SDIR) == 0) {
-               if (maxComp < 1) {
-                  return 1;
-               }
-               flag = 0;
-            }
-            else {
-               if (maxComp < 2) {
-                  return 2;
-               }
-               flag = AWG_SWEEP_CYCLE;
-            }
-            /* test sweep type */
-            if ((conf.toggles & DS340_STYP) != 0) {
-               flag |= AWG_SWEEP_LOG;
-            }
-            if (conf.srat < 1E-6) {
-               return -3;
-            }
-            /* calculate sweep parameters */
-            if (awgSweepComponents (TAInow(), _ONESEC/conf.srat, conf.stfr,
-               conf.spfr, conf.ampl, conf.ampl, flag, comp, &cnum) < 0) {
-               return -3;
-            }
-            else {
-               return cnum;
-            }
-         }
-         /* periodic or noise */
-         else {
-            if (maxComp < 1) {
-               return 1;
-            }
-            memset (comp, 0, sizeof (AWG_Component));
-            comp->start = TAInow();
-            comp->duration = -1;
-            comp->restart = -1;
-         
-            /* noise first */
-            if (wtype == awgNoiseU) {
-               comp->wtype = wtype;
-               comp->par[0] = conf.ampl;
-               comp->par[1] = 0;
-               comp->par[2] = 10E6;
-               comp->par[3] = conf.offs;
-               return 1;
-            }
-            /* periodic */
-            if (awgPeriodicComponent (wtype, conf.freq, conf.ampl, 0, 
-               conf.offs, comp) < 0) {
-               return -3;
-            }
-            else {
-               return 1;
-            }
-         }
-      } 
-      /* only non DS340 channels */
-   
-      /* test parameters */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return queryWaveformAWG (sl, comp, maxComp);
-      }
-   #endif
-   
-      /* query awg */
-      memset (&ret, 0, sizeof (awgquerywaveforms_r));
-      if ((awgquerywaveforms_1 (sl, maxComp, &ret, awg_clnt[i][j]) != 
-         RPC_SUCCESS) || (ret.status < 0)) {
-         return -2;
-      }
-   
-      /* copy result */
-      for (i = 0; (i < maxComp) && 
-          (i < ret.wforms.awgcomponent_list_r_len); i++) {
-         comp[i].wtype = 
-            ret.wforms.awgcomponent_list_r_val[i].wtype;
-         for (j = 0; j < 4; j++) {
-            comp[i].par[j] = 
-               ret.wforms.awgcomponent_list_r_val[i].par[j];
-         }
-         comp[i].start = 
-            ret.wforms.awgcomponent_list_r_val[i].start;
-         comp[i].duration = 
-            ret.wforms.awgcomponent_list_r_val[i].duration;
-         comp[i].restart = 
-            ret.wforms.awgcomponent_list_r_val[i].restart;
-         for (j = 0; j < 2; j++) {
-            comp[i].ramptime[j] = 
-               ret.wforms.awgcomponent_list_r_val[i].ramptime[j];
-         }
-         comp[i].ramptype = 
-            ret.wforms.awgcomponent_list_r_val[i].ramptype;
-         for (j = 0; j < 4; j++) {
-            comp[i].ramppar[j] = 
-               ret.wforms.awgcomponent_list_r_val[i].ramppar[j];
-         }
-      }
-      /* free memory of return array */
-      xdr_free ((xdrproc_t)xdr_awgquerywaveforms_r, (char*) &ret);
-   
-      /* return length of returned waveform list */
-      return ret.wforms.awgcomponent_list_r_len;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgSetGain					*/
-/*                                                         		*/
-/* Procedure Description: set the gain of an AWG slot			*/
-/*                                                         		*/
-/* Procedure Arguments: slot, gain, ramp time				*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgSetGain (int slot, double gain, tainsec_t time)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return -5;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* test parameters: DS340not supported */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return setGainAWG (sl, gain, time);
-      }
-   #endif
-   
-      /* set waveforms */
-      if (awgsetgain_1 (sl, gain, time, &ret, 
-         awg_clnt[i][j]) != RPC_SUCCESS) {
-         return -5;
-      }
-   
-      /* return error code */
-      return ret;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgSetFilter				*/
-/*                                                         		*/
-/* Procedure Description: set a filter					*/
-/*                                                         		*/
-/* Procedure Arguments: slot, coeff, len				*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgSetFilter (int slot, double y[], int len)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-      awgfilter_r	coeff;	/* awg components */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return -5;
-         }
-      }
-   
-      /* anything to do? */
-      if ((len < 0) || !y) {
-         return -2;
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* test parameters: DS340not supported */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return setFilterAWG (sl, y, len);
-      }
-   #endif
-   
-      /* set waveforms */
-      coeff.awgfilter_r_len = len;
-      coeff.awgfilter_r_val = y;
-      if (awgsetfilter_1 (sl, coeff, &ret, 
-         awg_clnt[i][j]) != RPC_SUCCESS) {
-         return -5;
-      }
-   
-      /* return error code */
-      return ret;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgReset					*/
-/*                                                         		*/
-/* Procedure Description: resets arbitrary waveform generators		*/
-/*                                                         		*/
-/* Procedure Arguments: awg id						*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgReset (int id)
-   {
-      int		status;	/* status flag */
-      int 		ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status;
-         }
-      }
-   
-      ret = 0;
-      if (id == -1) {
-         /* reset all awg's */
-         for (i = 0; i < _MAX_IFO; i++) {
-            for (j = 0; j < _MAX_AWG_PER_IFO; j++) {
-               if (awgCheckInterface (i, j)) {
-                  /* test for local AWG */
-               #ifdef _AWG_LOCAL
-                  if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-                     ret = releaseIndexAWG (-1);
-                  }
-                  else {
-                  #endif
-                  /* reset on remote AWG */
-                     if ((awgreset_1 (&status, awg_clnt[i][j]) !=
-                        RPC_SUCCESS) || (status != 0)) {
-                        ret = -1;
-                     }
-                  #ifdef _AWG_LOCAL
-                  }
-               	#endif
-               }
-            }
-         }
-      	 /* reset all DS340's */
-         resetDS340 (-1);
-      }
-      else if (id < 0) {
-         /* reset all awg's of an ifo */
-         i = (-id) / _AWG_IFO_OFS - 1;
-      	 /* treat DS340 separately */
-         if (i == _MAX_IFO) {
-            resetDS340 (-1);
-         }
-         else if ((i >= 0) && (i < _MAX_IFO)) {
-            for (j = 0; j < _MAX_AWG_PER_IFO; j++) {
-               if (awgCheckInterface (i, j)) {
-                  /* test for local AWG */
-               #ifdef _AWG_LOCAL
-                  if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-                     ret = releaseIndexAWG (-1);
-                  }
-                  else {
-                  #endif
-                  /* reset on remote AWG */
-                     if ((awgreset_1 (&status, awg_clnt[i][j]) !=
-                        RPC_SUCCESS) || (status != 0)) {
-                        ret = -1;
-                     }
-                  #ifdef _AWG_LOCAL
-                  }
-               	#endif
-               }
-            }
-         }
-      }
-      else {
-         /* reset one specific ifo */
-         i = id / _AWG_IFO_OFS - 1;
-         j = (id % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      	 /* treat DS340 separately */
-         if (i == _MAX_IFO) {
-            resetDS340 (j);
-         }
-         /* do awg's */
-         else if (awgCheckInterface (i, j)) {
-            /* test for local AWG */
-         #ifdef _AWG_LOCAL
-            if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-               ret = releaseIndexAWG (-1);
-            }
-            else {
-            #endif
-            /* reset on remote AWG */
-               if ((awgreset_1 (&status, awg_clnt[i][j]) !=
-                  RPC_SUCCESS) || (status != 0)) {
-                  ret = -1;
-               }
-            #ifdef _AWG_LOCAL
-            }
-         #endif
-         }
-      }
-   
-      return ret;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgStatistics				*/
-/*                                                         		*/
-/* Procedure Description: obtains statistics data from an AWG		*/
-/*                                                         		*/
-/* Procedure Arguments: awg id, pointer to stat. data			*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful, <0 when failed			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgStatistics (int slot, awgStat_t* stat)
-   {
-      int		status;	/* status flag */
-      awgstat_r 	ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return status - 10;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = slot / _AWG_IFO_OFS - 1;
-      j = (slot % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (slot % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return -1;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         return getStatisticsAWG (stat);
-      }
-   #endif
-   
-      /* query awg */
-      memset (&ret, 0, sizeof (awgstat_r));
-      if ((awgstatistics_1 (stat == NULL, &ret, 
-         awg_clnt[i][j]) != RPC_SUCCESS) || (ret.status < 0)) {
-         return -2;
-      }
-   
-      /* copy result; do it the dumb way */
-      if (stat != NULL) {
-         memcpy (stat, &ret, sizeof (awgStat_t));
-      }
-      /* free memory of return array */
-      xdr_free ((xdrproc_t)xdr_awgstat_r, (char*) &ret);
-   
-      /* return */
-      return 0;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgShow					*/
-/*                                                         		*/
-/* Procedure Description: returns config. string of AWG			*/
-/*                                                         		*/
-/* Procedure Arguments: awg id						*/
-/*                                                         		*/
-/* Procedure Returns: string if successful, NULL when failed		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   char* awgShow (int id)
-   {
-      int		status;	/* status flag */
-      awgshow_r 	ret;	/* return value */
-      int		i;	/* index */
-      int		j;	/* index */
-      int		sl; 	/* slot within awg */
-      char*		p;	/* show buffer */
-   
-      /* test whether awg interface is initialized */
-      if (awg_init == 0) {
-         status = awg_client();
-         if (status < 0) {
-            return NULL;
-         }
-      }
-   
-      /* use slot number to determine awg */
-      i = abs(id) / _AWG_IFO_OFS - 1;
-      j = (abs(id) % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-      sl = (abs(id) % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-   
-      /* treat DS340 separately */
-      if (i == _MAX_IFO) {
-         /* alloc memory */
-         p = malloc (_SHOWBUF_SIZE);
-         if (p == NULL) {
-            return NULL;
-         }
-         strcpy (p, "Only connected DSG channels are shown\n");
-         j = strlen (p);
-      	 /* query ds340 */
-         for (i = 0; i < NUM_DS340; i++) {
-            if ((isDS340Alive (i)) && 
-               (strlen (p) + 100 < _SHOWBUF_SIZE)) {
-               sprintf (strend (p), 
-                       "\n=== Digital signal generator %i @ %s/%i===\n", 
-                       i, ds340addr[i], ds340port[i]);
-               downloadDS340Block (i);
-               showDS340Block (i, strend (p), _SHOWBUF_SIZE-strlen(p)-1);
-            }
-         }
-         if (strlen (p) == j) {
-            strcpy (p, "No DSG channels connected\n");
-         }
-         /* return */
-         if (strlen (p) < _SHOWBUF_SIZE - 1) {
-            p = realloc (p, strlen (p) + 1);
-         }
-         return p;
-      }
-   
-      /* test parameters */
-      if (!awgCheckInterface (i, j) || (sl < 0)) {
-         return NULL;
-      }
-   
-      /* test for local awg */
-   #ifdef _AWG_LOCAL
-      if (AWG_ID (i, j) == _AWG_LOCAL_SLOT) {
-         p = malloc (_SHOWBUF_SIZE);
-         if (p == NULL) {
-            return NULL;
-         }
-         if (id < 0) {
-            if (showAWG (sl, p, _SHOWBUF_SIZE) < 0) {
-               free (p);
-               return NULL;
-            }
-         }
-         else {
-            if (showAllAWGs (p, _SHOWBUF_SIZE) == NULL) {
-               free (p);
-               return NULL;
-            }
-         }
-         if (strlen (p) < _SHOWBUF_SIZE - 1) {
-            p = realloc (p, strlen (p) + 1);
-         }
-         return p;
-      }
-   #endif
-   
-      /* query awg */
-      memset (&ret, 0, sizeof (awgshow_r));
-      if (id < 0) {
-         if ((awgshowslot_1 (sl, &ret, awg_clnt[i][j]) != RPC_SUCCESS) || 
-            (ret.status < 0)) {
-            xdr_free ((xdrproc_t)xdr_awgshow_r, (char*) &ret);
-            return NULL;
-         }
-      }
-      else {
-         if ((awgshow_1 (&ret, awg_clnt[i][j]) != RPC_SUCCESS) || 
-            (ret.status < 0)) {
-            xdr_free ((xdrproc_t)xdr_awgshow_r, (char*) &ret);
-            return NULL;
-         }
-      }
-   
-      /* return */
-      return ret.res;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awg_client					*/
-/*                                                         		*/
-/* Procedure Description: installs awg client interface			*/
-/*                                                         		*/
-/* Procedure Arguments: void						*/
-/*                                                         		*/
-/* Procedure Returns: # of AWGs if successful, <0 if failed		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/           
-   int awg_client (void)
-   {
-      int		i;		/* index */
-      int		j;		/* index */
-      int		awgnum;		/* number of AWGs */
-   #if defined (_CONFIG_DYNAMIC)
-      const char* const* cinfo;		/* configuration info */
-      confinfo_t	crec;		/* conf. info record */
-   #endif
-   
-      /* test whether awg interface is initialized */
-      if (awg_init != 0) {
-         awgnum = 0;
-         for (i = 0; i < _MAX_IFO; i++) {
-            for (j = 0; j < _MAX_AWG_PER_IFO; j++) {
-               if (awg_clnt[i][j] != NULL) {
-                  awgnum++;
-               }
-            }
-         }
-         for (i = 0; i < NUM_DS340; i++) {
-            if ((strlen (ds340addr[i]) > 0) &&
-               (ds340port[i] > 0)) {
-               awgnum++;
-            }
-         }
-         return awgnum;
-      }
-      else {
-         /* dynamic configuration */
-      #if defined (_CONFIG_DYNAMIC)
-         for (cinfo = getConfInfo (0, 0); *cinfo != NULL; cinfo++) {
-            if ((parseConfInfo (*cinfo, &crec) == 0) &&
-               (gds_strcasecmp (crec.interface, 
-                                CONFIG_SERVICE_AWG) == 0)) {
-               if ((crec.ifo >= 0) && (crec.ifo < _MAX_IFO) &&
-                  (crec.num >= 0) && (crec.num < _MAX_AWG_PER_IFO) &&
-                  (crec.port_prognum > 0) && (crec.progver > 0)) {
-                  awgSetHostAddress (crec.ifo, crec.num, crec.host, 
-                                    crec.port_prognum, crec.progver);
-               }
-               else if ((crec.ifo == -1) &&
-                       (crec.num >= 0) && (crec.num < NUM_DS340) &&
-                       (crec.port_prognum > 0) && (crec.progver == -1)) {
-                  ds340SetHostAddress (crec.num, crec.host, 
-                                      crec.port_prognum);
-               }
-            }
-         }
-      #endif
-      
-         /* init clients */
-         return initAWGclient();
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awg_cleanup					*/
-/*                                                         		*/
-/* Procedure Description: terminates awg client interface		*/
-/*                                                         		*/
-/* Procedure Arguments: void						*/
-/*                                                         		*/
-/* Procedure Returns: void						*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/ 
-   void awg_cleanup (void)
-   {
-      int		i;		/* index */
-      int		j;		/* index */
-   
-      if (awg_init == 0) {
-         return;
-      }
-   
-      for (i = 0; i < _MAX_IFO; i++) {
-         for (j = 0; j < _MAX_AWG_PER_IFO; j++) {
-            if (awg_clnt[i][j] != NULL) {
-               clnt_destroy (awg_clnt[i][j]);
-               awg_clnt[i][j] = NULL;
-            }
-         }
-      
-      }
-   
-      awg_init = 0;
-   }
-
-
-#if defined (_AWG_LIB) || defined (_CONFIG_DYNAMIC)
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: awgSetHostAddress				*/
-/*                                                         		*/
-/* Procedure Description: sets the host adddr of the excitation engine	*/
-/*                                                         		*/
-/* Procedure Arguments: ifo id, awg id, hostname, prog #, ver #		*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful					*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   int awgSetHostAddress (int ifo, int awg, const char* hostname, 
-                     unsigned long prognum, unsigned long progver)
-   {   
-      if ((awg_init > 0) || (ifo < 0) || (ifo >= _MAX_IFO) ||
-         (awg < 0) || (awg >= _MAX_AWG_PER_IFO)) {
-         return -1;
-      }
-      /* set node parameters */
-      awgHost[ifo][awg].valid = 1;
-      strncpy (awgHost[ifo][awg].hostname, hostname, 
-              sizeof (awgHost[ifo][awg].hostname));
-      awgHost[ifo][awg].hostname[sizeof (awgHost[ifo][awg].hostname)-1] = 0;
-      awgHost[ifo][awg].prognum = (prognum > 0) ? 
-                           prognum : RPC_PROGNUM_AWG;
-      awgHost[ifo][awg].progver = (progver > 0) ? 
-                           progver : RPC_PROGVER_AWG;
-      return 0;
-   }
-
-
-   int ds340SetHostAddress (int ds340, const char* hostname, int port)
-   {
-      if ((awg_init > 0) || (ds340 < 0) || (ds340 >= NUM_DS340)) {
-         return -1;
-      }
-      strncpy (ds340addr[ds340], hostname, 100);
-      ds340addr[ds340][99] = 0;
-      ds340port[ds340] = port;
-      return 0;
-   }
-#endif
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: initAWGclient				*/
-/*                                                         		*/
-/* Procedure Description: init. the AWG interface			*/
-/*                                                         		*/
-/* Procedure Arguments: void						*/
-/*                                                         		*/
-/* Procedure Returns: # of AWGs if successful, <0 when failed		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   static int initAWGclient (void) 
-   {
-      int		i;		/* index */
-      int		j;		/* index */
-      char		prms[80];	/* section heading */
-      struct in_addr 	addr;		/* host address */
-      char 		remotehost[PARAM_ENTRY_LEN];/* remote hostname */
-      char		hostname[30];	/* ip name */
-      unsigned long	prognum;	/* rpc prog. num. */
-      unsigned long	progver;	/* rpc prog. ver. */
-      struct timeval	timeout;	/* timeout for establishing conn. */
-      int		awgnum;		/* number of AWGs */
-   #if !defined (_AWG_LIB) && !defined (_CONFIG_DYNAMIC)
-      FILE*		fd;		/* file descriptor */
-      int		port;		/* cobox port number */
-   #endif
-   
-      /* initialize rpc for VxWorks */
-   #ifdef OS_VXWORKS
-      rpcTaskInit ();
-   #endif
-   
-      /* initialze awg number */
-      awgnum = 0;
-      /* create client handles */
-      for (i = 0; i < _MAX_IFO; i++) {
-      #if !defined (_AWG_LIB) && !defined (_CONFIG_DYNAMIC)
-      	 /* check whether file exists */ 
-         fd = fopen (PRM_FILE, "r");
-         if (fd == NULL) {
-            /* if file doesn't exist, set all handles to NULL */
-            for (j = 0; j < _MAX_AWG_PER_IFO; j++) {
-               awg_clnt[i][j] = NULL;
-            }
-            continue;
-         }
-         fclose (fd);
-      #endif
-      	 /* if file exists, read in parameters */
-         for (j = 0; j < _MAX_AWG_PER_IFO; j++) {
-            awg_clnt[i][j] = NULL;
-         #if !defined (_AWG_LIB) && !defined (_CONFIG_DYNAMIC)
-            /* construct section heading */
-            sprintf (prms, "%s%i-%s%i", SITE_PREFIX, i + 1, PRM_SECTION, j);
-            /* get remote host from parameter file */
-            strcpy (remotehost, "");
-            loadStringParam (PRM_FILE, prms, PRM_ENTRY1, remotehost);
-            if (strcmp (remotehost, "") == 0) {
-               continue;
-            }
-            /* get rpc parameters from parameter file */
-            prognum = RPC_PROGNUM_AWG;
-            if (loadNumParam (PRM_FILE, prms, PRM_ENTRY2, &prognum) < 0) {
-               continue;
-            }
-            progver = RPC_PROGVER_AWG;
-            if (loadNumParam (PRM_FILE, prms, PRM_ENTRY3, &progver) < 0) {
-               continue;
-            }
-         #else
-            if (!awgHost[i][j].valid) {
-               continue;
-            }
-            strncpy (remotehost, awgHost[i][j].hostname, 
-                    sizeof (remotehost));
-            remotehost[sizeof(remotehost)-1] = 0;
-            prognum = awgHost[i][j].prognum;
-            progver = awgHost[i][j].progver;
-         #endif
-         
-            /* check validity of host name */
-            if (rpcGetHostaddress (remotehost, &addr) != 0) {
-               continue;
-            }
-         
-            /* create an rpc client handle */
-         #ifdef OS_VXWORKS
-            inet_ntoa_b (addr, hostname);
-         #else
-            strncpy (hostname, inet_ntoa (addr), sizeof (hostname));
-            hostname[sizeof(hostname)-1] = 0;
-         #endif
-            timeout.tv_sec = RPC_PROBE_WAIT;
-            timeout.tv_usec = 0;
-         #ifndef OS_VXWORKS
-            rpcProbe (hostname, prognum, progver, _NETID, &timeout, 
-                     &awg_clnt[i][j]);
-         #endif
-            if (awg_clnt[i][j] != NULL) {
-               awgnum++;
-               sprintf (prms, "rpc client for awg %i.%i created", 
-                       i, j);
-               gdsDebug (prms);
-            }
-            else {
-               sprintf (prms, "rpc client for awg %i.%i failed", 
-                       i, j);
-               gdsError (GDS_ERR_PROG, prms);
-            }
-         }
-      }
-   
-      /* initialize cobox */
-   #if !defined (_AWG_LIB) && !defined (_CONFIG_DYNAMIC)
-      memset (ds340addr, 0, sizeof (ds340addr));
-      memset (ds340port, 0, sizeof (ds340port));
-      /* check whether file exists */ 
-      fd = fopen (PRM_FILE, "r");
-      if (fd != NULL) {
-         fclose (fd);
-      
-         for (i = 0; i < NUM_DS340; i++) {
-            /* if file exists, read in parameters */
-            /* construct section heading */
-            sprintf (prms, "%s-%s%i", SITE_PREFIX, PRM_SECTION2, i);
-            /* get remote host from parameter file */
-            strcpy (remotehost, "");
-            loadStringParam (PRM_FILE, prms, PRM_ENTRY1, remotehost);
-            if (strcmp (remotehost, "") == 0) {
-               continue;
-            }
-            /* get serial port number from parameter file */
-            port = 0;
-            if (loadIntParam (PRM_FILE, prms, PRM_ENTRY4, &port) < 0) {
-               continue;
-            }
-            if (port <= 0) {
-               continue;
-            }
-            strncpy (ds340addr[i], remotehost, 100);
-            ds340addr[i][99] = 0;
-            ds340port[i] = port;
-            /* printf ("%i:host = %s; port = %i\n", i, ds340addr[i],
-                   ds340port[i]);*/
-            awgnum++;
-         }
-      }
-   #else
-      for (i = 0; i < NUM_DS340; i++) {
-         if (strlen (ds340addr[i]) > 0) {
-            /* printf ("%i:host = %s; port = %i\n", i, ds340addr[i],
-                   ds340port[i]);*/
-            awgnum++;
-         }
-      }
-   #endif
-   
-      /* initialization successful */
-      awg_init = 1;
-      return awgnum;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: cmdreply					*/
-/*                                                         		*/
-/* Procedure Description: command reply					*/
-/*                                                         		*/
-/* Procedure Arguments: string						*/
-/*                                                         		*/
-/* Procedure Returns: newly allocated char*				*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/   
-   static char* cmdreply (const char* m)
-   {
-      if (m == 0) {
-         return 0;
-      }
-      else {
-         char* p = (char*) malloc (strlen (m) + 1);
-         if (p != 0) {
-            strcpy (p, m);
-         }
-         return p;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgWaveformCmd				*/
-/*                                                         		*/
-/* Procedure Description: returns awg components from string command	*/
-/*                                                         		*/
-/* Procedure Arguments: command string, awg component array (return, 	*/
-/*    max 2 elements), number of elements returned, error message,	*/
-/*    pointer to point array (return for arb awg), length of poin array	*/
-/*    boolean for DS340							*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful; <0 on error			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/           
-   int awgWaveformCmd (const char* cmd, AWG_Component comp[], int* cnum,
-                     char** errmsg, float** points, int* num, int isDS340)
-   {
-      static tainsec_t oldTimeStamp = 0;
-      tainsec_t timeStamp;
-      const char*	p;	/* cursor into command string */
-   
-      if (errmsg != NULL) {
-         *errmsg = NULL;
-      }
-      if (points != NULL) {
-         *points = NULL;
-      }
-   
-      /* check parameters */
-      if ((cmd == 0) || (comp == 0) || (cnum == 0) || 
-         (num == 0) || (points == 0)) {
-         if (errmsg != 0)  {
-            *errmsg = cmdreply ("error: invalid arguments");
-         }
-         return -1;
-      }
-      *num = 0;
-      *cnum = 1;
-   
-      /* skip blanks */
-      p = cmd;
-      while ((*p == ' ') || (*p == '\t')) {
-         p++;
-      }
-      /* time stamp */
-      timeStamp = TAInow();
-      if (timeStamp - oldTimeStamp < _EPOCH / 10) {
-         timeStamp = oldTimeStamp;
-      }
-      else {
-         oldTimeStamp = timeStamp;
-      }
-      timeStamp += 4 * _EPOCH;
-   
-      /* determine waveform */
-      if (strlen (p) == 0) {
-         /* no waveform means clear */
-         return 0;
-      }
-      /* sine */
-      else if (gds_strncasecmp (p, "sine", 4) == 0) {
-         double 		f, a, o, q;
-         if ((sscanf (p + 4, "%lf%lf%lf%lf", &f, &a, &o, &q) != 4) ||
-            (awgPeriodicComponentEx (awgSine, timeStamp, 
-            f, a, q, o, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -2;
-         }
-      }
-      
-      /* square */
-      else if (gds_strncasecmp (p, "square", 6) == 0) {
-         double 		f, a, o, q, r;
-         int			num;
-         num = sscanf (p + 6, "%lf%lf%lf%lf%lf", &f, &a, &o, &q, &r);
-         if (num == 4) {
-            if (awgPeriodicComponentEx (awgSquare, timeStamp,
-               f, a, q, o, comp) < 0) {
-               if (errmsg != NULL) {
-                  *errmsg = cmdreply ("error: invalid arguments");
-               }
-               return -3;
-            }
-         }
-         else if (num == 5) {
-            if (awgSquareWaveComponentEx (timeStamp, 
-               f, a, q, o, r, comp) < 0) {
-               if (errmsg != NULL) {
-                  *errmsg = cmdreply ("error: invalid arguments");
-               }
-               return -3;
-            }
-            *cnum = 2;
-         }
-         else {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -3;
-         }
-      }
-      
-      /* ramp */
-      else if (gds_strncasecmp (p, "ramp", 4) == 0) {
-         double 		f, a, o, q;
-         if ((sscanf (p + 4, "%lf%lf%lf%lf", &f, &a, &o, &q) != 4) ||
-            (awgPeriodicComponentEx (awgRamp, timeStamp,
-            f, a, q, o, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -4;
-         }
-      }
-      
-      /* triangle */
-      else if (gds_strncasecmp (p, "triangle", 8) == 0) {
-         double 		f, a, o, q;
-         if ((sscanf (p + 8, "%lf%lf%lf%lf", &f, &a, &o, &q) != 4) ||
-            (awgPeriodicComponentEx (awgTriangle, timeStamp,
-            f, a, q, o, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -5;
-         }
-      }
-      
-      /* impulse */
-      else if (gds_strncasecmp (p, "impulse", 7) == 0) {
-         double 		f, a, du, de;
-         if ((sscanf (p + 7, "%lf%lf%lf%lf", &f, &a, &du, &de) != 4) ||
-            (awgPeriodicComponentEx (awgImpulse, timeStamp,
-            f, a, du, de, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -6;
-         }
-      }
-      
-      /* constant offset */
-      else if (gds_strncasecmp (p, "const", 5) == 0) {
-         double 		a;
-         if ((sscanf (p + 5, "%lf", &a) != 1) ||
-            (awgConstantComponentEx (timeStamp, a, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -7;
-         }
-      }
-      
-      /* normally distributed noise */
-      else if (gds_strncasecmp (p, "normal", 6) == 0) {
-         double 		f1, f2, a, o;
-         if ((sscanf (p + 6, "%lf%lf%lf%lf", &f1, &f2, &a, &o) != 4) ||
-            (awgNoiseComponentEx (awgNoiseN, timeStamp,
-            f1, f2, a, o, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -8;
-         }
-      }
-      
-      /* uniformly distributed noise */
-      else if (gds_strncasecmp (p, "uniform", 7) == 0) {
-         double 		f1, f2, a, o;
-         if ((sscanf (p + 7, "%lf%lf%lf%lf", &f1, &f2, &a, &o) != 4) ||
-            (awgNoiseComponentEx (awgNoiseU, timeStamp,
-            f1, f2, a, o, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -9;
-         }
-      }
-      
-      /* frequency/amplitude sweep */
-      else if (gds_strncasecmp (p, "sweep", 5) == 0) {
-         double		f1, f2, a1, a2, dt, ft;
-         char		stype[256];
-         char		dir = 0;
-         int		sFlag = 0;
-      
-         /* scan sweep parameters */
-         if (sscanf (p + 5, "%lf%lf%lf%lf%lf %s %c", &f1, &f2, &a1, 
-            &a2, &dt, stype, &dir) < 6) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -10;
-         }
-         if (gds_strncasecmp (stype, "log", 3) == 0) {
-            sFlag |= AWG_SWEEP_LOG;
-         }
-         f1 = fabs (f1); f2 = fabs (f2);
-         a1 = fabs (a1); a2 = fabs (a2);
-         dt = fabs (dt);
-         ft = (f1 < f2) ? f1 : f2;
-         if (ft < 1E-6) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -11;
-         }
-         if (dir == '-') {
-            ft = f1; f1 = f2; f2 = ft;
-            ft = a1; a1 = a2; a2 = ft;
-         }
-         else if (dir != '+') {
-            sFlag |= AWG_SWEEP_CYCLE;
-            dt *= 2;
-         }
-         /* calculate sweep parameters */
-         if (awgSweepComponents (timeStamp, 
-            dt * (double) _ONESEC, f1, f2, 
-            a1, a2, sFlag, comp, cnum) < 0) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -12;
-         }
-      }
-      
-      /* arbitrary waveform */
-      else if (gds_strncasecmp (p, "arb", 3) == 0) {
-         /* scan arb waveform parameter */
-         double		f;	/* sampling frequency */
-         double		scale;	/* scaling factor */
-         char		trig;	/* trigger type */
-         double		trigval;/* trigger value */
-         double		rate;	/* trigger interval */
-         float		point;	/* data point */
-         char*		tok;	/* token */
-         char*		lasts;	/* temp */
-         int		len = 0;/* array length */
-         float*		y;	/* data array */
-         float		max;	/* max of data array */
-         char*		cmdcopy;/* copy of command string */
-      
-         cmdcopy = cmdreply (p + 3);
-         if (cmdcopy == 0) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: not enough memory");
-            }
-            return -13;
-         }
-      
-         /* read sampling frequency */
-         if (((tok = strtok_r (cmdcopy, " ", &lasts)) == NULL) ||
-            (sscanf (tok, "%lf", &f) != 1) || (f <= 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            free (cmdcopy);
-            return -14;
-         }
-         /* read scaling factor */
-         if (((tok = strtok_r (NULL, " ", &lasts)) == NULL) ||
-            (sscanf (tok, "%lf", &scale) != 1)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            free (cmdcopy);
-            return -15;
-         }
-         /* read trigger type */
-         if (((tok = strtok_r (NULL, " ", &lasts)) == NULL) ||
-            (sscanf (tok, "%c", &trig) != 1) ||
-            ((tolower (trig) != 'c') && (tolower (trig) != 'w') && 
-            (tolower (trig) != 't') && (tolower (trig) != 'r'))) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            free (cmdcopy);
-            return -16;
-         }
-         if (tolower (trig) == 't') {
-            trigval = 3;
-         }
-         else if (tolower (trig) == 'w') {
-            trigval = 2;
-         }
-         else if (tolower (trig) == 'r') {
-            trigval = 1;
-         }
-         else {
-            trigval = 0;
-         }
-         /* read interval value */
-         if (((tok = strtok_r (NULL, " ", &lasts)) == NULL) ||
-            (sscanf (tok, "%lf", &rate) != 1) || (rate < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            free (cmdcopy);
-            return -17;
-         }
-      
-         y = malloc (10000 * sizeof (float));
-         if (y == NULL) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: not enough memory");
-            }
-            free (cmdcopy);
-            return -18;
-         }
-         max = 0;
-         while (((tok = strtok_r (NULL, " ", &lasts)) != NULL) &&
-               (sscanf (tok, "%f", &point) == 1)) {
-            y [len++] = point;
-            if (fabs (point) > max) {
-               max = fabs (point);
-            }
-            if (len % 10000 == 0) {
-               y = realloc (y, (len + 10000) * sizeof (float));
-               if (y == NULL) {
-                  if (errmsg != NULL) {
-                     *errmsg = cmdreply ("error: not enough memory");
-                  }
-                  free (cmdcopy);
-                  return -19;
-               } 
-            }
-         }
-         /* only DS340 needs amplitude separately */
-         if (!isDS340) {
-            max = 1;
-         }
-         if (awgPeriodicComponentEx (awgArb, timeStamp,
-            f, scale, rate, trigval, 
-            comp) < 0) {
-            free (y);
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: unable to download waveform");
-            }
-            free (cmdcopy);
-            return -20;
-         }
-         *points = y;
-         *num = len;
-         free (cmdcopy);
-      }
-      
-      /* waveform stream */
-      else if (gds_strncasecmp (p, "stream", 6) == 0) {
-         double 		a;
-         if ((sscanf (p + 6, "%lf", &a) != 1) ||
-            (awgStreamComponentEx (timeStamp, a, comp) < 0)) {
-            if (errmsg != NULL) {
-               *errmsg = cmdreply ("error: invalid arguments");
-            }
-            return -7;
-         }
-      }
-      
-      /* unrecognized waveform */
-      else {
-         if (errmsg != NULL) {
-            *errmsg = cmdreply ("error: unrecognized waveform");
-         }
-         return -21;
-      }
-   
-      /* check waveform components */
-      if (!awgIsValidComponent (comp) ||
-         ((*cnum == 2) && !awgIsValidComponent (comp + 1))) {
-         if (errmsg != NULL) {
-            *errmsg = cmdreply ("error: invalid arguments");
-         }
-         if (*points != 0) {
-            free (*points);
-         }
-         return -22;
-      }
-   
-      return 0;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: awgSetPhaseIn				*/
-/*                                                         		*/
-/* Procedure Description: returns awg components from string command	*/
-/*                                                         		*/
-/* Procedure Arguments: awg component array, number of elements		*/
-/*                                                         		*/
-/* Procedure Returns: 0 if successful; <0 on error			*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/           
-   int awgSetPhaseIn (AWG_Component comp[], int cnum)
-   {
-      int			i;		/* index */
-      if (ramptime <= 0) {
-         return 0;
-      }
-      for (i = 0; i < cnum; ++i) {
-         /* makes sure we have a useful waveform */
-         if ((comp[i].wtype != awgSine) &&
-            (comp[i].wtype != awgSquare) &&
-            (comp[i].wtype != awgRamp) &&
-            (comp[i].wtype != awgTriangle) &&
-            (comp[i].wtype != awgConst) &&
-            (comp[i].wtype != awgImpulse) &&
-            (comp[i].wtype != awgNoiseN) &&
-            (comp[i].wtype != awgNoiseU)) {
-            continue;
-         }
-      	 /* don't if waveform is restarted */
-         if (comp[i].restart > 0) {
-            continue;
-         }
-      	 /* don't if ramp is already set */
-         if (comp[i].ramptype) {
-            continue;
-         }
-      	 /* OK */
-         comp[i].ramppar[0] = 0; /* amplitude */
-         comp[i].ramppar[1] = 0; /* frequency */
-         comp[i].ramppar[2] = 0; /* phase */
-         comp[i].ramppar[3] = 0; /* offset */
-         comp[i].ramptype = RAMP_TYPE (AWG_PHASING_LINEAR, 
-                                      AWG_PHASING_STEP, AWG_PHASING_STEP);
-         comp[i].ramptime[0] = (tainsec_t)(1E9*ramptime);
-         comp[i].ramptime[1] = 0;
-      }
-      return 0;
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Internal Procedure Name: ___Slot					*/
-/*                                                         		*/
-/* Procedure Description: slot cache					*/
-/*                                                         		*/
-/* Procedure Arguments: -						*/
-/*                                                         		*/
-/* Procedure Returns: - 						*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/           
-   static void initSlot (void)
-   {
-      memset (slotlist, 0, sizeof (slotlist));
-      slotinit = 0;
-   }
-
-   static int updateSlot (int slot, const char* name)
-   {
-      int i;
-   
-      if (slotinit) initSlot();
-      /* already exists? */
-      for (i = 0; i < MAX_SLOT_LIST; ++i) {
-         if (slotlist[i].slot == slot) {
-            strncpy (slotlist[i].name, name, MAX_SLOT_NAME);
-            slotlist[i].name[MAX_SLOT_NAME-1] = 0;
-            return 0;
-         }
-      }
-      /* put it into new slot */
-      for (i = 0; i < MAX_SLOT_LIST; ++i) {
-         if (slotlist[i].slot) {
-            continue;
-         }
-         slotlist[i].slot = slot;
-         strncpy (slotlist[i].name, name, MAX_SLOT_NAME);
-         slotlist[i].name[MAX_SLOT_NAME-1] = 0;
-         return 0;
-      }
-      return -1;
-   }
-
-   static int freeSlot (int slot)
-   {
-      int i;
-   
-      if (slotinit) initSlot();
-      for (i = 0; i < MAX_SLOT_LIST; ++i) {
-         if (slotlist[i].slot == slot) {
-            slotlist[i].slot = 0;
-            return 0;
-         }
-      }
-      return -1;
-   }
-
-   static const char* readSlot (const char* p, int* slot)
-   {
-      int i;
-      int num;
-   
-      while (isspace (*p)) ++p;
-      /* number */
-      if (isdigit (*p)) {
-         if (sscanf (p, "%i%n", slot, &num) != 1) {
-            *slot = -1;
-            return NULL;
-         }
-         return p + num;
-      }
-      /* name */
-      else {
-         for (num = 0; p[num] && !isspace (p[num]); ++num) ;
-         for (i = 0; i < MAX_SLOT_LIST; ++i) {
-            if (gds_strncasecmp (p, slotlist[i].name, num) == 0) {
-               *slot = slotlist[i].slot;
-               return p + num;
-            }
-         }
-         *slot = -1;
-         return NULL;
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgFree					*/
-/*                                                         		*/
-/* Procedure Description: Free allocated memory 			*/
-/*                                                         		*/
-/* Procedure Arguments: pointer to be freed    				*/
-/*                                                         		*/
-/* Procedure Returns: void      					*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-   void
-   awgFree(void* p) {
-      free(p);
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgCommand					*/
-/*                                                         		*/
-/* Procedure Description: command line interface			*/
-/*                                                         		*/
-/* Procedure Arguments: command string					*/
-/*                                                         		*/
-/* Procedure Returns: reply string					*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-
-   char* awgCommand (const char* cmd)
-   {
-      char*		p;
-      int		i;	/* node number */
-      int		j;	/* awg number */
-      int		sl;	/* slot number */
-      char		buf[100]; /* buffer */
-      float		id; /* node.awg number */
-
-      /* help */
-      if (gds_strncasecmp (cmd, "help", 4) == 0) {
-         return cmdreply (_HELP_TEXT);
-      }
-      /* show */
-      else if (gds_strncasecmp (cmd, "show", 4) == 0) {
-         p = (char*)(cmd + 4);
-         while (isspace (*p)) ++p;
-         if (isdigit (*p) || (*p == '+') || (*p == '-') || (*p == '.')) {
-            if (sscanf (cmd + 4, "%f", &id) != 1) {
-               return cmdreply ("error: arguments for show are 'node'.'awg'/'slot'");
-            }
-            else {
-               if (id < _AWG_IFO_OFS) {
-                  i = (int) id;
-                  j = (int) (10 * (id - i));
-                  sl = -1;
-               }
-               else {
-                  i = (int)id / _AWG_IFO_OFS - 1;
-                  j = ((int)id % _AWG_IFO_OFS) / _AWG_NUM_OFS;
-                  sl = ((int)id % _AWG_IFO_OFS) % _AWG_NUM_OFS;
-               }	
-               if (i == _MAX_IFO) {
-                  return awgShow (AWG_ID (i,j));
-               }
-               if (!awgCheckInterface (i, j)) {
-                  sprintf (buf, "error: node %i/awg %i not available", i, j);
-                  return cmdreply (buf);
-               }
-               return awgShow (sl < 0 ? AWG_ID (i,j) : -(int)id);
-            }
-         }
-         else {
-            p = (char*) readSlot (cmd + 4, &sl);
-            if (p == NULL) {
-               sprintf (buf, "error: illegal slot name");
-               return cmdreply (buf);
-            }
-            return awgShow (-sl);
-         }
-      }
-      /* channels */
-      else if (gds_strncasecmp (cmd, "channel", 6) == 0) {
-         i = awgGetChannelNames (NULL, 0, 1);
-         if (i < 0) {
-            return cmdreply ("error: channel information not available");
-         }
-         else if (i == 0) {
-            return cmdreply ("no channels available");
-         }
-         p = malloc (i + 10);
-         if (p == NULL) {
-            return NULL;
-         }
-         if (awgGetChannelNames (p, i + 9, 1) < 0) {
-            return cmdreply ("error: channel information not available");
-         }
-         else {
-            return p;
-         }
-      }
-      /* new */
-      else if (gds_strncasecmp (cmd, "new", 3) == 0) {
-         /* remove blanks */
-         p = (char*) (cmd + 3);
-         while (*p == ' ') {
-            p++;
-         }
-         if (strchr (p, ' ') != NULL) {
-            *strchr (p, ' ') = 0;
-         }
-         sl = awgSetChannel (p);
-         if (sl < 0) {
-            return cmdreply ("error: no slot available or invalid channel name");
-         }
-         updateSlot (sl, p);
-         sprintf (buf, "slot %i", sl);
-         return cmdreply (buf);
-      }
-      /* free */
-      else if (gds_strncasecmp (cmd, "free", 4) == 0) {
-         if (readSlot (cmd + 4, &sl) == NULL) {
-         /*if (sscanf (cmd + 4, "%i", &sl) != 1) {*/
-            return cmdreply ("error: invalid slot number/name");
-         }
-         freeSlot (sl);
-         if (awgRemoveChannel (sl) < 0) {
-            return cmdreply ("error: slot not available or invalid");
-         }
-         sprintf (buf, "slot %i freed", sl);
-         return cmdreply (buf);
-      }
-      /* set & add */
-      else if ((gds_strncasecmp (cmd, "set", 3) == 0) ||
-              (gds_strncasecmp (cmd, "add", 3) == 0)) {
-         AWG_Component		comp[20];/* awg components */
-         int			cnum;	/* number of comp entries */
-         int			cnew;	/* temp. component # */
-         char*			errmsg;	/* error message */
-         float*			y;	/* awg point array */
-         int			len;	/* number of awg points */
-         char*			cmdcopy;/* copy of command string */
-         char*			lasts;	/* temp for strtok_r */
-      
-         memset (comp, 0, 20 * sizeof (AWG_Component));
-         for (cnum = 0; cnum < 20; cnum++) {
-            comp[cnum].start = TAInow();
-            comp[cnum].duration = -1;
-            comp[cnum].restart = -1;
-         }
-         /* scan slot number */
-         p = (char*) readSlot (cmd + 3, &sl);
-         if (p == NULL) {
-            return cmdreply ("error: invalid slot number/name");
-         }
-      
-         /* loop over waveforms */
-         cnum = 0;
-         cmdcopy = cmdreply (p);
-         if (cmdcopy == NULL) {
-            return cmdreply ("error: unable to set waveform");
-         }
-         p = strtok_r (cmdcopy, ",;", &lasts);
-         while ((p != NULL) && (cnum < 19)) {
-           /* skip blanks */
-            while (*p == ' ') {
-               p++;
-            }
-            /* determine waveform component */
-            y = NULL;
-            if (awgWaveformCmd (p, comp + cnum, &cnew, &errmsg, &y, 
-               &len, (sl / _AWG_IFO_OFS - 1) == _MAX_IFO) < 0) {
-               free (cmdcopy);
-               return errmsg;
-            }
-            cnum += cnew;
-            if (y != NULL) {
-               if ((len <= 0) || (awgSetWaveform (sl, y, len) < 0)) {
-                  free (y);
-                  free (cmdcopy);
-                  return cmdreply ("error: unable to download waveform");
-               }
-               free (y);
-            }
-            p = strtok_r (NULL, ",;", &lasts);
-         }
-         free (cmdcopy);
-      
-         /* set phase in */
-         if (awgSetPhaseIn (comp, cnum) < 0) {
-            return cmdreply ("error: illegal phase in");
-         }
-      
-         /* check if anything set */
-         if (gds_strncasecmp (cmd, "set", 3) == 0) {
-            /* stop waveforms first */
-            if (ramptime > 0) {
-               if (awgStopWaveform (sl, 2, (tainsec_t)(1E9*ramptime)) < 0) {
-                  return cmdreply ("error: unable to stop waveform");
-               }
-            }
-            else {
-               if (awgClearWaveforms (sl)) {
-                  return cmdreply ("error: unable to clear waveform");
-               }
-            }
-            if (cnum <= 0) {
-               return cmdreply ("waveform cleared");
-            }
-         }
-      	 /* now add new waveform */
-         if (cnum > 0) {
-            if (awgAddWaveform (sl, comp, cnum) < 0) {
-               return cmdreply ("error: slot not available or invalid");
-            }
-         }
-         sprintf (buf, "slot %i enabled", sl);
-         return cmdreply (buf);
-      }
-      /* gain */
-      else if (gds_strncasecmp (cmd, "gain", 4) == 0) {
-         int		n;
-         double		gain;
-         double		tramp;
-      
-         p = (char*)readSlot (cmd + 4, &sl);
-         if (p == NULL) {
-            return cmdreply ("error: invalid slot number/name");
-         }
-         if (sscanf (p, "%lf%n", &gain, &n) != 1) {
-            return cmdreply ("error: arguments for gain are 'value' 'time'");
-         }
-         p += n;
-         tramp = 1.0;
-         if (sscanf (p, "%lf", &tramp) != 1) tramp = 1.0;
-         if (awgSetGain (sl, gain, (tainsec_t)(1E9 * tramp)) < 0) {
-            return cmdreply ("error: unable to set gain");
-         }
-         sprintf (buf, "gain in slot %i is %f (ramp = %f sec)", 
-                 sl, gain, tramp);
-         return cmdreply (buf);
-      }
-      /* stop */
-      else if (gds_strncasecmp (cmd, "stop", 4) == 0) {
-         p = (char*)readSlot (cmd + 4, &sl);
-         if (p == NULL) {
-            return cmdreply ("error: invalid slot number/name");
-         }
-         if (ramptime > 0) {
-            if (awgStopWaveform (sl, 2, (tainsec_t)(1E9*ramptime)) < 0) {
-               return cmdreply ("error: unable to stop waveform");
-            }
-         }
-         else {
-            if (awgStopWaveform (sl, 0, 0)) {
-               return cmdreply ("error: unable to stop waveform");
-            }
-         }
-         sprintf (buf, "slot %i stopped", sl);
-         return cmdreply (buf);
-      }
-      /* ramp */
-      else if (gds_strncasecmp (cmd, "ramp", 4) == 0) {
-         if (sscanf (cmd + 4, "%lf", &ramptime) != 1) ramptime = 0.0;
-         sprintf (buf, "phase in/out time %f sec", ramptime);
-         return cmdreply (buf);
-      }
-      /* clear */
-      else if (gds_strncasecmp (cmd, "clear", 5) == 0) {
-         if (sscanf (cmd + 5, "%f", &id) != 1) {
-            return cmdreply ("error: arguments for clear are 'node'.'awg'");
-         }
-         else {
-            i = (int) id;
-            j = (int) (10 * (id - i));
-            if (id < 0) {
-               if (awgReset (-1) < 0) {
-                  return cmdreply ("error: reset failed");
-               }
-               return cmdreply ("reset succeeded");
-            }
-            else if ((i == _MAX_IFO) && !isDS340Alive (j)) {
-               sprintf (buf, "DS340(%i) not available", j);
-               return cmdreply (buf);
-            }
-            else if (!awgCheckInterface (i, j)) {
-               sprintf (buf, "error: node %i/awg %i not available", i, j);
-               return cmdreply (buf);
-            }
-            if (awgReset (AWG_ID (i,j)) < 0) {
-               return cmdreply ("error: reset failed");
-            }
-            return cmdreply ("reset succeeded");
-         }
-      }
-      /* filter */
-      else if (gds_strncasecmp (cmd, "filter", 6) == 0) {
-         int			n;	/* number of conv chars */
-         int			max;	/* max coeff */
-         double*		ba;	/* ba array */
-         int			len;	/* length of ba array */
-         char*			ret;	/* return string */
-      
-         /* scan slot number */
-         p = (char*) readSlot (cmd + 6, &sl);
-         if (p == NULL) {
-         /*if (sscanf (cmd + 6, "%i%n", &sl, &n) != 1) {*/
-            return cmdreply ("error: invalid slot number/name");
-         }
-         /*p = (char*)cmd + 6 + n;*/
-      	 /* get coeffcients */
-         max = strlen (p) / 2 + 10;
-         ba = calloc (max, sizeof (double));
-         for (len = 0; len < max; ++len) {
-            while (isspace ((int)*p)) ++p;
-            if (!*p) {
-               break;
-            }
-            if (!isdigit ((int)*p) && (*p != '-') && (*p != '+') && (*p != '.')) {
-               len = -1;
-               break;
-            }
-            sscanf (p, "%lf%n", ba +len, &n);
-            p += n;
-         }
-         if (awgSetFilter (sl, ba, len) < 0) {
-            ret = cmdreply ("error: filter failed");
-         }
-         else if (len == 0) {
-            ret = cmdreply ("filter reset");
-         }
-         else {
-            ret = cmdreply ("filter set");
-         }
-         free (ba);
-         return ret;
-      }
-      /* stat */
-      else if (gds_strncasecmp (cmd, "stat", 4) == 0) {
-         if (sscanf (cmd + 4, "%f", &id) != 1) {
-            return cmdreply ("error: arguments for stat are 'node'.'awg'");
-         }
-         else {
-            awgStat_t		stat;
-            char		zero;
-            i = (int) id;
-            j = (int) (10 * (id - i));
-            if (!awgCheckInterface (i, j)) {
-               sprintf (buf, "error: node %i/awg %i not available", i, j);
-               return cmdreply (buf);
-            }
-            if (sscanf (cmd + 4, "%*f %c", &zero) == 1) {
-               awgStatistics (AWG_ID (i,j), NULL);
-               return cmdreply ("statistics reset");
-            }
-            else if (awgStatistics (AWG_ID (i,j), &stat) < 0) {
-               return cmdreply ("error: no statistics available");
-            } 
-            else {
-               p = malloc (16 * 100);
-               sprintf 
-                  (p, 
-                  "Staistics of node %i/awg %i (time in ms/heartbeat)\n"
-                  "%10.0f : number of waveform processing cycles\n"
-                  "%10.3f : average time to process waveforms\n"
-                  "%10.3f : standard deviation of processing waveforms\n"
-                  "%10.3f : maximum time needed to process waveforms\n"
-                  "%10.0f : number of reflective memory writes\n"
-                  "%10.3f : average time to write to reflective memory\n"
-                  "%10.3f : standard deviation of writing to reflective memory\n"
-                  "%10.3f : maximum time needed to write to reflective memory\n"
-                  "%10.3f : spare time after writing to reflective memory\n"
-                  "%10.0f : number of late writes to reflective memory\n"
-                  "%10.0f : number of writes to the DAC\n"
-                  "%10.3f : average time to write to the DAC\n"
-                  "%10.3f : standard deviation of writing to the DAC\n"
-                  "%10.3f : maximum time needed to write to the DAC\n"
-                  "%10.0f : number of missed writes to the DAC\n",
-                  i, j, stat.pwNum, stat.pwMean/1E6, stat.pwStddev/1E6,
-                  stat.pwMax/1E6, stat.rmNum, stat.rmMean/1E6, 
-                  stat.rmStddev/1E6, stat.rmMax/1E6, stat.rmCrit/1E6, 
-                  stat.rmNumCrit, stat.dcNum, stat.dcMean/1E6, 
-                  stat.dcStddev/1E6, stat.dcMax/1E6, stat.dcNumCrit);
-               return p;
-            }
-         }
-      }
-      else {
-         return cmdreply ("error: unrecognized command\n"
-                         "use help for further information");
-      }
-   }
-
-
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* External Procedure Name: awgcmdline					*/
-/*                                                         		*/
-/* Procedure Description: command line interface			*/
-/*                                                         		*/
-/* Procedure Arguments: command string					*/
-/*                                                         		*/
-/* Procedure Returns: reply string					*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/           
-   int awgcmdline (const char* cmd)
-   {
-      char* 		p;
-      int		ret;
-   
-      p = awgCommand (cmd);
-      if (p) {
-         printf ("%s\n", p);
-      }
-      else {
-         printf ("failed\n");
-      }
-      ret = (strncmp (p, "error:", 6) == 0) ? -1 : 0;
-      free (p);
-      return ret;
-   }
diff --git a/src/gds/awgapi.h b/src/gds/awgapi.h
deleted file mode 100644
index 1d93f9dce..000000000
--- a/src/gds/awgapi.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/* Version: $Id$ */
-/*----------------------------------------------------------------------*/
-/*                                                         		*/
-/* Module Name: awgapi							*/
-/*                                                         		*/
-/* Module Description: 	API to the arbitrary waveform generator		*/
-/*									*/
-/*                                                         		*/
-/* Module Arguments: none				   		*/
-/*                                                         		*/
-/* Revision History:					   		*/
-/* Rel   Date     Programmer  	Comments				*/
-/* 0.1	 30June98 D. Sigg    	First release		   		*/
-/*                                                         		*/
-/* Documentation References:						*/
-/*	Man Pages: awgapi.html						*/
-/*	References: none						*/
-/*                                                         		*/
-/* Author Information:							*/
-/* Name          Telephone       Fax             e-mail 		*/
-/* Daniel Sigg   (509) 372-8336  (509) 372-2178  sigg_d@ligo.mit.edu	*/
-/*                                                         		*/
-/* Code Compilation and Runtime Specifications:				*/
-/*	Code Compiled on: Ultra-Enterprise, Solaris 5.6			*/
-/*	Compiler Used: sun workshop C 4.2				*/
-/*	Runtime environment: sparc/solaris				*/
-/*                                                         		*/
-/* Code Standards Conformance:						*/
-/*	Code Conforms to: LIGO standards.	OK			*/
-/*			  Lint.			TBD			*/
-/*			  ANSI			TBD			*/
-/*			  POSIX			TBD			*/
-/*									*/
-/* Known Bugs, Limitations, Caveats:					*/
-/*								 	*/
-/*									*/
-/*                                                         		*/
-/*                      -------------------                             */
-/*                                                         		*/
-/*                             LIGO					*/
-/*                                                         		*/
-/*        THE LASER INTERFEROMETER GRAVITATIONAL WAVE OBSERVATORY.	*/
-/*                                                         		*/
-/*                     (C) The LIGO Project, 1996.			*/
-/*                                                         		*/
-/*                                                         		*/
-/* California Institute of Technology			   		*/
-/* LIGO Project MS 51-33				   		*/
-/* Pasadena CA 91125					   		*/
-/*                                                         		*/
-/* Massachusetts Institute of Technology		   		*/
-/* LIGO Project MS 20B-145				   		*/
-/* Cambridge MA 01239					   		*/
-/*                                                         		*/
-/* LIGO Hanford Observatory				   		*/
-/* P.O. Box 1970 S9-02					   		*/
-/* Richland WA 99352					   		*/
-/*                                                         		*/
-/* LIGO Livingston Observatory		   				*/
-/* 19100 LIGO Lane Rd.					   		*/
-/* Livingston, LA 70754					   		*/
-/*                                                         		*/
-/*----------------------------------------------------------------------*/
-
-#ifndef _GDS_AWGAPI_H
-#define _GDS_AWGAPI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Header File List: */
-#ifndef _TAINSEC_T
-#define _TAINSEC_T
-#include <inttypes.h>
-   typedef int64_t tainsec_t;
-   typedef unsigned long taisec_t;
-#endif
-#include "awgtype.h"
-
-
-/** @name Arbitrary Waveform Generator Remote API
-    This API provides routines to remotely access the arbitrary 
-    waveform generators.
-
-    @memo Control interface for arbitrary waveform generators
-    @author Written June 1998 by Daniel Sigg
-    @see Arbitrary Waveform Generator
-    @version 0.1
-************************************************************************/
-
-/*@{*/
-
-#if 0
-/** Compiler flag for a compiling a stand-alone dynamic link library.
-
-    @author DS, June 98
-    @see Test point API
-************************************************************************/
-#define _AWG_LIB
-
-/** Compiler flag for a enabling dynamic configuration. When enabled
-    the host address and interface information of arbitrary waveform 
-    generators is queried from the network rather than read in through 
-    a file.
-
-    @author DS, June 98
-    @see Test point API
-************************************************************************/
-#undef _CONFIG_DYNAMIC
-#endif
-
-/** Installs an awg client interface. This function might be called 
-    prior of using the awg interface. If not, the first call to any of 
-    the functions in this API will call it. There is no penalty of not
-    calling awg_client explicitly. The function returns the number of
-    AWGs which can be reached through this interface.
-
-    @param void
-    @return number of AWGs if successful, <0 otherwise
-    @author DS, June 98
-************************************************************************/
-   int awg_client (void);
-
-/** Terminates an awg client interface.
-
-    @param void
-    @return void
-    @author DS, June 98
-************************************************************************/
-   void awg_cleanup (void);
-
-#ifdef _AWG_LIB
-/** Sets the excitation engine host address. This function is only 
-    available when compiling with the _AWG_LIB flag. It disables
-    the default parameter file and set the host address and rpc program
-    and version number directly. If a program number of zero is
-    specified, the default will be used. If a program version of 
-    zero is specified, the default will be used. This function must
-    be called before any other function (including awg_client).
-
-    @param ifo interferometer id (4K - 0, 2K - 1)
-    @param awg excitation engine id
-    @param hostname host name of excitation engine
-    @param prognum rpc program number
-    @param progver rpc program version
-    @return 0 if successful, <0 otherwise
-    @author DS, June 98
-************************************************************************/
-   int awgSetHostAddress (int ifo, int awg, const char* hostname, 
-                     unsigned long prognum, unsigned long progver);
-
-/** Sets the DS340 host address. This function is only 
-    available when compiling with the _AWG_LIB flag. It will disable
-    the default parameter file and set the host address and port 
-    number of the cobox directly. This function must
-    be called before any other function (including awg_client).
-
-    @param ds340 ds340 id
-    @param hostname host name of cobox controlling the DS340
-    @param port port number of the cobox
-    @return 0 if successful, <0 otherwise
-    @author DS, June 98
-************************************************************************/
-   int ds340SetHostAddress (int ds340, const char* hostname, int port);
-#endif
-
-/** Relate a channel name with a free slot in an excitation engine.
-
-    @param name channel name
-    @return slot number if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgSetChannel (const char* name);
-
-
-/** Remove a channel name from an excitation engine.
-
-    @param slot slot number
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgRemoveChannel (int slot);
-
-
-/** Ask for all valid channel names. The function needs a buffer
-    which is long enough to hold all excitation channel names
-    (space separated list). The function will return the number
-    of characters written into the names buffer. If the names buffer
-    is NULL, the function will simply return the necessary length 
-    for the result (not including the terminating 0).
- 
-
-    @param names list of channel names (return)
-    @param len length of names buffer
-    @param info 0 - names only, 1 - names and rates
-    @return number of characters if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgGetChannelNames (char* names, int len, int info);
-
-
-/** Add a waveform to an arbitrary waveform generator slot.
-
-    @param slot slot number
-    @param comp list of waveform components to be added
-    @param numComp number of components in the list
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgAddWaveform (int slot, AWG_Component* comp, int numComp);
-
-
-/** Download an arbitrary waveform to an arbitrary waveform generator 
-    slot. This function will not automatically switch on the output.
-    This requires that a component with awgArb is also added to the
-    slot. The specified frequency will be interpreted as the sampling
-    frequency.
-
-    @param slot slot number
-    @param y data points
-    @param len length of data array
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgSetWaveform (int slot, float y[], int len);
-
-
-/** Send a waveform to an arbitrary waveform generator. This routine
-    is used by the stream interface to transfer data to the front-end.
-    The return codes are as following
-    \begin{verbatim}
-     0    Data accepted
-     1    Data accepted, but there is currently not enough buffer space
-          to accept another block of data with the same length
-     2    The data block duplicates a time that was sent previously
-     3    The data block is not contiguous with the previous block
-    -1    This awg slot is not currently set up for stream data
-    -2    Invalid data block or size
-    -3    The timestamp of the data block is already past
-    -4    The timestamp of the data block is too far in the future
-    \end{verbatim}
-
-    @param slot slot number
-    @param time Start time of waveform in GPS sec
-    @param epoch Epoch of waveform
-    @param y data points
-    @param len length of data array
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgSendWaveform (int slot, taisec_t time, int epoch,
-                     float y[], int len);
-
-
-/** Stops a waveform in an arbitrary waveform generator slot. A waveform
-    can be stopped in several different ways:
-
-    \begin{verbatim}
-    0 reset
-    1 freeze
-    2 phase-out
-    \end{verbatim}
-
-    Reset will immediately stop any waveforms and reset the slot.
-    Freeze will continue to output the waveform in its current state
-    forever. Phase-out takes an additional argument which specifes 
-    a ramp down time.
-
-    There are several restrictions: (1) freeze will only work with
-    swept sine-like excitation signals, and (2) phase-out will only
-    ramp down the signal, if it is of inifinite duration.
-
-    @param slot slot number
-    @param terminate termination flag
-    @param time ramp down time
-    @param slot slot number
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgStopWaveform (int slot, int terminate, tainsec_t time);
-
-
-/** Set the overall gain of an arbitrary waveform generator slot.
-    The time argument is used to specify the ramp time. The gain is
-    ramped linearly from the old value to the new one. A negative 
-    ramp time indicates to use the previously specified one.
-
-    @param slot slot number
-    @param gain overall gain of waveforms
-    @param time ramp time
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgSetGain (int slot, double gain, tainsec_t time);
-
-
-/** Set an IIR filter in the arbitrary waveform generator. The specified
-    filter coefficients must be second order sections.
-
-    @param slot slot number
-    @param y filter data array (gain, b1, b2, a1, a2, etc.)
-    @param len length of data array
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgSetFilter (int slot, double y[], int len);
-
-
-/** Clear all waveforms from an arbitrary waveform generator slot.
-
-    @param slot slot number
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgClearWaveforms (int slot);
-
-
-/** Returns the waveforms of an arbitrary waveform generator.
-
-    @param slot slot number
-    @param comp pointer to a list of awg components to store the result
-    @param maxComp size of the result components array
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgQueryWaveforms (int slot, AWG_Component* comp, int maxComp);
-
-
-/** Reset all slots of an arbitrary waveform generator to zero. If the 
-    'id' is -1 all arbitrary waveform generators are reset. Use the 
-    macro AWG_ID to obtain the id for a specific AWG or for all AWG's
-    of a interferometer.
-
-    @param id identification of an arbitrary waveform generator
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgReset (int id);
-
-
-/** Obtains run-time statistics of an arbitrary waveform generator. Use 
-    the macro AWG_ID to obtain the id for a specific AWG of an 
-    interferometer.
-
-    @param id identification of an arbitrary waveform generator
-    @param stat statistics result
-    @return 0 if successful, <0 if not
-    @author DS, June 98
-************************************************************************/
-   int awgStatistics (int id, awgStat_t* stat);
-
-
-#if 0
-/** Returns the identification number of an arbitrary waveform generator.
-    The interferometer number has to be either 1 (4K), 2 (2K) or -1 
-    (both). If an interferometer has more than one awg, they are numbered
-    starting with 0. A -1 stands for all awg's belonging to a specific 
-    interferometer.
-
-    @param ifo interferometer number; 1 or 2
-    @param awgnum awg number; 0 and up
-    @return identification of an arbitrary waveform generator
-    @author DS, June 98
-************************************************************************/
-#define AWG_ID(ifo,awgnum)
-#endif
-
-/** Returns a string describing the current AWG configuration. The
-    caller is responsible to free the returned string!
-
-    @param id identification of an arbitrary waveform generator
-    @return configuration string if successful, NULL if not
-    @author DS, June 98
-************************************************************************/
-   char* awgShow (int id);
-
-/** ASCII command for an arbitrary waveform generator. This function 
-    interprets the specified waveform string and returns the 
-    corresponding awg components and awg points (arbitary waveforms
-    only). On error the function returns a negative value and an
-    error message if a string pointer is specified. The caller is 
-    responsible to free the memory returned by points or errmsg.
-    (In no case both are returned!) For arbitrary waveforms the caller 
-    should also specify if the waveforms are meant for a DS340.
-
-    @param cmd waveform description
-    @param comp awg components (return, maximum 2)
-    @param cnum number of awg components (return)
-    @param errmsg error message (return)
-    @param points waveform array (return)
-    @param num number of points in the waveform array
-    @param isDS340 true if stand-alone AWG
-    @return 0 if successful, <0 if not
-    @see T990013 for allowed waveforms
-    @author DS, June 98
-************************************************************************/
-   int awgWaveformCmd (const char* cmd, AWG_Component comp[], int* cnum,
-                     char** errmsg, float** points, int* num, 
-                     int isDS340);
-
-/** ASCII interface to the arbitrary waveform generators.
-
-    The function returns a string which was allocated with malloc. The
-    caller is reponsible to free this string if no longer needed.
-
-    @param cmd command string
-    @return reply string
-    @author DS, June 98
-************************************************************************/
-   char* awgCommand (const char* cmd);
-
-/** ASCII interface to the arbitrary waveform generators.
-
-    The function calls awgCommand and writes the return to stdout.
-
-    @param cmd command string
-    @return 0 if successful, <0 on error
-    @author DS, June 98
-************************************************************************/
-   int awgcmdline (const char* cmd);
-
-
-#define _AWG_IFO_OFS		1000
-#define _AWG_NUM_OFS		100
-
-#define AWG_ID(ifo,awgnum) \
-	(((ifo) == -1 ? -1 : (_AWG_IFO_OFS * (ifo + 1) + \
-	 ((awgnum) == -1 ? (-2 * _AWG_IFO_OFS * (ifo + 1)) : \
-	                   (_AWG_NUM_OFS * (awgnum))))))
-
-
-
-/*@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*_GDS_AWGAPI_H */
diff --git a/src/gds/awgtpman.c b/src/gds/awgtpman.c
index 656be9718..f7cb3b4f0 100644
--- a/src/gds/awgtpman.c
+++ b/src/gds/awgtpman.c
@@ -27,16 +27,16 @@ static char *versionId = "Version $Id$" ;
 #define _TPMAN_NAME		"tTPmgr"
 #define _AWG_NAME		"tAWGmgr"
 
-char ifo_prefix_storage[3];
-char site_prefix_storage[2];
-char archive_storage[256];
-char *ifo_prefix = ifo_prefix_storage; // G1
-char *site_prefix = site_prefix_storage; // G
-char *archive = archive_storage; // /opt/rtcds/geo/g1/target/gds/
-char site_name_lower[16]; // geo
-char ifo_prefix_lower[3];  // g1
 char myParFile[256];
 
+char archive_storage[256];
+char *archive = archive_storage;
+
+char site_prefix_storage[2];
+char *site_prefix = site_prefix_storage;
+
+char target[256];
+
 /* How many times over 16 kHz is the front-end system?
  * 2 kHz for slow models */
 int sys_freq_mult = 1;
@@ -235,90 +235,14 @@ CDS_HARDWARE cdsPciModules;
       if (run_awg) {
         nice(-20);
       }
-/*
-                                if ($::site =~ /^M/) {
-                                        $::location = "mit";
-                                } elsif ($::site =~ /^G/) {
-                                        $::location = "geo";
-                                } elsif ($::site =~ /^H/) {
-                                        $::location = "lho";
-                                } elsif ($::site =~ /^L/) {
-                                        $::location = "llo";
-                                } elsif ($::site =~ /^C/) {
-                                        $::location = "caltech";
-                                } elsif ($::site =~ /^S/) {
-                                        $::location = "stn";
-                                } elsif ($::site =~ /^K/) {
-                                        $::location = "kamioka";
-                                } elsif ($::site =~ /^X/) {
-                                        $::location = "tst";
-                                }
-
-*/
-      char st[3]; st[0] = system_name[0]; st[1] = system_name[1]; st[2] = 0;
-      switch(st[0]) {
-	case 'm':
-		strcpy(site_prefix_storage, "M");
-		strcpy(site_name_lower, "mit");
-		break;
-	case 'g':
-		strcpy(site_prefix_storage, "G");
-		strcpy(site_name_lower, "geo");
-		break;
-	case 'h':
-		strcpy(site_prefix_storage, "H");
-		strcpy(site_name_lower, "lho");
-		break;
-	case 'l':
-		strcpy(site_prefix_storage, "L");
-		strcpy(site_name_lower, "llo");
-		break;
-	case 'c':
-		strcpy(site_prefix_storage, "C");
-		strcpy(site_name_lower, "caltech");
-		break;
-	case 's':
-		strcpy(site_prefix_storage, "S");
-		strcpy(site_name_lower, "stn");
-		break;
-	case 'k':
-		strcpy(site_prefix_storage, "K");
-		strcpy(site_name_lower, "kamioka");
-		break;
-	case 'i':
-		strcpy(site_prefix_storage, "I");
-		strcpy(site_name_lower, "indigo");
-		break;
-	case 'a':
-		strcpy(site_prefix_storage, "A");
-		strcpy(site_name_lower, "anu");
-		break;
-	case 'u':
-		strcpy(site_prefix_storage, "U");
-		strcpy(site_name_lower, "uwa");
-		break;
-	case 'w':
-		strcpy(site_prefix_storage, "W");
-		strcpy(site_name_lower, "cardiff");
-		break;
-	case 'b':
-		strcpy(site_prefix_storage, "B");
-		strcpy(site_name_lower, "bham");
-		break;
-	case 'x':
-		strcpy(site_prefix_storage, "X");
-		strcpy(site_name_lower, "tst");
-		break;
-	default:
-		fprintf(stderr, "Unknown location: %s\n",  st);
-		exit(1);
-		break;
-      }
-      strcpy(ifo_prefix_lower, st);
-      strcpy(ifo_prefix_storage, st);
-      ifo_prefix_storage[0] = toupper(ifo_prefix_storage[0]);
-      sprintf(archive_storage, "/opt/rtcds/%s/%s/target/gds", site_name_lower, ifo_prefix_lower);
-      sprintf(myParFile, "%s/param/tpchn_%s.par", archive, system_name);
+
+
+      // site_prefix takes on the first letter of the system name (as upper case)
+      site_prefix_storage[1] = 0;
+      site_prefix_storage[0] = toupper(system_name[0]);
+
+      snprintf(target, sizeof(target),"/opt/rtcds/%s/%s", tolower(getenv("SITE")), tolower(getenv("IFO")));
+      snprintf(myParFile, sizeof(myParFile),"%s/target/gds/param/tpchn_%s.par", target, system_name);
       printf("My config file is %s\n", myParFile);
 
       printf("IPC at 0x%p\n", rmBoardAddress(2));
diff --git a/src/gds/awgtype.h b/src/gds/awgtype.h
index 631e31a5b..0fff2a3ed 100644
--- a/src/gds/awgtype.h
+++ b/src/gds/awgtype.h
@@ -80,7 +80,7 @@ extern "C" {
 /**@name Arbitrary Waveform Generator Type Definitions
    This module defines the constants and types used by the arbitrary 
    waveform generators. Waveform parameters are configured and 
-   controlled through routines defined in "awg.h" and "awgapi.h".
+   controlled through routines defined in "awg.h".
    
    Waveforms are specified by sums of components.
    Valid component configurations are.
diff --git a/src/gds/excitation.cc b/src/gds/excitation.cc
index 049b8a511..4a1aa1032 100644
--- a/src/gds/excitation.cc
+++ b/src/gds/excitation.cc
@@ -16,7 +16,6 @@ static const char *versionId = "Version $Id$" ;
 #include "dtt/testpointinfo.h"
 #include "dtt/rmorg.h"
 #include "dtt/awgfunc.h"
-#include "dtt/awgapi.h"
 #include "dtt/epics.h"
 #include "dtt/gdsdatum.hh"
 #include "dtt/testpointmgr.hh"
diff --git a/src/gds/ezcademod.cc b/src/gds/ezcademod.cc
index ad1025c5a..5ac312673 100644
--- a/src/gds/ezcademod.cc
+++ b/src/gds/ezcademod.cc
@@ -86,7 +86,6 @@ static const char *versionId = "Version $Id$" ;
 #include <iomanip>
 #include "tconv.h"
 #include "dtt/testpoint.h"
-#include "dtt/awgapi.h"
 #include "dtt/awgtype.h"
 #include "DAQSocket.hh"
 
diff --git a/src/gds/gdschannel.c b/src/gds/gdschannel.c
index 3f87bda9e..072070cf8 100644
--- a/src/gds/gdschannel.c
+++ b/src/gds/gdschannel.c
@@ -1025,60 +1025,11 @@ static char *versionId = "Version $Id$" ;
       if (chninfosize > _CHNLIST_SIZE) {
          resizeChnInfo (_CHNLIST_SIZE);
       }
-   
-      /* read in channel information */
-   #if (_CHANNEL_DB == _CHN_DB_PARAM) 
-   #if !defined (_CONFIG_DYNAMIC)
-      if (readChnFile (PRM_FILE) <= -10) {
-         char		msg[256];
-         MUTEX_RELEASE (chnmux);
-         sprintf (msg, "Unable to load channel information from %s\n", 
-                 PRM_FILE);
-      #ifdef _AWG_LIB
-         gdsWarningMessage (msg);
-      #else
-         gdsError (GDS_ERR_MISSING, msg);
-      #endif
-         return 0;
-      }
-   #endif
-   #else /* (_CHANNEL_DB == _CHN_DB_PARAM) */
-   #ifndef OS_VXWORKS
-      /* get NDS parameters */
-   #if !defined (_CONFIG_DYNAMIC)
-      if (!daqSetUser) {
-         strcpy (daqServer, DAQD_SERVER);
-         loadStringParam (PRM_FILE2, SEC_SERVER, PRM_SERVERNAME, daqServer);
-         daqPort = DAQD_PORT;
-         loadIntParam (PRM_FILE2, SEC_SERVER, PRM_SERVERPORT, &daqPort);
-      }
-   #endif
-      /* read from NDS */
-      ret = readChnDAQServer (daqServer, daqPort);
-      if (ret < 0) {
-         char		msg[256];
-         MUTEX_RELEASE (chnmux);
-         sprintf (msg, "Unable to load channel information from "
-                 "%s / %i\n", daqServer, daqPort);
-      #ifdef _AWG_LIB
-         gdsWarningMessage (msg);
-      #else
-         gdsError (GDS_ERR_MISSING, msg);
-      #endif
-         return 0;
-      }
-      tpLoaded = (ret > 0);
-   #endif /* OS_VXWORKS */
-   #endif /* (_CHANNEL_DB == _CHN_DB_PARAM) */
-   
+
       /* sort entries */
       qsort ((void*) chninfo, chninfonum, sizeof (gdsChnInfo_t), 
             (int (*) (const void*, const void*)) gds_strcasecmp);
-   
-      /* if (tpLoaded) {
-         MUTEX_RELEASE (chnmux);
-         return 0;
-      } */
+
    
       /* read in test point information */
    #ifndef _NO_TESTPOINTS
@@ -1194,20 +1145,6 @@ static char *versionId = "Version $Id$" ;
                return -1;
       }
 
-#if 0
-      {
-         int		ifo;
-         char		filename[1024];
-         for (ifo = 0; ifo < TP_MAXIFO; ifo++) {
-            sprintf (filename, TP_FILE, ifo + 1);
-            if (readChnFile (filename) <= -10) {
-               MUTEX_RELEASE (chnmux);
-               return -1;
-            }
-         }
-      }
-#endif
-
    #endif
       /* sort entries */
       qsort ((void*) chninfo, chninfonum, sizeof (gdsChnInfo_t), 
-- 
GitLab