pdilib.pp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. {$MACRO ON}
  2. (******************************************************************************
  3. *
  4. * Copyright (c) 2000 Palm, Inc. or its subsidiaries.
  5. * All rights reserved.
  6. *
  7. * File: PdiLib.h
  8. *
  9. * Release: Palm OS SDK 4.0 (63220)
  10. *
  11. * Description:
  12. * Public API of versit lib
  13. *
  14. * History:
  15. * Jan 19, 2000 Created by Alain BASTY
  16. *
  17. *****************************************************************************)
  18. unit pdilib;
  19. interface
  20. uses palmos, libtraps, errorbase, textmgr, udamgr, pdiconst;
  21. (*******************************************************************
  22. * Unified data access types and macros
  23. *******************************************************************)
  24. (*******************************************************************
  25. * Pdi library built-in name constants (default dictionary)
  26. *******************************************************************)
  27. // Constants for vObject Names id, (PR)operties (N)ames id
  28. // for (PA)rameters (N)ames id and (PA)rameters (V)alues id
  29. (*******************************************************************
  30. * Internal library name which can be passed to SysLibFind()
  31. *******************************************************************)
  32. const
  33. kPdiLibName = 'Pdi.lib';
  34. (*******************************************************************
  35. * Pdi Library function trap ID's
  36. *******************************************************************)
  37. PdiLibTrapReaderNew = sysLibTrapCustom;
  38. PdiLibTrapReaderDelete = sysLibTrapCustom + 1;
  39. PdiLibTrapWriterNew = sysLibTrapCustom + 2;
  40. PdiLibTrapWriterDelete = sysLibTrapCustom + 3;
  41. PdiLibTrapReadProperty = sysLibTrapCustom + 4;
  42. PdiLibTrapReadPropertyField = sysLibTrapCustom + 5;
  43. PdiLibTrapReadPropertyName = sysLibTrapCustom + 6;
  44. PdiLibTrapReadParameter = sysLibTrapCustom + 7;
  45. PdiLibTrapDefineResizing = sysLibTrapCustom + 8;
  46. PdiLibTrapEnterObject = sysLibTrapCustom + 9;
  47. PdiLibTrapWriteBeginObject = sysLibTrapCustom + 10;
  48. PdiLibTrapWriteProperty = sysLibTrapCustom + 11;
  49. PdiLibTrapWriteParameter = sysLibTrapCustom + 12;
  50. PdiLibTrapWritePropertyValue = sysLibTrapCustom + 13;
  51. PdiLibTrapWritePropertyFields = sysLibTrapCustom + 14;
  52. PdiLibTrapWritePropertyBinaryValue = sysLibTrapCustom + 15;
  53. PdiLibTrapSetEncoding = sysLibTrapCustom + 16;
  54. PdiLibTrapSetCharset = sysLibTrapCustom + 17;
  55. PdiLibTrapWritePropertyStr = sysLibTrapCustom + 18;
  56. PdiLibTrapWriteParameterStr = sysLibTrapCustom + 19;
  57. PdiLibTrapDefineReaderDictionary = sysLibTrapCustom + 20;
  58. PdiLibTrapDefineWriterDictionary = sysLibTrapCustom + 21;
  59. (*******************************************************************
  60. * Pdi Library result codes
  61. *******************************************************************)
  62. pdiErrRead = pdiErrorClass or 1;
  63. pdiErrWrite = pdiErrorClass or 2;
  64. pdiErrNoPropertyName = pdiErrorClass or 3;
  65. pdiErrNoPropertyValue = pdiErrorClass or 4;
  66. pdiErrMoreChars = pdiErrorClass or 5;
  67. pdiErrNoMoreFields = pdiErrorClass or 6;
  68. pdiErrOpenFailed = pdiErrorClass or 7;
  69. pdiErrCloseFailed = pdiErrorClass or 8;
  70. (*******************************************************************
  71. * Pdi library constants
  72. *******************************************************************)
  73. kPdiASCIIEncoding = 0; // consider ascii value
  74. kPdiQPEncoding = kPdiPAV_ENCODING_QUOTED_PRINTABLE; // value must be QP encoded (write) or is QP encoded (read)
  75. kPdiB64Encoding = kPdiPAV_ENCODING_BASE64; // value must be B64 encoded (write) or is B64 encoded (read)
  76. kPdiBEncoding = kPdiPAV_ENCODING_B; // same as above but ENCODING=B in place of ENCODING=BASE64
  77. kPdiEscapeEncoding = UInt16($8000); // special encoding where newline are backslashed
  78. kPdiNoEncoding = UInt16($8001); // value must not be encoded (write)
  79. // Constants for structured property values
  80. kPdiNoFields = UInt16(0); // Consider property value has just one field
  81. kPdiCommaFields = UInt16(1); // Consider property value can have several fields comma separated
  82. kPdiSemicolonFields = UInt16(2); // Consider property value can have several fields semicolon separated
  83. kPdiDefaultFields = UInt16(4); // Accept default fields definition (dictionary information)
  84. kPdiConvertComma = UInt16(8); // Consider property value has just one field, commas are converted to '\n'
  85. kPdiConvertSemicolon = UInt16(16); // Consider property value has just one field, semicolons are converted to '\n'
  86. // Constants to manage parser/generator behavior
  87. // Generator behavior
  88. kPdiEnableFolding = UInt16(1);
  89. kPdiEnableQuotedPrintable = UInt16(2);
  90. kPdiEscapeMultiFieldValues = UInt16(4); // Earlier PalmOS compatiblity
  91. kPdiEnableB = UInt16(8); // New B encoding type (in place of base64)
  92. kPdiPalmCompatibility = kPdiEscapeMultiFieldValues or kPdiEnableQuotedPrintable;
  93. // Parser behavior, currently the open parser is OK
  94. // Maybe future evolution will declare new constants
  95. kPdiOpenParser = UInt16(16); // Generic parser
  96. // Constants to manage writting of values
  97. kPdiWriteData = UInt16(0); // No charset computation (non text values)
  98. kPdiWriteText = UInt16(8); // charset computation
  99. kPdiWriteMultiline = UInt16(16); // if present: must encode else encoding is determinated by charset
  100. // Constant to manage growing buffers
  101. kPdiResizableBuffer = UInt16($FFFF); // Special value to indicate a resizable buffer (handle based)
  102. kPdiDefaultBufferMaxSize = UInt16($3FFF); // Maximum size of a resizable buffer non including terminal 0
  103. kPdiDefaultBufferDeltaSize = UInt16($0010); // Delta (& minimum) size of resizable buffer
  104. // event mask of automata
  105. kPdiEOFEventMask = UInt16(1);
  106. kPdiGroupNameEventMask = UInt16(2); // A group name is found
  107. kPdiPropertyNameEventMask = UInt16(4); // A property name is found
  108. kPdiParameterNameEventMask = UInt16(8); // A parameter name is found
  109. kPdiParameterValueEventMask = UInt16(16); // A parameter value is found
  110. kPdiPropertyDefinedEventMask = UInt16(32); // A property definition is found (the ':' separator is reached)
  111. kPdiPropertyValueEventMask = UInt16(64); // An entire property value is found
  112. kPdiPropertyValueFieldEventMask = UInt16(128); // A value field is found (';' separated)
  113. kPdiPropertyValueItemEventMask = UInt16(256); // A value item is found (',' separated)
  114. kPdiPropertyValueMoreCharsEventMask = UInt16(512); // The application didn't provide a large enought buffer: more chars must be read
  115. kPdiBeginObjectEventMask = UInt16(1024); // BEGIN reached
  116. kPdiEndObjectEventMask = UInt16(2048); // END reached
  117. kPdiPropertyValueCRLFEventMask = UInt16(4096); // A value item is found (',' separated)
  118. (*******************************************************************
  119. * Public Data structures.
  120. *******************************************************************)
  121. type
  122. PdiDictionary = UInt8;
  123. PdiDictionaryPtr = ^PdiDictionary;
  124. type
  125. PdiReaderType = record
  126. error: Err; // last error
  127. encoding: UInt8; // Type of encoding of the property value
  128. fieldNum: UInt8;
  129. charset: CharEncodingType; // Charset of property value
  130. written: UInt16; // Current number of chars already written in buffer
  131. property_: UInt16; // ID of the current property
  132. propertyValueType: UInt16; // type of property value
  133. parameter: UInt16; // ID of the last parsed parameter name
  134. parameterPairs: array [0..7] of UInt32; // set of bits of parsed parameter values
  135. customFieldNumber: UInt16; // Value of X-PALM-CUSTOM (cutom fields)
  136. appData: Pointer; // General usage app dependent field
  137. pdiRefNum: UInt16; // The refNum of the Pdi library
  138. events: UInt16; // Mask of events (see kPdiXXXXEventMask constants)
  139. groupName: PChar;
  140. propertyName: PChar;
  141. parameterName: PChar;
  142. parameterValue: PChar;
  143. propertyValue: PChar;
  144. end;
  145. PdiReaderTag = PdiReaderType;
  146. PdiReaderPtr = ^PdiReaderType;
  147. type
  148. PdiWriterType = record
  149. error: Err; // last error
  150. encoding: UInt16; // Type of encoding of the property value
  151. charset: CharEncodingType; // Charset of property value
  152. appData: Pointer; // General usage app dependent field
  153. pdiRefNum: UInt16; // The refNum of the Pdi library
  154. end;
  155. _PdiWriter = PdiWriterType;
  156. PdiWriterPtr = ^PdiWriterType;
  157. (*******************************************************************
  158. * Library Open & Close functions
  159. *******************************************************************)
  160. function PdiLibOpen(libRefnum: UInt16): Err; syscall sysLibTrapOpen;
  161. function PdiLibClose(libRefnum: UInt16): Err; syscall sysLibTrapClose;
  162. (*******************************************************************
  163. * Reader / Writer initialization & finalization functions
  164. *******************************************************************)
  165. function PdiReaderNew(libRefnum: UInt16; input: UDAReaderPtr; version: UInt16): PdiReaderPtr; syscall PdiLibTrapReaderNew;
  166. procedure PdiReaderDelete(libRefnum: UInt16; ioReader: PdiReaderPtr); syscall PdiLibTrapReaderDelete;
  167. function PdiWriterNew(libRefnum: UInt16; output: UDAWriterPtr; version: UInt16): PdiWriterPtr; syscall PdiLibTrapWriterNew;
  168. procedure PdiWriterDelete(libRefnum: UInt16; ioWriter: PdiWriterPtr); syscall PdiLibTrapWriterDelete;
  169. (*******************************************************************
  170. * Read functions group.
  171. *******************************************************************)
  172. function PdiReadProperty(libRefnum: UInt16; ioReader: PdiReaderPtr): Err; syscall PdiLibTrapReadProperty;
  173. function PdiReadPropertyField(libRefnum: UInt16; ioReader: PdiReaderPtr; bufferPP: PCharPtr; bufferSize, readMode: UInt16): Err; syscall PdiLibTrapReadPropertyField;
  174. function PdiReadPropertyName(libRefnum: UInt16; ioReader: PdiReaderPtr): Err; syscall PdiLibTrapReadPropertyName;
  175. function PdiReadParameter(libRefnum: UInt16; ioReader: PdiReaderPtr): Err; syscall PdiLibTrapReadParameter;
  176. function PdiDefineResizing(libRefnum: UInt16; ioReader: PdiReaderPtr; deltaSize, maxSize: UInt16): Err; syscall PdiLibTrapDefineResizing;
  177. //!!!#define PdiParameterPairTest(reader, pair) \
  178. //!!! ((reader->parameterPairs[(pair) & 7] & ((UInt32) (1) << ((UInt8) (pair) >> 3))) != 0)
  179. (*******************************************************************
  180. * Recursive objects functions group.
  181. *******************************************************************)
  182. function PdiEnterObject(libRefnum: UInt16; ioReader: PdiReaderPtr): Err; syscall PdiLibTrapEnterObject;
  183. (*******************************************************************
  184. * Write functions group.
  185. *******************************************************************)
  186. function PdiWriteBeginObject(libRefnum: UInt16; ioWriter: PdiWriterPtr; objectNameID: UInt16): Err; syscall PdiLibTrapWriteBeginObject;
  187. function PdiWriteEndObject(libRefnum: UInt16; ioWriter: PdiWriterPtr; objectNameID: UInt16): Err; syscall PdiLibTrapWriteBeginObject;
  188. function PdiWriteProperty(libRefnum: UInt16; ioWriter: PdiWriterPtr; propertyNameID: UInt16): Err; syscall PdiLibTrapWriteProperty;
  189. function PdiWriteParameter(libRefnum: UInt16; ioWriter: PdiWriterPtr; parameter: UInt16; parameterName: Boolean): Err; syscall PdiLibTrapWriteParameter;
  190. function PdiWritePropertyValue(libRefnum:UInt16; ioWriter: PdiWriterPtr; buffer: PChar; options: UInt16): Err; syscall PdiLibTrapWritePropertyValue;
  191. function PdiWritePropertyFields(libRefnum: UInt16; ioWriter: PdiWriterPtr; fields: PCharPtr; fieldNumber, options: UInt16): Err; syscall PdiLibTrapWritePropertyFields;
  192. function PdiWritePropertyBinaryValue(libRefnum: UInt16; ioWriter: PdiWriterPtr; const buffer: PChar; size, options: UInt16): Err; syscall PdiLibTrapWritePropertyBinaryValue;
  193. function PdiSetEncoding(libRefnum: UInt16; ioWriter: PdiWriterPtr; encoding: UInt16): Err; syscall PdiLibTrapSetEncoding;
  194. function PdiSetCharset(libRefnum: UInt16; ioWriter: PdiWriterPtr; charset: CharEncodingType): Err; syscall PdiLibTrapSetCharset;
  195. function PdiWritePropertyStr(libRefnum: UInt16; ioWriter: PdiWriterPtr; const propertyName: PChar; writeMode, requiredFields: UInt8): Err; syscall PdiLibTrapWritePropertyStr;
  196. function PdiWriteParameterStr(libRefnum: UInt16; ioWriter: PdiWriterPtr; const parameterName, parameterValue: PChar): Err; syscall PdiLibTrapWriteParameterStr;
  197. (*******************************************************************
  198. * Customisation functions group
  199. *******************************************************************)
  200. function PdiDefineReaderDictionary(libRefnum: UInt16; ioReader: PdiReaderPtr; var dictionary: PdiDictionary; disableMainDictionary: Boolean): PdiDictionaryPtr; syscall PdiLibTrapDefineReaderDictionary;
  201. function PdiDefineWriterDictionary(libRefnum: UInt16; ioWriter: PdiWriterPtr; var dictionary: PdiDictionary; disableMainDictionary: Boolean): PdiDictionaryPtr; syscall PdiLibTrapDefineWriterDictionary;
  202. implementation
  203. end.