PageRenderTime 60ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/ncl_ncarg-6.0.0/ni/src/lib/hlu/NresDB.h

#
C Header | 442 lines | 270 code | 66 blank | 106 comment | 3 complexity | 7b8d50abcedebfeeafaaf20eabb9ae8f MD5 | raw file
  1. /*
  2. * $Id: NresDB.h,v 1.6 2004-10-04 20:46:49 dbrown Exp $
  3. */
  4. /************************************************************************
  5. * *
  6. * Copyright (C) 1992 *
  7. * University Corporation for Atmospheric Research *
  8. * All Rights Reserved *
  9. * *
  10. ************************************************************************/
  11. /*
  12. * File: NresDB.h
  13. *
  14. * Author: Jeff W. Boote
  15. * National Center for Atmospheric Research
  16. * PO 3000, Boulder, Colorado
  17. *
  18. * Date: Mon Dec 14 14:39:40 MST 1992
  19. *
  20. * Description: This file was taken from the mit X distribution
  21. * and has been modified to support the hlu's. The
  22. * above copyright is for the changes to the code
  23. * while the copyright listed below is for the
  24. * original code that still exists in this file.
  25. */
  26. /***********************************************************
  27. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts,
  28. and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
  29. All Rights Reserved
  30. Permission to use, copy, modify, and distribute this software and its
  31. documentation for any purpose and without fee is hereby granted,
  32. provided that the above copyright notice appear in all copies and that
  33. both that copyright notice and this permission notice appear in
  34. supporting documentation, and that the names of Digital or MIT not be
  35. used in advertising or publicity pertaining to distribution of the
  36. software without specific, written prior permission.
  37. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  38. ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  39. DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  40. ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  41. WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  42. ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  43. SOFTWARE.
  44. ******************************************************************/
  45. #ifndef _NRESOURCE_H_
  46. #define _NRESOURCE_H_
  47. /****************************************************************
  48. ****************************************************************
  49. *** ***
  50. *** ***
  51. *** N Resource Manager Intrinsics ***
  52. *** ***
  53. *** ***
  54. ****************************************************************
  55. ****************************************************************/
  56. /****************************************************************
  57. * *
  58. * File management macros - may need to be redefined for OS *
  59. * *
  60. ****************************************************************/
  61. #include <sys/types.h>
  62. #include <sys/stat.h>
  63. #include <fcntl.h>
  64. #define OpenFile(name) open((name), O_RDONLY)
  65. #define CloseFile(fd) close((fd))
  66. #define ReadFile(fd,buf,size) read((fd), (buf), (size))
  67. #define GetSizeOfFile(name,size) \
  68. { \
  69. struct stat status_buffer; \
  70. if ( (stat((name), &status_buffer)) == -1 ) \
  71. size = -1; \
  72. else \
  73. size = status_buffer.st_size; \
  74. }
  75. /****************************************************************
  76. *
  77. * Memory Management
  78. *
  79. ****************************************************************/
  80. extern char *Npermalloc(
  81. #if NhlNeedProto
  82. unsigned int /* size */
  83. #endif
  84. );
  85. /****************************************************************
  86. *
  87. * Quark Management
  88. *
  89. ****************************************************************/
  90. typedef long NrmQuark, *NrmQuarkList;
  91. #define NrmNULLQUARK ((NrmQuark) 0)
  92. typedef char *NrmString;
  93. #define NrmNULLSTRING ((NrmString) 0)
  94. /* find quark for string, create new quark if none already exists */
  95. extern NrmQuark NrmStringToQuark(
  96. #if NhlNeedProto
  97. Const char* /* string */
  98. #endif
  99. );
  100. extern NrmQuark NrmPermStringToQuark(
  101. #if NhlNeedProto
  102. Const char* /* string */
  103. #endif
  104. );
  105. /* find string for quark */
  106. extern NrmString NrmQuarkToString(
  107. #if NhlNeedProto
  108. NrmQuark /* quark */
  109. #endif
  110. );
  111. extern NrmQuark NrmUniqueQuark(
  112. #if NhlNeedProto
  113. void
  114. #endif
  115. );
  116. #define NrmStringsEqual(a1, a2) (strcmp(a1, a2) == 0)
  117. /****************************************************************
  118. *
  119. * Conversion of Strings to Lists
  120. *
  121. ****************************************************************/
  122. typedef enum {NrmBindTightly, NrmBindLoosely} NrmBinding, *NrmBindingList;
  123. extern void NrmStringToQuarkList(
  124. #if NhlNeedProto
  125. Const char* /* string */,
  126. NrmQuarkList /* quarks_return */
  127. #endif
  128. );
  129. extern void NrmStringToBindingQuarkList(
  130. #if NhlNeedProto
  131. Const char* /* string */,
  132. NrmBindingList /* bindings_return */,
  133. NrmQuarkList /* quarks_return */
  134. #endif
  135. );
  136. /****************************************************************
  137. *
  138. * Name and Class lists.
  139. *
  140. ****************************************************************/
  141. typedef NrmQuark NrmName;
  142. typedef NrmQuarkList NrmNameList;
  143. #define NrmNameToString(name) NrmQuarkToString(name)
  144. #define NrmStringToName(string) NrmStringToQuark(string)
  145. #define NrmStringToNameList(str, name) NrmStringToQuarkList(str, name)
  146. typedef NrmQuark NrmClass;
  147. typedef NrmQuarkList NrmClassList;
  148. #define NrmClassToString(class) NrmQuarkToString(class)
  149. #define NrmStringToClass(class) NrmStringToQuark(class)
  150. #define NrmStringToClassList(str,class) NrmStringToQuarkList(str, class)
  151. /****************************************************************
  152. *
  153. * Resource Representation Types and Values
  154. *
  155. ****************************************************************/
  156. typedef NrmQuark NrmRepresentation;
  157. #define NrmStringToRepresentation(string) NrmStringToQuark(string)
  158. #define NrmRepresentationToString(type) NrmQuarkToString(type)
  159. typedef struct _NrmValue{
  160. unsigned int size;
  161. NhlArgVal data;
  162. NrmQuark typeQ; /* This is only valid inside converter funcs */
  163. } NrmValue, *NrmValuePtr;
  164. /****************************************************************
  165. *
  166. * Resource Manager Functions
  167. *
  168. ****************************************************************/
  169. typedef struct _NrmHashBucketRec *NrmHashBucket;
  170. typedef NrmHashBucket *NrmHashTable;
  171. typedef NrmHashTable NrmSearchList[];
  172. typedef struct _NrmHashBucketRec *NrmDatabase;
  173. extern void NrmDestroyDB(
  174. #if NhlNeedProto
  175. NrmDatabase /* database */
  176. #endif
  177. );
  178. extern void NrmQPutResource(
  179. #if NhlNeedProto
  180. NrmDatabase* /* database */,
  181. NrmBindingList /* bindings */,
  182. NrmQuarkList /* quarks */,
  183. NrmRepresentation /* type */,
  184. NrmValue* /* value */
  185. #endif
  186. );
  187. extern void NrmPutResource(
  188. #if NhlNeedProto
  189. NrmDatabase* /* database */,
  190. Const char* /* specifier */,
  191. Const char* /* type */,
  192. NrmValue* /* value */
  193. #endif
  194. );
  195. extern void NrmQPutStringResource(
  196. #if NhlNeedProto
  197. NrmDatabase* /* database */,
  198. NrmBindingList /* bindings */,
  199. NrmQuarkList /* quarks */,
  200. Const char* /* value */
  201. #endif
  202. );
  203. extern void NrmPutStringRes(
  204. #if NhlNeedProto
  205. NrmDatabase*, /* database */
  206. Const char*, /* specifier */
  207. Const char* /* value */
  208. #endif
  209. );
  210. extern void NrmPutLineResource(
  211. #if NhlNeedProto
  212. NrmDatabase* /* database */,
  213. Const char* /* line */
  214. #endif
  215. );
  216. extern NhlBoolean NrmQGetResource(
  217. #if NhlNeedProto
  218. NrmDatabase /* database */,
  219. NrmNameList /* quark_name */,
  220. NrmClassList /* quark_class */,
  221. NrmRepresentation* /* quark_type_return */,
  222. NrmValue* /* value_return */
  223. #endif
  224. );
  225. extern NhlBoolean NrmGetResource(
  226. #if NhlNeedProto
  227. NrmDatabase /* database */,
  228. Const char* /* str_name */,
  229. Const char* /* str_class */,
  230. char** /* str_type_return */,
  231. NrmValue* /* value_return */
  232. #endif
  233. );
  234. extern NhlBoolean NrmQGetSearchList(
  235. #if NhlNeedProto
  236. NrmDatabase /* database */,
  237. NrmNameList /* names */,
  238. NrmClassList /* classes */,
  239. NrmSearchList /* list_return */,
  240. int /* list_length */
  241. #endif
  242. );
  243. extern NhlBoolean NrmGetQResFromList(
  244. #if NhlNeedProto
  245. NrmSearchList /* list */,
  246. NrmName /* name */,
  247. NrmClass /* class */,
  248. NrmRepresentation* /* type_return */,
  249. NrmValue* /* value_return */
  250. #endif
  251. );
  252. /****************************************************************
  253. *
  254. * Resource Database Management
  255. *
  256. ****************************************************************/
  257. extern NrmDatabase NrmGetFileDB(
  258. #if NhlNeedProto
  259. Const char* /* filename */
  260. #endif
  261. );
  262. extern int NrmCombineFileDB(
  263. #if NhlNeedProto
  264. Const char* /* filename */,
  265. NrmDatabase* /* target */,
  266. NhlBoolean /* override */
  267. #endif
  268. );
  269. extern NrmDatabase NrmGetStringDatabase(
  270. #if NhlNeedProto
  271. Const char* /* data */ /* null terminated string */
  272. #endif
  273. );
  274. extern void NrmPutFileDatabase(
  275. #if NhlNeedProto
  276. NrmDatabase /* database */,
  277. Const char* /* filename */
  278. #endif
  279. );
  280. extern void NrmMergeDatabases(
  281. #if NhlNeedProto
  282. NrmDatabase /* source_db */,
  283. NrmDatabase* /* target_db */
  284. #endif
  285. );
  286. extern void NrmCombineDatabase(
  287. #if NhlNeedProto
  288. NrmDatabase /* source_db */,
  289. NrmDatabase* /* target_db */,
  290. NhlBoolean /* override */
  291. #endif
  292. );
  293. #define NrmEnumAllLevels 0
  294. #define NrmEnumOneLevel 1
  295. typedef NhlBoolean (*NrmDBEnumProc)(
  296. #if NhlNeedProto
  297. NrmDatabase *db,
  298. NrmBindingList bindings,
  299. NrmQuarkList quarks,
  300. NrmRepresentation *type,
  301. NrmValue *value,
  302. NhlPointer closure
  303. #endif
  304. );
  305. extern NhlBoolean NrmEnumerateDatabase(
  306. #if NhlNeedProto
  307. NrmDatabase /* db */,
  308. NrmNameList /* name_prefix */,
  309. NrmClassList /* class_prefix */,
  310. int /* mode */,
  311. NrmDBEnumProc /* proc */,
  312. NhlPointer /* closure */
  313. #endif
  314. );
  315. extern char *NrmLocaleOfDatabase(
  316. #if NhlNeedProto
  317. NrmDatabase /* database */
  318. #endif
  319. );
  320. /****************************************************************
  321. *
  322. * Command line option mapping to resource entries
  323. *
  324. ****************************************************************/
  325. typedef enum {
  326. NrmoptionNoArg, /* Value is specified in OptionDescRec.value */
  327. NrmoptionIsArg, /* Value is the option string itself */
  328. NrmoptionStickyArg, /* Value is characters immediately following option */
  329. NrmoptionSepArg, /* Value is next argument in argv */
  330. NrmoptionResArg, /* Resource and value in next argument in argv */
  331. NrmoptionSkipArg, /* Ignore this option and the next argument in argv */
  332. NrmoptionSkipLine, /* Ignore this option and the rest of argv */
  333. NrmoptionSkipNArgs /* Ignore this option and the next
  334. OptionDescRes.value arguments in argv */
  335. } NrmOptionKind;
  336. typedef struct {
  337. char *option; /* Option abbreviation in argv */
  338. char *specifier; /* Resource specifier */
  339. NrmOptionKind argKind; /* Which style of option it is */
  340. NhlPointer value; /* Value to provide if NrmoptionNoArg */
  341. } NrmOptionDescRec, *NrmOptionDescList;
  342. extern void NrmParseCommand(
  343. #if NhlNeedProto
  344. NrmDatabase* /* database */,
  345. NrmOptionDescList /* table */,
  346. Const char* /* name */,
  347. int* /* argc_in_out */,
  348. char** /* argv_in_out */
  349. #endif
  350. );
  351. extern void _NrmInitialize(
  352. #if NhlNeedProto
  353. void
  354. #endif
  355. );
  356. extern NhlBoolean NrmQinQList(
  357. #if NhlNeedProto
  358. NrmQuarkList,
  359. NrmQuark
  360. #endif
  361. );
  362. typedef unsigned int Signature;
  363. extern NrmQuark _NrmInternalStringToQuark(
  364. #if NhlNeedProto
  365. Const char *name,
  366. int len,
  367. Signature sig,
  368. NhlBoolean permstring
  369. #endif
  370. );
  371. #endif /* _NRESOURCE_H_ */
  372. /* DON'T ADD STUFF AFTER THIS #endif */