1 saw 1.1 /*-----------------------------------------------------------------------------
2 * Copyright (c) 1993 Southeastern Universities Research Association,
3 * Continuous Electron Beam Accelerator Facility
4 *
5 * This software was developed under a United States Government license
6 * described in the NOTICE file included as part of this distribution.
7 *
8 * Stephen A. Wood, 12000 Jefferson Ave., Newport News, VA 23606
9 * Email: saw@cebaf.gov Tel: (804) 249-7367 Fax: (804) 249-5800
10 *-----------------------------------------------------------------------------
11 *
12 * Description:
13 * Special test and histogram handlers for RPC services.
14 *
15 * Author: Stephen Wood, CEBAF Hall C
16 *
17 * Revision History:
18 * $Log: thHandlers.c,v $
|
38 saw 1.1 *
39 * Revision 1.4 1995/01/09 15:41:11 saw
40 * Change "linux" ifdef's to NOHBOOK.
41 *
42 * Revision 1.3 1994/10/16 21:42:21 saw
43 * Change an include file name from daVarServ.h daVarHandlers.h
44 *
45 * Revision 1.2 1993/08/12 14:57:39 saw
46 * Add #include <rpc/rpc.h>
47 *
48 * Revision 1.1 1993/05/10 21:06:46 saw
49 * Initial revision
50 *
51 */
52 #include <string.h>
53 #include <rpc/rpc.h>
54
55 #include "daVar.h"
56 #include "daVarRpc.h"
57 #include "daVarHandlers.h"
58 #include "th.h"
59 saw 1.1 #include "thInternal.h"
60
61 #ifndef NOHBOOK
62 #include "hbook.h"
63 #endif
64
65 int thLastIdRhandled;
66
67 daVarStatus thWHandler(char *name,daVarStruct *varclass,any *setval)
68 /* The write handler used by block.test, block.hist and block.parm */
69 {
70 daVarStruct *varp;
71 char *attribute;
72 daVarStatus status;
73 int index;
74
75 status = daVarAttributeFind(name, varclass, &varp, &attribute, &index);
76 if(status == S_SUCCESS) {
77 status = daVarRegWatr(varp, attribute, index, setval);
78 if(strcasecmp(attribute,DAVAR_TITLE) == 0 && status == S_SUCCESS){
79 status = ((daVarStatus (*)()) varclass->opaque)(varp);
80 saw 1.1 }
81 }
82 return(status);
83 }
84 daVarStatus thRHandler(char *name, daVarStruct *varclass, any *retval)
85 /* The default Read handler */
86 {
87 daVarStruct *varp;
88 char *attribute;
89 daVarStatus status;
90 int index;
91
92 status = daVarAttributeFind(name, varclass, &varp, &attribute, &index);
93 status = daVarRegRatr(varp, attribute, index, retval);
94 /* scaler attribute a synonym for the value which holds the block counter */
95 if(status == S_SUCCESS) {
96 if(strcasecmp(attribute,DAVAR_RATR) == 0){
97 retval->any_u.s = realloc(retval->any_u.s,strlen(retval->any_u.s)
98 +strlen(TH_SCALER) + 2);
99 strcat(retval->any_u.s,TH_SCALER);
100 strcat(retval->any_u.s,"\n");
101 saw 1.1 }
102 } else {
103 if(strcasecmp(attribute,TH_SCALER) == 0){
104 retval->valtype = DAVARINT_RPC;
105 retval->any_u.i.i_len = 1;
106 retval->any_u.i.i_val = (int *) malloc(sizeof(int));
107 retval->any_u.i.i_val[0] = ((DAINT *)varp->varptr)[0];
108 }
109 }
110 return(status);
111 }
112
113 #ifndef NOHBOOK
114 void thHistZeroLastId()
115 {
116 thLastIdRhandled = 9999999;
117 return;
118 }
|
121 saw 1.1 {
122 daVarStruct *varp;
123 char *attribute;
124 daVarStatus status;
125 int index;
126 static int NX,NY,NWT,LOC ; static float XMI,XMA,YMI,YMA;
127 /* thHistOpaque *hopq;*/
128
129 status = daVarAttributeFind(name, varclass, &varp, &attribute, &index);
130 status = daVarRegRatr(varp, attribute, index, retval);
131 if(status == S_SUCCESS) {
132 if(strcasecmp(attribute,DAVAR_RATR) == 0){
133 retval->any_u.s = realloc(retval->any_u.s,strlen(retval->any_u.s)
134 + strlen(TH_ND) + strlen(TH_NX)
135 + strlen(TH_NY) + strlen(TH_XMI)
136 + strlen(TH_XMA) + strlen(TH_YMI)
137 + strlen(TH_YMA) + strlen(TH_CONTEN) + 9);
138 strcat(retval->any_u.s,TH_ND); strcat(retval->any_u.s,"\n");
139 strcat(retval->any_u.s,TH_NX); strcat(retval->any_u.s,"\n");
140 strcat(retval->any_u.s,TH_NY); strcat(retval->any_u.s,"\n");
141 strcat(retval->any_u.s,TH_XMI); strcat(retval->any_u.s,"\n");
142 saw 1.1 strcat(retval->any_u.s,TH_XMA); strcat(retval->any_u.s,"\n");
143 strcat(retval->any_u.s,TH_YMI); strcat(retval->any_u.s,"\n");
144 strcat(retval->any_u.s,TH_YMA); strcat(retval->any_u.s,"\n");
145 strcat(retval->any_u.s,TH_CONTEN); strcat(retval->any_u.s,"\n");
146 }
147 } else {
148 char chtitle[80];
149
150 retval->valtype = DAVARERROR_RPC;
151 retval->any_u.error = S_DAVAR_UNKATTR;
152 if(thLastIdRhandled != *((DAINT *) varp->varptr)) {
153 thLastIdRhandled = *((DAINT *) varp->varptr);
154 HGIVE(*((DAINT *) varp->varptr),chtitle,NX,XMI,XMA,NY,YMI,YMA
155 ,NWT,LOC);
156 }
157 if(strcasecmp(attribute,TH_ND) == 0){
158 retval->valtype = DAVARINT_RPC;
159 retval->any_u.i.i_len = 1;
160 retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int));
161 retval->any_u.i.i_val[0] = (NY == 0 ? 1 : 2);
162 } else if(strcasecmp(attribute,TH_NX) == 0){
163 saw 1.1 retval->valtype = DAVARINT_RPC;
164 retval->any_u.i.i_len = 1;
165 retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int));
166 retval->any_u.i.i_val[0] = NX;
167 } else if(strcasecmp(attribute,TH_NY) == 0){
168 retval->valtype = DAVARINT_RPC;
169 retval->any_u.i.i_len = 1;
170 retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int));
171 retval->any_u.i.i_val[0] = NY;
172 } else if(strcasecmp(attribute,TH_XMI) == 0){
173 retval->valtype = DAVARFLOAT_RPC;
174 retval->any_u.r.r_len = 1;
175 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
176 retval->any_u.r.r_val[0] = XMI;
177 } else if(strcasecmp(attribute,TH_XMA) == 0){
178 retval->valtype = DAVARFLOAT_RPC;
179 retval->any_u.r.r_len = 1;
180 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
181 retval->any_u.r.r_val[0] = XMA;
182 } else if(strcasecmp(attribute,TH_YMI) == 0){
183 retval->valtype = DAVARFLOAT_RPC;
184 saw 1.1 retval->any_u.r.r_len = 1;
185 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
186 retval->any_u.r.r_val[0] = YMI;
187 } else if(strcasecmp(attribute,TH_YMA) == 0){
188 retval->valtype = DAVARFLOAT_RPC;
189 retval->any_u.r.r_len = 1;
190 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
191 retval->any_u.r.r_val[0] = YMA;
192 } else if(strcasecmp(attribute,TH_CONTEN) == 0){
193 int size;
194 retval->valtype = DAVARFLOAT_RPC;
195 size = NX;
196 if(NY != 0) size *= NY;
197 retval->any_u.r.r_len = size;
198 retval->any_u.r.r_val = (float *)malloc(size*sizeof(float));
|