#include "errhdl.h" #include "tecc.h" static char device[80], command[80]; static int quit; static float tempX, tempP, tempC; pTecsClient TeccInit(char *startcmd, int port) { CocConn *conn; ERR_SP(conn=(CocConn *)malloc(sizeof(*conn))); ERR_I(CocInitClient(conn, "", port, "#rwacs", 0, startcmd)); CocDefFlt(tempX, CocRD); CocDefFlt(tempP, CocRD); CocDefFlt(tempC, CocWR); CocDefStr(device, CocWR); CocDefInt(quit, CocWR); CocDefCmd(command); return((pTecsClient)conn); OnError: return(NULL); } int TeccSetDev(pTecsClient conn, char *dev) { str_copy(device, dev); ERR_I(CocCmd((CocConn *)conn, "[device]")); return(0); OnError: return(-1); } char *TeccGetDev(pTecsClient conn) { ERR_I(CocCmd((CocConn *)conn, "device")); return(device); OnError: return(NULL); } int TeccGet3(pTecsClient conn, float temp[3]) { ERR_I(CocCmd((CocConn *)conn, "tempC,tempX,tempP")); temp[0]=tempC; temp[1]=tempX; temp[2]=tempP; return(0); OnError: return(-1); } int TeccGet(pTecsClient conn, float *temp) { float t[3]; ERR_I(TeccGet3(conn, t)); *temp=t[2]; return(0); OnError: return(-1); } int TeccSet(pTecsClient conn, float temp) { tempC=temp; ERR_I(CocCmd((CocConn *)conn, "[tempC]")); return(0); OnError: return(-1); } int TeccSend(pTecsClient conn, char *cmd, char *reply, int replyLen) { char *res; int cnt; str_copy(command, cmd); ERR_I(CocCmd((CocConn *)conn, "[$]")); cnt=40; util_delay(100); while (cnt>0) { ERR_I(CocCmd((CocConn *)conn, "$")); if (command[0]!='\0') { str_ncpy(reply, command, replyLen); return(0); } util_delay(250); cnt--; } str_ncpy(reply, "", replyLen); return(0); OnError: return(-1); } int TeccQuitServer(pTecsClient conn) { quit=1; ERR_I(CocCmd((CocConn *)conn, "quit")); return(0); OnError: return(-1); } void TeccClose(pTecsClient conn) { CocCloseClient((CocConn *)conn); free(conn); } #ifdef __VMS int TeccSetDevVms(pTecsClient conn, char **dev) { int l; l=*(short *)dev; if (l>=sizeof(device)) l=sizeof(device)-1; strncpy(device, dev[1], l); while (l>0 && device[l-1]==' ') l--; /* trim */ device[l]='\0'; ERR_I(CocCmd((CocConn *)conn, "[device]")); return(0); OnError: return(-1); } int TeccGetDevVms(pTecsClient conn, char **dev) { int l, ld; ERR_I(CocCmd((CocConn *)conn, "device")); ld=strlen(device); l=*(short *)dev; if (ld>=l) ld=l; strncpy(dev[1], device, ld); return(ld); OnError: return(-1); } int TeccSendVms(pTecsClient conn, char **cmd, char **reply) { int l, lr; char cbuf[80], rbuf[80]; l=*(short *)cmd; if (l>=sizeof(cbuf)) l=sizeof(cbuf)-1; strncpy(cbuf, cmd[1], l); while (l>0 && cbuf[l-1]==' ') l--; /* trim */ cbuf[l]='\0'; ERR_I(TeccSend(conn, cbuf, rbuf, sizeof(rbuf))); lr=strlen(rbuf); l=*(short *)reply; if (lr>=l) lr=l; strncpy(reply[1], rbuf, lr); return(lr); OnError: return(-1); } #endif