*** empty log message ***

This commit is contained in:
cvs
2000-03-31 13:05:24 +00:00
parent 0fee04fa14
commit d02a81400f
7 changed files with 189 additions and 1906 deletions

View File

@ -4,12 +4,11 @@
# Markus Zolliker, March 2000
#--------------------------------------------------------------------------
OBJ= tecc.o client.o coc.o errhdl.o str_util.o str_buf.o \
server.o lsc.o serutil.o logfile.o dlog.o \
asynsrv_utility.o strjoin.o geterrno.o
server.o lsc.o serutil.o logfile.o dlog.o
#------------ for DigitalUnix
CC=cc
CFLAGS= -std1 -g -c -warnprotos -I.
CFLAGS= -std1 -g -c -warnprotos -I. -I../hardsup
.c.o:
$(CC) $(CFLAGS) $*.c
@ -19,7 +18,7 @@ tecs: $(OBJ)
ar cr libtecsl.a $(OBJ)
ranlib libtecsl.a
- rm TecsServer
cc -o TecsServer -g tecs.c -lm -L. -ltecsl
cc -o TecsServer -g tecs.c -lm -L. -ltecsl -L../hardsup -lhlib
- rm tcli
cc -o tcli -g tcli.c -lm -L. -ltecsl

View File

@ -1,50 +0,0 @@
#ifndef _asynsrv_def_
#define _asynsrv_def_
/*------------------------------------------------ AsynSrv_DEF.H Ident V01M
*/
#ifndef OffsetOf
#define OffsetOf(type, identifier) ((size_t)(&((type*) NULL)->identifier))
#endif
#ifndef _asynsrv_errcodes_
#define _asynsrv_errcodes_
#include <asynsrv_errcodes.h>
#endif
#define AsynSrv_MAX_LINK 8
/*
** Structures needed by AsynSrv_Utility.
*/
struct AsynSrv__info {
int skt; /* The socket number of the connection */
char host[20]; /* The name of RS-232-C server */
int port; /* The TCP/IP port number of server */
int chan; /* The RS-232-C channel number on server */
int msg_id;
int protocol_code; /* Flag to identify the server's protocol level */
char protocol_id[4]; /* ASCII version of server's protocol level */
int cmnd_hdr_len; /* Header length for command strings */
char cmnd_fmt[8]; /* "sprintf" format for cmnd header conversion */
int rply_hdr_len; /* Header length for response strings */
char rply_fmt[8]; /* "sscanf" format for rply header conversion */
char chan_char[4]; /* ASCII encoded version of chan */
char tmo[4]; /* ASCII encoded time-out (deci-secs) */
char eot[4]; /* Expected terminators */
int max_replies; /* Binary version of #replies in response */
int n_replies; /* # of last response returned to caller */
void (*idleHandler)(int,int); /* MZ. handler called when waiting on a response */
};
struct AsynSrv_HostPortSkt {
char host[30];
int port;
int skt;
int protocol_code;
char protocol_id[4];
int cmnd_hdr_len;
int rply_hdr_len;
int usage_cnt;
int status;
};
/*------------------------------------------------ End of AsynSrv_DEF.H --*/
#endif /* _asynsrv_def_ */

File diff suppressed because it is too large Load Diff

View File

