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 $
|
32 saw 1.1 *
33 * Revision 1.4 1995/01/09 15:41:11 saw
34 * Change "linux" ifdef's to NOHBOOK.
35 *
36 * Revision 1.3 1994/10/16 21:42:21 saw
37 * Change an include file name from daVarServ.h daVarHandlers.h
38 *
39 * Revision 1.2 1993/08/12 14:57:39 saw
40 * Add #include <rpc/rpc.h>
41 *
42 * Revision 1.1 1993/05/10 21:06:46 saw
43 * Initial revision
44 *
45 */
46 #include <string.h>
47 #include <rpc/rpc.h>
48
49 #include "daVar.h"
50 #include "daVarRpc.h"
51 #include "daVarHandlers.h"
52 #include "th.h"
53 saw 1.1 #include "thInternal.h"
54
55 #ifndef NOHBOOK
56 #include "hbook.h"
57 #endif
58
59 int thLastIdRhandled;
60
61 daVarStatus thWHandler(char *name,daVarStruct *varclass,any *setval)
62 /* The write handler used by block.test, block.hist and block.parm */
63 {
64 daVarStruct *varp;
65 char *attribute;
66 daVarStatus status;
67 int index;
68
69 status = daVarAttributeFind(name, varclass, &varp, &attribute, &index);
70 if(status == S_SUCCESS) {
71 status = daVarRegWatr(varp, attribute, index, setval);
72 if(strcasecmp(attribute,DAVAR_TITLE) == 0 && status == S_SUCCESS){
73 status = ((daVarStatus (*)()) varclass->opaque)(varp);
74 saw 1.1 }
75 }
76 return(status);
77 }
78 daVarStatus thRHandler(char *name, daVarStruct *varclass, any *retval)
79 /* The default Read handler */
80 {
81 daVarStruct *varp;
82 char *attribute;
83 daVarStatus status;
84 int index;
85
86 status = daVarAttributeFind(name, varclass, &varp, &attribute, &index);
87 status = daVarRegRatr(varp, attribute, index, retval);
88 /* scaler attribute a synonym for the value which holds the block counter */
89 if(status == S_SUCCESS) {
90 if(strcasecmp(attribute,DAVAR_RATR) == 0){
91 retval->any_u.s = realloc(retval->any_u.s,strlen(retval->any_u.s)
92 +strlen(TH_SCALER) + 2);
93 strcat(retval->any_u.s,TH_SCALER);
94 strcat(retval->any_u.s,"\n");
95 saw 1.1 }
96 } else {
97 if(strcasecmp(attribute,TH_SCALER) == 0){
98 retval->valtype = DAVARINT_RPC;
99 retval->any_u.i.i_len = 1;
100 retval->any_u.i.i_val = (int *) malloc(sizeof(int));
101 retval->any_u.i.i_val[0] = ((DAINT *)varp->varptr)[0];
102 }
103 }
104 return(status);
105 }
106
107 #ifndef NOHBOOK
108 void thHistZeroLastId()
109 {
110 thLastIdRhandled = 9999999;
111 return;
112 }
|
115 saw 1.1 {
116 daVarStruct *varp;
117 char *attribute;
118 daVarStatus status;
119 int index;
120 static int NX,NY,NWT,LOC ; static float XMI,XMA,YMI,YMA;
121 /* thHistOpaque *hopq;*/
122
123 status = daVarAttributeFind(name, varclass, &varp, &attribute, &index);
124 status = daVarRegRatr(varp, attribute, index, retval);
125 if(status == S_SUCCESS) {
126 if(strcasecmp(attribute,DAVAR_RATR) == 0){
127 retval->any_u.s = realloc(retval->any_u.s,strlen(retval->any_u.s)
128 + strlen(TH_ND) + strlen(TH_NX)
129 + strlen(TH_NY) + strlen(TH_XMI)
130 + strlen(TH_XMA) + strlen(TH_YMI)
131 + strlen(TH_YMA) + strlen(TH_CONTEN) + 9);
132 strcat(retval->any_u.s,TH_ND); strcat(retval->any_u.s,"\n");
133 strcat(retval->any_u.s,TH_NX); strcat(retval->any_u.s,"\n");
134 strcat(retval->any_u.s,TH_NY); strcat(retval->any_u.s,"\n");
135 strcat(retval->any_u.s,TH_XMI); strcat(retval->any_u.s,"\n");
136 saw 1.1 strcat(retval->any_u.s,TH_XMA); strcat(retval->any_u.s,"\n");
137 strcat(retval->any_u.s,TH_YMI); strcat(retval->any_u.s,"\n");
138 strcat(retval->any_u.s,TH_YMA); strcat(retval->any_u.s,"\n");
139 strcat(retval->any_u.s,TH_CONTEN); strcat(retval->any_u.s,"\n");
140 }
141 } else {
142 char chtitle[80];
143
144 retval->valtype = DAVARERROR_RPC;
145 retval->any_u.error = S_DAVAR_UNKATTR;
146 if(thLastIdRhandled != *((DAINT *) varp->varptr)) {
147 thLastIdRhandled = *((DAINT *) varp->varptr);
148 HGIVE(*((DAINT *) varp->varptr),chtitle,NX,XMI,XMA,NY,YMI,YMA
149 ,NWT,LOC);
150 }
151 if(strcasecmp(attribute,TH_ND) == 0){
152 retval->valtype = DAVARINT_RPC;
153 retval->any_u.i.i_len = 1;
154 retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int));
155 retval->any_u.i.i_val[0] = (NY == 0 ? 1 : 2);
156 } else if(strcasecmp(attribute,TH_NX) == 0){
157 saw 1.1 retval->valtype = DAVARINT_RPC;
158 retval->any_u.i.i_len = 1;
159 retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int));
160 retval->any_u.i.i_val[0] = NX;
161 } else if(strcasecmp(attribute,TH_NY) == 0){
162 retval->valtype = DAVARINT_RPC;
163 retval->any_u.i.i_len = 1;
164 retval->any_u.i.i_val = (int *) malloc(varp->size*sizeof(int));
165 retval->any_u.i.i_val[0] = NY;
166 } else if(strcasecmp(attribute,TH_XMI) == 0){
167 retval->valtype = DAVARFLOAT_RPC;
168 retval->any_u.r.r_len = 1;
169 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
170 retval->any_u.r.r_val[0] = XMI;
171 } else if(strcasecmp(attribute,TH_XMA) == 0){
172 retval->valtype = DAVARFLOAT_RPC;
173 retval->any_u.r.r_len = 1;
174 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
175 retval->any_u.r.r_val[0] = XMA;
176 } else if(strcasecmp(attribute,TH_YMI) == 0){
177 retval->valtype = DAVARFLOAT_RPC;
178 saw 1.1 retval->any_u.r.r_len = 1;
179 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
180 retval->any_u.r.r_val[0] = YMI;
181 } else if(strcasecmp(attribute,TH_YMA) == 0){
182 retval->valtype = DAVARFLOAT_RPC;
183 retval->any_u.r.r_len = 1;
184 retval->any_u.r.r_val = (float *) malloc(varp->size*sizeof(float));
185 retval->any_u.r.r_val[0] = YMA;
186 } else if(strcasecmp(attribute,TH_CONTEN) == 0){
187 int size;
188 retval->valtype = DAVARFLOAT_RPC;
189 size = NX;
190 if(NY != 0) size *= NY;
191 retval->any_u.r.r_len = size;
192 retval->any_u.r.r_val = (float *)malloc(size*sizeof(float));
|