Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2be40c2ade | ||
|
|
2228ec3417 | ||
|
|
f8dd9b2bf7 | ||
|
|
4c5497c74e | ||
|
|
02feda47e1 | ||
|
|
cf209e1411 | ||
|
|
c00216a941 | ||
|
|
b3726f1cb4 | ||
|
|
c3ea9b769e | ||
|
|
4e1826d238 | ||
|
|
2792f1fc6b | ||
|
|
7a51dc30f2 | ||
|
|
01a4f1f64b | ||
|
|
144397decb | ||
|
|
edcd482415 | ||
|
|
2b7d67509e | ||
|
|
e113a5bed2 | ||
|
|
ebd6a8d8ca | ||
|
|
4407b2f24f | ||
|
|
0a9a3422b8 | ||
|
|
e96488dbb6 | ||
|
|
09b0f88c24 | ||
|
|
83ee1e7a8a | ||
|
|
df60df8a94 | ||
|
|
c3a7602526 | ||
|
|
5d91c2f5f3 | ||
|
|
3b6fc10bfe | ||
|
|
a043177422 | ||
|
|
f4a34606e1 | ||
|
|
3df522162b | ||
|
|
c0e611dcb8 | ||
|
|
1a133c65bb | ||
|
|
40237457e9 | ||
|
|
a9f37ef407 | ||
|
|
a2b2fe76fd | ||
|
|
75d1f5ef3e | ||
|
|
e25aa85707 | ||
|
|
93b26eee79 | ||
|
|
fb6f4ce704 | ||
|
|
8d8f5754a1 | ||
|
|
6c1d42f41d | ||
|
|
0bad952311 | ||
|
|
6128d3ac15 | ||
|
|
13c861d190 | ||
|
|
5aeafaf416 | ||
|
|
c3081b11d6 | ||
|
|
ef13c2bb75 | ||
|
|
b2ad0b6e1d | ||
|
|
636c7ba56c | ||
|
|
1f61d4acc2 | ||
|
|
6b0f997b20 | ||
|
|
0f0083ce46 | ||
|
|
25a6340993 | ||
|
|
a3652fd54e | ||
|
|
107ae2cee8 | ||
|
|
deb5e9c973 | ||
|
|
196f2302a4 | ||
|
|
2a21b01b0e | ||
|
|
56465da07f | ||
|
|
ee9457970a | ||
|
|
89a3746869 | ||
|
|
5be8f4999d | ||
|
|
b278c803ce | ||
|
|
50b8361078 | ||
|
|
2a121a4276 | ||
|
|
7b03ab0182 | ||
|
|
73a224a6ce |
@@ -11,9 +11,6 @@ DEPLIBS = ./libAs.a\
|
||||
$(DEPLIBS_BASE)/libCom.a\
|
||||
$(DEPLIBS_BASE)/libDb.a
|
||||
|
||||
LEX = $(ELEX)
|
||||
YACC = $(EYACC)
|
||||
|
||||
SRCS.c = ../ascheck.c asLib.c
|
||||
OBJS = ascheck.o
|
||||
LIBOBJS = asLib.o
|
||||
|
||||
@@ -58,9 +58,13 @@ DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <taskwd.h>
|
||||
#include <alarm.h>
|
||||
#include <caeventmask.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbAccess.h>
|
||||
#include <asLib.h>
|
||||
#include <asDbLib.h>
|
||||
#include <dbCommon.h>
|
||||
@@ -68,7 +72,7 @@ DEVELOPMENT CENTER AT ARGONNE NATIONAL LABORATORY (708-252-2000).
|
||||
#include <subRecord.h>
|
||||
#include <task_params.h>
|
||||
|
||||
extern struct dbBase *pdbBase;
|
||||
extern struct dbBase *pdbbase;
|
||||
static FILE *stream;
|
||||
|
||||
#define BUF_SIZE 100
|
||||
@@ -97,12 +101,12 @@ static int my_yyinput(char *buf, int max_size)
|
||||
|
||||
static long asDbAddRecords(void)
|
||||
{
|
||||
DBENTRY dbentry;
|
||||
DBENTRY *pdbentry=&dbentry;
|
||||
long status;
|
||||
struct dbCommon *precord;
|
||||
DBENTRY dbentry;
|
||||
DBENTRY *pdbentry=&dbentry;
|
||||
long status;
|
||||
dbCommon *precord;
|
||||
|
||||
dbInitEntry(pdbBase,pdbentry);
|
||||
dbInitEntry(pdbbase,pdbentry);
|
||||
status = dbFirstRecdes(pdbentry);
|
||||
while(!status) {
|
||||
status = dbFirstRecord(pdbentry);
|
||||
@@ -235,7 +239,7 @@ int asInitAsyn(ASDBCALLBACK *pcallback)
|
||||
static void myCallback(CALLBACK *pcallback)
|
||||
{
|
||||
ASDBCALLBACK *pasdbcallback = (ASDBCALLBACK *)pcallback;
|
||||
struct subRecord *precord;
|
||||
subRecord *precord;
|
||||
struct rset *prset;
|
||||
|
||||
callbackGetUser(precord,pcallback);
|
||||
@@ -245,12 +249,12 @@ static void myCallback(CALLBACK *pcallback)
|
||||
recGblSetSevr(precord,READ_ALARM,precord->brsv);
|
||||
recGblRecordError(pasdbcallback->status,precord,"asInit Failed");
|
||||
}
|
||||
dbScanLock((struct dbCommon *)precord);
|
||||
(*prset->process)((struct dbCommon *)precord);
|
||||
dbScanUnlock((struct dbCommon *)precord);
|
||||
dbScanLock((dbCommon *)precord);
|
||||
(*prset->process)((dbCommon *)precord);
|
||||
dbScanUnlock((dbCommon *)precord);
|
||||
}
|
||||
|
||||
long asSubInit(struct subRecord *precord,int pass)
|
||||
long asSubInit(subRecord *precord,int pass)
|
||||
{
|
||||
ASDBCALLBACK *pcallback;
|
||||
|
||||
@@ -261,7 +265,7 @@ long asSubInit(struct subRecord *precord,int pass)
|
||||
return(0);
|
||||
}
|
||||
|
||||
long asSubProcess(struct subRecord *precord)
|
||||
long asSubProcess(subRecord *precord)
|
||||
{
|
||||
ASDBCALLBACK *pcallback = (ASDBCALLBACK *)precord->dpvt;
|
||||
|
||||
@@ -278,8 +282,8 @@ long asSubProcess(struct subRecord *precord)
|
||||
|
||||
int asDbGetAsl(void *paddress)
|
||||
{
|
||||
struct dbAddr *paddr = paddress;
|
||||
struct fldDes *pflddes;
|
||||
DBADDR *paddr = paddress;
|
||||
dbFldDes *pflddes;
|
||||
|
||||
pflddes = paddr->pfldDes;
|
||||
return((int)pflddes->as_level);
|
||||
@@ -287,8 +291,8 @@ int asDbGetAsl(void *paddress)
|
||||
|
||||
ASMEMBERPVT asDbGetMemberPvt(void *paddress)
|
||||
{
|
||||
struct dbAddr *paddr = paddress;
|
||||
struct dbCommon *precord;
|
||||
DBADDR *paddr = paddress;
|
||||
dbCommon *precord;
|
||||
|
||||
precord = paddr->precord;
|
||||
return((ASMEMBERPVT)precord->asp);
|
||||
@@ -303,13 +307,13 @@ static void astacCallback(ASCLIENTPVT clientPvt,asClientStatus status)
|
||||
|
||||
int astac(char *pname,char *user,char *location)
|
||||
{
|
||||
struct dbAddr *paddr;
|
||||
long status;
|
||||
ASCLIENTPVT *pasclientpvt=NULL;
|
||||
struct dbCommon *precord;
|
||||
struct fldDes *pflddes;
|
||||
DBADDR *paddr;
|
||||
long status;
|
||||
ASCLIENTPVT *pasclientpvt=NULL;
|
||||
dbCommon *precord;
|
||||
dbFldDes *pflddes;
|
||||
|
||||
paddr = dbCalloc(1,sizeof(struct dbAddr) + sizeof(ASCLIENTPVT));
|
||||
paddr = dbCalloc(1,sizeof(DBADDR) + sizeof(ASCLIENTPVT));
|
||||
pasclientpvt = (ASCLIENTPVT *)(paddr + 1);
|
||||
status=dbNameToAddr(pname,paddr);
|
||||
if(status) {
|
||||
@@ -331,7 +335,7 @@ int astac(char *pname,char *user,char *location)
|
||||
|
||||
static void myMemberCallback(ASMEMBERPVT memPvt)
|
||||
{
|
||||
struct dbCommon *precord;
|
||||
dbCommon *precord;
|
||||
|
||||
precord = asGetMemberPvt(memPvt);
|
||||
if(precord) printf(" Record:%s",precord->name);
|
||||
|
||||
@@ -123,7 +123,7 @@ long asInitialize(ASINPUTFUNCPTR inputfunction)
|
||||
pasg->pavalue = asCalloc(ASMAXINP,sizeof(double));
|
||||
pasg = (ASG *)ellNext((ELLNODE *)pasg);
|
||||
}
|
||||
gphInitPvt(&pasbase->phash);
|
||||
gphInitPvt(&pasbase->phash,256);
|
||||
/*Hash each uagname and each hagname*/
|
||||
puag = (UAG *)ellFirst(&pasbase->uagList);
|
||||
while(puag) {
|
||||
|
||||
18
src/bpt/Makefile
Normal file
18
src/bpt/Makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Lowest Level Directroy Makefile
|
||||
# by Janet Anderson
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.1 1994/09/07 19:25:39 jba
|
||||
# New file
|
||||
#
|
||||
#
|
||||
|
||||
EPICS=../../..
|
||||
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
include $(EPICS)/config/RULES_ARCHS
|
||||
|
||||
11
src/bpt/Makefile.Unix
Normal file
11
src/bpt/Makefile.Unix
Normal file
@@ -0,0 +1,11 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
|
||||
|
||||
SRCS.c = ../makeBpt
|
||||
OBJS = makeBpt
|
||||
PROD = makeBpt
|
||||
|
||||
include $(EPICS)/config/RULES.Unix
|
||||
25
src/bpt/Makefile.Vx
Normal file
25
src/bpt/Makefile.Vx
Normal file
@@ -0,0 +1,25 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
USR_CFLAGS = -ansi
|
||||
VX_WARN_YES = -Wall -pedantic
|
||||
|
||||
MENUS += menuConvert.h
|
||||
|
||||
BPTS += bptTypeJdegC.ascii
|
||||
BPTS += bptTypeJdegF.ascii
|
||||
BPTS += bptTypeKdegC.ascii
|
||||
BPTS += bptTypeKdegF.ascii
|
||||
|
||||
|
||||
SRCS.c = \
|
||||
../cvtBpt.c
|
||||
|
||||
LIBOBJS = \
|
||||
cvtBpt.o
|
||||
|
||||
LIBNAME = pbtLib
|
||||
|
||||
include $(EPICS)/config/RULES.Vx
|
||||
|
||||
142
src/bpt/bptTypeJdegC.data
Normal file
142
src/bpt/bptTypeJdegC.data
Normal file
@@ -0,0 +1,142 @@
|
||||
!header
|
||||
"typeJdegC" 0 0 700 4095 .5 -210 760 1
|
||||
!data
|
||||
|
||||
-8.096 -8.076 -8.057 -8.037 -8.017 -7.996 -7.976 -7.955 -7.934 -7.912
|
||||
|
||||
|
||||
-7.890 -7.868 -7.846 -7.824 -7.801 -7.778 -7.755 -7.731 -7.707 -7.683
|
||||
-7.659 -7.634 -7.609 -7.584 -7.559 -7.533 -7.508 -7.482 -7.455 -7.429
|
||||
-7.402 -7.375 -7.348 -7.321 -7.293 -7.265 -7.237 -7.209 -7.180 -7.151
|
||||
-7.122 -7.093 -7.064 -7.034 -7.004 -6.974 -6.944 -6.914 -6.883 -6.852
|
||||
-6.821 -6.790 -6.758 -6.727 -6.695 -6.663 -6.630 -6.598 -6.565 -6.532
|
||||
|
||||
|
||||
-6.499 -6.466 -6.433 -6.399 -6.365 -6.331 -6.297 -6.263 -6.228 -6.194
|
||||
-6.159 -6.124 -6.089 -6.053 -6.018 -5.982 -5.946 -5.910 -5.874 -5.837
|
||||
-5.801 -5.764 -5.727 -5.690 -5.653 -5.615 -5.578 -5.540 -5.502 -5.464
|
||||
-5.426 -5.388 -5.349 -5.311 -5.272 -5.233 -5.194 -5.155 -5.115 -5.076
|
||||
-5.036 -4.996 -4.956 -4.916 -4.876 -4.836 -4.795 -4.755 -4.714 -4.673
|
||||
|
||||
|
||||
-4.632 -4.591 -4.550 -4.508 -4.467 -4.425 -4.383 -4.341 -4.299 -4.257
|
||||
-4.215 -4.172 -4.130 -4.087 -4.044 -4.001 -3.958 -3.915 -3.872 -3.829
|
||||
-3.785 -3.742 -3.698 -3.654 -3.610 -3.566 -3.522 -3.478 -3.433 -3.389
|
||||
-3.344 -3.299 -3.255 -3.210 -3.165 -3.120 -3.074 -3.029 -2.984 -2.938
|
||||
-2.892 -2.847 -2.801 -2.755 -2.709 -2.663 -2.617 -2.570 -2.524 -2.478
|
||||
|
||||
|
||||
-2.431 -2.384 -2.338 -2.291 -2.244 -2.197 -2.150 -2.102 -2.055 -2.008
|
||||
-1.960 -1.913 -1.865 -1.818 -1.770 -1.722 -1.674 -1.626 -1.578 -1.530
|
||||
-1.481 -1.433 -1.385 -1.336 -1.288 -1.239 -1.190 -1.141 -1.093 -1.044
|
||||
-0.995 -0.945 -0.896 -0.847 -0.798 -0.748 -0.699 -0.650 -0.600 -0.550
|
||||
-0.501 -0.451 -0.401 -0.351 -0.301 -0.251 -0.201 -0.151 -0.101 -0.050
|
||||
|
||||
|
||||
0.0 0.050 0.101 0.151 0.202 0.253 0.303 0.354 0.405 0.456
|
||||
0.507 0.558 0.609 0.660 0.711 0.762 0.813 0.865 0.916 0.967
|
||||
1.019 1.070 1.122 1.174 1.225 1.277 1.329 1.381 1.432 1.484
|
||||
1.536 1.588 1.640 1.693 1.745 1.797 1.849 1.901 1.954 2.006
|
||||
2.058 2.111 2.163 2.216 2.268 2.321 2.374 2.426 2.479 2.532
|
||||
|
||||
|
||||
2.585 2.638 2.691 2.743 2.796 2.849 2.902 2.956 3.009 3.062
|
||||
3.115 3.168 3.221 3.275 3.328 3.381 3.435 3.488 3.542 3.595
|
||||
3.649 3.702 3.756 3.809 3.863 3.917 3.971 4.024 4.078 4.132
|
||||
4.186 4.239 4.293 4.347 4.401 4.455 4.509 4.563 4.617 4.671
|
||||
4.725 4.780 4.834 4.888 4.942 4.996 5.050 5.105 5.159 5.213
|
||||
|
||||
|
||||
5.268 5.322 5.376 5.431 5.485 5.540 5.594 5.649 5.703 5.758
|
||||
5.812 5.867 5.921 5.976 6.031 6.085 6.140 6.195 6.249 6.304
|
||||
6.359 6.414 6.468 6.523 6.578 6.633 6.688 6.742 6.797 6.852
|
||||
6.907 6.962 7.017 7.072 7.127 7.182 7.237 7.292 7.347 7.402
|
||||
7.457 7.512 7.567 7.622 7.677 7.732 7.787 7.843 7.898 7.953
|
||||
|
||||
|
||||
8.008 8.063 8.118 8.174 8.229 8.284 8.339 8.394 8.450 8.505
|
||||
8.560 8.616 8.671 8.726 8.781 8.837 8.892 8.947 9.003 9.058
|
||||
9.113 9.169 9.224 9.279 9.335 9.390 9.446 9.501 9.556 9.612
|
||||
9.667 9.723 9.778 9.834 9.889 9.944 10.000 10.055 10.111 10.166
|
||||
10.222 10.277 10.333 10.388 10.444 10.499 10.555 10.610 10.666 10.721
|
||||
|
||||
|
||||
10.777 10.832 10.888 10.943 10.999 11.054 11.110 11.165 11.221 11.276
|
||||
11.332 11.387 11.443 11.498 11.554 11.609 11.665 11.720 11.776 11.831
|
||||
11.887 11.943 11.998 12.054 12.109 12.165 12.220 12.276 12.331 12.387
|
||||
12.442 12.498 12.553 12.609 12.664 12.720 12.776 12.831 12.887 12.942
|
||||
12.998 13.053 13.109 13.164 13.220 13.275 13.331 13.386 13.442 13.497
|
||||
|
||||
|
||||
13.553 13.608 13.664 13.719 13.775 13.830 13.886 13.941 13.997 14.052
|
||||
14.108 14.163 14.219 14.274 14.330 14.385 14.441 14.496 14.552 14.607
|
||||
14.663 14.718 14.774 14.829 14.885 14.940 14.995 15.051 15.106 15.162
|
||||
15.217 15.273 15.328 15.383 15.439 15.494 15.550 15.605 15.661 15.716
|
||||
15.771 15.827 15.882 15.938 15.993 16.048 16.104 16.159 16.214 16.270
|
||||
|
||||
|
||||
16.325 16.380 16.436 16.491 16.547 16.602 16.657 16.713 16.768 16.823
|
||||
16.879 16.934 16.989 17.044 17.100 17.155 17.210 17.266 17.321 17.376
|
||||
17.432 17.487 17.542 17.597 17.653 17.708 17.763 17.818 17.874 17.929
|
||||
17.984 18.039 18.095 18.150 18.205 18.260 18.316 18.371 18.426 18.481
|
||||
18.537 18.592 18.647 18.702 18.757 18.813 18.868 18.923 18.978 19.033
|
||||
|
||||
|
||||
19.089 19.144 19.199 19.254 19.309 19.364 19.420 19.475 19.530 19.585
|
||||
19.640 19.695 19.751 19.806 19.861 19.916 19.971 20.026 20.081 20.137
|
||||
20.192 20.247 20.302 20.357 20.412 20.467 20.523 20.578 20.633 20.688
|
||||
20.743 20.798 20.853 20.909 20.964 21.019 21.074 21.129 21.184 21.239
|
||||
21.295 21.350 21.405 21.460 21.515 21.570 21.625 21.680 21.736 21.791
|
||||
|
||||
|
||||
21.846 21.901 21.956 22.011 22.066 22.122 22.177 22.232 22.287 22.342
|
||||
22.397 22.453 22.508 22.563 22.618 22.673 22.728 22.784 22.839 22.894
|
||||
22.949 23.004 23.060 23.115 23.170 23.225 23.280 23.336 23.391 23.446
|
||||
23.501 23.556 23.612 23.667 23.722 23.777 23.833 23.888 23.943 23.999
|
||||
24.054 24.109 24.164 24.220 24.275 24.330 24.386 24.441 24.496 24.552
|
||||
|
||||
|
||||
24.607 24.662 24.718 24.773 24.829 24.884 24.939 24.995 25.050 25.106
|
||||
25.161 25.217 25.272 25.327 25.383 25.438 25.494 25.549 25.605 25.661
|
||||
25.716 25.772 25.827 25.883 25.938 25.994 26.050 26.105 26.161 26.216
|
||||
26.272 26.328 26.383 26.439 26.495 26.551 26.606 26.662 26.718 26.774
|
||||
26.829 26.885 26.941 26.997 27.053 27.109 27.165 27.220 27.276 27.332
|
||||
|
||||
|
||||
27.388 27.444 27.500 27.556 27.612 27.668 27.724 27.780 27.836 27.893
|
||||
27.949 28.005 28.061 28.117 28.173 28.230 28.286 28.342 28.398 28.455
|
||||
28.511 28.567 28.624 28.680 28.736 28.793 28.849 28.906 28.962 29.019
|
||||
29.075 29.132 29.188 29.245 29.301 29.358 29.415 29.471 29.528 29.585
|
||||
29.642 29.698 29.755 29.812 29.869 29.926 29.983 30.039 30.096 30.153
|
||||
|
||||
|
||||
30.210 30.267 30.324 30.381 30.439 30.496 30.553 30.610 30.667 30.724
|
||||
30.782 30.839 30.896 30.954 31.011 31.068 31.126 31.183 31.241 31.298
|
||||
31.356 31.413 31.471 31.528 31.586 31.644 31.702 31.759 31.817 31.875
|
||||
31.933 31.991 32.048 32.106 32.164 32.222 32.280 32.338 32.396 32.455
|
||||
32.513 32.571 32.629 32.687 32.746 32.804 32.862 32.921 32.979 33.038
|
||||
|
||||
|
||||
33.096 33.155 33.213 33.272 33.330 33.389 33.448 33.506 33.565 33.624
|
||||
33.683 33.742 33.800 33.859 33.918 33.977 34.036 34.095 34.155 34.214
|
||||
34.273 34.332 34.391 34.451 34.510 34.569 34.629 34.688 34.748 34.807
|
||||
34.867 34.926 34.986 35.046 35.105 35.165 35.225 35.285 35.344 35.404
|
||||
35.464 35.524 35.584 35.644 35.704 35.764 35.825 35.885 35.945 36.005
|
||||
|
||||
|
||||
36.066 36.126 36.186 36.247 36.307 36.368 36.428 36.489 36.549 36.610
|
||||
36.671 36.732 36.792 36.853 36.914 36.975 37.036 37.097 37.158 37.219
|
||||
37.280 37.341 37.402 37.463 37.525 37.586 37.647 37.709 37.770 37.831
|
||||
37.893 37.954 38.016 38.078 38.139 38.201 38.262 38.324 38.386 38.448
|
||||
38.510 38.572 38.633 38.695 38.757 38.819 38.882 38.944 39.006 39.068
|
||||
|
||||
|
||||
39.130 39.192 39.255 39.317 39.379 39.442 39.504 39.567 39.629 39.692
|
||||
39.754 39.817 39.880 39.942 40.005 40.068 40.131 40.193 40.256 40.319
|
||||
40.382 40.445 40.508 40.571 40.634 40.697 40.760 40.823 40.886 40.950
|
||||
41.013 41.076 41.139 41.203 41.266 41.329 41.393 41.456 41.520 41.583
|
||||
41.647 41.710 41.774 41.837 41.901 41.965 42.028 42.092 42.156 42.219
|
||||
|
||||
|
||||
42.283 42.347 42.411 42.475 42.538 42.602 42.666 42.730 42.794 42.858
|
||||
42.922
|
||||
213
src/bpt/bptTypeJdegF.data
Normal file
213
src/bpt/bptTypeJdegF.data
Normal file
@@ -0,0 +1,213 @@
|
||||
! cvtTypeJdegF.data
|
||||
"typeJdegF" 32 0 1200 4095 1.0 -350 1400 1
|
||||
!
|
||||
-8.137 -8.127 -8.117 -8.106 -8.096 -8.085 -8.074 -8.063 -8.052 -8.041
|
||||
-8.030 -8.019 -8.008 -7.996 -7.985 -7.973 -7.962 -7.950 -7.938 -7.927
|
||||
-7.915 -7.903 -7.890 -7.878 -7.866 -7.854 -7.841 -7.829 -7.816 -7.803
|
||||
-7.791 -7.778 -7.765 -7.752 -7.739 -7.726 -7.712 -7.699 -7.686 -7.672
|
||||
-7.659 -7.645 -7.631 -7.618 -7.604 -7.590 -7.576 -7.562 -7.548 -7.533
|
||||
|
||||
-7.519 -7.505 -7.490 -7.476 -7.461 -7.447 -7.432 -7.417 -7.402 -7.387
|
||||
-7.372 -7.357 -7.342 -7.327 -7.311 -7.296 -7.281 -7.265 -7.250 -7.234
|
||||
-7.218 -7.202 -7.187 -7.171 -7.155 -7.139 -7.122 -7.106 -7.090 -7.074
|
||||
-7.057 -7.041 -7.024 -7.008 -6.991 -6.974 -6.958 -6.941 -6.924 -6.907
|
||||
-6.890 -6.873 -6.856 -6.838 -6.821 -6.804 -6.786 -6.769 -6.751 -6.734
|
||||
|
||||
-6.716 -6.698 -6.680 -6.663 -6.645 -6.627 -6.609 -6.591 -6.572 -6.554
|
||||
-6.536 -6.518 -6.499 -6.481 -6.462 -6.444 -6.425 -6.407 -6.388 -6.369
|
||||
-6.350 -6.331 -6.312 -6.293 -6.274 -6.255 -6.236 -6.217 -6.198 -6.178
|
||||
-6.159 -6.139 -6.120 -6.100 -6.081 -6.061 -6.041 -6.022 -6.002 -5.982
|
||||
-5.962 -5.942 -5.922 -5.902 -5.882 -5.861 -5.841 -5.821 -5.801 -5.780
|
||||
|
||||
-5.760 -5.739 -5.719 -5.698 -5.678 -5.657 -5.636 -5.615 -5.594 -5.574
|
||||
-5.553 -5.532 -5.511 -5.490 -5.468 -5.447 -5.426 -5.405 -5.383 -5.362
|
||||
-5.341 -5.319 -5.298 -5.276 -5.255 -5.233 -5.211 -5.190 -5.168 -5.146
|
||||
-5.124 -5.102 -5.080 -5.058 -5.036 -5.014 -4.992 -4.970 -4.948 -4.925
|
||||
-4.903 -4.881 -4.858 -4.836 -4.813 -4.791 -4.768 -4.746 -4.723 -4.700
|
||||
|
||||
-4.678 -4.655 -4.632 -4.609 -4.586 -4.563 -4.540 -4.517 -4.494 -4.471
|
||||
-4.448 -4.425 -4.402 -4.379 -4.355 -4.332 -4.309 -4.285 -4.262 -4.238
|
||||
-4.215 -4.191 -4.168 -4.144 -4.120 -4.097 -4.073 -4.049 -4.025 -4.001
|
||||
-3.978 -3.954 -3.930 -3.906 -3.882 -3.858 -3.833 -3.809 -3.785 -3.761
|
||||
-3.737 -3.712 -3.688 -3.664 -3.639 -3.615 -3.590 -3.566 -3.541 -3.517
|
||||
|
||||
-3.492 -3.468 -3.443 -3.418 -3.394 -3.369 -3.344 -3.319 -3.294 -3.270
|
||||
-3.245 -3.220 -3.195 -3.170 -3.145 -3.120 -3.094 -3.069 -3.044 -3.019
|
||||
-2.994 -2.968 -2.943 -2.918 -2.892 -2.867 -2.842 -2.816 -2.791 -2.765
|
||||
-2.740 -2.714 -2.689 -2.663 -2.637 -2.612 -2.586 -2.560 -2.534 -2.509
|
||||
-2.483 -2.457 -2.431 -2.405 -2.379 -2.353 -2.327 -2.301 -2.275 -2.249
|
||||
|
||||
-2.223 -2.197 -2.171 -2.144 -2.118 -2.092 -2.066 -2.039 -2.013 -1.987
|
||||
-1.960 -1.934 -1.908 -1.881 -1.855 -1.828 -1.802 -1.775 -1.748 -1.722
|
||||
-1.695 -1.669 -1.642 -1.615 -1.589 -1.562 -1.535 -1.508 -1.481 -1.455
|
||||
-1.428 -1.401 -1.374 -1.347 -1.320 -1.293 -1.266 -1.239 -1.212 -1.185
|
||||
-1.158 -1.131 -1.103 -1.076 -1.049 -1.022 -0.995 -0.967 -0.940 -0.913
|
||||
|
||||
-0.885 -0.858 -0.831 -0.803 -0.776 -0.748 -0.721 -0.694 -0.666 -0.639
|
||||
-0.611 -0.583 -0.556 -0.528 -0.501 -0.473 -0.445 -0.418 -0.390 -0.362
|
||||
-0.334 -0.307 -0.279 -0.251 -0.223 -0.195 -0.168 -0.140 -0.112 -0.084
|
||||
-0.056 -0.028 0.000 0.028 0.056 0.084 0.112 0.140 0.168 0.196
|
||||
0.224 0.253 0.281 0.309 0.337 0.365 0.394 0.422 0.450 0.478
|
||||
|
||||
0.507 0.535 0.563 0.592 0.620 0.648 0.677 0.705 0.734 0.762
|
||||
0.791 0.819 0.848 0.876 0.905 0.933 0.962 0.990 1.019 1.048
|
||||
1.076 1.105 1.134 1.162 1.191 1.220 1.248 1.277 1.306 1.335
|
||||
1.363 1.392 1.421 1.450 1.479 1.507 1.536 1.565 1.594 1.623
|
||||
1.652 1.681 1.710 1.739 1.768 1.797 1.826 1.855 1.884 1.913
|
||||
|
||||
1.942 1.971 2.000 2.029 2.058 2.088 2.117 2.146 2.175 2.204
|
||||
2.233 2.263 2.292 2.321 2.350 2.380 2.409 2.438 2.467 2.497
|
||||
2.526 2.555 2.585 2.614 2.644 2.673 2.702 2.732 2.761 2.791
|
||||
2.820 2.849 2.879 2.908 2.938 2.967 2.997 3.026 3.056 3.085
|
||||
3.115 3.145 3.174 3.204 3.233 3.263 3.293 3.322 3.352 3.381
|
||||
|
||||
3.411 3.441 3.470 3.500 3.530 3.560 3.589 3.619 3.649 3.678
|
||||
3.708 3.738 3.768 3.798 3.827 3.857 3.887 3.917 3.947 3.976
|
||||
4.006 4.036 4.066 4.096 4.126 4.156 4.186 4.216 4.245 4.275
|
||||
4.305 4.335 4.365 4.395 4.425 4.455 4.485 4.515 4.545 4.575
|
||||
4.605 4.635 4.665 4.695 4.725 4.755 4.786 4.816 4.846 4.876
|
||||
|
||||
4.906 4.936 4.966 4.996 5.026 5.057 5.087 5.117 5.147 5.177
|
||||
5.207 5.238 5.268 5.298 5.328 5.358 5.389 5.419 5.449 5.479
|
||||
5.509 5.540 5.570 5.600 5.630 5.661 5.691 5.721 5.752 5.782
|
||||
5.812 5.843 5.873 5.903 5.934 5.964 5.994 6.025 6.055 6.085
|
||||
6.116 6.146 6.176 6.207 6.237 6.268 6.298 6.328 6.359 6.389
|
||||
|
||||
6.420 6.450 6.481 6.511 6.541 6.572 6.602 6.633 6.663 6.694
|
||||
6.724 6.755 6.785 6.816 6.846 6.877 6.907 6.938 6.968 6.999
|
||||
7.029 7.060 7.090 7.121 7.151 7.182 7.212 7.243 7.274 7.304
|
||||
7.335 7.365 7.396 7.426 7.457 7.488 7.518 7.549 7.579 7.610
|
||||
7.641 7.671 7.702 7.732 7.763 7.794 7.824 7.855 7.885 7.916
|
||||
|
||||
7.947 7.977 8.008 8.039 8.069 8.100 8.131 8.161 8.192 8.223
|
||||
8.253 8.284 8.315 8.345 8.376 8.407 8.437 8.468 8.499 8.530
|
||||
8.560 8.591 8.622 8.652 8.683 8.714 8.745 8.775 8.806 8.837
|
||||
8.867 8.898 8.929 8.960 8.990 9.021 9.052 9.083 9.113 9.144
|
||||
9.175 9.206 9.236 9.267 9.298 9.329 9.359 9.390 9.421 9.452
|
||||
|
||||
9.483 9.513 9.544 9.575 9.606 9.636 9.667 9.698 9.729 9.760
|
||||
9.790 9.821 9.852 9.883 9.914 9.944 9.975 10.006 10.037 10.068
|
||||
10.098 10.129 10.160 10.191 10.222 10.252 10.283 10.314 10.345 10.376
|
||||
10.407 10.437 10.468 10.499 10.530 10.561 10.592 10.622 10.653 10.684
|
||||
10.715 10.746 10.777 10.807 10.838 10.869 10.900 10.931 10.962 10.992
|
||||
|
||||
11.023 11.054 11.085 11.116 11.147 11.177 11.208 11.239 11.270 11.301
|
||||
11.332 11.363 11.393 11.424 11.455 11.486 11.517 11.548 11.578 11.609
|
||||
11.640 11.671 11.702 11.733 11.764 11.794 11.825 11.856 11.887 11.918
|
||||
11.949 11.980 12.010 12.041 12.072 12.103 12.134 12.165 12.196 12.226
|
||||
12.257 12.288 12.319 12.350 12.381 12.411 12.442 12.473 12.504 12.535
|
||||
|
||||
12.566 12.597 12.627 12.658 12.689 12.720 12.751 12.782 12.813 12.843
|
||||
12.874 12.905 12.936 12.967 12.998 13.029 13.059 13.090 13.121 13.152
|
||||
13.183 13.214 13.244 13.275 13.306 13.337 13.368 13.399 13.430 13.460
|
||||
13.491 13.522 13.553 13.584 13.615 13.645 13.676 13.707 13.738 13.769
|
||||
13.800 13.830 13.861 13.892 13.923 13.954 13.985 14.015 14.046 14.077
|
||||
|
||||
14.108 14.139 14.170 14.200 14.231 14.262 14.293 14.324 14.355 14.385
|
||||
14.416 14.447 14.478 14.509 14.539 14.570 14.601 14.632 14.663 14.694
|
||||
14.724 14.755 14.786 14.817 14.848 14.878 14.909 14.940 14.971 15.002
|
||||
15.032 15.063 15.094 15.125 15.156 15.186 15.217 15.248 15.279 15.310
|
||||
15.340 15.371 15.402 15.433 15.464 15.494 15.525 15.556 15.587 15.617
|
||||
|
||||
15.648 15.679 15.710 15.741 15.771 15.802 15.833 15.864 15.894 15.925
|
||||
15.956 15.987 16.018 16.048 16.079 16.110 16.141 16.171 16.202 16.233
|
||||
16.264 16.294 16.325 16.356 16.387 16.417 16.448 16.479 16.510 16.540
|
||||
16.571 16.602 16.633 16.663 16.694 16.725 16.756 16.786 16.817 16.848
|
||||
16.879 16.909 16.940 16.971 17.001 17.032 17.063 17.094 17.124 17.155
|
||||
|
||||
17.186 17.217 17.247 17.278 17.309 17.339 17.370 17.401 17.432 17.462
|
||||
17.493 17.524 17.554 17.585 17.616 17.646 17.677 17.708 17.739 17.769
|
||||
17.800 17.831 17.861 17.892 17.923 17.953 17.984 18.015 18.046 18.076
|
||||
18.107 18.138 18.168 18.199 18.230 18.260 18.291 18.322 18.352 18.383
|
||||
18.414 18.444 18.475 18.506 18.537 18.567 18.598 18.629 18.659 18.690
|
||||
|
||||
18.721 18.751 18.782 18.813 18.843 18.874 18.905 18.935 18.966 18.997
|
||||
19.027 19.058 19.089 19.119 19.150 19.180 19.211 19.242 19.272 19.303
|
||||
19.334 19.364 19.395 19.426 19.456 19.487 19.518 19.548 19.579 19.610
|
||||
19.640 19.671 19.702 19.732 19.763 19.793 19.824 19.855 19.885 19.916
|
||||
19.947 19.977 20.008 20.039 20.069 20.100 20.131 20.161 20.192 20.222
|
||||
|
||||
20.253 20.284 20.314 20.345 20.376 20.406 20.437 20.467 20.498 20.529
|
||||
20.559 20.590 20.621 20.651 20.682 20.713 20.743 20.774 20.804 20.835
|
||||
20.866 20.896 20.927 20.958 20.988 21.019 21.049 21.080 21.111 21.141
|
||||
21.172 21.203 21.233 21.264 21.295 21.325 21.356 21.386 21.417 21.448
|
||||
21.478 21.509 21.540 21.570 21.601 21.631 21.662 21.693 21.723 21.754
|
||||
|
||||
21.785 21.815 21.846 21.877 21.907 21.938 21.968 21.999 22.030 22.060
|
||||
22.091 22.122 22.152 22.183 22.214 22.244 22.275 22.305 22.336 22.367
|
||||
22.397 22.428 22.459 22.489 22.520 22.551 22.581 22.612 22.643 22.673
|
||||
22.704 22.735 22.765 22.796 22.826 22.857 22.888 22.918 22.949 22.980
|
||||
23.010 23.041 23.072 23.102 23.133 23.164 23.194 23.225 23.256 23.286
|
||||
|
||||
23.317 23.348 23.378 23.409 23.440 23.471 23.501 23.532 23.563 23.593
|
||||
23.624 23.655 23.685 23.716 23.747 23.777 23.808 23.839 23.870 23.900
|
||||
23.931 23.962 23.992 24.023 24.054 24.085 24.115 24.146 24.177 24.207
|
||||
24.238 24.269 24.300 24.330 24.361 24.392 24.423 24.453 24.484 24.515
|
||||
24.546 24.576 24.607 24.638 24.669 24.699 24.730 24.761 24.792 24.822
|
||||
|
||||
24.853 24.854 24.915 24.946 24.976 25.007 25.038 25.069 25.099 25.130
|
||||
25.161 25.192 25.223 25.254 25.284 25.315 25.346 25.377 25.408 25.438
|
||||
25.469 25.500 25.531 25.562 25.593 25.623 25.654 25.685 25.716 25.747
|
||||
25.778 25.809 25.840 25.870 25.901 25.932 25.963 25.994 26.025 26.056
|
||||
26.087 26.118 26.148 26.179 26.210 26.241 26.272 26.303 26.334 26.365
|
||||
|
||||
26.396 26.427 26.458 26.489 26.520 26.551 26.582 26.613 26.644 26.675
|
||||
26.705 26.736 26.767 26.798 26.829 26.860 26.891 26.922 26.954 26.985
|
||||
27.016 27.047 27.078 27.109 27.140 27.171 27.202 27.233 27.264 27.295
|
||||
27.326 27.357 27.388 27.419 27.450 27.482 27.513 27.544 27.575 27.606
|
||||
27.637 27.668 27.699 27.731 27.762 27.793 27.824 27.855 27.886 27.917
|
||||
|
||||
27.949 27.980 28.011 28.042 28.073 28.105 28.136 28.167 28.198 28.230
|
||||
28.261 28.292 28.323 28.355 28.386 28.417 28.448 28.480 28.511 28.542
|
||||
28.573 28.605 28.636 28.667 28.699 28.730 28.761 28.793 28.824 28.855
|
||||
28.887 28.918 28.950 28.981 29.012 29.044 29.075 29.107 29.138 29.169
|
||||
29.201 29.232 29.264 29.295 29.327 29.358 29.390 29.421 29.452 29.484
|
||||
|
||||
29.515 29.547 29.578 29.610 29.642 29.673 29.705 29.736 29.768 29.799
|
||||
29.831 29.862 29.894 29.926 29.957 29.989 30.020 30.052 30.084 30.115
|
||||
30.147 30.179 30.210 30.242 30.274 30.305 30.337 30.369 30.400 30.432
|
||||
30.464 30.496 30.527 30.559 30.591 30.623 30.654 30.686 30.718 30.750
|
||||
30.782 30.813 30.845 30.877 30.909 30.941 30.973 31.005 31.036 31.068
|
||||
|
||||
31.100 31.132 31.164 31.196 31.228 31.260 31.292 31.324 31.356 31.388
|
||||
31.420 31.452 31.484 31.516 31.548 31.580 31.612 31.644 31.676 31.708
|
||||
31.740 31.772 31.804 31.836 31.868 31.901 31.933 31.965 31.997 32.029
|
||||
32.061 32.094 32.126 32.158 32.190 32.222 32.255 32.287 32.319 32.351
|
||||
32.384 32.416 32.448 32.480 32.513 32.545 32.577 32.610 32.642 32.674
|
||||
|
||||
32.707 32.739 32.772 32.804 32.836 32.869 32.901 32.934 32.966 32.999
|
||||
33.031 33.064 33.096 33.129 33.161 33.194 33.226 33.259 33.291 33.324
|
||||
33.356 33.389 33.422 33.454 33.487 33.519 33.552 33.585 33.617 33.650
|
||||
33.683 33.715 33.748 33.781 33.814 33.846 33.879 33.912 33.945 33.977
|
||||
34.010 34.043 34.076 34.109 34.141 34.174 34.207 34.240 34.273 34.306
|
||||
|
||||
34.339 34.372 34.405 34.437 34.470 34.503 34.536 34.569 34.602 34.635
|
||||
34.668 34.701 34.734 34.767 34.801 34.834 34.867 34.900 34.933 34.966
|
||||
34.999 35.032 35.065 35.099 35.132 35.165 35.198 35.231 35.265 35.298
|
||||
35.331 35.364 35.398 35.431 35.464 35.498 35.531 35.564 35.598 35.631
|
||||
35.664 35.698 35.731 35.764 35.798 35.831 35.865 35.898 35.932 35.965
|
||||
|
||||
35.999 36.032 36.066 36.099 36.133 36.166 36.200 36.233 36.267 36.301
|
||||
36.334 36.368 36.401 36.435 36.469 36.502 36.536 36.570 36.603 36.637
|
||||
36.671 36.705 36.738 36.772 36.806 36.840 36.873 36.907 36.941 36.975
|
||||
37.009 37.043 37.076 37.110 37.144 37.178 37.212 37.246 37.280 37.314
|
||||
37.348 37.382 37.416 37.450 37.484 37.518 37.552 37.586 37.620 37.654
|
||||
|
||||
37.688 37.722 37.756 37.790 37.825 37.859 37.893 37.927 37.961 37.995
|
||||
38.030 38.064 38.098 38.132 38.167 38.201 38.235 38.269 38.304 38.338
|
||||
38.372 38.407 38.441 38.475 38.510 38.544 38.578 38.613 38.647 38.682
|
||||
38.716 38.751 38.785 38.819 38.854 38.888 38.923 38.957 38.992 39.027
|
||||
39.061 39.096 39.130 39.165 39.199 39.234 39.269 39.303 39.338 39.373
|
||||
|
||||
39.407 39.442 39.477 39.511 39.546 39.581 39.615 39.650 39.685 39.720
|
||||
39.754 39.789 39.824 39.859 39.894 39.928 39.963 39.998 40.033 40.068
|
||||
40.103 40.138 40.172 40.207 40.242 40.277 40.312 40.347 40.382 40.417
|
||||
40.452 40.487 40.522 40.557 40.592 40.627 40.662 40.697 40.732 40.767
|
||||
40.802 40.837 40.872 40.908 40.943 40.978 41.013 41.048 41.083 41.118
|
||||
|
||||
41.154 41.189 41.224 41.259 41.294 41.329 41.365 41.400 41.435 41.470
|
||||
41.506 41.541 41.576 41.611 41.647 41.682 41.717 41.753 41.788 41.823
|
||||
41.859 41.894 41.929 41.965 42.000 42.035 42.071 42.106 42.142 42.177
|
||||
42.212 42.248 42.283 42.319 42.354 42.390 42.425 42.460 42.496 42.531
|
||||
42.567 42.602 42.638 42.673 42.709 42.744 42.780 42.815 42.851 42.886
|
||||
42.922
|
||||
201
src/bpt/bptTypeKdegC.data
Normal file
201
src/bpt/bptTypeKdegC.data
Normal file
@@ -0,0 +1,201 @@
|
||||
! cvtTypeKdegC.data
|
||||
"typeKdegC" 0 0 1000 4095 .5 -270 1372 1
|
||||
!
|
||||
-6.458 -6.457 -6.456 -6.455 -6.453 -6.452 -6.450 -6.448 -6.446 -6.444
|
||||
-6.441 -6.438 -6.435 -6.432 -6.429 -6.425 -6.421 -6.417 -6.413 -6.408
|
||||
|
||||
-6.404 -6.399 -6.394 -6.388 -6.382 -6.377 -6.371 -6.364 -6.358 -6.351
|
||||
-6.344 -6.337 -6.329 -6.322 -6.314 -6.306 -6.297 -6.289 -6.280 -6.271
|
||||
-6.262 -6.253 -6.243 -6.233 -6.223 -6.213 -6.202 -6.192 -6.181 -6.170
|
||||
-6.158 -6.147 -6.135 -6.123 -6.111 -6.099 -6.087 -6.074 -6.061 -6.048
|
||||
-6.035 -6.021 -6.007 -5.994 -5.980 -5.965 -5.951 -5.936 -5.922 -5.907
|
||||
|
||||
-5.891 -5.876 -5.860 -5.845 -5.829 -5.813 -5.796 -5.780 -5.763 -5.747
|
||||
-5.730 -5.712 -5.695 -5.678 -5.660 -5.642 -5.624 -5.606 -5.587 -5.569
|
||||
-5.550 -5.531 -5.512 -5.493 -5.474 -5.454 -5.434 -5.414 -5.394 -5.374
|
||||
-5.354 -5.333 -5.313 -5.292 -5.271 -5.249 -5.228 -5.207 -5.185 -5.163
|
||||
-5.141 -5.119 -5.097 -5.074 -5.051 -5.029 -5.006 -4.983 -4.959 -4.936
|
||||
|
||||
-4.912 -4.889 -4.865 -4.841 -4.817 -4.792 -4.768 -4.743 -4.719 -4.694
|
||||
-4.669 -4.644 -4.618 -4.593 -4.567 -4.541 -4.515 -4.489 -4.463 -4.437
|
||||
-4.410 -4.384 -4.357 -4.330 -4.303 -4.276 -4.248 -4.221 -4.193 -4.166
|
||||
-4.138 -4.110 -4.082 -4.053 -4.025 -3.997 -3.968 -3.939 -3.910 -3.881
|
||||
-3.852 -3.823 -3.793 -3.764 -3.734 -3.704 -3.674 -3.644 -3.614 -3.584
|
||||
|
||||
-3.553 -3.523 -3.492 -3.461 -3.430 -3.399 -3.368 -3.337 -3.305 -3.274
|
||||
-3.242 -3.211 -3.179 -3.147 -3.115 -3.082 -3.050 -3.018 -2.985 -2.953
|
||||
-2.920 -2.887 -2.854 -2.821 -2.788 -2.754 -2.721 -2.687 -2.654 -2.620
|
||||
-2.586 -2.552 -2.518 -2.484 -2.450 -2.416 -2.381 -2.347 -2.312 -2.277
|
||||
-2.243 -2.208 -2.173 -2.137 -2.102 -2.067 -2.032 -1.996 -1.961 -1.925
|
||||
|
||||
-1.889 -1.853 -1.817 -1.781 -1.745 -1.709 -1.673 -1.636 -1.600 -1.563
|
||||
-1.527 -1.490 -1.453 -1.416 -1.379 -1.342 -1.305 -1.268 -1.231 -1.193
|
||||
-1.156 -1.118 -1.081 -1.043 -1.005 -0.968 -0.930 -0.892 -0.854 -0.816
|
||||
-0.777 -0.739 -0.701 -0.662 -0.624 -0.585 -0.547 -0.508 -0.469 -0.431
|
||||
-0.392 -0.353 -0.314 -0.275 -0.236 -0.197 -0.157 -0.118 -0.079 -0.039
|
||||
|
||||
0.000 0.039 0.079 0.119 0.158 0.198 0.238 0.277 0.317 0.357
|
||||
0.397 0.437 0.477 0.517 0.557 0.597 0.637 0.677 0.718 0.758
|
||||
0.798 0.838 0.879 0.919 0.960 1.000 1.041 1.081 1.122 1.162
|
||||
1.203 1.244 1.285 1.325 1.366 1.407 1.448 1.489 1.529 1.570
|
||||
1.611 1.652 1.693 1.734 1.776 1.817 1.858 1.899 1.940 1.981
|
||||
|
||||
2.022 2.064 2.105 2.146 2.188 2.229 2.270 2.312 2.353 2.394
|
||||
2.436 2.477 2.519 2.560 2.601 2.643 2.684 2.726 2.767 2.809
|
||||
2.850 2.892 2.933 2.975 3.016 3.058 3.100 3.141 3.183 3.224
|
||||
3.266 3.307 3.349 3.390 3.432 3.473 3.515 3.556 3.598 3.639
|
||||
3.681 3.722 3.764 3.805 3.847 3.888 3.930 3.971 4.012 4.054
|
||||
|
||||
4.095 4.137 4.178 4.219 4.261 4.302 4.343 4.384 4.426 4.467
|
||||
4.508 4.549 4.590 4.632 4.673 4.714 4.755 4.796 4.837 4.878
|
||||
4.919 4.960 5.001 5.042 5.083 5.124 5.164 5.205 5.246 5.287
|
||||
5.327 5.368 5.409 5.450 5.490 5.531 5.571 5.612 5.652 5.693
|
||||
5.733 5.774 5.814 5.855 5.895 5.936 5.976 6.016 6.057 6.097
|
||||
|
||||
6.137 6.177 6.218 6.258 6.298 6.338 6.378 6.419 6.459 6.499
|
||||
6.539 6.579 6.619 6.659 6.699 6.739 6.779 6.819 6.859 6.899
|
||||
6.939 6.979 7.019 7.059 7.099 7.139 7.179 7.219 7.259 7.299
|
||||
7.338 7.378 7.418 7.458 7.498 7.538 7.578 7.618 7.658 7.697
|
||||
7.737 7.777 7.817 7.857 7.897 7.937 7.977 8.017 8.057 8.097
|
||||
|
||||
8.137 8.177 8.216 8.256 8.296 8.336 8.376 8.416 8.456 8.497
|
||||
8.537 8.577 8.617 8.657 8.697 8.737 8.777 8.817 8.857 8.898
|
||||
8.938 8.978 9.018 9.058 9.099 9.139 9.179 9.220 9.260 9.300
|
||||
9.341 9.381 9.421 9.462 9.502 9.543 9.583 9.624 9.664 9.705
|
||||
9.745 9.786 9.826 9.867 9.907 9.948 9.989 10.029 10.070 10.111
|
||||
|
||||
10.151 10.192 10.233 10.274 10.315 10.355 10.396 10.437 10.478 10.519
|
||||
10.560 10.600 10.641 10.682 10.723 10.764 10.805 10.846 10.887 10.928
|
||||
10.969 11.010 11.051 11.093 11.134 11.175 11.216 11.257 11.298 11.339
|
||||
11.381 11.422 11.463 11.504 11.546 11.587 11.628 11.669 11.711 11.752
|
||||
11.793 11.835 11.876 11.918 11.959 12.000 12.042 12.083 12.125 12.166
|
||||
|
||||
12.207 12.249 12.290 12.332 12.373 12.415 12.456 12.498 12.539 12.581
|
||||
12.623 12.664 12.706 12.747 12.789 12.831 12.872 12.914 12.955 12.997
|
||||
13.039 13.080 13.122 13.164 13.205 13.247 13.289 13.331 13.372 13.414
|
||||
13.456 13.497 13.539 13.581 13.623 13.665 13.706 13.748 13.790 13.832
|
||||
13.874 13.915 13.957 13.999 14.041 14.083 14.125 14.167 14.208 14.250
|
||||
|
||||
14.292 14.334 14.376 14.418 14.460 14.502 14.544 14.586 14.628 14.670
|
||||
14.712 14.754 14.796 14.838 14.880 14.922 14.964 15.006 15.048 15.090
|
||||
15.132 15.174 15.216 15.258 15.300 15.342 15.384 15.426 15.468 15.510
|
||||
15.552 15.594 15.636 15.679 15.721 15.763 15.805 15.847 15.889 15.931
|
||||
15.974 16.016 16.058 16.100 16.142 16.184 16.227 16.269 16.311 16.353
|
||||
|
||||
16.395 16.438 16.480 16.522 16.564 16.607 16.649 16.691 16.733 16.776
|
||||
16.818 16.860 16.902 16.945 16.987 17.029 17.072 17.114 17.156 17.199
|
||||
17.241 17.283 17.326 17.368 17.410 17.453 17.495 17.537 17.580 17.622
|
||||
17.664 17.707 17.749 17.792 17.834 17.876 17.919 17.961 18.004 18.046
|
||||
18.088 18.131 18.173 18.216 18.258 18.301 18.343 18.385 18.428 18.470
|
||||
|
||||
18.513 18.555 18.598 18.640 18.683 18.725 18.768 18.810 18.853 18.895
|
||||
18.938 18.980 19.023 19.065 19.108 19.150 19.193 19.235 19.278 19.320
|
||||
19.363 19.405 19.448 19.490 19.533 19.576 19.618 19.661 19.703 19.746
|
||||
19.788 19.831 19.873 19.916 19.959 20.001 20.044 20.086 20.129 20.172
|
||||
20.214 20.257 20.299 20.342 20.385 20.427 20.470 20.512 20.555 20.598
|
||||
|
||||
20.640 20.683 20.725 20.768 20.811 20.853 20.896 20.938 20.981 21.024
|
||||
21.066 21.109 21.152 21.194 21.237 21.280 21.322 21.365 21.407 21.450
|
||||
21.493 21.535 21.578 21.621 21.663 21.706 21.749 21.791 21.834 21.876
|
||||
21.919 21.962 22.004 22.047 22.090 22.132 22.175 22.218 22.260 22.303
|
||||
22.346 22.388 22.431 22.473 22.516 22.559 22.601 22.644 22.687 22.729
|
||||
|
||||
22.772 22.815 22.857 22.900 22.942 22.985 23.028 23.070 23.113 23.156
|
||||
23.198 23.241 23.284 23.326 23.369 23.411 23.454 23.497 23.539 23.582
|
||||
23.624 23.667 23.710 23.752 23.795 23.837 23.880 23.923 23.965 24.008
|
||||
24.050 24.093 24.136 24.178 24.221 24.263 24.306 24.348 24.391 24.434
|
||||
24.476 24.519 24.561 24.604 24.646 24.689 24.731 24.774 24.817 24.859
|
||||
|
||||
24.902 24.944 24.987 25.029 25.072 25.114 25.157 25.199 25.242 25.284
|
||||
25.327 25.369 25.412 25.454 25.497 25.539 25.582 25.624 25.666 25.709
|
||||
25.751 25.794 25.836 25.879 25.921 25.964 26.006 26.048 26.091 26.133
|
||||
26.176 26.218 26.260 26.303 26.345 26.387 26.430 26.472 26.515 26.557
|
||||
26.599 26.642 26.684 26.726 26.769 26.811 26.853 26.896 26.938 26.980
|
||||
|
||||
27.022 27.065 27.107 27.149 27.192 27.234 27.276 27.318 27.361 27.403
|
||||
27.445 27.487 27.529 27.572 27.614 27.656 27.698 27.740 27.783 27.825
|
||||
27.867 27.909 27.951 27.993 28.035 28.078 28.120 28.162 28.204 28.246
|
||||
28.288 28.330 28.372 28.414 28.456 28.498 28.540 28.583 28.625 28.667
|
||||
28.709 28.751 28.793 28.835 28.877 28.919 28.961 29.002 29.044 29.086
|
||||
|
||||
29.128 29.170 29.212 29.254 29.296 29.338 29.380 29.422 29.464 29.505
|
||||
29.547 29.589 29.631 29.673 29.715 29.756 29.798 29.840 29.882 29.924
|
||||
29.965 30.007 30.049 30.091 30.132 30.174 30.216 30.257 30.299 30.341
|
||||
30.383 30.424 30.466 30.508 30.549 30.591 30.632 30.674 30.716 30.757
|
||||
30.799 30.840 30.882 30.924 30.965 31.007 31.048 31.090 31.131 31.173
|
||||
|
||||
31.214 31.256 31.297 31.339 31.380 31.422 31.463 31.504 31.546 31.587
|
||||
31.629 31.670 31.712 31.753 31.794 31.836 31.877 31.918 31.960 32.001
|
||||
32.042 32.084 32.125 32.166 32.207 32.249 32.290 32.331 32.372 32.414
|
||||
32.455 32.496 32.537 32.578 32.619 32.661 32.702 32.743 32.784 32.825
|
||||
32.866 32.907 32.948 32.990 33.031 33.072 33.113 33.154 33.195 33.236
|
||||
|
||||
33.277 33.318 33.359 33.400 33.441 33.482 33.523 33.564 33.604 33.645
|
||||
33.686 33.727 33.768 33.809 33.850 33.891 33.931 33.972 34.013 34.054
|
||||
34.095 34.136 34.176 34.217 34.258 34.299 34.339 34.380 34.421 34.461
|
||||
34.502 34.543 34.583 34.624 34.665 34.705 34.746 34.787 34.827 34.868
|
||||
34.909 34.949 34.990 35.030 35.071 35.111 35.152 35.192 35.233 35.273
|
||||
|
||||
35.314 35.354 35.395 35.435 35.476 35.516 35.557 35.597 35.637 35.678
|
||||
35.718 35.758 35.799 35.839 35.880 35.920 35.960 36.000 36.041 36.081
|
||||
36.121 36.162 36.202 36.242 36.282 36.323 36.363 36.403 36.443 36.483
|
||||
36.524 36.564 36.604 36.644 36.684 36.724 36.764 36.804 36.844 36.885
|
||||
36.925 36.965 37.005 37.045 37.085 37.125 37.165 37.205 37.245 37.285
|
||||
|
||||
37.325 37.365 37.405 37.445 37.484 37.524 37.564 37.604 37.644 37.684
|
||||
37.724 37.764 37.803 37.843 37.883 37.923 37.963 38.002 38.042 38.082
|
||||
38.122 38.162 38.201 38.241 38.281 38.320 38.360 38.400 38.439 38.479
|
||||
38.519 38.558 38.598 38.638 38.677 38.717 38.756 38.796 38.836 38.875
|
||||
38.915 38.954 38.994 39.033 39.073 39.112 39.152 39.191 39.231 39.270
|
||||
|
||||
39.310 39.349 39.388 39.428 39.467 39.507 39.546 39.585 39.625 39.644
|
||||
39.703 39.743 39.782 39.821 39.861 39.900 39.939 39.979 40.018 40.057
|
||||
40.096 40.136 40.175 40.214 40.253 40.292 40.332 40.371 40.410 40.449
|
||||
40.488 40.527 40.566 40.605 40.645 40.684 40.723 40.762 40.801 40.840
|
||||
40.879 40.918 40.957 40.996 41.035 41.074 41.113 41.152 41.191 41.230
|
||||
|
||||
41.269 41.308 41.347 41.385 41.424 41.463 41.502 41.541 41.580 41.619
|
||||
41.657 41.696 41.735 41.774 41.813 41.851 41.890 41.929 41.968 42.006
|
||||
42.045 42.084 42.123 42.161 42.200 42.239 42.277 42.316 42.355 42.393
|
||||
42.432 42.470 42.509 42.548 42.586 42.625 42.663 42.702 42.740 42.779
|
||||
42.817 42.856 42.894 42.933 42.971 43.010 43.048 43.087 43.125 43.164
|
||||
|
||||
43.202 43.240 43.279 43.317 43.356 43.394 43.432 43.471 43.509 43.547
|
||||
43.585 43.624 43.662 43.700 43.739 43.777 43.815 43.853 43.891 43.930
|
||||
43.968 44.006 44.044 44.082 44.121 44.159 44.197 44.235 44.273 44.311
|
||||
44.349 44.387 44.425 44.463 44.501 44.539 44.577 44.615 44.653 44.691
|
||||
44.729 44.767 44.805 44.843 44.881 44.919 44.957 44.995 45.033 45.070
|
||||
|
||||
45.108 45.146 45.184 45.222 45.260 45.297 45.335 45.373 45.411 45.448
|
||||
45.486 45.524 45.561 45.599 45.637 45.675 45.712 45.750 45.787 45.825
|
||||
45.863 45.900 45.938 45.975 46.013 46.051 46.088 46.126 46.163 46.201
|
||||
46.238 46.275 46.313 46.350 46.388 46.425 46.463 46.500 46.537 46.575
|
||||
46.612 46.649 46.687 46.724 46.761 46.799 46.836 46.873 46.910 46.948
|
||||
|
||||
46.985 47.022 47.059 47.096 47.134 47.171 47.208 47.245 47.282 47.319
|
||||
47.356 47.393 47.430 47.468 47.505 47.542 47.579 47.616 47.653 47.689
|
||||
47.726 47.763 47.800 47.837 47.874 47.911 47.948 47.985 48.021 48.058
|
||||
48.095 48.132 48.169 48.205 48.242 48.279 48.316 48.352 48.389 48.426
|
||||
48.462 48.499 48.536 48.572 48.609 48.645 48.682 48.718 48.755 48.792
|
||||
|
||||
48.828 48.865 48.901 48.937 48.974 49.010 49.047 49.083 49.120 49.156
|
||||
49.192 49.229 49.265 49.301 49.338 49.374 49.410 49.446 49.483 49.519
|
||||
49.555 49.591 49.627 49.663 49.700 49.736 49.772 49.808 49.844 49.880
|
||||
49.916 49.952 49.988 50.024 50.060 50.096 50.132 50.168 50.204 50.240
|
||||
50.276 50.311 50.347 50.383 50.419 50.455 50.491 50.526 50.562 50.598
|
||||
|
||||
50.633 50.669 50.705 50.741 50.776 50.812 50.847 50.883 50.919 50.954
|
||||
50.990 51.025 51.061 51.096 51.132 51.167 51.203 51.238 51.274 51.309
|
||||
51.344 51.380 51.415 51.450 51.486 51.521 51.556 51.592 51.627 51.662
|
||||
51.697 51.733 51.768 51.803 51.838 51.873 51.908 51.943 51.979 52.014
|
||||
52.049 52.084 52.119 52.154 52.189 52.224 52.259 52.294 52.329 52.364
|
||||
|
||||
52.398 52.433 52.468 52.503 52.538 52.573 52.608 52.642 52.677 52.712
|
||||
52.747 52.781 52.816 52.851 52.886 52.920 52.955 52.989 53.024 53.059
|
||||
53.093 53.128 53.162 53.197 53.232 53.266 53.301 53.335 53.370 53.404
|
||||
53.439 53.473 53.507 53.542 53.576 53.611 53.645 53.679 53.714 53.748
|
||||
53.782 53.817 53.851 53.885 53.920 53.954 53.988 54.022 54.057 54.091
|
||||
|
||||
54.125 54.159 54.193 54.228 54.262 54.296 54.330 54.364 54.398 54.432
|
||||
54.466 54.501 54.535 54.569 54.603 54.637 54.671 54.705 54.739 54.773
|
||||
54.807 54.841 54.875
|
||||
360
src/bpt/bptTypeKdegF.data
Normal file
360
src/bpt/bptTypeKdegF.data
Normal file
@@ -0,0 +1,360 @@
|
||||
! cvtTypeKdegF.data
|
||||
"typeKdegF" 32 0 1832 4095 1.0 -454 2500 1
|
||||
!
|
||||
-6.458 -6.457 -6.457 -6.456
|
||||
|
||||
-6.456 -6.455 -6.454 -6.454 -6.453 -6.452 -6.451 -6.450 -6.449 -6.448
|
||||
-6.447 -6.445 -6.444 -6.443 -6.441 -6.440 -6.438 -6.436 -6.435 -6.433
|
||||
-6.431 -6.429 -6.427 -6.425 -6.423 -6.421 -6.419 -6.416 -6.414 -6.411
|
||||
-6.409 -6.406 -6.404 -6.401 -6.398 -6.395 -6.392 -6.389 -6.386 -6.383
|
||||
-6.380 -6.377 -6.373 -6.370 -6.366 -6.363 -6.359 -6.355 -6.352 -6.348
|
||||
|
||||
-6.344 -6.340 -6.336 -6.332 -6.328 -6.323 -6.319 -6.315 -6.310 -6.306
|
||||
-6.301 -6.296 -6.292 -6.287 -6.282 -6.277 -6.272 -6.267 -6.262 -6.257
|
||||
-6.251 -6.246 -6.241 -6.235 -6.230 -6.224 -6.219 -6.213 -6.207 -6.201
|
||||
-6.195 -6.189 -6.183 -6.177 -6.171 -6.165 -6.158 -6.152 -6.146 -6.139
|
||||
-6.133 -6.126 -6.119 -6.113 -6.106 -6.099 -6.092 -6.085 -6.078 -6.071
|
||||
|
||||
-6.064 -6.057 -6.049 -6.042 -6.035 -6.027 -6.020 -6.012 -6.004 -5.997
|
||||
-5.989 -5.981 -5.973 -5.965 -5.957 -5.949 -5.941 -5.933 -5.925 -5.917
|
||||
-5.908 -5.900 -5.891 -5.883 -5.874 -5.866 -5.857 -5.848 -5.839 -5.831
|
||||
-5.822 -5.813 -5.804 -5.795 -5.786 -5.776 -5.767 -5.758 -5.748 -5.739
|
||||
-5.730 -5.720 -5.711 -5.701 -5.691 -5.682 -5.672 -5.662 -5.652 -5.642
|
||||
|
||||
-5.632 -5.622 -5.612 -5.602 -5.592 -5.581 -5.571 -5.561 -5.550 -5.540
|
||||
-5.529 -5.519 -5.508 -5.497 -5.487 -5.476 -5.465 -5.454 -5.443 -5.432
|
||||
-5.421 -5.410 -5.399 -5.388 -5.376 -5.365 -5.354 -5.342 -5.331 -5.319
|
||||
-5.308 -5.296 -5.285 -5.273 -5.261 -5.249 -5.238 -5.226 -5.214 -5.202
|
||||
-5.190 -5.178 -5.165 -5.153 -5.141 -5.129 -5.116 -5.104 -5.092 -5.079
|
||||
|
||||
-5.067 -5.054 -5.041 -5.029 -5.016 -5.003 -4.990 -4.978 -4.965 -4.952
|
||||
-4.939 -4.926 -4.912 -4.899 -4.886 -4.873 -4.860 -4.846 -4.833 -4.819
|
||||
-4.806 -4.792 -4.779 -4.765 -4.752 -4.738 -4.724 -4.710 -4.697 -4.683
|
||||
-4.669 -4.655 -4.641 -4.627 -4.613 -4.598 -4.584 -4.570 -4.556 -4.541
|
||||
-4.527 -4.512 -4.498 -4.484 -4.469 -4.454 -4.440 -4.425 -4.410 -4.396
|
||||
|
||||
-4.381 -4.366 -4.351 -4.336 -4.321 -4.306 -4.291 -4.276 -4.261 -4.245
|
||||
-4.230 -4.215 -4.200 -4.184 -4.169 -4.153 -4.138 -4.122 -4.107 -4.091
|
||||
-4.075 -4.060 -4.044 -4.028 -4.012 -3.997 -3.981 -3.965 -3.949 -3.933
|
||||
-3.917 -3.901 -3.884 -3.868 -3.852 -3.836 -3.819 -3.803 -3.787 -3.770
|
||||
-3.754 -3.737 -3.721 -3.704 -3.688 -3.671 -3.654 -3.637 -3.621 -3.604
|
||||
|
||||
-3.587 -3.570 -3.553 -3.536 -3.519 -3.502 -3.485 -3.468 -3.451 -3.434
|
||||
-3.417 -3.399 -3.382 -3.365 -3.347 -3.330 -3.312 -3.295 -3.277 -3.260
|
||||
-3.242 -3.225 -3.207 -3.189 -3.172 -3.154 -3.136 -3.118 -3.100 -3.082
|
||||
-3.065 -3.047 -3.029 -3.010 -2.992 -2.974 -2.956 -2.938 -2.920 -2.902
|
||||
-2.883 -2.865 -2.847 -2.828 -2.810 -2.791 -2.773 -2.754 -2.736 -2.717
|
||||
|
||||
-2.699 -2.680 -2.661 -2.643 -2.624 -2.605 -2.586 -2.567 -2.549 -2.530
|
||||
-2.511 -2.492 -2.473 -2.454 -2.435 -2.416 -2.397 -2.377 -2.358 -2.339
|
||||
-2.320 -2.300 -2.281 -2.262 -2.243 -2.223 -2.204 -2.184 -2.165 -2.145
|
||||
-2.126 -2.106 -2.087 -2.067 -2.047 -2.028 -2.008 -1.988 -1.968 -1.949
|
||||
-1.929 -1.909 -1.889 -1.869 -1.849 -1.829 -1.809 -1.789 -1.769 -1.749
|
||||
|
||||
-1.729 -1.709 -1.689 -1.669 -1.648 -1.628 -1.608 -1.588 -1.567 -1.547
|
||||
-1.527 -1.506 -1.486 -1.465 -1.445 -1.424 -1.404 -1.383 -1.363 -1.342
|
||||
-1.322 -1.301 -1.280 -1.260 -1.239 -1.218 -1.197 -1.177 -1.156 -1.135
|
||||
-1.114 -1.093 -1.072 -1.051 -1.031 -1.010 -0.989 -0.968 -0.946 -0.925
|
||||
-0.904 -0.883 -0.862 -0.841 -0.820 -0.799 -0.777 -0.756 -0.735 -0.714
|
||||
|
||||
-0.692 -0.671 -0.650 -0.628 -0.607 -0.585 -0.564 -0.543 -0.521 -0.500
|
||||
-0.478 -0.457 -0.435 -0.413 -0.392 -0.370 -0.349 -0.327 -0.305 -0.284
|
||||
-0.262 -0.240 -0.218 -0.197 -0.175 -0.153 -0.131 -0.109 -0.088 -0.066
|
||||
-0.044 -0.022 0.000 0.022 0.044 0.066 0.088 0.110 0.132 0.154
|
||||
0.176 0.198 0.220 0.242 0.264 0.286 0.308 0.331 0.353 0.375
|
||||
|
||||
0.397 0.419 0.441 0.464 0.486 0.508 0.530 0.553 0.575 0.597
|
||||
0.619 0.642 0.664 0.686 0.709 0.731 0.753 0.776 0.798 0.821
|
||||
0.843 0.865 0.888 0.910 0.933 0.955 0.978 1.000 1.023 1.045
|
||||
1.068 1.090 1.113 1.135 1.158 1.181 1.203 1.226 1.248 1.271
|
||||
1.294 1.316 1.339 1.362 1.384 1.407 1.430 1.452 1.475 1.498
|
||||
|
||||
1.520 1.543 1.566 1.589 1.611 1.634 1.657 1.680 1.703 1.725
|
||||
1.748 1.771 1.794 1.817 1.839 1.862 1.885 1.908 1.931 1.954
|
||||
1.977 2.000 2.022 2.045 2.068 2.091 2.114 2.137 2.160 2.183
|
||||
2.206 2.229 2.252 2.275 2.298 2.321 2.344 2.367 2.390 2.413
|
||||
2.436 2.459 2.482 2.505 2.528 2.551 2.574 2.597 2.620 2.643
|
||||
|
||||
2.666 2.689 2.712 2.735 2.758 2.781 2.804 2.827 2.850 2.873
|
||||
2.896 2.920 2.943 2.966 2.989 3.012 3.035 3.058 3.081 3.104
|
||||
3.127 3.150 3.173 3.196 3.220 3.243 3.266 3.289 3.312 3.335
|
||||
3.358 3.381 3.404 3.427 3.450 3.473 3.496 3.519 3.543 3.566
|
||||
3.589 3.612 3.635 3.658 3.681 3.704 3.727 3.750 3.773 3.796
|
||||
|
||||
3.819 3.842 3.865 3.888 3.911 3.934 3.957 3.980 4.003 4.026
|
||||
4.049 4.072 4.095 4.118 4.141 4.164 4.187 4.210 4.233 4.256
|
||||
4.279 4.302 4.325 4.348 4.371 4.394 4.417 4.439 4.462 4.485
|
||||
4.508 4.531 4.554 4.577 4.600 4.622 4.645 4.668 4.691 4.714
|
||||
4.737 4.759 4.782 4.805 4.828 4.851 4.873 4.896 4.919 4.942
|
||||
|
||||
4.964 4.987 5.010 5.033 5.055 5.078 5.101 5.124 5.146 5.169
|
||||
5.192 5.214 5.237 5.260 5.282 5.305 5.327 5.350 5.373 5.395
|
||||
5.418 5.440 5.463 5.486 5.508 5.531 5.553 5.576 5.598 5.621
|
||||
5.643 5.666 5.688 5.711 5.733 5.756 5.778 5.801 5.823 5.846
|
||||
5.868 5.891 5.913 5.936 5.958 5.980 6.003 6.025 6.048 6.070
|
||||
|
||||
6.092 6.115 6.137 6.160 6.182 6.204 6.227 6.249 6.271 6.294
|
||||
6.316 6.338 6.361 6.383 6.405 6.428 6.450 6.472 6.494 6.517
|
||||
6.539 6.561 6.583 6.606 6.628 6.650 6.672 6.695 6.717 6.739
|
||||
6.761 6.784 6.806 6.828 6.850 6.873 6.895 6.917 6.939 6.961
|
||||
6.984 7.006 7.028 7.050 7.072 7.094 7.117 7.139 7.161 7.183
|
||||
|
||||
7.205 7.228 7.250 7.272 7.294 7.316 7.338 7.361 7.383 7.405
|
||||
7.427 7.449 7.471 7.494 7.516 7.538 7.560 7.582 7.604 7.627
|
||||
7.649 7.671 7.693 7.715 7.737 7.760 7.782 7.804 7.826 7.848
|
||||
7.870 7.893 7.915 7.937 7.959 7.981 8.003 8.026 8.048 8.070
|
||||
8.092 8.114 8.137 8.159 8.181 8.203 8.225 8.248 8.270 8.292
|
||||
|
||||
8.314 8.336 8.359 8.381 8.403 8.425 8.448 8.470 8.492 8.514
|
||||
8.537 8.559 8.581 8.603 8.626 8.648 8.670 8.692 8.715 8.737
|
||||
8.759 8.782 8.804 8.826 8.849 8.871 8.893 8.916 8.938 8.960
|
||||
8.983 9.005 9.027 9.050 9.072 9.094 9.117 9.139 9.161 9.184
|
||||
9.206 9.229 9.251 9.273 9.296 9.318 9.341 9.363 9.385 9.408
|
||||
|
||||
9.430 9.453 9.475 9.498 9.520 9.543 9.565 9.588 9.610 9.633
|
||||
9.655 9.678 9.700 9.723 9.745 9.768 9.790 9.813 9.835 9.858
|
||||
9.880 9.903 9.926 9.948 9.971 9.993 10.016 10.038 10.061 10.084
|
||||
10.106 10.129 10.151 10.174 10.197 10.219 10.242 10.265 10.287 10.310
|
||||
10.333 10.355 10.378 10.401 10.423 10.446 10.469 10.491 10.514 10.537
|
||||
|
||||
10.560 10.582 10.605 10.628 10.650 10.673 10.696 10.719 10.741 10.764
|
||||
10.787 10.810 10.833 10.855 10.878 10.901 10.924 10.947 10.969 10.992
|
||||
11.015 11.038 11.061 11.083 11.106 11.129 11.152 11.175 11.198 11.221
|
||||
11.243 11.266 11.289 11.312 11.335 11.358 11.381 11.404 11.426 11.449
|
||||
11.472 11.495 11.518 11.541 11.564 11.587 11.610 11.633 11.656 11.679
|
||||
|
||||
11.702 11.725 11.748 11.770 11.793 11.816 11.839 11.862 11.885 11.908
|
||||
11.931 11.954 11.977 12.000 12.023 12.046 12.069 12.092 12.115 12.138
|
||||
12.161 12.184 12.207 12.230 12.254 12.277 12.300 12.323 12.346 12.369
|
||||
12.392 12.415 12.438 12.461 12.484 12.507 12.530 12.553 12.576 12.599
|
||||
12.623 12.646 12.669 12.692 12.715 12.738 12.761 12.784 12.807 12.831
|
||||
|
||||
12.854 12.877 12.900 12.923 12.946 12.969 12.992 13.016 13.039 13.062
|
||||
13.085 13.108 13.131 13.154 13.178 13.201 13.224 13.247 13.270 13.293
|
||||
13.317 13.340 13.363 13.386 13.409 13.433 13.456 13.479 13.502 13.525
|
||||
13.549 13.572 13.595 13.618 13.641 13.665 13.688 13.711 13.734 13.757
|
||||
13.781 13.804 13.827 13.850 13.874 13.897 13.920 13.943 13.967 13.990
|
||||
|
||||
14.013 14.036 14.060 14.083 14.106 14.129 14.153 14.176 14.199 14.222
|
||||
14.246 14.269 14.292 14.316 14.339 14.362 14.385 14.409 14.432 14.455
|
||||
14.479 14.502 14.525 14.548 14.572 14.595 14.618 14.642 14.665 14.688
|
||||
14.712 14.735 14.758 14.782 14.805 14.828 14.852 14.875 14.898 14.922
|
||||
14.945 14.968 14.992 15.015 15.038 15.062 15.085 15.108 15.132 15.155
|
||||
|
||||
15.178 15.202 15.225 15.248 15.272 15.295 15.318 15.342 15.365 15.389
|
||||
15.412 15.435 15.459 15.482 15.505 15.529 15.552 15.576 15.599 15.622
|
||||
15.646 15.669 15.693 15.716 15.739 15.763 15.786 15.810 15.833 15.856
|
||||
15.880 15.903 15.927 15.950 15.974 15.997 16.020 16.044 16.067 16.091
|
||||
16.114 16.138 16.161 16.184 16.208 16.231 16.255 16.278 16.302 16.325
|
||||
|
||||
16.349 16.372 16.395 16.419 16.442 16.466 16.489 16.513 16.536 16.560
|
||||
16.583 16.607 16.630 16.654 16.677 16.700 16.724 16.747 16.771 16.794
|
||||
16.818 16.841 16.865 16.888 16.912 16.935 16.959 16.982 17.006 17.029
|
||||
17.053 17.076 17.100 17.123 17.147 17.170 17.194 17.217 17.241 17.264
|
||||
17.288 17.311 17.335 17.358 17.382 17.406 17.429 17.453 17.476 17.500
|
||||
|
||||
17.523 17.547 17.570 17.594 17.617 17.641 17.664 17.688 17.711 17.735
|
||||
17.759 17.782 17.806 17.829 17.853 17.876 17.900 17.923 17.947 17.971
|
||||
17.994 18.018 18.041 18.065 18.088 18.112 18.136 18.159 18.183 18.206
|
||||
18.230 18.253 18.277 18.301 18.324 18.348 18.371 18.395 18.418 18.442
|
||||
18.466 18.489 18.513 18.536 18.560 18.584 18.607 18.631 18.654 18.678
|
||||
|
||||
18.702 18.725 18.749 18.772 18.796 18.820 18.843 18.867 18.890 18.914
|
||||
18.938 18.961 18.985 19.008 19.032 19.056 19.079 19.103 19.127 19.150
|
||||
19.174 19.197 19.221 19.245 19.268 19.292 19.316 19.339 19.363 19.386
|
||||
19.410 19.434 19.457 19.481 19.505 19.528 19.552 19.576 19.599 19.623
|
||||
19.646 19.670 19.694 19.717 19.741 19.765 19.788 19.812 19.836 19.859
|
||||
|
||||
19.883 19.907 19.930 19.954 19.978 20.001 20.025 20.049 20.072 20.096
|
||||
20.120 20.143 20.167 20.190 20.214 20.238 20.261 20.285 20.309 20.332
|
||||
20.356 20.380 20.403 20.427 20.451 20.474 20.498 20.522 20.545 20.569
|
||||
20.593 20.616 20.640 20.664 20.688 20.711 20.735 20.759 20.782 20.806
|
||||
20.830 20.853 20.877 20.901 20.924 20.948 20.972 20.995 21.019 21.043
|
||||
|
||||
21.066 21.090 21.114 21.137 21.161 21.185 21.208 21.232 21.256 21.280
|
||||
21.303 21.327 21.351 21.374 21.398 21.422 21.445 21.469 21.493 21.516
|
||||
21.540 21.564 21.587 21.611 21.635 21.659 21.682 21.706 21.730 21.753
|
||||
21.777 21.801 21.824 21.848 21.872 21.895 21.919 21.943 21.966 21.990
|
||||
22.014 22.038 22.061 22.085 22.109 22.132 22.156 22.180 22.203 22.227
|
||||
|
||||
22.251 22.274 22.298 22.322 22.346 22.369 22.393 22.417 22.440 22.464
|
||||
22.488 22.511 22.535 22.559 22.582 22.606 22.630 22.654 22.677 22.701
|
||||
22.725 22.748 22.772 22.796 22.819 22.843 22.867 22.890 22.914 22.938
|
||||
22.961 22.985 23.009 23.032 23.056 23.080 23.104 23.127 23.151 23.175
|
||||
23.198 23.222 23.246 23.269 23.293 23.317 23.340 23.364 23.388 23.411
|
||||
|
||||
23.435 23.459 23.482 23.506 23.530 23.553 23.577 23.601 23.624 23.648
|
||||
23.672 23.695 23.719 23.743 23.766 23.790 23.814 23.837 23.861 23.885
|
||||
23.908 23.932 23.956 23.979 24.003 24.027 24.050 24.074 24.098 24.121
|
||||
24.145 24.169 24.192 24.216 24.240 24.263 24.287 24.311 24.334 24.358
|
||||
24.382 24.405 24.429 24.453 24.476 24.500 24.523 24.547 24.571 24.594
|
||||
|
||||
24.618 24.642 24.665 24.689 24.713 24.736 24.760 24.783 24.807 24.831
|
||||
24.854 24.878 24.902 24.925 24.949 24.972 24.996 25.020 25.043 25.067
|
||||
25.091 25.114 25.138 25.161 25.185 25.209 25.232 25.256 25.279 25.303
|
||||
25.327 25.350 25.374 25.397 25.421 25.445 25.468 25.492 25.515 25.539
|
||||
25.563 25.586 25.610 25.633 25.657 25.681 25.704 25.728 25.751 25.775
|
||||
|
||||
25.799 25.822 25.846 25.869 25.893 25.916 25.940 25.964 25.987 26.011
|
||||
26.034 26.058 26.081 26.105 26.128 26.152 26.176 26.199 26.223 26.246
|
||||
26.270 26.293 26.317 26.340 26.364 26.387 26.411 26.435 26.458 26.482
|
||||
26.505 26.529 26.552 26.576 26.599 26.623 26.646 26.670 26.693 26.717
|
||||
26.740 26.764 26.787 26.811 26.834 26.858 26.881 26.905 26.928 26.952
|
||||
|
||||
26.975 26.999 27.022 27.046 27.069 27.093 27.116 27.140 27.163 27.187
|
||||
27.210 27.234 27.257 27.281 27.304 27.328 27.351 27.375 27.398 27.422
|
||||
27.445 27.468 27.492 27.515 27.539 27.562 27.586 27.609 27.633 27.656
|
||||
27.679 27.703 27.726 27.750 27.773 27.797 27.820 27.843 27.867 27.890
|
||||
27.914 27.937 27.961 27.984 28.007 28.031 28.054 28.078 28.101 28.124
|
||||
|
||||
28.148 28.171 28.195 28.218 28.241 28.265 28.288 28.311 28.335 28.358
|
||||
28.382 28.405 28.428 28.452 28.475 28.498 28.522 28.545 28.569 28.592
|
||||
28.615 28.639 28.662 28.685 28.709 28.732 28.755 28.779 28.802 28.825
|
||||
28.849 28.872 28.895 28.919 28.942 28.965 28.988 29.012 29.035 29.058
|
||||
29.082 29.105 29.128 29.152 29.175 29.198 29.221 29.245 29.268 29.291
|
||||
|
||||
29.315 29.338 29.361 29.384 29.408 29.431 29.454 29.477 29.501 29.524
|
||||
29.547 29.570 29.594 29.617 29.640 29.663 29.687 29.710 29.733 29.756
|
||||
29.780 29.803 29.826 29.849 29.872 29.896 29.919 29.942 29.965 29.989
|
||||
30.012 30.035 30.058 30.081 30.104 30.128 30.151 30.174 30.197 30.220
|
||||
30.244 30.267 30.290 30.313 30.336 30.359 30.383 30.406 30.429 30.452
|
||||
|
||||
30.475 30.498 30.521 30.545 30.568 30.591 30.614 30.637 30.660 30.683
|
||||
30.706 30.730 30.753 30.776 30.799 30.822 30.845 30.868 30.891 30.914
|
||||
30.937 30.961 30.984 31.007 31.030 31.053 31.076 31.099 31.122 31.145
|
||||
31.168 31.191 31.214 31.237 31.260 31.283 31.306 31.329 31.353 31.376
|
||||
31.399 31.422 31.445 31.468 31.491 31.514 31.537 31.560 31.583 31.606
|
||||
|
||||
31.629 31.652 31.675 31.698 31.721 31.744 31.767 31.790 31.813 31.836
|
||||
31.859 31.882 31.905 31.927 31.950 31.973 31.996 32.019 32.042 32.065
|
||||
32.088 32.111 32.134 32.157 32.180 32.203 32.226 32.249 32.272 32.294
|
||||
32.317 32.340 32.363 32.386 32.409 32.432 32.455 32.478 32.501 32.523
|
||||
32.546 32.569 32.592 32.615 32.638 32.661 32.683 32.706 32.729 32.752
|
||||
|
||||
32.775 32.798 32.821 32.843 32.866 32.889 32.912 32.935 32.958 32.980
|
||||
33.003 33.026 33.049 33.072 33.094 33.117 33.140 33.163 33.186 33.208
|
||||
33.231 33.254 33.277 33.300 33.322 33.345 33.368 33.391 33.413 33.436
|
||||
33.459 33.482 33.504 33.527 33.550 33.573 33.595 33.618 33.641 33.664
|
||||
33.686 33.709 33.732 33.754 33.777 33.800 33.823 33.845 33.868 33.891
|
||||
|
||||
33.913 33.936 33.959 33.981 34.004 34.027 34.049 34.072 34.095 34.117
|
||||
34.140 34.163 34.185 34.208 34.231 34.253 34.276 34.299 34.321 34.344
|
||||
34.366 34.389 34.412 34.434 34.457 34.480 34.502 34.525 34.547 34.570
|
||||
34.593 34.615 34.638 34.660 34.683 34.705 34.728 34.751 34.773 34.796
|
||||
34.818 34.841 34.863 34.886 34.909 34.931 34.954 34.976 34.999 35.021
|
||||
|
||||
35.044 35.066 35.089 35.111 35.134 35.156 35.179 35.201 35.224 35.246
|
||||
35.269 35.291 35.314 35.336 35.359 35.381 35.404 35.426 35.449 35.471
|
||||
35.494 35.516 35.539 35.561 35.583 35.606 35.628 35.651 35.673 35.696
|
||||
35.718 35.741 35.763 35.785 35.808 35.830 35.853 35.875 35.897 35.920
|
||||
35.942 35.965 35.987 36.009 36.032 36.054 36.077 36.099 36.121 36.144
|
||||
|
||||
36.166 36.188 36.211 36.233 36.256 36.278 36.300 36.323 36.345 36.367
|
||||
36.390 36.412 36.434 36.457 36.479 36.501 36.524 36.546 36.568 36.590
|
||||
36.613 36.635 36.657 36.680 36.702 36.724 36.746 36.769 36.791 36.813
|
||||
36.836 36.858 36.880 36.902 36.925 36.947 36.969 36.991 37.014 37.036
|
||||
37.058 37.080 37.103 37.125 37.147 37.169 37.191 37.214 37.236 37.258
|
||||
|
||||
37.280 37.303 37.325 37.347 37.369 37.391 37.413 37.436 37.458 37.480
|
||||
37.502 37.524 37.547 37.569 37.591 37.613 37.635 37.657 37.679 37.702
|
||||
37.724 37.746 37.768 37.790 37.812 37.834 37.857 37.879 37.901 37.923
|
||||
37.945 37.967 37.989 38.011 38.033 38.055 38.078 38.100 38.122 38.144
|
||||
38.166 38.188 38.210 38.232 38.254 38.276 38.298 38.320 38.342 38.364
|
||||
|
||||
38.387 38.409 38.431 38.453 38.475 38.497 38.519 38.541 38.563 38.585
|
||||
38.607 38.629 38.651 38.673 38.695 38.717 38.739 38.761 38.783 38.805
|
||||
38.827 38.849 38.871 38.893 38.915 38.937 38.959 38.981 39.003 39.024
|
||||
39.046 39.068 39.090 39.112 39.134 39.156 39.178 39.200 39.222 39.244
|
||||
39.266 39.288 39.310 39.331 39.353 39.375 39.397 39.419 39.441 39.463
|
||||
|
||||
39.485 39.507 39.529 39.550 39.572 39.594 39.616 39.638 39.660 39.682
|
||||
39.703 39.725 39.747 39.769 39.791 39.813 39.835 39.856 39.878 39.900
|
||||
39.922 39.944 39.965 39.987 40.009 40.031 40.053 40.075 40.096 40.118
|
||||
40.140 40.162 40.183 40.205 40.227 40.249 40.271 40.292 40.314 40.336
|
||||
40.358 40.379 40.401 40.423 40.445 40.466 40.488 40.510 40.532 40.553
|
||||
|
||||
40.575 40.597 40.619 40.640 40.662 40.684 40.705 40.727 40.749 40.770
|
||||
40.792 40.814 40.836 40.857 40.879 40.901 40.922 40.944 40.966 40.987
|
||||
41.009 41.031 41.052 41.074 41.096 41.117 41.139 41.161 41.182 41.204
|
||||
41.225 41.247 41.269 41.290 41.312 41.334 41.355 41.377 41.398 41.420
|
||||
41.442 41.463 41.485 41.506 41.528 41.550 41.571 41.593 41.614 41.636
|
||||
|
||||
41.657 41.679 41.701 41.722 41.744 41.765 41.787 41.808 41.830 41.851
|
||||
41.873 41.895 41.916 41.938 41.959 41.981 42.002 42.024 42.045 42.067
|
||||
42.088 42.110 42.131 42.153 42.174 42.196 42.217 42.239 42.260 42.282
|
||||
42.303 42.325 42.346 42.367 42.389 42.410 42.432 42.453 42.475 42.496
|
||||
42.518 42.539 42.560 42.582 42.603 42.625 42.646 42.668 42.689 42.710
|
||||
|
||||
42.732 42.753 42.775 42.796 42.817 42.839 42.860 42.882 42.903 42.924
|
||||
42.946 42.967 42.989 43.010 43.031 43.053 43.074 43.095 43.117 43.138
|
||||
43.159 43.181 43.202 43.223 43.245 43.266 43.287 43.309 43.330 43.351
|
||||
43.373 43.394 43.415 43.436 43.458 43.479 43.500 43.522 43.543 43.564
|
||||
43.585 43.607 43.628 43.649 43.671 43.692 43.713 43.734 43.756 43.777
|
||||
|
||||
43.798 43.819 43.841 43.862 43.883 43.904 43.925 43.947 43.968 43.989
|
||||
44.010 44.031 44.053 44.074 44.095 44.116 44.137 44.159 44.180 44.201
|
||||
44.222 44.243 44.265 44.286 44.307 44.328 44.349 44.370 44.391 44.413
|
||||
44.434 44.455 44.476 44.497 44.518 44.539 44.560 44.582 44.603 44.624
|
||||
44.645 44.666 44.687 44.708 44.729 44.750 44.771 44.793 44.814 44.835
|
||||
|
||||
44.856 44.877 44.898 44.919 44.940 44.961 44.982 45.003 45.024 45.045
|
||||
45.066 45.087 45.108 45.129 45.150 45.171 45.192 45.213 45.234 45.255
|
||||
45.276 45.297 45.318 45.339 45.360 45.381 45.402 45.423 45.444 45.465
|
||||
45.486 45.507 45.528 45.549 45.570 45.591 45.612 45.633 45.654 45.675
|
||||
45.695 45.716 45.737 45.758 45.779 45.800 45.821 45.842 45.863 45.884
|
||||
|
||||
45.904 45.925 45.946 45.967 45.988 46.009 46.030 46.051 46.071 46.092
|
||||
46.113 46.134 46.155 46.176 46.196 46.217 46.238 46.259 46.280 46.300
|
||||
46.321 46.342 46.363 46.384 46.404 46.425 46.446 46.467 46.488 46.508
|
||||
46.529 46.550 46.571 46.591 46.612 46.633 46.654 46.674 46.695 46.716
|
||||
46.737 46.757 46.778 46.799 46.819 46.840 46.861 46.881 46.902 46.923
|
||||
|
||||
46.944 46.964 46.985 47.006 47.026 47.047 47.068 47.088 47.109 47.130
|
||||
47.150 47.171 47.191 47.212 47.233 47.253 47.274 47.295 47.315 47.336
|
||||
47.356 47.377 47.398 47.418 47.439 47.459 47.480 47.500 47.521 47.542
|
||||
47.562 47.583 47.603 47.624 47.644 47.665 47.685 47.706 47.726 47.747
|
||||
47.767 47.788 47.808 47.829 47.849 47.870 47.890 47.911 47.931 47.952
|
||||
|
||||
47.972 47.993 48.013 48.034 48.054 48.075 48.095 48.116 48.136 48.156
|
||||
48.177 48.197 48.218 48.238 48.258 48.279 48.299 48.320 48.340 48.360
|
||||
48.381 48.401 48.422 48.442 48.462 48.483 48.503 48.523 48.544 48.564
|
||||
48.584 48.605 48.625 48.645 48.666 48.686 48.706 48.727 48.747 48.767
|
||||
48.787 48.808 48.828 48.848 48.869 48.889 48.909 48.929 48.950 48.970
|
||||
|
||||
48.990 49.010 49.031 49.051 49.071 49.091 49.111 49.132 49.152 49.172
|
||||
49.192 49.212 49.233 49.253 49.273 49.293 49.313 49.333 49.354 49.374
|
||||
49.394 49.414 49.434 49.454 49.474 49.495 49.515 49.535 49.555 49.575
|
||||
49.595 49.615 49.635 49.655 49.675 49.696 49.716 49.736 49.756 49.776
|
||||
49.796 49.816 49.836 49.856 49.876 49.896 49.916 49.936 49.956 49.976
|
||||
|
||||
49.996 50.016 50.036 50.056 50.076 50.096 50.116 50.136 50.156 50.176
|
||||
50.196 50.216 50.236 50.256 50.276 50.296 50.315 50.335 50.355 50.375
|
||||
50.395 50.415 50.435 50.455 50.475 50.494 50.514 50.534 50.554 50.574
|
||||
50.594 50.614 50.633 50.653 50.673 50.693 50.713 50.733 50.752 50.772
|
||||
50.792 50.812 50.832 50.851 50.871 50.891 50.911 50.930 50.950 50.970
|
||||
|
||||
50.990 51.009 51.029 51.049 51.069 51.088 51.108 51.128 51.148 51.167
|
||||
51.187 51.207 51.226 51.246 51.266 51.285 51.305 51.325 51.344 51.364
|
||||
51.384 51.403 51.423 51.443 51.462 51.482 51.501 51.521 51.541 51.560
|
||||
51.580 51.599 51.619 51.639 51.658 51.678 51.697 51.717 51.736 51.756
|
||||
51.776 51.795 51.815 51.834 51.854 51.873 51.893 51.912 51.932 51.951
|
||||
|
||||
51.971 51.990 52.010 52.029 52.049 52.068 52.088 52.107 52.127 52.146
|
||||
52.165 52.185 52.204 52.224 52.243 52.263 52.282 52.301 52.321 52.340
|
||||
52.360 52.379 52.398 52.418 52.437 52.457 52.476 52.495 52.515 52.534
|
||||
52.553 52.573 52.592 52.611 52.631 52.650 52.669 52.689 52.708 52.727
|
||||
52.747 52.766 52.785 52.805 52.824 52.843 52.862 52.882 52.901 52.920
|
||||
|
||||
52.939 52.959 52.978 52.997 53.016 53.036 53.055 53.074 53.093 53.113
|
||||
53.132 53.151 53.170 53.189 53.209 53.228 53.247 53.266 53.285 53.304
|
||||
53.324 53.343 53.362 53.381 53.400 53.419 53.439 53.458 53.477 53.496
|
||||
53.515 53.534 53.553 53.572 53.592 53.611 53.630 53.649 53.668 53.687
|
||||
53.706 53.725 53.744 53.763 53.782 53.801 53.821 53.840 53.859 53.878
|
||||
|
||||
53.897 53.916 53.935 53.954 53.973 53.992 54.011 54.030 54.049 54.068
|
||||
54.087 54.106 54.125 54.144 54.163 54.182 54.201 54.220 54.239 54.258
|
||||
54.277 54.296 54.315 54.334 54.353 54.372 54.391 54.410 54.429 54.447
|
||||
54.466 54.485 54.504 54.523 54.542 54.561 54.580 54.599 54.618 54.637
|
||||
54.656 54.675 54.694 54.712 54.731 54.750 54.769 54.788 54.807 54.826
|
||||
|
||||
54.845
|
||||
@@ -1,9 +1,10 @@
|
||||
/* $Id$ */
|
||||
|
||||
/* cvtBpt.c - Convert using breakpoint table */
|
||||
/*
|
||||
* Author: Janet Anderson
|
||||
* Date: 9-19-91
|
||||
/* cvtBpt.c - Convert using breakpoint table
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 04OCT95
|
||||
* This is adaptation of old bldCvtTable
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
@@ -29,63 +30,76 @@
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* nnn mm-dd-yy nnn Comment
|
||||
* .02 05-18-92 rcz New database access
|
||||
* .03 12-11-92 mrk ANSI prototypes
|
||||
* 01 04OCT95 mrk Taken from old bldCvtTable
|
||||
*/
|
||||
#include <vxWorks.h>
|
||||
#include <types.h>
|
||||
#include <stdioLib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <cvtTable.h>
|
||||
#include <dbAccess.h>
|
||||
#include <ellLib.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <cvtTable.h>
|
||||
#include <epicsPrint.h>
|
||||
|
||||
extern struct dbBase *pdbBase;
|
||||
extern struct dbBase *pdbbase;
|
||||
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
long cvtRawToEngBpt(double *pval,short linr,short init, void **ppbrk, short *plbrk)
|
||||
#else /* __STDC__ */
|
||||
long cvtRawToEngBpt(pval, linr, init, ppbrk, plbrk)
|
||||
double *pval;
|
||||
short linr;
|
||||
short init;
|
||||
void **ppbrk;
|
||||
short *plbrk;
|
||||
#endif /* __STDC__ */
|
||||
static brkTable *findBrkTable(short linr)
|
||||
{
|
||||
double val=*pval;
|
||||
long status=0;
|
||||
struct brkTable *pbrkTable;
|
||||
struct brkInt *pInt;
|
||||
struct brkInt *pnxtInt;
|
||||
short lbrk;
|
||||
int number;
|
||||
struct arrBrkTable *pcvtTable;
|
||||
brkTable *pbrkTable;
|
||||
dbMenu *pdbMenu;
|
||||
char name[50];
|
||||
char *pname = name;
|
||||
int len,ind;
|
||||
|
||||
if(linr < 2) return(-1);
|
||||
if(init==TRUE || *ppbrk == NULL) { /*must find breakpoint table*/
|
||||
if( !(pcvtTable=pdbBase->pcvtTable) || (pcvtTable->number < linr)
|
||||
|| (!(pcvtTable->papBrkTable[linr]))) {
|
||||
errMessage(S_db_badField,"Breakpoint Table not Found");
|
||||
return(S_db_badField);
|
||||
}
|
||||
*ppbrk = (void *)(pcvtTable->papBrkTable[linr]);
|
||||
/* Just start at the beginning */
|
||||
*plbrk=0;
|
||||
}
|
||||
|
||||
pbrkTable = (struct brkTable *)*ppbrk;
|
||||
number = pbrkTable->number;
|
||||
lbrk = *plbrk;
|
||||
/*make sure we dont go off end of table*/
|
||||
if( (lbrk+1) >= number ) lbrk--;
|
||||
pInt = pbrkTable->papBrkInt[lbrk];
|
||||
pnxtInt = pbrkTable->papBrkInt[lbrk+1];
|
||||
/* find entry for increased value */
|
||||
while( (pnxtInt->raw) <= val ) {
|
||||
pdbMenu = dbFindMenu(pdbbase,"menuConvert");
|
||||
len = strlen(pdbMenu->papChoiceValue[linr]);
|
||||
if(len>=sizeof(name)) {
|
||||
epicsPrintf("Break Tables(findBrkTable) choice name too long\n");
|
||||
return(0);
|
||||
}
|
||||
strcpy(pname,pdbMenu->papChoiceValue[linr]);
|
||||
for(ind=0; ind<strlen(pname); ind++) {
|
||||
if(!isalnum(pname[ind])) {
|
||||
pname[ind] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
pbrkTable = dbFindBrkTable(pdbbase,pname);
|
||||
return(pbrkTable);
|
||||
}
|
||||
|
||||
long cvtRawToEngBpt(double *pval,short linr,short init, void **ppbrk,
|
||||
short *plbrk)
|
||||
{
|
||||
double val=*pval;
|
||||
long status=0;
|
||||
brkTable *pbrkTable;
|
||||
brkInt *pInt;
|
||||
brkInt *pnxtInt;
|
||||
short lbrk;
|
||||
int number;
|
||||
|
||||
|
||||
if(linr < 2) return(-1);
|
||||
if(init==TRUE || *ppbrk == NULL) { /*must find breakpoint table*/
|
||||
pbrkTable = findBrkTable(linr);
|
||||
if(!pbrkTable) return(S_dbLib_badField);
|
||||
*ppbrk = (void *)pbrkTable;
|
||||
/* Just start at the beginning */
|
||||
*plbrk=0;
|
||||
}
|
||||
pbrkTable = (struct brkTable *)*ppbrk;
|
||||
number = pbrkTable->number;
|
||||
lbrk = *plbrk;
|
||||
/*make sure we dont go off end of table*/
|
||||
if( (lbrk+1) >= number ) lbrk--;
|
||||
pInt = pbrkTable->papBrkInt[lbrk];
|
||||
pnxtInt = pbrkTable->papBrkInt[lbrk+1];
|
||||
/* find entry for increased value */
|
||||
while( (pnxtInt->raw) <= val ) {
|
||||
lbrk++;
|
||||
pInt = pbrkTable->papBrkInt[lbrk];
|
||||
if( lbrk >= number-1) {
|
||||
@@ -93,54 +107,40 @@ short *plbrk;
|
||||
break;
|
||||
}
|
||||
pnxtInt = pbrkTable->papBrkInt[lbrk+1];
|
||||
}
|
||||
while( (pInt->raw) > val) {
|
||||
}
|
||||
while( (pInt->raw) > val) {
|
||||
if(lbrk==0) {
|
||||
status=1;
|
||||
break;
|
||||
}
|
||||
lbrk--;
|
||||
pInt = pbrkTable->papBrkInt[lbrk];
|
||||
}
|
||||
*plbrk = lbrk;
|
||||
*pval = pInt->eng + (val - pInt->raw) * pInt->slope;
|
||||
return(status);
|
||||
}
|
||||
*plbrk = lbrk;
|
||||
*pval = pInt->eng + (val - pInt->raw) * pInt->slope;
|
||||
return(status);
|
||||
}
|
||||
|
||||
#ifdef __STDC__
|
||||
long cvtEngToRawBpt(double *pval,short linr,short init,
|
||||
void **ppbrk,short *plbrk)
|
||||
#else /* __STDC__ */
|
||||
long cvtEngToRawBpt(pval,linr, init,ppbrk,plbrk)
|
||||
double *pval;
|
||||
short linr;
|
||||
short init;
|
||||
void **ppbrk;
|
||||
short *plbrk;
|
||||
#endif /* __STDC__ */
|
||||
{
|
||||
double val=*pval;
|
||||
long status=0;
|
||||
struct brkTable *pbrkTable;
|
||||
struct brkInt *pInt;
|
||||
struct brkInt *pnxtInt;
|
||||
short lbrk;
|
||||
int number;
|
||||
struct arrBrkTable *pcvtTable;
|
||||
double val=*pval;
|
||||
long status=0;
|
||||
brkTable *pbrkTable;
|
||||
brkInt *pInt;
|
||||
brkInt *pnxtInt;
|
||||
short lbrk;
|
||||
int number;
|
||||
|
||||
|
||||
if(linr < 2) return(-1);
|
||||
if(init==TRUE || *ppbrk == NULL) { /*must find breakpoint table*/
|
||||
if( !(pcvtTable=pdbBase->pcvtTable) || (pcvtTable->number < linr)
|
||||
|| (!(pcvtTable->papBrkTable[linr]))) {
|
||||
errMessage(S_db_badField,"Breakpoint Table not Found");
|
||||
return(S_db_badField);
|
||||
}
|
||||
*ppbrk = (void *)(pcvtTable->papBrkTable[linr]);
|
||||
pbrkTable = findBrkTable(linr);
|
||||
if(!pbrkTable) return(S_dbLib_badField);
|
||||
*ppbrk = (void *)pbrkTable;
|
||||
/* Just start at the beginning */
|
||||
*plbrk=0;
|
||||
}
|
||||
|
||||
pbrkTable = (struct brkTable *)*ppbrk;
|
||||
number = pbrkTable->number;
|
||||
lbrk = *plbrk;
|
||||
405
src/bpt/makeBpt.c
Normal file
405
src/bpt/makeBpt.c
Normal file
@@ -0,0 +1,405 @@
|
||||
/* $Id$
|
||||
* Author: Marty Kraimer
|
||||
* Date: 9/28/95
|
||||
* Replacement for old bldCvtTable
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 28SEP95 mrk Replace old bldCvtTable
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <dbBase.h>
|
||||
#include <ellLib.h>
|
||||
#include <cvtTable.h>
|
||||
|
||||
#define MAX_LINE_SIZE 160
|
||||
#define MAX_BREAKS 100
|
||||
struct brkCreateInfo {
|
||||
float engLow; /* Lowest value desired: engineering units */
|
||||
float engHigh; /* Highest value desired: engineering units */
|
||||
float rawLow; /* Raw value for EngLow */
|
||||
float rawHigh; /* Raw value for EngHigh */
|
||||
float accuracy; /* accuracy desired in engineering units */
|
||||
float tblEngFirst;/* First table value: engineering units */
|
||||
float tblEngLast; /* Last table value: engineering units */
|
||||
float tblEngDelta;/* Change per table entry: eng units */
|
||||
long nTable; /* number of table entries */
|
||||
/* (last-first)/delta + 1 */
|
||||
float *pTable; /* addr of data table */
|
||||
} brkCreateInfo;
|
||||
|
||||
brkInt brkint[MAX_BREAKS];
|
||||
|
||||
static int create_break(struct brkCreateInfo *pbci, brkInt *pabrkInt,
|
||||
int max_breaks, int *n_breaks);
|
||||
static char inbuf[MAX_LINE_SIZE];
|
||||
static int linenum=0;
|
||||
|
||||
typedef struct dataList{
|
||||
struct dataList *next;
|
||||
float value;
|
||||
}dataList;
|
||||
|
||||
static int getNumber(char **pbeg, float *value)
|
||||
{
|
||||
int nchars=0;
|
||||
|
||||
while(isspace(**pbeg) && **pbeg!= '\0') (*pbeg)++;
|
||||
if(**pbeg == '!' || **pbeg == '\0') return(-1);
|
||||
if(sscanf(*pbeg,"%f%n",value,&nchars)!=1) return(-1);
|
||||
*pbeg += nchars;
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void errExit(char *pmessage)
|
||||
{
|
||||
fprintf(stderr,pmessage);
|
||||
fprintf(stderr,"\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char *pbeg;
|
||||
char *pend;
|
||||
float value;
|
||||
char *pname;
|
||||
dataList *phead;
|
||||
dataList *pdataList;
|
||||
dataList *pnext;
|
||||
float *pdata;
|
||||
long ndata;
|
||||
int nBreak,len,n;
|
||||
char *outFilename;
|
||||
char *pext;
|
||||
FILE *outFile;
|
||||
FILE *inFile;
|
||||
char *plastSlash;
|
||||
|
||||
|
||||
if(argc!=2) {
|
||||
fprintf(stderr,"usage: makeBpt file.data\n");
|
||||
exit(-1);
|
||||
}
|
||||
plastSlash = strrchr(argv[1],'/');
|
||||
plastSlash = (plastSlash ? plastSlash+1 : argv[1]);
|
||||
outFilename = calloc(1,strlen(plastSlash)+2);
|
||||
strcpy(outFilename,plastSlash);
|
||||
pext = strstr(outFilename,".data");
|
||||
if(!pext) {
|
||||
fprintf(stderr,"Input file MUST have .data extension\n");
|
||||
exit(-1);
|
||||
}
|
||||
strcpy(pext,".ascii");
|
||||
inFile = fopen(argv[1],"r");
|
||||
if(!inFile) {
|
||||
fprintf(stderr,"Error opening %s\n",argv[1]);
|
||||
exit(-1);
|
||||
}
|
||||
outFile = fopen(outFilename,"w");
|
||||
if(!outFile) {
|
||||
fprintf(stderr,"Error opening %s\n",outFilename);
|
||||
exit(-1);
|
||||
}
|
||||
while(fgets(inbuf,MAX_LINE_SIZE,inFile)) {
|
||||
linenum++;
|
||||
inbuf[strlen(inbuf)] = '\0'; /* remove newline*/
|
||||
pbeg = inbuf;
|
||||
while(isspace(*pbeg) && *pbeg!= '\0') pbeg++;
|
||||
if(*pbeg == '!' || *pbeg == '\0') continue;
|
||||
while(*pbeg!='"' && *pbeg!= '\0') pbeg++;
|
||||
if(*pbeg!='"' ) errExit("Illegal Header");
|
||||
pbeg++; pend = pbeg;
|
||||
while(*pend!='"' && *pend!= '\0') pend++;
|
||||
if(*pend!='"') errExit("Illegal Header");
|
||||
len = pend - pbeg;
|
||||
if(len<=1) errExit("Illegal Header");
|
||||
pname = calloc(len,sizeof(char));
|
||||
strncpy(pname,pbeg,len);
|
||||
pbeg = pend + 1;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.engLow = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.rawLow = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.engHigh = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.rawHigh = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.accuracy = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.tblEngFirst = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.tblEngLast = value;
|
||||
if(getNumber(&pbeg,&value)) errExit("Illegal Header");
|
||||
brkCreateInfo.tblEngDelta = value;
|
||||
goto got_header;
|
||||
}
|
||||
errExit("Illegal Header");
|
||||
got_header:
|
||||
phead = pnext = 0;
|
||||
ndata = 0;
|
||||
errno = 0;
|
||||
while(fgets(inbuf,MAX_LINE_SIZE,inFile)) {
|
||||
float value;
|
||||
|
||||
inbuf[strlen(inbuf)] = '\0'; /* remove newline*/
|
||||
pbeg = inbuf;
|
||||
while(!getNumber(&pbeg,&value)) {
|
||||
ndata++;
|
||||
pdataList = (dataList *)calloc(1,sizeof(dataList));
|
||||
if(!phead)
|
||||
phead = pdataList;
|
||||
else
|
||||
pnext->next = pdataList;
|
||||
pdataList->value = value;
|
||||
pnext = pdataList;
|
||||
}
|
||||
}
|
||||
brkCreateInfo.nTable = ndata;
|
||||
pdata = (float *)calloc(brkCreateInfo.nTable,sizeof(float));
|
||||
pnext = phead;
|
||||
for(n=0; n<brkCreateInfo.nTable; n++) {
|
||||
pdata[n] = pnext->value;
|
||||
pdataList = pnext;
|
||||
pnext = pnext->next;
|
||||
free((void *)pdataList);
|
||||
}
|
||||
brkCreateInfo.pTable = pdata;
|
||||
if(create_break(&brkCreateInfo,&brkint[0],MAX_BREAKS,&nBreak))
|
||||
errExit("create_break failed\n");
|
||||
fprintf(outFile,"breaktable(%s) {\n",pname);
|
||||
for(n=0; n<nBreak; n++) {
|
||||
fprintf(outFile,"\t%f %f\n",brkint[n].raw,brkint[n].eng);
|
||||
}
|
||||
fprintf(outFile,"}\n");
|
||||
fclose(inFile);
|
||||
fclose(outFile);
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int create_break( struct brkCreateInfo *pbci, brkInt *pabrkInt,
|
||||
int max_breaks, int *n_breaks)
|
||||
{
|
||||
brkInt *pbrkInt;
|
||||
float *table = pbci->pTable;
|
||||
long ntable = pbci->nTable;
|
||||
double ilow,
|
||||
ihigh,
|
||||
tbllow,
|
||||
tblhigh,
|
||||
slope,
|
||||
offset;
|
||||
int ibeg,
|
||||
iend,
|
||||
i,
|
||||
inc,
|
||||
imax,
|
||||
n;
|
||||
double rawBeg,
|
||||
engBeg,
|
||||
rawEnd,
|
||||
engEnd,
|
||||
engCalc,
|
||||
engActual,
|
||||
error;
|
||||
int valid,
|
||||
all_ok,
|
||||
expanding;
|
||||
/* make checks to ensure that brkCreateInfo makes sense */
|
||||
if (pbci->engLow >= pbci->engHigh) {
|
||||
errExit("create_break: engLow >= engHigh");
|
||||
return (-1);
|
||||
}
|
||||
if ((pbci->engLow < pbci->tblEngFirst)
|
||||
|| (pbci->engHigh > pbci->tblEngLast)) {
|
||||
errExit("create_break: engLow > engHigh");
|
||||
return (-1);
|
||||
}
|
||||
if (pbci->tblEngDelta <= 0.0) {
|
||||
errExit("create_break: tblEngDelta <= 0.0");
|
||||
return (-1);
|
||||
}
|
||||
if (ntable < 3) {
|
||||
errExit("raw data must have at least 3 elements");
|
||||
return (-1);
|
||||
}
|
||||
/***************************************************************************
|
||||
Convert Table to raw values
|
||||
*
|
||||
* raw and table values are assumed to be related by an equation of the form:
|
||||
*
|
||||
* raw = slope*table + offset
|
||||
*
|
||||
* The following algorithm converts each table value to raw units
|
||||
*
|
||||
* 1) Finds the locations in Table corresponding to engLow and engHigh
|
||||
* Note that these locations need not be exact integers
|
||||
* 2) Interpolates to obtain table values corresponding to engLow and enghigh
|
||||
* we now have the equations:
|
||||
* rawLow = slope*tblLow + offset
|
||||
* rawHigh = slope*tblHigh + offset
|
||||
* 4) Solving these equations for slope and offset gives:
|
||||
* slope=(rawHigh-rawLow)/(tblHigh-tblLow)
|
||||
* offset=rawHigh-slope*tblHigh
|
||||
* 5) for each table value set table[i]=table[i]*slope+offset
|
||||
*************************************************************************/
|
||||
/* Find engLow in Table and then compute tblLow */
|
||||
ilow = (pbci->engLow - pbci->tblEngFirst) / (pbci->tblEngDelta);
|
||||
i = (int) ilow;
|
||||
if (i >= ntable - 1)
|
||||
i = ntable - 2;
|
||||
tbllow = table[i] + (table[i + 1] - table[i]) * (ilow - (float) i);
|
||||
/* Find engHigh in Table and then compute tblHigh */
|
||||
ihigh = (pbci->engHigh - pbci->tblEngFirst) / (pbci->tblEngDelta);
|
||||
i = (int) ihigh;
|
||||
if (i >= ntable - 1)
|
||||
i = ntable - 2;
|
||||
tblhigh = table[i] + (table[i + 1] - table[i]) * (ihigh - (float) i);
|
||||
/* compute slope and offset */
|
||||
slope = (pbci->rawHigh - pbci->rawLow) / (tblhigh - tbllow);
|
||||
offset = pbci->rawHigh - slope * tblhigh;
|
||||
/* convert table to raw units */
|
||||
for (i = 0; i < ntable; i++)
|
||||
table[i] = table[i] * slope + offset;
|
||||
|
||||
/*****************************************************************************
|
||||
* Now create break point table
|
||||
*
|
||||
* The algorithm does the following:
|
||||
*
|
||||
* It finds one breakpoint interval at a time. For each it does the following:
|
||||
*
|
||||
* 1) Use a relatively large portion of the remaining table as an interval
|
||||
* 2) It attempts to use the entire interval as a breakpoint interval
|
||||
* Success is determined by the following algorithm:
|
||||
* a) compute the slope using the entire interval
|
||||
* b) for each table entry in the interval determine the eng value
|
||||
* using the slope just determined.
|
||||
* c) compare the computed value with eng value associated with table
|
||||
* d) if all table entries are within the accuracy desired then success.
|
||||
* 3) If successful then attempt to expand the interval and try again.
|
||||
* Note that it is expanded by up to 1/10 of the table size.
|
||||
* 4) If not successful reduce the interval by 1 and try again.
|
||||
* Once the interval is being decreased it will never be increased again.
|
||||
* 5) The algorithm will ultimately fail or will have determined the optimum
|
||||
* breakpoint interval
|
||||
*************************************************************************/
|
||||
|
||||
/* Must start with table entry corresponding to engLow; */
|
||||
i = ilow;
|
||||
if (i >= ntable - 1)
|
||||
i = ntable - 2;
|
||||
rawBeg = table[i] + (table[i + 1] - table[i]) * (ilow - (float) i);
|
||||
engBeg = pbci->engLow;
|
||||
ibeg = (int) (ilow); /* Make sure that ibeg > ilow */
|
||||
if( ibeg < ilow ) ibeg = ibeg + 1;
|
||||
/* start first breakpoint interval */
|
||||
n = 1;
|
||||
pbrkInt = pabrkInt;
|
||||
pbrkInt->raw = rawBeg;
|
||||
pbrkInt->eng = engBeg;
|
||||
/* determine next breakpoint interval */
|
||||
while ((engBeg <= pbci->engHigh) && (ibeg < ntable - 1)) {
|
||||
/* determine next interval to try. Up to 1/10 full range */
|
||||
iend = ibeg;
|
||||
inc = (int) ((ihigh - ilow) / 10.0);
|
||||
if (inc < 1)
|
||||
inc = 1;
|
||||
valid = TRUE;
|
||||
/* keep trying intervals until cant do better */
|
||||
expanding = TRUE; /* originally we are trying larger and larger
|
||||
* intervals */
|
||||
while (valid) {
|
||||
imax = iend + inc;
|
||||
if (imax >= ntable) {
|
||||
/* don't go past end of table */
|
||||
imax = ntable - 1;
|
||||
inc = ntable - iend - 1;
|
||||
expanding = FALSE;
|
||||
}
|
||||
if (imax > (int) (ihigh + 1.0)) { /* Don't go to far past
|
||||
* engHigh */
|
||||
imax = (int) (ihigh + 1.0);
|
||||
inc = (int) (ihigh + 1.0) - iend;
|
||||
expanding = FALSE;
|
||||
}
|
||||
if (imax <= ibeg)
|
||||
break; /* failure */
|
||||
rawEnd = table[imax];
|
||||
engEnd = pbci->tblEngFirst + (float) imax *(pbci->tblEngDelta);
|
||||
slope = (engEnd - engBeg) / (rawEnd - rawBeg);
|
||||
all_ok = TRUE;
|
||||
for (i = ibeg + 1; i <= imax; i++) {
|
||||
engCalc = engBeg + slope * (table[i] - rawBeg);
|
||||
engActual = pbci->tblEngFirst + ((float) i) * (pbci->tblEngDelta);
|
||||
error = engCalc - engActual;
|
||||
if (error < 0.0)
|
||||
error = -error;
|
||||
if (error >= pbci->accuracy) {
|
||||
/* we will be trying smaller intervals */
|
||||
expanding = FALSE;
|
||||
/* just decrease inc and let while(valid) try again */
|
||||
inc--;
|
||||
all_ok = FALSE;
|
||||
break;
|
||||
}
|
||||
} /* end for */
|
||||
if (all_ok) {
|
||||
iend = imax;
|
||||
/* if not expanding we found interval */
|
||||
if (!expanding)
|
||||
break;
|
||||
/* will automatically try larger interval */
|
||||
}
|
||||
} /* end while(valid) */
|
||||
/* either we failed or optimal interval has been found */
|
||||
if ((iend <= ibeg) && (iend < (int) ihigh)) {
|
||||
errExit("Could not meet accuracy criteria");
|
||||
return (-1);
|
||||
}
|
||||
pbrkInt->slope = slope;
|
||||
/* get ready for next breakpoint interval */
|
||||
if (n++ >= max_breaks) {
|
||||
errExit("Break point table too large");
|
||||
return (-1);
|
||||
}
|
||||
ibeg = iend;
|
||||
pbrkInt++;
|
||||
rawBeg = rawEnd;
|
||||
engBeg = engEnd;
|
||||
pbrkInt->raw = rawBeg;
|
||||
pbrkInt->eng = engBeg + (pbrkInt->raw - rawBeg) * slope;
|
||||
}
|
||||
pbrkInt->slope = 0.0;
|
||||
*n_breaks = n;
|
||||
return (0);
|
||||
}
|
||||
16
src/bpt/menuConvert.ascii
Normal file
16
src/bpt/menuConvert.ascii
Normal file
@@ -0,0 +1,16 @@
|
||||
menu(menuConvert) {
|
||||
choice(menuConvertNO_CONVERSION,"NO CONVERSION")
|
||||
choice(menuConvertLINEAR,"LINEAR")
|
||||
choice(menuConverttypeKdegF,"typeKdegF")
|
||||
choice(menuConverttypeKdegC,"typeKdegC")
|
||||
choice(menuConverttypeJdegF,"typeJdegF")
|
||||
choice(menuConverttypeJdegC,"typeJdegC")
|
||||
choice(menuConverttypeEdegF,"typeEdegF(ixe only)")
|
||||
choice(menuConverttypeEdegC,"typeEdegC(ixe only)")
|
||||
choice(menuConverttypeTdegF,"typeTdegF")
|
||||
choice(menuConverttypeTdegC,"typeTdegC")
|
||||
choice(menuConverttypeRdegF,"typeRdegF")
|
||||
choice(menuConverttypeRdegC,"typeRdegC")
|
||||
choice(menuConverttypeSdegF,"typeSdegF")
|
||||
choice(menuConverttypeSdegC,"typeSdegC")
|
||||
}
|
||||
@@ -23,7 +23,7 @@ $!
|
||||
$!========================================================================
|
||||
$!
|
||||
$! Example FTP script moves sources from UNIX to VMS
|
||||
$! (remove "$!" comment delimeters)
|
||||
$! (remove "$!" comment delimiters)
|
||||
$!
|
||||
$! user XXXXXXX
|
||||
$! cd [.ca]
|
||||
@@ -35,7 +35,9 @@ $! put BUILD_VMS.COM
|
||||
$! lcd ../libCom
|
||||
$! mput *.c
|
||||
$! mput *.h
|
||||
$! lcd ../../include
|
||||
$! lcd O.sun4
|
||||
$! mput envData.c
|
||||
$! lcd ../../../include
|
||||
$! mput *.h
|
||||
$!========================================================================
|
||||
$!
|
||||
@@ -73,6 +75,7 @@ ENVSUBR, -
|
||||
TSSUBR, -
|
||||
NEXTFIELDSUBR, -
|
||||
ASSERTUNIX, -
|
||||
ENVDATA, -
|
||||
CATIME, -
|
||||
ACCTST
|
||||
$ endif
|
||||
@@ -96,6 +99,7 @@ BUCKETLIB, -
|
||||
TSSUBR, -
|
||||
ENVSUBR, -
|
||||
NEXTFIELDSUBR, -
|
||||
ENVDATA, -
|
||||
ASSERTUNIX, -
|
||||
ELLLIB
|
||||
$! Link the test programs
|
||||
|
||||
@@ -7,6 +7,9 @@ static char *sccsId = "@(#) $Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.31 1995/10/12 01:30:28 jhill
|
||||
* improved the test
|
||||
*
|
||||
* Revision 1.30 1995/09/29 21:47:58 jhill
|
||||
* MS windows changes
|
||||
*
|
||||
@@ -129,9 +132,9 @@ int doacctst(char *pname)
|
||||
{
|
||||
TS_STAMP end_time;
|
||||
TS_STAMP start_time;
|
||||
dbr_double_t delay;
|
||||
dbr_double_t request = 0.5;
|
||||
dbr_double_t accuracy;
|
||||
dbr_double_t delay;
|
||||
dbr_double_t request = 0.5;
|
||||
dbr_double_t accuracy;
|
||||
|
||||
tsLocalTime(&start_time);
|
||||
status = ca_pend_event(request);
|
||||
@@ -567,10 +570,39 @@ int doacctst(char *pname)
|
||||
conn_cb_count);
|
||||
}
|
||||
|
||||
printf("-- Put/Gets done- waiting for Events --\n");
|
||||
status = ca_pend_event(1000.0);
|
||||
if (status != ECA_TIMEOUT) {
|
||||
SEVCHK(status, NULL);
|
||||
{
|
||||
TS_STAMP end_time;
|
||||
TS_STAMP start_time;
|
||||
dbr_double_t delay;
|
||||
dbr_double_t request = 15.0;
|
||||
dbr_double_t accuracy;
|
||||
|
||||
tsLocalTime(&start_time);
|
||||
printf("waiting for events for %f sec\n", request);
|
||||
status = ca_pend_event(request);
|
||||
if (status != ECA_TIMEOUT) {
|
||||
SEVCHK(status, NULL);
|
||||
}
|
||||
tsLocalTime(&end_time);
|
||||
TsDiffAsDouble(&delay,&end_time,&start_time);
|
||||
accuracy = 100.0*(delay-request)/request;
|
||||
printf("CA pend event delay accuracy = %f %%\n",
|
||||
accuracy);
|
||||
assert (abs(accuracy) < 10.0);
|
||||
}
|
||||
|
||||
{
|
||||
TS_STAMP end_time;
|
||||
TS_STAMP start_time;
|
||||
dbr_double_t delay;
|
||||
|
||||
tsLocalTime(&start_time);
|
||||
printf("entering ca_task_exit()\n");
|
||||
status = ca_task_exit();
|
||||
SEVCHK(status,NULL);
|
||||
tsLocalTime(&end_time);
|
||||
TsDiffAsDouble(&delay,&end_time,&start_time);
|
||||
printf("in ca_task_exit() for %f sec\n", delay);
|
||||
}
|
||||
|
||||
if (ptr){
|
||||
@@ -586,9 +618,6 @@ int doacctst(char *pname)
|
||||
free(pgrfloat);
|
||||
}
|
||||
|
||||
status = ca_task_exit();
|
||||
SEVCHK(status,NULL);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -652,8 +681,10 @@ void null_event(struct event_handler_args args)
|
||||
dbr_double_t fval = 3.8;
|
||||
int status;
|
||||
|
||||
#if 0
|
||||
status = ca_put (DBR_DOUBLE, args.chid, &fval);
|
||||
SEVCHK (status, NULL);
|
||||
#endif
|
||||
|
||||
if (i++ > 1000) {
|
||||
printf("1000 occurred\n");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/************************************************************************/
|
||||
/* $Id$ */
|
||||
/* */
|
||||
/* L O S A L A M O S */
|
||||
/* Los Alamos National Laboratory */
|
||||
@@ -45,6 +46,7 @@
|
||||
/* 021794 joh turn on SO_REUSEADDR only after the test for */
|
||||
/* address in use so that test works on UNIX */
|
||||
/* kernels that support multicast */
|
||||
/* $Log$ */
|
||||
/* */
|
||||
/*_begin */
|
||||
/************************************************************************/
|
||||
@@ -586,8 +588,14 @@ void notify_ca_repeater()
|
||||
* SOLARIS will not accept a zero length message
|
||||
* and we are just porting there for 3.12 so
|
||||
* we will use the new protocol for 3.12
|
||||
*
|
||||
* recent versions of UCX will not accept a zero
|
||||
* length message and we will assume that folks
|
||||
* using newer versions of UCX have rebooted (and
|
||||
* therefore restarted the CA repeater - and therefore
|
||||
* moved it to an EPICS release that accepets this protocol)
|
||||
*/
|
||||
# ifdef SOLARIS
|
||||
# if defined(SOLARIS) || defined(UCX)
|
||||
len = sizeof(msg);
|
||||
# else /* SOLARIS */
|
||||
len = 0;
|
||||
@@ -662,7 +670,7 @@ LOCAL void cac_udp_send_msg_piiu(struct ioc_in_use *piiu)
|
||||
status = sendto(
|
||||
piiu->sock_chan,
|
||||
&piiu->send.buf[piiu->send.rdix],
|
||||
sendCnt,
|
||||
(int) sendCnt,
|
||||
0,
|
||||
&pNode->destAddr.sockAddr,
|
||||
sizeof(pNode->destAddr.sockAddr));
|
||||
@@ -741,26 +749,24 @@ LOCAL void cac_tcp_send_msg_piiu(struct ioc_in_use *piiu)
|
||||
return;
|
||||
}
|
||||
|
||||
assert (sendCnt<=INT_MAX);
|
||||
|
||||
status = send(
|
||||
piiu->sock_chan,
|
||||
&piiu->send.buf[piiu->send.rdix],
|
||||
sendCnt,
|
||||
(int) sendCnt,
|
||||
0);
|
||||
if (status<0) {
|
||||
if (status<=0) {
|
||||
break;
|
||||
}
|
||||
else if (status==0) {
|
||||
TAG_CONN_DOWN(piiu);
|
||||
UNLOCK;
|
||||
return;
|
||||
}
|
||||
|
||||
CAC_RING_BUFFER_READ_ADVANCE(&piiu->send, status);
|
||||
}
|
||||
|
||||
if (((unsigned long)status) != sendCnt) {
|
||||
UNLOCK;
|
||||
return;
|
||||
}
|
||||
if (status==0) {
|
||||
TAG_CONN_DOWN(piiu);
|
||||
UNLOCK;
|
||||
return;
|
||||
}
|
||||
|
||||
localError = MYERRNO;
|
||||
@@ -903,9 +909,11 @@ LOCAL void tcp_recv_msg(struct ioc_in_use *piiu)
|
||||
break;
|
||||
}
|
||||
|
||||
assert (writeSpace<=INT_MAX);
|
||||
|
||||
status = recv( piiu->sock_chan,
|
||||
&piiu->recv.buf[piiu->recv.wtix],
|
||||
writeSpace,
|
||||
(int) writeSpace,
|
||||
0);
|
||||
if(status == 0){
|
||||
TAG_CONN_DOWN(piiu);
|
||||
@@ -937,13 +945,8 @@ LOCAL void tcp_recv_msg(struct ioc_in_use *piiu)
|
||||
* from this IOC
|
||||
*/
|
||||
piiu->timeAtLastRecv = ca_static->currentTime;
|
||||
|
||||
if (((unsigned long)status) != writeSpace) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UNLOCK;
|
||||
return;
|
||||
}
|
||||
@@ -1044,6 +1047,16 @@ LOCAL void udp_recv_msg(struct ioc_in_use *piiu)
|
||||
UNLOCK;
|
||||
return;
|
||||
}
|
||||
# ifdef linux
|
||||
/*
|
||||
* Avoid spurious ECONNREFUSED bug
|
||||
* in linux
|
||||
*/
|
||||
if (MYERRNO==ECONNREFUSED) {
|
||||
UNLOCK;
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
ca_printf("Unexpected UDP failure %s\n", strerror(MYERRNO));
|
||||
}
|
||||
else if(status > 0){
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* REPEATER.C
|
||||
*
|
||||
* CA broadcast repeater
|
||||
@@ -59,6 +61,8 @@
|
||||
* .08 102993 joh toggle set sock opt to set
|
||||
* .09 070195 joh discover client has vanished by connecting its
|
||||
* datagram socket (and watching for ECONNREFUSED)
|
||||
*
|
||||
* $Log$
|
||||
*/
|
||||
|
||||
static char *sccsId = "@(#)$Id$";
|
||||
@@ -149,6 +153,15 @@ void ca_repeater()
|
||||
&from_size);
|
||||
|
||||
if(size < 0){
|
||||
# ifdef linux
|
||||
/*
|
||||
* Avoid spurious ECONNREFUSED bug
|
||||
* in linux
|
||||
*/
|
||||
if (MYERRNO==ECONNREFUSED) {
|
||||
continue;
|
||||
}
|
||||
# endif
|
||||
ca_printf("CA Repeater: recv err %s\n",
|
||||
strerror(MYERRNO));
|
||||
continue;
|
||||
|
||||
@@ -478,7 +478,8 @@ const struct in_addr *pnet_addr
|
||||
FALSE,
|
||||
piiu->curMsg.m_count);
|
||||
# else
|
||||
if (piiu->curMsg.m_type == DBR_STRING) {
|
||||
if (piiu->curMsg.m_type == DBR_STRING &&
|
||||
piiu->curMsg.m_count == 1u) {
|
||||
strcpy ((char *)pIOBlock->usr_arg,
|
||||
piiu->pCurData);
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ typedef int fd_set ;
|
||||
#define FD_SET(n, p) (*(p) |= (1 << ((n) % NFDBITS)))
|
||||
#define FD_CLR(n, p) (*(p) &= ~(1 << ((n) % NFDBITS)))
|
||||
#define FD_ISSET(n, p) (*(p) & (1 << ((n) % NFDBITS)))
|
||||
#define FD_ZERO(p) bzero((char *)(p), sizeof (*(p)))
|
||||
#define FD_ZERO(p) memset((char *)(p), 0, sizeof (*(p)))
|
||||
|
||||
#include <iodef.h>
|
||||
#define IO$_RECEIVE (IO$_WRITEVBLK)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
@@ -26,17 +27,19 @@
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Lawrence Berkley National Laboratory
|
||||
* Lawrence Berkley National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
*
|
||||
* $Log$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Windows includes
|
||||
*/
|
||||
#include <windows.h>
|
||||
#include <process.h>
|
||||
#include <mmsystem.h>
|
||||
|
||||
#include "iocinf.h"
|
||||
|
||||
@@ -44,6 +47,10 @@
|
||||
#error This source is specific to WIN32
|
||||
#endif
|
||||
|
||||
long offset_time; /* time diff (sec) between 1970 and when windows started */
|
||||
DWORD prev_time;
|
||||
|
||||
static void init_timers();
|
||||
static int get_subnet_mask ( char SubNetMaskStr[256]);
|
||||
static int RegTcpParams (char IpAddr[256], char SubNetMask[256]);
|
||||
static int RegKeyData (CHAR *RegPath, HANDLE hKeyRoot, LPSTR lpzValueName,
|
||||
@@ -55,11 +62,25 @@ static int RegKeyData (CHAR *RegPath, HANDLE hKeyRoot, LPSTR lpzValueName,
|
||||
*/
|
||||
void cac_gettimeval(struct timeval *pt)
|
||||
{
|
||||
SYSTEMTIME st;
|
||||
/**
|
||||
The multi-media timers used here should be good to a millisecond
|
||||
resolution. However, since the timer rolls back to 0 every 49.7
|
||||
days (2^32 ms, 4,294,967.296 sec), it's not very good for
|
||||
time stamping over long periods (if Windows is restarted more
|
||||
often than 49 days, it wont be a problem). An attempt is made
|
||||
to keep the time returned increasing, but there is no guarantee
|
||||
the UTC time is right after 49 days.
|
||||
**/
|
||||
|
||||
GetSystemTime(&st);
|
||||
pt->tv_sec = time(NULL);
|
||||
pt->tv_usec = st.wMilliseconds*1000;
|
||||
DWORD win_sys_time; /* time (ms) since windows started */
|
||||
|
||||
win_sys_time = timeGetTime();
|
||||
if (prev_time > win_sys_time) { /* must have been a timer roll-over */
|
||||
offset_time += 4294967; /* add number of seconds in 49.7 days */
|
||||
}
|
||||
pt->tv_sec = (long)win_sys_time/1000 + offset_time; /* time (sec) since 1970 */
|
||||
pt->tv_usec = (long)((win_sys_time % 1000) * 1000);
|
||||
prev_time = win_sys_time;
|
||||
}
|
||||
|
||||
|
||||
@@ -102,8 +123,7 @@ void cac_block_for_sg_completion(CASG *pcasg, struct timeval *pTV)
|
||||
*/
|
||||
int cac_os_depen_init(struct ca_static *pcas)
|
||||
{
|
||||
int status;
|
||||
WSADATA WsaData;
|
||||
int status;
|
||||
|
||||
ca_static = pcas;
|
||||
|
||||
@@ -117,10 +137,7 @@ int cac_os_depen_init(struct ca_static *pcas)
|
||||
|
||||
/* signal(SIGPIPE,SIG_IGN); */
|
||||
|
||||
# ifdef _WINSOCKAPI_
|
||||
status = WSAStartup(MAKEWORD(1,1), &WsaData);
|
||||
assert (status==0);
|
||||
# endif
|
||||
/* DllMain does most OS dependent init & cleanup */
|
||||
|
||||
status = ca_os_independent_init ();
|
||||
|
||||
@@ -414,7 +431,6 @@ static int RegKeyData (CHAR *RegPath, HANDLE hKeyRoot, LPSTR lpzValueName,
|
||||
|
||||
|
||||
retCode = RegQueryValueEx (hKey, // Key handle returned from
|
||||
RegOpenKeyEx.
|
||||
lpzValueName, // Name of value.
|
||||
NULL, // Reserved, dword = NULL.
|
||||
lpdwType, // Type of data.
|
||||
@@ -435,37 +451,56 @@ BOOL epicsShareAPI DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
int status;
|
||||
WSADATA WsaData;
|
||||
TIMECAPS tc;
|
||||
UINT wTimerRes;
|
||||
|
||||
switch (dwReason) {
|
||||
|
||||
case DLL_PROCESS_ATTACH:
|
||||
|
||||
if ((status = WSAStartup(MAKEWORD(1,1), &WsaData)) != 0)
|
||||
return FALSE;
|
||||
#if _DEBUG
|
||||
|
||||
#if _DEBUG /* for gui applications, setup console for error messages */
|
||||
if (AllocConsole()) {
|
||||
SetConsoleTitle("Channel Access Status");
|
||||
freopen( "CONOUT$", "a", stderr );
|
||||
fprintf(stderr, "Process attached to ca.dll R12\n");
|
||||
}
|
||||
#endif
|
||||
fprintf(stderr, "Process attached to ca.dll R3.12.1\n");
|
||||
#endif /* init. winsock */
|
||||
if ((status = WSAStartup(MAKEWORD(1,1), &WsaData)) != 0) {
|
||||
fprintf(stderr,"Cant init winsock \n");
|
||||
return FALSE;
|
||||
}
|
||||
/* setup multi-media timer */
|
||||
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) {
|
||||
fprintf(stderr,"cant get timer info \n");
|
||||
return FALSE;
|
||||
}
|
||||
/* set for 1 ms resoulution */
|
||||
wTimerRes = min(max(tc.wPeriodMin, 1), tc.wPeriodMax);
|
||||
status = timeBeginPeriod(wTimerRes);
|
||||
if (status != TIMERR_NOERROR)
|
||||
fprintf(stderr,"timer setup failed\n");
|
||||
offset_time = (long)time(NULL) - (long)timeGetTime()/1000;
|
||||
prev_time = timeGetTime();
|
||||
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
|
||||
timeEndPeriod(wTimerRes);
|
||||
|
||||
if ((status = WSACleanup()) !=0)
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
case DLL_THREAD_ATTACH:
|
||||
#if _DEBUG
|
||||
fprintf(stderr, "Thread attached to ca.dll R12\n");
|
||||
fprintf(stderr, "Thread attached to ca.dll R3.12.1\n");
|
||||
#endif
|
||||
break;
|
||||
|
||||
case DLL_THREAD_DETACH:
|
||||
#if _DEBUG
|
||||
fprintf(stderr, "Thread detached from ca.dll R12\n");
|
||||
fprintf(stderr, "Thread detached from ca.dll R3.12.1\n");
|
||||
#endif
|
||||
break;
|
||||
|
||||
@@ -475,6 +510,8 @@ BOOL epicsShareAPI DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
18
src/cvtDctsdr/Makefile
Normal file
18
src/cvtDctsdr/Makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Lowest Level Directroy Makefile
|
||||
# by Janet Anderson
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.1 1994/09/07 19:25:39 jba
|
||||
# New file
|
||||
#
|
||||
#
|
||||
|
||||
EPICS=../../..
|
||||
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
include $(EPICS)/config/RULES_ARCHS
|
||||
|
||||
54
src/cvtDctsdr/Makefile.Unix
Normal file
54
src/cvtDctsdr/Makefile.Unix
Normal file
@@ -0,0 +1,54 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
USR_LDLIBS = -lCom
|
||||
USR_LDFLAGS = -L.
|
||||
|
||||
|
||||
DEPLIBS_BASE = $(EPICS_BASE_LIB)
|
||||
|
||||
DEPLIBS = \
|
||||
$(DEPLIBS_BASE)/libCom.a
|
||||
|
||||
SRCS.c = \
|
||||
sf2dbYacc.c\
|
||||
../sdr2gblmenu.c\
|
||||
../sdr2driver.c\
|
||||
../sdr2device.c\
|
||||
../sdr2recordtype.c\
|
||||
../dbStaticLib.c
|
||||
|
||||
OBJS = \
|
||||
sdr2gblmenu.o \
|
||||
sdr2driver.o \
|
||||
sdr2device.o \
|
||||
sdr2recordtype.o \
|
||||
dbStaticLib.o
|
||||
|
||||
MAN1 = sf2db.1
|
||||
|
||||
PROD = sf2db sdr2gblmenu sdr2driver sdr2device sdr2recordtype
|
||||
|
||||
include $(EPICS)/config/RULES.Unix
|
||||
|
||||
sdr2gblmenu: sdr2gblmenu.o dbStaticLib.o
|
||||
$(LINK.c) -o $@ sdr2gblmenu.o dbStaticLib.o $(LDLIBS)
|
||||
|
||||
sdr2driver: sdr2driver.o dbStaticLib.o
|
||||
$(LINK.c) -o $@ sdr2driver.o dbStaticLib.o $(LDLIBS)
|
||||
|
||||
sdr2device: sdr2device.o dbStaticLib.o
|
||||
$(LINK.c) -o $@ sdr2device.o dbStaticLib.o $(LDLIBS)
|
||||
|
||||
sdr2recordtype: sdr2recordtype.o dbStaticLib.o
|
||||
$(LINK.c) -o $@ sdr2recordtype.o dbStaticLib.o $(LDLIBS)
|
||||
|
||||
sf2db: sf2dbYacc.o
|
||||
$(LINK.c) -o $@ sf2dbYacc.o
|
||||
|
||||
sf2dbYacc.o: sf2dbLex.c
|
||||
|
||||
clean::
|
||||
/bin/rm -f sf2dbYacc.c sf2dbLex.c
|
||||
|
||||
12
src/cvtDctsdr/Makefile.Vx
Normal file
12
src/cvtDctsdr/Makefile.Vx
Normal file
@@ -0,0 +1,12 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
USR_CFLAGS = -DACCESS_SECURITY -D_NO_PROTO
|
||||
|
||||
SRCS.c =
|
||||
OBJS =
|
||||
PROD =
|
||||
|
||||
include $(EPICS)/config/RULES.Vx
|
||||
|
||||
199
src/cvtDctsdr/choice.h
Normal file
199
src/cvtDctsdr/choice.h
Normal file
@@ -0,0 +1,199 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 11-7-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-18-92 rcz removed extern's
|
||||
* .02 05-18-92 rcz New database access
|
||||
*/
|
||||
|
||||
|
||||
#ifndef INCchoiceh
|
||||
#define INCchoiceh 1
|
||||
struct choiceSet { /* This defines one set of choices*/
|
||||
unsigned long number; /*number of choices */
|
||||
char **papChoice;/*ptr to arr of ptr to choice string*/
|
||||
};
|
||||
struct arrChoiceSet{ /*An array of choice sets for particular record type*/
|
||||
unsigned long number; /*number of choice sets */
|
||||
struct choiceSet **papChoiceSet ;/*ptr to arr of ptr to choiceSet*/
|
||||
};
|
||||
struct choiceRec{ /*define choices for each record type*/
|
||||
unsigned long number; /*number of arrChoiceSet */
|
||||
struct arrChoiceSet **papArrChoiceSet;
|
||||
/*ptr to arr of ptr to arrChoiceSet*/
|
||||
};
|
||||
/* device choices */
|
||||
struct devChoice{
|
||||
long link_type; /*link type for this device*/
|
||||
char *pchoice; /*ptr to choice string */
|
||||
};
|
||||
struct devChoiceSet {
|
||||
unsigned long number;
|
||||
struct devChoice **papDevChoice;
|
||||
char **papChoice;
|
||||
};
|
||||
struct devChoiceRec{ /*define device choices for each record type*/
|
||||
unsigned long number; /*number of devChoiceSet */
|
||||
struct devChoiceSet **papDevChoiceSet;
|
||||
/*ptr to arr of ptr to devChoiceSet*/
|
||||
};
|
||||
/*NOTE: pchoiceCvt is initialized when cvtTable is loaded */
|
||||
/* pchoiceDev is initialized when devSup is loaded */
|
||||
|
||||
/************************************************************************
|
||||
* Except that entries could be null the following are valid references
|
||||
* pchoiceCvt->papChoice[i]
|
||||
* pchoiceGbl->papChoiceSet[i]->papChoice[j]
|
||||
* pchoiceRec->papArrChoiceSet[i]->papChoiceSet[j]->papChoice[k]
|
||||
* pchoiceDev->papDevChoiceSet[i]->papDevChoice[j]->pchoice->"<value>"
|
||||
*
|
||||
* The memory layout is
|
||||
*
|
||||
* pchoiceCvt->choiceSet
|
||||
* number
|
||||
* papChoice->[0]
|
||||
* [1]->"<choice string>"
|
||||
*
|
||||
* pchoiceGbl->arrChoiceSet
|
||||
* number
|
||||
* papChoiceSet->[0]
|
||||
* [1]->choiceSet
|
||||
* number
|
||||
* papChoice->[0]
|
||||
* [1]->"<choice string>"
|
||||
* pchoiceRec->choiceRec
|
||||
* number
|
||||
* papArrChoiceSet->[0]
|
||||
* [1]->arrChoiceSet
|
||||
* number
|
||||
* papChoiceSet->[0]
|
||||
* [1]->choiceSet
|
||||
* number
|
||||
* papChoice->[0]
|
||||
* [1]->
|
||||
*
|
||||
* pchoiceDev->devChoiceRec
|
||||
* number
|
||||
* papDevChoiceSet->[0]
|
||||
* [1]->devChoiceSet
|
||||
* number
|
||||
* papDevChoice->[0]
|
||||
* [1]->devChoice
|
||||
* link_type
|
||||
* pchoice->"val"
|
||||
*****************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
*The following macro returns NULL or a ptr to a string
|
||||
* A typical usage is:
|
||||
*
|
||||
* char *pchoice;
|
||||
* if(!(pchoice=GET_CHOICE(pchoiceSet,ind))){ <no string found>}
|
||||
***************************************************************************/
|
||||
#define GET_CHOICE(PCHOICE_SET,IND_CHOICE)\
|
||||
(\
|
||||
(PCHOICE_SET)\
|
||||
?(\
|
||||
( ((unsigned)(IND_CHOICE)>=((struct choiceSet*)(PCHOICE_SET))->number) )\
|
||||
? NULL\
|
||||
: ((PCHOICE_SET)->papChoice[(IND_CHOICE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
/*****************************************************************************
|
||||
* The following macro returns NULL or a ptr to a choiceSet structure
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct choiceSet *pchoiceSet;
|
||||
* if(!(pchoiceSet=GET_PCHOICE_SET(parrChoiceSet,ind))){<null>}
|
||||
***************************************************************************/
|
||||
#define GET_PCHOICE_SET(PARR_CHOICE_SET,IND_ARR)\
|
||||
(\
|
||||
(PARR_CHOICE_SET)\
|
||||
?(\
|
||||
( ((unsigned)(IND_ARR)>=((struct arrChoiceSet*)(PARR_CHOICE_SET))->number) )\
|
||||
? NULL\
|
||||
: ((PARR_CHOICE_SET)->papChoiceSet[(IND_ARR)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
/*****************************************************************************
|
||||
* The following macro returns NULL or a ptr to a arrChoiceSet structure
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct arrChoiceSet *parrChoiceSet;
|
||||
* if(!(parrChoiceSet=GET_PARR_CHOICE_SET(pchoiceRec,ind))){<null>}
|
||||
***************************************************************************/
|
||||
#define GET_PARR_CHOICE_SET(PCHOICE_REC,IND_REC)\
|
||||
(\
|
||||
(PCHOICE_REC)\
|
||||
?(\
|
||||
( ((unsigned)(IND_REC)>=((struct choiceRec*)(PCHOICE_REC))->number) )\
|
||||
? NULL\
|
||||
: ((PCHOICE_REC)->papArrChoiceSet[(IND_REC)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
/*************************************************************************
|
||||
*The following macro returns NULL or a ptr to a devChoice structure
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct devChoice *pdevChoice;
|
||||
* if(!(pdevChoice=GET_DEV_CHOICE(pdevChoiceSet,ind))){ <not found>}
|
||||
***************************************************************************/
|
||||
#define GET_DEV_CHOICE(PDEV_CHOICE_SET,IND_CHOICE)\
|
||||
(\
|
||||
(PDEV_CHOICE_SET)\
|
||||
?(\
|
||||
( ((unsigned)(IND_CHOICE)>=((struct devChoiceSet*)(PDEV_CHOICE_SET))->number) )\
|
||||
? NULL\
|
||||
: ((PDEV_CHOICE_SET)->papDevChoice[(IND_CHOICE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
/*****************************************************************************
|
||||
* The following macro returns NULL or a ptr to a devChoiceSet structure
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct devChoiceSet *pdevChoiceSet;
|
||||
* if(!(pdevChoiceSet=GET_PDEV_CHOICE_SET(pchoiceDev,ind))){<null>}
|
||||
***************************************************************************/
|
||||
#define GET_PDEV_CHOICE_SET(PCHOICE_DEV,IND_REC)\
|
||||
(\
|
||||
(PCHOICE_DEV)\
|
||||
?(\
|
||||
( ((unsigned)(IND_REC)>=((struct devChoiceRec*)(PCHOICE_DEV))->number) )\
|
||||
? NULL\
|
||||
: ((PCHOICE_DEV)->papDevChoiceSet[(IND_REC)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
#endif
|
||||
46
src/cvtDctsdr/choiceGbl.h
Normal file
46
src/cvtDctsdr/choiceGbl.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Author: Bob Zieman
|
||||
* Date: 12-10-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 12-13-91 jba Added GBL_PRIORITY
|
||||
* .02 08-14-92 jba Added GBL_IVOA
|
||||
*/
|
||||
|
||||
#ifndef INCchoiceGblh
|
||||
#define INCchoiceGblh 1
|
||||
#define GBL_YES_NO 0
|
||||
#define GBL_SCAN 1
|
||||
#define GBL_ALARM_SEV 2
|
||||
#define GBL_ALARM_STAT 3
|
||||
#define GBL_ARR_TYPE 4
|
||||
#define GBL_OMSL 5
|
||||
#define GBL_LINR 6
|
||||
#define GBL_FTYPE 7
|
||||
#define GBL_COMPRESS 8
|
||||
#define GBL_PRIORITY 9
|
||||
#define GBL_IVOA 10
|
||||
#endif
|
||||
94
src/cvtDctsdr/cvtTable.h
Normal file
94
src/cvtDctsdr/cvtTable.h
Normal file
@@ -0,0 +1,94 @@
|
||||
/* $Id$
|
||||
* Breakpoint Tables
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 11-7-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-18-92 rcz removed extern
|
||||
* .02 05-18-92 rcz new database access
|
||||
* .03 08-19-92 jba add prototypes for cvtRawToEngBpt,cvtEngToRawBpt
|
||||
*/
|
||||
|
||||
#ifndef INCcvtTableh
|
||||
#define INCcvtTableh 1
|
||||
#ifndef INCdbDefsh
|
||||
#include "dbDefs.h"
|
||||
#endif
|
||||
|
||||
struct brkInt{ /* breakpoint interval */
|
||||
long raw; /*raw value for beginning of interval */
|
||||
float slope; /*slope for interval */
|
||||
float eng; /*converted value for beginning of interval*/
|
||||
};
|
||||
|
||||
struct brkTable { /* breakpoint table */
|
||||
char *name; /*breakpoint table name */
|
||||
long number; /*number of brkInt in this table*/
|
||||
long rawLow; /*lowest raw data value allowed */
|
||||
long rawHigh; /*highest raw data value allowed*/
|
||||
struct brkInt **papBrkInt; /* ptr to array of ptr to brkInt */
|
||||
};
|
||||
|
||||
struct arrBrkTable { /* array of brkTable */
|
||||
long number; /*number of break tables*/
|
||||
struct brkTable **papBrkTable; /* ptr to array of ptr to brkTable*/
|
||||
};
|
||||
|
||||
/***************************************************************************
|
||||
* except that some fields could be null the following is a valid reference
|
||||
* pcvtTable->papBrkTable[i]->papBrkInt[j]-><field>
|
||||
*
|
||||
* The memory layout is as follows:
|
||||
*
|
||||
* pcvtTable->arrBrkTable
|
||||
* number
|
||||
* papBrkTable->[0]=NULL
|
||||
* [1]=NULL
|
||||
* [2]->brkTable
|
||||
* *name
|
||||
* number
|
||||
* papBrkInt->[0]
|
||||
* [1]->brkInt
|
||||
* raw
|
||||
* slope
|
||||
* eng
|
||||
*****************************************************************************/
|
||||
|
||||
/* Global Routines*/
|
||||
#ifdef __STDC__
|
||||
long cvtEngToRawBpt(double *pval,short linr,short init,
|
||||
void **ppbrk,short *plbrk);
|
||||
|
||||
long cvtRawToEngBpt(double *pval,short linr,short init,
|
||||
void **ppbrk, short *plbrk);
|
||||
|
||||
#else
|
||||
long cvtEngToRawBpt();
|
||||
long cvtRawToEngBpt();
|
||||
|
||||
#endif /*__STDC__*/
|
||||
|
||||
#endif
|
||||
91
src/cvtDctsdr/dbBase.h
Normal file
91
src/cvtDctsdr/dbBase.h
Normal file
@@ -0,0 +1,91 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Current Author: Marty Kraimer
|
||||
* Date: 03-19-92
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 03-19-92 mrk Original
|
||||
* .02 05-18-92 rcz New database access
|
||||
* .03 09-21-92 rcz removed #include <dbPvd.h>
|
||||
*/
|
||||
|
||||
#ifndef INCdbBaseh
|
||||
#define INCdbBaseh 1
|
||||
|
||||
#ifdef vxWorks
|
||||
#ifndef INCchoiceh
|
||||
#include <choice.h>
|
||||
#endif
|
||||
#ifndef INCcvtTableh
|
||||
#include <cvtTable.h>
|
||||
#endif
|
||||
#ifndef INCdbDefsh
|
||||
#include <dbDefs.h>
|
||||
#endif
|
||||
#ifndef INCdbRecDesh
|
||||
#include <dbRecDes.h>
|
||||
#endif
|
||||
#ifndef INCdbRecTypeh
|
||||
#include <dbRecType.h>
|
||||
#endif
|
||||
#ifndef INCdbRecordsh
|
||||
#include <dbRecords.h>
|
||||
#endif
|
||||
#ifndef INCdevSuph
|
||||
#include <devSup.h>
|
||||
#endif
|
||||
#ifndef INCdrvSuph
|
||||
#include <drvSup.h>
|
||||
#endif
|
||||
#ifndef INCrecSuph
|
||||
#include <recSup.h>
|
||||
#endif
|
||||
#endif /* vxWorks */
|
||||
|
||||
/******************************************************************
|
||||
* Note: Functions dbFreeMem() and dbRead() must be kept in sync if
|
||||
* struct dbBase changes.
|
||||
******************************************************************/
|
||||
struct dbBase {
|
||||
struct choiceSet *pchoiceCvt;
|
||||
struct arrChoiceSet *pchoiceGbl;
|
||||
struct choiceRec *pchoiceRec;
|
||||
struct devChoiceRec *pchoiceDev;
|
||||
struct arrBrkTable *pcvtTable;
|
||||
struct recDes *precDes;
|
||||
struct recType *precType;
|
||||
struct recHeader *precHeader;
|
||||
struct recDevSup *precDevSup;
|
||||
struct drvSup *pdrvSup;
|
||||
struct recSup *precSup;
|
||||
struct pvd *pdbPvd; /* DCT pvd - remove when DCT goes away */
|
||||
void *ppvd;/* pointer to process variable directory*/
|
||||
char *pdbName;/* pointer to database name*/
|
||||
struct sdrSum *psdrSum;/* pointer to default sum */
|
||||
long sdrFileSize; /*size of default.dctsdr file*/
|
||||
long pvtSumFlag; /*internal use only*/
|
||||
};
|
||||
|
||||
#endif
|
||||
72
src/cvtDctsdr/dbFldTypes.h
Normal file
72
src/cvtDctsdr/dbFldTypes.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 mm-dd-yy iii Comment
|
||||
*/
|
||||
#ifndef INCdbFldTypesh
|
||||
#define INCdbFldTypesh 1
|
||||
|
||||
/* field types */
|
||||
#define DBF_STRING 0
|
||||
#define DBF_CHAR 1
|
||||
#define DBF_UCHAR 2
|
||||
#define DBF_SHORT 3
|
||||
#define DBF_USHORT 4
|
||||
#define DBF_LONG 5
|
||||
#define DBF_ULONG 6
|
||||
#define DBF_FLOAT 7
|
||||
#define DBF_DOUBLE 8
|
||||
#define DBF_ENUM 9
|
||||
#define DBF_GBLCHOICE 10
|
||||
#define DBF_CVTCHOICE 11
|
||||
#define DBF_RECCHOICE 12
|
||||
#define DBF_DEVCHOICE 13
|
||||
#define DBF_INLINK 14
|
||||
#define DBF_OUTLINK 15
|
||||
#define DBF_FWDLINK 16
|
||||
#define DBF_NOACCESS 17
|
||||
#define DBF_NTYPES DBF_NOACCESS+1
|
||||
|
||||
/* data request buffer types */
|
||||
#define DBR_STRING DBF_STRING
|
||||
#define DBR_CHAR DBF_CHAR
|
||||
#define DBR_UCHAR DBF_UCHAR
|
||||
#define DBR_SHORT DBF_SHORT
|
||||
#define DBR_USHORT DBF_USHORT
|
||||
#define DBR_LONG DBF_LONG
|
||||
#define DBR_ULONG DBF_ULONG
|
||||
#define DBR_FLOAT DBF_FLOAT
|
||||
#define DBR_DOUBLE DBF_DOUBLE
|
||||
#define DBR_ENUM DBF_ENUM
|
||||
#define DBR_PUT_ACKT DBR_ENUM+1
|
||||
#define DBR_PUT_ACKS DBR_PUT_ACKT+1
|
||||
#define DBR_NOACCESS DBF_NOACCESS
|
||||
#define VALID_DB_REQ(x) ((x >= 0) && (x <= DBR_PUT_ACKS))
|
||||
#define INVALID_DB_REQ(x) ((x < 0) || (x > DBR_PUT_ACKS))
|
||||
|
||||
#endif /*INCdbFldTypesh*/
|
||||
163
src/cvtDctsdr/dbRecDes.h
Normal file
163
src/cvtDctsdr/dbRecDes.h
Normal file
@@ -0,0 +1,163 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Original Author: Bob Dalesio
|
||||
* Current Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 mm-dd-yy iii Comment
|
||||
* .02 05-18-92 rcz removed extern
|
||||
* .03 05-18-92 rcz changed macro "GET_PRECTYPDES(" to "GET_PRECTYPDES(precDes,"
|
||||
* .04 05-18-92 rcz New database access
|
||||
* .05 08-12-92 jba Removed dbr_field_type from struct fldDes
|
||||
* .06 09-15-92 jba added short pad field to fldDes
|
||||
* .07 06-23-93 mrk Moved pad so that fldname is NULL terminated
|
||||
*/
|
||||
|
||||
#ifndef INCdbRecDesCT
|
||||
#define INCdbRecDesCT
|
||||
/* conversion types*/
|
||||
#define CT_DECIMAL 0
|
||||
#define CT_HEX 1
|
||||
/* lowfl, highfl */
|
||||
#define CON 0
|
||||
#define VAR 1
|
||||
/* access level types */
|
||||
#define ASL0 0
|
||||
#define ASL1 1
|
||||
#endif
|
||||
#ifndef INCdbRecDesh
|
||||
#define INCdbRecDesh
|
||||
#define PROMPT_SZ 24
|
||||
union fld_types{
|
||||
char char_value;
|
||||
unsigned char uchar_value;
|
||||
short short_value;
|
||||
unsigned short ushort_value;
|
||||
long long_value;
|
||||
unsigned long ulong_value;
|
||||
float float_value;
|
||||
double double_value;
|
||||
unsigned short enum_value;
|
||||
};
|
||||
struct range {
|
||||
long fldnum;
|
||||
long pad;
|
||||
union fld_types value;
|
||||
};
|
||||
struct fldDes{ /* field description */
|
||||
char prompt[PROMPT_SZ]; /*Prompt string for DCT*/
|
||||
char fldname[FLDNAME_SZ];/*field name */
|
||||
short fldnamePad; /*make sure fldname is NULL termated */
|
||||
short offset; /*Offset in bytes from beginning of record*/
|
||||
short size; /*length in bytes of a field element */
|
||||
short special; /*Special processing requirements */
|
||||
short field_type; /*Field type as defined in dbFldTypes.h */
|
||||
short process_passive;/*should dbPutField process passive */
|
||||
short choice_set; /*index of choiceSet GBLCHOICE & RECCHOICE*/
|
||||
short cvt_type; /*Conversion type for DCT */
|
||||
short promptflag; /*Does DCT display this field */
|
||||
short lowfl; /*Is range1 CON or VAR */
|
||||
short highfl; /*Is range2 CON or VAR */
|
||||
short interest; /*interest level */
|
||||
short as_level; /*access security level */
|
||||
short pad2;
|
||||
union fld_types initial;/*initial value */
|
||||
struct range range1; /*Low value for field (Used by DCT) */
|
||||
struct range range2; /*High value for field (Used by DCT) */
|
||||
};
|
||||
struct recTypDes{ /* record type description */
|
||||
short rec_size; /* size of the record */
|
||||
short no_fields; /* number of fields defined */
|
||||
short no_prompt; /* number of fields to configure*/
|
||||
short no_links; /* number of links */
|
||||
short *link_ind; /* addr of array of ind in apFldDes*/
|
||||
unsigned long *sortFldName; /* addr of array of sorted fldname*/
|
||||
short *sortFldInd; /* addr of array of ind in apFldDes*/
|
||||
struct fldDes **papFldDes; /* ptr to array of ptr to fldDes*/
|
||||
};
|
||||
struct recDes{ /* record description */
|
||||
long number; /*number of recTypDes*/
|
||||
struct recTypDes **papRecTypDes;/*ptr to arr of ptr to recTypDes*/
|
||||
};
|
||||
|
||||
/***************************************************************************
|
||||
* Except that some ptr could be NULL the following is a valid reference
|
||||
* precDes->papRecTypDes[i]->papFldDes[j]-><field>
|
||||
*
|
||||
* The memory layout is as follows:
|
||||
*
|
||||
* precDes->recDes
|
||||
* number
|
||||
* papRecTypDes->[1]
|
||||
* [2]->papFldDes->[0]
|
||||
* [1]->fldDes
|
||||
* prompt
|
||||
* fldname
|
||||
* ...
|
||||
*
|
||||
* sortFldName[*] is a sorted array of blank padded fieldnames
|
||||
* that can be interpeted as a long which must be 32 bits
|
||||
* Note that FLDNAME_SZ MUST be 4
|
||||
* sortFldInd[*] is an array of indices for sortFldName.
|
||||
* Each element of this array is an index into papFldDes[*].
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* The following macro returns NULL or a ptr to a fldDes structure
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct fldDes *pfldDes;
|
||||
* if(!(pfldDes=GET_PFLDDES(precTypDes,ind)
|
||||
****************************************************************************/
|
||||
#define GET_PFLDDES(PRECTYPDES,IND_FLD)\
|
||||
(\
|
||||
(PRECTYPDES)\
|
||||
?(\
|
||||
( ((IND_FLD)<0) ||\
|
||||
((IND_FLD)>=((struct recTypDes *)(PRECTYPDES))->no_fields) )\
|
||||
? NULL\
|
||||
: (((struct recTypDes *)(PRECTYPDES))->papFldDes[(IND_FLD)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
/*****************************************************************************
|
||||
* The following macro returns NULL or a ptr to a recTypDes structure
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct recTypDes *precTypDes;
|
||||
* if(!(precTypDes=GET_PRECTYPDES(precDes,ind);
|
||||
****************************************************************************/
|
||||
#define GET_PRECTYPDES(PRECDES,IND_REC)\
|
||||
(\
|
||||
(PRECDES)\
|
||||
?(\
|
||||
( ((IND_REC)<1) || ((IND_REC)>=(PRECDES)->number) )\
|
||||
? NULL\
|
||||
: ((PRECDES)->papRecTypDes[(IND_REC)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
#endif
|
||||
72
src/cvtDctsdr/dbRecType.h
Normal file
72
src/cvtDctsdr/dbRecType.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-18-92 rcz removed extern
|
||||
* .02 05-18-92 rcz Changed GET_PRECTYPE to GET_PRECNAME
|
||||
* .03 05-18-92 rcz New database access (removed extern)
|
||||
*/
|
||||
|
||||
#ifndef INCdbRecTypeh
|
||||
#define INCdbRecTypeh 1
|
||||
|
||||
struct recType {
|
||||
long number; /*number of types */
|
||||
char **papName; /*ptr to arr of ptr to name */
|
||||
};
|
||||
|
||||
#define S_rectype_noRecs (M_recType| 3) /*No record types are defined*/
|
||||
|
||||
/*************************************************************************
|
||||
* Except that some entries may be null the following is valid access
|
||||
*
|
||||
* precType->papName[i]
|
||||
*
|
||||
* The memory layout is
|
||||
*
|
||||
* precType->papName[1]->"ai"
|
||||
* [2]->"ao"
|
||||
**************************************************************************/
|
||||
|
||||
/**************************************************************************
|
||||
* The following macro returns NULL or a ptr to the rectype string
|
||||
* A typical usage is:
|
||||
*
|
||||
* char *pstr;
|
||||
* if(!(pstr=GET_PRECNAME(precType,type))) {<null>}
|
||||
**************************************************************************/
|
||||
#define GET_PRECNAME(PRECTYPE,REC_TYPE)\
|
||||
(\
|
||||
(PRECTYPE)\
|
||||
?(\
|
||||
( ((REC_TYPE)<1) || ((REC_TYPE)>=(PRECTYPE)->number) )\
|
||||
? NULL\
|
||||
: ((PRECTYPE)->papName[(REC_TYPE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
#endif
|
||||
104
src/cvtDctsdr/dbRecords.h
Normal file
104
src/cvtDctsdr/dbRecords.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Record Location
|
||||
*
|
||||
* Original Author: Bob Dalesio
|
||||
* Current Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 mm-dd-yy iii Comment
|
||||
* .02 03-26-92 mrk added pvdPvt private field for pvd routines
|
||||
* .03 04-10-92 rcz changed pvdPvt to pList
|
||||
* .04 05-18-92 rcz removed extern
|
||||
* .05 05-18-92 rcz Changed macro call "GET_PRECLOC(" to "GET_PRECLOC(precHeader,"
|
||||
* .06 06-01-92 rcz Moved struct RECNODE
|
||||
* .07 06-08-92 rcz Changed pList to preclist
|
||||
* .08 06-08-92 rcz New database access
|
||||
*/
|
||||
|
||||
#ifndef INCdbRecordsh
|
||||
#define INCdbRecordsh 1
|
||||
#include <ellLib.h>
|
||||
|
||||
struct recLoc{ /* record location*/
|
||||
long no_records; /*OBSOLETE DO NOT USE*/
|
||||
long no_used; /*OBSOLETE DO NOT USE*/
|
||||
long rec_size; /*record size in bytes */
|
||||
long record_type; /*record type */
|
||||
void *pFirst; /*OBSOLETE DO NOT USE*/
|
||||
ELLLIST *preclist; /*LIST head of sorted RECNODEs */
|
||||
};
|
||||
struct recHeader{ /*record header*/
|
||||
long number; /*number of record types*/
|
||||
struct recLoc **papRecLoc; /*ptr to arr of ptr to recLoc*/
|
||||
};
|
||||
|
||||
#define S_record_noRecords (M_record| 1) /*No records */
|
||||
|
||||
/***********************************************************************
|
||||
* Except that some ptr could be null the following is a valid reference
|
||||
*
|
||||
* precHeader->papRecLoc[i]->preclist
|
||||
*
|
||||
* The memory layout is:
|
||||
*
|
||||
* precHeader->recHeader
|
||||
* number
|
||||
* papRecLoc->[1]
|
||||
* [2]->recLoc
|
||||
* rec_type
|
||||
* pRECLIST-----> LIST---->RECNODE ...
|
||||
************************************************************************/
|
||||
|
||||
/************************************************************************
|
||||
* In the self defining record the following appears
|
||||
*
|
||||
* sdrHeader
|
||||
* recLoc
|
||||
* record 1
|
||||
* ...
|
||||
* record n (n = recLoc.no_records
|
||||
**************************************************************************/
|
||||
|
||||
/************************************************************************
|
||||
* The following macro returns NULL or a ptr to struct recLoc
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct recLoc *precLoc
|
||||
* if(!(precLoc=GET_PRECLOC(precHeader,type))) {<not found>}
|
||||
***********************************************************************/
|
||||
#define GET_PRECLOC(PRECHEADER,REC_TYPE)\
|
||||
(\
|
||||
(PRECHEADER)\
|
||||
?(\
|
||||
( ((REC_TYPE)<1) || ((REC_TYPE)>=(PRECHEADER)->number) )\
|
||||
? NULL\
|
||||
: ((PRECHEADER)->papRecLoc[(REC_TYPE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
#endif
|
||||
@@ -57,15 +57,6 @@
|
||||
|
||||
#define messagesize 100
|
||||
#define RPCL_LEN 184
|
||||
|
||||
#if defined(EPICS_LITTLE_ENDIAN)
|
||||
#define BYTE_SWAP_4(A) \
|
||||
( (((A) & 0xFF) << 24 ) | \
|
||||
(((A) & 0xFF00) << 8) | \
|
||||
(((A) & 0xFF0000) >> 8) | \
|
||||
(((A) & 0xFF000000) >> 24) )
|
||||
#endif
|
||||
|
||||
long postfix(char *pinfix, char *ppostfix,short *perror);
|
||||
|
||||
static char *ppstring[2]={"NPP","PP"};
|
||||
@@ -439,6 +430,7 @@ DBBASE *pdbbase;
|
||||
ELLLIST *preclist;
|
||||
int recType;
|
||||
if (!pdbbase || !ppvd || !precType) return;
|
||||
dbPvdFreeMem(pdbbase);
|
||||
/* loop thru the recLocs - removing lists then recLoc only */
|
||||
for (recType = 0; recType < precType->number; recType++) {
|
||||
if (!(precLoc = GET_PRECLOC(precHeader, recType))) continue;
|
||||
@@ -460,7 +452,6 @@ DBBASE *pdbbase;
|
||||
free((void *) precLoc);
|
||||
}
|
||||
/* free the rest of the memory allocations */
|
||||
dbPvdFreeMem(pdbbase);
|
||||
if (pdbbase->pchoiceCvt)
|
||||
free((void *) pdbbase->pchoiceCvt);
|
||||
if (pdbbase->pchoiceDev)
|
||||
@@ -749,7 +740,7 @@ char *precordName;
|
||||
struct recLoc *precLoc = NULL;
|
||||
short rec_size;
|
||||
|
||||
if(strlen(precordName)>(size_t)PVNAME_SZ) return(S_dbLib_nameLength);
|
||||
if(strlen(precordName)>PVNAME_SZ) return(S_dbLib_nameLength);
|
||||
/* clear callers entry */
|
||||
zeroDbentry(pdbentry);
|
||||
if(!dbFindRecord(pdbentry,precordName)) return (S_dbLib_recExists);
|
||||
@@ -947,7 +938,7 @@ char *newName;
|
||||
long status;
|
||||
DBENTRY dbentry;
|
||||
|
||||
if(strlen(newName)>(size_t)PVNAME_SZ) return(S_dbLib_nameLength);
|
||||
if(strlen(newName)>PVNAME_SZ) return(S_dbLib_nameLength);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
dbInitEntry(pdbentry->pdbbase,&dbentry);
|
||||
status = dbFindRecord(&dbentry,newName);
|
||||
@@ -1017,23 +1008,15 @@ char *pfieldName;
|
||||
bottom = 0;
|
||||
test = (top + bottom) / 2;
|
||||
while (1) {
|
||||
unsigned int t1, t2;
|
||||
|
||||
/* check the field name */
|
||||
t1 = (unsigned int) sortFldName[ test];
|
||||
t2 = (unsigned int) *(unsigned int*)pconvName;
|
||||
#if defined(EPICS_LITTLE_ENDIAN)
|
||||
t1 = BYTE_SWAP_4( t1);
|
||||
t2 = BYTE_SWAP_4( t2);
|
||||
#endif
|
||||
if(t1 == t2) {
|
||||
if (sortFldName[test] == *(unsigned long *) pconvName) {
|
||||
if(!(pflddes=GET_PFLDDES(precTypDes,sortFldInd[test])))
|
||||
return(S_dbLib_recdesNotFound);
|
||||
pdbentry->pflddes = pflddes;
|
||||
pdbentry->pfield = precord + pflddes->offset;
|
||||
pdbentry->indfield = sortFldInd[test];
|
||||
return (0);
|
||||
} else if (t1 > t2) {
|
||||
} else if (sortFldName[test] > *(unsigned long *) pconvName) {
|
||||
top = test - 1;
|
||||
if (top < bottom) return (S_dbLib_fieldNotFound);
|
||||
test = (top + bottom) / 2;
|
||||
@@ -1608,7 +1591,7 @@ char *pstring;
|
||||
if (!(pchoice = pdevChoiceSet->papDevChoice[i]->pchoice))
|
||||
continue;
|
||||
if (strcmp(pchoice, pstring) == 0) {
|
||||
long link_type;
|
||||
long link_type,status;
|
||||
|
||||
link_type = pdevChoiceSet->papDevChoice[i]->link_type;
|
||||
/*If no INP or OUT OK */
|
||||
@@ -1640,7 +1623,7 @@ char *pstring;
|
||||
if(pstr[ind]!=' ' && pstr[ind]!='\t') break;
|
||||
pstr[ind] = '\0';
|
||||
}
|
||||
if(!pstr || strlen(pstr)==0 ) {
|
||||
if(!pstr || strlen(pstr)<=0 ) {
|
||||
if(plink->type==PV_LINK) dbCvtLinkToConstant(pdbentry);
|
||||
if(plink->type!=CONSTANT) return(S_dbLib_badField);
|
||||
return(0);
|
||||
@@ -1706,18 +1689,12 @@ char *pstring;
|
||||
if(!(end = strchr(pstr,'N'))) return (S_dbLib_badField);
|
||||
pstr = end + 1;
|
||||
sscanf(pstr,"%hd",&plink->value.camacio.n);
|
||||
if(!(end = strchr(pstr,'A'))) {
|
||||
plink->value.camacio.a = 0;
|
||||
} else {
|
||||
pstr = end + 1;
|
||||
sscanf(pstr,"%hd",&plink->value.camacio.a);
|
||||
}
|
||||
if(!(end = strchr(pstr,'F'))) {
|
||||
plink->value.camacio.f = 0;
|
||||
} else {
|
||||
pstr = end + 1;
|
||||
sscanf(pstr,"%hd",&plink->value.camacio.f);
|
||||
}
|
||||
if(!(end = strchr(pstr,'A'))) return (S_dbLib_badField);
|
||||
pstr = end + 1;
|
||||
sscanf(pstr,"%hd",&plink->value.camacio.a);
|
||||
if(!(end = strchr(pstr,'F'))) return (S_dbLib_badField);
|
||||
pstr = end + 1;
|
||||
sscanf(pstr,"%hd",&plink->value.camacio.f);
|
||||
plink->value.camacio.parm[0] = 0;
|
||||
if(end = strchr(pstr,'@')) {
|
||||
pstr = end + 1;
|
||||
@@ -4150,23 +4127,10 @@ FILE *fp;
|
||||
}
|
||||
|
||||
/* Beginning of Process Variable Directory Routines*/
|
||||
int dbPvdHashTableSize = 512;
|
||||
static int dbPvdHashTableShift;
|
||||
#define NTABLESIZES 9
|
||||
static struct {
|
||||
unsigned int tablesize;
|
||||
int shift;
|
||||
}hashTableParms[9] = {
|
||||
{256,0},
|
||||
{512,1},
|
||||
{1024,2},
|
||||
{2048,3},
|
||||
{4096,4},
|
||||
{8192,5},
|
||||
{16384,6},
|
||||
{32768,7},
|
||||
{65536,8}
|
||||
};
|
||||
#define HASH_NO 2048 /* number of hash table entries */
|
||||
#define SHIFT 3 /*number of bits to shift*/
|
||||
|
||||
|
||||
/*The hash algorithm is a modification of the algorithm described in */
|
||||
/* Fast Hashing of Variable Length Text Strings, Peter K. Pearson, */
|
||||
/* Communications of the ACM, June 1990 */
|
||||
@@ -4208,7 +4172,7 @@ static unsigned short hash( char *pname, int length)
|
||||
}
|
||||
ind0 = (unsigned short)h0;
|
||||
ind1 = (unsigned short)h1;
|
||||
return((ind1<<dbPvdHashTableShift) ^ ind0);
|
||||
return((ind1<<SHIFT) ^ ind0);
|
||||
}
|
||||
|
||||
#ifdef __STDC__
|
||||
@@ -4218,19 +4182,9 @@ void dbPvdInitPvt(pdbbase)
|
||||
DBBASE *pdbbase;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
ELLLIST **ppvd;
|
||||
int i;
|
||||
ELLLIST **ppvd;
|
||||
|
||||
for(i=0; i< NTABLESIZES; i++) {
|
||||
if((i==NTABLESIZES-1)
|
||||
||((dbPvdHashTableSize>=hashTableParms[i].tablesize)
|
||||
&& (dbPvdHashTableSize<hashTableParms[i+1].tablesize))) {
|
||||
dbPvdHashTableSize = hashTableParms[i].tablesize;
|
||||
dbPvdHashTableShift = hashTableParms[i].shift;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ppvd = dbCalloc(dbPvdHashTableSize, sizeof(ELLLIST *));
|
||||
ppvd = dbCalloc(HASH_NO, sizeof(ELLLIST *));
|
||||
pdbbase->ppvd = (void *) ppvd;
|
||||
return;
|
||||
}
|
||||
@@ -4316,8 +4270,7 @@ RECNODE *precnode;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
if(ppvdNode->precnode && ppvdNode->precnode->precord
|
||||
&& strcmp(name,(char *)ppvdNode->precnode->precord) == 0) {
|
||||
if(strcmp(name,(char *)ppvdNode->precnode->precord) == 0) {
|
||||
ellDelete(ppvdlist, (ELLNODE*)ppvdNode);
|
||||
free((void *)ppvdNode);
|
||||
return;
|
||||
@@ -4341,7 +4294,7 @@ DBBASE *pdbbase;
|
||||
PVDENTRY *next;
|
||||
|
||||
if (ppvd == NULL) return;
|
||||
for (hashInd=0; hashInd<(unsigned short)dbPvdHashTableSize; hashInd++) {
|
||||
for (hashInd=0; hashInd<HASH_NO; hashInd++) {
|
||||
if(ppvd[hashInd] == NULL) continue;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
@@ -4357,11 +4310,10 @@ DBBASE *pdbbase;
|
||||
}
|
||||
|
||||
#ifdef __STDC__
|
||||
void dbPvdDump(DBBASE *pdbbase,int verbose)
|
||||
void dbPvdDump(DBBASE *pdbbase)
|
||||
#else
|
||||
void dbPvdDump(pdbbase,verbose)
|
||||
void dbPvdDump(pdbbase)
|
||||
DBBASE *pdbbase;
|
||||
int verbose;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
unsigned short hashInd;
|
||||
@@ -4371,16 +4323,14 @@ int verbose;
|
||||
int number;
|
||||
|
||||
if (ppvd == NULL) return;
|
||||
printf("Process Variable Directory ");
|
||||
printf("dbPvdHashTableSize %d dbPvdHashTableShift %d\n",
|
||||
dbPvdHashTableSize,dbPvdHashTableShift);
|
||||
for (hashInd=0; hashInd<(unsigned short)dbPvdHashTableSize; hashInd++) {
|
||||
printf("Process Variable Directory\n");
|
||||
for (hashInd=0; hashInd<HASH_NO; hashInd++) {
|
||||
if(ppvd[hashInd] == NULL) continue;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
printf("\n%3.3hd=%3.3d ",hashInd,ellCount(ppvdlist));
|
||||
printf(" %3.3hd=%3.3d\n",hashInd,ellCount(ppvdlist));
|
||||
number=0;
|
||||
while(ppvdNode && verbose) {
|
||||
while(ppvdNode) {
|
||||
printf(" %s",(char *)ppvdNode->precnode->precord);
|
||||
if(number++ ==2) {number=0;printf("\n ");}
|
||||
ppvdNode = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
|
||||
282
src/cvtDctsdr/dbStaticLib.h
Normal file
282
src/cvtDctsdr/dbStaticLib.h
Normal file
@@ -0,0 +1,282 @@
|
||||
/* $Id$
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 06-08-93
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 06-08-93 mrk Replace dbManipulate
|
||||
*/
|
||||
|
||||
#ifndef INCdbStaticLibh
|
||||
#define INCdbStaticLibh 1
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include <ellLib.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbRecords.h>
|
||||
#include <dbRecType.h>
|
||||
#include <dbFldTypes.h>
|
||||
#include <dbRecDes.h>
|
||||
#include <choice.h>
|
||||
#include <dbBase.h>
|
||||
#include <link.h>
|
||||
#include <errMdef.h>
|
||||
|
||||
/*Field types as seen by static database access clients*/
|
||||
#define DCT_STRING 0
|
||||
#define DCT_INTEGER 1
|
||||
#define DCT_REAL 2
|
||||
#define DCT_MENU 3
|
||||
#define DCT_MENUFORM 4
|
||||
#define DCT_INLINK 5
|
||||
#define DCT_OUTLINK 6
|
||||
#define DCT_FWDLINK 7
|
||||
#define DCT_NOACCESS 8
|
||||
|
||||
/*Link types as seen by static database access clients*/
|
||||
#define DCT_LINK_CONSTANT 0
|
||||
#define DCT_LINK_FORM 1
|
||||
#define DCT_LINK_PV 2
|
||||
#define DCT_LINK_DEVICE 3
|
||||
|
||||
/* conversion types for DBFLDDES.cvt_type*/
|
||||
#define CT_DECIMAL 0
|
||||
#define CT_HEX 1
|
||||
|
||||
/*options for dbRead and dbWrite*/
|
||||
#define DB_RECDES_IO 0x1
|
||||
#define DB_RECORD_IO 0x2
|
||||
|
||||
typedef struct dbBase DBBASE;
|
||||
|
||||
typedef struct recNode {
|
||||
ELLNODE node;
|
||||
void *precord;
|
||||
}RECNODE;
|
||||
|
||||
typedef struct{
|
||||
DBBASE *pdbbase;
|
||||
RECNODE *precnode;
|
||||
struct fldDes *pflddes;
|
||||
void *pfield;
|
||||
char *message;
|
||||
short record_type;
|
||||
short indfield;
|
||||
void *formpvt;
|
||||
} DBENTRY;
|
||||
|
||||
|
||||
/*directory*/
|
||||
typedef struct{
|
||||
ELLNODE node;
|
||||
unsigned short record_type;
|
||||
RECNODE *precnode;
|
||||
} PVDENTRY;
|
||||
|
||||
/* Static database access routines*/
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
void * dbCalloc(size_t nobj,size_t size);
|
||||
void * dbMalloc(size_t size);
|
||||
DBBASE *dbAllocBase(void);
|
||||
void dbFreeBase(DBBASE *pdbbase);
|
||||
DBENTRY *dbAllocEntry(DBBASE *pdbbase);
|
||||
void dbFreeEntry(DBENTRY *pdbentry);
|
||||
void dbInitEntry(DBBASE *pdbbase,DBENTRY *pdbentry);
|
||||
void dbFinishEntry(DBENTRY *pdbentry);
|
||||
DBENTRY *dbCopyEntry(DBENTRY *pdbentry);
|
||||
|
||||
long dbRead(DBBASE *pdbbase,FILE *fp);
|
||||
long dbWrite(DBBASE *pdbbase,FILE *fpdctsdr,FILE *fp);
|
||||
|
||||
long dbFindRecdes(DBENTRY *pdbentry,char *recdesname);
|
||||
long dbFirstRecdes(DBENTRY *pdbentry);
|
||||
long dbNextRecdes(DBENTRY *pdbentry);
|
||||
char *dbGetRecdesName(DBENTRY *pdbentry);
|
||||
int dbGetNRecdes(DBENTRY *pdbentry);
|
||||
long dbCopyRecdes(DBENTRY *from,DBENTRY *to);
|
||||
|
||||
long dbCreateRecord(DBENTRY *pdbentry,char *precordName);
|
||||
long dbDeleteRecord(DBENTRY *pdbentry);
|
||||
long dbFindRecord(DBENTRY *pdbentry,char *precordName);
|
||||
long dbFirstRecord(DBENTRY *pdbentry); /*first of record type*/
|
||||
long dbNextRecord(DBENTRY *pdbentry);
|
||||
int dbGetNRecords(DBENTRY *pdbentry);
|
||||
char *dbGetRecordName(DBENTRY *pdbentry);
|
||||
long dbRenameRecord(DBENTRY *pdbentry,char *newName);
|
||||
long dbCopyRecord(DBENTRY *from,DBENTRY *to);
|
||||
|
||||
long dbFindField(DBENTRY *pdbentry,char *pfieldName);
|
||||
long dbFirstFielddes(DBENTRY *pdbentry,int dctonly);
|
||||
long dbNextFielddes(DBENTRY *pdbentry,int dctonly);
|
||||
int dbGetFieldType(DBENTRY *pdbentry);
|
||||
int dbGetNFields(DBENTRY *pdbentry,int dctonly);
|
||||
char *dbGetFieldName(DBENTRY *pdbentry);
|
||||
char *dbGetPrompt(DBENTRY *pdbentry);
|
||||
int dbGetPromptGroup(DBENTRY *pdbentry);
|
||||
|
||||
char *dbGetString(DBENTRY *pdbentry);
|
||||
long dbPutString(DBENTRY *pdbentry,char *pstring);
|
||||
char *dbVerify(DBENTRY *pdbentry,char *pstring);
|
||||
char *dbGetRange(DBENTRY *pdbentry);
|
||||
int dbIsDefaultValue(DBENTRY *pdbentry);
|
||||
|
||||
char **dbGetChoices(DBENTRY *pdbentry);
|
||||
int dbGetMenuIndex(DBENTRY *pdbentry);
|
||||
long dbPutMenuIndex(DBENTRY *pdbentry,int index);
|
||||
int dbGetNMenuChoices(DBENTRY *pdbentry);
|
||||
long dbCopyMenu(DBENTRY *from,DBENTRY *to);
|
||||
|
||||
int dbAllocForm(DBENTRY *pdbentry);
|
||||
long dbFreeForm(DBENTRY *pdbentry);
|
||||
char **dbGetFormPrompt(DBENTRY *pdbentry);
|
||||
char **dbGetFormValue(DBENTRY *pdbentry);
|
||||
long dbPutForm(DBENTRY *pdbentry,char **value);
|
||||
char **dbVerifyForm(DBENTRY *pdbentry,char **value);
|
||||
|
||||
int dbGetNLinks(DBENTRY *pdbentry);
|
||||
long dbGetLinkField(DBENTRY *pdbentry,int index);
|
||||
int dbGetLinkType(DBENTRY *pdbentry);
|
||||
long dbCvtLinkToConstant(DBENTRY *pdbentry);
|
||||
long dbCvtLinkToPvlink(DBENTRY *pdbentry);
|
||||
long dbPutPvlink(DBENTRY *pdbentry,int pp,int ms,char *pvname);
|
||||
long dbGetPvlink(DBENTRY *pdbentry,int *pp,int *ms,char *pvname);
|
||||
|
||||
/*dump routines*/
|
||||
void dbDumpRecords(DBBASE *pdbbase,char *precdesname,int modOnly);
|
||||
void dbDumpPvd(DBBASE *pdbbase);
|
||||
void dbReportDeviceConfig(DBBASE *pdbbase,FILE *report);
|
||||
|
||||
/* Misc useful routines*/
|
||||
/*general purpose allocation routines to invoke calloc and maloc */
|
||||
/* NOTE: These routines do NOT return if they fail. */
|
||||
void *dbCalloc(size_t nobj,size_t size);
|
||||
void *dbMalloc(size_t size);
|
||||
|
||||
/* The following routines should only be used by access routines*/
|
||||
void dbPvdInitPvt(DBBASE *pdbbase);
|
||||
PVDENTRY *dbPvdFind(DBBASE *pdbbase,char *name,int lenname);
|
||||
PVDENTRY *dbPvdAdd(DBBASE *pdbbase,unsigned short record_type,RECNODE *precnode);
|
||||
void dbPvdDelete(DBBASE *pdbbase,RECNODE *precnod);
|
||||
void dbPvdFreeMem(DBBASE *pdbbase);
|
||||
void dbPvdDump(DBBASE *pdbbase);
|
||||
#else
|
||||
void * dbCalloc();
|
||||
void * dbMalloc();
|
||||
DBBASE *dbAllocBase();
|
||||
void dbFreeBase();
|
||||
DBENTRY *dbAllocEntry();
|
||||
void dbFreeEntry();
|
||||
void dbInitEntry();
|
||||
void dbFinishEntry();
|
||||
DBENTRY *dbCopyEntry();
|
||||
|
||||
long dbRead();
|
||||
long dbWrite();
|
||||
|
||||
long dbFindRecdes();
|
||||
long dbFirstRecdes();
|
||||
long dbNextRecdes();
|
||||
char *dbGetRecdesName();
|
||||
int dbGetNRecdes();
|
||||
long dbCopyRecdes();
|
||||
|
||||
long dbCreateRecord();
|
||||
long dbDeleteRecord();
|
||||
long dbFindRecord();
|
||||
long dbFirstRecord();
|
||||
long dbNextRecord();
|
||||
int dbGetNRecords();
|
||||
char *dbGetRecordName();
|
||||
long dbRenameRecord();
|
||||
long dbCopyRecord();
|
||||
|
||||
long dbFindField();
|
||||
long dbFirstFielddes();
|
||||
long dbNextFielddes();
|
||||
int dbGetFieldType();
|
||||
int dbGetNFields();
|
||||
char *dbGetFieldName();
|
||||
char *dbGetPrompt();
|
||||
|
||||
char *dbGetString();
|
||||
long dbPutString();
|
||||
char *dbVerify();
|
||||
char *dbGetRange();
|
||||
int dbIsDefaultValue();
|
||||
|
||||
char **dbGetChoices();
|
||||
int dbGetMenuIndex();
|
||||
long dbPutMenuIndex();
|
||||
int dbGetNMenuChoices();
|
||||
long dbCopyMenu();
|
||||
|
||||
int dbAllocForm();
|
||||
long dbFreeForm();
|
||||
char **dbGetFormPrompt();
|
||||
char **dbGetFormValue();
|
||||
long dbPutForm();
|
||||
char **dbVerifyForm();
|
||||
|
||||
int dbGetNLinks();
|
||||
long dbGetLinkField();
|
||||
int dbGetLinkType();
|
||||
long dbCvtLinkToConstant();
|
||||
long dbCvtLinkToPvlink();
|
||||
long dbPutPvlink();
|
||||
long dbGetPvlink();
|
||||
|
||||
/*dump routines*/
|
||||
void dbDumpRecords();
|
||||
void dbDumpPvd();
|
||||
|
||||
/* Misc useful routines*/
|
||||
/*general purpose allocation routines to invoke calloc and maloc */
|
||||
/* NOTE: These routines do NOT return if they fail. */
|
||||
void *dbCalloc();
|
||||
void *dbMalloc();
|
||||
|
||||
/* The following routines should only be used by access routines*/
|
||||
void dbPvdInitPvt();
|
||||
PVDENTRY *dbPvdFind();
|
||||
PVDENTRY *dbPvdAdd();
|
||||
void dbPvdDelete();
|
||||
void dbPvdFreeMem();
|
||||
void dbPvdDump();
|
||||
#endif /*__STDC__*/
|
||||
|
||||
#define S_dbLib_recdesNotFound (M_dbLib| 1) /*Record Type does not exist*/
|
||||
#define S_dbLib_recExists (M_dbLib| 3) /*Record Already exists*/
|
||||
#define S_dbLib_recNotFound (M_dbLib| 5) /*Record Not Found*/
|
||||
#define S_dbLib_flddesNotFound (M_dbLib| 7) /*Field Description Not Found*/
|
||||
#define S_dbLib_fieldNotFound (M_dbLib| 9) /*Field Not Found*/
|
||||
#define S_dbLib_badField (M_dbLib|11) /*Bad Field value*/
|
||||
#define S_dbLib_menuNotFound (M_dbLib|13) /*Menu not found*/
|
||||
#define S_dbLib_badLink (M_dbLib|15) /*Bad Link Field*/
|
||||
#define S_dbLib_nameLength (M_dbLib|17) /*Record Name is too long*/
|
||||
#endif /*INCdbStaticLibh*/
|
||||
133
src/cvtDctsdr/devSup.h
Normal file
133
src/cvtDctsdr/devSup.h
Normal file
@@ -0,0 +1,133 @@
|
||||
/* devSup.h Device Support */
|
||||
/* share/epicsH $Id$ */
|
||||
/*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 10-04-91 jba Added error message
|
||||
* .02 05-18-92 rcz Changed macro "GET_DEVSUP(" to "GET_PDEVSUP(precDevSup,"
|
||||
* .03 05-18-92 rcz Structure devSup changed element name from dsetName to papDsetName
|
||||
* .04 05-18-92 rcz New database access
|
||||
*/
|
||||
|
||||
#ifndef INCdevSuph
|
||||
#define INCdevSuph 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
typedef long (*DEVSUPFUN)(void*); /* ptr to device support function*/
|
||||
#else
|
||||
typedef long (*DEVSUPFUN)(); /* ptr to device support function*/
|
||||
#endif
|
||||
|
||||
struct dset { /* device support entry table */
|
||||
long number; /*number of support routines*/
|
||||
DEVSUPFUN report; /*print report*/
|
||||
DEVSUPFUN init; /*init support*/
|
||||
DEVSUPFUN init_record; /*init support for particular record*/
|
||||
DEVSUPFUN get_ioint_info; /* get io interrupt information*/
|
||||
/*other functions are record dependent*/
|
||||
};
|
||||
|
||||
struct devSup {
|
||||
long number; /*number of dset */
|
||||
char **papDsetName; /*ptr of arr of ptr to name */
|
||||
struct dset **papDset; /*ptr to arr of ptr to dset */
|
||||
};
|
||||
|
||||
struct recDevSup {
|
||||
long number; /*number of record types */
|
||||
struct devSup **papDevSup; /*ptr to arr of ptr to devSup */
|
||||
};
|
||||
|
||||
#define S_dev_noDevSup (M_devSup| 1) /*SDR_DEVSUP: Device support missing*/
|
||||
#define S_dev_noDSET (M_devSup| 3) /*Missing device support entry table*/
|
||||
#define S_dev_missingSup (M_devSup| 5) /*Missing device support routine*/
|
||||
#define S_dev_badInpType (M_devSup| 7) /*Bad INP link type*/
|
||||
#define S_dev_badOutType (M_devSup| 9) /*Bad OUT link type*/
|
||||
#define S_dev_badInitRet (M_devSup|11) /*Bad init_rec return value */
|
||||
#define S_dev_badBus (M_devSup|13) /*Illegal bus type*/
|
||||
#define S_dev_badCard (M_devSup|15) /*Illegal or nonexistant module*/
|
||||
#define S_dev_badSignal (M_devSup|17) /*Illegal signal*/
|
||||
#define S_dev_NoInit (M_devSup|19) /*No init*/
|
||||
#define S_dev_Conflict (M_devSup|21) /*Multiple records accessing same signal*/
|
||||
|
||||
/***************************************************************************
|
||||
* except that some fields could be null the following is a valid reference
|
||||
*
|
||||
* precDevSup->papDevSup[i]->papDset[j]->report(<args>);
|
||||
*
|
||||
* The memory layout is
|
||||
*
|
||||
* precDevSup->recDevSup
|
||||
* number
|
||||
* papDevSup->[1]
|
||||
* [2]->devSup
|
||||
* number
|
||||
* papDsetName->[0]->"name"
|
||||
* papDset-->[0]
|
||||
* [1]->dset
|
||||
* number
|
||||
* report->report()
|
||||
* ...
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* The following macro returns NULL or ptr to struct devSup
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct devSup *pdevSup;
|
||||
* if(!(pdevSup=GET_PDEVSUP(precDevSup,rectype))) {<null>}
|
||||
**************************************************************************/
|
||||
#define GET_PDEVSUP(PRECDEVSUP,REC_TYPE)\
|
||||
(\
|
||||
(PRECDEVSUP)\
|
||||
?(\
|
||||
( ((REC_TYPE)<1) || ((REC_TYPE)>=(PRECDEVSUP)->number) )\
|
||||
? NULL\
|
||||
: ((PRECDEVSUP)->papDevSup[(REC_TYPE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* The following macro returns NULL of ptr to struct dset
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct dset *pdset;
|
||||
* if(!(pdset=GET_PDSET(pdevSup,dtyp))) {<null>}
|
||||
**************************************************************************/
|
||||
#define GET_PDSET(PDEVSUP,DTYP)\
|
||||
(\
|
||||
(PDEVSUP)\
|
||||
?(\
|
||||
( (((unsigned)DTYP)>=((struct devSup*)(PDEVSUP))->number) )\
|
||||
? NULL\
|
||||
: ( ((struct devSup*)(PDEVSUP))->papDset[(DTYP)] )\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
#endif
|
||||
112
src/cvtDctsdr/drvSup.h
Normal file
112
src/cvtDctsdr/drvSup.h
Normal file
@@ -0,0 +1,112 @@
|
||||
/* drvSup.h Driver Support */
|
||||
/* share/epicsH $Id$ */
|
||||
|
||||
/*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-21-92 rcz changed drvetName to papDrvName
|
||||
* .02 05-18-92 rcz New database access (removed extern)
|
||||
*/
|
||||
|
||||
#ifndef INCdrvSuph
|
||||
#define INCdrvSuph 1
|
||||
|
||||
typedef long (*DRVSUPFUN) (); /* ptr to driver support function*/
|
||||
|
||||
struct drvet { /* driver entry table */
|
||||
long number; /*number of support routines*/
|
||||
DRVSUPFUN report; /*print report*/
|
||||
DRVSUPFUN init; /*init support*/
|
||||
DRVSUPFUN reboot; /*reboot support*/
|
||||
/*other functions are device dependent*/
|
||||
};
|
||||
|
||||
struct drvSup {
|
||||
long number; /*number of dset */
|
||||
char **papDrvName; /*ptr to arr of ptr to drvetName*/
|
||||
struct drvet **papDrvet; /*ptr to arr ptr to drvet */
|
||||
};
|
||||
#define DRVETNUMBER ( (sizeof(struct drvet) -sizeof(long))/sizeof(DRVSUPFUN) )
|
||||
|
||||
#define S_drv_noDrvSup (M_drvSup| 1) /*SDR_DRVSUP: Driver support missing*/
|
||||
#define S_drv_noDrvet (M_drvSup| 3) /*Missing driver support entry table*/
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
*The following are valid references
|
||||
*
|
||||
* pdrvSup->drvetName[i] This is address of name string
|
||||
* pdrvSup->papDrvet[i]->report(<args>);
|
||||
*
|
||||
* The memory layout is
|
||||
*
|
||||
* pdrvSup->drvSup
|
||||
* number
|
||||
* papDrvName->[0]->"name"
|
||||
* papDrvet-->[0]
|
||||
* [1]->drvet
|
||||
* number
|
||||
* report->report()
|
||||
* ...
|
||||
*************************************************************************/
|
||||
|
||||
/**************************************************************************
|
||||
* The following macro returns either the addr of drvet or NULL
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct drvet *pdrvet;
|
||||
* if(!(pdrvet=GET_PDRVET(pdrvSup,type))) {<null}
|
||||
***********************************************************************/
|
||||
#define GET_PDRVET(PDRVSUP,TYPE)\
|
||||
(\
|
||||
PDRVSUP\
|
||||
?(\
|
||||
(((TYPE) < 1) || ((TYPE) >= PDRVSUP->number))\
|
||||
? NULL\
|
||||
: (PDRVSUP->papDrvet[(TYPE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
/**************************************************************************
|
||||
* The following macro returns either the addr of drvName or NULL
|
||||
* A typical usage is:
|
||||
*
|
||||
* char *pdrvName;
|
||||
* if(!(pdrvName=GET_PDRVNAME(pdrvSup,type))) {<null}
|
||||
***********************************************************************/
|
||||
#define GET_PDRVNAME(PDRVSUP,TYPE)\
|
||||
(\
|
||||
PDRVSUP\
|
||||
?(\
|
||||
(((TYPE) < 1) || ((TYPE) >= PDRVSUP->number))\
|
||||
? NULL\
|
||||
: (PDRVSUP->papDrvName[(TYPE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
#endif
|
||||
118
src/cvtDctsdr/errMdef.h
Normal file
118
src/cvtDctsdr/errMdef.h
Normal file
@@ -0,0 +1,118 @@
|
||||
/* errMdef.h err.h - Error Handling definitions */
|
||||
/* share/epicsH $Id$ */
|
||||
/*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 mm-dd-yy iii Comment
|
||||
* .02 12-02-91 jrw added GPIB and BB message codes
|
||||
* .03 03-11-93 joh added __FILE__ and __LINE__ to errMessage()
|
||||
* .04 04-01-93 joh added vxi
|
||||
* .05 04-29-93 joh added errPrintStatus() func proto
|
||||
* .06 09-04-93 rcz added functions ... for errSymLib.c merge
|
||||
* .07 02-03-94 mrk RTN_SUCCESS is true only if status=0
|
||||
* .08 02-03-94 mrk Add access security library
|
||||
* .09 05-23-95 joh Add bucket hashing library
|
||||
*/
|
||||
|
||||
#ifndef INCerrMdefh
|
||||
#define INCerrMdefh
|
||||
|
||||
#ifdef __STDC__
|
||||
# include <stdarg.h>
|
||||
#else
|
||||
# include <varargs.h>
|
||||
#endif
|
||||
#include <ellLib.h>
|
||||
|
||||
#define RTN_SUCCESS(STATUS) ((STATUS)==0)
|
||||
|
||||
#define M_dbAccess (501 <<16) /*Database Access Routines */
|
||||
#define M_sdr (502 <<16) /*Self Defining Records */
|
||||
#define M_drvSup (503 <<16) /*Driver Support*/
|
||||
#define M_devSup (504 <<16) /*Device Support*/
|
||||
#define M_recSup (505 <<16) /*Record Support*/
|
||||
#define M_recType (506 <<16) /*Record Type*/
|
||||
#define M_record (507 <<16) /*Database Records*/
|
||||
#define M_ar (508 <<16) /*Archiver; see arDefs.h*/
|
||||
#define M_ts (509 <<16) /*Time Stamp Routines; see tsDefs.h*/
|
||||
#define M_arAcc (510 <<16) /*Archive Access Library Routines*/
|
||||
#define M_bf (511 <<16) /*Block File Routines; see bfDefs.h*/
|
||||
#define M_syd (512 <<16) /*Sync Data Routines; see sydDefs.h*/
|
||||
#define M_ppr (513 <<16) /*Portable Plot Routines; see pprPlotDefs.h*/
|
||||
#define M_env (514 <<16) /*Environment Routines; see envDefs.h*/
|
||||
#define M_gen (515 <<16) /*General Purpose Routines; see genDefs.h*/
|
||||
#define M_gpib (516 <<16) /*Gpib driver & device support; see drvGpibInterface.h*/
|
||||
#define M_bitbus (517 <<16) /*Bitbus driver & device support; see drvBitBusInterface.h*/
|
||||
#define M_dbCa (518 <<16) /*CA_LINKs; see calink.h*/
|
||||
#define M_dbLib (519 <<16) /*Static Database Access */
|
||||
#define M_epvxi (520 <<16) /*VXI Driver*/
|
||||
#define M_devLib (521 <<16) /*Device Resource Registration*/
|
||||
#define M_asLib (522 <<16) /*Access Security */
|
||||
#define M_cas (523 <<16) /*CA server*/
|
||||
#define M_casApp (524 <<16) /*CA server application*/
|
||||
#define M_bucket (525 <<16) /*Bucket Hash*/
|
||||
#define M_sbuf (526 <<16) /*Shared Buffer*/
|
||||
|
||||
|
||||
/*
|
||||
* redefine errMessage with a macro so we can print
|
||||
* the file and line number
|
||||
*/
|
||||
#define errMessage(S, PM) \
|
||||
errPrintf(S, __FILE__, __LINE__, PM)
|
||||
|
||||
#ifdef __STDC__
|
||||
int errSymFind(long status, char *name);
|
||||
int UnixSymFind(long status, char *name, long *value);
|
||||
int ModSymFind(long status, char *name, long *value);
|
||||
void errSymTest(unsigned short modnum, unsigned short begErrNum, unsigned short endErrNum);
|
||||
void errSymTestPrint(long errNum);
|
||||
int errSymBld();
|
||||
int errSymbolAdd (long errNum,char *name);
|
||||
void errPrintf(long status, const char *pFileName,
|
||||
int lineno, const char *pformat, ...);
|
||||
void errSymDump();
|
||||
void tstErrSymFind();
|
||||
void errInit(void);
|
||||
|
||||
#else /*__STDC__*/
|
||||
|
||||
void errSymTest();
|
||||
int errSymFind();
|
||||
int UnixSymFind();
|
||||
int ModSymFind();
|
||||
void errSymTestPrint();
|
||||
int errSymBld();
|
||||
int errSymbolAdd();
|
||||
void errPrintf();
|
||||
void errSymDump();
|
||||
void tstErrSymFind();
|
||||
#endif /*__STDC__*/
|
||||
|
||||
extern int errVerbose;
|
||||
|
||||
#endif /*INCerrMdefh*/
|
||||
189
src/cvtDctsdr/link.h
Normal file
189
src/cvtDctsdr/link.h
Normal file
@@ -0,0 +1,189 @@
|
||||
/* link.h */
|
||||
/* base/include $Id$ */
|
||||
|
||||
/*
|
||||
* Original Author: Bob Dalesio
|
||||
* Current Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 12-18-91 jba Changed caddr_t to void *
|
||||
* .02 3-16-92 frl changed link.value.value to double
|
||||
* .03 9-9-92 frl added vxi link type
|
||||
* .04 12-13-93 mcn added conversion pointer for fast links
|
||||
* .05 1-10-95 jt added rf_io structure
|
||||
*/
|
||||
|
||||
#include <dbDefs.h>
|
||||
|
||||
/* link types */
|
||||
#ifndef INClinkLT
|
||||
#define INClinkLT
|
||||
#define CONSTANT 0
|
||||
#define PV_LINK 1
|
||||
#define VME_IO 2
|
||||
#define CAMAC_IO 3
|
||||
#define AB_IO 4
|
||||
#define GPIB_IO 5
|
||||
#define BITBUS_IO 6
|
||||
#define DB_LINK 10
|
||||
#define CA_LINK 11
|
||||
#define INST_IO 12 /* instrument */
|
||||
#define BBGPIB_IO 13 /* bitbus -> gpib */
|
||||
#define RF_IO 14
|
||||
#define VXI_IO 15
|
||||
#endif /*INClinkLT*/
|
||||
|
||||
#ifndef INClinkh
|
||||
#define INClinkh 1
|
||||
#define INSTIO_FLD_SZ 36 /* field size for instio */
|
||||
#define LINK_PARAM_SZ 32
|
||||
#define VME_PARAM_SZ 32
|
||||
#define AB_PARAM_SZ 26
|
||||
#define CAMAC_PARAM_SZ 26
|
||||
#define VXI_PARAM_SZ 26
|
||||
#define VXIDYNAMIC 0
|
||||
#define VXISTATIC 1
|
||||
|
||||
/* structure of a link to a process variable*/
|
||||
struct pv_link {
|
||||
short process_passive; /* should in/out passive link be processed*/
|
||||
short maximize_sevr; /* maximize sevr of link. stat=LINK_ALARM*/
|
||||
char pvname[PVNAME_SZ+1];
|
||||
char pad[3];
|
||||
char fldname[FLDNAME_SZ];
|
||||
};
|
||||
|
||||
/* structure of a link to a database link */
|
||||
struct db_link {
|
||||
short process_passive; /* should in/out passive link be processed */
|
||||
short maximize_sevr; /* maximize sevr of link. stat=LINK_ALARM */
|
||||
void *pdbAddr; /* pointer to database address structure */
|
||||
long (*conversion)(); /* conversion routine for fast links */
|
||||
};
|
||||
|
||||
/* structure of a VME io channel */
|
||||
struct vmeio {
|
||||
short card;
|
||||
short signal;
|
||||
char parm[VME_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* structure of a CAMAC io channel */
|
||||
struct camacio {
|
||||
short b;
|
||||
short c;
|
||||
short n;
|
||||
short a;
|
||||
short f;
|
||||
char parm[CAMAC_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* structure of a RF io channel */
|
||||
struct rfio {
|
||||
short branch;
|
||||
short cryo;
|
||||
short micro;
|
||||
short dataset;
|
||||
short element;
|
||||
long ext;
|
||||
};
|
||||
|
||||
/* structure of a Allen-Bradley io channel */
|
||||
struct abio {
|
||||
short link;
|
||||
short adapter;
|
||||
short card;
|
||||
short signal;
|
||||
short plc_flag;
|
||||
char parm[AB_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* structure of a gpib io channel */
|
||||
struct gpibio {
|
||||
short link;
|
||||
short addr; /* device address */
|
||||
char parm[LINK_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* structure of a bitbus io channel */
|
||||
struct bitbusio {
|
||||
unsigned char link;
|
||||
unsigned char node;
|
||||
unsigned char port;
|
||||
unsigned char signal;
|
||||
char parm[LINK_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* structure of a bitbus to gpib io channel */
|
||||
struct bbgpibio {
|
||||
unsigned char link;
|
||||
unsigned char bbaddr;
|
||||
unsigned char gpibaddr;
|
||||
unsigned char pad;
|
||||
char parm[LINK_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* structure of an instrument io link */
|
||||
struct instio {
|
||||
char string[INSTIO_FLD_SZ]; /* the cat of location.
|
||||
signal.parameter */
|
||||
};
|
||||
|
||||
/* structure of a vxi link */
|
||||
struct vxiio{
|
||||
short flag; /* 0 = frame/slot, 1 = SA */
|
||||
short frame;
|
||||
short slot;
|
||||
short la; /* logical address if flag =1 */
|
||||
short signal;
|
||||
char parm[VXI_PARAM_SZ];
|
||||
};
|
||||
|
||||
/* union of possible address structures */
|
||||
union value{
|
||||
double value; /* constant */
|
||||
struct pv_link pv_link; /* link to process variable*/
|
||||
struct vmeio vmeio; /* vme io point */
|
||||
struct camacio camacio; /* camac io point */
|
||||
struct rfio rfio; /* CEBAF RF buffer interface */
|
||||
struct abio abio; /* allen-bradley io point */
|
||||
struct gpibio gpibio;
|
||||
struct bitbusio bitbusio;
|
||||
struct db_link db_link; /* Data base link */
|
||||
void *ca_link; /* Channel Access link */
|
||||
struct instio instio; /* instrument io link */
|
||||
struct bbgpibio bbgpibio; /* bitbus to gpib io link */
|
||||
struct vxiio vxiio; /* vxi io */
|
||||
};
|
||||
|
||||
struct link{
|
||||
long type;
|
||||
long pad;
|
||||
union value value;
|
||||
};
|
||||
|
||||
typedef struct link DBLINK;
|
||||
#endif
|
||||
233
src/cvtDctsdr/recSup.h
Normal file
233
src/cvtDctsdr/recSup.h
Normal file
@@ -0,0 +1,233 @@
|
||||
/* $Id$
|
||||
* Record Support
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 11-11-91 jba Added include dbCommon.h,recGblSetSevr,recGblResetSevr
|
||||
* .02 12-18-91 jba Changed caddr_t to void *
|
||||
* .03 03-04-92 jba Added include for dbAccess.h
|
||||
* .04 05-18-92 rcz removed extern
|
||||
* .05 05-18-92 rcz Changed macro "GET_PRSET(" to "GET_PRSET(precSup,"
|
||||
* .06 05-18-92 rcz New database access (removed extern)
|
||||
* .07 07-16-92 jba Added macro recGblFwdLink
|
||||
* .08 07-16-92 jba changed VALID_ALARM to INVALID_ALARM
|
||||
* .09 08-10-92 jba added #defines for SIMM processing
|
||||
* .10 08-11-92 jba added DB_INTEREST masks
|
||||
* .11 08-13-92 jba added prototype for recGblGetAlarmDouble,
|
||||
* .12 08-14-92 jba added prototypes recGblGetLinkValue,recGblPutLinkValue
|
||||
* .13 09-15-92 jba added vxWorks ifdef
|
||||
* .14 -7-27-93 mrk remove recGblResetSevr add recGblResetAlarms
|
||||
* .15 03-18-94 mcn added fast link macros and prototypes
|
||||
*/
|
||||
#ifndef INCrecSuph
|
||||
#define INCrecSuph 1
|
||||
|
||||
|
||||
#ifdef vxWorks
|
||||
#ifndef INCdbCommonh
|
||||
#include <dbCommon.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* One ABSOLUTELY must include dbAccess.h before the
|
||||
* definitions in this file
|
||||
*/
|
||||
|
||||
#ifndef INCdbAccessh
|
||||
#include <dbAccess.h>
|
||||
#endif
|
||||
#ifndef INCalarmh
|
||||
#include <alarm.h>
|
||||
#endif
|
||||
|
||||
/*************************************************************************
|
||||
* The following must match definitions in choiceGbl.ascii
|
||||
*************************************************************************/
|
||||
|
||||
/* GBL_IVOA */
|
||||
#define IVOA_CONTINUE 0
|
||||
#define IVOA_NO_OUTPUT 1
|
||||
#define IVOA_OUTPUT_IVOV 2
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
#define DB_INTEREST_SCAN 0x00000001
|
||||
#define DB_INTEREST_CONTROL 0x00000002
|
||||
#define DB_INTEREST_ALARMS 0x00000004
|
||||
#define DB_INTEREST_DISPLAY 0x00000008
|
||||
#define DB_INTEREST_IO 0x00000010
|
||||
#define DB_INTEREST_CONVERT 0x00000020
|
||||
#define DB_INTEREST_PRIVATE 0x00000040
|
||||
|
||||
#define recGblGetFastLink(PLNK,PREC,PVAL) \
|
||||
\
|
||||
((((PLNK)->type == CONSTANT) ||\
|
||||
(! (((PLNK)->type == DB_LINK) || ((PLNK)->type == CA_LINK)) ))\
|
||||
? 0\
|
||||
: dbFastLinkGet((PLNK),(struct dbCommon *)(PREC),(PVAL)))
|
||||
|
||||
|
||||
#define recGblPutFastLink(PLNK,PREC,PVAL) \
|
||||
\
|
||||
((((PLNK)->type == CONSTANT) ||\
|
||||
(! (((PLNK)->type == DB_LINK) || ((PLNK)->type == CA_LINK)) ))\
|
||||
? 0\
|
||||
: dbFastLinkPut((PLNK),(struct dbCommon *)(PREC),(PVAL)))
|
||||
|
||||
|
||||
#define recGblSetSevr(PREC,NSTA,NSEV) \
|
||||
(\
|
||||
((PREC)->nsev<(NSEV))\
|
||||
? ((PREC)->nsta=(NSTA),(PREC)->nsev=(NSEV),TRUE)\
|
||||
: FALSE\
|
||||
)
|
||||
|
||||
typedef long (*RECSUPFUN) (); /* ptr to record support function*/
|
||||
|
||||
struct rset { /* record support entry table */
|
||||
long number; /*number of support routines */
|
||||
RECSUPFUN report; /*print report */
|
||||
RECSUPFUN init; /*init support */
|
||||
RECSUPFUN init_record; /*init record */
|
||||
RECSUPFUN process; /*process record */
|
||||
RECSUPFUN special; /*special processing */
|
||||
RECSUPFUN get_value; /*get value field */
|
||||
RECSUPFUN cvt_dbaddr; /*cvt dbAddr */
|
||||
RECSUPFUN get_array_info;
|
||||
RECSUPFUN put_array_info;
|
||||
RECSUPFUN get_units;
|
||||
RECSUPFUN get_precision;
|
||||
RECSUPFUN get_enum_str; /*get string from enum item*/
|
||||
RECSUPFUN get_enum_strs; /*get all enum strings */
|
||||
RECSUPFUN put_enum_str; /*put string from enum item*/
|
||||
RECSUPFUN get_graphic_double;
|
||||
RECSUPFUN get_control_double;
|
||||
RECSUPFUN get_alarm_double;
|
||||
};
|
||||
struct recSup {
|
||||
long number; /*number of record types */
|
||||
struct rset **papRset; /*ptr to arr of ptr to rset */
|
||||
};
|
||||
#define RSETNUMBER ( (sizeof(struct rset) - sizeof(long))/sizeof(RECSUPFUN) )
|
||||
|
||||
#define S_rec_noRSET (M_recSup| 1) /*Missing record support entry table*/
|
||||
#define S_rec_outMem (M_recSup| 3) /*Out of Memory*/
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* The following is a valid reference
|
||||
*
|
||||
* precSup->papRset[1]->report(<args>)
|
||||
*************************************************************************/
|
||||
|
||||
|
||||
/* Definition os structure for routine get_value */
|
||||
|
||||
struct valueDes {
|
||||
long field_type;
|
||||
long no_elements;
|
||||
void * pvalue;
|
||||
};
|
||||
|
||||
/**************************************************************************
|
||||
* The following macro returns either the addr of rset or NULL
|
||||
* A typical usage is:
|
||||
*
|
||||
* struct rset *prset;
|
||||
* if(!(prset=GET_PRSET(precSup,type))) {<null}
|
||||
***********************************************************************/
|
||||
#define GET_PRSET(PRECSUP,REC_TYPE)\
|
||||
(\
|
||||
(PRECSUP)\
|
||||
?(\
|
||||
(((REC_TYPE) < 1) || ((REC_TYPE) >= (PRECSUP)->number))\
|
||||
? NULL\
|
||||
: ((PRECSUP)->papRset[(REC_TYPE)])\
|
||||
)\
|
||||
: NULL\
|
||||
)
|
||||
|
||||
|
||||
|
||||
/************************************************************************
|
||||
* report(FILE fp,void *precord);
|
||||
* init();
|
||||
* init_record(precord,pass);
|
||||
* process(void *precord);
|
||||
* special(struct db_addr *paddr, after);
|
||||
* get_value(precord,struct valueDes *p);
|
||||
* cvt_dbaddr(struct db_addr *paddr);
|
||||
* get_array_info(paddr,long *no_elements,long *offset);
|
||||
* put_array_info(paddr,nNew);
|
||||
* get_units(paddr,char units[8]);
|
||||
* get_precision(struct db_addr *paddr,long *precision);
|
||||
* get_enum_str(paddr,pbuffer);
|
||||
* get_enum_strs(paddr,struct dbr_enumStrs *p);
|
||||
* put_enum_str(paddr,pbuffer);
|
||||
* get_graphic_double(paddr,struct dbr_grDouble *p);
|
||||
* get_control_double(paddr,struct dbr_ctrlDouble *p);
|
||||
* get_alarm_double(paddr,struct dbr_ctrlDouble *p);
|
||||
***********************************************************************/
|
||||
|
||||
/* Global Record Support Routines*/
|
||||
#ifdef __STDC__
|
||||
|
||||
void recGblDbaddrError(long status, struct dbAddr *paddr, char *pcaller_name);
|
||||
void recGblRecordError(long status, void *precord, char *pcaller_name);
|
||||
void recGblRecSupError(long status, struct dbAddr *paddr, char *pcaller_name, char *psupport_name);
|
||||
void recGblGetGraphicDouble(struct dbAddr *paddr, struct dbr_grDouble *pgd);
|
||||
void recGblGetControlDouble(struct dbAddr *paddr, struct dbr_ctrlDouble *pcd);
|
||||
void recGblGetAlarmDouble(struct dbAddr *paddr, struct dbr_alDouble *pad);
|
||||
void recGblGetPrec(struct dbAddr *paddr, long *pprecision);
|
||||
long recGblGetLinkValue(struct link *plink,void *precord,
|
||||
short dbrType,void *pdest,long *poptions,long *pnRequest);
|
||||
long recGblPutLinkValue(struct link *plink,void *precord,
|
||||
short dbrType,void *pdest,long *pnRequest);
|
||||
unsigned short recGblResetAlarms(void *precord);
|
||||
void recGblFwdLink(void *precord);
|
||||
void recGblGetTimeStamp(void *precord);
|
||||
long recGblInitFastInLink(struct link *plink, void *precord, short dbrType, char *fld_name);
|
||||
long recGblInitFastOutLink(struct link *plink, void *precord, short dbrType, char *fld_name);
|
||||
|
||||
#else
|
||||
|
||||
void recGblDbaddrError();
|
||||
void recGblRecordError();
|
||||
void recGblRecSupError();
|
||||
void recGblGetGraphicDouble();
|
||||
void recGblGetControlDouble();
|
||||
void recGblGetAlarmDouble();
|
||||
void recGblGetPrec();
|
||||
long recGblGetLinkValue();
|
||||
long recGblPutLinkValue();
|
||||
unsigned short recGblResetAlarms();
|
||||
long recGblInitFastInLink();
|
||||
long recGblInitFastOutLink();
|
||||
|
||||
#endif /*__STDC__*/
|
||||
|
||||
#endif /*INCrecSuph*/
|
||||
123
src/cvtDctsdr/sdr2device.c
Normal file
123
src/cvtDctsdr/sdr2device.c
Normal file
@@ -0,0 +1,123 @@
|
||||
/*sdr2device.c*/
|
||||
/* Convert device support to new ascii formats*/
|
||||
/*
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-10-95 mrk Original Version
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <memory.h>
|
||||
#include <time.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <devSup.h>
|
||||
DBBASE *pdbbase;
|
||||
|
||||
#define NUM_LINK_TYPES 16
|
||||
|
||||
static char *plink_type_name[NUM_LINK_TYPES] = {
|
||||
"CONSTANT",
|
||||
"PV_LINK",
|
||||
"VME_IO",
|
||||
"CAMAC_IO",
|
||||
"AB_IO",
|
||||
"GPIB_IO",
|
||||
"BITBUS_IO",
|
||||
0,0,0,
|
||||
"DB_LINK",
|
||||
"CA_LINK",
|
||||
"INST_IO",
|
||||
"BBGPIB_IO",
|
||||
"RF_IO",
|
||||
"VXI_IO"
|
||||
};
|
||||
|
||||
static char *defdctsdr = "default.dctsdr";
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
FILE *fp;
|
||||
long status;
|
||||
char *sdr_filename;
|
||||
char filename[40];
|
||||
char *pfilename = filename;
|
||||
struct recType *precType;
|
||||
struct devChoiceRec *pdevChoiceRec;
|
||||
struct devChoiceSet *pdevChoiceSet;
|
||||
struct devChoice *pdevChoice;
|
||||
struct recDevSup *precDevSup;
|
||||
struct devSup *pdevSup;
|
||||
int i,j;
|
||||
|
||||
if(argc==2) {
|
||||
sdr_filename = argv[1];
|
||||
} else {
|
||||
sdr_filename = defdctsdr;
|
||||
}
|
||||
fp = fopen(sdr_filename,"r");
|
||||
if(!fp) {
|
||||
printf("Error opening file %s\n",sdr_filename);
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase=dbAllocBase();
|
||||
status=dbRead(pdbbase,fp);
|
||||
if(status) {
|
||||
errMessage(status,"dbRead");
|
||||
exit(-1);
|
||||
}
|
||||
fclose(fp);
|
||||
strcpy(pfilename,"device.ascii");
|
||||
fp = fopen(pfilename,"w");
|
||||
if(!fp) {
|
||||
printf("Error opening file %s\n",pfilename);
|
||||
exit(-1);
|
||||
}
|
||||
precType = pdbbase->precType;
|
||||
precDevSup = pdbbase->precDevSup;
|
||||
pdevChoiceRec = pdbbase->pchoiceDev;
|
||||
for(i=0; i<precType->number; i++) {
|
||||
pdevSup = precDevSup->papDevSup[i];
|
||||
if(!pdevSup) continue;
|
||||
pdevChoiceSet = pdevChoiceRec->papDevChoiceSet[i];
|
||||
if(!pdevChoiceSet) continue;
|
||||
for(j=0; j<pdevSup->number; j++) {
|
||||
if(!pdevSup->papDsetName[j]) continue;
|
||||
pdevChoice = pdevChoiceSet->papDevChoice[j];
|
||||
if(!pdevChoice) continue;
|
||||
fprintf(fp,"device(%s,%s,%s,\"%s\")\n",
|
||||
precType->papName[i],
|
||||
plink_type_name[pdevChoice->link_type],
|
||||
pdevSup->papDsetName[j],
|
||||
pdevChoice->pchoice);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
return(0);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*atodb.c*/
|
||||
/* share/src/db @(#)atdb.c 1.7 2/25/94 */
|
||||
/*sdr2driver.c*/
|
||||
/* Convert driver support to new ascii formats*/
|
||||
/*
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
@@ -27,7 +27,7 @@
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 07-13-93 mrk Original version
|
||||
* .01 05-10-95 mrk Original Version
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@@ -37,57 +37,48 @@
|
||||
#include <errMdef.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <drvSup.h>
|
||||
DBBASE *pdbbase;
|
||||
DBENTRY *pdbentry;
|
||||
|
||||
#ifdef __STDC__
|
||||
main(int argc,char **argv)
|
||||
#else
|
||||
main(argc,argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
FILE *fpdctsdr;
|
||||
FILE *fp;
|
||||
long status;
|
||||
char *ptime;
|
||||
time_t timeofday;
|
||||
char *rectype;
|
||||
|
||||
|
||||
if(argc!=3) {
|
||||
printf("Usage: atdb default.dctsdr file.database < file.rpt\n");
|
||||
exit(-1);
|
||||
static char *defdctsdr = "default.dctsdr";
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
FILE *fp;
|
||||
long status;
|
||||
char *sdr_filename;
|
||||
char filename[40];
|
||||
char *pfilename = filename;
|
||||
struct drvSup *pdrvSup;
|
||||
int i,j;
|
||||
|
||||
if(argc==2) {
|
||||
sdr_filename = argv[1];
|
||||
} else {
|
||||
sdr_filename = defdctsdr;
|
||||
}
|
||||
fpdctsdr = fopen(argv[1],"r");
|
||||
if(!fpdctsdr) {
|
||||
errMessage(0,"Error opening input file");
|
||||
exit(-1);
|
||||
}
|
||||
if(fopen(argv[2],"r")) {
|
||||
errMessage(-1,"Output File already exists");
|
||||
fp = fopen(sdr_filename,"r");
|
||||
if(!fp) {
|
||||
printf("Error opening file %s\n",sdr_filename);
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase=dbAllocBase();
|
||||
pdbentry=dbAllocEntry(pdbbase);
|
||||
status=dbRead(pdbbase,fpdctsdr);
|
||||
status=dbRead(pdbbase,fp);
|
||||
if(status) {
|
||||
errMessage(status,"dbRead");
|
||||
exit(-1);
|
||||
}
|
||||
yyreset();
|
||||
yyparse();
|
||||
fp=fopen(argv[2],"w");
|
||||
if(fp==NULL) {
|
||||
errMessage(0,"Error opening output file");
|
||||
exit(-1);
|
||||
}
|
||||
status = dbWrite(pdbbase,fpdctsdr,fp);
|
||||
if(status) errMessage(status,"dbWrite");
|
||||
fclose(fpdctsdr);
|
||||
fclose(fp);
|
||||
dbFreeEntry(pdbentry);
|
||||
dbFreeBase(pdbbase);
|
||||
strcpy(pfilename,"driver.ascii");
|
||||
fp = fopen(pfilename,"w");
|
||||
if(!fp) {
|
||||
printf("Error opening file %s\n",pfilename);
|
||||
exit(-1);
|
||||
}
|
||||
pdrvSup = pdbbase->pdrvSup;
|
||||
for(i=0; i<pdrvSup->number; i++) {
|
||||
fprintf(fp,"driver(%s)\n",pdrvSup->papDrvName[i]);
|
||||
}
|
||||
fclose(fp);
|
||||
return(0);
|
||||
}
|
||||
115
src/cvtDctsdr/sdr2gblmenu.c
Normal file
115
src/cvtDctsdr/sdr2gblmenu.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*sdr2gblmenu.c*/
|
||||
/* Convert global menus from old .dctsdr file to new ascii formats */
|
||||
/*
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-10-95 mrk Original Version
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <memory.h>
|
||||
#include <time.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbStaticLib.h>
|
||||
DBBASE *pdbbase;
|
||||
|
||||
#define NUM_GBL_MENUS 11
|
||||
|
||||
static char *aiMenuName[NUM_GBL_MENUS] = {
|
||||
"menuYesNo",
|
||||
"menuScan",
|
||||
"menuAlarmSevr",
|
||||
"menuAlarmStat",
|
||||
"menuArrType",
|
||||
"menuOmsl",
|
||||
"menuLinr",
|
||||
"menuFtype",
|
||||
"menuCompress",
|
||||
"menuPriority",
|
||||
"menuIvoa"
|
||||
};
|
||||
|
||||
static char *defdctsdr = "default.dctsdr";
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
FILE *fp;
|
||||
long status;
|
||||
char *sdr_filename;
|
||||
char filename[40];
|
||||
char *pfilename = filename;
|
||||
char choice_name[50];
|
||||
char temp_str[50];
|
||||
char *ptemp;
|
||||
struct choiceSet *pchoiceSet;
|
||||
int i,j;
|
||||
|
||||
if(argc==2) {
|
||||
sdr_filename = argv[1];
|
||||
} else {
|
||||
sdr_filename = defdctsdr;
|
||||
}
|
||||
fp = fopen(sdr_filename,"r");
|
||||
if(!fp) {
|
||||
printf("Error opening file %s\n",sdr_filename);
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase=dbAllocBase();
|
||||
status=dbRead(pdbbase,fp);
|
||||
if(status) {
|
||||
errMessage(status,"dbRead");
|
||||
exit(-1);
|
||||
}
|
||||
fclose(fp);
|
||||
for(i=0; i<NUM_GBL_MENUS; i++) {
|
||||
strcpy(pfilename,aiMenuName[i]);
|
||||
strcat(pfilename,".ascii");
|
||||
fp = fopen(pfilename,"w");
|
||||
if(!fp) {
|
||||
printf("Error opening file %s\n",pfilename);
|
||||
exit(-1);
|
||||
}
|
||||
pchoiceSet = pdbbase->pchoiceGbl->papChoiceSet[i];
|
||||
fprintf(fp,"menu(%s) {\n",aiMenuName[i]);
|
||||
for(j=0; j<pchoiceSet->number; j++) {
|
||||
strcpy(temp_str,pchoiceSet->papChoice[j]);
|
||||
ptemp = temp_str;
|
||||
while(*ptemp) {
|
||||
if(!isalnum(*ptemp)) *ptemp = '_';
|
||||
ptemp++;
|
||||
}
|
||||
sprintf(choice_name,"%s%s",aiMenuName[i],temp_str);
|
||||
fprintf(fp,"\tchoice(%s,\"%s\")\n",
|
||||
choice_name,pchoiceSet->papChoice[j]);
|
||||
}
|
||||
fprintf(fp,"}\n");
|
||||
fclose(fp);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
439
src/cvtDctsdr/sdr2recordtype.c
Normal file
439
src/cvtDctsdr/sdr2recordtype.c
Normal file
@@ -0,0 +1,439 @@
|
||||
/*sdr2recordtype.c*/
|
||||
/* Convert recordtype and record menus from .dctsdr file to new ascii formats */
|
||||
/* sdr2recordtype <recordtype> <recordtype.h> <file.dctsdr>
|
||||
/*
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 05-15-95 mrk Original Version
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <memory.h>
|
||||
#include <time.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbDefs.h>
|
||||
#include <special.h>
|
||||
#include <dbStaticLib.h>
|
||||
DBBASE *pdbbase;
|
||||
|
||||
static char *defdctsdr = "default.dctsdr";
|
||||
|
||||
static char *ptypename[DBF_NTYPES] = {
|
||||
"DBF_STRING",
|
||||
"DBF_CHAR",
|
||||
"DBF_UCHAR",
|
||||
"DBF_SHORT",
|
||||
"DBF_USHORT",
|
||||
"DBF_LONG",
|
||||
"DBF_ULONG",
|
||||
"DBF_FLOAT",
|
||||
"DBF_DOUBLE",
|
||||
"DBF_ENUM",
|
||||
"DBF_MENU",
|
||||
"DBF_MENU",
|
||||
"DBF_MENU",
|
||||
"DBF_DEVICE",
|
||||
"DBF_INLINK",
|
||||
"DBF_OUTLINK",
|
||||
"DBF_FWDLINK",
|
||||
"DBF_NOACCESS"
|
||||
};
|
||||
|
||||
static char *pguigroup[] = {
|
||||
"",
|
||||
"GUI_COMMON",
|
||||
"GUI_ALARMS",
|
||||
"GUI_BITS1",
|
||||
"GUI_BITS2",
|
||||
"GUI_CALC",
|
||||
"GUI_CLOCK",
|
||||
"GUI_COMPRESS",
|
||||
"GUI_CONVERT",
|
||||
"GUI_DISPLAY",
|
||||
"GUI_HIST",
|
||||
"GUI_INPUTS",
|
||||
"GUI_LINKS",
|
||||
"GUI_MBB",
|
||||
"GUI_MOTOR",
|
||||
"GUI_OUTPUT",
|
||||
"GUI_PID",
|
||||
"GUI_PULSE",
|
||||
"GUI_SELECT",
|
||||
"GUI_SEQ1",
|
||||
"GUI_SEQ2",
|
||||
"GUI_SEQ3",
|
||||
"GUI_SUB",
|
||||
"GUI_TIMER",
|
||||
"GUI_WAVE",
|
||||
"GUI_SCAN"
|
||||
};
|
||||
|
||||
static char *pgblMenuNames[11] = {
|
||||
"menuYesNo",
|
||||
"menuScan",
|
||||
"menuAlarmSevr",
|
||||
"menuAlarmStat",
|
||||
"menuArrType",
|
||||
"menuOmsl",
|
||||
"menuLinr",
|
||||
"menuFtype",
|
||||
"menuCompress",
|
||||
"menuPriority",
|
||||
"menuIvoa"
|
||||
};
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
FILE *fp,*fpInclude;
|
||||
long status;
|
||||
char *sdrFilename;
|
||||
char *recordtypeName;
|
||||
char *recordtypeInclude;
|
||||
char filename[40];
|
||||
char *pfilename = filename;
|
||||
struct recType *precType;
|
||||
struct recDes *precDes;
|
||||
struct choiceRec *pchoiceRec;
|
||||
struct arrChoiceSet *parrChoiceSet;
|
||||
struct choiceSet *pchoiceSet;
|
||||
struct recTypDes *precTypDes;
|
||||
struct fldDes *pfldDes;
|
||||
char menuname[50];
|
||||
char *pmenuname = menuname;
|
||||
char choiceName[50];
|
||||
char tempStr[50];
|
||||
char *ptemp;
|
||||
int indRectype;
|
||||
int i,j;
|
||||
int indFldDes;
|
||||
char includeLine[80];
|
||||
DBENTRY dbentry;
|
||||
DBENTRY *pdbentry=&dbentry;
|
||||
char valuestring[80];
|
||||
char *pstr;
|
||||
char **paprecChoiceNames;
|
||||
int makeCommon=FALSE;
|
||||
|
||||
if(argc<3 || argc>4) {
|
||||
fprintf(stderr,"usage: sdr2recordtype <recordtype> <recordtype.h> [<file.dctsdr>]");
|
||||
exit(-1);
|
||||
}
|
||||
recordtypeName = argv[1];
|
||||
if(strcmp(recordtypeName,"dbCommon")==0) makeCommon=TRUE;
|
||||
recordtypeInclude = argv[2];
|
||||
if(argc==4) {
|
||||
sdrFilename = argv[3];
|
||||
} else {
|
||||
sdrFilename = defdctsdr;
|
||||
}
|
||||
fpInclude = fopen(recordtypeInclude,"r");
|
||||
if(!fpInclude) {
|
||||
fprintf(stderr,"Error opening file %s\n",recordtypeInclude);
|
||||
exit(-1);
|
||||
}
|
||||
/*skip all lines up to beginning of structure*/
|
||||
while(TRUE) {
|
||||
pstr = fgets(includeLine,80,fpInclude);
|
||||
if(!pstr) {
|
||||
fprintf(stderr,"Does not appear to be include file%s\n",
|
||||
recordtypeInclude);
|
||||
exit(-1);
|
||||
}
|
||||
if(strstr(includeLine,"struct ")) break;
|
||||
}
|
||||
fp = fopen(sdrFilename,"r");
|
||||
if(!fp) {
|
||||
fprintf(stderr,"Error opening file %s\n",sdrFilename);
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase=dbAllocBase();
|
||||
status=dbRead(pdbbase,fp);
|
||||
if(status) {
|
||||
errMessage(status,"dbRead");
|
||||
exit(-1);
|
||||
}
|
||||
fclose(fp);
|
||||
precType = pdbbase->precType;
|
||||
for(indRectype=0; indRectype< precType->number; indRectype++) {
|
||||
if(!precType->papName[indRectype]) continue;
|
||||
if(makeCommon) break;
|
||||
if(strcmp(recordtypeName,precType->papName[indRectype]) == 0) break;
|
||||
}
|
||||
if(indRectype>=precType->number) {
|
||||
fprintf(stderr,"%s not found\n",recordtypeName);
|
||||
exit(-1);
|
||||
}
|
||||
if(makeCommon) {
|
||||
strcpy(pfilename,"dbCommon");
|
||||
} else {
|
||||
strcpy(pfilename,recordtypeName);
|
||||
strcat(pfilename,"Record");
|
||||
}
|
||||
strcat(pfilename,".ascii");
|
||||
fp = fopen(pfilename,"w");
|
||||
if(!fp) {
|
||||
fprintf(stderr,"Error opening file %s\n",pfilename);
|
||||
exit(-1);
|
||||
}
|
||||
/*Create record instance with initial values*/
|
||||
dbInitEntry(pdbbase,pdbentry);
|
||||
status = dbFindRecdes(pdbentry,precType->papName[indRectype]);
|
||||
if(status) {printf("No record description\n"); exit(-1);}
|
||||
status = dbCreateRecord(pdbentry,"temp");
|
||||
if(status) {printf("dbCreateRecord failed\n"); exit(-1);}
|
||||
/*For menus let name be <recordtype><fieldname> */
|
||||
precTypDes = pdbbase->precDes->papRecTypDes[indRectype];
|
||||
parrChoiceSet = pdbbase->pchoiceRec->papArrChoiceSet[indRectype];
|
||||
if(!parrChoiceSet) goto gen_rectype;
|
||||
if(makeCommon) goto gen_rectype;
|
||||
paprecChoiceNames = (char **)calloc(parrChoiceSet->number,sizeof(char *));
|
||||
for(i=0; i< parrChoiceSet->number; i++) {
|
||||
/*Find first field that uses this choice set */
|
||||
for(j=0; j< precTypDes->no_fields; j++) {
|
||||
pfldDes = precTypDes->papFldDes[j];
|
||||
if(pfldDes->field_type==DBF_RECCHOICE
|
||||
&& pfldDes->choice_set==i) break;
|
||||
}
|
||||
if(j>=precTypDes->no_fields) continue;
|
||||
strcpy(pmenuname,recordtypeName);
|
||||
strcat(pmenuname,pfldDes->fldname);
|
||||
for(j=strlen(pmenuname)-1; j>0; j--) {
|
||||
if(pmenuname[j] == ' ') pmenuname[j] = 0;
|
||||
}
|
||||
paprecChoiceNames[i] = calloc(1,strlen(pmenuname) + 1);
|
||||
strcpy(paprecChoiceNames[i],pmenuname);
|
||||
fprintf(fp,"menu(%s) {\n",pmenuname);
|
||||
pchoiceSet = parrChoiceSet->papChoiceSet[i];
|
||||
for(j=0; j<pchoiceSet->number; j++) {
|
||||
strcpy(tempStr,pchoiceSet->papChoice[j]);
|
||||
ptemp = tempStr;
|
||||
while(*ptemp) {
|
||||
if(!isalnum(*ptemp)) *ptemp = '_';
|
||||
ptemp++;
|
||||
}
|
||||
sprintf(choiceName,"%s_%s",pmenuname,tempStr);
|
||||
fprintf(fp,"\tchoice(%s,\"%s\")\n",
|
||||
choiceName,pchoiceSet->papChoice[j]);
|
||||
}
|
||||
fprintf(fp,"}\n");
|
||||
}
|
||||
gen_rectype:
|
||||
if(makeCommon) {
|
||||
indFldDes=-1;
|
||||
} else {
|
||||
fprintf(fp,"recordtype(%s) {\n",recordtypeName);
|
||||
fprintf(fp,"\tinclude \"dbCommon.ascii\" \n");
|
||||
/*Skip fields in dbCommon*/
|
||||
for(indFldDes=0; indFldDes< precTypDes->no_fields; indFldDes++) {
|
||||
if(strcmp(precTypDes->papFldDes[indFldDes]->fldname,"FLNK")==0) break;
|
||||
}
|
||||
}
|
||||
while(++indFldDes < precTypDes->no_fields) {
|
||||
pfldDes = precTypDes->papFldDes[indFldDes];
|
||||
if(pfldDes->field_type==DBF_NOACCESS) {
|
||||
char *prtn;
|
||||
char fldname[5];
|
||||
|
||||
strcpy(fldname,pfldDes->fldname);
|
||||
pstr = fldname;
|
||||
while(*pstr) {
|
||||
if(*pstr == ' ') {
|
||||
*pstr = 0;
|
||||
break;
|
||||
}
|
||||
*pstr = tolower(*pstr);
|
||||
pstr++;
|
||||
}
|
||||
while(TRUE) {
|
||||
prtn = fgets(includeLine,80,fpInclude);
|
||||
if(!prtn) {
|
||||
fprintf(stderr, "field %s not found in %s\n",
|
||||
pfldDes->fldname,recordtypeInclude);
|
||||
break;
|
||||
}
|
||||
if(!(pstr = strstr(includeLine,fldname))) continue;
|
||||
if(isalnum(*(pstr + strlen(fldname)))) continue;
|
||||
break;
|
||||
}
|
||||
if(!prtn) continue;
|
||||
if(strstr(pstr,"Created Pad")) continue;
|
||||
}
|
||||
strcpy(tempStr,pfldDes->fldname);
|
||||
for(j=strlen(tempStr)-1; j>0; j--) {
|
||||
if(tempStr[j] == ' ') tempStr[j] = 0;
|
||||
}
|
||||
fprintf(fp,"\tfield(%s,%s) {\n",
|
||||
tempStr,ptypename[pfldDes->field_type]);
|
||||
if(pfldDes->prompt[0]!=0) {
|
||||
fprintf(fp,"\t\tprompt(\"%s\")\n",pfldDes->prompt);
|
||||
}
|
||||
if(pfldDes->promptflag) {
|
||||
fprintf(fp,"\t\tpromptgroup(%s)\n",pguigroup[pfldDes->promptflag]);
|
||||
}
|
||||
if(pfldDes->as_level == 0) fprintf(fp,"\t\tasl(ASL0)\n");
|
||||
if(pfldDes->special) {
|
||||
fprintf(fp,"\t\tspecial(");
|
||||
switch(pfldDes->special) {
|
||||
case SPC_NOMOD: fprintf(fp,"SPC_NOMOD)\n"); break;
|
||||
case SPC_DBADDR: fprintf(fp,"SPC_DBADDR)\n"); break;
|
||||
case SPC_SCAN: fprintf(fp,"SPC_SCAN)\n"); break;
|
||||
case SPC_HDWLINK: fprintf(fp,"SPC_HDWLINK)\n"); break;
|
||||
case SPC_ALARMACK: fprintf(fp,"SPC_ALARMACK)\n"); break;
|
||||
case SPC_AS: fprintf(fp,"SPC_AS)\n"); break;
|
||||
case SPC_MOD: fprintf(fp,"SPC_MOD)\n"); break;
|
||||
case SPC_RESET: fprintf(fp,"SPC_RESET)\n"); break;
|
||||
case SPC_LINCONV: fprintf(fp,"SPC_LINCONV)\n"); break;
|
||||
case SPC_CALC: fprintf(fp,"SPC_CALC)\n"); break;
|
||||
default : fprintf(fp,"%d)\n",pfldDes->special);
|
||||
}
|
||||
}
|
||||
if(pfldDes->process_passive) fprintf(fp,"\t\tpp(TRUE)\n");
|
||||
if(pfldDes->cvt_type) fprintf(fp,"\t\tbase(HEX)\n");
|
||||
if(pfldDes->interest)
|
||||
fprintf(fp,"\t\tinterest(%d)\n",pfldDes->interest);
|
||||
switch(pfldDes->field_type) {
|
||||
case DBF_STRING: {
|
||||
fprintf(fp,"\t\tsize(%d)\n",pfldDes->size);
|
||||
}
|
||||
break;
|
||||
case DBF_CHAR: {
|
||||
status = dbFindField(pdbentry,pfldDes->fldname);
|
||||
if(status) {printf("dbFindField failed\n"); exit(-1);}
|
||||
pstr = dbGetString(pdbentry);
|
||||
if(pfldDes->initial.char_value)
|
||||
fprintf(fp,"\t\tinitial(\"%d\")\n",
|
||||
pfldDes->initial.char_value);
|
||||
}
|
||||
break;
|
||||
case DBF_UCHAR: {
|
||||
if(pfldDes->initial.uchar_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.uchar_value);
|
||||
}
|
||||
break;
|
||||
case DBF_SHORT: {
|
||||
if(pfldDes->initial.short_value)
|
||||
fprintf(fp,"\t\tinitial(\"%d\")\n",
|
||||
pfldDes->initial.short_value);
|
||||
}
|
||||
break;
|
||||
case DBF_USHORT: {
|
||||
if(pfldDes->initial.ushort_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.ushort_value);
|
||||
}
|
||||
break;
|
||||
case DBF_LONG: {
|
||||
if(pfldDes->initial.long_value)
|
||||
fprintf(fp,"\t\tinitial(\"%d\")\n",
|
||||
pfldDes->initial.long_value);
|
||||
}
|
||||
break;
|
||||
case DBF_ULONG: {
|
||||
if(pfldDes->initial.ulong_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.ulong_value);
|
||||
}
|
||||
break;
|
||||
case DBF_FLOAT: {
|
||||
if(pfldDes->initial.float_value)
|
||||
fprintf(fp,"\t\tinitial(\"%g\")\n",
|
||||
pfldDes->initial.float_value);
|
||||
}
|
||||
break;
|
||||
case DBF_DOUBLE: {
|
||||
if(pfldDes->initial.double_value)
|
||||
fprintf(fp,"\t\tinitial(\"%g\")\n",
|
||||
pfldDes->initial.double_value);
|
||||
}
|
||||
break;
|
||||
case DBF_ENUM: {
|
||||
if(pfldDes->initial.enum_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.enum_value);
|
||||
}
|
||||
break;
|
||||
case DBF_GBLCHOICE: {
|
||||
fprintf(fp,"\t\tmenu(%s)\n",pgblMenuNames[pfldDes->choice_set]);
|
||||
if(pfldDes->initial.ushort_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.ushort_value);
|
||||
}
|
||||
break;
|
||||
case DBF_CVTCHOICE: {
|
||||
fprintf(fp,"\t\tmenu(menuConvert)\n");
|
||||
if(pfldDes->initial.ushort_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.ushort_value);
|
||||
}
|
||||
break;
|
||||
case DBF_RECCHOICE: {
|
||||
fprintf(fp,"\t\tmenu(%s)\n",paprecChoiceNames[pfldDes->choice_set]);
|
||||
if(pfldDes->initial.ushort_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.ushort_value);
|
||||
}
|
||||
break;
|
||||
case DBF_DEVCHOICE: {
|
||||
if(pfldDes->initial.ushort_value)
|
||||
fprintf(fp,"\t\tinitial(\"%u\")\n",
|
||||
pfldDes->initial.ushort_value);
|
||||
}
|
||||
break;
|
||||
case DBF_INLINK: {
|
||||
}
|
||||
break;
|
||||
case DBF_OUTLINK: {
|
||||
}
|
||||
break;
|
||||
case DBF_FWDLINK: {
|
||||
}
|
||||
break;
|
||||
case DBF_NOACCESS: { /*includeLine holds definition*/
|
||||
char *ptempStr = tempStr;
|
||||
|
||||
fprintf(fp,"\t\tsize(%d)\n",pfldDes->size);
|
||||
ptemp = includeLine;
|
||||
while(*ptemp==' ' || *ptemp=='\t') ptemp++;
|
||||
while(*ptemp!=';') *ptempStr++ = *ptemp++;
|
||||
*ptempStr = 0;
|
||||
fprintf(fp,"\t\textra(\"%s\")\n",tempStr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
fprintf(fp,"\t}\n");
|
||||
if(makeCommon
|
||||
&& (strcmp(precTypDes->papFldDes[indFldDes]->fldname,"FLNK")==0))
|
||||
break;
|
||||
}
|
||||
if(!makeCommon)fprintf(fp,"}\n");
|
||||
fclose(fpInclude);
|
||||
fclose(fp);
|
||||
return(0);
|
||||
}
|
||||
80
src/cvtDctsdr/sdrHeader.h
Normal file
80
src/cvtDctsdr/sdrHeader.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/* sdrHeader.h - header for self defining record */
|
||||
/* share/epicsH $Id$ */
|
||||
|
||||
/*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 mm-dd-yy iii Comment
|
||||
* .02 05-03-92 rcz New database access (removed extern)
|
||||
*/
|
||||
|
||||
#ifndef INCsdrHeader
|
||||
#define INCsdrHeader 1
|
||||
struct sdrHeader {
|
||||
long magic; /* magic number */
|
||||
long nbytes; /* number of bytes of data*/
|
||||
short type; /* sdr record type */
|
||||
short pad; /* padding */
|
||||
long create_date; /* creation date */
|
||||
};
|
||||
|
||||
#define DBMAGIC 0x494f4300 /* In ascii this is IOC */
|
||||
|
||||
/*The following types are defined*/
|
||||
#define SDR_DB_RECTYPE 0 /*Record types */
|
||||
#define SDR_DB_RECORDS 1 /*database records. index is type */
|
||||
#define SDR_DB_RECDES 2 /*Database Run Time Record Description */
|
||||
#define SDR_DB_PVD 3 /*Process Variable Directory */
|
||||
#define SDR_CHOICEGBL 4 /*Choice table. Global */
|
||||
#define SDR_CHOICECVT 5 /*Choice table. Convert */
|
||||
#define SDR_CHOICEREC 6 /*Choice table. Record Specific */
|
||||
#define SDR_CHOICEDEV 7 /*Choice table. Device Specific */
|
||||
#define SDR_DEVSUP 8 /*device support tables */
|
||||
#define SDR_CVTTABLE 9 /*breakpoint tables */
|
||||
#define SDR_DRVSUP 10 /*driver support tables */
|
||||
#define SDR_RECSUP 11 /*record support tables */
|
||||
#define SDR_ALLSUMS 12 /*special sum structure*/
|
||||
#define SDR_NTYPES SDR_ALLSUMS+1
|
||||
|
||||
/************************************************************************/
|
||||
#define S_sdr_notLoaded (M_sdr| 1) /*dbRecType.sdr not loaded*/
|
||||
#define S_sdr_noOpen (M_sdr| 3) /*Can't open file*/
|
||||
#define S_sdr_noRead (M_sdr| 5) /*read failure*/
|
||||
#define S_sdr_noMagic (M_sdr| 7) /*wrong magic number*/
|
||||
#define S_sdr_noRecDef (M_sdr| 9) /*undefined record type*/
|
||||
#define S_sdr_noAlloc (M_sdr|11) /*malloc error*/
|
||||
#define S_sdr_noReplace (M_sdr|13) /*Can't replace loaded SDR file*/
|
||||
#define S_sdr_seqLoad (M_sdr|15) /*dbRecType.sdr not first*/
|
||||
#define S_sdr_noSdrType (M_sdr|17) /*undefined sdr type*/
|
||||
#define S_sdr_sumError (M_sdr|19) /*sdrSum Error*/
|
||||
|
||||
#define SUM_LEN 50
|
||||
struct sdrSum {
|
||||
char allSdrSums[SUM_LEN];
|
||||
};
|
||||
|
||||
#endif /*INCsdrHeader*/
|
||||
36
src/cvtDctsdr/sf2db.1
Normal file
36
src/cvtDctsdr/sf2db.1
Normal file
@@ -0,0 +1,36 @@
|
||||
.\" @(#)
|
||||
.TH SF2DB 1 "04 Nov 1993"
|
||||
.SH NAME
|
||||
sf2db \- make a new ascii database ".db" file from an old dct short form report
|
||||
.SH SYNOPSIS
|
||||
.B sf2db
|
||||
.B name
|
||||
<
|
||||
.B short_form_rpt
|
||||
>
|
||||
.B db_file
|
||||
.SH AVAILABILITY
|
||||
The tool in available under Unix from the EPICS add_on directory.
|
||||
.SH DESCRIPTION
|
||||
.LP
|
||||
This tool reads a dct short form report file from standard in and
|
||||
writes a ".db" (new ascii database format) file to standard out. A
|
||||
.B name
|
||||
must be given for the database. The name specified is used to name
|
||||
the ".database" file when the ".db" file is converted to a binary ".database".
|
||||
.sp
|
||||
The output of this tool can be imported to gdct(1) for editting.
|
||||
.SH "EXAMPLE USAGE"
|
||||
.LP
|
||||
sf2db test < old.short.form > new.db
|
||||
.sp
|
||||
This command will read old.short.form and produce the file new.db. When
|
||||
new.db is fed into db2database(1), a binary database file will be created
|
||||
named test.database.
|
||||
.SH "SEE ALSO"
|
||||
.BR gdct(1),
|
||||
.BR db2database(1),
|
||||
.BR dbLoadRecords(3),
|
||||
.BR dbfile(5),
|
||||
.sp
|
||||
.B "GDCT User's Manual"
|
||||
26
src/cvtDctsdr/sf2dbLex.l
Executable file
26
src/cvtDctsdr/sf2dbLex.l
Executable file
@@ -0,0 +1,26 @@
|
||||
b [a-zA-Z0-9_]
|
||||
a [ \t]
|
||||
d [a-zA-Z0-9_\,\./\*#\{\}\[\]%:;!|\'\-&\(\)@\?\+<>=$\^\~]
|
||||
|
||||
%{
|
||||
%}
|
||||
|
||||
%%
|
||||
|
||||
^[A-Z0-9_]+ { yylval.Str=(char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(FIELD); }
|
||||
|
||||
^"PV:" { return(PV); }
|
||||
"Type:" { return(TYPE); }
|
||||
"" { return(CLOSE); }
|
||||
"$$end" { return(CLOSE); }
|
||||
|
||||
{d}+ { yylval.Str=(char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(WORD); }
|
||||
|
||||
. ;
|
||||
\n { line_num++; }
|
||||
|
||||
%%
|
||||
151
src/cvtDctsdr/sf2dbYacc.y
Executable file
151
src/cvtDctsdr/sf2dbYacc.y
Executable file
@@ -0,0 +1,151 @@
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#include <memory.h>
|
||||
#include <string.h>
|
||||
#include <epicsVersion.h>
|
||||
|
||||
#undef PUKE_FACE
|
||||
#if EPICS_VERSION<4
|
||||
#if EPICS_REVISION<13
|
||||
#if EPICS_MODIFICATION<1 && EPICS_UPDATE_LEVEL<12
|
||||
#define PUKE_FACE
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* kludge for buggy sun lex/yacc. exploits the fact that we know the union */
|
||||
/* below will be given the name YYSTYPE. done so that ifndef YYSTYPE */
|
||||
/* (as it appears in pdb.c) fails */
|
||||
/* #define YYSTYPE OUR_YYSTYPE */
|
||||
|
||||
int line_num;
|
||||
char Field_val[1000];
|
||||
|
||||
%}
|
||||
|
||||
%start sf2db
|
||||
|
||||
%token <Str> WORD
|
||||
%token <Str> FIELD
|
||||
%token <Str> TYPE
|
||||
%token <Str> PV CLOSE
|
||||
|
||||
%union
|
||||
{
|
||||
int Int;
|
||||
char Char;
|
||||
char *Str;
|
||||
double Real;
|
||||
}
|
||||
|
||||
%%
|
||||
|
||||
sf2db: crap_head records closer
|
||||
{ printf("\n"); }
|
||||
;
|
||||
|
||||
closer:
|
||||
| CLOSE
|
||||
;
|
||||
|
||||
crap_head:
|
||||
| crap_header CLOSE
|
||||
| CLOSE
|
||||
| crap_header
|
||||
;
|
||||
|
||||
crap_header: crap_header WORD
|
||||
| WORD
|
||||
;
|
||||
|
||||
records: records record
|
||||
| record
|
||||
;
|
||||
|
||||
record: header fields CLOSE
|
||||
{ printf("\t}\n"); }
|
||||
;
|
||||
|
||||
header: PV WORD TYPE WORD WORD
|
||||
{ printf("\trecord(%s,\"%s\") {\n",$4,$2); }
|
||||
| PV WORD TYPE WORD
|
||||
{ printf("\trecord(%s,\"%s\") {\n",$4,$2); }
|
||||
|
||||
fields: field
|
||||
| fields field
|
||||
;
|
||||
|
||||
field: a_field words
|
||||
{
|
||||
printf("\t\tfield(%s,\"%s\")\n",$<Str>1,Field_val);
|
||||
}
|
||||
;
|
||||
|
||||
a_field: FIELD
|
||||
{
|
||||
Field_val[0]='\0';
|
||||
$<Str>$ = $1;
|
||||
}
|
||||
;
|
||||
|
||||
words:
|
||||
| words a_word
|
||||
;
|
||||
|
||||
a_word: WORD
|
||||
{
|
||||
char *p;
|
||||
|
||||
if((p=strstr($1,".PP.MS"))) {p[0]=' ';p[3]=' '; }
|
||||
else if((p=strstr($1,".PP.NMS"))) {p[0]=' ';p[3]=' ';}
|
||||
else if((p=strstr($1,".NPP.MS"))) {p[0]=' ';p[4]=' ';}
|
||||
else if((p=strstr($1,".NPP.NMS"))) {p[0]=' ';p[4]=' ';}
|
||||
else { if(strlen(Field_val)>0) strcat(Field_val," "); }
|
||||
|
||||
strcat(Field_val,$1);
|
||||
}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
#include "sf2dbLex.c"
|
||||
|
||||
yyerror(str)
|
||||
char *str;
|
||||
{ fprintf(stderr,"Error line %d : %s\n",line_num, yytext); }
|
||||
|
||||
/*-----------------------main routine-----------------------*/
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
FILE *fdin;
|
||||
|
||||
/* remember that the database name is not retrieved from the .report
|
||||
file, it is specified as a command line argument */
|
||||
|
||||
if( argc < 2 )
|
||||
{
|
||||
printf("Usage: %s database_name < dct_report_file > new_gdct_db_file.db\n",
|
||||
argv[0]);
|
||||
printf("\n\twhere\n\tdatabase_name: the name you wish to give the .database file\n");
|
||||
printf("\tdct_report_file: the old dct short form report file\n");
|
||||
printf("\tnew_gdct_db_file.db: the new gdct db file name, this file is used as \n\t\tinput to the gdct.\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#ifdef PUKE_HEAD
|
||||
printf("database(x) { nowhere() {\n");
|
||||
#endif
|
||||
/* yyreset(); */
|
||||
yyparse();
|
||||
#ifdef PUKE_HEAD
|
||||
printf("}}\n");
|
||||
#endif
|
||||
|
||||
|
||||
/* fdin = freopen("tester.report", "r+", stdin);
|
||||
yyreset();
|
||||
yyparse(); */
|
||||
}
|
||||
|
||||
54
src/cvtDctsdr/special.h
Normal file
54
src/cvtDctsdr/special.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/* special.h */
|
||||
/* share/epicsH $Id$ */
|
||||
|
||||
/*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 6-1-90
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 06-07-91 mrk Cleaned up
|
||||
* .02 03-04-92 jba Added special Hardware Link
|
||||
* .03 07-27-93 mrk Added SPC_ALARMACK
|
||||
* .04 02-09-94 mrk Added SPC_AS
|
||||
*/
|
||||
|
||||
#ifndef INCspecialh
|
||||
#define INCspecialh 1
|
||||
/* types 1-99 are global. Record specific must start with 100 */
|
||||
#define SPC_NOMOD 1 /*Field must not be modified */
|
||||
#define SPC_DBADDR 2 /*db_name_to_addr must call cvt_dbaddr */
|
||||
#define SPC_SCAN 3 /*A scan related field is being changed */
|
||||
#define SPC_HDWLINK 4 /*Special Hardware Link */
|
||||
#define SPC_ALARMACK 5 /*Special Alarm Acknowledgement*/
|
||||
#define SPC_AS 6 /* Access Security*/
|
||||
/* useful when record support must be notified of a field changing value*/
|
||||
#define SPC_MOD 100
|
||||
/* used by all records that support a reset field */
|
||||
#define SPC_RESET 101 /*The res field is being modified*/
|
||||
/* Specific to conversion (Currently only ai */
|
||||
#define SPC_LINCONV 102 /*A linear conversion field is being changed*/
|
||||
/* Specific to calculation records */
|
||||
#define SPC_CALC 103 /*The CALC field is being changed*/
|
||||
#endif
|
||||
@@ -1,45 +0,0 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
USR_LDLIBS = -lDb -lCom -lm
|
||||
USR_LDFLAGS = -L.
|
||||
|
||||
LEX = $(ELEX)
|
||||
YACC = $(EYACC)
|
||||
YACCOPT = -l
|
||||
LEXOPT = -L
|
||||
|
||||
DEPLIBS_BASE = $(EPICS_BASE_LIB)
|
||||
DEPLIBS = ./libDb.a\
|
||||
$(DEPLIBS_BASE)/libCom.a
|
||||
# $(DEPLIBS_BASE)/libDb.a
|
||||
|
||||
|
||||
SRCS.c = \
|
||||
../dbStaticLib.c \
|
||||
atdb_yacc.c \
|
||||
../dbta.c \
|
||||
../dbl.c \
|
||||
../dbls.c
|
||||
|
||||
|
||||
LIBOBJS = dbStaticLib.o
|
||||
|
||||
LIBNAME = libDb.a
|
||||
|
||||
PROD = atdb dbl dbls dbta
|
||||
|
||||
include $(EPICS)/config/RULES.Unix
|
||||
|
||||
atdb: atdb_yacc.o $(DEPLIBS)
|
||||
$(LINK.c) -o $@ atdb_yacc.o $(LDLIBS)
|
||||
|
||||
# Extra rule since atdb_lex.c is included in atdb_yacc.c
|
||||
# In my opinion, these objects should really be built
|
||||
# independently.
|
||||
atdb_yacc.o: atdb_lex.c ../atdb.c
|
||||
|
||||
clean::
|
||||
@$(RM) atdb_lex.c atdb_yacc.c
|
||||
|
||||
@@ -5,18 +5,62 @@ include $(EPICS)/config/CONFIG_BASE
|
||||
USR_CFLAGS = -ansi
|
||||
VX_WARN_YES = -Wall -pedantic
|
||||
|
||||
MENUS += menuAlarmSevr.h
|
||||
MENUS += menuAlarmStat.h
|
||||
MENUS += menuArrType.h
|
||||
MENUS += menuCompress.h
|
||||
MENUS += menuFtype.h
|
||||
MENUS += menuIvoa.h
|
||||
MENUS += menuLinr.h
|
||||
MENUS += menuOmsl.h
|
||||
MENUS += menuPriority.h
|
||||
MENUS += menuScan.h
|
||||
MENUS += menuYesNo.h
|
||||
|
||||
RECTYPES += dbCommon.h
|
||||
|
||||
ASCII = dbCommonRecord.ascii menuGlobal.ascii all.ascii
|
||||
|
||||
SRCS.c = \
|
||||
../dbAccess.c ../dbBkpt.c ../dbFastLinkConv.c ../dbLink.c \
|
||||
../dbNotify.c ../dbStaticLib.c ../iocInit.c ../drvTS.c ../dbScan.c \
|
||||
../dbEvent.c ../dbTest.c ../dbls.c ../db_access.c \
|
||||
../db_test.c ../recGbl.c ../callback.c ../taskwd.c \
|
||||
../dbCaLink.c ../dbCaDblink.c ../devLib.c ../initHooks.c ../cvtBpt.c
|
||||
../dbAccess.c\
|
||||
../dbBkpt.c\
|
||||
../dbConvert.c\
|
||||
../dbFastLinkConv.c\
|
||||
../dbNotify.c\
|
||||
../iocInit.c\
|
||||
../drvTS.c\
|
||||
../dbScan.c \
|
||||
../dbEvent.c\
|
||||
../dbTest.c\
|
||||
../db_access.c \
|
||||
../db_test.c\
|
||||
../recGbl.c\
|
||||
../callback.c\
|
||||
../taskwd.c \
|
||||
../dbCaLink.c\
|
||||
../dbCaDblink.c\
|
||||
../devLib.c\
|
||||
../initHooks.c
|
||||
|
||||
LIBOBJS = \
|
||||
dbAccess.o dbBkpt.o dbFastLinkConv.o dbLink.o dbNotify.o \
|
||||
dbStaticLib.o iocInit.o drvTS.o dbScan.o dbEvent.o dbTest.o dbls.o \
|
||||
db_access.o db_test.o recGbl.o callback.o taskwd.o dbCaLink.o \
|
||||
dbCaDblink.o devLib.o cvtBpt.o
|
||||
dbAccess.o\
|
||||
dbBkpt.o\
|
||||
dbConvert.o\
|
||||
dbFastLinkConv.o\
|
||||
dbNotify.o \
|
||||
iocInit.o\
|
||||
drvTS.o\
|
||||
dbScan.o\
|
||||
dbEvent.o\
|
||||
dbTest.o\
|
||||
db_access.o\
|
||||
db_test.o\
|
||||
recGbl.o\
|
||||
callback.o\
|
||||
taskwd.o\
|
||||
dbCaLink.o \
|
||||
dbCaDblink.o\
|
||||
devLib.o
|
||||
|
||||
PROD = initHooks.o
|
||||
|
||||
@@ -24,3 +68,12 @@ LIBNAME = dbLib
|
||||
|
||||
include $(EPICS)/config/RULES.Vx
|
||||
|
||||
dbCommon.h: ../dbCommonRecord.ascii dbCommon.ascii
|
||||
$(RM) $@
|
||||
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbAsciiToRecordtypeH $<
|
||||
|
||||
dbCommon.ascii: ../dbCommon.ascii
|
||||
@test -f $@ || ln -s $< $@
|
||||
|
||||
clean::
|
||||
@$(RM) dbCommon.ascii rec base
|
||||
|
||||
234
src/db/all.ascii
Normal file
234
src/db/all.ascii
Normal file
@@ -0,0 +1,234 @@
|
||||
path "./base/rec"
|
||||
include "menuGlobal.ascii"
|
||||
include "menuConvert.ascii"
|
||||
include "aiRecord.ascii"
|
||||
#include "aaiRecord.ascii"
|
||||
include "aoRecord.ascii"
|
||||
#include "aaoRecord.ascii"
|
||||
include "biRecord.ascii"
|
||||
include "boRecord.ascii"
|
||||
include "calcRecord.ascii"
|
||||
include "compressRecord.ascii"
|
||||
include "dfanoutRecord.ascii"
|
||||
include "egRecord.ascii"
|
||||
include "egeventRecord.ascii"
|
||||
include "erRecord.ascii"
|
||||
include "ereventRecord.ascii"
|
||||
include "eventRecord.ascii"
|
||||
include "fanoutRecord.ascii"
|
||||
include "histogramRecord.ascii"
|
||||
include "longinRecord.ascii"
|
||||
include "longoutRecord.ascii"
|
||||
include "mbbiRecord.ascii"
|
||||
include "mbbiDirectRecord.ascii"
|
||||
include "mbboRecord.ascii"
|
||||
include "mbboDirectRecord.ascii"
|
||||
include "permissiveRecord.ascii"
|
||||
include "pidRecord.ascii"
|
||||
include "pulseCounterRecord.ascii"
|
||||
include "pulseDelayRecord.ascii"
|
||||
include "pulseTrainRecord.ascii"
|
||||
include "scanRecord.ascii"
|
||||
include "selRecord.ascii"
|
||||
include "seqRecord.ascii"
|
||||
include "stateRecord.ascii"
|
||||
include "steppermotorRecord.ascii"
|
||||
include "stringinRecord.ascii"
|
||||
include "stringoutRecord.ascii"
|
||||
include "subRecord.ascii"
|
||||
#include "gsubRecord.ascii"
|
||||
#include "palRecord.ascii"
|
||||
include "subArrayRecord.ascii"
|
||||
include "timerRecord.ascii"
|
||||
include "waitRecord.ascii"
|
||||
include "waveformRecord.ascii"
|
||||
device(ai,CONSTANT,devAiSoft,"Soft Channel")
|
||||
device(ai,CONSTANT,devAiSoftRaw,"Raw Soft Channel")
|
||||
device(ai,VME_IO,devAiXy566Se,"XYCOM-566 SE Scanned")
|
||||
device(ai,VME_IO,devAiXy566Di,"XYCOM-566 Dif Scanned")
|
||||
device(ai,VME_IO,devAiXy566DiL,"XYCOM-566 Dif Latched")
|
||||
device(ai,VME_IO,devAiDvx2502,"DVX-2502")
|
||||
device(ai,CONSTANT,devAiTestAsyn,"Test Asyn")
|
||||
device(ai,CONSTANT,devAiSymb,"vxWorks Variable")
|
||||
device(ai,AB_IO,devAiAb1771Il,"AB-1771IL-Analog In")
|
||||
device(ai,AB_IO,devAiAb1771Ife,"AB-1771IFE")
|
||||
device(ai,AB_IO,devAiAb1771Ixe,"AB-1771IXE-Millivolt In")
|
||||
device(ai,AB_IO,devAiAb1771IfeSe,"AB-1771IFE-SE")
|
||||
device(ai,AB_IO,devAiAb1771IfeMa,"AB-1771IFE-4to20MA")
|
||||
device(ai,AB_IO,devAiAb1771Ife0to5V,"AB-1771IFE-0to5Volt")
|
||||
device(ai,AB_IO,devAiAb1771IrPlatinum,"AB-1771RTD-Platinum")
|
||||
device(ai,AB_IO,devAiAb1771IrCopper,"AB-1771RTD-Copper")
|
||||
#device(ai,CAMAC_IO,devAiCamac,"Camac")
|
||||
device(ai,VME_IO,devAiAt5Vxi,"VXI-AT5-AI")
|
||||
#device(ai,GPIB_IO,devAiK486Gpib,"Keithley-486")
|
||||
#device(ai,VME_IO,devAiKscV215,"KSC-V215")
|
||||
device(ai,VME_IO,devAiSysmon,"SYSMON")
|
||||
#device(aai,CAMAC_IO,devAaiCamac,"Camac")
|
||||
device(ao,CONSTANT,devAoSoft,"Soft Channel")
|
||||
device(ao,CONSTANT,devAoSoftRaw,"Raw Soft Channel")
|
||||
device(ao,VME_IO,devAoVmiVme4100,"VMIVME-4100")
|
||||
device(ao,CONSTANT,devAoTestAsyn,"Test Asyn")
|
||||
device(ao,CONSTANT,devAoSymb,"vxWorks Variable")
|
||||
device(ao,AB_IO,devAoAb1771Ofe,"AB-1771OFE")
|
||||
#device(ao,CAMAC_IO,devAoCamac,"Camac")
|
||||
device(ao,VME_IO,devAoAt5Vxi,"VXI-AT5-AO")
|
||||
device(bi,CONSTANT,devBiSoft,"Soft Channel")
|
||||
device(bi,CONSTANT,devBiSoftRaw,"Raw Soft Channel")
|
||||
device(bi,VME_IO,devBiMpv910,"MPV-910")
|
||||
device(bi,VME_IO,devBiXVme210,"XVME-210")
|
||||
device(bi,CONSTANT,devBiTestAsyn,"Test Asyn")
|
||||
device(bi,AB_IO,devBiAb,"AB-Binary Input")
|
||||
device(bi,AB_IO,devBiAb16,"AB-16 bit BI")
|
||||
device(bi,AB_IO,devBiAb32,"AB-32 bit BI")
|
||||
#device(bi,CAMAC_IO,devBiCamac,"Camac")
|
||||
device(bi,VME_IO,devBiAt5Vxi,"VXI-AT5-BI")
|
||||
#device(bi,VME_IO,devBiXy240,"XYCOM-240")
|
||||
device(bi,VME_IO,devBiHpe1368a,"VXI-HPE1368-VS")
|
||||
#device(bi,VME_IO,devBiAt8Fp,"AT8-FP10S")
|
||||
device(bi,VME_IO,devBiAvme9440,"AVME9440 I")
|
||||
device(bi,VME_IO,devBiSysmon,"SYSMON")
|
||||
device(bi,VME_IO,devBiMpc,"MPC")
|
||||
device(bo,CONSTANT,devBoSoft,"Soft Channel")
|
||||
device(bo,CONSTANT,devBoSoftRaw,"Raw Soft Channel")
|
||||
device(bo,VME_IO,devBoMpv902,"MPV-902")
|
||||
device(bo,VME_IO,devBoXVme220,"XVME-220")
|
||||
device(bo,CONSTANT,devBoTestAsyn,"Test Asyn")
|
||||
device(bo,AB_IO,devBoAb,"AB-Binary Output")
|
||||
device(bo,AB_IO,devBoAb16,"AB-16 bit BO")
|
||||
device(bo,AB_IO,devBoAb32,"AB-32 bit BO")
|
||||
#device(bo,CAMAC_IO,devBoCamac,"Camac")
|
||||
device(bo,VME_IO,devBoAt5Vxi,"VXI-AT5-BO")
|
||||
#device(bo,GPIB_IO,devBoK486Gpib,"Keithley-486")
|
||||
#device(bo,VME_IO,devBoXy240,"XYCOM-240")
|
||||
device(bo,VME_IO,devBoHpe1368a,"VXI-HPE1368-VS")
|
||||
#device(bo,VME_IO,devBoAt8Fp,"AT8-FP10S")
|
||||
device(bo,VME_IO,devBoAvme9440,"AVME9440 O")
|
||||
device(bo,VME_IO,devBoSysmon,"SYSMON")
|
||||
device(bo,VME_IO,devBoMpc,"MPC")
|
||||
device(event,CONSTANT,devEventSoft,"Soft Channel")
|
||||
device(event,VME_IO,devEventMz8310,"Mizar-8310")
|
||||
device(event,CONSTANT,devEventTestIoEvent,"Test IoEvent")
|
||||
device(event,VME_IO,devErEpicsEvent,"APS event receiver")
|
||||
device(histogram,CONSTANT,devHistogramSoft,"Soft Channel")
|
||||
device(histogram,CONSTANT,devHistogramTestAsyn,"Test Asyn")
|
||||
device(longin,CONSTANT,devLiSoft,"Soft Channel")
|
||||
device(longin,CONSTANT,devLiSymb,"vxWorks Variable")
|
||||
#device(longin,CAMAC_IO,devLiCamac,"Camac")
|
||||
device(longout,CONSTANT,devLoSoft,"Soft Channel")
|
||||
device(longout,CONSTANT,devLoSymb,"vxWorks Variable")
|
||||
#device(longout,CAMAC_IO,devLoCamac,"Camac")
|
||||
device(mbbi,CONSTANT,devMbbiSoft,"Soft Channel")
|
||||
device(mbbi,CONSTANT,devMbbiSoftRaw,"Raw Soft Channel")
|
||||
device(mbbi,VME_IO,devMbbiMpv910,"MPV-910")
|
||||
device(mbbi,VME_IO,devMbbiXVme210,"XVME-210")
|
||||
device(mbbi,CONSTANT,devMbbiTestAsyn,"Test Asyn")
|
||||
device(mbbi,AB_IO,devMbbiAb,"AB-Binary Input")
|
||||
device(mbbi,AB_IO,devMbbiAb16,"AB-16 bit BI")
|
||||
device(mbbi,AB_IO,devMbbiAb32,"AB-32 bit BI")
|
||||
device(mbbi,AB_IO,devMbbiAbAdapterStat,"AB-Adapter Status")
|
||||
device(mbbi,AB_IO,devMbbiAbCardStat,"AB-Card Status")
|
||||
#device(mbbi,CAMAC_IO,devMbbiCamac,"Camac")
|
||||
device(mbbi,VME_IO,devMbbiAt5Vxi,"VXI-AT5-BI")
|
||||
#device(mbbi,VME_IO,devMbbiXy240,"XYCOM-240")
|
||||
device(mbbi,VME_IO,devMbbiHpe1368a,"VXI-HPE1368-VS")
|
||||
#device(mbbi,VME_IO,devMbbiAt8Fp,"AT8-FP10S")
|
||||
device(mbbi,VME_IO,devMbbiAvme9440,"AVME9440 I")
|
||||
device(mbbi,VME_IO,devMbbiSysmon,"SYSMON")
|
||||
device(mbbiDirect,CONSTANT,devMbbiDirectSoft,"Soft Channel")
|
||||
device(mbbiDirect,CONSTANT,devMbbiDirectSoftRaw,"Raw Soft Channel")
|
||||
device(mbbiDirect,VME_IO,devMbbiDirectMpv910,"MPV-910")
|
||||
device(mbbiDirect,VME_IO,devMbbiDirectXVme210,"XVME-210")
|
||||
device(mbbiDirect,AB_IO,devMbbiDirectAb,"AB-Binary Input")
|
||||
device(mbbiDirect,AB_IO,devMbbiDirectAb16,"AB-16 bit BI")
|
||||
device(mbbiDirect,AB_IO,devMbbiDirectAb32,"AB-32 bit BI")
|
||||
#device(mbbiDirect,CAMAC_IO,devMbbiDirectCamac,"Camac")
|
||||
device(mbbiDirect,VME_IO,devMbbiDirectAt5Vxi,"VXI-AT5-BI")
|
||||
device(mbbo,CONSTANT,devMbboSoft,"Soft Channel")
|
||||
device(mbbo,CONSTANT,devMbboSoftRaw,"Raw Soft Channel")
|
||||
device(mbbo,VME_IO,devMbboMpv902,"MPV-902")
|
||||
device(mbbo,VME_IO,devMbboXVme220,"XVME-220")
|
||||
device(mbbo,CONSTANT,devMbboTestAsyn,"Test Asyn")
|
||||
device(mbbo,AB_IO,devMbboAb,"AB-Binary Output")
|
||||
device(mbbo,AB_IO,devMbboAb16,"AB-16 bit BO")
|
||||
device(mbbo,AB_IO,devMbboAb32,"AB-32 bit BO")
|
||||
device(mbbo,VME_IO,devMbboAt5Vxi,"VXI-AT5-BO")
|
||||
#device(mbbo,GPIB_IO,devMbboK486Gpib,"Keithley-486")
|
||||
#device(mbbo,VME_IO,devMbboXy240,"XYCOM-240")
|
||||
device(mbbo,VME_IO,devMbboHpe1368a,"VXI-HPE1368-VS")
|
||||
#device(mbbo,VME_IO,devMbboAt8Fp,"AT8-FP10S")
|
||||
device(mbbo,VME_IO,devMbboAvme9440,"AVME9440 O")
|
||||
device(mbbo,VME_IO,devMbboSysmon,"SYSMON")
|
||||
device(mbboDirect,CONSTANT,devMbboDirectSoft,"Soft Channel")
|
||||
device(mbboDirect,CONSTANT,devMbboDirectSoftRaw,"Raw Soft Channel")
|
||||
device(mbboDirect,VME_IO,devMbboDirectMpv902,"MPV-902")
|
||||
device(mbboDirect,VME_IO,devMbboDirectXVme220,"XVME-220")
|
||||
device(mbboDirect,AB_IO,devMbboDirectAb,"AB-Binary Output")
|
||||
device(mbboDirect,AB_IO,devMbboDirectAb16,"AB-16 bit BO")
|
||||
device(mbboDirect,AB_IO,devMbboDirectAb32,"AB-32 bit BO")
|
||||
#device(mbboDirect,CAMAC_IO,devMbboDirectCamac,"Camac")
|
||||
device(mbboDirect,VME_IO,devMbboDirectAt5Vxi,"VXI-AT5-BO")
|
||||
device(pulseCounter,VME_IO,devPcMz8310,"Mizar-8310")
|
||||
device(pulseDelay,VME_IO,devPdMz8310,"Mizar-8310")
|
||||
device(pulseDelay,VXI_IO,devPdVxiTDM,"VXI Time Delay Module")
|
||||
device(pulseTrain,CONSTANT,devPtSoft,"Soft Channel")
|
||||
device(pulseTrain,VME_IO,devPtMz8310,"Mizar-8310")
|
||||
device(steppermotor,VME_IO,devSmCompumotor1830,"Compumotor 1830")
|
||||
device(steppermotor,VME_IO,devSmOms6Axis,"OMS 6-Axis")
|
||||
device(stringin,CONSTANT,devSiSoft,"Soft Channel")
|
||||
device(stringin,CONSTANT,devSiTestAsyn,"Test Asyn")
|
||||
device(stringin,CONSTANT,devSiSymb,"vxWorks Variable")
|
||||
device(stringout,CONSTANT,devSoSoft,"Soft Channel")
|
||||
device(stringout,CONSTANT,devSoTestAsyn,"Test Asyn")
|
||||
device(stringout,CONSTANT,devSoSymb,"vxWorks Variable")
|
||||
device(subArray,CONSTANT,devSASoft,"Soft Channel")
|
||||
device(timer,VME_IO,devTmMizar8310,"Mizar-8310")
|
||||
device(timer,VME_IO,devTmDg535,"DG 535")
|
||||
device(timer,VME_IO,devTmAt5Vxi,"VXI-AT5-TIME")
|
||||
device(waveform,CONSTANT,devWfSoft,"Soft Channel")
|
||||
device(waveform,VME_IO,devWfXy566Sc,"XYCOM-566 Single Channel")
|
||||
device(waveform,VME_IO,devWfComet,"Comet Digitizer")
|
||||
device(waveform,VME_IO,devWfJoergerVtr1,"Joerger Digitizer")
|
||||
device(waveform,CONSTANT,devWfTestAsyn,"Test Asyn")
|
||||
device(waveform,VME_IO,devWfDvx2502,"DVX-2502")
|
||||
device(waveform,VME_IO,devWfPentek4261,"Pentek 4261")
|
||||
#device(waveform,CAMAC_IO,devWfCamac,"Camac")
|
||||
#device(waveform,VME_IO,devWfJoergerVtr1,"Joerger-VTR1")
|
||||
#device(waveform,VME_IO,devWfComet,"Omnibyte-COMET")
|
||||
device(eg,VME_IO,devEg,"APS event generator G")
|
||||
device(egevent,VME_IO,devEgEvent,"APS event generator E")
|
||||
device(er,VME_IO,devEr,"APS event receiver")
|
||||
device(erevent,VME_IO,devErevent,"APS event receiver")
|
||||
device(wait,CONSTANT,devWaitIoEvent,"Soft Channel")
|
||||
#device(ai,INST_IO,devAiCan,"CANbus")
|
||||
#device(ao,INST_IO,devAoCan,"CANbus")
|
||||
#device(bi,INST_IO,devBiCan,"CANbus")
|
||||
#device(bo,INST_IO,devBoCan,"CANbus")
|
||||
#device(mbbi,INST_IO,devMbbiCan,"CANbus")
|
||||
#device(mbbo,INST_IO,devMbboCan,"CANbus")
|
||||
#device(mbbiDirect,INST_IO,devMbbiDirectCan,"CANbus")
|
||||
#device(mbboDirect,INST_IO,devMbboDirectCan,"CANbus")
|
||||
driver(drvXy010)
|
||||
driver(drvVxi)
|
||||
driver(drvGpib)
|
||||
driver(drvBitBus)
|
||||
driver(drvBb910)
|
||||
driver(drvXy210)
|
||||
driver(drvBb902)
|
||||
driver(drvXy220)
|
||||
driver(drvXy566)
|
||||
driver(drvDvx)
|
||||
driver(drvVmi4100)
|
||||
driver(drvAb)
|
||||
driver(drvAt5Vxi)
|
||||
driver(drvCompuSm)
|
||||
driver(drvOms)
|
||||
driver(drvMz8310)
|
||||
driver(drvHpe1368a)
|
||||
#driver(drvXy240)
|
||||
#driver(drvKscV215)
|
||||
#driver(drvComet)
|
||||
#driver(drvJgvtr1)
|
||||
#driver(drvFp)
|
||||
#driver(drvFpm)
|
||||
#driver(drvIpac)
|
||||
#driver(drvTip810)
|
||||
@@ -1,34 +0,0 @@
|
||||
b [a-zA-Z0-9_]
|
||||
a [ \t]
|
||||
d [a-zA-Z0-9_\,\./\*#\[\]%:;!|\'\-&\(\)@\?\+<>=$\^\~]
|
||||
|
||||
%{
|
||||
|
||||
yyreset()
|
||||
{
|
||||
line_num=1;
|
||||
BEGIN INITIAL;
|
||||
return(0);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%%
|
||||
|
||||
^[A-Z0-9_]+ { yylval.Str=(char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(FIELD); }
|
||||
|
||||
^"PV:" { return(PV); }
|
||||
"Type:" { return(TYPE); }
|
||||
"" { return(CLOSE); }
|
||||
"$$end" { return(CLOSE); }
|
||||
|
||||
{d}+ { yylval.Str=(char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(WORD); }
|
||||
|
||||
. ;
|
||||
\n { line_num++; }
|
||||
|
||||
%%
|
||||
@@ -1,135 +0,0 @@
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#include <memory.h>
|
||||
#include <string.h>
|
||||
static int yy_start;
|
||||
#include <dbStaticLib.h>
|
||||
/* kludge for buggy lex/yacc. exploits the fact that we know the union */
|
||||
/* below will be given the name YYSTYPE. done so that ifndef YYSTYPE */
|
||||
/* (as it appears in pdb.c) fails */
|
||||
#define YYSTYPE OUR_YYSTYPE
|
||||
int line_num;
|
||||
|
||||
extern DBENTRY *pdbentry;
|
||||
char rectype[100];
|
||||
char recname[100];
|
||||
|
||||
char curr_field[10];
|
||||
char curr_value[200];
|
||||
char message[200];
|
||||
long status;
|
||||
|
||||
#ifdef __STDC__
|
||||
static void printMessage(char *mess) {
|
||||
#else
|
||||
static void printMessage(mess)
|
||||
char *mess;
|
||||
{
|
||||
#endif /*__STDC__*/
|
||||
|
||||
sprintf(message,"%s Error near line %d Type: %s Name: %s Field: %s Value: %s",
|
||||
mess,line_num,rectype,recname,curr_field,curr_value);
|
||||
errMessage(status,message);
|
||||
}
|
||||
%}
|
||||
|
||||
%start conv
|
||||
|
||||
%token <Str> WORD
|
||||
%token <Str> FIELD
|
||||
%token <Str> TYPE
|
||||
%token <Str> PV CLOSE
|
||||
|
||||
%union
|
||||
{
|
||||
int Int;
|
||||
char Char;
|
||||
char *Str;
|
||||
double Real;
|
||||
}
|
||||
|
||||
%%
|
||||
|
||||
conv: things
|
||||
;
|
||||
|
||||
things:
|
||||
| things thing
|
||||
;
|
||||
|
||||
thing: header fields CLOSE
|
||||
| header CLOSE
|
||||
| junko
|
||||
;
|
||||
|
||||
header: PV WORD TYPE WORD WORD
|
||||
{
|
||||
strcpy(rectype,$4);
|
||||
strcpy(recname,$2);
|
||||
status = dbFindRecdes(pdbentry,rectype);
|
||||
if(status) printMessage("dbFindRecdes");
|
||||
status = dbCreateRecord(pdbentry,recname);
|
||||
if(status) printMessage("dbCreateRecord");
|
||||
}
|
||||
|
||||
header: PV WORD TYPE WORD
|
||||
{
|
||||
strcpy(rectype,$4);
|
||||
strcpy(recname,$2);
|
||||
status = dbFindRecdes(pdbentry,rectype);
|
||||
if(status) printMessage("dbFindRecdes");
|
||||
status = dbCreateRecord(pdbentry,recname);
|
||||
if(status) printMessage("dbCreateRecord");
|
||||
}
|
||||
|
||||
fields: field
|
||||
| fields field
|
||||
;
|
||||
|
||||
field: f_name words
|
||||
{
|
||||
status = dbPutString(pdbentry,curr_value);
|
||||
if(status) printMessage("dbPutString");
|
||||
}
|
||||
;
|
||||
|
||||
f_name: FIELD
|
||||
{
|
||||
|
||||
curr_value[0]='\0';
|
||||
strcpy(curr_field,$1);
|
||||
status = dbFindField(pdbentry,$1);
|
||||
if(status) printMessage("dbFindField");
|
||||
}
|
||||
;
|
||||
|
||||
words:
|
||||
| words WORD
|
||||
{
|
||||
char* p;
|
||||
/* pretty crappy stuff */
|
||||
if((p=strstr($2,".PP.MS"))) {p[0]=' ';p[3]=' ';}
|
||||
else if((p=strstr($2,".PP.NMS"))) {p[0]=' ';p[3]=' ';}
|
||||
else if((p=strstr($2,".NPP.MS"))) {p[0]=' ';p[4]=' ';}
|
||||
else if((p=strstr($2,".NPP.NMS"))) {p[0]=' ';p[4]=' ';}
|
||||
else if(strlen(curr_value)>(size_t)0) { strcat(curr_value," "); }
|
||||
strcat(curr_value,$2);
|
||||
}
|
||||
;
|
||||
|
||||
junko: WORD
|
||||
| CLOSE
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
#include "atdb_lex.c"
|
||||
|
||||
yyerror(str)
|
||||
char *str;
|
||||
{
|
||||
sprintf(message,"Error line %d : %s %s\n",line_num, yytext,str);
|
||||
errMessage(-1,message);
|
||||
}
|
||||
|
||||
#include "atdb.c"
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <recSup.h>
|
||||
#include <taskwd.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbCommon.h>
|
||||
#include <task_params.h>
|
||||
|
||||
#define QUEUESIZE 1000
|
||||
@@ -169,14 +170,16 @@ static void wdCallback(long ind)
|
||||
|
||||
static void ProcessCallback(CALLBACK *pCallback)
|
||||
{
|
||||
struct dbCommon *pRec;
|
||||
dbCommon *pRec = NULL;
|
||||
struct rset *prset = (struct rset *)pRec->rset;
|
||||
|
||||
callbackGetUser(pRec, pCallback);
|
||||
dbScanLock(pRec);
|
||||
((struct rset*)(pRec->rset))->process(pRec);
|
||||
(*prset->process)(pRec);
|
||||
dbScanUnlock(pRec);
|
||||
}
|
||||
void callbackRequestProcessCallback(CALLBACK *pCallback, int Priority, void *pRec)
|
||||
void callbackRequestProcessCallback(CALLBACK *pCallback,
|
||||
int Priority, void *pRec)
|
||||
{
|
||||
callbackSetCallback(ProcessCallback, pCallback);
|
||||
callbackSetPriority(Priority, pCallback);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,6 +28,9 @@
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* $Log$
|
||||
* Revision 1.5 1995/02/23 21:45:03 mcn
|
||||
* Fixed locking error. OOPS.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -68,20 +71,17 @@
|
||||
|
||||
#include <fast_lock.h>
|
||||
#include <alarm.h>
|
||||
#include <choice.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbAccess.h>
|
||||
#include <dbScan.h>
|
||||
#include <dbCommon.h>
|
||||
#include <dbFldTypes.h>
|
||||
#include <dbRecDes.h>
|
||||
#include <dbRecType.h>
|
||||
#include <dbRecords.h>
|
||||
#include <dbBkpt.h>
|
||||
#include <db_field_log.h>
|
||||
#include <errMdef.h>
|
||||
#include <recSup.h>
|
||||
#include <recGbl.h>
|
||||
#include <special.h>
|
||||
#include <task_params.h>
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
|
||||
/* needed for PVNAME_SZ and FLDNAME_SZ ... must be before dbAccess.h */
|
||||
#include <dbDefs.h>
|
||||
#include <recGbl.h>
|
||||
|
||||
/* needed for dbNameToAddr() */
|
||||
#include <dbAccess.h>
|
||||
@@ -88,11 +89,9 @@
|
||||
((DBF) == DBF_FLOAT ? DBR_FLOAT : \
|
||||
((DBF) == DBF_DOUBLE ? DBR_DOUBLE : \
|
||||
((DBF) == DBF_ENUM ? DBR_ENUM : \
|
||||
((DBF) == DBF_GBLCHOICE ? DBR_ENUM : \
|
||||
((DBF) == DBF_CVTCHOICE ? DBR_ENUM : \
|
||||
((DBF) == DBF_RECCHOICE ? DBR_ENUM : \
|
||||
((DBF) == DBF_DEVCHOICE ? DBR_ENUM : \
|
||||
INVALID_DBF ))))))))))))))
|
||||
((DBF) == DBF_MENU ? DBR_ENUM : \
|
||||
((DBF) == DBF_DEVICE ? DBR_ENUM : \
|
||||
INVALID_DBF ))))))))))))
|
||||
|
||||
/* this macro should be in recSup.h */
|
||||
/* to hide the fact that the precord */
|
||||
|
||||
@@ -308,14 +308,8 @@ long rc;
|
||||
|
||||
/* moving source name */
|
||||
/* into struct input_pvar */
|
||||
strncpy(pi->source_name,
|
||||
plink->value.pv_link.pvname,
|
||||
PVNAME_SZ);
|
||||
pi->source_name[PVNAME_SZ] = '\0';
|
||||
strcat(pi->source_name, ".");
|
||||
strncat(pi->source_name,
|
||||
plink->value.pv_link.fldname,
|
||||
FLDNAME_SZ);
|
||||
strcpy(pi->source_name,
|
||||
plink->value.pv_link.pvname);
|
||||
|
||||
/* preserving MS/NMS specification */
|
||||
if (plink->value.pv_link.maximize_sevr)
|
||||
@@ -511,15 +505,8 @@ long rc;
|
||||
/* moving dest name into */
|
||||
/* struct output_pvar */
|
||||
|
||||
strncpy(po->dest_name,
|
||||
plink->value.pv_link.pvname,
|
||||
PVNAME_SZ);
|
||||
po->dest_name[PVNAME_SZ] = '\0';
|
||||
strcat(po->dest_name, ".");
|
||||
strncat(po->dest_name,
|
||||
plink->value.pv_link.fldname,
|
||||
FLDNAME_SZ);
|
||||
|
||||
strcpy(po->dest_name,
|
||||
plink->value.pv_link.pvname);
|
||||
/* for dbGet() */
|
||||
po->source_new_dbr_type =
|
||||
dbCaNewDbfToNewDbr(
|
||||
|
||||
246
src/db/dbCommon.ascii
Normal file
246
src/db/dbCommon.ascii
Normal file
@@ -0,0 +1,246 @@
|
||||
field(NAME,DBF_STRING) {
|
||||
prompt("Record Name")
|
||||
special(SPC_NOMOD)
|
||||
size(29)
|
||||
}
|
||||
field(DESC,DBF_STRING) {
|
||||
prompt("Descriptor")
|
||||
promptgroup(GUI_COMMON)
|
||||
size(29)
|
||||
}
|
||||
field(ASG,DBF_STRING) {
|
||||
prompt("Access Security Group")
|
||||
promptgroup(GUI_COMMON)
|
||||
special(SPC_AS)
|
||||
size(29)
|
||||
}
|
||||
field(SCAN,DBF_MENU) {
|
||||
prompt("Scan Mechanism")
|
||||
promptgroup(GUI_SCAN)
|
||||
special(SPC_SCAN)
|
||||
interest(1)
|
||||
menu(menuScan)
|
||||
}
|
||||
field(PINI,DBF_MENU) {
|
||||
prompt("Process at iocInit")
|
||||
promptgroup(GUI_SCAN)
|
||||
interest(1)
|
||||
menu(menuYesNo)
|
||||
}
|
||||
field(PHAS,DBF_SHORT) {
|
||||
prompt("Scan Phase")
|
||||
promptgroup(GUI_SCAN)
|
||||
special(SPC_SCAN)
|
||||
interest(1)
|
||||
}
|
||||
field(EVNT,DBF_SHORT) {
|
||||
prompt("Event Number")
|
||||
promptgroup(GUI_SCAN)
|
||||
special(SPC_SCAN)
|
||||
interest(1)
|
||||
}
|
||||
field(TSE,DBF_SHORT) {
|
||||
prompt("Time Stamp Event")
|
||||
interest(1)
|
||||
}
|
||||
field(TSEL,DBF_INLINK) {
|
||||
prompt("Time Stamp Link")
|
||||
promptgroup(GUI_SCAN)
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(DTYP,DBF_DEVICE) {
|
||||
prompt("Device Type")
|
||||
promptgroup(GUI_LINKS)
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(DISV,DBF_SHORT) {
|
||||
prompt("Disable Value")
|
||||
promptgroup(GUI_SCAN)
|
||||
initial("1")
|
||||
}
|
||||
field(DISA,DBF_SHORT) {
|
||||
prompt("Disable")
|
||||
}
|
||||
field(SDIS,DBF_INLINK) {
|
||||
prompt("Scanning Disable")
|
||||
promptgroup(GUI_SCAN)
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(MLOK,DBF_NOACCESS) {
|
||||
prompt("Monitor fastlock")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(8)
|
||||
extra("FAST_LOCK mlok")
|
||||
}
|
||||
field(MLIS,DBF_NOACCESS) {
|
||||
prompt("Monitor List")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(12)
|
||||
extra("ELLLIST mlis")
|
||||
}
|
||||
field(DISP,DBF_UCHAR) {
|
||||
prompt("Disable putField")
|
||||
}
|
||||
field(PROC,DBF_UCHAR) {
|
||||
prompt("Force Processing")
|
||||
pp(TRUE)
|
||||
interest(3)
|
||||
}
|
||||
field(STAT,DBF_MENU) {
|
||||
prompt("Alarm Status")
|
||||
special(SPC_NOMOD)
|
||||
menu(menuAlarmStat)
|
||||
initial("17")
|
||||
}
|
||||
field(SEVR,DBF_MENU) {
|
||||
prompt("Alarm Severity")
|
||||
special(SPC_NOMOD)
|
||||
menu(menuAlarmSevr)
|
||||
initial("3")
|
||||
}
|
||||
field(NSTA,DBF_MENU) {
|
||||
prompt("New Alarm Status")
|
||||
special(SPC_NOMOD)
|
||||
interest(2)
|
||||
menu(menuAlarmStat)
|
||||
}
|
||||
field(NSEV,DBF_MENU) {
|
||||
prompt("New Alarm Severity")
|
||||
special(SPC_NOMOD)
|
||||
interest(2)
|
||||
menu(menuAlarmSevr)
|
||||
}
|
||||
field(ACKS,DBF_MENU) {
|
||||
prompt("Alarm Ack Severity")
|
||||
special(SPC_NOMOD)
|
||||
interest(2)
|
||||
menu(menuAlarmSevr)
|
||||
}
|
||||
field(ACKT,DBF_MENU) {
|
||||
prompt("Alarm Ack Transient")
|
||||
special(SPC_NOMOD)
|
||||
interest(2)
|
||||
menu(menuYesNo)
|
||||
initial("1")
|
||||
}
|
||||
field(DISS,DBF_MENU) {
|
||||
prompt("Disable Alarm Sevrty")
|
||||
promptgroup(GUI_SCAN)
|
||||
interest(1)
|
||||
menu(menuAlarmSevr)
|
||||
}
|
||||
field(LSET,DBF_SHORT) {
|
||||
prompt("Lock Set")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
}
|
||||
field(LCNT,DBF_UCHAR) {
|
||||
prompt("Lock Count")
|
||||
special(SPC_NOMOD)
|
||||
interest(2)
|
||||
}
|
||||
field(PACT,DBF_UCHAR) {
|
||||
prompt("Record active")
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(PUTF,DBF_UCHAR) {
|
||||
prompt("dbPutField process")
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(RPRO,DBF_UCHAR) {
|
||||
prompt("Reprocess ")
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(ASP,DBF_NOACCESS) {
|
||||
prompt("Access Security Pvt")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("void *asp")
|
||||
}
|
||||
field(PPN,DBF_NOACCESS) {
|
||||
prompt("addr of PUTNOTIFY")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("void *ppn")
|
||||
}
|
||||
field(PPNN,DBF_NOACCESS) {
|
||||
prompt("next record PUTNOTIFY")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("void *ppnn")
|
||||
}
|
||||
field(SPVT,DBF_NOACCESS) {
|
||||
prompt("Scan Private")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("void *spvt")
|
||||
}
|
||||
field(RSET,DBF_NOACCESS) {
|
||||
prompt("Address of RSET")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("void *rset")
|
||||
}
|
||||
field(DSET,DBF_NOACCESS) {
|
||||
prompt("DSET address")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("struct dset *dset")
|
||||
}
|
||||
field(DPVT,DBF_NOACCESS) {
|
||||
prompt("Device Private")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(4)
|
||||
extra("void *dpvt")
|
||||
}
|
||||
field(PRIO,DBF_MENU) {
|
||||
prompt("Scheduling Priority")
|
||||
promptgroup(GUI_SCAN)
|
||||
special(SPC_SCAN)
|
||||
interest(1)
|
||||
menu(menuPriority)
|
||||
}
|
||||
field(TPRO,DBF_UCHAR) {
|
||||
prompt("Trace Processing")
|
||||
}
|
||||
field(BKPT,DBF_NOACCESS) {
|
||||
prompt("Break Point")
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
size(1)
|
||||
extra("char bkpt")
|
||||
}
|
||||
field(UDF,DBF_UCHAR) {
|
||||
prompt("Undefined")
|
||||
pp(TRUE)
|
||||
interest(1)
|
||||
initial("1")
|
||||
}
|
||||
field(TIME,DBF_NOACCESS) {
|
||||
prompt("Time")
|
||||
special(SPC_NOMOD)
|
||||
interest(4)
|
||||
size(8)
|
||||
extra("TS_STAMP time")
|
||||
}
|
||||
field(FLNK,DBF_FWDLINK) {
|
||||
prompt("Forward Process Link")
|
||||
promptgroup(GUI_LINKS)
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
3
src/db/dbCommonRecord.ascii
Normal file
3
src/db/dbCommonRecord.ascii
Normal file
@@ -0,0 +1,3 @@
|
||||
recordtype(dbCommon) {
|
||||
include "dbCommon.ascii"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -41,22 +41,21 @@
|
||||
#include <fast_lock.h>
|
||||
#include <cvtFast.h>
|
||||
#include <alarm.h>
|
||||
#include <choice.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbAccess.h>
|
||||
#include <dbConvert.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbScan.h>
|
||||
#include <dbCommon.h>
|
||||
#include <dbFldTypes.h>
|
||||
#include <dbRecDes.h>
|
||||
#include <dbRecType.h>
|
||||
#include <db_field_log.h>
|
||||
#include <errMdef.h>
|
||||
#include <recSup.h>
|
||||
#include <recGbl.h>
|
||||
#include <special.h>
|
||||
|
||||
extern struct dbBase *pdbBase;
|
||||
extern struct dbBase *pdbbase;
|
||||
|
||||
/*
|
||||
* In the following functions:
|
||||
@@ -92,7 +91,7 @@ long cvt_uninit(
|
||||
void *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
printf("Error in record support, uninitialized link.\n");
|
||||
recGblDbaddrError(-1,paddr,"cvt_uninit: uninitialized link");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
@@ -261,7 +260,7 @@ static long cvt_st_e(
|
||||
struct rset *prset;
|
||||
long status;
|
||||
|
||||
prset = GET_PRSET(pdbBase->precSup, paddr->record_type);
|
||||
prset = dbGetRset(paddr);
|
||||
|
||||
if (prset && prset->put_enum_str)
|
||||
return (*prset->put_enum_str)(paddr, from);
|
||||
@@ -271,121 +270,69 @@ static long cvt_st_e(
|
||||
return(S_db_badDbrtype);
|
||||
}
|
||||
|
||||
/* Convert String to Global Choice */
|
||||
static long cvt_st_gbl(
|
||||
/* Convert String to Menu */
|
||||
static long cvt_st_menu(
|
||||
char *from,
|
||||
unsigned short *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
char *pchoice;
|
||||
struct choiceSet *pchoiceSet;
|
||||
unsigned short i;
|
||||
{
|
||||
dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes;
|
||||
dbMenu *pdbMenu = (dbMenu *)pdbFldDes->ftPvt;
|
||||
char **papChoiceValue;
|
||||
char *pchoice;
|
||||
unsigned int nChoice,ind;
|
||||
int nargs,nchars;
|
||||
|
||||
pchoiceSet = GET_PCHOICE_SET(pdbBase->pchoiceGbl, paddr->choice_set);
|
||||
if( pdbMenu && (papChoiceValue = pdbMenu->papChoiceValue)) {
|
||||
nChoice = pdbMenu->nChoice;
|
||||
for(ind=0; ind<nChoice; ind++) {
|
||||
if(!(pchoice=papChoiceValue[ind])) continue;
|
||||
if(strcmp(pchoice,from)==0) {
|
||||
*to = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
nargs = sscanf(from," %u %n",&ind,&nchars);
|
||||
if(nargs==1 && nchars==strlen(from) && ind<nChoice) {
|
||||
*to = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
recGblDbaddrError(S_db_badChoice,paddr,"dbFastLinkConv(cvt_st_menu)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
if (pchoiceSet) {
|
||||
for (i=0; i < pchoiceSet->number; i++) {
|
||||
pchoice = pchoiceSet->papChoice[i];
|
||||
if (!pchoice)
|
||||
continue;
|
||||
if (strcmp(pchoice, from) == 0) {
|
||||
*to = i;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbPut(putStringGchoice)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
/* Convert String to Cvt Choice */
|
||||
static long cvt_st_cvt(
|
||||
/* Convert String to Device */
|
||||
static long cvt_st_device(
|
||||
char *from,
|
||||
unsigned short *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
char *pchoice;
|
||||
struct choiceSet *pchoiceSet;
|
||||
unsigned short i;
|
||||
{
|
||||
dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes;
|
||||
dbDeviceMenu *pdbDeviceMenu = (dbDeviceMenu *)pdbFldDes->ftPvt;
|
||||
char **papChoice;
|
||||
char *pchoice;
|
||||
unsigned int nChoice,ind;
|
||||
int nargs,nchars;
|
||||
|
||||
pchoiceSet = pdbBase->pchoiceCvt;
|
||||
|
||||
if (pchoiceSet) {
|
||||
for (i=0; i < pchoiceSet->number; i++) {
|
||||
pchoice = pchoiceSet->papChoice[i];
|
||||
if (!pchoice)
|
||||
continue;
|
||||
if (strcmp(pchoice, from) == 0) {
|
||||
*to = i;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbPut(putStringCchoice)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
/* Convert String to Rec Choice */
|
||||
static long cvt_st_rec(
|
||||
char *from,
|
||||
unsigned short *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
char *pchoice;
|
||||
struct choiceSet *pchoiceSet;
|
||||
struct arrChoiceSet *parrChoiceSet;
|
||||
unsigned short i;
|
||||
|
||||
parrChoiceSet = GET_PARR_CHOICE_SET(pdbBase->pchoiceRec, paddr->record_type);
|
||||
|
||||
if (parrChoiceSet) {
|
||||
pchoiceSet = GET_PCHOICE_SET(parrChoiceSet, paddr->choice_set);
|
||||
|
||||
if (pchoiceSet) {
|
||||
for (i=0; i < pchoiceSet->number; i++) {
|
||||
pchoice = pchoiceSet->papChoice[i];
|
||||
if (!pchoice)
|
||||
continue;
|
||||
if (strcmp(pchoice, from) == 0) {
|
||||
*to = i;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbPut(putStringRchoice)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
/* Convert String to Dev Choice */
|
||||
static long cvt_st_dev(
|
||||
char *from,
|
||||
unsigned short *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
char *pchoice;
|
||||
struct devChoiceSet *pdevChoiceSet;
|
||||
unsigned short i;
|
||||
|
||||
pdevChoiceSet = GET_PDEV_CHOICE_SET(pdbBase->pchoiceDev, paddr->record_type);
|
||||
|
||||
if (pdevChoiceSet) {
|
||||
for (i=0; i < pdevChoiceSet->number; i++) {
|
||||
pchoice = pdevChoiceSet->papDevChoice[i]->pchoice;
|
||||
if (!pchoice)
|
||||
continue;
|
||||
if (strcmp(pchoice, from) == 0) {
|
||||
*to = i;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbPut(putStringDchoice)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
if( pdbDeviceMenu && (papChoice = pdbDeviceMenu->papChoice)) {
|
||||
nChoice = pdbDeviceMenu->nChoice;
|
||||
for(ind=0; ind<nChoice; ind++) {
|
||||
if(!(pchoice=papChoice[ind])) continue;
|
||||
if(strcmp(pchoice,from)==0) {
|
||||
*to = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
nargs = sscanf(from," %u %n",&ind,&nchars);
|
||||
if(nargs==1 && nchars==strlen(from) && ind<nChoice) {
|
||||
*to = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
recGblDbaddrError(S_db_badChoice,paddr,"dbFastLinkConv(cvt_st_device)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
/* Convert Char to String */
|
||||
static long cvt_c_st(
|
||||
@@ -817,7 +764,7 @@ static long cvt_f_st(
|
||||
long status = 0;
|
||||
long precision = 2;
|
||||
|
||||
prset = GET_PRSET(pdbBase->precSup, paddr->record_type);
|
||||
prset = dbGetRset(paddr);
|
||||
|
||||
if (prset && prset->get_precision)
|
||||
(*prset->get_precision)(paddr, &precision);
|
||||
@@ -907,7 +854,7 @@ static long cvt_d_st(
|
||||
long status = 0;
|
||||
long precision = 2;
|
||||
|
||||
prset = GET_PRSET(pdbBase->precSup, paddr->record_type);
|
||||
prset = dbGetRset(paddr);
|
||||
|
||||
if (prset && prset->get_precision)
|
||||
(*prset->get_precision)(paddr, &precision);
|
||||
@@ -1061,7 +1008,7 @@ static long cvt_e_st_get(
|
||||
struct rset *prset;
|
||||
long status;
|
||||
|
||||
prset = GET_PRSET(pdbBase->precSup, paddr->record_type);
|
||||
prset = dbGetRset(paddr);
|
||||
|
||||
if (prset && prset->get_enum_str)
|
||||
return (*prset->get_enum_str)(paddr, to);
|
||||
@@ -1079,100 +1026,47 @@ static long cvt_e_st_put(
|
||||
struct dbAddr *paddr)
|
||||
{ cvtUshortToString(*from, to); return(0); }
|
||||
|
||||
/* Get Gbl Choice to String */
|
||||
static long cvt_gbl_st(
|
||||
/* Get Menu to String */
|
||||
static long cvt_menu_st(
|
||||
unsigned short *from,
|
||||
char *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
struct choiceSet *pchoiceSet;
|
||||
char *pchoice;
|
||||
dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes;
|
||||
dbMenu *pdbMenu = (dbMenu *)pdbFldDes->ftPvt;
|
||||
char **papChoiceValue;
|
||||
char *pchoice;
|
||||
|
||||
pchoiceSet = GET_PCHOICE_SET(pdbBase->pchoiceGbl, paddr->choice_set);
|
||||
|
||||
if (pchoiceSet) {
|
||||
pchoice = GET_CHOICE(pchoiceSet, *from);
|
||||
|
||||
if (pchoice) {
|
||||
strncpy(to, pchoice, MAX_STRING_SIZE);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbGetField(getGchoiceString)");
|
||||
return(S_db_badChoice);
|
||||
if( !pdbMenu || *from>=pdbMenu->nChoice
|
||||
|| !(papChoiceValue = pdbMenu->papChoiceValue)
|
||||
|| !(pchoice=papChoiceValue[*from])) {
|
||||
recGblDbaddrError(S_db_badChoice,paddr,"dbFastLinkConv(cvt_menu_st)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
strncpy(to,pchoice,MAX_STRING_SIZE);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* Get Cvt Choice to String */
|
||||
static long cvt_cvt_st(
|
||||
|
||||
/* Get Device to String */
|
||||
static long cvt_device_st(
|
||||
unsigned short *from,
|
||||
char *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
char *pchoice;
|
||||
dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes;
|
||||
dbDeviceMenu *pdbDeviceMenu = (dbDeviceMenu *)pdbFldDes->ftPvt;
|
||||
char **papChoice;
|
||||
char *pchoice;
|
||||
|
||||
pchoice = GET_CHOICE(pdbBase->pchoiceCvt, *from);
|
||||
|
||||
if (pchoice) {
|
||||
strncpy(to, pchoice, MAX_STRING_SIZE);
|
||||
return(0);
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbGetField(getCchoiceString)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
/* Get Record Choice to String */
|
||||
static long cvt_rec_st(
|
||||
unsigned short *from,
|
||||
char *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
struct choiceSet *pchoiceSet;
|
||||
struct arrChoiceSet *parrChoiceSet;
|
||||
char *pchoice;
|
||||
|
||||
parrChoiceSet = GET_PARR_CHOICE_SET(pdbBase->pchoiceRec, paddr->record_type);
|
||||
|
||||
if (parrChoiceSet) {
|
||||
pchoiceSet = GET_PCHOICE_SET(parrChoiceSet, paddr->choice_set);
|
||||
|
||||
if (pchoiceSet) {
|
||||
pchoice = GET_CHOICE(pchoiceSet, *from);
|
||||
|
||||
if (pchoice) {
|
||||
strncpy(to, pchoice, MAX_STRING_SIZE);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbGetField(getRchoiceString)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
|
||||
/* Get Dev Choice to String */
|
||||
static long cvt_dev_st(
|
||||
unsigned short *from,
|
||||
char *to,
|
||||
struct dbAddr *paddr)
|
||||
{
|
||||
struct devChoiceSet *pdevChoiceSet;
|
||||
struct devChoice *pdevChoice;
|
||||
|
||||
pdevChoiceSet = GET_PDEV_CHOICE_SET(pdbBase->pchoiceDev, paddr->record_type);
|
||||
|
||||
if (pdevChoiceSet) {
|
||||
pdevChoice = GET_DEV_CHOICE(pdevChoiceSet, *from);
|
||||
|
||||
if (pdevChoice) {
|
||||
strncpy(to, pdevChoice->pchoice, MAX_STRING_SIZE);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
||||
recGblDbaddrError(S_db_badChoice, paddr, "dbGetField(getRchoiceString)");
|
||||
return(S_db_badChoice);
|
||||
if( !pdbDeviceMenu || *from>=pdbDeviceMenu->nChoice
|
||||
|| !(papChoice= pdbDeviceMenu->papChoice)
|
||||
|| !(pchoice=papChoice[*from])) {
|
||||
recGblDbaddrError(S_db_badChoice,paddr,"dbFastLinkConv(cvt_device_st)");
|
||||
return(S_db_badChoice);
|
||||
}
|
||||
strncpy(to,pchoice,MAX_STRING_SIZE);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1186,7 +1080,7 @@ static long cvt_dev_st(
|
||||
* NULL implies the conversion is not supported.
|
||||
*/
|
||||
|
||||
long (*get_cvt_table[DBF_DEVCHOICE+1][DBR_ENUM+1])() = {
|
||||
long (*dbFastGetConvertRoutine[DBF_DEVICE+1][DBR_ENUM+1])() = {
|
||||
|
||||
/* Convert DBF_STRING to ... */
|
||||
{ cvt_st_st, cvt_st_c, cvt_st_uc, cvt_st_s, cvt_st_us, cvt_st_l, cvt_st_ul, cvt_st_f, cvt_st_d, cvt_st_e },
|
||||
@@ -1218,17 +1112,11 @@ long (*get_cvt_table[DBF_DEVCHOICE+1][DBR_ENUM+1])() = {
|
||||
/* Convert DBF_ENUM to ... */
|
||||
{ cvt_e_st_get, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e },
|
||||
|
||||
/* Convert DBF_GBLCHOICE to ... */
|
||||
{ cvt_gbl_st, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e },
|
||||
/* Convert DBF_MENU to ... */
|
||||
{ cvt_menu_st, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e },
|
||||
|
||||
/* Convert DBF_CVTCHOICE to ... */
|
||||
{ cvt_cvt_st, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e },
|
||||
|
||||
/* Convert DBF_RECCHOICE to ... */
|
||||
{ cvt_rec_st, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e },
|
||||
|
||||
/* Convert DBF_DEVCHOICE to ... */
|
||||
{ cvt_dev_st, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e } };
|
||||
/* Convert DBF_DEVICE to ... */
|
||||
{ cvt_device_st, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e } };
|
||||
|
||||
/*
|
||||
* Put conversion routine lookup table
|
||||
@@ -1237,40 +1125,40 @@ long (*get_cvt_table[DBF_DEVCHOICE+1][DBR_ENUM+1])() = {
|
||||
*
|
||||
* DBF_STRING DBF_CHAR DBF_UCHAR DBF_SHORT DBF_USHORT
|
||||
* DBF_LONG DBF_ULONG DBF_FLOAT DBF_DOUBLE DBF_ENUM
|
||||
* DBF_GBLCHOICE DBF_CVTCHOICE DBF_RECCHOICE DBF_DEVCHOICE
|
||||
* DBF_MENU DBF_DEVICE
|
||||
*
|
||||
* NULL implies the conversion is not supported.
|
||||
*/
|
||||
|
||||
long (*put_cvt_table[DBR_ENUM+1][DBF_DEVCHOICE+1])() = {
|
||||
long (*dbFastPutConvertRoutine[DBR_ENUM+1][DBF_DEVICE+1])() = {
|
||||
|
||||
/* Convert DBR_STRING to ... */
|
||||
{ cvt_st_st, cvt_st_c, cvt_st_uc, cvt_st_s, cvt_st_us, cvt_st_l, cvt_st_ul, cvt_st_f, cvt_st_d, cvt_st_e, cvt_st_gbl, cvt_st_cvt, cvt_st_rec, cvt_st_dev },
|
||||
{ cvt_st_st, cvt_st_c, cvt_st_uc, cvt_st_s, cvt_st_us, cvt_st_l, cvt_st_ul, cvt_st_f, cvt_st_d, cvt_st_e, cvt_st_menu, cvt_st_device},
|
||||
|
||||
/* Convert DBR_CHAR to ... */
|
||||
{ cvt_c_st, cvt_c_c, cvt_c_uc, cvt_c_s, cvt_c_us, cvt_c_l, cvt_c_ul, cvt_c_f, cvt_c_d, cvt_c_e, cvt_c_e, cvt_c_e, cvt_c_e, cvt_c_e },
|
||||
{ cvt_c_st, cvt_c_c, cvt_c_uc, cvt_c_s, cvt_c_us, cvt_c_l, cvt_c_ul, cvt_c_f, cvt_c_d, cvt_c_e, cvt_c_e, cvt_c_e},
|
||||
|
||||
/* Convert DBR_UCHAR to ... */
|
||||
{ cvt_uc_st, cvt_uc_c, cvt_uc_uc, cvt_uc_s, cvt_uc_us, cvt_uc_l, cvt_uc_ul, cvt_uc_f, cvt_uc_d, cvt_uc_e, cvt_uc_e, cvt_uc_e, cvt_uc_e, cvt_uc_e },
|
||||
{ cvt_uc_st, cvt_uc_c, cvt_uc_uc, cvt_uc_s, cvt_uc_us, cvt_uc_l, cvt_uc_ul, cvt_uc_f, cvt_uc_d, cvt_uc_e, cvt_uc_e, cvt_uc_e},
|
||||
|
||||
/* Convert DBR_SHORT to ... */
|
||||
{ cvt_s_st, cvt_s_c, cvt_s_uc, cvt_s_s, cvt_s_us, cvt_s_l, cvt_s_ul, cvt_s_f, cvt_s_d, cvt_s_e, cvt_s_e, cvt_s_e, cvt_s_e, cvt_s_e },
|
||||
{ cvt_s_st, cvt_s_c, cvt_s_uc, cvt_s_s, cvt_s_us, cvt_s_l, cvt_s_ul, cvt_s_f, cvt_s_d, cvt_s_e, cvt_s_e, cvt_s_e},
|
||||
|
||||
/* Convert DBR_USHORT to ... */
|
||||
{ cvt_us_st, cvt_us_c, cvt_us_uc, cvt_us_s, cvt_us_us, cvt_us_l, cvt_us_ul, cvt_us_f, cvt_us_d, cvt_us_e, cvt_us_e, cvt_us_e, cvt_us_e, cvt_us_e },
|
||||
{ cvt_us_st, cvt_us_c, cvt_us_uc, cvt_us_s, cvt_us_us, cvt_us_l, cvt_us_ul, cvt_us_f, cvt_us_d, cvt_us_e, cvt_us_e, cvt_us_e},
|
||||
|
||||
/* Convert DBR_LONG to ... */
|
||||
{ cvt_l_st, cvt_l_c, cvt_l_uc, cvt_l_s, cvt_l_us, cvt_l_l, cvt_l_ul, cvt_l_f, cvt_l_d, cvt_l_e, cvt_l_e, cvt_l_e, cvt_l_e, cvt_l_e },
|
||||
{ cvt_l_st, cvt_l_c, cvt_l_uc, cvt_l_s, cvt_l_us, cvt_l_l, cvt_l_ul, cvt_l_f, cvt_l_d, cvt_l_e, cvt_l_e, cvt_l_e},
|
||||
|
||||
/* Convert DBR_ULONG to ... */
|
||||
{ cvt_ul_st, cvt_ul_c, cvt_ul_uc, cvt_ul_s, cvt_ul_us, cvt_ul_l, cvt_ul_ul, cvt_ul_f, cvt_ul_d, cvt_ul_e, cvt_ul_e, cvt_ul_e, cvt_ul_e, cvt_ul_e },
|
||||
{ cvt_ul_st, cvt_ul_c, cvt_ul_uc, cvt_ul_s, cvt_ul_us, cvt_ul_l, cvt_ul_ul, cvt_ul_f, cvt_ul_d, cvt_ul_e, cvt_ul_e, cvt_ul_e},
|
||||
|
||||
/* Convert DBR_FLOAT to ... */
|
||||
{ cvt_f_st, cvt_f_c, cvt_f_uc, cvt_f_s, cvt_f_us, cvt_f_l, cvt_f_ul, cvt_f_f, cvt_f_d, cvt_f_e, cvt_f_e, cvt_f_e, cvt_f_e, cvt_f_e },
|
||||
{ cvt_f_st, cvt_f_c, cvt_f_uc, cvt_f_s, cvt_f_us, cvt_f_l, cvt_f_ul, cvt_f_f, cvt_f_d, cvt_f_e, cvt_f_e, cvt_f_e},
|
||||
|
||||
/* Convert DBR_DOUBLE to ... */
|
||||
{ cvt_d_st, cvt_d_c, cvt_d_uc, cvt_d_s, cvt_d_us, cvt_d_l, cvt_d_ul, cvt_d_f, cvt_d_d, cvt_d_e, cvt_d_e, cvt_d_e, cvt_d_e, cvt_d_e },
|
||||
{ cvt_d_st, cvt_d_c, cvt_d_uc, cvt_d_s, cvt_d_us, cvt_d_l, cvt_d_ul, cvt_d_f, cvt_d_d, cvt_d_e, cvt_d_e, cvt_d_e},
|
||||
|
||||
/* Convert DBR_ENUM to ... */
|
||||
{ cvt_e_st_put, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e, cvt_e_e, cvt_e_e, cvt_e_e, cvt_e_e } };
|
||||
{ cvt_e_st_put, cvt_e_c, cvt_e_uc, cvt_e_s, cvt_e_us, cvt_e_l, cvt_e_ul, cvt_e_f, cvt_e_d, cvt_e_e, cvt_e_e, cvt_e_e} };
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include <dbCommon.h>
|
||||
#include <errMdef.h>
|
||||
#include <ellLib.h>
|
||||
#include <recGbl.h>
|
||||
|
||||
/*NODE structure attached to ppnn field of each record in list*/
|
||||
typedef struct {
|
||||
@@ -140,7 +141,7 @@ static long putNotify(PUTNOTIFY *ppn)
|
||||
void *pbuffer = ppn->pbuffer;
|
||||
long nRequest = ppn->nRequest;
|
||||
long status=0;
|
||||
struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes);
|
||||
dbFldDes *pfldDes=(dbFldDes *)(paddr->pfldDes);
|
||||
struct dbCommon *precord = (struct dbCommon *)(paddr->precord);
|
||||
|
||||
if(precord->ppn == ppn) {
|
||||
|
||||
139
src/db/dbScan.c
139
src/db/dbScan.c
@@ -41,7 +41,7 @@
|
||||
* .10 02-22-94 mrk Make init work if 1st record has 28 char name
|
||||
* .11 05-04-94 mrk Call taskwdRemove only if spawing again
|
||||
*/
|
||||
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -54,19 +54,22 @@
|
||||
#include <sysLib.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbAccess.h>
|
||||
#include <dbScan.h>
|
||||
#include <taskwd.h>
|
||||
#include <callback.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbCommon.h>
|
||||
#include <dbRecords.h>
|
||||
#include <devSup.h>
|
||||
#include <recGbl.h>
|
||||
#include <task_params.h>
|
||||
#include <fast_lock.h>
|
||||
#include <dbStaticLib.h>
|
||||
|
||||
extern struct dbBase *pdbBase;
|
||||
extern struct dbBase *pdbbase;
|
||||
|
||||
/* SCAN ONCE */
|
||||
#define ONCE_QUEUE_SIZE 256
|
||||
@@ -156,7 +159,8 @@ void post_event(int event)
|
||||
evnt = (unsigned)event;
|
||||
/*multiple writers can exist. Thus if evnt is ever changed to use*/
|
||||
/*something bigger than a character interrupts will have to be blocked*/
|
||||
if(rngBufPut(eventQ,(void *)&evnt,sizeof(unsigned char))!=sizeof(unsigned char)) {
|
||||
if(rngBufPut(eventQ,(void *)&evnt,sizeof(unsigned char))
|
||||
!=sizeof(unsigned char)) {
|
||||
if(newOverflow) errMessage(0,"rngBufPut overflow in post_event");
|
||||
newOverflow = FALSE;
|
||||
} else {
|
||||
@@ -175,12 +179,14 @@ void scanAdd(struct dbCommon *precord)
|
||||
scan = precord->scan;
|
||||
if(scan==SCAN_PASSIVE) return;
|
||||
if(scan<0 || scan>= nPeriodic+SCAN_1ST_PERIODIC) {
|
||||
recGblRecordError(-1,(void *)precord,"scanAdd detected illegal SCAN value");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanAdd detected illegal SCAN value");
|
||||
}else if(scan==SCAN_EVENT) {
|
||||
unsigned char evnt;
|
||||
|
||||
if(precord->evnt<0 || precord->evnt>=MAX_EVENTS) {
|
||||
recGblRecordError(S_db_badField,(void *)precord,"scanAdd detected illegal EVNT value");
|
||||
recGblRecordError(S_db_badField,(void *)precord,
|
||||
"scanAdd detected illegal EVNT value");
|
||||
precord->scan = SCAN_PASSIVE;
|
||||
return;
|
||||
}
|
||||
@@ -199,13 +205,15 @@ void scanAdd(struct dbCommon *precord)
|
||||
DEVSUPFUN get_ioint_info;
|
||||
|
||||
if(precord->dset==NULL){
|
||||
recGblRecordError(-1,(void *)precord,"scanAdd: I/O Intr not valid (no DSET) ");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanAdd: I/O Intr not valid (no DSET) ");
|
||||
precord->scan = SCAN_PASSIVE;
|
||||
return;
|
||||
}
|
||||
get_ioint_info=precord->dset->get_ioint_info;
|
||||
if(get_ioint_info==NULL) {
|
||||
recGblRecordError(-1,(void *)precord,"scanAdd: I/O Intr not valid (no get_ioint_info)");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanAdd: I/O Intr not valid (no get_ioint_info)");
|
||||
precord->scan = SCAN_PASSIVE;
|
||||
return;
|
||||
}
|
||||
@@ -214,13 +222,15 @@ void scanAdd(struct dbCommon *precord)
|
||||
return;
|
||||
}
|
||||
if(piosl==NULL) {
|
||||
recGblRecordError(-1,(void *)precord,"scanAdd: I/O Intr not valid");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanAdd: I/O Intr not valid");
|
||||
precord->scan = SCAN_PASSIVE;
|
||||
return;
|
||||
}
|
||||
priority = precord->prio;
|
||||
if(priority<0 || priority>=NUM_CALLBACK_PRIORITIES) {
|
||||
recGblRecordError(-1,(void *)precord,"scanAdd: illegal prio field");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanAdd: illegal prio field");
|
||||
precord->scan = SCAN_PASSIVE;
|
||||
return;
|
||||
}
|
||||
@@ -245,18 +255,21 @@ void scanDelete(struct dbCommon *precord)
|
||||
scan = precord->scan;
|
||||
if(scan==SCAN_PASSIVE) return;
|
||||
if(scan<0 || scan>= nPeriodic+SCAN_1ST_PERIODIC) {
|
||||
recGblRecordError(-1,(void *)precord,"scanDelete detected illegal SCAN value");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanDelete detected illegal SCAN value");
|
||||
}else if(scan==SCAN_EVENT) {
|
||||
unsigned char evnt;
|
||||
|
||||
if(precord->evnt<0 || precord->evnt>=MAX_EVENTS) {
|
||||
recGblRecordError(S_db_badField,(void *)precord,"scanDelete detected illegal EVNT value");
|
||||
recGblRecordError(S_db_badField,(void *)precord,
|
||||
"scanDelete detected illegal EVNT value");
|
||||
return;
|
||||
}
|
||||
evnt = (signed)precord->evnt;
|
||||
psl = papEvent[evnt];
|
||||
if(psl==NULL)
|
||||
recGblRecordError(-1,(void *)precord,"scanDelete for bad evnt");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanDelete for bad evnt");
|
||||
else
|
||||
deleteFromList(precord,psl);
|
||||
} else if(scan==SCAN_IO_EVENT) {
|
||||
@@ -265,22 +278,26 @@ void scanDelete(struct dbCommon *precord)
|
||||
DEVSUPFUN get_ioint_info;
|
||||
|
||||
if(precord->dset==NULL) {
|
||||
recGblRecordError(-1,(void *)precord,"scanDelete: I/O Intr not valid (no DSET)");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanDelete: I/O Intr not valid (no DSET)");
|
||||
return;
|
||||
}
|
||||
get_ioint_info=precord->dset->get_ioint_info;
|
||||
if(get_ioint_info==NULL) {
|
||||
recGblRecordError(-1,(void *)precord,"scanDelete: I/O Intr not valid (no get_ioint_info)");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanDelete: I/O Intr not valid (no get_ioint_info)");
|
||||
return;
|
||||
}
|
||||
if(get_ioint_info(1,precord,&piosl)) return;/*return if error*/
|
||||
if(piosl==NULL) {
|
||||
recGblRecordError(-1,(void *)precord,"scanDelete: I/O Intr not valid");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanDelete: I/O Intr not valid");
|
||||
return;
|
||||
}
|
||||
priority = precord->prio;
|
||||
if(priority<0 || priority>=NUM_CALLBACK_PRIORITIES) {
|
||||
recGblRecordError(-1,(void *)precord,"scanDelete: get_ioint_info returned illegal priority");
|
||||
recGblRecordError(-1,(void *)precord,
|
||||
"scanDelete: get_ioint_info returned illegal priority");
|
||||
return;
|
||||
}
|
||||
piosl += priority; /*get piosl for correct priority*/
|
||||
@@ -443,54 +460,17 @@ static void periodicTask(struct scan_list *psl)
|
||||
|
||||
static void initPeriodic()
|
||||
{
|
||||
struct {
|
||||
DBRenumStrs
|
||||
} scanChoices;
|
||||
struct scan_list *psl;
|
||||
struct dbAddr dbAddr; /* database address */
|
||||
struct recHeader *precHeader;
|
||||
struct recLoc *precLoc;
|
||||
RECNODE *precNode;
|
||||
struct dbCommon *precord=NULL; /* pointer to record */
|
||||
long status,nRequest,options;
|
||||
void *pfl=NULL;
|
||||
dbMenu *pmenu;
|
||||
struct scan_list *psl;
|
||||
float temp;
|
||||
int i;
|
||||
char name[PVNAME_SZ+FLDNAME_SZ+2];
|
||||
float temp;
|
||||
|
||||
if(!(precHeader = pdbBase->precHeader)) {
|
||||
errMessage(S_record_noRecords, "initPeriodic");
|
||||
exit(1);
|
||||
}
|
||||
/* look for first record */
|
||||
for (i=0; i<precHeader->number; i++) {
|
||||
if((precLoc=precHeader->papRecLoc[i])==NULL) continue;
|
||||
if(!precLoc->preclist) continue;
|
||||
for(precNode=(RECNODE *)ellFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)ellNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
if(precord->name[0]!=0) goto got_record;
|
||||
}
|
||||
}
|
||||
errMessage(S_record_noRecords,"initPeriodic");
|
||||
return;
|
||||
got_record:
|
||||
/* get database address of SCAN field */
|
||||
name[PVNAME_SZ] = 0;
|
||||
strncpy(name,precord->name,PVNAME_SZ);
|
||||
strcat(name,".SCAN");
|
||||
if ((status=dbNameToAddr(name,&dbAddr)) != 0){
|
||||
recGblDbaddrError(status,&dbAddr,"initPeriodic");
|
||||
exit(1);
|
||||
}
|
||||
options = DBR_ENUM_STRS;
|
||||
nRequest = 0;
|
||||
status = dbGetField(&dbAddr,DBR_ENUM,&scanChoices,&options,&nRequest,pfl);
|
||||
nPeriodic = scanChoices.no_str - SCAN_1ST_PERIODIC;
|
||||
if(status || options!=DBR_ENUM_STRS || nPeriodic<=0) {
|
||||
recGblDbaddrError(status,&dbAddr,"initPeriodic");
|
||||
exit(1);
|
||||
pmenu = dbFindMenu(pdbbase,"menuScan");
|
||||
if(!pmenu) {
|
||||
epicsPrintf("initPeriodic: menuScan not present\n");
|
||||
return;
|
||||
}
|
||||
nPeriodic = pmenu->nChoice - SCAN_1ST_PERIODIC;
|
||||
papPeriodic = dbCalloc(nPeriodic,sizeof(struct scan_list*));
|
||||
periodicTaskId = dbCalloc(nPeriodic,sizeof(int));
|
||||
for(i=0; i<nPeriodic; i++) {
|
||||
@@ -498,7 +478,7 @@ got_record:
|
||||
papPeriodic[i] = psl;
|
||||
FASTLOCKINIT(&psl->lock);
|
||||
ellInit(&psl->list);
|
||||
sscanf(scanChoices.strs[i+SCAN_1ST_PERIODIC],"%f",&temp);
|
||||
sscanf(pmenu->papChoiceValue[i+SCAN_1ST_PERIODIC],"%f",&temp);
|
||||
psl->ticks = temp * vxTicksPerSecond;
|
||||
}
|
||||
}
|
||||
@@ -675,27 +655,20 @@ static void scanList(struct scan_list *psl)
|
||||
|
||||
static void buildScanLists(void)
|
||||
{
|
||||
struct recHeader *precHeader;
|
||||
struct recLoc *precLoc;
|
||||
RECNODE *precNode;
|
||||
struct dbCommon *precord; /* pointer to record */
|
||||
int i;
|
||||
dbRecDes *pdbRecDes;
|
||||
dbRecordNode *pdbRecordNode;
|
||||
dbCommon *precord;
|
||||
|
||||
if(!(precHeader = pdbBase->precHeader)) {
|
||||
errMessage(S_record_noRecords,
|
||||
"Error detected in build_scan_lists");
|
||||
exit(1);
|
||||
}
|
||||
/* look through all of the database records and place them on lists */
|
||||
for (i=0; i<precHeader->number; i++) {
|
||||
if((precLoc=precHeader->papRecLoc[i])==NULL) continue;
|
||||
if(!precLoc->preclist) continue;
|
||||
for(precNode=(RECNODE *)ellFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)ellNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
if(precord->name[0]==0) continue;
|
||||
scanAdd(precord);
|
||||
}
|
||||
/*Look for first record*/
|
||||
for(pdbRecDes = (dbRecDes *)ellFirst(&pdbbase->recDesList); pdbRecDes;
|
||||
pdbRecDes = (dbRecDes *)ellNext(&pdbRecDes->node)) {
|
||||
for (pdbRecordNode=(dbRecordNode *)ellFirst(&pdbRecDes->recList);
|
||||
pdbRecordNode;
|
||||
pdbRecordNode = (dbRecordNode *)ellNext(&pdbRecordNode->node)) {
|
||||
precord = pdbRecordNode->precord;
|
||||
if(precord->name[0]==0) continue;
|
||||
scanAdd(precord);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
702
src/db/dbTest.c
702
src/db/dbTest.c
File diff suppressed because it is too large
Load Diff
@@ -67,7 +67,6 @@ short index;
|
||||
return(1);
|
||||
}
|
||||
printf(" Record Name: %s\n",pname);
|
||||
printf(" Record Type: %d\n",addr.record_type);
|
||||
printf("Record Address: 0x%p\n",addr.precord);
|
||||
printf(" Field Type: %d\n",addr.field_type);
|
||||
printf(" Field Address: 0x%p\n",addr.pfield);
|
||||
@@ -127,7 +126,6 @@ short index;
|
||||
return(1);
|
||||
}
|
||||
printf(" Record Name: %s\n",pname);
|
||||
printf(" Record Type: %d\n",addr.record_type);
|
||||
printf("Record Address: 0x%p\n",addr.precord);
|
||||
printf(" Field Type: %d\n",addr.field_type);
|
||||
printf(" Field Address: 0x%p\n",addr.pfield);
|
||||
|
||||
222
src/db/dbl.c
222
src/db/dbl.c
@@ -1,222 +0,0 @@
|
||||
/* dbl.c
|
||||
* dbl is a simple unix tool dumps various record names in a database
|
||||
*
|
||||
* Original Author: Ben-chin Cha
|
||||
* Date: 5-12-93
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 mm-dd-yy xxx Comment
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include <cvtFast.h>
|
||||
#include <dbStaticLib.h>
|
||||
|
||||
#define MAX_TYPE 50
|
||||
#define MAX_DEV_NUM 1000
|
||||
#define MAX_DEV_NAME_SIZE 30
|
||||
#define MAX_REC_NAME_SIZE 15
|
||||
|
||||
int DBL_OPTION;
|
||||
int NUM_DEV_ITEMS,NUM_LIST_ITEMS;
|
||||
char dbType[MAX_TYPE][MAX_REC_NAME_SIZE];
|
||||
int rc_type[MAX_DEV_NUM];
|
||||
char pvName[MAX_DEV_NUM][MAX_DEV_NAME_SIZE+1];
|
||||
char dbl_option[MAX_REC_NAME_SIZE];
|
||||
char dbl_search[MAX_DEV_NAME_SIZE];
|
||||
|
||||
int dbl_dbGetRecNames();
|
||||
|
||||
main(argc,argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int i;
|
||||
dbl_option[0] = '\0';
|
||||
dbl_search[0] = '\0';
|
||||
if (argc == 1) {
|
||||
printf("USAGE: dbl <any.database> [option] [subString]\n\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (argc >= 3) strcpy(dbl_option,argv[2]);
|
||||
if (argc == 4) strcpy(dbl_search,argv[3]);
|
||||
|
||||
if (strcmp(argv[1],"help") == 0 || strcmp(argv[1],"-help") == 0
|
||||
|| strcmp(argv[1],"-h") == 0)
|
||||
{
|
||||
printf("\nUSAGE: dbl <any.database> [option] [subString]\n\n");
|
||||
printf("dbl - An EPICS database list utility, can be used to dump \n");
|
||||
printf(" the process variable names for the specified database\n\n");
|
||||
printf("where option can be set as following\n\n");
|
||||
printf(" 1 dumps device type and the process variable name in the database\n");
|
||||
printf(" 2 dumps database process variable names which contains the \"subString\" \n");
|
||||
printf(" ( where \"subString\" can be any alphabetic string )\n");
|
||||
printf(" ai dumps database process variable names which are \"ai\" type \n");
|
||||
printf(" -1 dumps the header file for currently supported record types\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
NUM_LIST_ITEMS = read_database(argv[1]);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
int read_database(filename)
|
||||
char *filename;
|
||||
{
|
||||
DBBASE *pdbbase;
|
||||
DBENTRY *pdbentry;
|
||||
int i,ntype;
|
||||
long status;
|
||||
char fname[80];
|
||||
char *str;
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen(filename,"r");
|
||||
if (!fp) {
|
||||
printf("ERROR: Database file '%s' not found\n\n",filename);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* load data base record name to pvName */
|
||||
str = pvName[0];
|
||||
memset(str,0,1000*31);
|
||||
|
||||
pdbbase=dbAllocBase();
|
||||
pdbentry=dbAllocEntry(pdbbase);
|
||||
status=dbRead(pdbbase,fp);
|
||||
if(status) errMessage(status,"dbRead");
|
||||
fclose(fp);
|
||||
if (strcmp(dbl_option,"-1") == 0)
|
||||
ntype = dbl_dbGetRecTypes(pdbbase);
|
||||
|
||||
else {
|
||||
if (strlen(dbl_option) > (size_t)1) DBL_OPTION = 2;
|
||||
else if (strcmp(dbl_option,"1") == 0) DBL_OPTION = 1;
|
||||
else if (strcmp(dbl_option,"2") == 0) DBL_OPTION = 3;
|
||||
else DBL_OPTION = 0;
|
||||
|
||||
switch (DBL_OPTION) {
|
||||
case 0: /* dump pv name only */
|
||||
NUM_LIST_ITEMS = dbl_dbGetRecNames(pdbbase,NULL);
|
||||
for (i=0;i<NUM_LIST_ITEMS;i++)
|
||||
printf("%s\n",pvName[i]);
|
||||
break;
|
||||
|
||||
case 1: /* dump type & pv name */
|
||||
NUM_LIST_ITEMS = dbl_dbGetRecNames(pdbbase,NULL);
|
||||
for (i=0;i<NUM_LIST_ITEMS;i++)
|
||||
printf("%s\t\t %s\n",dbType[rc_type[i]],pvName[i]);
|
||||
break;
|
||||
|
||||
case 2: /* dump pv name of matched type */
|
||||
NUM_LIST_ITEMS = dbl_dbGetRecNames(pdbbase,dbl_option);
|
||||
for (i=0;i<NUM_LIST_ITEMS;i++)
|
||||
printf("%s\n",pvName[i]);
|
||||
break;
|
||||
|
||||
case 3: /* dump pv name of matched string */
|
||||
NUM_LIST_ITEMS = dbl_dbGetRecNames(pdbbase,NULL);
|
||||
for (i=0;i<NUM_LIST_ITEMS;i++) {
|
||||
if (strstr(pvName[i],dbl_search))
|
||||
printf("%s\n",pvName[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dbFreeBase(pdbbase);
|
||||
|
||||
NUM_DEV_ITEMS = NUM_LIST_ITEMS;
|
||||
return(NUM_DEV_ITEMS);
|
||||
}
|
||||
|
||||
int dbl_dbGetRecNames(pdbbase,precdesname)
|
||||
DBBASE *pdbbase;
|
||||
char *precdesname;
|
||||
{
|
||||
DBENTRY dbentry;
|
||||
DBENTRY *pdbentry=&dbentry;
|
||||
long status;
|
||||
int i=0,num=0;
|
||||
|
||||
dbInitEntry(pdbbase,pdbentry);
|
||||
if(!precdesname)
|
||||
status = dbFirstRecdes(pdbentry);
|
||||
else
|
||||
status = dbFindRecdes(pdbentry,precdesname);
|
||||
if(status) {printf("No record description\n"); return(0);}
|
||||
while(!status) {
|
||||
strcpy(dbType[i], dbGetRecdesName(pdbentry));
|
||||
status = dbFirstRecord(pdbentry);
|
||||
while(!status) {
|
||||
strcpy(pvName[num],dbGetRecordName(pdbentry));
|
||||
rc_type[num] = i;
|
||||
num++;
|
||||
status = dbNextRecord(pdbentry);
|
||||
}
|
||||
if(precdesname) break;
|
||||
i++;
|
||||
status = dbNextRecdes(pdbentry);
|
||||
}
|
||||
dbFinishEntry(pdbentry);
|
||||
return(num);
|
||||
}
|
||||
|
||||
|
||||
int dbl_dbGetRecTypes(pdbbase)
|
||||
DBBASE *pdbbase;
|
||||
{
|
||||
DBENTRY dbentry;
|
||||
DBENTRY *pdbentry=&dbentry;
|
||||
long status;
|
||||
int i=0,num=0;
|
||||
|
||||
dbInitEntry(pdbbase,pdbentry);
|
||||
status = dbFirstRecdes(pdbentry);
|
||||
if(status) {printf("No record description\n"); return(0);}
|
||||
while(!status) {
|
||||
strcpy(dbType[i], dbGetRecdesName(pdbentry));
|
||||
i++;
|
||||
status = dbNextRecdes(pdbentry);
|
||||
}
|
||||
dbFinishEntry(pdbentry);
|
||||
num = i;
|
||||
|
||||
printf("int NUM_REC_TYPE = %d;\n",num);
|
||||
printf("char *dbType[] = {\n");
|
||||
for (i=0;i<num-1;i++) printf("\t\"%s\",\n",dbType[i]);
|
||||
printf("\t\"%s\"\n",dbType[num-1]);
|
||||
printf("\t};\n\n");
|
||||
|
||||
return(i);
|
||||
}
|
||||
1199
src/db/dbls.c
1199
src/db/dbls.c
File diff suppressed because it is too large
Load Diff
187
src/db/dbta.c
187
src/db/dbta.c
@@ -1,187 +0,0 @@
|
||||
/*dbta.c*/
|
||||
/* share/src/db @(#)dbta.c 1.7 2/25/94 */
|
||||
/*
|
||||
*
|
||||
* Author: Marty Kraimer
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 07-13-93 mrk Original version
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <memory.h>
|
||||
#include <time.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbStaticLib.h>
|
||||
DBBASE *pdbbase;
|
||||
|
||||
#ifdef __STDC__
|
||||
void parse_command_line_args(int, char **, int *, int *, char **);
|
||||
#else
|
||||
void parse_command_line_args();
|
||||
#endif /*__STDC__*/
|
||||
|
||||
#ifdef __STDC__
|
||||
int main(int argc,char **argv)
|
||||
#else
|
||||
int main(argc,argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
DBENTRY *pdbentry;
|
||||
FILE *fp;
|
||||
long status;
|
||||
char *ptime;
|
||||
time_t timeofday;
|
||||
char *rectype;
|
||||
int verbose;
|
||||
int oldshortform;
|
||||
char *dbname;
|
||||
char *sdr_filename;
|
||||
|
||||
parse_command_line_args(argc, argv, &verbose, &oldshortform, &dbname);
|
||||
|
||||
fp = fopen(dbname,"r");
|
||||
if(!fp) {
|
||||
errMessage(0,"Error opening file");
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase=dbAllocBase();
|
||||
pdbentry=dbAllocEntry(pdbbase);
|
||||
status=dbRead(pdbbase,fp);
|
||||
if(status) {
|
||||
errMessage(status,"dbRead");
|
||||
exit(-1);
|
||||
}
|
||||
fclose(fp);
|
||||
status = dbFirstRecdes(pdbentry);
|
||||
if(status) {
|
||||
printf("No record description\n");
|
||||
exit(-1);
|
||||
}
|
||||
if(oldshortform) {
|
||||
printf("$$mono\n");
|
||||
timeofday = time((time_t *)0);
|
||||
ptime = ctime(&timeofday);
|
||||
printf(" Time: %s\n",ptime);
|
||||
}
|
||||
while(!status) {
|
||||
rectype = dbGetRecdesName(pdbentry);
|
||||
status = dbFirstRecord(pdbentry);
|
||||
while(!status) {
|
||||
int generate_nl;
|
||||
|
||||
printf("\nPV: %s Type: %s",dbGetRecordName(pdbentry),rectype);
|
||||
printf("\n");
|
||||
generate_nl=FALSE;
|
||||
status = dbFirstFielddes(pdbentry,TRUE);
|
||||
if(status) printf(" No Fields\n");
|
||||
while(!status) {
|
||||
char *pstr;
|
||||
int lineout;
|
||||
|
||||
if(verbose || !dbIsDefaultValue(pdbentry)) {
|
||||
if(generate_nl) printf("\n");
|
||||
printf("%4s ",dbGetFieldName(pdbentry));
|
||||
pstr = dbGetString(pdbentry);
|
||||
if(pstr) printf("%s",pstr);
|
||||
generate_nl=TRUE;
|
||||
}
|
||||
status=dbNextFielddes(pdbentry,TRUE);
|
||||
}
|
||||
if(oldshortform)
|
||||
printf("\f\n");
|
||||
else
|
||||
printf("\n$$end\n");
|
||||
status = dbNextRecord(pdbentry);
|
||||
}
|
||||
status = dbNextRecdes(pdbentry);
|
||||
}
|
||||
if(oldshortform) printf("$$end\n");
|
||||
dbFreeEntry(pdbentry);
|
||||
dbFreeBase(pdbbase);
|
||||
return(0);
|
||||
}
|
||||
|
||||
#ifdef __STDC__
|
||||
void parse_command_line_args(int argc, char **argv,int *verbose,
|
||||
int *oldshortform, char **dbname)
|
||||
#else
|
||||
void parse_command_line_args(argc,argv,verbose,oldshortform,dbname)
|
||||
int argc;
|
||||
char **argv;
|
||||
int *verbose;
|
||||
int *oldshortform;
|
||||
char **dbname;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
extern char *optarg; /* needed for getopt() */
|
||||
extern int optind; /* needed for getopt() */
|
||||
int i;
|
||||
int c;
|
||||
int input_error;
|
||||
|
||||
/* defaults */
|
||||
*verbose = FALSE;
|
||||
*oldshortform = FALSE;
|
||||
*dbname = (char *) NULL;
|
||||
|
||||
input_error = FALSE;
|
||||
|
||||
while (!input_error && (c = getopt(argc, argv, "vs")) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'v': *verbose = TRUE; break;
|
||||
case 's': *oldshortform = TRUE; break;
|
||||
case '?': input_error = 1; break;
|
||||
default: input_error = 1; break;
|
||||
} /* end switch() */
|
||||
} /* endwhile */
|
||||
|
||||
if (!input_error && optind < argc)
|
||||
{
|
||||
int gotperiod=FALSE;
|
||||
int len;
|
||||
|
||||
len = strlen(argv[optind]);
|
||||
if(strchr(argv[optind],'.')) gotperiod = TRUE;
|
||||
if(!gotperiod) len = len + strlen(".database");
|
||||
*dbname = dbCalloc(1,len);
|
||||
strcpy(*dbname,argv[optind]);
|
||||
if(!gotperiod) strcat(*dbname,".database");
|
||||
return;
|
||||
}
|
||||
fprintf(stderr, "\nusage: dbta [-v] [-s] fn > file.rpt\n");
|
||||
fprintf(stderr,"\n\t-v\tVerbose mode, outputs all prompt fields of\n");
|
||||
fprintf(stderr,"\t\trecords to standard out. If not specified,\n");
|
||||
fprintf(stderr,"\t\tthen only non default fields will be printed\n");
|
||||
fprintf(stderr,"\t-s\tGenerate old DCT short form format file\n");
|
||||
fprintf(stderr,"\tfn\tNames the .database file.\n");
|
||||
exit(1);
|
||||
}
|
||||
810
src/db/iocInit.c
810
src/db/iocInit.c
File diff suppressed because it is too large
Load Diff
6
src/db/menuAlarmSevr.ascii
Normal file
6
src/db/menuAlarmSevr.ascii
Normal file
@@ -0,0 +1,6 @@
|
||||
menu(menuAlarmSevr) {
|
||||
choice(menuAlarmSevrNO_ALARM,"NO_ALARM")
|
||||
choice(menuAlarmSevrMINOR,"MINOR")
|
||||
choice(menuAlarmSevrMAJOR,"MAJOR")
|
||||
choice(menuAlarmSevrINVALID,"INVALID")
|
||||
}
|
||||
24
src/db/menuAlarmStat.ascii
Normal file
24
src/db/menuAlarmStat.ascii
Normal file
@@ -0,0 +1,24 @@
|
||||
menu(menuAlarmStat) {
|
||||
choice(menuAlarmStat,"")
|
||||
choice(menuAlarmStatREAD,"READ")
|
||||
choice(menuAlarmStatWRITE,"WRITE")
|
||||
choice(menuAlarmStatHIHI,"HIHI")
|
||||
choice(menuAlarmStatHIGH,"HIGH")
|
||||
choice(menuAlarmStatLOLO,"LOLO")
|
||||
choice(menuAlarmStatLOW,"LOW")
|
||||
choice(menuAlarmStatSTATE,"STATE")
|
||||
choice(menuAlarmStatCOS,"COS")
|
||||
choice(menuAlarmStatCOMM,"COMM")
|
||||
choice(menuAlarmStatTIMEOUT,"TIMEOUT")
|
||||
choice(menuAlarmStatHWLIMIT,"HWLIMIT")
|
||||
choice(menuAlarmStatCALC,"CALC")
|
||||
choice(menuAlarmStatSCAN,"SCAN")
|
||||
choice(menuAlarmStatLINK,"LINK")
|
||||
choice(menuAlarmStatSOFT,"SOFT")
|
||||
choice(menuAlarmStatBAD_SUB,"BAD_SUB")
|
||||
choice(menuAlarmStatUDF,"UDF")
|
||||
choice(menuAlarmStatDISABLE,"DISABLE")
|
||||
choice(menuAlarmStatSIMM,"SIMM")
|
||||
choice(menuAlarmStatREAD_ACCESS,"READ_ACCESS")
|
||||
choice(menuAlarmStatWRITE_ACCESS,"WRITE_ACCESS")
|
||||
}
|
||||
6
src/db/menuArrType.ascii
Normal file
6
src/db/menuArrType.ascii
Normal file
@@ -0,0 +1,6 @@
|
||||
menu(menuArrType) {
|
||||
choice(menuArrType8_bit_integers,"8 bit integers")
|
||||
choice(menuArrType16_bit_integers,"16 bit integers")
|
||||
choice(menuArrType32_bit_integers,"32 bit integers")
|
||||
choice(menuArrTypeIEEE_floating_point,"IEEE floating point")
|
||||
}
|
||||
6
src/db/menuCompress.ascii
Normal file
6
src/db/menuCompress.ascii
Normal file
@@ -0,0 +1,6 @@
|
||||
menu(menuCompress) {
|
||||
choice(menuCompressN_to_1_First_Value,"N to 1 First Value")
|
||||
choice(menuCompressN_to_1_Low_Value,"N to 1 Low Value")
|
||||
choice(menuCompressN_to_1_High_Value,"N to 1 High Value")
|
||||
choice(menuCompressN_to_1_Average,"N to 1 Average")
|
||||
}
|
||||
12
src/db/menuFtype.ascii
Normal file
12
src/db/menuFtype.ascii
Normal file
@@ -0,0 +1,12 @@
|
||||
menu(menuFtype) {
|
||||
choice(menuFtypeSTRING,"STRING")
|
||||
choice(menuFtypeCHAR,"CHAR")
|
||||
choice(menuFtypeUCHAR,"UCHAR")
|
||||
choice(menuFtypeSHORT,"SHORT")
|
||||
choice(menuFtypeUSHORT,"USHORT")
|
||||
choice(menuFtypeLONG,"LONG")
|
||||
choice(menuFtypeULONG,"ULONG")
|
||||
choice(menuFtypeFLOAT,"FLOAT")
|
||||
choice(menuFtypeDOUBLE,"DOUBLE")
|
||||
choice(menuFtypeENUM,"ENUM")
|
||||
}
|
||||
11
src/db/menuGlobal.ascii
Normal file
11
src/db/menuGlobal.ascii
Normal file
@@ -0,0 +1,11 @@
|
||||
include "menuAlarmSevr.ascii"
|
||||
include "menuAlarmStat.ascii"
|
||||
include "menuArrType.ascii"
|
||||
include "menuCompress.ascii"
|
||||
include "menuFtype.ascii"
|
||||
include "menuIvoa.ascii"
|
||||
include "menuLinr.ascii"
|
||||
include "menuOmsl.ascii"
|
||||
include "menuPriority.ascii"
|
||||
include "menuScan.ascii"
|
||||
include "menuYesNo.ascii"
|
||||
5
src/db/menuIvoa.ascii
Normal file
5
src/db/menuIvoa.ascii
Normal file
@@ -0,0 +1,5 @@
|
||||
menu(menuIvoa) {
|
||||
choice(menuIvoaContinue_normally,"Continue normally")
|
||||
choice(menuIvoaDon_t_drive_outputs,"Don't drive outputs")
|
||||
choice(menuIvoaSet_output_to_IVOV,"Set output to IVOV")
|
||||
}
|
||||
4
src/db/menuLinr.ascii
Normal file
4
src/db/menuLinr.ascii
Normal file
@@ -0,0 +1,4 @@
|
||||
menu(menuLinr) {
|
||||
choice(menuLinrNO_CONVERSION,"NO CONVERSION")
|
||||
choice(menuLinrLINEAR,"LINEAR")
|
||||
}
|
||||
4
src/db/menuOmsl.ascii
Normal file
4
src/db/menuOmsl.ascii
Normal file
@@ -0,0 +1,4 @@
|
||||
menu(menuOmsl) {
|
||||
choice(menuOmslsupervisory,"supervisory")
|
||||
choice(menuOmslclosed_loop,"closed_loop")
|
||||
}
|
||||
5
src/db/menuPriority.ascii
Normal file
5
src/db/menuPriority.ascii
Normal file
@@ -0,0 +1,5 @@
|
||||
menu(menuPriority) {
|
||||
choice(menuPriorityLOW,"LOW")
|
||||
choice(menuPriorityMEDIUM,"MEDIUM")
|
||||
choice(menuPriorityHIGH,"HIGH")
|
||||
}
|
||||
12
src/db/menuScan.ascii
Normal file
12
src/db/menuScan.ascii
Normal file
@@ -0,0 +1,12 @@
|
||||
menu(menuScan) {
|
||||
choice(menuScanPassive,"Passive")
|
||||
choice(menuScanEvent,"Event")
|
||||
choice(menuScanI_O_Intr,"I/O Intr")
|
||||
choice(menuScan10_second,"10 second")
|
||||
choice(menuScan5_second,"5 second")
|
||||
choice(menuScan2_second,"2 second")
|
||||
choice(menuScan1_second,"1 second")
|
||||
choice(menuScan_5_second,".5 second")
|
||||
choice(menuScan_2_second,".2 second")
|
||||
choice(menuScan_1_second,".1 second")
|
||||
}
|
||||
4
src/db/menuYesNo.ascii
Normal file
4
src/db/menuYesNo.ascii
Normal file
@@ -0,0 +1,4 @@
|
||||
menu(menuYesNo) {
|
||||
choice(menuYesNoNO,"NO")
|
||||
choice(menuYesNoYES,"YES")
|
||||
}
|
||||
219
src/db/recGbl.c
219
src/db/recGbl.c
@@ -47,24 +47,20 @@
|
||||
#include <stdioLib.h>
|
||||
#include <strLib.h>
|
||||
|
||||
#include <choice.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbRecType.h>
|
||||
#include <dbRecDes.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <dbEvent.h>
|
||||
#include <dbAccess.h>
|
||||
#include <dbConvert.h>
|
||||
#include <dbScan.h>
|
||||
#include <devSup.h>
|
||||
#include <recGbl.h>
|
||||
#include <dbCommon.h>
|
||||
#include <sdrHeader.h>
|
||||
#include <drvTS.h>
|
||||
|
||||
extern struct dbBase *pdbBase;
|
||||
|
||||
/* local routines */
|
||||
static void getVarRangeValue();
|
||||
static void getConRangeValue();
|
||||
static void getMaxRangeValues();
|
||||
|
||||
|
||||
@@ -73,18 +69,15 @@ void recGblDbaddrError(long status,struct dbAddr *paddr,char *pcaller_name)
|
||||
{
|
||||
char buffer[200];
|
||||
struct dbCommon *precord;
|
||||
int i,n;
|
||||
struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes);
|
||||
dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes);
|
||||
|
||||
buffer[0]=0;
|
||||
if(paddr) { /* print process variable name */
|
||||
precord=(struct dbCommon *)(paddr->precord);
|
||||
strcat(buffer,"PV: ");
|
||||
strncat(buffer,precord->name,PVNAME_SZ);
|
||||
n=strlen(buffer);
|
||||
for(i=n; (i>0 && buffer[i]==' '); i--) buffer[i]=0;
|
||||
strcat(buffer,precord->name);
|
||||
strcat(buffer,".");
|
||||
strncat(buffer,pfldDes->fldname,FLDNAME_SZ);
|
||||
strcat(buffer,pdbFldDes->name);
|
||||
strcat(buffer," ");
|
||||
}
|
||||
if(pcaller_name) {
|
||||
@@ -99,14 +92,11 @@ void recGblRecordError(long status,void *pdbc,char *pcaller_name)
|
||||
{
|
||||
struct dbCommon *precord = pdbc;
|
||||
char buffer[200];
|
||||
int i,n;
|
||||
|
||||
buffer[0]=0;
|
||||
if(precord) { /* print process variable name */
|
||||
strcat(buffer,"PV: ");
|
||||
strncat(buffer,precord->name,PVNAME_SZ);
|
||||
n=strlen(buffer);
|
||||
for(i=n; (i>0 && buffer[i]==' '); i--) buffer[i]=0;
|
||||
strcat(buffer,precord->name);
|
||||
strcat(buffer," ");
|
||||
}
|
||||
if(pcaller_name) {
|
||||
@@ -119,11 +109,10 @@ void recGblRecordError(long status,void *pdbc,char *pcaller_name)
|
||||
void recGblRecSupError(long status,struct dbAddr *paddr,char *pcaller_name,
|
||||
char *psupport_name)
|
||||
{
|
||||
char buffer[200];
|
||||
char *pstr;
|
||||
char buffer[200];
|
||||
struct dbCommon *precord;
|
||||
int i,n;
|
||||
struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes);
|
||||
dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes);
|
||||
dbRecDes *pdbRecDes = pdbFldDes->pdbRecDes;
|
||||
|
||||
buffer[0]=0;
|
||||
strcat(buffer,"Record Support Routine (");
|
||||
@@ -132,18 +121,13 @@ void recGblRecSupError(long status,struct dbAddr *paddr,char *pcaller_name,
|
||||
else
|
||||
strcat(buffer,"Unknown");
|
||||
strcat(buffer,") not available.\nRecord Type is ");
|
||||
if(pstr=GET_PRECNAME(pdbBase->precType,paddr->record_type))
|
||||
strcat(buffer,pstr);
|
||||
else
|
||||
strcat(buffer,"BAD");
|
||||
strcat(buffer,pdbRecDes->name);
|
||||
if(paddr) { /* print process variable name */
|
||||
precord=(struct dbCommon *)(paddr->precord);
|
||||
strcat(buffer,", PV is ");
|
||||
strncat(buffer,precord->name,PVNAME_SZ);
|
||||
n=strlen(buffer);
|
||||
for(i=n; (i>0 && buffer[i]==' '); i--) buffer[i]=0;
|
||||
strcat(buffer,precord->name);
|
||||
strcat(buffer,".");
|
||||
strncat(buffer,pfldDes->fldname,FLDNAME_SZ);
|
||||
strcat(buffer,pdbFldDes->name);
|
||||
strcat(buffer," ");
|
||||
}
|
||||
if(pcaller_name) {
|
||||
@@ -156,9 +140,9 @@ void recGblRecSupError(long status,struct dbAddr *paddr,char *pcaller_name,
|
||||
|
||||
void recGblGetPrec(struct dbAddr *paddr,long *precision)
|
||||
{
|
||||
struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes);
|
||||
dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes);
|
||||
|
||||
switch(pfldDes->field_type){
|
||||
switch(pdbFldDes->field_type){
|
||||
case(DBF_SHORT):
|
||||
*precision = 0;
|
||||
break;
|
||||
@@ -183,18 +167,10 @@ void recGblGetPrec(struct dbAddr *paddr,long *precision)
|
||||
|
||||
void recGblGetGraphicDouble(struct dbAddr *paddr,struct dbr_grDouble *pgd)
|
||||
{
|
||||
struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes);
|
||||
dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes);
|
||||
|
||||
/* get upper display limit */
|
||||
if(pfldDes->highfl==VAR) getVarRangeValue(paddr,pfldDes->range2.fldnum,&pgd->upper_disp_limit);
|
||||
else getConRangeValue(pfldDes->field_type,pfldDes->range2,&pgd->upper_disp_limit);
|
||||
|
||||
/* get lower display limit */
|
||||
if(pfldDes->lowfl==VAR) getVarRangeValue(paddr,pfldDes->range1.fldnum,&pgd->lower_disp_limit);
|
||||
else getConRangeValue(pfldDes->field_type,pfldDes->range1,&pgd->lower_disp_limit);
|
||||
|
||||
if(pgd->lower_disp_limit>=pgd->upper_disp_limit)
|
||||
getMaxRangeValues(pfldDes->field_type,&pgd->upper_disp_limit,&pgd->lower_disp_limit);
|
||||
getMaxRangeValues(pdbFldDes->field_type,&pgd->upper_disp_limit,
|
||||
&pgd->lower_disp_limit);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -211,22 +187,65 @@ void recGblGetAlarmDouble(struct dbAddr *paddr,struct dbr_alDouble *pad)
|
||||
|
||||
void recGblGetControlDouble(struct dbAddr *paddr,struct dbr_ctrlDouble *pcd)
|
||||
{
|
||||
struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes);
|
||||
dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes);
|
||||
|
||||
/* get upper control limit */
|
||||
if(pfldDes->highfl==VAR) getVarRangeValue(paddr,pfldDes->range2.fldnum,&pcd->upper_ctrl_limit);
|
||||
else getConRangeValue(pfldDes->field_type,pfldDes->range2,&pcd->upper_ctrl_limit);
|
||||
|
||||
/* get lower control limit */
|
||||
if(pfldDes->lowfl==VAR) getVarRangeValue(paddr,pfldDes->range1.fldnum,&pcd->lower_ctrl_limit);
|
||||
else getConRangeValue(pfldDes->field_type,pfldDes->range1,&pcd->lower_ctrl_limit);
|
||||
|
||||
if(pcd->lower_ctrl_limit>=pcd->upper_ctrl_limit)
|
||||
getMaxRangeValues(pfldDes->field_type,&pcd->upper_ctrl_limit,&pcd->lower_ctrl_limit);
|
||||
getMaxRangeValues(pdbFldDes->field_type,&pcd->upper_ctrl_limit,
|
||||
&pcd->lower_ctrl_limit);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int recGblInitConstantLink(struct link *plink,short dbftype,void *pdest)
|
||||
{
|
||||
if(!plink->value.constantStr) return(FALSE);
|
||||
switch(dbftype) {
|
||||
case DBF_STRING:
|
||||
strcpy((char *)pdest,plink->value.constantStr);
|
||||
break;
|
||||
case DBF_CHAR : {
|
||||
short value;
|
||||
char *pvalue = (char *)pdest;
|
||||
|
||||
sscanf(plink->value.constantStr,"%hd",&value);
|
||||
*pvalue = value;
|
||||
}
|
||||
break;
|
||||
case DBF_UCHAR : {
|
||||
unsigned short value;
|
||||
unsigned char *pvalue = (unsigned char *)pdest;
|
||||
|
||||
sscanf(plink->value.constantStr,"%hu",&value);
|
||||
*pvalue = value;
|
||||
}
|
||||
break;
|
||||
case DBF_SHORT :
|
||||
sscanf(plink->value.constantStr,"%hd",(short *)pdest);
|
||||
break;
|
||||
case DBF_USHORT :
|
||||
case DBF_ENUM :
|
||||
case DBF_MENU :
|
||||
case DBF_DEVICE :
|
||||
sscanf(plink->value.constantStr,"%hu",(unsigned short *)pdest);
|
||||
break;
|
||||
case DBF_LONG :
|
||||
sscanf(plink->value.constantStr,"%d",(long *)pdest);
|
||||
break;
|
||||
case DBF_ULONG :
|
||||
sscanf(plink->value.constantStr,"%u",(unsigned long *)pdest);
|
||||
break;
|
||||
case DBF_FLOAT :
|
||||
sscanf(plink->value.constantStr,"%f",(float *)pdest);
|
||||
break;
|
||||
case DBF_DOUBLE :
|
||||
sscanf(plink->value.constantStr,"%lf",(double *)pdest);
|
||||
break;
|
||||
default:
|
||||
epicsPrintf("Error in recGblInitConstantLink: Illegal DBF type\n");
|
||||
return(FALSE);
|
||||
}
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
long recGblGetLinkValue(struct link *plink,void *pdbc,short dbrType,
|
||||
void *pdest,long *poptions,long *pnRequest)
|
||||
{
|
||||
@@ -357,36 +376,6 @@ void recGblGetTimeStamp(void* prec)
|
||||
TSgetTimeStamp((int)pr->tse,(struct timespec*)&pr->time);
|
||||
}
|
||||
|
||||
|
||||
static void getConRangeValue(field_type,range,plimit)
|
||||
short field_type;
|
||||
struct range range;
|
||||
double *plimit;
|
||||
{
|
||||
*plimit=0.0;
|
||||
switch(field_type){
|
||||
case(DBF_SHORT):
|
||||
*plimit = (double)range.value.short_value;
|
||||
break;
|
||||
case(DBF_ENUM):
|
||||
case(DBF_USHORT):
|
||||
*plimit = (double)range.value.ushort_value;
|
||||
break;
|
||||
case(DBF_LONG):
|
||||
*plimit = (double)range.value.long_value;
|
||||
break;
|
||||
case(DBF_ULONG):
|
||||
*plimit = (double)range.value.ulong_value;
|
||||
break;
|
||||
case(DBF_FLOAT):
|
||||
*plimit = (double)range.value.float_value;
|
||||
break;
|
||||
case(DBF_DOUBLE):
|
||||
*plimit = (double)range.value.double_value;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static void getMaxRangeValues(field_type,pupper_limit,plower_limit)
|
||||
short field_type;
|
||||
@@ -424,63 +413,7 @@ static void getMaxRangeValues(field_type,pupper_limit,plower_limit)
|
||||
return;
|
||||
}
|
||||
|
||||
static void getVarRangeValue(paddr,fldnum,prangeValue)
|
||||
struct dbAddr *paddr;
|
||||
long fldnum;
|
||||
double *prangeValue;
|
||||
{
|
||||
short recType;
|
||||
struct recTypDes *precTypDes;
|
||||
struct dbAddr dbAddr;
|
||||
long nRequest,options;
|
||||
void *pfl=NULL;
|
||||
char name[PVNAME_SZ+FLDNAME_SZ+2];
|
||||
struct dbCommon *precord;
|
||||
int i,n;
|
||||
struct fldDes *pfldDes;
|
||||
long status;
|
||||
|
||||
*prangeValue=0;
|
||||
precord=(struct dbCommon *)(paddr->precord);
|
||||
recType=paddr->record_type;
|
||||
|
||||
if(!(precTypDes=GET_PRECTYPDES(pdbBase->precDes,recType))){
|
||||
recGblRecordError(S_sdr_noSdrType,(void *)precord,"getVarRangeValue(GET_PRECTYPDES)");
|
||||
return;
|
||||
}
|
||||
if(!(pfldDes=GET_PFLDDES(precTypDes,fldnum))){
|
||||
recGblRecordError(S_sdr_noSdrType,(void *)precord,"getVarRangeValue(GET_PFLDDES)");
|
||||
return;
|
||||
}
|
||||
/* get &dbAddr for range VAR field */
|
||||
name[PVNAME_SZ] = 0;
|
||||
strncpy(name,precord->name,PVNAME_SZ);
|
||||
n=strlen(name);
|
||||
for(i=n; (i>0 && name[i]==' '); i--) name[i]=0;
|
||||
strcat(name,".");
|
||||
strncat(name,pfldDes->fldname,FLDNAME_SZ);
|
||||
strcat(name,"\0");
|
||||
if (status=dbNameToAddr(name,&dbAddr)){
|
||||
recGblRecordError(status,(void *)precord,"getVarRangeValue(dbNameToAddr)");
|
||||
return;
|
||||
}
|
||||
|
||||
/* get value of range VAR field */
|
||||
options = 0;
|
||||
nRequest = 1;
|
||||
if(status=dbGet(&dbAddr,DBR_DOUBLE,prangeValue,&options,&nRequest,pfl)){
|
||||
recGblRecordError(status,(void *)precord,"getVarRangeValue(dbGet)");
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* Fast link initialization routines */
|
||||
/*
|
||||
* Get and Put conversion routine lookup tables
|
||||
*/
|
||||
extern long (*get_cvt_table[DBF_DEVCHOICE+1][DBR_ENUM+1])();
|
||||
extern long (*put_cvt_table[DBR_ENUM+1][DBF_DEVCHOICE+1])();
|
||||
|
||||
/*
|
||||
* String if bad database request type chosen
|
||||
@@ -520,7 +453,7 @@ long recGblInitFastInLink(
|
||||
* Check for legal conversion range...
|
||||
*/
|
||||
if ((pdb_addr->field_type < DBF_STRING) ||
|
||||
(pdb_addr->field_type > DBF_DEVCHOICE) ||
|
||||
(pdb_addr->field_type > DBF_DEVICE) ||
|
||||
( dbrType < DBR_STRING) ||
|
||||
( dbrType > DBR_ENUM)) {
|
||||
|
||||
@@ -532,7 +465,7 @@ long recGblInitFastInLink(
|
||||
/*
|
||||
* Lookup conversion function
|
||||
*/
|
||||
cvt_func = get_cvt_table[pdb_addr->field_type][dbrType];
|
||||
cvt_func = dbFastGetConvertRoutine[pdb_addr->field_type][dbrType];
|
||||
|
||||
if (cvt_func == NULL) {
|
||||
pdb_link->conversion = cvt_dummy;
|
||||
@@ -580,7 +513,7 @@ long recGblInitFastOutLink(
|
||||
* Check for legal conversion range...
|
||||
*/
|
||||
if ((pdb_addr->field_type < DBF_STRING) ||
|
||||
(pdb_addr->field_type > DBF_DEVCHOICE) ||
|
||||
(pdb_addr->field_type > DBF_DEVICE) ||
|
||||
( dbrType < DBR_STRING) ||
|
||||
( dbrType > DBR_ENUM)) {
|
||||
|
||||
@@ -591,7 +524,7 @@ long recGblInitFastOutLink(
|
||||
/*
|
||||
* Lookup conversion function
|
||||
*/
|
||||
cvt_func = put_cvt_table[dbrType][pdb_addr->field_type];
|
||||
cvt_func = dbFastPutConvertRoutine[dbrType][pdb_addr->field_type];
|
||||
|
||||
if (cvt_func == NULL) {
|
||||
pdb_link->conversion = cvt_dummy;
|
||||
|
||||
18
src/dbStatic/Makefile
Normal file
18
src/dbStatic/Makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Base: Lowest Level Directroy Makefile
|
||||
# by Janet Anderson
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.1 1994/09/07 19:26:01 jba
|
||||
# New file
|
||||
#
|
||||
#
|
||||
|
||||
EPICS=../../..
|
||||
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
include $(EPICS)/config/RULES_ARCHS
|
||||
|
||||
49
src/dbStatic/Makefile.Unix
Executable file
49
src/dbStatic/Makefile.Unix
Executable file
@@ -0,0 +1,49 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
USR_LDLIBS = -lDb -lCom -lm
|
||||
USR_LDFLAGS = -L.
|
||||
|
||||
#USR_CFLAGS = -v -g
|
||||
#CC = $(PURIFYHOME)/purify $(C_$(CMPLR))
|
||||
|
||||
|
||||
DEPLIBS_BASE = $(EPICS_BASE_LIB)
|
||||
DEPLIBS = ./libDb.a\
|
||||
$(DEPLIBS_BASE)/libCom.a
|
||||
|
||||
|
||||
SRCS.c = \
|
||||
dbAsciiYacc.c \
|
||||
../dbAsciiTest.c\
|
||||
../dbAsciiExpand.c\
|
||||
../dbPvdLib.c\
|
||||
../dbStaticNoRun.c\
|
||||
../dbStaticLib.c\
|
||||
../dbAsciiToMenuH.c\
|
||||
../dbAsciiToRecordtypeH.c
|
||||
|
||||
OBJS = \
|
||||
dbAsciiTest.o\
|
||||
dbAsciiExpand.o\
|
||||
dbAsciiToMenuH.o\
|
||||
dbAsciiToRecordtypeH.o
|
||||
|
||||
LIBOBJS = dbStaticLib.o dbAsciiYacc.o dbPvdLib.o dbStaticNoRun.o
|
||||
LIBNAME = libDb.a
|
||||
|
||||
PROD = \
|
||||
dbAsciiTest\
|
||||
dbAsciiExpand\
|
||||
dbAsciiToMenuH\
|
||||
dbAsciiToRecordtypeH
|
||||
|
||||
include $(EPICS)/config/RULES.Unix
|
||||
|
||||
# Extra rule since dbAsciiRoutines.c is included in dbAsciiYacc.c
|
||||
dbAsciiYacc.o: dbAsciiLex.c ../dbAsciiRoutines.c
|
||||
|
||||
clean::
|
||||
@$(RM) dbAsciiLex.c dbAsciiYacc.c
|
||||
|
||||
34
src/dbStatic/Makefile.Vx
Normal file
34
src/dbStatic/Makefile.Vx
Normal file
@@ -0,0 +1,34 @@
|
||||
EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
|
||||
USR_CFLAGS = -ansi
|
||||
VX_WARN_YES = -Wall -pedantic
|
||||
|
||||
SRCS.c = \
|
||||
dbAsciiYacc.c \
|
||||
../dbPvdLib.c\
|
||||
../dbStaticRun.c\
|
||||
../dbStaticLib.c
|
||||
|
||||
OBJSdbLib = \
|
||||
dbAsciiYacc.o\
|
||||
dbPvdLib.o\
|
||||
dbStaticRun.o\
|
||||
dbStaticLib.o
|
||||
|
||||
PROD = dbStaticLib
|
||||
|
||||
include $(EPICS)/config/RULES.Vx
|
||||
|
||||
# Extra rule since dbAsciiRoutines.c is included in dbAsciiYacc.c
|
||||
dbAsciiYacc.o: dbAsciiLex.c ../dbAsciiRoutines.c
|
||||
|
||||
clean::
|
||||
@$(RM) dbAsciiLex.c dbAsciiYacc.c
|
||||
|
||||
dbStaticLib: $(OBJSdbLib)
|
||||
$(RM) $@
|
||||
$(LINK.c) $@ $(OBJSdbLib) $(LDLIBS)
|
||||
|
||||
51
src/dbStatic/dbAsciiExpand.c
Normal file
51
src/dbStatic/dbAsciiExpand.c
Normal file
@@ -0,0 +1,51 @@
|
||||
/* dbAsciiExpand.c */
|
||||
/* Author: Marty Kraimer Date: 30NOV95 */
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
/* Modification Log:
|
||||
* -----------------
|
||||
* .01 30NOV95 mrk Initial Implementation
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
#include <dbBase.h>
|
||||
#include <gpHash.h>
|
||||
|
||||
DBBASE *pdbbase = NULL;
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
long status;
|
||||
int i;
|
||||
|
||||
if(argc<2) {
|
||||
printf("usage: dbAsciiExpand file1.ascii fi;e2.ascii ...\n");
|
||||
exit(0);
|
||||
}
|
||||
for(i=1; i<argc; i++) {
|
||||
status = dbAsciiRead(&pdbbase,argv[i]);
|
||||
if(!status) continue;
|
||||
epicsPrintf("For input file %s",argv[i]);
|
||||
errMessage(status,"from dbAsciiInitialize");
|
||||
}
|
||||
dbWriteMenu(pdbbase,0);
|
||||
dbWriteRecDes(pdbbase,0);
|
||||
dbWriteDevice(pdbbase);
|
||||
dbWriteDriver(pdbbase);
|
||||
return(0);
|
||||
}
|
||||
70
src/dbStatic/dbAsciiLex.l
Normal file
70
src/dbStatic/dbAsciiLex.l
Normal file
@@ -0,0 +1,70 @@
|
||||
name [a-zA-Z0-9_\-:\.\[\]<>;]
|
||||
string [a-zA-Z0-9_\,\./\*#\[\]%: ;!|\'\-&\(\)@\?\+<>=\$\t]
|
||||
|
||||
%{
|
||||
#undef YY_INPUT
|
||||
#define YY_INPUT(b,r,ms) (r=(*dbAscii_yyinput)(b,ms))
|
||||
|
||||
static int yyreset(void)
|
||||
{
|
||||
BEGIN INITIAL;
|
||||
return(0);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%%
|
||||
|
||||
"include" {return(tokenINCLUDE);}
|
||||
"path" {return(tokenPATH);}
|
||||
"menu" {return(tokenMENU);}
|
||||
"choice" {return(tokenCHOICE);}
|
||||
"recordtype" {return(tokenRECORDTYPE);}
|
||||
"field" {return(tokenFIELD);}
|
||||
"device" {return(tokenDEVICE);}
|
||||
"driver" {return(tokenDRIVER);}
|
||||
"breaktable" {return(tokenBREAKTABLE);}
|
||||
"record" {return(tokenRECORD);}
|
||||
|
||||
[0-9]+ { /*integer number*/
|
||||
yylval.Str = (char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(tokenSTRING);
|
||||
}
|
||||
|
||||
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { /*real number*/
|
||||
yylval.Str = (char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(tokenSTRING);
|
||||
}
|
||||
|
||||
|
||||
{name}+ { /*unquoted string*/
|
||||
yylval.Str = (char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext);
|
||||
return(tokenSTRING);
|
||||
}
|
||||
|
||||
\"{string}*\" { /*quoted string*/
|
||||
yylval.Str = (char *)malloc(strlen(yytext)+1);
|
||||
strcpy(yylval.Str,yytext+1);
|
||||
yylval.Str[strlen(yylval.Str)-1] = '\0';
|
||||
return(tokenSTRING);
|
||||
}
|
||||
|
||||
"{" { return(yytext[0]); }
|
||||
"}" { return(yytext[0]); }
|
||||
"(" { return(yytext[0]); }
|
||||
")" { return(yytext[0]); }
|
||||
"," { return(yytext[0]); }
|
||||
#.* { ;}
|
||||
[ \t\r] ;
|
||||
\n { ;}
|
||||
. {
|
||||
char message[20];
|
||||
|
||||
sprintf(message,"invalid character '%c'",yytext[0]);
|
||||
yyerror(message);
|
||||
}
|
||||
|
||||
%%
|
||||
840
src/dbStatic/dbAsciiRoutines.c
Normal file
840
src/dbStatic/dbAsciiRoutines.c
Normal file
@@ -0,0 +1,840 @@
|
||||
/* dbAsciiRoutines.c */
|
||||
/* Author: Marty Kraimer Date: 13JUL95*/
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
/*
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 13JUL95 mrk Initial Implementation
|
||||
*/
|
||||
|
||||
/*The routines in this module are serially reusable NOT reentrant*/
|
||||
|
||||
#ifdef vxWorks
|
||||
#include <vxWorks.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <dbFldTypes.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
#include <ellLib.h>
|
||||
#include <gpHash.h>
|
||||
#include <freeList.h>
|
||||
#include <guigroup.h>
|
||||
#include <special.h>
|
||||
#include <link.h>
|
||||
|
||||
/*private routines */
|
||||
static void yyerrorAbort(char *str);
|
||||
static void allocTemp(void *pvoid);
|
||||
static void *popFirstTemp(void);
|
||||
static void *getLastTemp(void);
|
||||
static int dbAscii_yyinput(char *buf,int max_size);
|
||||
static void dbAsciiIncludePrint(FILE *fp);
|
||||
static void dbAsciiPath(char *path);
|
||||
static void dbAsciiIncludeNew(char *include_file);
|
||||
static void dbAsciiMenuHead(char *name);
|
||||
static void dbAsciiMenuChoice(char *name,char *value);
|
||||
static void dbAsciiMenuBody(void);
|
||||
|
||||
static void dbAsciiRecordtypeHead(char *name);
|
||||
static void dbAsciiRecordtypeBody(void);
|
||||
static void dbAsciiRecordtypeFieldHead(char *name,char *type);
|
||||
static void dbAsciiRecordtypeFieldItem(char *name,char *value);
|
||||
|
||||
static void dbAsciiDevice(char *recordtype,char *linktype,
|
||||
char *dsetname,char *choicestring);
|
||||
static void dbAsciiDriver(char *name);
|
||||
|
||||
static void dbAsciiBreakHead(char *name);
|
||||
static void dbAsciiBreakItem(char *value);
|
||||
static void dbAsciiBreakBody(void);
|
||||
|
||||
static void dbAsciiRecordHead(char *rectype,char*name);
|
||||
static void dbAsciiRecordField(char *name,char *value);
|
||||
static void dbAsciiRecordBody(void);
|
||||
|
||||
/*private declarations*/
|
||||
static int firstTime = TRUE;
|
||||
#define MY_BUFFER_SIZE 1024
|
||||
static char *my_buffer=NULL;
|
||||
static char *my_buffer_ptr=NULL;
|
||||
typedef struct inputFile{
|
||||
ELLNODE node;
|
||||
char *path;
|
||||
char *filename;
|
||||
FILE *fp;
|
||||
int line_num;
|
||||
}inputFile;
|
||||
static ELLLIST inputFileList;
|
||||
|
||||
static inputFile *pinputFileNow = NULL;
|
||||
static DBBASE *pdbbase = NULL;
|
||||
|
||||
typedef struct tempListNode {
|
||||
ELLNODE node;
|
||||
void *item;
|
||||
}tempListNode;
|
||||
|
||||
static ELLLIST tempList;
|
||||
static void *freeListPvt = NULL;
|
||||
static int duplicate = FALSE;
|
||||
|
||||
static void yyerrorAbort(char *str)
|
||||
{
|
||||
yyerror(str);
|
||||
free((void *)my_buffer);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
static void allocTemp(void *pvoid)
|
||||
{
|
||||
tempListNode *ptempListNode;
|
||||
|
||||
ptempListNode = freeListCalloc(freeListPvt);
|
||||
ptempListNode->item = pvoid;
|
||||
ellAdd(&tempList,&ptempListNode->node);
|
||||
}
|
||||
|
||||
static void *popFirstTemp(void)
|
||||
{
|
||||
tempListNode *ptempListNode;
|
||||
void *ptemp;
|
||||
|
||||
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
||||
ptemp = ptempListNode->item;
|
||||
ellDelete(&tempList,(ELLNODE *)ptempListNode);
|
||||
freeListFree(freeListPvt,ptempListNode);
|
||||
return(ptemp);
|
||||
}
|
||||
|
||||
static void *getLastTemp(void)
|
||||
{
|
||||
tempListNode *ptempListNode;
|
||||
|
||||
ptempListNode = (tempListNode *)ellLast(&tempList);
|
||||
return(ptempListNode->item);
|
||||
}
|
||||
|
||||
static long dbAsciiReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp)
|
||||
{
|
||||
long status;
|
||||
inputFile *pinputFile;
|
||||
|
||||
my_buffer = dbCalloc(MY_BUFFER_SIZE,sizeof(char));
|
||||
if(firstTime) {
|
||||
ellInit(&inputFileList);
|
||||
ellInit(&tempList);
|
||||
freeListInitPvt(&freeListPvt,sizeof(tempListNode),5);
|
||||
firstTime = FALSE;
|
||||
}
|
||||
pinputFile = (inputFile *)ellLast(&inputFileList);
|
||||
while(pinputFile) {
|
||||
fclose(pinputFile->fp);
|
||||
free((void *)pinputFile->filename);
|
||||
free((void *)pinputFile->path);
|
||||
ellDelete(&inputFileList,(ELLNODE *)pinputFile);
|
||||
free((void *)pinputFile);
|
||||
pinputFile = (inputFile *)ellLast(&inputFileList);
|
||||
}
|
||||
pinputFile = dbCalloc(1,sizeof(inputFile));
|
||||
if(filename) {
|
||||
pinputFile->filename = dbCalloc(strlen(filename)+1,sizeof(char));
|
||||
strcpy(pinputFile->filename,filename);
|
||||
}
|
||||
if(!fp) {
|
||||
if(!filename || !(fp = fopen(filename,"r"))) {
|
||||
errPrintf(0,__FILE__, __LINE__,
|
||||
"dbAsciiRead opening file %s\n",filename);
|
||||
free((void *)pinputFile);
|
||||
free((void *)my_buffer);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
pinputFile->fp = fp;
|
||||
pinputFile->line_num = 0;
|
||||
pinputFileNow = pinputFile;
|
||||
my_buffer[0] = '\0';
|
||||
my_buffer_ptr = my_buffer;
|
||||
if(*ppdbbase) {
|
||||
pdbbase = *ppdbbase;
|
||||
} else {
|
||||
pdbbase = dbAllocBase();
|
||||
*ppdbbase = pdbbase;
|
||||
}
|
||||
ellAdd(&inputFileList,&pinputFile->node);
|
||||
status = pvt_yy_parse();
|
||||
if(status) {
|
||||
fprintf(stderr,"db_parse returned %d\n",status);
|
||||
}
|
||||
freeListCleanup(freeListPvt);
|
||||
free((void *)my_buffer);
|
||||
firstTime = TRUE;
|
||||
return(0);
|
||||
}
|
||||
|
||||
long dbAsciiRead(DBBASE **ppdbbase,const char *filename)
|
||||
{return (dbAsciiReadCOM(ppdbbase,filename,0));}
|
||||
|
||||
long dbAsciiReadFP(DBBASE **ppdbbase,FILE *fp)
|
||||
{return (dbAsciiReadCOM(ppdbbase,0,fp));}
|
||||
|
||||
static int dbAscii_yyinput(char *buf, int max_size)
|
||||
{
|
||||
int l,n;
|
||||
|
||||
if(*my_buffer_ptr==0) {
|
||||
while(fgets(my_buffer,MY_BUFFER_SIZE,pinputFileNow->fp)==NULL) {
|
||||
|
||||
if(fclose(pinputFileNow->fp))
|
||||
errPrintf(0,__FILE__, __LINE__,
|
||||
"Closing file %s\n",pinputFileNow->filename);
|
||||
free((void *)pinputFileNow->filename);
|
||||
free((void *)pinputFileNow->path);
|
||||
ellDelete(&inputFileList,(ELLNODE *)pinputFileNow);
|
||||
free((void *)pinputFileNow);
|
||||
pinputFileNow = (inputFile *)ellLast(&inputFileList);
|
||||
if(!pinputFileNow) return(0);
|
||||
}
|
||||
if(dbDebug) fprintf(stderr,"%s",my_buffer);
|
||||
pinputFileNow->line_num++;
|
||||
my_buffer_ptr = &my_buffer[0];
|
||||
}
|
||||
l = strlen(my_buffer_ptr);
|
||||
n = (l<=max_size ? l : max_size);
|
||||
memcpy(buf,my_buffer_ptr,n);
|
||||
my_buffer_ptr += n;
|
||||
return(n);
|
||||
}
|
||||
|
||||
static void dbAsciiIncludePrint(FILE *fp)
|
||||
{
|
||||
inputFile *pinputFile = pinputFileNow;
|
||||
|
||||
fprintf(fp,"input line: %s",my_buffer);
|
||||
while(pinputFile) {
|
||||
if(pinputFile->filename) {
|
||||
fprintf(fp," in file: ");
|
||||
if(pinputFile->path)
|
||||
fprintf(fp," path \"%s\"",pinputFile->path);
|
||||
fprintf(fp,"%s",pinputFile->filename);
|
||||
} else {
|
||||
fprintf(fp," stdin:");
|
||||
if(pinputFile->path)
|
||||
fprintf(fp," path \"%s\"",pinputFile->path);
|
||||
}
|
||||
fprintf(fp," line %d\n",pinputFile->line_num);
|
||||
pinputFile = (inputFile *)ellPrevious(&pinputFile->node);
|
||||
}
|
||||
fprintf(fp,"\n");
|
||||
return;
|
||||
}
|
||||
|
||||
static void dbAsciiPath(char *path)
|
||||
{
|
||||
pinputFileNow->path = path;
|
||||
}
|
||||
|
||||
static void dbAsciiIncludeNew(char *filename)
|
||||
{
|
||||
inputFile *newfile;
|
||||
inputFile *pinputFile;
|
||||
inputFile *pinputFileFirst;
|
||||
FILE *fp;
|
||||
char *currentPath;
|
||||
char *newCurrentPath;
|
||||
int lenPathAndFilename = 0;
|
||||
int lenstr;
|
||||
|
||||
newfile = dbCalloc(1,sizeof(inputFile));
|
||||
newfile->filename = dbCalloc(strlen(filename)+1,sizeof(char));
|
||||
strcpy(newfile->filename,filename);
|
||||
/*search backward for first path starting with / */
|
||||
pinputFile = (inputFile *)ellLast(&inputFileList);
|
||||
while(pinputFile) {
|
||||
if(pinputFile->path) {
|
||||
if(pinputFile->path[0]=='/') break;
|
||||
}
|
||||
pinputFile = (inputFile *)ellPrevious(&pinputFile->node);
|
||||
}
|
||||
if(!pinputFile) pinputFile=(inputFile *)ellFirst(&inputFileList);
|
||||
pinputFileFirst = pinputFile;
|
||||
while(pinputFile) {
|
||||
if(pinputFile->path) {
|
||||
lenstr = strlen(pinputFile->path);
|
||||
lenPathAndFilename += lenstr;
|
||||
if(pinputFile->path[lenstr-1] != '/') lenPathAndFilename++;
|
||||
}
|
||||
pinputFile = (inputFile *)ellNext(&pinputFile->node);
|
||||
}
|
||||
lenPathAndFilename += strlen(filename) + 1;
|
||||
currentPath = dbCalloc(lenPathAndFilename,sizeof(char));
|
||||
pinputFile = pinputFileFirst;
|
||||
while(pinputFile) {
|
||||
if(pinputFile->path) {
|
||||
strcat(currentPath,pinputFile->path);
|
||||
lenstr = strlen(pinputFile->path);
|
||||
if(pinputFile->path[lenstr-1] != '/') strcat(currentPath,"/");
|
||||
}
|
||||
pinputFile = (inputFile *)ellNext(&pinputFile->node);
|
||||
}
|
||||
strcat(currentPath,filename);
|
||||
fp = fopen(currentPath,"r");
|
||||
if(!fp) { /*Try preceeding path with ./rec */
|
||||
newCurrentPath = dbCalloc(
|
||||
(strlen("./rec/") + strlen(currentPath) + 1),sizeof(char));
|
||||
strcpy(newCurrentPath,"./rec/");
|
||||
strcat(newCurrentPath,currentPath);
|
||||
fp = fopen(newCurrentPath,"r");
|
||||
free((void *)newCurrentPath);
|
||||
}
|
||||
if(!fp) { /*Try preceeding path with ./base/rec */
|
||||
newCurrentPath = dbCalloc(
|
||||
(strlen("./base/rec/") + strlen(currentPath) + 1),sizeof(char));
|
||||
strcpy(newCurrentPath,"./base/rec/");
|
||||
strcat(newCurrentPath,currentPath);
|
||||
fp = fopen(newCurrentPath,"r");
|
||||
free((void *)newCurrentPath);
|
||||
}
|
||||
if(!fp) {
|
||||
errPrintf(0,__FILE__, __LINE__,
|
||||
"dbAsciiIncludeNew opening file %s\n",currentPath);
|
||||
yyerror(NULL);
|
||||
free((void *)filename);
|
||||
free((void *)newfile);
|
||||
return;
|
||||
}
|
||||
free((void *)currentPath);
|
||||
free((void *)filename);
|
||||
newfile->fp = fp;
|
||||
ellAdd(&inputFileList,&newfile->node);
|
||||
pinputFileNow = newfile;
|
||||
}
|
||||
|
||||
static void dbAsciiMenuHead(char *name)
|
||||
{
|
||||
dbMenu *pdbMenu;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->menuList);
|
||||
if(pgphentry) {
|
||||
yyerror("Duplicate menu ignored");
|
||||
duplicate = TRUE;
|
||||
}
|
||||
pdbMenu = dbCalloc(1,sizeof(dbMenu));
|
||||
pdbMenu->name = name;
|
||||
if(ellCount(&tempList)) yyerrorAbort("dbAsciiMenuHead: tempList not empty");
|
||||
allocTemp(pdbMenu);
|
||||
}
|
||||
|
||||
static void dbAsciiMenuChoice(char *name,char *value)
|
||||
{
|
||||
if(duplicate) {
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
allocTemp(name);
|
||||
allocTemp(value);
|
||||
}
|
||||
|
||||
static void dbAsciiMenuBody(void)
|
||||
{
|
||||
dbMenu *pnewMenu;
|
||||
dbMenu *pMenu;
|
||||
int nChoice;
|
||||
int i;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
if(duplicate) {
|
||||
duplicate = FALSE;
|
||||
return;
|
||||
}
|
||||
pnewMenu = (dbMenu *)popFirstTemp();
|
||||
pnewMenu->nChoice = nChoice = ellCount(&tempList)/2;
|
||||
pnewMenu->papChoiceName = dbCalloc(pnewMenu->nChoice,sizeof(char *));
|
||||
pnewMenu->papChoiceValue = dbCalloc(pnewMenu->nChoice,sizeof(char *));
|
||||
for(i=0; i<nChoice; i++) {
|
||||
pnewMenu->papChoiceName[i] = (char *)popFirstTemp();
|
||||
pnewMenu->papChoiceValue[i] = (char *)popFirstTemp();
|
||||
}
|
||||
if(ellCount(&tempList)) yyerrorAbort("dbAsciiMenuBody: tempList not empty");
|
||||
/* Add menu in sorted order */
|
||||
pMenu = (dbMenu *)ellFirst(&pdbbase->menuList);
|
||||
while(pMenu && strcmp(pMenu->name,pnewMenu->name) >0 )
|
||||
pMenu = (dbMenu *)ellNext(&pMenu->node);
|
||||
if(pMenu)
|
||||
ellInsert(&pdbbase->menuList,ellPrevious(&pMenu->node),&pnewMenu->node);
|
||||
else
|
||||
ellAdd(&pdbbase->menuList,&pnewMenu->node);
|
||||
pgphentry = gphAdd(pdbbase->pgpHash,pnewMenu->name,&pdbbase->menuList);
|
||||
if(!pgphentry) {
|
||||
yyerrorAbort("gphAdd failed");
|
||||
} else {
|
||||
pgphentry->userPvt = pnewMenu;
|
||||
}
|
||||
}
|
||||
|
||||
static void dbAsciiRecordtypeHead(char *name)
|
||||
{
|
||||
dbRecDes *pdbRecDes;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->recDesList);
|
||||
if(pgphentry) {
|
||||
yyerror("Duplicate recordtype ignored");
|
||||
duplicate = TRUE;
|
||||
}
|
||||
pdbRecDes = dbCalloc(1,sizeof(dbRecDes));
|
||||
pdbRecDes->name = name;
|
||||
if(ellCount(&tempList))
|
||||
yyerrorAbort("dbAsciiRecordtypeHead tempList not empty");
|
||||
allocTemp(pdbRecDes);
|
||||
}
|
||||
|
||||
static void dbAsciiRecordtypeFieldHead(char *name,char *type)
|
||||
{
|
||||
dbFldDes *pdbFldDes;
|
||||
int i;
|
||||
|
||||
if(duplicate) {
|
||||
free((void *)name);
|
||||
free((void *)type);
|
||||
return;
|
||||
}
|
||||
pdbFldDes = dbCalloc(1,sizeof(dbFldDes));
|
||||
allocTemp(pdbFldDes);
|
||||
pdbFldDes->name = name;
|
||||
pdbFldDes->as_level = ASL1;
|
||||
for(i=0; i<DBF_NTYPES; i++) {
|
||||
if(strcmp(type,pamapdbfType[i].strvalue)==0) {
|
||||
pdbFldDes->field_type = pamapdbfType[i].value;
|
||||
free((void *)type);
|
||||
return;
|
||||
}
|
||||
}
|
||||
free((void *)type);
|
||||
yyerrorAbort("Illegal Field Type");
|
||||
}
|
||||
|
||||
static void dbAsciiRecordtypeFieldItem(char *name,char *value)
|
||||
{
|
||||
dbFldDes *pdbFldDes;
|
||||
|
||||
if(duplicate) {
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
pdbFldDes = (dbFldDes *)getLastTemp();
|
||||
if(strcmp(name,"asl")==0) {
|
||||
if(strcmp(value,"ASL0")==0) {
|
||||
pdbFldDes->as_level = ASL0;
|
||||
} else if(strcmp(value,"ASL1")==0) {
|
||||
pdbFldDes->as_level = ASL1;
|
||||
} else {
|
||||
yyerror("Illegal Access Security value: Must be ASL0 or ASL1");
|
||||
}
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"initial")==0) {
|
||||
pdbFldDes->initial = value;
|
||||
free((void *)name);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"promptgroup")==0) {
|
||||
int i;
|
||||
for(i=0; i<GUI_NTYPES; i++) {
|
||||
if(strcmp(value,pamapguiGroup[i].strvalue)==0) {
|
||||
pdbFldDes->promptgroup = pamapguiGroup[i].value;
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
yyerror("Illegal promptgroup. See guigroup.h for legal values");
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"prompt")==0) {
|
||||
pdbFldDes->prompt = value;
|
||||
free((void *)name);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"special")==0) {
|
||||
int i;
|
||||
for(i=0; i<SPC_NTYPES; i++) {
|
||||
if(strcmp(value,pamapspcType[i].strvalue)==0) {
|
||||
pdbFldDes->special = pamapspcType[i].value;
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(sscanf(value,"%hd",&pdbFldDes->special)==1) {
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
yyerror("Illegal promptgroup. See guigroup.h for legal values");
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"pp")==0) {
|
||||
if((strcmp(value,"YES")==0) || (strcmp(value,"TRUE")==0)) {
|
||||
pdbFldDes->process_passive = TRUE;
|
||||
} else if((strcmp(value,"NO")==0) || (strcmp(value,"FALSE")==0)) {
|
||||
pdbFldDes->process_passive = FALSE;
|
||||
} else {
|
||||
yyerror("Illegal value. Must be NO or YES");
|
||||
}
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"interest")==0) {
|
||||
if(sscanf(value,"%hd",&pdbFldDes->interest)!=1)
|
||||
yyerror("Illegal value. Must be integer");
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"base")==0) {
|
||||
if(strcmp(value,"DECIMAL")==0) {
|
||||
pdbFldDes->base = CT_DECIMAL;
|
||||
} else if(strcmp(value,"HEX")==0) {
|
||||
pdbFldDes->base = CT_HEX;
|
||||
} else {
|
||||
yyerror("Illegal value. Must be CT_DECIMAL or CT_HEX");
|
||||
}
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"size")==0) {
|
||||
if(sscanf(value,"%hd",&pdbFldDes->size)!=1)
|
||||
yyerror("Illegal value. Must be integer");
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"extra")==0) {
|
||||
pdbFldDes->extra = value;
|
||||
free((void *)name);
|
||||
return;
|
||||
}
|
||||
if(strcmp(name,"menu")==0) {
|
||||
pdbFldDes->ftPvt = (dbMenu *)dbFindMenu(pdbbase,value);
|
||||
if(!pdbbase->ignoreMissingMenus && !pdbFldDes->ftPvt)
|
||||
yyerrorAbort("menu not found");
|
||||
free((void *)name);
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void dbAsciiRecordtypeBody(void)
|
||||
{
|
||||
dbRecDes *pdbRecDes;
|
||||
dbFldDes *pdbFldDes;
|
||||
int i,j,ilink;
|
||||
GPHENTRY *pgphentry;
|
||||
int no_fields,no_prompt,no_links;
|
||||
dbfType field_type;
|
||||
char *psortFldNameTemp;
|
||||
short psortFldIndTemp;
|
||||
char **papsortFldName;
|
||||
short *sortFldInd;
|
||||
|
||||
if(duplicate) {
|
||||
duplicate = FALSE;
|
||||
return;
|
||||
}
|
||||
pdbRecDes= (dbRecDes *)popFirstTemp();
|
||||
pdbRecDes->no_fields = no_fields = ellCount(&tempList);
|
||||
pdbRecDes->papFldDes = dbCalloc(no_fields,sizeof(dbFldDes *));
|
||||
pdbRecDes->papsortFldName = dbCalloc(no_fields,sizeof(char *));
|
||||
pdbRecDes->sortFldInd = dbCalloc(no_fields,sizeof(short));
|
||||
no_prompt = no_links = 0;
|
||||
for(i=0; i<no_fields; i++) {
|
||||
pdbFldDes = (dbFldDes *)popFirstTemp();
|
||||
pdbFldDes->pdbRecDes = pdbRecDes;
|
||||
pdbFldDes->indRecDes = i;
|
||||
pdbRecDes->papFldDes[i] = pdbFldDes;
|
||||
if(pdbFldDes->promptgroup) no_prompt++;
|
||||
field_type = pdbFldDes->field_type;
|
||||
if((field_type>=DBF_INLINK) && (field_type<=DBF_FWDLINK))no_links++;
|
||||
if((field_type==DBF_STRING) && (pdbFldDes->size==0))
|
||||
fprintf(stderr,"recordtype(%s).%s size not specified\n",
|
||||
pdbRecDes->name,pdbFldDes->name);
|
||||
if((field_type==DBF_NOACCESS) && (pdbFldDes->extra==0))
|
||||
fprintf(stderr,"recordtype(%s).%s extra not specified\n",
|
||||
pdbRecDes->name,pdbFldDes->name);
|
||||
}
|
||||
if(ellCount(&tempList)) yyerrorAbort("dbAsciiMenuBody: tempList not empty");
|
||||
pdbRecDes->no_prompt = no_prompt;
|
||||
pdbRecDes->no_links = no_links;
|
||||
pdbRecDes->link_ind = dbCalloc(no_prompt,sizeof(short));
|
||||
ilink = 0;
|
||||
for(i=0; i<no_fields; i++) {
|
||||
pdbFldDes = pdbRecDes->papFldDes[i];
|
||||
field_type = pdbFldDes->field_type;
|
||||
if((field_type>=DBF_INLINK) && (field_type<=DBF_FWDLINK))
|
||||
pdbRecDes->link_ind[ilink++] = i;
|
||||
if(strcmp(pdbFldDes->name,"VAL")==0) {
|
||||
pdbRecDes->pvalFldDes = pdbRecDes->papFldDes[i];
|
||||
pdbRecDes->indvalFlddes = i;
|
||||
}
|
||||
pdbRecDes->papsortFldName[i] = pdbFldDes->name;
|
||||
pdbRecDes->sortFldInd[i] = i;
|
||||
}
|
||||
/*Now sort fields. Sorry dumb sort algorithm */
|
||||
papsortFldName = pdbRecDes->papsortFldName;
|
||||
sortFldInd = pdbRecDes->sortFldInd;
|
||||
for(i=0; i<no_fields; i++) {
|
||||
for(j=i+1; j<no_fields; j++) {
|
||||
if(strcmp(papsortFldName[j],papsortFldName[i])<0 ) {
|
||||
psortFldNameTemp = papsortFldName[j];
|
||||
psortFldIndTemp = sortFldInd[j];
|
||||
papsortFldName[j] = papsortFldName[i];
|
||||
sortFldInd[j] = sortFldInd[i];
|
||||
papsortFldName[i] = psortFldNameTemp;
|
||||
sortFldInd[i] = psortFldIndTemp;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*Initialize lists*/
|
||||
ellInit(&pdbRecDes->recList);
|
||||
ellInit(&pdbRecDes->devList);
|
||||
pgphentry = gphAdd(pdbbase->pgpHash,pdbRecDes->name,&pdbbase->recDesList);
|
||||
if(!pgphentry) {
|
||||
yyerrorAbort("gphAdd failed");
|
||||
} else {
|
||||
pgphentry->userPvt = pdbRecDes;
|
||||
}
|
||||
ellAdd(&pdbbase->recDesList,&pdbRecDes->node);
|
||||
dbGetRecordtypeSizeOffset(pdbRecDes);
|
||||
}
|
||||
|
||||
static void dbAsciiDevice(char *recordtype,char *linktype,
|
||||
char *dsetname,char *choicestring)
|
||||
{
|
||||
devSup *pdevSup;
|
||||
dbRecDes *pdbRecDes;
|
||||
GPHENTRY *pgphentry;
|
||||
int i,link_type;
|
||||
|
||||
pgphentry = gphFind(pdbbase->pgpHash,recordtype,&pdbbase->recDesList);
|
||||
if(!pgphentry) {
|
||||
yyerror(" record type not found");
|
||||
return;
|
||||
}
|
||||
free(recordtype);
|
||||
link_type=-1;
|
||||
for(i=0; i<LINK_NTYPES; i++) {
|
||||
if(strcmp(pamaplinkType[i].strvalue,linktype)==0) {
|
||||
link_type = pamaplinkType[i].value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(linktype);
|
||||
if(link_type==-1) {
|
||||
yyerror("Illegal link type");
|
||||
return;
|
||||
}
|
||||
pdbRecDes = (dbRecDes *)pgphentry->userPvt;
|
||||
pgphentry = gphFind(pdbbase->pgpHash,choicestring,&pdbRecDes->devList);
|
||||
if(pgphentry) {
|
||||
yyerror("Duplicate Device Support ignored");
|
||||
free((void *)dsetname);
|
||||
free((void *)choicestring);
|
||||
return;
|
||||
}
|
||||
pdevSup = dbCalloc(1,sizeof(devSup));
|
||||
pdevSup->name = dsetname;
|
||||
pdevSup->choice = choicestring;
|
||||
pdevSup->link_type = link_type;
|
||||
pgphentry = gphAdd(pdbbase->pgpHash,choicestring,&pdbRecDes->devList);
|
||||
if(!pgphentry) {
|
||||
yyerror("gphAdd failed");
|
||||
} else {
|
||||
pgphentry->userPvt = pdevSup;
|
||||
}
|
||||
ellAdd(&pdbRecDes->devList,&pdevSup->node);
|
||||
}
|
||||
|
||||
static void dbAsciiDriver(char *name)
|
||||
{
|
||||
drvSup *pdrvSup;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->drvList);
|
||||
if(pgphentry) {
|
||||
yyerror("Duplicate driver ignored");
|
||||
return;
|
||||
}
|
||||
pdrvSup = dbCalloc(1,sizeof(drvSup));
|
||||
pdrvSup->name = name;
|
||||
pgphentry = gphAdd(pdbbase->pgpHash,name,&pdbbase->drvList);
|
||||
if(!pgphentry) {
|
||||
yyerrorAbort("gphAdd failed");
|
||||
}
|
||||
pgphentry->userPvt = pdrvSup;
|
||||
ellAdd(&pdbbase->drvList,&pdrvSup->node);
|
||||
}
|
||||
|
||||
static void dbAsciiBreakHead(char *name)
|
||||
{
|
||||
brkTable *pbrkTable;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
pgphentry = gphFind(pdbbase->pgpHash,name,&pdbbase->bptList);
|
||||
if(pgphentry) {
|
||||
yyerror("Duplicate breakpoint table ignored");
|
||||
duplicate = TRUE;
|
||||
}
|
||||
pbrkTable = dbCalloc(1,sizeof(brkTable));
|
||||
pbrkTable->name = name;
|
||||
if(ellCount(&tempList)) yyerrorAbort("dbAsciiBreakHead:tempList not empty"); allocTemp(pbrkTable);
|
||||
}
|
||||
|
||||
static void dbAsciiBreakItem(char *value)
|
||||
{
|
||||
if(duplicate) {
|
||||
free((void *)value);
|
||||
return;
|
||||
}
|
||||
allocTemp(value);
|
||||
}
|
||||
|
||||
static void dbAsciiBreakBody(void)
|
||||
{
|
||||
brkTable *pnewbrkTable;
|
||||
brkTable *pbrkTable;
|
||||
int number;
|
||||
int i,choice;
|
||||
GPHENTRY *pgphentry;
|
||||
|
||||
if(duplicate) {
|
||||
duplicate = FALSE;
|
||||
return;
|
||||
}
|
||||
pnewbrkTable = (brkTable *)popFirstTemp();
|
||||
pnewbrkTable->number = number = ellCount(&tempList)/2;
|
||||
if(number*2 != ellCount(&tempList))
|
||||
yyerrorAbort("dbAsciiBreakBody: Odd number of values");
|
||||
pnewbrkTable->papBrkInt = dbCalloc(number,sizeof(brkInt));
|
||||
for(i=0; i<number; i++) {
|
||||
double raw,eng;
|
||||
char *praw;
|
||||
char *peng;
|
||||
|
||||
praw = (char *)popFirstTemp();
|
||||
peng = (char *)popFirstTemp();
|
||||
if((sscanf(praw,"%lf",&raw)!=1) || (sscanf(peng,"%lf",&eng)!=1) ) {
|
||||
yyerrorAbort("dbAsciibrkTable: Illegal table value");
|
||||
}
|
||||
free((void *)praw);
|
||||
free((void *)peng);
|
||||
pnewbrkTable->papBrkInt[i] = dbCalloc(1,sizeof(brkInt));
|
||||
pnewbrkTable->papBrkInt[i]->raw = raw;
|
||||
pnewbrkTable->papBrkInt[i]->eng = eng;
|
||||
}
|
||||
/* Compute slopes */
|
||||
for(i=0; i<number-1; i++) {
|
||||
pnewbrkTable->papBrkInt[i]->slope =
|
||||
(pnewbrkTable->papBrkInt[i+1]->eng - pnewbrkTable->papBrkInt[i]->eng)/
|
||||
(pnewbrkTable->papBrkInt[i+1]->raw - pnewbrkTable->papBrkInt[i]->raw);
|
||||
}
|
||||
/* Add brkTable in sorted order */
|
||||
pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList);
|
||||
while(pbrkTable) {
|
||||
choice = strcmp(pbrkTable->name,pnewbrkTable->name);
|
||||
if(choice==0) {
|
||||
ellInsert(&pdbbase->bptList,ellPrevious((ELLNODE *)pbrkTable),
|
||||
(ELLNODE *)pnewbrkTable);
|
||||
gphDelete(pdbbase->pgpHash,pbrkTable->name,&pdbbase->bptList);
|
||||
ellDelete(&pdbbase->bptList,(ELLNODE *)pbrkTable);
|
||||
break;
|
||||
} else if(choice>0) {
|
||||
ellInsert(&pdbbase->bptList,ellPrevious((ELLNODE *)pbrkTable),
|
||||
(ELLNODE *)pnewbrkTable);
|
||||
break;
|
||||
}
|
||||
pbrkTable = (brkTable *)ellNext(&pbrkTable->node);
|
||||
}
|
||||
pgphentry = gphAdd(pdbbase->pgpHash,pnewbrkTable->name,&pdbbase->bptList);
|
||||
if(!pgphentry) {
|
||||
yyerrorAbort("gphAdd failed");
|
||||
} else {
|
||||
pgphentry->userPvt = pnewbrkTable;
|
||||
}
|
||||
if(!pbrkTable) ellAdd(&pdbbase->bptList,&pnewbrkTable->node);
|
||||
}
|
||||
|
||||
static void dbAsciiRecordHead(char *rectype,char *name)
|
||||
{
|
||||
DBENTRY *pdbentry;
|
||||
long status;
|
||||
|
||||
pdbentry = dbAllocEntry(pdbbase);
|
||||
if(ellCount(&tempList))
|
||||
yyerrorAbort("dbAsciiRecordHead: tempList not empty");
|
||||
allocTemp(pdbentry);
|
||||
status = dbFindRecdes(pdbentry,rectype);
|
||||
if(status) {
|
||||
errMessage(status,"");
|
||||
yyerrorAbort(NULL);
|
||||
return;
|
||||
}
|
||||
/*Duplicate records ok. Thus dont check return status.*/
|
||||
dbCreateRecord(pdbentry,name);
|
||||
}
|
||||
|
||||
static void dbAsciiRecordField(char *name,char *value)
|
||||
{
|
||||
DBENTRY *pdbentry;
|
||||
tempListNode *ptempListNode;
|
||||
long status;
|
||||
|
||||
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
||||
pdbentry = ptempListNode->item;
|
||||
status = dbFindField(pdbentry,name);
|
||||
if(status) {
|
||||
errMessage(status,"");
|
||||
yyerror(NULL);
|
||||
return;
|
||||
}
|
||||
status = dbPutString(pdbentry,value);
|
||||
if(status) {
|
||||
errMessage(status,"");
|
||||
yyerror(NULL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void dbAsciiRecordBody(void)
|
||||
{
|
||||
DBENTRY *pdbentry;
|
||||
|
||||
pdbentry = (DBENTRY *)popFirstTemp();
|
||||
if(ellCount(&tempList))
|
||||
yyerrorAbort("dbAsciiRecordBody: tempList not empty");
|
||||
dbFreeEntry(pdbentry);
|
||||
}
|
||||
56
src/dbStatic/dbAsciiTest.c
Normal file
56
src/dbStatic/dbAsciiTest.c
Normal file
@@ -0,0 +1,56 @@
|
||||
/* asciiTest.c */
|
||||
/* Author: Marty Kraimer Date: 13JUL95 */
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
/* Modification Log:
|
||||
* -----------------
|
||||
* .01 13JUL95 mrk Initial Implementation
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
#include <dbBase.h>
|
||||
#include <gpHash.h>
|
||||
|
||||
DBBASE *pdbbase = NULL;
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
long status;
|
||||
int i;
|
||||
|
||||
if(argc<2) {
|
||||
printf("usage: dbAsciiTest file1.ascii fi;e2.ascii ...\n");
|
||||
exit(0);
|
||||
}
|
||||
for(i=1; i<argc; i++) {
|
||||
status = dbAsciiRead(&pdbbase,argv[i]);
|
||||
if(!status) continue;
|
||||
epicsPrintf("For input file %s",argv[i]);
|
||||
errMessage(status,"from dbAsciiInitialize");
|
||||
}
|
||||
/*
|
||||
dbDumpRecDes(pdbbase,"ai");
|
||||
dbDumpRecDes(pdbbase,NULL);
|
||||
dbPvdDump(pdbbase);
|
||||
gphDump(pdbbase->pgpHash);
|
||||
dbDumpMenu(pdbbase,NULL);
|
||||
dbDumpRecords(pdbbase,NULL,0);
|
||||
*/
|
||||
dbFreeBase(pdbbase);
|
||||
return(0);
|
||||
}
|
||||
83
src/dbStatic/dbAsciiToMenuH.c
Normal file
83
src/dbStatic/dbAsciiToMenuH.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/* dbAsciiToMenuH.c */
|
||||
/* Author: Marty Kraimer Date: 11Sep95 */
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
/* Modification Log:
|
||||
* -----------------
|
||||
* .01 11Sep95 mrk Initial Implementation
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
#include <dbBase.h>
|
||||
#include <gpHash.h>
|
||||
|
||||
DBBASE *pdbbase = NULL;
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
long status;
|
||||
dbMenu *pdbMenu;
|
||||
char *outFilename;
|
||||
char *pext;
|
||||
FILE *outFile;
|
||||
int i;
|
||||
char *plastSlash;
|
||||
|
||||
if(argc!=2) {
|
||||
fprintf(stderr,"usage: dbAsciiToMenuH file.ascii\n");
|
||||
exit(-1);
|
||||
}
|
||||
/*remove path so that outFile is created where program is executed*/
|
||||
plastSlash = strrchr(argv[1],'/');
|
||||
plastSlash = (plastSlash ? plastSlash+1 : argv[1]);
|
||||
outFilename = dbCalloc(1,strlen(plastSlash)+1);
|
||||
strcpy(outFilename,plastSlash);
|
||||
pext = strstr(outFilename,".ascii");
|
||||
if(!pext) {
|
||||
fprintf(stderr,"Input file MUST have .ascii extension\n");
|
||||
exit(-1);
|
||||
}
|
||||
strcpy(pext,".h");
|
||||
outFile = fopen(outFilename,"w");
|
||||
if(!outFile) {
|
||||
errPrintf(0,__FILE__,__LINE__,"Error opening %s\n",outFilename);
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase = dbAllocBase();
|
||||
pdbbase->ignoreMissingMenus = TRUE;
|
||||
status = dbAsciiRead(&pdbbase,argv[1]);
|
||||
if(status) {
|
||||
epicsPrintf("Terminal error For input file %s\n",argv[1]);
|
||||
exit(-1);
|
||||
}
|
||||
pdbMenu = (dbMenu *)ellFirst(&pdbbase->menuList);
|
||||
while(pdbMenu) {
|
||||
fprintf(outFile,"#ifndef INC%sH\n",pdbMenu->name);
|
||||
fprintf(outFile,"#define INC%sH\n",pdbMenu->name);
|
||||
fprintf(outFile,"typedef enum {\n");
|
||||
for(i=0; i<pdbMenu->nChoice; i++) {
|
||||
fprintf(outFile,"\t%s,\n",pdbMenu->papChoiceName[i]);
|
||||
}
|
||||
fprintf(outFile,"}%s;\n",pdbMenu->name);
|
||||
fprintf(outFile,"#endif /*INC%sH*/\n",pdbMenu->name);
|
||||
pdbMenu = (dbMenu *)ellNext(&pdbMenu->node);
|
||||
}
|
||||
fclose(outFile);
|
||||
free((void *)outFilename);
|
||||
return(0);
|
||||
}
|
||||
211
src/dbStatic/dbAsciiToRecordtypeH.c
Normal file
211
src/dbStatic/dbAsciiToRecordtypeH.c
Normal file
@@ -0,0 +1,211 @@
|
||||
/* dbAsciiToRecordtypeH.c */
|
||||
/* Author: Marty Kraimer Date: 11Sep95 */
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
/* Modification Log:
|
||||
* -----------------
|
||||
* .01 11Sep95 mrk Initial Implementation
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
#include <dbBase.h>
|
||||
#include <gpHash.h>
|
||||
|
||||
DBBASE *pdbbase = NULL;
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
long status;
|
||||
char *outFilename;
|
||||
char *pext;
|
||||
FILE *outFile;
|
||||
int i;
|
||||
dbMenu *pdbMenu;
|
||||
dbRecDes *pdbRecDes;
|
||||
dbFldDes *pdbFldDes;
|
||||
int isdbCommonRecord = FALSE;
|
||||
char *plastSlash;
|
||||
|
||||
if(argc!=2) {
|
||||
fprintf(stderr,"usage: dbAsciiToMenuH file.ascii\n");
|
||||
exit(-1);
|
||||
}
|
||||
/*remove path so that outFile is created where program is executed*/
|
||||
plastSlash = strrchr(argv[1],'/');
|
||||
plastSlash = (plastSlash ? plastSlash+1 : argv[1]);
|
||||
outFilename = dbCalloc(1,strlen(plastSlash)+1);
|
||||
strcpy(outFilename,plastSlash);
|
||||
pext = strstr(outFilename,".ascii");
|
||||
if(!pext) {
|
||||
fprintf(stderr,"Input file MUST have .ascii extension\n");
|
||||
exit(-1);
|
||||
}
|
||||
strcpy(pext,".h");
|
||||
if(strcmp(outFilename,"dbCommonRecord.h")==0) {
|
||||
strcpy(outFilename,"dbCommon.h");
|
||||
isdbCommonRecord = TRUE;
|
||||
}
|
||||
outFile = fopen(outFilename,"w");
|
||||
if(!outFile) {
|
||||
errPrintf(0,__FILE__,__LINE__,"Error opening %s\n",outFilename);
|
||||
exit(-1);
|
||||
}
|
||||
pdbbase = dbAllocBase();
|
||||
pdbbase->ignoreMissingMenus = TRUE;
|
||||
status = dbAsciiRead(&pdbbase,argv[1]);
|
||||
if(status) {
|
||||
epicsPrintf("Terminal error For input file %s\n",argv[1]);
|
||||
exit(-1);
|
||||
}
|
||||
fprintf(outFile,"#include <vxWorks.h>\n");
|
||||
fprintf(outFile,"#include <semLib.h>\n");
|
||||
fprintf(outFile,"#include \"ellLib.h\"\n");
|
||||
fprintf(outFile,"#include \"fast_lock.h\"\n");
|
||||
fprintf(outFile,"#include \"link.h\"\n");
|
||||
fprintf(outFile,"#include \"tsDefs.h\"\n");
|
||||
pdbMenu = (dbMenu *)ellFirst(&pdbbase->menuList);
|
||||
while(pdbMenu) {
|
||||
fprintf(outFile,"\n#ifndef INC%sH\n",pdbMenu->name);
|
||||
fprintf(outFile,"#define INC%sH\n",pdbMenu->name);
|
||||
fprintf(outFile,"typedef enum {\n");
|
||||
for(i=0; i<pdbMenu->nChoice; i++) {
|
||||
fprintf(outFile,"\t%s,\n",pdbMenu->papChoiceName[i]);
|
||||
}
|
||||
fprintf(outFile,"}%s;\n",pdbMenu->name);
|
||||
fprintf(outFile,"#endif /*INC%sH*/\n",pdbMenu->name);
|
||||
pdbMenu = (dbMenu *)ellNext(&pdbMenu->node);
|
||||
}
|
||||
pdbRecDes = (dbRecDes *)ellFirst(&pdbbase->recDesList);
|
||||
while(pdbRecDes) {
|
||||
fprintf(outFile,"#ifndef INC%sH\n",pdbRecDes->name);
|
||||
fprintf(outFile,"#define INC%sH\n",pdbRecDes->name);
|
||||
fprintf(outFile,"typedef struct %s",pdbRecDes->name);
|
||||
if(!isdbCommonRecord) fprintf(outFile,"Record");
|
||||
fprintf(outFile," {\n");
|
||||
for(i=0; i<pdbRecDes->no_fields; i++) {
|
||||
char name[256];
|
||||
int j;
|
||||
|
||||
pdbFldDes = pdbRecDes->papFldDes[i];
|
||||
for(j=0; j< (int)strlen(pdbFldDes->name); j++)
|
||||
name[j] = tolower(pdbFldDes->name[j]);
|
||||
name[strlen(pdbFldDes->name)] = 0;
|
||||
switch(pdbFldDes->field_type) {
|
||||
case DBF_STRING :
|
||||
fprintf(outFile,"\tchar\t\t%s[%d]; /*%s*/\n",
|
||||
name,pdbFldDes->size,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_CHAR :
|
||||
fprintf(outFile,"\tchar\t\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_UCHAR :
|
||||
fprintf(outFile,"\tunsigned char\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_SHORT :
|
||||
fprintf(outFile,"\tshort\t\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_USHORT :
|
||||
fprintf(outFile,"\tunsigned short\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_LONG :
|
||||
fprintf(outFile,"\tlong\t\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_ULONG :
|
||||
fprintf(outFile,"\tunsigned long\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_FLOAT :
|
||||
fprintf(outFile,"\tfloat\t\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_DOUBLE :
|
||||
fprintf(outFile,"\tdouble\t\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_ENUM :
|
||||
case DBF_MENU :
|
||||
case DBF_DEVICE :
|
||||
fprintf(outFile,"\tunsigned short\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_INLINK :
|
||||
case DBF_OUTLINK :
|
||||
case DBF_FWDLINK :
|
||||
fprintf(outFile,"\tDBLINK\t\t%s;\t/*%s*/\n",
|
||||
name,pdbFldDes->prompt);
|
||||
break;
|
||||
case DBF_NOACCESS:
|
||||
fprintf(outFile,"\t%s;\t/*%s*/\n",
|
||||
pdbFldDes->extra,pdbFldDes->prompt);
|
||||
break;
|
||||
default:
|
||||
fprintf(outFile,"ILLEGAL FIELD TYPE\n");
|
||||
}
|
||||
}
|
||||
fprintf(outFile,"} %s",pdbRecDes->name);
|
||||
if(!isdbCommonRecord) fprintf(outFile,"Record");
|
||||
fprintf(outFile,";\n");
|
||||
if(!isdbCommonRecord) {
|
||||
for(i=0; i<pdbRecDes->no_fields; i++) {
|
||||
pdbFldDes = pdbRecDes->papFldDes[i];
|
||||
fprintf(outFile,"#define %sRecord%s\t%d\n",
|
||||
pdbRecDes->name,pdbFldDes->name,pdbFldDes->indRecDes);
|
||||
}
|
||||
}
|
||||
fprintf(outFile,"#endif /*INC%sH*/\n",pdbRecDes->name);
|
||||
pdbRecDes = (dbRecDes *)ellNext(&pdbRecDes->node);
|
||||
if(pdbRecDes) fprintf(outFile,"\n");
|
||||
}
|
||||
if(!isdbCommonRecord) {
|
||||
fprintf(outFile,"#ifdef GEN_SIZE_OFFSET\n");
|
||||
pdbRecDes = (dbRecDes *)ellFirst(&pdbbase->recDesList);
|
||||
while(pdbRecDes) {
|
||||
fprintf(outFile,"int %sRecordSizeOffset(dbRecDes *pdbRecDes)\n{\n",
|
||||
pdbRecDes->name);
|
||||
fprintf(outFile," %sRecord *prec = 0;\n",pdbRecDes->name);
|
||||
for(i=0; i<pdbRecDes->no_fields; i++) {
|
||||
char name[256];
|
||||
int j;
|
||||
|
||||
pdbFldDes = pdbRecDes->papFldDes[i];
|
||||
for(j=0; j< (int)strlen(pdbFldDes->name); j++)
|
||||
name[j] = tolower(pdbFldDes->name[j]);
|
||||
name[strlen(pdbFldDes->name)] = 0;
|
||||
fprintf(outFile,
|
||||
" pdbRecDes->papFldDes[%d]->size=sizeof(prec->%s);\n",
|
||||
i,name);
|
||||
fprintf(outFile," pdbRecDes->papFldDes[%d]->offset=",i);
|
||||
fprintf(outFile,
|
||||
"(short)((char *)&prec->%s - (char *)prec);\n",name);
|
||||
}
|
||||
fprintf(outFile," pdbRecDes->rec_size = sizeof(*prec);\n");
|
||||
fprintf(outFile," return(0);\n");
|
||||
fprintf(outFile,"}\n");
|
||||
pdbRecDes = (dbRecDes *)ellNext(&pdbRecDes->node);
|
||||
}
|
||||
fprintf(outFile,"#endif /*GEN_SIZE_OFFSET*/\n");
|
||||
}
|
||||
fclose(outFile);
|
||||
free((void *)outFilename);
|
||||
return(0);
|
||||
}
|
||||
199
src/dbStatic/dbAsciiYacc.y
Normal file
199
src/dbStatic/dbAsciiYacc.y
Normal file
@@ -0,0 +1,199 @@
|
||||
%{
|
||||
static int yyerror();
|
||||
static int yy_start;
|
||||
static long pvt_yy_parse(void);
|
||||
static int yyFailed = 0;
|
||||
#include "dbAsciiRoutines.c"
|
||||
static char *menuString = "menu";
|
||||
%}
|
||||
|
||||
%start database
|
||||
|
||||
%token tokenINCLUDE tokenPATH
|
||||
%token tokenMENU tokenCHOICE tokenRECORDTYPE tokenFIELD
|
||||
%token tokenDEVICE tokenDRIVER tokenBREAKTABLE
|
||||
%token tokenRECORD
|
||||
%token <Str> tokenSTRING
|
||||
|
||||
%union
|
||||
{
|
||||
char *Str;
|
||||
}
|
||||
|
||||
%%
|
||||
|
||||
database: database database_item | database_item;
|
||||
|
||||
database_item: include
|
||||
| path
|
||||
| tokenMENU menu_head menu_body
|
||||
| tokenRECORDTYPE recordtype_head recordtype_body
|
||||
| device
|
||||
| driver
|
||||
| tokenBREAKTABLE break_head break_body
|
||||
| tokenRECORD record_head record_body
|
||||
;
|
||||
|
||||
include: tokenINCLUDE tokenSTRING
|
||||
{
|
||||
if(dbDebug>2) printf("include : %s\n",$2);
|
||||
dbAsciiIncludeNew($2);
|
||||
};
|
||||
|
||||
path: tokenPATH tokenSTRING
|
||||
{
|
||||
if(dbDebug>2) printf("path : %s\n",$2);
|
||||
dbAsciiPath($2);
|
||||
};
|
||||
|
||||
menu_head: '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("menu_head %s\n",$2);
|
||||
dbAsciiMenuHead($2);
|
||||
};
|
||||
|
||||
menu_body: '{' choice_list '}'
|
||||
{
|
||||
if(dbDebug>2) printf("menu_body\n");
|
||||
dbAsciiMenuBody();
|
||||
}
|
||||
| include ;
|
||||
|
||||
choice_list: choice_list choice | choice;
|
||||
|
||||
choice: tokenCHOICE '(' tokenSTRING ',' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("choice %s %s\n",$3,$5);
|
||||
dbAsciiMenuChoice($3,$5);
|
||||
} ;
|
||||
|
||||
recordtype_head: '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("recordtype_head %s\n",$2);
|
||||
dbAsciiRecordtypeHead($2);
|
||||
};
|
||||
|
||||
recordtype_body: '{' recordtype_field_list '}'
|
||||
{
|
||||
if(dbDebug>2) printf("recordtype_body\n");
|
||||
dbAsciiRecordtypeBody();
|
||||
};
|
||||
|
||||
recordtype_field_list: recordtype_field_list recordtype_field
|
||||
| recordtype_field;
|
||||
|
||||
recordtype_field: tokenFIELD recordtype_field_head recordtype_field_body
|
||||
| include ;
|
||||
|
||||
recordtype_field_head: '(' tokenSTRING ',' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("recordtype_field_head %s %s\n",$2,$4);
|
||||
dbAsciiRecordtypeFieldHead($2,$4);
|
||||
};
|
||||
|
||||
recordtype_field_body: '{' recordtype_field_item_list '}' ;
|
||||
|
||||
recordtype_field_item_list: recordtype_field_item_list recordtype_field_item
|
||||
| recordtype_field_item;
|
||||
|
||||
recordtype_field_item: tokenSTRING '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("recordtype_field_item %s %s\n",$1,$3);
|
||||
dbAsciiRecordtypeFieldItem($1,$3);
|
||||
}
|
||||
| tokenMENU '(' tokenSTRING ')'
|
||||
{
|
||||
char *pmenu;
|
||||
|
||||
if(dbDebug>2) printf("recordtype_field_item %s (%s)\n",menuString,$3);
|
||||
pmenu = (char *)malloc(strlen(menuString)+1);
|
||||
strcpy(pmenu,menuString);
|
||||
dbAsciiRecordtypeFieldItem(pmenu,$3);
|
||||
};
|
||||
|
||||
|
||||
device: tokenDEVICE '('
|
||||
tokenSTRING ',' tokenSTRING ',' tokenSTRING ',' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("device %s %s %s %s\n",$3,$5,$7,$9);
|
||||
dbAsciiDevice($3,$5,$7,$9);
|
||||
};
|
||||
|
||||
|
||||
driver: tokenDRIVER '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("driver %s\n",$3);
|
||||
dbAsciiDriver($3);
|
||||
};
|
||||
|
||||
break_head: '(' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("break_head %s\n",$2);
|
||||
dbAsciiBreakHead($2);
|
||||
};
|
||||
|
||||
break_body : '{' break_list '}'
|
||||
{
|
||||
if(dbDebug>2) printf("break_body\n");
|
||||
dbAsciiBreakBody();
|
||||
};
|
||||
|
||||
break_list: break_list ',' break_item | break_item;
|
||||
|
||||
break_item: tokenSTRING
|
||||
{
|
||||
if(dbDebug>2) printf("break_item tokenSTRING %s\n",$1);
|
||||
dbAsciiBreakItem($1);
|
||||
};
|
||||
|
||||
|
||||
record_head: '(' tokenSTRING ',' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("record_head %s %s\n",$2,$4);
|
||||
dbAsciiRecordHead($2,$4);
|
||||
};
|
||||
|
||||
record_body: '{' record_field_list '}'
|
||||
{
|
||||
if(dbDebug>2) printf("record_body\n");
|
||||
dbAsciiRecordBody();
|
||||
};
|
||||
|
||||
record_field_list: record_field_list record_field
|
||||
| record_field;
|
||||
|
||||
record_field: tokenFIELD '(' tokenSTRING ',' tokenSTRING ')'
|
||||
{
|
||||
if(dbDebug>2) printf("record_field %s %s\n",$3,$5);
|
||||
dbAsciiRecordField($3,$5);
|
||||
}
|
||||
| include ;
|
||||
|
||||
%%
|
||||
|
||||
#include "dbAsciiLex.c"
|
||||
|
||||
|
||||
static int yyerror(char *str)
|
||||
{
|
||||
fprintf(stderr,"Error ");
|
||||
if(str) fprintf(stderr,"\"%s\"",str);
|
||||
fprintf(stderr," Last token \"%s\"\n",yytext);
|
||||
dbAsciiIncludePrint(stderr);
|
||||
yyFailed = TRUE;
|
||||
return(0);
|
||||
}
|
||||
static long pvt_yy_parse(void)
|
||||
{
|
||||
static int FirstFlag = 1;
|
||||
long rtnval;
|
||||
|
||||
if (!FirstFlag) {
|
||||
yyFailed = FALSE;
|
||||
yyreset();
|
||||
yyrestart(NULL);
|
||||
}
|
||||
FirstFlag = 0;
|
||||
rtnval = yyparse();
|
||||
if(rtnval!=0 || yyFailed) return(-1); else return(0);
|
||||
}
|
||||
243
src/dbStatic/dbPvdLib.c
Normal file
243
src/dbStatic/dbPvdLib.c
Normal file
@@ -0,0 +1,243 @@
|
||||
/*dbPvdLib.c*/
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
#ifdef vxWorks
|
||||
#include <vxWorks.h>
|
||||
#include <taskLib.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <ellLib.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
|
||||
int dbPvdHashTableSize = 512;
|
||||
static int dbPvdHashTableShift;
|
||||
#define NTABLESIZES 9
|
||||
static struct {
|
||||
unsigned int tablesize;
|
||||
int shift;
|
||||
}hashTableParms[9] = {
|
||||
{256,0},
|
||||
{512,1},
|
||||
{1024,2},
|
||||
{2048,3},
|
||||
{4096,4},
|
||||
{8192,5},
|
||||
{16384,6},
|
||||
{32768,7},
|
||||
{65536,8}
|
||||
};
|
||||
|
||||
/*The hash algorithm is a modification of the algorithm described in */
|
||||
/* Fast Hashing of Variable Length Text Strings, Peter K. Pearson, */
|
||||
/* Communications of the ACM, June 1990 */
|
||||
/* The modifications were designed by Marty Kraimer */
|
||||
|
||||
static unsigned char T[256] = {
|
||||
39,159,180,252, 71, 6, 13,164,232, 35,226,155, 98,120,154, 69,
|
||||
157, 24,137, 29,147, 78,121, 85,112, 8,248,130, 55,117,190,160,
|
||||
176,131,228, 64,211,106, 38, 27,140, 30, 88,210,227,104, 84, 77,
|
||||
75,107,169,138,195,184, 70, 90, 61,166, 7,244,165,108,219, 51,
|
||||
9,139,209, 40, 31,202, 58,179,116, 33,207,146, 76, 60,242,124,
|
||||
254,197, 80,167,153,145,129,233,132, 48,246, 86,156,177, 36,187,
|
||||
45, 1, 96, 18, 19, 62,185,234, 99, 16,218, 95,128,224,123,253,
|
||||
42,109, 4,247, 72, 5,151,136, 0,152,148,127,204,133, 17, 14,
|
||||
182,217, 54,199,119,174, 82, 57,215, 41,114,208,206,110,239, 23,
|
||||
189, 15, 3, 22,188, 79,113,172, 28, 2,222, 21,251,225,237,105,
|
||||
102, 32, 56,181,126, 83,230, 53,158, 52, 59,213,118,100, 67,142,
|
||||
220,170,144,115,205, 26,125,168,249, 66,175, 97,255, 92,229, 91,
|
||||
214,236,178,243, 46, 44,201,250,135,186,150,221,163,216,162, 43,
|
||||
11,101, 34, 37,194, 25, 50, 12, 87,198,173,240,193,171,143,231,
|
||||
111,141,191,103, 74,245,223, 20,161,235,122, 63, 89,149, 73,238,
|
||||
134, 68, 93,183,241, 81,196, 49,192, 65,212, 94,203, 10,200, 47
|
||||
};
|
||||
|
||||
|
||||
static unsigned short hash( char *pname, int length)
|
||||
{
|
||||
unsigned char h0=0;
|
||||
unsigned char h1=0;
|
||||
unsigned short ind0,ind1;
|
||||
int even = TRUE;
|
||||
unsigned char c;
|
||||
int i;
|
||||
|
||||
for(i=0; i<length; i++, pname++) {
|
||||
c = *pname;
|
||||
if(even) {h0 = T[h0^c]; even = FALSE;}
|
||||
else {h1 = T[h1^c]; even = TRUE;}
|
||||
}
|
||||
ind0 = (unsigned short)h0;
|
||||
ind1 = (unsigned short)h1;
|
||||
return((ind1<<dbPvdHashTableShift) ^ ind0);
|
||||
}
|
||||
|
||||
int dbPvdTableSize(DBBASE *pdbbase,int size)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i< NTABLESIZES; i++) {
|
||||
if(size==hashTableParms[i].tablesize) {
|
||||
dbPvdHashTableSize = hashTableParms[i].tablesize;
|
||||
dbPvdHashTableShift = hashTableParms[i].shift;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
printf("Illegal Size for Process Variable Directory\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
void dbPvdInitPvt(dbBase *pdbbase)
|
||||
{
|
||||
ELLLIST **ppvd;
|
||||
int i;
|
||||
|
||||
for(i=0; i< NTABLESIZES; i++) {
|
||||
if((i==NTABLESIZES-1)
|
||||
||((dbPvdHashTableSize>=hashTableParms[i].tablesize)
|
||||
&& (dbPvdHashTableSize<hashTableParms[i+1].tablesize))) {
|
||||
dbPvdHashTableSize = hashTableParms[i].tablesize;
|
||||
dbPvdHashTableShift = hashTableParms[i].shift;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ppvd = dbCalloc(dbPvdHashTableSize, sizeof(ELLLIST *));
|
||||
pdbbase->ppvd = (void *) ppvd;
|
||||
return;
|
||||
}
|
||||
|
||||
PVDENTRY *dbPvdFind(dbBase *pdbbase,char *name,int lenName)
|
||||
{
|
||||
unsigned short hashInd;
|
||||
ELLLIST **ppvd = (ELLLIST **) pdbbase->ppvd;
|
||||
ELLLIST *pvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
|
||||
hashInd = hash(name, lenName);
|
||||
if ((pvdlist=ppvd[hashInd]) == NULL) return (NULL);
|
||||
ppvdNode = (PVDENTRY *) ellFirst(pvdlist);
|
||||
while(ppvdNode) {
|
||||
if(strcmp(name,ppvdNode->precnode->recordname) == 0)
|
||||
return(ppvdNode);
|
||||
ppvdNode = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
PVDENTRY *dbPvdAdd(dbBase *pdbbase,dbRecDes *precdes,dbRecordNode *precnode)
|
||||
{
|
||||
unsigned short hashInd;
|
||||
ELLLIST **ppvd = (ELLLIST **) pdbbase->ppvd;
|
||||
ELLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
int lenName;
|
||||
char *name=precnode->recordname;
|
||||
|
||||
lenName=strlen(name);
|
||||
hashInd = hash(name, lenName);
|
||||
if (ppvd[hashInd] == NULL) {
|
||||
ppvd[hashInd] = dbCalloc(1, sizeof(ELLLIST));
|
||||
ellInit(ppvd[hashInd]);
|
||||
}
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
if(strcmp(name,(char *)ppvdNode->precnode->precord) == 0) return(NULL);
|
||||
ppvdNode = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
|
||||
}
|
||||
ppvdNode = dbCalloc(1, sizeof(PVDENTRY));
|
||||
ellAdd(ppvdlist, (ELLNODE*)ppvdNode);
|
||||
ppvdNode->precdes = precdes;
|
||||
ppvdNode->precnode = precnode;
|
||||
return (ppvdNode);
|
||||
}
|
||||
|
||||
void dbPvdDelete(dbBase *pdbbase,dbRecordNode *precnode)
|
||||
{
|
||||
char *name=precnode->recordname;
|
||||
unsigned short hashInd;
|
||||
ELLLIST **ppvd = (ELLLIST **) pdbbase->ppvd;
|
||||
ELLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
int lenName;
|
||||
|
||||
lenName=strlen(name);
|
||||
hashInd = hash(name, lenName);
|
||||
if (ppvd[hashInd] == NULL)return;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
if(ppvdNode->precnode && ppvdNode->precnode->precord
|
||||
&& strcmp(name,(char *)ppvdNode->precnode->precord) == 0) {
|
||||
ellDelete(ppvdlist, (ELLNODE*)ppvdNode);
|
||||
free((void *)ppvdNode);
|
||||
return;
|
||||
}
|
||||
ppvdNode = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void dbPvdFreeMem(dbBase *pdbbase)
|
||||
{
|
||||
unsigned short hashInd;
|
||||
ELLLIST **ppvd = (ELLLIST **) pdbbase->ppvd;
|
||||
ELLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
PVDENTRY *next;
|
||||
|
||||
if (ppvd == NULL) return;
|
||||
for (hashInd=0; hashInd<(unsigned short)dbPvdHashTableSize; hashInd++) {
|
||||
if(ppvd[hashInd] == NULL) continue;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
next = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
|
||||
ellDelete(ppvdlist,(ELLNODE*)ppvdNode);
|
||||
free((void *)ppvdNode);
|
||||
ppvdNode = next;
|
||||
}
|
||||
free((void *)ppvd[hashInd]);
|
||||
}
|
||||
free((void *)ppvd);
|
||||
}
|
||||
|
||||
void dbPvdDump(dbBase *pdbbase,int verbose)
|
||||
{
|
||||
unsigned short hashInd;
|
||||
ELLLIST **ppvd = (ELLLIST **) pdbbase->ppvd;
|
||||
ELLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
int number;
|
||||
|
||||
if (ppvd == NULL) return;
|
||||
printf("Process Variable Directory\n");
|
||||
printf("dbPvdHashTableSize %d dbPvdHashTableShift %d\n",
|
||||
dbPvdHashTableSize,dbPvdHashTableShift);
|
||||
for (hashInd=0; hashInd<(unsigned short)dbPvdHashTableSize; hashInd++) {
|
||||
if(ppvd[hashInd] == NULL) continue;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) ellFirst(ppvdlist);
|
||||
printf("\n%3.3hd=%3.3d ",hashInd,ellCount(ppvdlist));
|
||||
number=0;
|
||||
while(ppvdNode && verbose) {
|
||||
printf(" %s",(char *)ppvdNode->precnode->recordname);
|
||||
if(number++ ==2) {number=0;printf("\n ");}
|
||||
ppvdNode = (PVDENTRY *) ellNext((ELLNODE*)ppvdNode);
|
||||
}
|
||||
}
|
||||
printf("\nEnd of Process Variable Directory\n");
|
||||
}
|
||||
2737
src/dbStatic/dbStaticLib.c
Normal file
2737
src/dbStatic/dbStaticLib.c
Normal file
File diff suppressed because it is too large
Load Diff
266
src/dbStatic/dbStaticNoRun.c
Normal file
266
src/dbStatic/dbStaticNoRun.c
Normal file
@@ -0,0 +1,266 @@
|
||||
/*dbStaticNoRun.c*/
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
/*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 06-JUN-95 mrk Initial Version
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <dbFldTypes.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <errMdef.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
|
||||
long dbAllocRecord(DBENTRY *pdbentry,char *precordName)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes;
|
||||
void **papField;
|
||||
int i;
|
||||
char *pstr;
|
||||
|
||||
if(!precdes) return(S_dbLib_recdesNotFound);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
precnode->precord = dbCalloc(precdes->no_fields,sizeof(void *));
|
||||
papField = (void **)precnode->precord;
|
||||
for(i=0; i<precdes->no_fields; i++) {
|
||||
pflddes = precdes->papFldDes[i];
|
||||
if(!pflddes) continue;
|
||||
switch(pflddes->field_type) {
|
||||
case DBF_STRING:
|
||||
if(pflddes->size <= 0) {
|
||||
epicsPrintf("size=0 for %s.%s\n",precdes->name,pflddes->name);
|
||||
pflddes->size = 1;
|
||||
}
|
||||
papField[i] = dbCalloc(pflddes->size,sizeof(char));
|
||||
if(pflddes->initial) {
|
||||
if(strlen(pflddes->initial) >= pflddes->size) {
|
||||
epicsPrintf("initial size > size for %s.%s\n",
|
||||
precdes->name,pflddes->name);
|
||||
} else {
|
||||
strcpy((char *)papField[i],pflddes->initial);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DBF_CHAR:
|
||||
case DBF_UCHAR:
|
||||
case DBF_SHORT:
|
||||
case DBF_USHORT:
|
||||
case DBF_LONG:
|
||||
case DBF_ULONG:
|
||||
case DBF_FLOAT:
|
||||
case DBF_DOUBLE:
|
||||
case DBF_ENUM:
|
||||
if(pflddes->initial) {
|
||||
papField[i] =
|
||||
dbCalloc(strlen(pflddes->initial)+1,sizeof(char));
|
||||
strcpy((char *)papField[i],pflddes->initial);
|
||||
}
|
||||
break;
|
||||
case DBF_MENU:
|
||||
case DBF_DEVICE:
|
||||
papField[i] = dbCalloc(1,sizeof(unsigned short));
|
||||
if(pflddes->initial) sscanf(pflddes->initial,"%hu",papField[i]);
|
||||
break;
|
||||
case DBF_INLINK:
|
||||
case DBF_OUTLINK:
|
||||
case DBF_FWDLINK: {
|
||||
struct link *plink;
|
||||
|
||||
papField[i] = plink = dbCalloc(1,sizeof(struct link));
|
||||
if(pflddes->initial) {
|
||||
plink->value.constantStr =
|
||||
dbCalloc(strlen(pflddes->initial)+1,sizeof(char));
|
||||
strcpy(plink->value.constantStr,pflddes->initial);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DBF_NOACCESS:
|
||||
break;
|
||||
default:
|
||||
epicsPrintf("dbAllocRecord: Illegal field type\n");
|
||||
}
|
||||
}
|
||||
pstr = (char *)papField[0];
|
||||
strcpy(pstr,precordName);
|
||||
return(0);
|
||||
}
|
||||
|
||||
long dbFreeRecord(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void **pap;
|
||||
int i,field_type;
|
||||
|
||||
if(!precdes) return(S_dbLib_recdesNotFound);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
if(!precnode->precord) return(S_dbLib_recNotFound);
|
||||
pap = (void **)precnode->precord;
|
||||
precnode->precord = NULL;
|
||||
for(i=0; i<precdes->no_fields; i++) {
|
||||
pflddes = precdes->papFldDes[i];
|
||||
field_type = pflddes->field_type;
|
||||
if(field_type==DBF_INLINK
|
||||
|| field_type==DBF_OUTLINK
|
||||
|| field_type==DBF_FWDLINK) {
|
||||
struct link *plink = (struct link *)pap[i];
|
||||
|
||||
if(plink->type== CONSTANT)
|
||||
free((void *)plink->value.constantStr);
|
||||
if(plink->type==PV_LINK)
|
||||
free((void *)plink->value.pv_link.pvname);
|
||||
}
|
||||
free(pap[i]);
|
||||
}
|
||||
free((void *)pap);
|
||||
return(0);
|
||||
}
|
||||
|
||||
long dbGetFieldAddress(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void **pap;
|
||||
|
||||
if(!precdes) return(S_dbLib_recdesNotFound);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
if(!pflddes) return(S_dbLib_flddesNotFound);
|
||||
if(!precnode->precord) return(0);
|
||||
pap = (void **)precnode->precord;
|
||||
pdbentry->pfield = pap[pflddes->indRecDes];
|
||||
return(0);
|
||||
}
|
||||
|
||||
char *dbRecordName(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
void **pap;
|
||||
|
||||
if(!precdes) return(0);
|
||||
if(!precnode) return(0);
|
||||
if(!precnode->precord) return(0);
|
||||
pap = (void **)precnode->precord;
|
||||
return((char *)pap[0]);
|
||||
}
|
||||
|
||||
int dbIsDefaultValue(DBENTRY *pdbentry)
|
||||
{
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void *pfield = pdbentry->pfield;
|
||||
|
||||
if(!pflddes) return(FALSE);
|
||||
switch (pflddes->field_type) {
|
||||
case DBF_STRING:
|
||||
if(!pfield) return(FALSE);
|
||||
if(!pflddes->initial)
|
||||
return((*(char *)pfield =='\0') ? TRUE : FALSE);
|
||||
return(strcmp((char *)pfield,(char *)pflddes->initial)==0);
|
||||
case DBF_CHAR:
|
||||
case DBF_UCHAR:
|
||||
case DBF_SHORT:
|
||||
case DBF_USHORT:
|
||||
case DBF_LONG:
|
||||
case DBF_ULONG:
|
||||
case DBF_FLOAT:
|
||||
case DBF_DOUBLE:
|
||||
case DBF_ENUM:
|
||||
if(!pfield) return(TRUE);
|
||||
if(!pflddes->initial) return(FALSE);
|
||||
return(strcmp((char *)pfield,(char *)pflddes->initial)==0);
|
||||
case DBF_MENU:
|
||||
case DBF_DEVICE: {
|
||||
unsigned short val,ival;
|
||||
|
||||
if(!pfield) return(FALSE);
|
||||
val = *(unsigned short *)pfield;
|
||||
if(pflddes->initial == 0) return((val==0)?TRUE:FALSE);
|
||||
sscanf(pflddes->initial,"%hu",&ival);
|
||||
return((val==ival)?TRUE:FALSE);
|
||||
}
|
||||
case DBF_INLINK:
|
||||
case DBF_OUTLINK:
|
||||
case DBF_FWDLINK: {
|
||||
struct link *plink = (struct link *)pfield;
|
||||
|
||||
if(!plink) return(FALSE);
|
||||
if(plink->type!=CONSTANT) return(FALSE);
|
||||
if(plink->value.constantStr == 0) return(TRUE);
|
||||
if(strcmp(plink->value.constantStr,pflddes->initial)==0)
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
char *dbGetStringNum(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void *pfield = pdbentry->pfield;
|
||||
void **pap;
|
||||
static char zero[] = "0";
|
||||
|
||||
if(!precnode) return(0);
|
||||
if(!precnode->precord) return(0);
|
||||
if(!pflddes) return(0);
|
||||
pap = (void **)precnode->precord;
|
||||
if(!pfield) return(zero);
|
||||
return((char *)pap[pflddes->indRecDes]);
|
||||
}
|
||||
|
||||
long dbPutStringNum(DBENTRY *pdbentry,char *pstring)
|
||||
{
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
char *pfield = (char *)pdbentry->pfield;
|
||||
void **pap;
|
||||
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
if(!precnode->precord) return(S_dbLib_recNotFound);
|
||||
if(!pflddes) return(S_dbLib_flddesNotFound);
|
||||
if(pfield) {
|
||||
if(strlen(pfield) < strlen(pstring)) {
|
||||
free((void *)pfield);
|
||||
pfield = NULL;
|
||||
}
|
||||
}
|
||||
if(!pfield) {
|
||||
pfield = dbCalloc(strlen(pstring)+1,sizeof(char));
|
||||
strcpy(pfield,pstring);
|
||||
pdbentry->pfield = pfield;
|
||||
pap = (void **)precnode->precord;
|
||||
pap[pflddes->indRecDes] = pfield;
|
||||
}
|
||||
strcpy(pfield,pstring);
|
||||
return(0);
|
||||
}
|
||||
|
||||
void dbGetRecordtypeSizeOffset(dbRecDes *pdbRecDes)
|
||||
{
|
||||
/*For no run cant and dont need to set size and offset*/
|
||||
return;
|
||||
}
|
||||
64
src/dbStatic/dbStaticPvt.h
Normal file
64
src/dbStatic/dbStaticPvt.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/* dbStaticPvt.h */
|
||||
/*
|
||||
* Author: Marty Kraimer
|
||||
* Date: 06Jun95
|
||||
*
|
||||
* Experimental Physics and Industrial Control System (EPICS)
|
||||
*
|
||||
* Copyright 1991, the Regents of the University of California,
|
||||
* and the University of Chicago Board of Governors.
|
||||
*
|
||||
* This software was produced under U.S. Government contracts:
|
||||
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
|
||||
* and (W-31-109-ENG-38) at Argonne National Laboratory.
|
||||
*
|
||||
* Initial development by:
|
||||
* The Controls and Automation Group (AT-8)
|
||||
* Ground Test Accelerator
|
||||
* Accelerator Technology Division
|
||||
* Los Alamos National Laboratory
|
||||
*
|
||||
* Co-developed with
|
||||
* The Controls and Computing Group
|
||||
* Accelerator Systems Division
|
||||
* Advanced Photon Source
|
||||
* Argonne National Laboratory
|
||||
*
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
* .01 06JUN95 mrk Initial version
|
||||
*/
|
||||
|
||||
#ifndef INCdbStaticPvth
|
||||
#define INCdbStaticPvth 1
|
||||
|
||||
/*Following are not intended for client code */
|
||||
void dbInitDeviceMenu(DBENTRY *pdbentry);
|
||||
|
||||
/*The following routines have different versions for run-time no-run-time*/
|
||||
long dbAllocRecord(DBENTRY *pdbentry,char *precordName);
|
||||
long dbFreeRecord(DBENTRY *pdbentry);
|
||||
|
||||
long dbGetFieldAddress(DBENTRY *pdbentry);
|
||||
char *dbRecordName(DBENTRY *pdbentry);
|
||||
|
||||
char *dbGetStringNum(DBENTRY *pdbentry);
|
||||
long dbPutStringNum(DBENTRY *pdbentry,char *pstring);
|
||||
|
||||
void dbGetRecordtypeSizeOffset(dbRecDes *pdbRecDes);
|
||||
|
||||
/*The following are in dbPvdLib.c*/
|
||||
/*directory*/
|
||||
typedef struct{
|
||||
ELLNODE node;
|
||||
dbRecDes *precdes;
|
||||
dbRecordNode *precnode;
|
||||
}PVDENTRY;
|
||||
int dbPvdTableSize(DBBASE *pdbbase,int size);
|
||||
void dbPvdInitPvt(DBBASE *pdbbase);
|
||||
PVDENTRY *dbPvdFind(DBBASE *pdbbase,char *name,int lenname);
|
||||
PVDENTRY *dbPvdAdd(DBBASE *pdbbase,dbRecDes *precdes,dbRecordNode *precnode);
|
||||
void dbPvdDelete(DBBASE *pdbbase,dbRecordNode *precnode);
|
||||
void dbPvdFreeMem(DBBASE *pdbbase);
|
||||
void dbPvdDump(DBBASE *pdbbase,int verbose);
|
||||
#endif /*INCdbStaticPvth*/
|
||||
591
src/dbStatic/dbStaticRun.c
Normal file
591
src/dbStatic/dbStaticRun.c
Normal file
@@ -0,0 +1,591 @@
|
||||
/*dbStaticLibRun.c*/
|
||||
/*****************************************************************
|
||||
COPYRIGHT NOTIFICATION
|
||||
*****************************************************************
|
||||
|
||||
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
|
||||
|
||||
This software was developed under a United States Government license
|
||||
described on the COPYRIGHT_UniversityOfChicago file included as part
|
||||
of this distribution.
|
||||
**********************************************************************/
|
||||
|
||||
/* Modification Log:
|
||||
* -----------------
|
||||
* .01 06-12-95 mrk Initial
|
||||
*/
|
||||
|
||||
#ifdef vxWorks
|
||||
#include <vxWorks.h>
|
||||
#include <taskLib.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <symLib.h>
|
||||
#include <sysSymTbl.h> /* for sysSymTbl*/
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <errMdef.h>
|
||||
#include <epicsPrint.h>
|
||||
#include <ellLib.h>
|
||||
#include <dbDefs.h>
|
||||
#include <cvtFast.h>
|
||||
#include <dbStaticLib.h>
|
||||
#include <dbStaticPvt.h>
|
||||
#include <devSup.h>
|
||||
#include <drvSup.h>
|
||||
#include <recSup.h>
|
||||
#include <cvtTable.h>
|
||||
#include <special.h>
|
||||
|
||||
static char hex_digit_to_ascii[16]={'0','1','2','3','4','5','6','7','8','9',
|
||||
'a','b','c','d','e','f'};
|
||||
|
||||
static void ulongToHexString(unsigned long source,char *pdest)
|
||||
{
|
||||
unsigned long val,temp;
|
||||
char digit[10];
|
||||
int i,j;
|
||||
|
||||
if(source==0) {
|
||||
strcpy(pdest,"0x0");
|
||||
return;
|
||||
}
|
||||
*pdest++ = '0'; *pdest++ = 'x';
|
||||
val = source;
|
||||
for(i=0; val!=0; i++) {
|
||||
temp = val/16;
|
||||
digit[i] = hex_digit_to_ascii[val - temp*16];
|
||||
val = temp;
|
||||
}
|
||||
for(j=i-1; j>=0; j--) {
|
||||
*pdest++ = digit[j];
|
||||
}
|
||||
*pdest = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
static double delta[2]={1e-6,1e-15};
|
||||
static int precision[2]={6,14};
|
||||
static void realToString(double value,char *preturn,int isdouble)
|
||||
{
|
||||
long intval;
|
||||
double diff,absvalue;
|
||||
int logval,prec,end;
|
||||
char tstr[30];
|
||||
char *ptstr=&tstr[0];
|
||||
int round;
|
||||
int ise=FALSE;
|
||||
char *loce=NULL;
|
||||
|
||||
if(value==0.0) {strcpy(preturn,"0"); return;};
|
||||
intval=value;
|
||||
diff = value - intval;
|
||||
if(diff<0.0) diff =-diff;
|
||||
absvalue = (value<0.0? -value: value);
|
||||
if(diff < absvalue*delta[isdouble]) {
|
||||
cvtLongToString(intval,preturn);
|
||||
return;
|
||||
}
|
||||
/*Now starts the hard cases*/
|
||||
if(value<0.0) {*preturn++ = '-'; value = -value;}
|
||||
logval = (int)log10(value);
|
||||
if(logval>6 || logval<-2 ) {
|
||||
ise=TRUE;
|
||||
prec = precision[isdouble];
|
||||
sprintf(ptstr,"%.*e",prec,value);
|
||||
loce = strchr(ptstr,'e');
|
||||
if(!loce) {errMessage(-1,"logic error in real to string"); return;}
|
||||
*loce++ = 0;
|
||||
} else {
|
||||
prec = precision[isdouble]-logval;
|
||||
if(prec<0)prec=0;
|
||||
sprintf(ptstr,"%.*f",prec,value);
|
||||
}
|
||||
if(prec>0) {
|
||||
end = strlen(ptstr) -1;
|
||||
round=FALSE;
|
||||
while(TRUE) {
|
||||
if(end<=0)break;
|
||||
if(tstr[end]=='.'){end--; break;}
|
||||
if(tstr[end]=='0'){end--; continue;}
|
||||
if(!round && end<precision[isdouble]) break;
|
||||
if(!round && tstr[end]<'8') break;
|
||||
if(tstr[end-1]=='.') {
|
||||
if(round)end = end-2;
|
||||
break;
|
||||
}
|
||||
if(tstr[end-1]!='9') break;
|
||||
round=TRUE;
|
||||
end--;
|
||||
}
|
||||
tstr[end+1]=0;
|
||||
while (round) {
|
||||
if(tstr[end]<'9') {tstr[end]++; break;}
|
||||
if(end==0) { *preturn++='1'; tstr[end]='0'; break;}
|
||||
tstr[end--]='0';
|
||||
}
|
||||
}
|
||||
strcpy(preturn,&tstr[0]);
|
||||
if(ise) {
|
||||
if(!(strchr(preturn,'.'))) strcat(preturn,".0");
|
||||
strcat(preturn,"e");
|
||||
strcat(preturn,loce);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static void floatToString(float value,char *preturn)
|
||||
{
|
||||
realToString((double)value,preturn,0);
|
||||
return;
|
||||
}
|
||||
|
||||
static void doubleToString(double value,char *preturn)
|
||||
{
|
||||
realToString(value,preturn,1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
long dbAllocRecord(DBENTRY *pdbentry,char *precordName)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes;
|
||||
int i;
|
||||
char *precord;
|
||||
char *pfield;
|
||||
|
||||
if(!precdes) return(S_dbLib_recdesNotFound);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
precnode->precord = dbCalloc(1,precdes->rec_size);
|
||||
precord = (char *)precnode->precord;
|
||||
if(precdes->rec_size == 0) {
|
||||
epicsPrintf("dbAllocRecord(%s) record_size =0\n",
|
||||
precdes->name);
|
||||
return(S_dbLib_noRecSup);
|
||||
}
|
||||
pflddes = precdes->papFldDes[0];
|
||||
if(!pflddes) {
|
||||
epicsPrintf("dbAllocRecord pflddes for NAME not found\n");
|
||||
return(S_dbLib_flddesNotFound);
|
||||
}
|
||||
if(strlen(precordName)>=pflddes->size) {
|
||||
epicsPrintf("dbAllocRecord: NAME(%s) too long\n",precordName);
|
||||
return(S_dbLib_nameLength);
|
||||
}
|
||||
pfield = precord + pflddes->offset;
|
||||
strcpy(pfield,precordName);
|
||||
for(i=1; i<precdes->no_fields; i++) {
|
||||
|
||||
pflddes = precdes->papFldDes[i];
|
||||
if(!pflddes) continue;
|
||||
pfield = precord + pflddes->offset;
|
||||
pdbentry->pfield = (void *)pfield;
|
||||
pdbentry->pflddes = pflddes;
|
||||
pdbentry->indfield = i;
|
||||
switch(pflddes->field_type) {
|
||||
case DBF_STRING:
|
||||
if(pflddes->initial) {
|
||||
if(strlen(pflddes->initial) >= pflddes->size) {
|
||||
epicsPrintf("initial size > size for %s.%s\n",
|
||||
precdes->name,pflddes->name);
|
||||
} else {
|
||||
strcpy(pfield,pflddes->initial);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DBF_CHAR:
|
||||
case DBF_UCHAR:
|
||||
case DBF_SHORT:
|
||||
case DBF_USHORT:
|
||||
case DBF_LONG:
|
||||
case DBF_ULONG:
|
||||
case DBF_FLOAT:
|
||||
case DBF_DOUBLE:
|
||||
case DBF_ENUM:
|
||||
case DBF_DEVICE:
|
||||
if(!pflddes->ftPvt) dbInitDeviceMenu(pdbentry);
|
||||
case DBF_MENU:
|
||||
if(pflddes->initial) {
|
||||
long status;
|
||||
|
||||
status = dbPutStringNum(pdbentry,pflddes->initial);
|
||||
if(status)
|
||||
epicsPrintf("Error initializing %s.%s initial %s\n",
|
||||
precdes->name,pflddes->name,pflddes->initial);
|
||||
}
|
||||
break;
|
||||
case DBF_INLINK:
|
||||
case DBF_OUTLINK:
|
||||
case DBF_FWDLINK: {
|
||||
DBLINK *plink = (DBLINK *)pfield;
|
||||
|
||||
if(pflddes->initial) {
|
||||
plink->value.constantStr =
|
||||
dbCalloc(strlen(pflddes->initial)+1,sizeof(char));
|
||||
strcpy(plink->value.constantStr,pflddes->initial);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DBF_NOACCESS:
|
||||
break;
|
||||
default:
|
||||
epicsPrintf("dbAllocRecord: Illegal field type\n");
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
long dbFreeRecord(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
|
||||
if(!precdes) return(S_dbLib_recdesNotFound);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
if(!precnode->precord) return(S_dbLib_recNotFound);
|
||||
free(precnode->precord);
|
||||
precnode->precord = NULL;
|
||||
return(0);
|
||||
}
|
||||
|
||||
long dbGetFieldAddress(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
|
||||
if(!precdes) return(S_dbLib_recdesNotFound);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
if(!pflddes) return(S_dbLib_flddesNotFound);
|
||||
if(!precnode->precord) return(0);
|
||||
pdbentry->pfield = ((char *)precnode->precord) + pflddes->offset;
|
||||
return(0);
|
||||
}
|
||||
|
||||
char *dbRecordName(DBENTRY *pdbentry)
|
||||
{
|
||||
dbRecDes *precdes = pdbentry->precdes;
|
||||
dbRecordNode *precnode = pdbentry->precnode;
|
||||
dbFldDes *pflddes;
|
||||
char *precord;
|
||||
|
||||
if(!precdes) return(0);
|
||||
if(!precnode) return(0);
|
||||
if(!precnode->precord) return(0);
|
||||
precord = (char *)precnode->precord;
|
||||
pflddes = precdes->papFldDes[0];
|
||||
if(!pflddes) return(NULL);
|
||||
return(precord + pflddes->offset);
|
||||
}
|
||||
|
||||
int dbIsDefaultValue(DBENTRY *pdbentry)
|
||||
{
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void *pfield = pdbentry->pfield;
|
||||
|
||||
if(!pflddes) return(FALSE);
|
||||
if(!pfield) return(FALSE);
|
||||
switch (pflddes->field_type) {
|
||||
case (DBF_STRING) : {
|
||||
char *p = (char *)pfield;
|
||||
|
||||
if(!pflddes->initial) return((strlen(p)==0) ? TRUE : FALSE);
|
||||
return((strcmp(pflddes->initial,p)==0) ? TRUE : FALSE);
|
||||
}
|
||||
case DBF_CHAR: {
|
||||
char field = *(char *)pfield;
|
||||
long ltemp;
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtol(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_UCHAR: {
|
||||
unsigned char field = *(unsigned char *)pfield;
|
||||
unsigned long ltemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtoul(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_SHORT: {
|
||||
short field = *(short *)pfield;
|
||||
long ltemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtol(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_USHORT: {
|
||||
unsigned short field = *(unsigned short *)pfield;
|
||||
unsigned long ltemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtoul(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_LONG: {
|
||||
long field = *(long *)pfield;
|
||||
long ltemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtol(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_ULONG: {
|
||||
unsigned long field = *(unsigned long *)pfield;
|
||||
unsigned long ltemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtoul(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_FLOAT: {
|
||||
float field = *(float *)pfield;
|
||||
double dtemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
dtemp = strtod(pflddes->initial,NULL);
|
||||
return((field==dtemp));
|
||||
}
|
||||
return((field==0.0));
|
||||
}
|
||||
case DBF_DOUBLE: {
|
||||
double field = *(double *)pfield;
|
||||
double dtemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
dtemp = strtod(pflddes->initial,NULL);
|
||||
return((field==dtemp));
|
||||
}
|
||||
return((field==0.0));
|
||||
}
|
||||
case DBF_ENUM:
|
||||
case DBF_MENU:
|
||||
case DBF_DEVICE: {
|
||||
unsigned short field = *(unsigned short *)pfield;
|
||||
unsigned long ltemp;
|
||||
|
||||
if(pflddes->initial) {
|
||||
ltemp = strtoul(pflddes->initial,NULL,0);
|
||||
return((field==ltemp));
|
||||
}
|
||||
return((field==0));
|
||||
}
|
||||
case DBF_INLINK:
|
||||
case DBF_OUTLINK:
|
||||
case DBF_FWDLINK:
|
||||
return(TRUE); /*Dont know what to do with this!!*/
|
||||
default:
|
||||
return(TRUE);
|
||||
}
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
char *dbGetStringNum(DBENTRY *pdbentry)
|
||||
{
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void *pfield = pdbentry->pfield;
|
||||
char *message;
|
||||
unsigned char cvttype;
|
||||
|
||||
if(!pdbentry->message) pdbentry->message = dbCalloc(1,50);
|
||||
message = pdbentry->message;
|
||||
cvttype = pflddes->base;
|
||||
switch (pflddes->field_type) {
|
||||
case DBF_CHAR:
|
||||
if(cvttype==CT_DECIMAL)
|
||||
cvtCharToString(*(char*)pfield, message);
|
||||
else
|
||||
ulongToHexString((unsigned long)(*(char*)pfield),message);
|
||||
break;
|
||||
case DBF_UCHAR:
|
||||
if(cvttype==CT_DECIMAL)
|
||||
cvtUcharToString(*(unsigned char*)pfield, message);
|
||||
else
|
||||
ulongToHexString((unsigned long)(*(unsigned char*)pfield),message);
|
||||
break;
|
||||
case DBF_SHORT:
|
||||
if(cvttype==CT_DECIMAL)
|
||||
cvtShortToString(*(short*)pfield, message);
|
||||
else
|
||||
ulongToHexString((unsigned long)(*(short*)pfield),message);
|
||||
break;
|
||||
case DBF_USHORT:
|
||||
case DBF_ENUM:
|
||||
if(cvttype==CT_DECIMAL)
|
||||
cvtUshortToString(*(unsigned short*)pfield, message);
|
||||
else
|
||||
ulongToHexString((unsigned long)(*(unsigned short*)pfield),message);
|
||||
break;
|
||||
case DBF_LONG:
|
||||
if(cvttype==CT_DECIMAL)
|
||||
cvtLongToString(*(long*)pfield, message);
|
||||
else
|
||||
ulongToHexString((unsigned long)(*(long*)pfield), message);
|
||||
break;
|
||||
case DBF_ULONG:
|
||||
if(cvttype==CT_DECIMAL)
|
||||
cvtUlongToString(*(unsigned long *)pfield, message);
|
||||
else
|
||||
ulongToHexString(*(unsigned long*)pfield, message);
|
||||
break;
|
||||
case DBF_FLOAT:
|
||||
floatToString(*(float *)pfield,message);
|
||||
break;
|
||||
case DBF_DOUBLE:
|
||||
doubleToString(*(double *)pfield,message);
|
||||
break;
|
||||
default:
|
||||
return(NULL);
|
||||
}
|
||||
return (message);
|
||||
}
|
||||
|
||||
long dbPutStringNum(DBENTRY *pdbentry,char *pstring)
|
||||
{
|
||||
dbFldDes *pflddes = pdbentry->pflddes;
|
||||
void *pfield = pdbentry->pfield;
|
||||
long status=0;
|
||||
|
||||
switch (pflddes->field_type) {
|
||||
case DBF_CHAR :
|
||||
case DBF_SHORT :
|
||||
case DBF_LONG:{
|
||||
long value;
|
||||
char *endp;
|
||||
|
||||
value = strtol(pstring,&endp,0);
|
||||
if(*endp!=0) status = S_dbLib_badField;
|
||||
switch (pflddes->field_type) {
|
||||
case DBF_CHAR : *(char *)pfield = value; break;
|
||||
case DBF_SHORT : *(short *)pfield = value; break;
|
||||
case DBF_LONG : *(long *)pfield = value; break;
|
||||
default: epicsPrintf("Logic error in dbPutStringNum\n");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DBF_UCHAR:
|
||||
case DBF_USHORT:
|
||||
case DBF_ULONG:
|
||||
case DBF_ENUM:{
|
||||
unsigned long value;
|
||||
char *endp;
|
||||
|
||||
value = strtoul(pstring,&endp,0);
|
||||
if(*endp!=0) status = S_dbLib_badField;
|
||||
switch (pflddes->field_type) {
|
||||
case DBF_UCHAR : *(unsigned char *)pfield = value; break;
|
||||
case DBF_USHORT:
|
||||
case DBF_ENUM: *(unsigned short *)pfield=value; break;
|
||||
case DBF_ULONG : *(unsigned long *)pfield = value; break;
|
||||
default: epicsPrintf("Logic error in dbPutStringNum\n");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DBF_FLOAT:
|
||||
case DBF_DOUBLE: {
|
||||
double value;
|
||||
char *endp;
|
||||
|
||||
value = strtod(pstring,&endp);
|
||||
if(*endp!=0) status = S_dbLib_badField;
|
||||
if(pflddes->field_type==DBF_FLOAT)
|
||||
*(float *)pfield = value;
|
||||
else
|
||||
*(double *)pfield = value;
|
||||
}
|
||||
break;
|
||||
case DBF_MENU: {
|
||||
dbMenu *pdbMenu = (dbMenu *)pflddes->ftPvt;
|
||||
char **papChoiceValue;
|
||||
char *pchoice;
|
||||
unsigned short *field= (unsigned short*)pfield;
|
||||
unsigned int nChoice,ind;
|
||||
int nargs,nchars;
|
||||
|
||||
if( pdbMenu && (papChoiceValue = pdbMenu->papChoiceValue)) {
|
||||
nChoice = pdbMenu->nChoice;
|
||||
for(ind=0; ind<nChoice; ind++) {
|
||||
if(!(pchoice=papChoiceValue[ind])) continue;
|
||||
if(strcmp(pchoice,pstring)==0) {
|
||||
*field = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
nargs = sscanf(pstring," %u %n",&ind,&nchars);
|
||||
if(nargs==1 && nchars==strlen(pstring) && ind<nChoice) {
|
||||
*field = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (S_dbLib_badField);
|
||||
case DBF_DEVICE: {
|
||||
dbDeviceMenu *pdbDeviceMenu=(dbDeviceMenu *)pflddes->ftPvt;
|
||||
char **papChoice;
|
||||
char *pchoice;
|
||||
unsigned short *field= (unsigned short*)pfield;
|
||||
unsigned int nChoice,ind;
|
||||
int nargs,nchars;
|
||||
|
||||
if( pdbDeviceMenu && (papChoice = pdbDeviceMenu->papChoice)) {
|
||||
nChoice = pdbDeviceMenu->nChoice;
|
||||
for(ind=0; ind<nChoice; ind++) {
|
||||
if(!(pchoice=papChoice[ind])) continue;
|
||||
if(strcmp(pchoice,pstring)==0) {
|
||||
*field = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
nargs = sscanf(pstring," %u %n",&ind,&nchars);
|
||||
if(nargs==1 && nchars==strlen(pstring) && ind<nChoice) {
|
||||
*field = ind;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (S_dbLib_badField);
|
||||
default:
|
||||
return (S_dbLib_badField);
|
||||
}
|
||||
return(status);
|
||||
}
|
||||
|
||||
void dbGetRecordtypeSizeOffset(dbRecDes *pdbRecDes)
|
||||
{
|
||||
char name[60];
|
||||
SYM_TYPE type;
|
||||
STATUS vxstatus;
|
||||
long status;
|
||||
int (*sizeOffset)(dbRecDes *pdbRecDes);
|
||||
|
||||
strcpy(name,"_");
|
||||
strcat(name,pdbRecDes->name);
|
||||
strcat(name,"RecordSizeOffset");
|
||||
vxstatus = symFindByName(sysSymTbl, name,
|
||||
(void *)&sizeOffset, &type);
|
||||
if (vxstatus != OK) {
|
||||
status = S_rec_noSizeOffset;
|
||||
errPrintf(status,__FILE__,__LINE__,"%s",pdbRecDes->name);
|
||||
return;
|
||||
}
|
||||
sizeOffset(pdbRecDes);
|
||||
}
|
||||
@@ -21,7 +21,11 @@
|
||||
#include <sockLib.h>
|
||||
#include <selectLib.h>
|
||||
#else
|
||||
#ifdef _OSF_SOURCE
|
||||
#include <sys/ioctl.h>
|
||||
#else
|
||||
#include <sys/sockio.h>
|
||||
#endif
|
||||
#include <sys/time.h>
|
||||
#include <netdb.h>
|
||||
#include <fcntl.h>
|
||||
@@ -108,7 +112,7 @@ int BSmakeServer(char** argv)
|
||||
perror("Cannot fork");
|
||||
return -1;
|
||||
case 0: /* child */
|
||||
#if defined linux || defined SOLARIS
|
||||
#if defined linux || defined SOLARIS || defined SGI || defined _OSF_SOURCE
|
||||
setpgrp();
|
||||
#else
|
||||
setpgrp(0,0);
|
||||
|
||||
@@ -4,8 +4,6 @@ include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
# USR_CFLAGS = -v
|
||||
|
||||
LEX = $(ELEX)
|
||||
YACC = $(EYACC)
|
||||
YACCOPT = -l
|
||||
LEXOPT = -L
|
||||
|
||||
@@ -19,6 +17,10 @@ OBJS = $(VAR_OBJS) BSlib.o PVSserver.o rdbapplist.o rdbls.o
|
||||
PROD = subtool dbLoadTemplate rdbls rdbapplist
|
||||
TARGETS = PVSserver
|
||||
|
||||
MAN1 = dbLoadTemplate.1 subtool.1
|
||||
MAN3 = dbLoadRecords.3 dbLoadTemplate.3
|
||||
MAN5 = templatefile.5 dbfile.5
|
||||
|
||||
include $(EPICS)/config/RULES.Unix
|
||||
|
||||
dbLoadTemplate.o: dbLoadTemplate_lex.c
|
||||
|
||||
@@ -2,8 +2,6 @@ EPICS = ../../../..
|
||||
include Target.include
|
||||
include $(EPICS)/config/CONFIG_BASE
|
||||
|
||||
LEX = $(ELEX)
|
||||
YACC = $(EYACC)
|
||||
YACCOPT = -l
|
||||
LEXOPT = -L
|
||||
|
||||
@@ -14,6 +12,10 @@ LIBOBJS = dbVarSub.o dbLoadTemplate.o dbLoadRecords.o BSlib.o PVSvx.o
|
||||
|
||||
LIBNAME = dbSubs
|
||||
|
||||
MAN1 = dbLoadTemplate.1 subtool.1
|
||||
MAN3 = dbLoadRecords.3 dbLoadTemplate.3
|
||||
MAN5 = templatefile.5 dbfile.5
|
||||
|
||||
include $(EPICS)/config/RULES.Vx
|
||||
|
||||
#dbLoadTemplate.o: dbLoadTemplate_lex.c dbLoadTemplate.c
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user