@ -1,97 +0,0 @@
#define ident "1B01"
#ifdef VAXC
#module GetErrno ident
#endif
#ifdef __DECC
#pragma module GetErrno ident
#pragma nostandard
#endif
/*
** +--------------------------------------------------------------+
** | Paul Scherrer Institute |
** | Computing Section |
** | |
** | This software may be used freely by non-profit organizations.|
** | It may be copied provided that the name of P.S.I. and of the |
** | author is included. Neither P.S.I. nor the author assume any |
** | responsibility for the use of this software outside of P.S.I.|
** +--------------------------------------------------------------+
**
** Module Name . . . . . . . . : [...LIB.SINQ]GETERRNO.C
**
** Author . . . . . . . . . . : D. Maden
** Date of creation . . . . . . : Nov 1995
**
** To compile this module, use:
$ import tasmad
$ define/group sinq_c_tlb mad_lib:sinq_c.tlb
$ cc /debug /noopt /obj=[]GetErrno -
tasmad_disk:[mad.lib.sinq]GetErrno +
sinq_c_tlb/lib
** To include this module in SINQ.OLB, use:
$ import tasmad
$ define/group sinq_c_tlb mad_lib:sinq_c.tlb
$
$ define/group sinq_olb mad_lib:sinq_dbg.olb
$ @tasmad_disk:[mad.lib.sinq]sinq_olb GetErrno debug
$
$ define/group sinq_olb mad_lib:sinq.olb
$ @tasmad_disk:[mad.lib.sinq]sinq_olb GetErrno
**
** Updates:
** 1A01 2-Nov-1995 DM. Initial version.
** 1B01 21-Mar-1996 DM. Move from DELTAT.OLB to SINQ.OLB.
**============================================================================
** The following entry points are included:
**
#include <sinq_prototypes.h>
void GetErrno (int *his_errno, int *his_vaxc_errno)
** --------
** Input Args:
** none
** Output Args:
** his_errno - value of "errno".
** his_vaxc_errno - on VMS systems only, value of "vaxc$errno". Otherwise
** set to 1.
** Modified Args:
** none
** Return status:
** none
** Global variables modified:
** none
** Description:
** GetErrno returns a copy of the universal error variable "errno" (and,
** on VMS systems, vaxc$errno) to a local variable supplied by the user.
** This can occasionally be useful when debugging since the debugger on
** VMS can't easily examine them.
**============================================================================
** Global Definitions
*/
#ifdef VAXC
#include errno
#else
#include <errno.h>
#endif
/*--------------------------------------------------------------------------
** Global Variables
*/
/*--------------------------------------------------------------------------
** GetErrno: Make copies of errno and vaxc$errno for debug.
*/
void GetErrno (int *his_errno, int *his_vaxc_errno) {
/* ========
*/
*his_errno = errno; /* Make copy of errno */
#ifdef __VMS
*his_vaxc_errno = vaxc$errno; /* Make copy of vaxc$errno */
#else
*his_vaxc_errno = 1;
#endif
return;
}
/*------------------------------------------------- End of GETERRNO.C =======*/

View File

@ -1,43 +0,0 @@
/* ---------------------------------------------------------------------*/
int AsynSrv_Close (
struct AsynSrv__info *asyn_info,
int force_flag);
int AsynSrv_Config (
struct AsynSrv__info *asyn_info,
...);
int AsynSrv_ConfigDflt (
char *par_id,
...);
void AsynSrv_ErrInfo (
char **entry_txt,
int *errcode,
int *my_errno,
int *vaxc_errno);
char *AsynSrv_GetReply (
struct AsynSrv__info *asyn_info,
struct RS__RespStruct *rcve_buff,
char *last_rply);
int AsynSrv_Open (
struct AsynSrv__info *asyn_info);
int AsynSrv_SendCmnds (
struct AsynSrv__info *asyn_info,
struct RS__MsgStruct *send_buff,
struct RS__RespStruct *rcve_buff,
...);
int AsynSrv_SendCmndsBig (
struct AsynSrv__info *asyn_info,
struct RS__MsgStruct *send_buff,
int send_buff_size,
struct RS__RespStruct *rcve_buff,
int rcve_buff_size,
...);
void GetErrno (
int *his_errno,
int *his_vaxc_errno);
char *StrJoin (
char *result,
int result_size,
char *str_a,
char *str_b);

186
tecs/str_buf.c Normal file
View File

