EPICS Base  7.0.8.1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 "dbCoreAPI.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 DBCORE_API DBBASE * dbAllocBase(void);
47 DBCORE_API void dbFreeBase(DBBASE *pdbbase);
48 DBCORE_API DBENTRY * dbAllocEntry(DBBASE *pdbbase);
49 DBCORE_API void dbFreeEntry(DBENTRY *pdbentry);
50 DBCORE_API void dbInitEntry(DBBASE *pdbbase,
51  DBENTRY *pdbentry);
52 
53 DBCORE_API void dbFinishEntry(DBENTRY *pdbentry);
54 DBCORE_API DBENTRY * dbCopyEntry(const DBENTRY *pdbentry);
55 DBCORE_API void dbCopyEntryContents(const DBENTRY *pfrom,
56  DBENTRY *pto);
57 
58 DBCORE_API extern int dbBptNotMonotonic;
59 
68 DBCORE_API long dbReadDatabase(DBBASE **ppdbbase,
69  const char *filename, const char *path, const char *substitutions);
80 DBCORE_API long dbReadDatabaseFP(DBBASE **ppdbbase,
81  FILE *fp, const char *path, const char *substitutions);
82 DBCORE_API long dbPath(DBBASE *pdbbase, const char *path);
83 DBCORE_API long dbAddPath(DBBASE *pdbbase, const char *path);
84 DBCORE_API char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase,
85  const short key);
86 DBCORE_API short dbGetPromptGroupKeyFromName(DBBASE *pdbbase,
87  const char *name);
88 DBCORE_API long dbWriteRecord(DBBASE *ppdbbase,
89  const char *filename, const char *precordTypename, int level);
90 DBCORE_API long dbWriteRecordFP(DBBASE *ppdbbase,
91  FILE *fp, const char *precordTypename, int level);
92 DBCORE_API long dbWriteMenu(DBBASE *pdbbase,
93  const char *filename, const char *menuName);
94 DBCORE_API long dbWriteMenuFP(DBBASE *pdbbase,
95  FILE *fp, const char *menuName);
96 DBCORE_API long dbWriteRecordType(DBBASE *pdbbase,
97  const char *filename, const char *recordTypeName);
98 DBCORE_API long dbWriteRecordTypeFP(DBBASE *pdbbase,
99  FILE *fp, const char *recordTypeName);
100 DBCORE_API long dbWriteDevice(DBBASE *pdbbase,
101  const char *filename);
102 DBCORE_API long dbWriteDeviceFP(DBBASE *pdbbase, FILE *fp);
103 DBCORE_API long dbWriteDriver(DBBASE *pdbbase,
104  const char *filename);
105 DBCORE_API long dbWriteDriverFP(DBBASE *pdbbase, FILE *fp);
106 DBCORE_API long dbWriteLinkFP(DBBASE *pdbbase, FILE *fp);
107 DBCORE_API long dbWriteRegistrarFP(DBBASE *pdbbase, FILE *fp);
108 DBCORE_API long dbWriteFunctionFP(DBBASE *pdbbase, FILE *fp);
109 DBCORE_API long dbWriteVariableFP(DBBASE *pdbbase, FILE *fp);
110 DBCORE_API long dbWriteBreaktable(DBBASE *pdbbase,
111  const char *filename);
112 DBCORE_API long dbWriteBreaktableFP(DBBASE *pdbbase,
113  FILE *fp);
114 
115 DBCORE_API long dbFindRecordType(DBENTRY *pdbentry,
116  const char *recordTypename);
117 DBCORE_API long dbFirstRecordType(DBENTRY *pdbentry);
118 DBCORE_API long dbNextRecordType(DBENTRY *pdbentry);
119 DBCORE_API char * dbGetRecordTypeName(DBENTRY *pdbentry);
120 DBCORE_API int dbGetNRecordTypes(DBENTRY *pdbentry);
121 DBCORE_API long dbPutRecordAttribute(DBENTRY *pdbentry,
122  const char *name, const char*value);
123 DBCORE_API long dbGetRecordAttribute(DBENTRY *pdbentry,
124  const char *name);
125 DBCORE_API long dbGetAttributePart(DBENTRY *pdbentry,
126  const char **ppname);
127 
128 DBCORE_API long dbFirstField(DBENTRY *pdbentry, int dctonly);
129 DBCORE_API long dbNextField(DBENTRY *pdbentry, int dctonly);
130 DBCORE_API int dbGetNFields(DBENTRY *pdbentry, int dctonly);
131 DBCORE_API char * dbGetFieldName(DBENTRY *pdbentry);
132 DBCORE_API int dbGetFieldDbfType(DBENTRY *pdbentry);
133 DBCORE_API char * dbGetDefault(DBENTRY *pdbentry);
134 DBCORE_API char * dbGetPrompt(DBENTRY *pdbentry);
135 DBCORE_API int dbGetPromptGroup(DBENTRY *pdbentry);
136 
137 DBCORE_API long dbCreateRecord(DBENTRY *pdbentry,
138  const char *pname);
139 DBCORE_API long dbDeleteRecord(DBENTRY *pdbentry);
140 DBCORE_API long dbFreeRecords(DBBASE *pdbbase);
141 DBCORE_API long dbFindRecordPart(DBENTRY *pdbentry,
142  const char **ppname);
143 DBCORE_API long dbFindRecord(DBENTRY *pdbentry,
144  const char *pname);
145 
146 DBCORE_API long dbFirstRecord(DBENTRY *pdbentry);
147 DBCORE_API long dbNextRecord(DBENTRY *pdbentry);
148 DBCORE_API int dbGetNRecords(DBENTRY *pdbentry);
149 DBCORE_API int dbGetNAliases(DBENTRY *pdbentry);
150 DBCORE_API char * dbGetRecordName(DBENTRY *pdbentry);
151 DBCORE_API long dbCopyRecord(DBENTRY *pdbentry,
152  const char *newRecordName, int overWriteOK);
153 
154 DBCORE_API long dbVisibleRecord(DBENTRY *pdbentry);
155 DBCORE_API long dbInvisibleRecord(DBENTRY *pdbentry);
156 DBCORE_API int dbIsVisibleRecord(DBENTRY *pdbentry);
157 
158 DBCORE_API long dbCreateAlias(DBENTRY *pdbentry,
159  const char *paliasName);
160 DBCORE_API int dbIsAlias(DBENTRY *pdbentry);
161 /* Follow alias to actual record */
162 DBCORE_API int dbFollowAlias(DBENTRY *pdbentry);
163 DBCORE_API long dbDeleteAliases(DBENTRY *pdbentry);
164 
165 DBCORE_API long dbFindFieldPart(DBENTRY *pdbentry,
166  const char **ppname);
167 DBCORE_API long dbFindField(DBENTRY *pdbentry,
168  const char *pfieldName);
169 DBCORE_API int dbFoundField(DBENTRY *pdbentry);
170 DBCORE_API char * dbGetString(DBENTRY *pdbentry);
171 DBCORE_API long dbPutString(DBENTRY *pdbentry,
172  const char *pstring);
173 DBCORE_API char * dbVerify(DBENTRY *pdbentry,
174  const char *pstring);
175 DBCORE_API int dbIsDefaultValue(DBENTRY *pdbentry);
176 
177 DBCORE_API long dbFirstInfo(DBENTRY *pdbentry);
178 DBCORE_API long dbNextInfo(DBENTRY *pdbentry);
179 DBCORE_API long dbFindInfo(DBENTRY *pdbentry,
180  const char *name);
181 DBCORE_API long dbNextMatchingInfo(DBENTRY *pdbentry,
182  const char *pattern);
183 DBCORE_API long dbDeleteInfo(DBENTRY *pdbentry);
184 DBCORE_API const char * dbGetInfoName(DBENTRY *pdbentry);
185 DBCORE_API const char * dbGetInfoString(DBENTRY *pdbentry);
186 DBCORE_API long dbPutInfoString(DBENTRY *pdbentry,
187  const char *string);
188 DBCORE_API long dbPutInfoPointer(DBENTRY *pdbentry,
189  void *pointer);
190 DBCORE_API void * dbGetInfoPointer(DBENTRY *pdbentry);
191 DBCORE_API const char * dbGetInfo(DBENTRY *pdbentry,
192  const char *name);
193 DBCORE_API long dbPutInfo(DBENTRY *pdbentry,
194  const char *name, const char *string);
195 
196 DBCORE_API brkTable * dbFindBrkTable(DBBASE *pdbbase,
197  const char *name);
198 
199 DBCORE_API const char * dbGetFieldTypeString(int dbfType);
200 DBCORE_API int dbFindFieldType(const char *type);
201 
202 DBCORE_API dbMenu * dbFindMenu(DBBASE *pdbbase,
203  const char *name);
204 DBCORE_API char ** dbGetMenuChoices(DBENTRY *pdbentry);
205 DBCORE_API int dbGetMenuIndex(DBENTRY *pdbentry);
206 DBCORE_API long dbPutMenuIndex(DBENTRY *pdbentry, int index);
207 DBCORE_API int dbGetNMenuChoices(DBENTRY *pdbentry);
208 DBCORE_API char * dbGetMenuStringFromIndex(DBENTRY *pdbentry,
209  int index);
210 DBCORE_API int dbGetMenuIndexFromString(DBENTRY *pdbentry,
211  const char *choice);
212 
213 DBCORE_API drvSup * dbFindDriver(dbBase *pdbbase,
214  const char *name);
215 DBCORE_API char * dbGetRelatedField(DBENTRY *pdbentry);
216 
217 DBCORE_API linkSup * dbFindLinkSup(dbBase *pdbbase,
218  const char *name);
219 
220 DBCORE_API int dbGetNLinks(DBENTRY *pdbentry);
221 DBCORE_API long dbGetLinkField(DBENTRY *pdbentry, int index);
222 
223 /* Dump routines */
224 DBCORE_API void dbDumpPath(DBBASE *pdbbase);
225 DBCORE_API void dbDumpRecord(DBBASE *pdbbase,
226  const char *precordTypename, int level);
227 DBCORE_API void dbDumpMenu(DBBASE *pdbbase,
228  const char *menuName);
229 DBCORE_API void dbDumpRecordType(DBBASE *pdbbase,
230  const char *recordTypeName);
231 DBCORE_API void dbDumpField(DBBASE *pdbbase,
232  const char *recordTypeName, const char *fname);
233 DBCORE_API void dbDumpDevice(DBBASE *pdbbase,
234  const char *recordTypeName);
235 DBCORE_API void dbDumpDriver(DBBASE *pdbbase);
236 DBCORE_API void dbDumpLink(DBBASE *pdbbase);
237 DBCORE_API void dbDumpRegistrar(DBBASE *pdbbase);
238 DBCORE_API void dbDumpFunction(DBBASE *pdbbase);
239 DBCORE_API void dbDumpVariable(DBBASE *pdbbase);
240 DBCORE_API void dbDumpBreaktable(DBBASE *pdbbase,
241  const char *name);
242 DBCORE_API void dbPvdDump(DBBASE *pdbbase, int verbose);
243 DBCORE_API void dbReportDeviceConfig(DBBASE *pdbbase,
244  FILE *report);
245 
246 /* Misc useful routines*/
247 #define dbCalloc(nobj,size) callocMustSucceed(nobj,size,"dbCalloc")
248 #define dbMalloc(size) mallocMustSucceed(size,"dbMalloc")
249 DBCORE_API void dbCatString(char **string, int *stringLength,
250  char *pnew, char *separator);
251 
252 extern int dbStaticDebug;
253 extern int dbConvertStrict;
254 
255 #define S_dbLib_recordTypeNotFound (M_dbLib|1) /* Record Type does not exist */
256 #define S_dbLib_recExists (M_dbLib|3) /* Record Already exists */
257 #define S_dbLib_recNotFound (M_dbLib|5) /* Record Not Found */
258 #define S_dbLib_flddesNotFound (M_dbLib|7) /* Field Description Not Found */
259 #define S_dbLib_fieldNotFound (M_dbLib|9) /* Field Not Found */
260 #define S_dbLib_badField (M_dbLib|11) /* Bad Field value */
261 #define S_dbLib_menuNotFound (M_dbLib|13) /* Menu not found */
262 #define S_dbLib_badLink (M_dbLib|15) /* Bad Link Field */
263 #define S_dbLib_nameLength (M_dbLib|17) /* Record Name is too long */
264 #define S_dbLib_noRecSup (M_dbLib|19) /* Record support not found */
265 #define S_dbLib_strLen (M_dbLib|21) /* String is too long */
266 #define S_dbLib_noSizeOffset (M_dbLib|23) /* Missing SizeOffset Routine - No record support? */
267 #define S_dbLib_outMem (M_dbLib|27) /* Out of memory */
268 #define S_dbLib_infoNotFound (M_dbLib|29) /* Info item Not Found */
269 
270 #ifdef __cplusplus
271 }
272 #endif
273 
274 #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:175