EPICS Base  7.0.5.1
dbStaticLib.h
1 /*************************************************************************\
2 * Copyright (c) 2009 UChicago Argonne LLC, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * SPDX-License-Identifier: EPICS
7 * EPICS BASE is distributed subject to a Software License Agreement found
8 * in file LICENSE that is included with this distribution.
9 \*************************************************************************/
10 /*
11  * Author: Marty Kraimer
12  * Date: 06-08-93
13  */
14 
15 #ifndef INCdbStaticLibh
16 #define INCdbStaticLibh 1
17 
18 #include <stddef.h>
19 #include <stdio.h>
20 
21 #include "shareLib.h"
22 #include "dbFldTypes.h"
23 #include "dbBase.h"
24 #include "link.h"
25 #include "errMdef.h"
26 #include "cantProceed.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 typedef dbBase DBBASE;
33 
34 typedef struct dbEntry {
35  DBBASE *pdbbase;
36  dbRecordType *precordType;
37  dbFldDes *pflddes;
38  dbRecordNode *precnode;
39  dbInfoNode *pinfonode;
40  void *pfield;
41  char *message;
42  short indfield;
43 } DBENTRY;
44 
45 /* Static database access routines*/
46 epicsShareFunc DBBASE * dbAllocBase(void);
47 epicsShareFunc void dbFreeBase(DBBASE *pdbbase);
48 epicsShareFunc DBENTRY * dbAllocEntry(DBBASE *pdbbase);
49 epicsShareFunc void dbFreeEntry(DBENTRY *pdbentry);
50 epicsShareFunc void dbInitEntry(DBBASE *pdbbase,
51  DBENTRY *pdbentry);
52 
53 epicsShareFunc void dbFinishEntry(DBENTRY *pdbentry);
54 epicsShareFunc DBENTRY * dbCopyEntry(DBENTRY *pdbentry);
55 epicsShareFunc void dbCopyEntryContents(DBENTRY *pfrom,
56  DBENTRY *pto);
57 
58 epicsShareExtern int dbBptNotMonotonic;
59 
60 epicsShareFunc long dbReadDatabase(DBBASE **ppdbbase,
61  const char *filename, const char *path, const char *substitutions);
62 epicsShareFunc long dbReadDatabaseFP(DBBASE **ppdbbase,
63  FILE *fp, const char *path, const char *substitutions);
64 epicsShareFunc long dbPath(DBBASE *pdbbase, const char *path);
65 epicsShareFunc long dbAddPath(DBBASE *pdbbase, const char *path);
66 epicsShareFunc char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase,
67  const short key);
68 epicsShareFunc short dbGetPromptGroupKeyFromName(DBBASE *pdbbase,
69  const char *name);
70 epicsShareFunc long dbWriteRecord(DBBASE *ppdbbase,
71  const char *filename, const char *precordTypename, int level);
72 epicsShareFunc long dbWriteRecordFP(DBBASE *ppdbbase,
73  FILE *fp, const char *precordTypename, int level);
74 epicsShareFunc long dbWriteMenu(DBBASE *pdbbase,
75  const char *filename, const char *menuName);
76 epicsShareFunc long dbWriteMenuFP(DBBASE *pdbbase,
77  FILE *fp, const char *menuName);
78 epicsShareFunc long dbWriteRecordType(DBBASE *pdbbase,
79  const char *filename, const char *recordTypeName);
80 epicsShareFunc long dbWriteRecordTypeFP(DBBASE *pdbbase,
81  FILE *fp, const char *recordTypeName);
82 epicsShareFunc long dbWriteDevice(DBBASE *pdbbase,
83  const char *filename);
84 epicsShareFunc long dbWriteDeviceFP(DBBASE *pdbbase, FILE *fp);
85 epicsShareFunc long dbWriteDriver(DBBASE *pdbbase,
86  const char *filename);
87 epicsShareFunc long dbWriteDriverFP(DBBASE *pdbbase, FILE *fp);
88 epicsShareFunc long dbWriteLinkFP(DBBASE *pdbbase, FILE *fp);
89 epicsShareFunc long dbWriteRegistrarFP(DBBASE *pdbbase, FILE *fp);
90 epicsShareFunc long dbWriteFunctionFP(DBBASE *pdbbase, FILE *fp);
91 epicsShareFunc long dbWriteVariableFP(DBBASE *pdbbase, FILE *fp);
92 epicsShareFunc long dbWriteBreaktable(DBBASE *pdbbase,
93  const char *filename);
94 epicsShareFunc long dbWriteBreaktableFP(DBBASE *pdbbase,
95  FILE *fp);
96 
97 epicsShareFunc long dbFindRecordType(DBENTRY *pdbentry,
98  const char *recordTypename);
99 epicsShareFunc long dbFirstRecordType(DBENTRY *pdbentry);
100 epicsShareFunc long dbNextRecordType(DBENTRY *pdbentry);
101 epicsShareFunc char * dbGetRecordTypeName(DBENTRY *pdbentry);
102 epicsShareFunc int dbGetNRecordTypes(DBENTRY *pdbentry);
103 epicsShareFunc long dbPutRecordAttribute(DBENTRY *pdbentry,
104  const char *name, const char*value);
105 epicsShareFunc long dbGetRecordAttribute(DBENTRY *pdbentry,
106  const char *name);
107 epicsShareFunc long dbGetAttributePart(DBENTRY *pdbentry,
108  const char **ppname);
109 
110 epicsShareFunc long dbFirstField(DBENTRY *pdbentry, int dctonly);
111 epicsShareFunc long dbNextField(DBENTRY *pdbentry, int dctonly);
112 epicsShareFunc int dbGetNFields(DBENTRY *pdbentry, int dctonly);
113 epicsShareFunc char * dbGetFieldName(DBENTRY *pdbentry);
114 epicsShareFunc int dbGetFieldDbfType(DBENTRY *pdbentry);
115 epicsShareFunc char * dbGetDefault(DBENTRY *pdbentry);
116 epicsShareFunc char * dbGetPrompt(DBENTRY *pdbentry);
117 epicsShareFunc int dbGetPromptGroup(DBENTRY *pdbentry);
118 
119 epicsShareFunc long dbCreateRecord(DBENTRY *pdbentry,
120  const char *pname);
121 epicsShareFunc long dbDeleteRecord(DBENTRY *pdbentry);
122 epicsShareFunc long dbFreeRecords(DBBASE *pdbbase);
123 epicsShareFunc long dbFindRecordPart(DBENTRY *pdbentry,
124  const char **ppname);
125 epicsShareFunc long dbFindRecord(DBENTRY *pdbentry,
126  const char *pname);
127 
128 epicsShareFunc long dbFirstRecord(DBENTRY *pdbentry);
129 epicsShareFunc long dbNextRecord(DBENTRY *pdbentry);
130 epicsShareFunc int dbGetNRecords(DBENTRY *pdbentry);
131 epicsShareFunc int dbGetNAliases(DBENTRY *pdbentry);
132 epicsShareFunc char * dbGetRecordName(DBENTRY *pdbentry);
133 epicsShareFunc long dbCopyRecord(DBENTRY *pdbentry,
134  const char *newRecordName, int overWriteOK);
135 
136 epicsShareFunc long dbVisibleRecord(DBENTRY *pdbentry);
137 epicsShareFunc long dbInvisibleRecord(DBENTRY *pdbentry);
138 epicsShareFunc int dbIsVisibleRecord(DBENTRY *pdbentry);
139 
140 epicsShareFunc long dbCreateAlias(DBENTRY *pdbentry,
141  const char *paliasName);
142 epicsShareFunc int dbIsAlias(DBENTRY *pdbentry);
143 /* Follow alias to actual record */
144 epicsShareFunc int dbFollowAlias(DBENTRY *pdbentry);
145 epicsShareFunc long dbDeleteAliases(DBENTRY *pdbentry);
146 
147 epicsShareFunc long dbFindFieldPart(DBENTRY *pdbentry,
148  const char **ppname);
149 epicsShareFunc long dbFindField(DBENTRY *pdbentry,
150  const char *pfieldName);
151 epicsShareFunc int dbFoundField(DBENTRY *pdbentry);
152 epicsShareFunc char * dbGetString(DBENTRY *pdbentry);
153 epicsShareFunc long dbPutString(DBENTRY *pdbentry,
154  const char *pstring);
155 epicsShareFunc char * dbVerify(DBENTRY *pdbentry,
156  const char *pstring);
157 epicsShareFunc int dbIsDefaultValue(DBENTRY *pdbentry);
158 
159 epicsShareFunc long dbFirstInfo(DBENTRY *pdbentry);
160 epicsShareFunc long dbNextInfo(DBENTRY *pdbentry);
161 epicsShareFunc long dbFindInfo(DBENTRY *pdbentry,
162  const char *name);
163 epicsShareFunc long dbNextMatchingInfo(DBENTRY *pdbentry,
164  const char *pattern);
165 epicsShareFunc long dbDeleteInfo(DBENTRY *pdbentry);
166 epicsShareFunc const char * dbGetInfoName(DBENTRY *pdbentry);
167 epicsShareFunc const char * dbGetInfoString(DBENTRY *pdbentry);
168 epicsShareFunc long dbPutInfoString(DBENTRY *pdbentry,
169  const char *string);
170 epicsShareFunc long dbPutInfoPointer(DBENTRY *pdbentry,
171  void *pointer);
172 epicsShareFunc void * dbGetInfoPointer(DBENTRY *pdbentry);
173 epicsShareFunc const char * dbGetInfo(DBENTRY *pdbentry,
174  const char *name);
175 epicsShareFunc long dbPutInfo(DBENTRY *pdbentry,
176  const char *name, const char *string);
177 
178 epicsShareFunc brkTable * dbFindBrkTable(DBBASE *pdbbase,
179  const char *name);
180 
181 epicsShareFunc const char * dbGetFieldTypeString(int dbfType);
182 epicsShareFunc int dbFindFieldType(const char *type);
183 
184 epicsShareFunc dbMenu * dbFindMenu(DBBASE *pdbbase,
185  const char *name);
186 epicsShareFunc char ** dbGetMenuChoices(DBENTRY *pdbentry);
187 epicsShareFunc int dbGetMenuIndex(DBENTRY *pdbentry);
188 epicsShareFunc long dbPutMenuIndex(DBENTRY *pdbentry, int index);
189 epicsShareFunc int dbGetNMenuChoices(DBENTRY *pdbentry);
190 epicsShareFunc char * dbGetMenuStringFromIndex(DBENTRY *pdbentry,
191  int index);
192 epicsShareFunc int dbGetMenuIndexFromString(DBENTRY *pdbentry,
193  const char *choice);
194 
195 epicsShareFunc drvSup * dbFindDriver(dbBase *pdbbase,
196  const char *name);
197 epicsShareFunc char * dbGetRelatedField(DBENTRY *pdbentry);
198 
199 epicsShareFunc linkSup * dbFindLinkSup(dbBase *pdbbase,
200  const char *name);
201 
202 epicsShareFunc int dbGetNLinks(DBENTRY *pdbentry);
203 epicsShareFunc long dbGetLinkField(DBENTRY *pdbentry, int index);
204 
205 /* Dump routines */
206 epicsShareFunc void dbDumpPath(DBBASE *pdbbase);
207 epicsShareFunc void dbDumpRecord(DBBASE *pdbbase,
208  const char *precordTypename, int level);
209 epicsShareFunc void dbDumpMenu(DBBASE *pdbbase,
210  const char *menuName);
211 epicsShareFunc void dbDumpRecordType(DBBASE *pdbbase,
212  const char *recordTypeName);
213 epicsShareFunc void dbDumpField(DBBASE *pdbbase,
214  const char *recordTypeName, const char *fname);
215 epicsShareFunc void dbDumpDevice(DBBASE *pdbbase,
216  const char *recordTypeName);
217 epicsShareFunc void dbDumpDriver(DBBASE *pdbbase);
218 epicsShareFunc void dbDumpLink(DBBASE *pdbbase);
219 epicsShareFunc void dbDumpRegistrar(DBBASE *pdbbase);
220 epicsShareFunc void dbDumpFunction(DBBASE *pdbbase);
221 epicsShareFunc void dbDumpVariable(DBBASE *pdbbase);
222 epicsShareFunc void dbDumpBreaktable(DBBASE *pdbbase,
223  const char *name);
224 epicsShareFunc void dbPvdDump(DBBASE *pdbbase, int verbose);
225 epicsShareFunc void dbReportDeviceConfig(DBBASE *pdbbase,
226  FILE *report);
227 
228 /* Misc useful routines*/
229 #define dbCalloc(nobj,size) callocMustSucceed(nobj,size,"dbCalloc")
230 #define dbMalloc(size) mallocMustSucceed(size,"dbMalloc")
231 epicsShareFunc void dbCatString(char **string, int *stringLength,
232  char *pnew, char *separator);
233 
234 extern int dbStaticDebug;
235 extern int dbConvertStrict;
236 
237 #define S_dbLib_recordTypeNotFound (M_dbLib|1) /* Record Type does not exist */
238 #define S_dbLib_recExists (M_dbLib|3) /* Record Already exists */
239 #define S_dbLib_recNotFound (M_dbLib|5) /* Record Not Found */
240 #define S_dbLib_flddesNotFound (M_dbLib|7) /* Field Description Not Found */
241 #define S_dbLib_fieldNotFound (M_dbLib|9) /* Field Not Found */
242 #define S_dbLib_badField (M_dbLib|11) /* Bad Field value */
243 #define S_dbLib_menuNotFound (M_dbLib|13) /* Menu not found */
244 #define S_dbLib_badLink (M_dbLib|15) /* Bad Link Field */
245 #define S_dbLib_nameLength (M_dbLib|17) /* Record Name is too long */
246 #define S_dbLib_noRecSup (M_dbLib|19) /* Record support not found */
247 #define S_dbLib_strLen (M_dbLib|21) /* String is too long */
248 #define S_dbLib_noSizeOffset (M_dbLib|23) /* Missing SizeOffset Routine - No record support? */
249 #define S_dbLib_outMem (M_dbLib|27) /* Out of memory */
250 #define S_dbLib_infoNotFound (M_dbLib|29) /* Info item Not Found */
251 
252 #ifdef __cplusplus
253 }
254 #endif
255 
256 #endif /*INCdbStaticLibh*/
Definition: link.h:175
Definition: dbBase.h:25
Routines for code that can&#39;t continue or return after an error.
Definition: dbBase.h:33
Definition: dbBase.h:171
Mark external symbols and entry points for shared libraries.