@ -0,0 +1,186 @@
#include <math.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include "errhdl.h"
#include "str_util.h"
#include "str_buf.h"
char *str_nget_str(Str_Buf *buf, char *result, int reslen)
{ char *b, *f, *e, quote;
int res, l, ll;
if (buf->rdpos < 0 || buf->rdpos >= buf->dsize) ERR_MSG("buffer corrupt");
b=buf->buf + buf->rdpos;
if (*b=='"' || *b=='\'') { /* take string within quotes (single or double) */
quote=*b; b++;
f=strchr(b, quote);
if (f==NULL) ERR_MSG("missing '""'");
l=f-b;
e=strchr(f+1, buf->sep);
if (e==NULL) {
buf->rdpos = f - buf->buf + 1 + strlen(f+1);
} else {
buf->rdpos = e - buf->buf + 1;
}
} else {
f=strchr(b, buf->sep);
if (f==NULL) {
l=strlen(b);
f=b+l;
buf->rdpos+=l;
} else {
l=f-b;
buf->rdpos+=l+1;
}
}
if (result==NULL) {
*f='\0';
return(b);
} else {
if (l>=reslen) ERR_MSG("result too short");
strncpy(result, b, l);
result[l]='\0';
return(result);
}
OnError:
buf->rdpos=-1;
return(NULL);
}
int str_get_int(Str_Buf *buf, int *res)
{ char num[32];
int i;
ERR_P(str_get_str(buf, num));
i=sscanf(num, "%d", res);
if (i==0) ERR_MSG("illegal number");
return(0);
OnError:
buf->rdpos=-1;
return(0);
}
int str_get_float(Str_Buf *buf, float *res)
{ char num[32];
int i;
ERR_P(str_get_str(buf, num));
i=sscanf(num, "%f", res);
if (i==0) ERR_MSG("illegal number");
return(0);
OnError:
buf->rdpos=-1;
return(-1);
}
int str_get_end(Str_Buf *buf)
{
if (buf->rdpos < 0 || buf->rdpos >= buf->dsize) ERR_MSG("buffer corrupt");
if (buf->rdpos != buf->wrpos) ERR_MSG("superflous content in buffer");
return(0);
OnError:
return(-1);
}
int str_put_str(Str_Buf *buf, const char *str)
{ int l, pos;
char quote;
pos=buf->wrpos;
if (pos < 0 || pos >= buf->dsize) ERR_MSG("buffer corrupt");
l=strlen(str);
quote='\0';
if (buf->sep>STR_NOSEPARATOR) {
if (strchr(str, buf->sep)!=NULL) {
if (strchr(str, '"')==NULL) {
quote='"'; l+=2;
} else if (strchr(str, '\'')==NULL) {
quote='\''; l+=2;
} else {
ERR_MSG("str must not contain separator and both kind of quotes");
}
}
}
if (pos+l >= buf->dsize) ERR_MSG("buffer too short");
if (quote!='\0') {
buf->buf[pos]=quote; pos++;
strcpy(buf->buf + pos, str);
buf->buf[pos]=quote; pos++;
} else {
strcpy(buf->buf + pos, str);
}
pos+=l;
if (buf->sep!=STR_NOSEPARATOR) {
buf->buf[pos]=buf->sep;
pos++;
} else {
buf->buf[pos]='\0';
}
buf->wrpos=pos;
return(0);
OnError:
buf->wrpos=-1;
return(-1);
}
int str_put_int(Str_Buf *buf, int val)
{ char num[32];
sprintf(num, "%d", val);
ERR_I(str_put_str(buf, num));
return(0);
OnError:
return(-1);
}
int str_put_float(Str_Buf *buf, float val)
{ char num[32];
sprintf(num, "%f", val);
ERR_I(str_put_str(buf, num));
return(0);
OnError:
return(-1);
}
void str_get_start(Str_Buf *buf)
{ buf->rdpos=0;
}
void str_put_start(Str_Buf *buf)
{ buf->rdpos=0;
buf->wrpos=0;
}
Str_Buf *str_create_buf(size_t size, char separator)
{ Str_Buf *buf;
ERR_P(buf=malloc(sizeof(*buf)));
ERR_P(buf->buf=malloc(size));
buf->dsize=size;
buf->sep=separator;
buf->wrpos=0;
buf->rdpos=0;
return(buf);
OnError:
return(NULL);
}
void str_link_buf(Str_Buf *buf, char *str, int size, char separator) {
buf->buf=str;
buf->rdpos=0;
if (size==0) {
buf->wrpos=strlen(str);
buf->dsize=buf->wrpos+1;
} else {
buf->wrpos=0;
buf->dsize=size;
}
buf->sep=separator;
}
void str_free_buf(Str_Buf *buf)
{ free(buf->buf);
free(buf);
}

View File

