home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / srv.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  16.1 KB  |  534 lines

  1. //------------------------------------------------------------
  2. // Open Data Services header file: srv.h
  3. // Copyright (c) 1989, 1990, 1991, 1997 by Microsoft Corp.
  4. //
  5.  
  6. // Avoid double inclusion
  7. #ifndef _ODS_SRV_H_
  8. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  9. #define _ODS_SRV_H_
  10.  
  11. #include "windows.h"
  12.  
  13. // ODS uses pack(4) on all CPU types
  14. #pragma pack(4)
  15.  
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19.  
  20. // define model
  21. #if !defined( FAR )
  22. #define FAR far
  23. #endif
  24.  
  25. //------------------------------------------------------------
  26. // Formats of data types
  27. #if !defined(DBTYPEDEFS) // Do not conflict with DBLIB definitions
  28. #if !defined(MAXNUMERICLEN) // Do not conflict with ODBC definitions
  29.  
  30. #define DBTYPEDEFS
  31.  
  32. typedef unsigned char DBBOOL;
  33. typedef unsigned char DBBYTE;
  34. typedef unsigned char DBTINYINT;
  35. typedef short DBSMALLINT;
  36. typedef unsigned short DBUSMALLINT;
  37. typedef long DBINT;
  38. typedef char DBCHAR;
  39. typedef unsigned char DBBINARY;
  40. typedef unsigned char DBBIT;
  41. typedef double DBFLT8;
  42.  
  43. typedef struct srv_datetime 
  44. {    // Format for SRVDATETIME
  45.     long dtdays;            // number of days since 1/1/1900
  46.     unsigned long dttime;   // number 300th second since mid
  47. } DBDATETIME;                
  48.  
  49. typedef struct srv_money 
  50. {        // Format for SRVMONEY
  51.     long mnyhigh;
  52.     unsigned long mnylow;
  53. } DBMONEY;
  54.  
  55. typedef float DBFLT4;
  56. typedef long DBMONEY4;
  57.  
  58. typedef struct dbdatetime4 
  59. {    // Format for SRVDATETIM4
  60.     unsigned short numdays; // number of days since 1/1/1900
  61.     unsigned short nummins; // number of minutes sicne midnight
  62. } DBDATETIM4;
  63.  
  64. #define MAXNUMERICLEN    16
  65. typedef struct dbnumeric    
  66. {    // Format for SRVNUMERIC,SRVNUMERICN,SRVDECIMAL,SRVDECIMALN
  67.     BYTE precision;
  68.     BYTE scale;
  69.     BYTE sign;
  70.     BYTE val[MAXNUMERICLEN];
  71. } DBNUMERIC;
  72. typedef DBNUMERIC DBDECIMAL;
  73.  
  74. #endif  // #if !defined(MAXNUMERICLEN)
  75. #endif  // #if !defined( DBTYPEDEFS )
  76.  
  77. //------------------------------------------------------------
  78. // Constants used by APIs
  79.  
  80. // Type Tokens
  81. #define SRV_TDS_NULL           (BYTE) 0x1f
  82. #define SRV_TDS_TEXT           (BYTE) 0x23
  83. #define SRV_TDS_GUID           (BYTE) 0x24
  84. #define SRV_TDS_VARBINARY      (BYTE) 0x25
  85. #define SRV_TDS_INTN           (BYTE) 0x26
  86. #define SRV_TDS_VARCHAR        (BYTE) 0x27
  87. #define SRV_TDS_BINARY         (BYTE) 0x2d
  88. #define SRV_TDS_IMAGE          (BYTE) 0x22
  89. #define SRV_TDS_CHAR           (BYTE) 0x2f
  90. #define SRV_TDS_INT1           (BYTE) 0x30
  91. #define SRV_TDS_BIT            (BYTE) 0x32
  92. #define SRV_TDS_INT2           (BYTE) 0x34
  93. #define SRV_TDS_DECIMAL        (BYTE) 0x37
  94. #define SRV_TDS_INT4           (BYTE) 0x38
  95. #define SRV_TDS_DATETIM4       (BYTE) 0x3a
  96. #define SRV_TDS_FLT4           (BYTE) 0x3b
  97. #define SRV_TDS_MONEY          (BYTE) 0x3c
  98. #define SRV_TDS_DATETIME       (BYTE) 0x3d
  99. #define SRV_TDS_FLT8           (BYTE) 0x3e
  100. #define SRV_TDS_NUMERIC        (BYTE) 0x3f
  101. #define SRV_TDS_NTEXT           (BYTE) 0x63
  102. #define SRV_TDS_BITN           (BYTE) 0x68
  103. #define SRV_TDS_DECIMALN       (BYTE) 0x6a
  104. #define SRV_TDS_NUMERICN       (BYTE) 0x6c
  105. #define SRV_TDS_FLTN           (BYTE) 0x6d
  106. #define SRV_TDS_MONEYN         (BYTE) 0x6e
  107. #define SRV_TDS_DATETIMN       (BYTE) 0x6f
  108. #define SRV_TDS_MONEY4         (BYTE) 0x7a
  109. #define SRV_TDS_BIGVARBINARY   (BYTE) 0xA5
  110. #define SRV_TDS_BIGVARCHAR     (BYTE) 0xA7
  111. #define SRV_TDS_BIGBINARY      (BYTE) 0xAD
  112. #define SRV_TDS_BIGCHAR        (BYTE) 0xAF
  113. #define SRV_TDS_NVARCHAR       (BYTE) 0xe7
  114. #define SRV_TDS_NCHAR           (BYTE) 0xef
  115.  
  116. // Datatypes
  117. // Also: values of symbol parameter to srv_symbol when type = SRV_DATATYPE
  118. #define SRVNULL        SRV_TDS_NULL
  119. #define SRVTEXT        SRV_TDS_TEXT
  120. #define SRVGUID        SRV_TDS_GUID
  121. #define SRVVARBINARY   SRV_TDS_VARBINARY
  122. #define SRVINTN        SRV_TDS_INTN
  123. #define SRVVARCHAR     SRV_TDS_VARCHAR
  124. #define SRVBINARY      SRV_TDS_BINARY
  125. #define SRVIMAGE       SRV_TDS_IMAGE
  126. #define SRVCHAR        SRV_TDS_CHAR
  127. #define SRVINT1        SRV_TDS_INT1
  128. #define SRVBIT         SRV_TDS_BIT
  129. #define SRVINT2        SRV_TDS_INT2
  130. #define SRVDECIMAL       SRV_TDS_DECIMAL
  131. #define SRVINT4        SRV_TDS_INT4
  132. #define SRVDATETIM4    SRV_TDS_DATETIM4
  133. #define SRVFLT4        SRV_TDS_FLT4    
  134. #define SRVMONEY       SRV_TDS_MONEY
  135. #define SRVDATETIME    SRV_TDS_DATETIME
  136. #define SRVFLT8        SRV_TDS_FLT8
  137. #define SRVNUMERIC       SRV_TDS_NUMERIC
  138. #define SRVNTEXT       SRV_TDS_NTEXT
  139. #define SRVBITN           SRV_TDS_BITN
  140. #define SRVDECIMALN       SRV_TDS_DECIMALN
  141. #define SRVNUMERICN       SRV_TDS_NUMERICN
  142. #define SRVFLTN        SRV_TDS_FLTN
  143. #define SRVMONEYN      SRV_TDS_MONEYN
  144. #define SRVDATETIMN    SRV_TDS_DATETIMN
  145. #define SRVMONEY4      SRV_TDS_MONEY4  
  146. #define SRVBIGVARBINARY SRV_TDS_BIGVARBINARY
  147. #define SRVBIGVARCHAR  SRV_TDS_BIGVARCHAR
  148. #define SRVBIGBINARY   SRV_TDS_BIGBINARY
  149. #define SRVBIGCHAR     SRV_TDS_BIGCHAR
  150. #define SRVNVARCHAR       SRV_TDS_NVARCHAR
  151. #define SRVNCHAR       SRV_TDS_NCHAR
  152.  
  153. // values for srv_symbol type parameter
  154. #define SRV_ERROR      0
  155. #define SRV_DONE       1
  156. #define SRV_DATATYPE   2
  157. #define SRV_EVENT      4
  158.  
  159. // values for srv_symbol symbol parameter, when type = SRV_ERROR
  160. #define SRV_ENO_OS_ERR     0
  161. #define SRV_INFO           1
  162. #define SRV_FATAL_PROCESS  10
  163. #define SRV_FATAL_SERVER   19
  164.  
  165. // Types of server events
  166. // Also: values for srv_symbol symbol parameter, when type = SRV_EVENT
  167. #define SRV_CONTINUE       0
  168. #define SRV_LANGUAGE       1
  169. #define SRV_CONNECT        2
  170. #define SRV_RPC            3
  171. #define SRV_RESTART        4
  172. #define SRV_DISCONNECT     5
  173. #define SRV_ATTENTION      6
  174. #define SRV_SLEEP          7
  175. #define SRV_START          8
  176. #define SRV_STOP           9
  177. #define SRV_EXIT           10
  178. #define SRV_CANCEL         11
  179. #define SRV_SETUP          12
  180. #define SRV_CLOSE          13
  181. #define SRV_PRACK          14
  182. #define SRV_PRERROR        15
  183. #define SRV_ATTENTION_ACK  16
  184. #define SRV_CONNECT_V7       16    // TDS type for TDS 7 clients.  Overloaded with SRV_ATTENTION_ACK
  185. #define SRV_SKIP           17
  186. #define SRV_TRANSMGR       18
  187. #define SRV_OLEDB           20
  188. #define SRV_INTERNAL_HANDLER 99
  189. #define SRV_PROGRAMMER_DEFINED  100
  190.  
  191. // values for srv_config option parameter
  192. #define SRV_CONNECTIONS         1
  193. #define SRV_LOGFILE             2
  194. #define SRV_STACKSIZE           3
  195. #define SRV_REMOTE_ACCESS       7
  196. #define SRV_REMOTE_CONNECTIONS  9
  197. #define SRV_MAX_PACKETS         10
  198. #define SRV_MAXWORKINGTHREADS    11
  199. #define SRV_MINWORKINGTHREADS    12
  200. #define SRV_THREADTIMEOUT        13
  201. #define SRV_MAX_PACKETSIZE        17
  202. #define SRV_THREADPRIORITY        18
  203. #define SRV_ANSI_CODEPAGE        19
  204. #define    SRV_DEFAULT_PACKETSIZE    26
  205. #define SRV_PASSTHROUGH            27
  206.  
  207. // vlaues for srv_config value parameter when option = SRV_THREADPRIORITY
  208. #define SRV_PRIORITY_LOW      THREAD_PRIORITY_LOWEST
  209. #define SRV_PRIORITY_NORMAL   THREAD_PRIORITY_NORMAL
  210. #define SRV_PRIORITY_HIGH     THREAD_PRIORITY_HIGHEST
  211. #define SRV_PRIORITY_CRITICAL THREAD_PRIORITY_TIME_CRITICAL
  212.  
  213. // values for srv_sfield field parameter
  214. #define SRV_SERVERNAME          0
  215. #define SRV_VERSION             6
  216.  
  217. // Length to indicate string is null terminated
  218. #define SRV_NULLTERM   -1
  219.  
  220. // values of msgtype parameter to srv_sendmsg
  221. #define SRV_MSG_INFO    1
  222. #define SRV_MSG_ERROR   2
  223.  
  224. // values of status parameter to srv_senddone
  225. // Also: values for symbol parameters to srv_symbol when type = SRV_DONE
  226. #define SRV_DONE_FINAL            (USHORT) 0x0000
  227. #define SRV_DONE_MORE            (USHORT) 0x0001
  228. #define SRV_DONE_ERROR            (USHORT) 0x0002
  229. #define SRV_DONE_COUNT            (USHORT) 0x0010
  230. #define SRV_DONE_RPC_IN_BATCH   (USHORT) 0x0080
  231.  
  232. // return values of srv_paramstatus
  233. #define SRV_PARAMRETURN        0x0001
  234. #define SRV_PARAMDEFAULT    0x0002
  235.  
  236. // return values of srv_rpcoptions
  237. #define SRV_RECOMPILE        0x0001
  238. #define SRV_NOMETADATA        0x0002
  239.  
  240. // values of field parameter to srv_pfield
  241. //#define SRV_LANGUAGE 1   already defined above
  242. //#define SRV_EVENT    4   already defined above
  243. #define SRV_SPID                10
  244. #define SRV_NETSPID                11
  245. #define SRV_TYPE                12
  246. #define SRV_STATUS                13
  247. #define SRV_RMTSERVER            14
  248. #define SRV_HOST                15
  249. #define SRV_USER                16
  250. #define SRV_PWD                    17
  251. #define SRV_CPID                18
  252. #define SRV_APPLNAME            19
  253. #define SRV_TDS                    20
  254. #define SRV_CLIB                21
  255. #define SRV_LIBVERS                22
  256. #define SRV_ROWSENT                23
  257. #define SRV_BCPFLAG                24
  258. #define SRV_NATLANG                25
  259. #define SRV_PIPEHANDLE            26
  260. #define SRV_NETWORK_MODULE        27
  261. #define SRV_NETWORK_VERSION        28
  262. #define SRV_NETWORK_CONNECTION    29
  263. #define SRV_LSECURE                30
  264. #define SRV_SAXP                31
  265. #define SRV_UNICODE_USER        33
  266. #define SRV_UNICODE_PWD            35
  267. #define SRV_SPROC_CODEPAGE                    36
  268.  
  269. // return value of SRV_TDSVERSION macro
  270. #define SRV_TDS_NONE   0
  271. #define SRV_TDS_2_0    1
  272. #define SRV_TDS_3_4    2
  273. #define SRV_TDS_4_2    3
  274. #define SRV_TDS_6_0    4
  275. #define SRV_TDS_7_0    5
  276.  
  277. // Return values from APIs
  278. typedef int SRVRETCODE;        // SUCCEED or FAIL
  279. #ifndef ODBCVER
  280. typedef int RETCODE;
  281. #endif
  282.  
  283. #if !defined( SUCCEED )
  284. #define SUCCEED     1   // Successful return value
  285. #endif
  286.  
  287. #if !defined( FAIL )
  288. #define FAIL        0   // Unsuccessful return value
  289. #endif
  290.  
  291. #define SRV_DUPLICATE_HANDLER    2    // additional return value for srv_pre/post_handle
  292.  
  293. //------------------------------------------------
  294. //PreDeclare structures
  295. //
  296. struct srv_server;
  297. typedef struct srv_server SRV_SERVER;
  298.  
  299. struct srv_config;
  300. typedef struct srv_config SRV_CONFIG;
  301.  
  302. struct srv_proc;
  303. typedef struct srv_proc SRV_PROC;
  304.  
  305. //------------------------------------------------
  306. //------------------------------------------------
  307. // ODS MACROs & APIs
  308.  
  309. // Describing and sending a result set
  310. int srv_describe(SRV_PROC*,int,char*,int,long int,long int,long int,long int,void*);
  311. int srv_setutype(SRV_PROC* srvproc,int column,long int usertype);
  312. int srv_setcoldata(SRV_PROC* srvproc,int column,void* data);
  313. int srv_setcollen( SRV_PROC* srvproc,int column,int len);
  314. int srv_sendrow(SRV_PROC* srvproc );
  315. int srv_senddone(SRV_PROC* srvproc,USHORT status,USHORT curcmd,long int count);
  316.  
  317. // Dealing with Extended Procedure parameters
  318. int srv_rpcparams(SRV_PROC*);
  319. int srv_paraminfo(SRV_PROC*,int,BYTE*,ULONG*,ULONG*,BYTE*,BOOL*);
  320. int srv_paramsetoutput(SRV_PROC*,int,BYTE*,ULONG,BOOL);
  321.  
  322. void* srv_paramdata(SRV_PROC*,int);
  323. int srv_paramlen(SRV_PROC*,int);
  324. int srv_parammaxlen(SRV_PROC*,int);
  325. int srv_paramtype(SRV_PROC*,int);
  326. int srv_paramset(SRV_PROC*,int,void*,int);
  327.  
  328. char* srv_paramname(SRV_PROC*,int,int*);
  329. int srv_paramnumber(SRV_PROC*,char*,int);
  330.  
  331. //--------------------------------------------------------------
  332. //--------------------------------------------------------------
  333. // The rest of these APIs are still supported, in SQL Server 7.0,
  334. // but may not be supported after SQL Server 7.0
  335.  
  336. // MACROs
  337. #define SRV_GETCONFIG(a)        srv_getconfig      ( a )
  338. #define SRV_GETSERVER(a)        srv_getserver      ( a )
  339. #define SRV_GOT_ATTENTION(a)    srv_got_attention ( a )
  340. #define    SRV_EVENTDATA(a)        srv_eventdata      ( a )
  341. #define    SRV_IODEAD(a)            srv_iodead          ( a )
  342. #define    SRV_TDSVERSION(a)        srv_tdsversion      ( a )
  343.  
  344. SRV_CONFIG* srv_getconfig( SRV_SERVER * server );
  345. SRV_SERVER* srv_getserver( SRV_PROC   * srvproc );
  346. BOOL srv_got_attention( SRV_PROC * srvproc );
  347. void* srv_eventdata( SRV_PROC * srvproc );
  348.  
  349. // Memory
  350. void* srv_alloc(long int ulSize);
  351. int srv_bmove(void* from,void* to,long int count);
  352. int srv_bzero( void  * location,long int count);
  353. int srv_free( void * ptr );
  354.  
  355. int srv_config( SRV_CONFIG * config,long int option,char* value,int valuelen);
  356. SRV_CONFIG * srv_config_alloc( void );
  357.  
  358.  
  359. int srv_convert(SRV_PROC*,int,void*,long int,int,void*,long int);
  360.  
  361. int (*  srv_errhandle(int (* handler)(SRV_SERVER * server,
  362.                                                   SRV_PROC   * srvproc,
  363.                                                   int           srverror,
  364.                                                   BYTE            severity,
  365.                                                   BYTE            state,
  366.                                                   int           oserrnum,
  367.                                                   char     * errtext,
  368.                                                   int           errtextlen,
  369.                                                   char     * oserrtext,
  370.                                                   int           oserrtextlen)))
  371.                                                    ( SRV_SERVER * server,
  372.                                                      SRV_PROC   * srvproc,
  373.                                                      int          srverror,
  374.                                                      BYTE           severity,
  375.                                                      BYTE           state,
  376.                                                      int          oserrnum,
  377.                                                      char     * errtext,
  378.                                                      int          errtextlen,
  379.                                                      char     * oserrtext,
  380.                                                      int          oserrtextlen );
  381.  
  382. int srv_event(SRV_PROC * srvproc,int event,BYTE* data);
  383.  
  384. void* srv_getuserdata( SRV_PROC * srvproc );
  385.  
  386. int srv_getbindtoken(SRV_PROC * srvproc,char* token_buf);
  387.  
  388. int srv_getdtcxact(SRV_PROC * srvproc,void ** ppv);
  389.  
  390. typedef int (* EventHandler)(void*);
  391. EventHandler srv_handle(SRV_SERVER*,long int,EventHandler);
  392.  
  393. int srv_impersonate_client( SRV_PROC * srvproc );
  394.  
  395. SRV_SERVER* srv_init( SRV_CONFIG * config,
  396.                      char        * connectname,
  397.                      int          namelen );
  398.  
  399. BOOL srv_iodead( SRV_PROC * srvproc );
  400.  
  401. long srv_langcpy(SRV_PROC *    srvproc,long start,long nbytes,char* buffer);
  402. long srv_langlen( SRV_PROC * srvproc );
  403. void* srv_langptr( SRV_PROC *srvproc );
  404.  
  405. int
  406.      srv_log( SRV_SERVER * server,
  407.                     BOOL         datestamp,
  408.                     char     * msg,
  409.                     int          msglen );
  410.  
  411. int srv_paramstatus(SRV_PROC*,int);
  412.  
  413. char* srv_pfield( SRV_PROC * srvproc,int          field,int        * len );
  414.  
  415. int srv_returnval( SRV_PROC * srvproc,
  416.                           char   * valuename,
  417.                           int         len,
  418.                           BYTE         status,
  419.                           long int      type,
  420.                           long int      maxlen,
  421.                           long int      datalen,
  422.                           void       * value );
  423.  
  424. int srv_revert_to_self( SRV_PROC * srvproc );
  425.  
  426. char* srv_rpcdb(SRV_PROC* srvproc,int* len );
  427. char* srv_rpcname(SRV_PROC * srvproc,int* len );
  428. int srv_rpcnumber( SRV_PROC * srvproc );
  429. USHORT srv_rpcoptions( SRV_PROC * srvproc );
  430. char* srv_rpcowner( SRV_PROC * srvproc,int      * len );
  431.  
  432. int srv_run( SRV_SERVER * server );
  433.  
  434. int
  435.      srv_sendmsg( SRV_PROC  * srvproc,
  436.                         int            msgtype,
  437.                         long int        msgnum,
  438.                         BYTE   msgclass,
  439.                         BYTE   state,
  440.                         char      * rpcname,
  441.                         int            rpcnamelen,
  442.                         USHORT linenum,
  443.                         char      * message,
  444.                         int            msglen );
  445.  
  446. int
  447.      srv_ansi_sendmsg( SRV_PROC  * srvproc,
  448.                         int            msgtype,
  449.                         long int        msgnum,
  450.                         BYTE   msgclass,
  451.                         BYTE   state,
  452.                         char      * rpcname,
  453.                         int            rpcnamelen,
  454.                         USHORT linenum,
  455.                         char      * message,
  456.                         int            msglen );
  457.  
  458. int srv_sendstatus( SRV_PROC * srvproc,long int      status );
  459.  
  460.  
  461. int srv_setuserdata(SRV_PROC* srvproc,void* ptr);
  462.  
  463.  
  464. char* srv_sfield( SRV_SERVER * server,int field,int* len);
  465.  
  466. char* srv_symbol(int    type,int symbol,int* len);
  467.  
  468. int srv_tdsversion(SRV_PROC* srvproc);
  469.  
  470. int srv_writebuf(SRV_PROC* srvproc, void* ptr, WORD    count);
  471.  
  472. BOOL srv_willconvert(int srctype,int desttype );
  473.  
  474. void srv_ackattention( SRV_PROC * srvproc );
  475.  
  476. int srv_terminatethread( SRV_PROC * srvproc );
  477.  
  478. int srv_sendstatistics( SRV_PROC * srvproc );
  479.  
  480. int srv_clearstatistics( SRV_PROC * srvproc );
  481.  
  482. int srv_setevent( SRV_SERVER * server, int          event);
  483.  
  484. int srv_message_handler( SRV_PROC * srvproc, 
  485.                                 int        errornum, 
  486.                                 BYTE       severity,
  487.                                 BYTE       state, 
  488.                                 int        oserrnum, 
  489.                                 char     * errtext, 
  490.                                 int        errtextlen, 
  491.                                 char     * oserrtext, 
  492.                                 int        oserrtextlen );
  493.  
  494. int srv_pre_handle( SRV_SERVER * server,
  495.                             SRV_PROC   * srvproc,
  496.                             long int event,
  497.                             EventHandler handler,
  498.                             BOOL         remove );
  499. int srv_post_handle( SRV_SERVER * server,
  500.                              SRV_PROC   * srvproc,
  501.                              long int        event,
  502.                              EventHandler handler,
  503.                              BOOL         remove );
  504.  
  505. int srv_post_completion_queue( SRV_PROC * srvproc,
  506.                                       char   * inbuf,
  507.                                       int         inbuflen );
  508.  
  509. int srv_IgnoreAnsiToOem( SRV_PROC * srvproc,BOOL bTF);
  510.  
  511. #ifdef __cplusplus
  512. }
  513. #endif
  514.  
  515. #pragma pack()
  516.  
  517. #define SS_MAJOR_VERSION    7
  518. #define SS_MINOR_VERSION    00
  519. #define SS_LEVEL_VERSION    0000
  520. #define SS_MINIMUM_VERSION  "7.00.00.0000"
  521. #define ODS_VERSION            ((SS_MAJOR_VERSION << 24)  | (SS_MINOR_VERSION << 16))
  522.  
  523. #pragma option pop /*P_O_Pop*/
  524. #endif //_ODS_SRV_H_
  525.  
  526. //////////////////////////////////////////////////////////////////
  527. // Suggested implementation of __GetXpVersion
  528. //
  529. //__declspec(dllexport) ULONG __GetXpVersion() 
  530. //    {
  531. //    return ODS_VERSION;
  532. //    }
  533. //////////////////////////////////////////////////////////////////
  534.