xresource.pp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. unit xresource;
  2. interface
  3. uses xlib;
  4. {***************************************************************
  5. *
  6. * Quark Management
  7. *
  8. ***************************************************************}
  9. type
  10. TXrmQuark = Integer;
  11. PXrmQuark = ^TXrmQuark;
  12. TXrmQuarkList = PXrmQuark;
  13. Const NULLQUARK = 0 ;
  14. type TXrmString = Pchar;
  15. const NULLSTRING = 0;
  16. { find quark for string, create new quark if none already exists }
  17. Function XrmStringToQuark( p1 : pchar ) : TXrmQuark;cdecl;
  18. Function XrmPermStringToQuark( p1 : pchar ) : TXrmQuark;cdecl;
  19. { find string for quark }
  20. Function XrmQuarkToString( p1 : TXrmQuark) : TXrmString;cdecl;
  21. Function XrmUniqueQuark : TXrmQuark;cdecl;
  22. {
  23. #define XrmStringsEqual(a1, a2) (strcmp(a1, a2) == 0)
  24. }
  25. {***************************************************************
  26. *
  27. * Conversion of Strings to Lists
  28. *
  29. ***************************************************************}
  30. type
  31. TXrmBinding = integer;
  32. TXrmBindingList = ^Integer;
  33. Const XrmBindTightly = 0;
  34. XrmBindLoosely = 1;
  35. procedure XrmStringToQuarkList(
  36. p1 : pchar { string };
  37. p2 : TXrmQuarkList { quarks_return }
  38. );cdecl;
  39. procedure XrmStringToBindingQuarkList(
  40. p1 : pchar { string };
  41. p2 : TXrmBindingList { bindings_return };
  42. p3 : TXrmQuarkList { quarks_return }
  43. );cdecl;
  44. {***************************************************************
  45. *
  46. * Name and Class lists.
  47. *
  48. ***************************************************************}
  49. type TXrmName = TXrmQuark;
  50. TXrmNameList = TXrmQuarkList ;
  51. {
  52. #define XrmNameToString(name) XrmQuarkToString(name)
  53. #define XrmStringToName(string) XrmStringToQuark(string)
  54. #define XrmStringToNameList(str, name) XrmStringToQuarkList(str, name)
  55. }
  56. TXrmClass = TXrmQuark;
  57. TXrmClassList = TXrmQuarkList;
  58. {
  59. #define XrmClassToString(c_class) XrmQuarkToString(c_class)
  60. #define XrmStringToClass(c_class) XrmStringToQuark(c_class)
  61. #define XrmStringToClassList(str,c_class) XrmStringToQuarkList(str, c_class)
  62. }
  63. {***************************************************************
  64. *
  65. * Resource Representation Types and Values
  66. *
  67. ***************************************************************}
  68. type TXrmRepresentation = TXrmQuark ;
  69. PXrmRepresentation = ^TXrmRepresentation;
  70. {
  71. #define XrmStringToRepresentation(string) XrmStringToQuark(string)
  72. #define XrmRepresentationToString(type) XrmQuarkToString(type)
  73. }
  74. type TXrmValue = record
  75. size : word;
  76. theaddr : TXPointer;
  77. end;
  78. PXrmValue = ^TXrmValue;
  79. TXrmValuePtr = PXrmValue;
  80. {***************************************************************
  81. *
  82. * Resource Manager Functions
  83. *
  84. ***************************************************************}
  85. {
  86. typedef struct _XrmHashBucketRec *XrmHashBucket;
  87. typedef XrmHashBucket *XrmHashTable;
  88. typedef XrmHashTable XrmSearchList[];
  89. typedef struct _XrmHashBucketRec *XrmDatabase;
  90. }
  91. Type TXrmHashBucket = pointer;
  92. TXrmHashTable = ^TXrmHashBucket;
  93. TXrmSearchList = ^TXrmHashTable;
  94. TXrmDatabase = pointer;
  95. PXrmDatabase = ^TXrmDatabase;
  96. procedure XrmDestroyDatabase(
  97. p1 : TXrmDatabase { database }
  98. );cdecl;
  99. Procedure XrmQPutResource(
  100. p1 : PXrmDatabase { database };
  101. p2 : TXrmBindingList { bindings };
  102. p3 : TXrmQuarkList { quarks };
  103. p4 : TXrmRepresentation { type };
  104. p5 : PXrmValue { value }
  105. );cdecl;
  106. Procedure XrmPutResource(
  107. p1 : PXrmDatabase { database };
  108. p2 : pchar { specifier };
  109. p3 : pchar { type };
  110. p4 : PXrmValue { value }
  111. );cdecl;
  112. Procedure XrmQPutStringResource(
  113. p1 : PXrmDatabase { database };
  114. p2 : TXrmBindingList { bindings };
  115. p3 : TXrmQuarkList { quarks };
  116. p4 : Pchar { value }
  117. );cdecl;
  118. Procedure XrmPutStringResource(
  119. P1 : PXrmDatabase { database };
  120. p2,p3 : pchar
  121. );cdecl;
  122. Procedure XrmPutLineResource(
  123. p1 : PXrmDatabase { database };
  124. p2 : pchar { line }
  125. );cdecl;
  126. Function XrmQGetResource(
  127. p1 : PXrmDatabase { database };
  128. p2 : TXrmNameList { quark_name };
  129. p3 : TXrmClassList { quark_class };
  130. p4 : PXrmRepresentation { quark_type_return };
  131. p5 : PXrmValue { value_return }
  132. ) : Integer;cdecl;
  133. Function XrmGetResource(
  134. p1 : TXrmDatabase { database };
  135. p2 : pchar { str_name };
  136. p3 : pchar { str_class };
  137. p4 : ppchar { str_type_return };
  138. p5 : PXrmValue { value_return }
  139. ) : Tbool;cdecl;
  140. Function XrmQGetSearchList(
  141. p1 : TXrmDatabase { database };
  142. p2 : TXrmNameList { names };
  143. p3 : TXrmClassList { classes };
  144. p4 : TXrmSearchList { list_return };
  145. p5 : integer { list_length }
  146. ) : Tbool;cdecl;
  147. Function XrmQGetSearchResource(
  148. P1 : TXrmSearchList { list };
  149. p2 : TXrmName { name };
  150. p3 : TXrmClass { class };
  151. p4 : PXrmRepresentation { type_return };
  152. p5 : PXrmValue { value_return }
  153. ) : TBool;cdecl;
  154. {***************************************************************
  155. *
  156. * Resource Database Management
  157. *
  158. ***************************************************************}
  159. procedure XrmSetDatabase(
  160. p1 : PDisplay { display };
  161. p2 : TXrmDatabase { database }
  162. );cdecl;
  163. Function XrmGetDatabase(
  164. p1 : PDisplay { display }
  165. ) : TXrmDatabase;cdecl;
  166. Function XrmGetFileDatabase(
  167. p1 : pchar { filename }
  168. ) : TXrmDatabase ;cdecl;
  169. Function XrmCombineFileDatabase(
  170. p1 : pchar { filename };
  171. p2 : PXrmDatabase { target };
  172. p3 : TBool { override }
  173. ) : TStatus ;cdecl;
  174. function XrmGetStringDatabase(
  175. p1 : pchar { data } { null terminated string }
  176. ) : TXrmDatabase ;cdecl;
  177. Procedure XrmPutFileDatabase(
  178. p1 : TXrmDatabase { database };
  179. p2: pchar { filename }
  180. );cdecl;
  181. Procedure XrmMergeDatabases(
  182. p1 : TXrmDatabase { source_db };
  183. p2 : PXrmDatabase { target_db }
  184. );cdecl;
  185. procedure XrmCombineDatabase(
  186. p1 : TXrmDatabase { source_db };
  187. p2 : PXrmDatabase { target_db };
  188. p3 : TBool { override }
  189. );cdecl;
  190. const
  191. XrmEnumAllLevels = 0;
  192. XrmEnumOneLevel = 1;
  193. {
  194. Function XrmEnumerateDatabase(
  195. XrmDatabase { db };
  196. XrmNameList { name_prefix };
  197. XrmClassList { class_prefix };
  198. int { mode };
  199. Bool (*)(#if NeedNestedPrototypes
  200. XrmDatabase* { db };
  201. XrmBindingList { bindings };
  202. XrmQuarkList { quarks };
  203. XrmRepresentation* { type };
  204. XrmValue* { value };
  205. XPointer { closure }
  206. ) { proc };
  207. XPointer { closure }
  208. ) : TBool;
  209. }
  210. Function XrmLocaleOfDatabase(
  211. P1 : TXrmDatabase { database }
  212. ) : Pchar;cdecl;
  213. {***************************************************************
  214. *
  215. * Command line option mapping to resource entries
  216. *
  217. ***************************************************************}
  218. Const
  219. XrmoptionNoArg = 0; { Value is specified in OptionDescRec.value }
  220. XrmoptionIsArg = 1; { Value is the option string itself }
  221. XrmoptionStickyArg = 2; { Value is characters immediately following option }
  222. XrmoptionSepArg = 3; { Value is next argument in argv }
  223. XrmoptionResArg = 4; { Resource and value in next argument in argv }
  224. XrmoptionSkipArg = 5; { Ignore this option and the next argument in argv }
  225. XrmoptionSkipLine = 6; { Ignore this option and the rest of argv }
  226. XrmoptionSkipNArgs = 7; { Ignore this option and the next
  227. OptionDescRes.value arguments in argv }
  228. Type TXrmOptionKind = Integer;
  229. TXrmOptionDescRec = record
  230. option : pchar; { Option abbreviation in argv }
  231. specifier : pchar; { Resource specifier }
  232. argKind : TXrmOptionKind; { Which style of option it is }
  233. value : TXpointer; { Value to provide if XrmoptionNoArg }
  234. end;
  235. PXrmOptionDescRec= ^TXrmOptionDescRec;
  236. TXrmOptionDescList = PXrmOptionDescRec;
  237. Procedure XrmParseCommand(
  238. p1 : TXrmDatabase { database };
  239. p2 : TXrmOptionDescList { table };
  240. p3 : integer { table_count };
  241. p4 : pchar { name };
  242. p5 : Pointer { argc_in_out };
  243. p6 : ppchar { argv_in_out }
  244. );cdecl;
  245. Implementation
  246. Function XrmStringToQuark( p1 : pchar ) : TXrmQuark; cdecl; external;
  247. Function XrmPermStringToQuark( p1 : pchar ) : TXrmQuark; cdecl; external;
  248. Function XrmQuarkToString( p1 : TXrmQuark) : TXrmString; cdecl; external;
  249. Function XrmUniqueQuark : TXrmQuark; cdecl; external;
  250. procedure XrmStringToQuarkList(
  251. p1 : pchar { string };
  252. p2 : TXrmQuarkList { quarks_return }
  253. ); cdecl; external;
  254. procedure XrmStringToBindingQuarkList(
  255. p1 : pchar { string };
  256. p2 : TXrmBindingList { bindings_return };
  257. p3 : TXrmQuarkList { quarks_return }
  258. ); cdecl; external;
  259. procedure XrmDestroyDatabase(
  260. p1 : TXrmDatabase { database }
  261. ); cdecl; external;
  262. Procedure XrmQPutResource(
  263. p1 : PXrmDatabase { database };
  264. p2 : TXrmBindingList { bindings };
  265. p3 : TXrmQuarkList { quarks };
  266. p4 : TXrmRepresentation { type };
  267. p5 : PXrmValue { value }
  268. ); cdecl; external;
  269. Procedure XrmPutResource(
  270. p1 : PXrmDatabase { database };
  271. p2 : pchar { specifier };
  272. p3 : pchar { type };
  273. p4 : PXrmValue { value }
  274. ); cdecl; external;
  275. Procedure XrmQPutStringResource(
  276. p1 : PXrmDatabase { database };
  277. p2 : TXrmBindingList { bindings };
  278. p3 : TXrmQuarkList { quarks };
  279. p4 : Pchar { value }
  280. ); cdecl; external;
  281. procedure XrmPutStringResource(
  282. P1 : PXrmDatabase { database };
  283. p2,p3 : pchar
  284. ); cdecl; external;
  285. Procedure XrmPutLineResource(
  286. p1 : PXrmDatabase { database };
  287. p2 : pchar { line }
  288. ); cdecl; external;
  289. Function XrmQGetResource(
  290. p1 : PXrmDatabase { database };
  291. p2 : TXrmNameList { quark_name };
  292. p3 : TXrmClassList { quark_class };
  293. p4 : PXrmRepresentation { quark_type_return };
  294. p5 : PXrmValue { value_return }
  295. ) : Integer; cdecl; external;
  296. Function XrmGetResource(
  297. p1 : TXrmDatabase { database };
  298. p2 : pchar { str_name };
  299. p3 : pchar { str_class };
  300. p4 : ppchar { str_type_return };
  301. p5 : PXrmValue { value_return }
  302. ) : Tbool; cdecl; external;
  303. Function XrmQGetSearchList(
  304. p1 : TXrmDatabase { database };
  305. p2 : TXrmNameList { names };
  306. p3 : TXrmClassList { classes };
  307. p4 : TXrmSearchList { list_return };
  308. p5 : integer { list_length }
  309. ) : Tbool; cdecl; external;
  310. Function XrmQGetSearchResource(
  311. P1 : TXrmSearchList { list };
  312. p2 : TXrmName { name };
  313. p3 : TXrmClass { class };
  314. p4 : PXrmRepresentation { type_return };
  315. p5 : PXrmValue { value_return }
  316. ) : TBool; cdecl; external;
  317. procedure XrmSetDatabase(
  318. p1 : PDisplay { display };
  319. p2 : TXrmDatabase { database }
  320. ); cdecl; external;
  321. Function XrmGetDatabase(
  322. p1 : PDisplay { display }
  323. ) : TXrmDatabase; cdecl; external;
  324. Function XrmGetFileDatabase(
  325. p1 : pchar { filename }
  326. ) : TXrmDatabase ; cdecl; external;
  327. Function XrmCombineFileDatabase(
  328. p1 : pchar { filename };
  329. p2 : PXrmDatabase { target };
  330. p3 : TBool { override }
  331. ) : TStatus ; cdecl; external;
  332. function XrmGetStringDatabase(
  333. p1 : pchar { data } { null terminated string }
  334. ) : TXrmDatabase ; cdecl; external;
  335. Procedure XrmPutFileDatabase(
  336. p1 : TXrmDatabase { database };
  337. p2: pchar { filename }
  338. ); cdecl; external;
  339. Procedure XrmMergeDatabases(
  340. p1 : TXrmDatabase { source_db };
  341. p2 : PXrmDatabase { target_db }
  342. ); cdecl; external;
  343. procedure XrmCombineDatabase(
  344. p1 : TXrmDatabase { source_db };
  345. p2 : PXrmDatabase { target_db };
  346. p3 : TBool { override }
  347. ); cdecl; external;
  348. {
  349. Function XrmEnumerateDatabase(
  350. XrmDatabase { db };
  351. XrmNameList { name_prefix };
  352. XrmClassList { class_prefix };
  353. int { mode };
  354. Bool (*)(#if NeedNestedPrototypes
  355. XrmDatabase* { db };
  356. XrmBindingList { bindings };
  357. XrmQuarkList { quarks };
  358. XrmRepresentation* { type };
  359. XrmValue* { value };
  360. XPointer { closure }
  361. ) { proc };
  362. XPointer { closure }
  363. ) : TBool; cdecl; external;
  364. }
  365. Function XrmLocaleOfDatabase(
  366. P1 : TXrmDatabase { database }
  367. ) : Pchar; cdecl; external;
  368. Procedure XrmParseCommand(
  369. p1 : TXrmDatabase { database };
  370. p2 : TXrmOptionDescList { table };
  371. p3 : integer { table_count };
  372. p4 : pchar { name };
  373. p5 : Pointer { argc_in_out };
  374. p6 : ppchar { argv_in_out }
  375. ); cdecl; external;
  376. end.