@ -1,142 +0,0 @@
#define ident "1B03"
#ifdef VAXC
#module StrJoin ident
#endif
#ifdef __DECC
#pragma module StrJoin ident
#endif
/*
** +--------------------------------------------------------------+
** | Paul Scherrer Institute |
** | Department ASQ |
** | |
** | This software may be used freely by non-profit organizations.|
** | It may be copied provided that the name of P.S.I. and of the |
** | author is included. Neither P.S.I. nor the author assume any |
** | responsibility for the use of this software outside of P.S.I.|
** +--------------------------------------------------------------+
**
** Module Name . . . . . . . . : [...LIB.SINQ]STRJOIN.C
**
** Author . . . . . . . . . . : D. Maden
** Date of creation . . . . . . : Nov 1995
**
** To compile this module, use:
$ import tasmad
$ define/group sinq_c_tlb mad_lib:sinq_c.tlb
$ cc /debug /noopt /obj=[]StrEdit -
tasmad_disk:[mad.lib.sinq]StrEdit +
sinq_c_tlb/lib
** To include this module in SINQ.OLB, use:
$ import tasmad
$ define/group sinq_c_tlb mad_lib:sinq_c.tlb
$
$ define/group sinq_olb mad_lib:sinq_dbg.olb
$ @tasmad_disk:[mad.lib.sinq]sinq_olb StrEdit debug
$
$ define/group sinq_olb mad_lib:sinq.olb
$ @tasmad_disk:[mad.lib.sinq]sinq_olb StrEdit
**
** Updates:
** 1A01 2-Nov-1995 DM. Initial version.
** 1B01 21-Mar-1996 DM. Move from DELTAT.OLB to SINQ.OLB.
** 1B03 28-May-1997 DM. Allow result string to be either of source
** strings.
**============================================================================
** The following entry points are included in this module:
**
**-------------------------------------------------------------------------
** #include <sinq_prototypes.h>
**
** char *StrJoin (&result, result_size, &str_a, &str_b)
** -------
** Input Args:
** int result_size - max size of "result". The resultant string will
** have a max length of (result_size - 1) to allow
** for the zero terminator
** char *str_a - Pointer to first string to be joined.
** char *str_b - Pointer to second string to be joined.
** Output Args:
** char *result - Pointer to resulting string.
** Modified Args:
** none
** Return value:
** Pointer to resulting string.
** Global variables modified:
** none
** Routines called:
** None
** Description:
** The routine joins 2 strings, checking for total string length and
** ensuring the result will be zero terminated. The "result" arg may be
** the same as "str_a" or "str_b".
**-------------------------------------------------------------------------
** Global Definitions
*/
#include <string.h>
#define NIL '\0'
/*
**====================================================================
*/
/*
**====================================================================
** StrJoin - join 2 strings.
** Note: strncat is used exclusively rather than
** strncpy to be sure result is always
** null terminated.
*/
char *StrJoin (
/* =======
*/ char *result,
int result_size,
char *str_a,
char *str_b) {
int i, size, size_a, size_b;
size = result_size - 1;
if (size < 0) return result;
if (result == str_a) { /* Are the result and str_a the same? */
size_a = strlen (str_a); /* Yes */
if (size_a > size) { /* Check sizes anyway. */
result[size] = NIL; /* Truncate str_a. No room for str_b! */
}else {
size = size - strlen (result); /* And append str_b */
if (size > 0) {
strncat (result, str_b, size);
}
}
}else if (result == str_b) { /* Are the result and str_b the same? */
size_a = strlen (str_a); /* Yes, this is a bit complicated! */
size_b = strlen (str_b);
if (size_a >= size) { /* If str_a completely fills result, .. */
result[0] = NIL; /* .. then just copy in str_a */
strncat (result, str_a, size);
}else {
/*
** Otherwise, str_b must first be moved to
** make room for str_a and then str_a must
** be put at the front of the result.
*/
if ((size_a + size_b) > size) size_b = size - size_a;
result[size_a+size_b] = NIL;
for (i = (size_b-1); i >= 0; i--) {
result[size_a+i] = str_b[i];
}
memcpy (result, str_a, size_a);
}
}else { /* Result is neither str_a nor str_b so .. */
result[0] = NIL; /* .. str_a needs to be copied */
strncat (result, str_a, size);
size = size - strlen (result); /* And str_a appended */
if (size > 0) strncat (result, str_b, size);
}
return result;
}
/*-------------------------------------------------- End of STRJOIN.C =======*/