home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 September / CHIPCD_9_99.iso / software / serwery_www / sambar / _setup.1 / sambar.h < prev    next >
C/C++ Source or Header  |  1998-04-15  |  15KB  |  597 lines

  1. /*
  2. ** SAMBAR.H
  3. **
  4. **      This is the public WIN32 header file for the Sambar 
  5. **        Server application.
  6. **
  7. **        Confidential Property of Tod Sambar
  8. **        (c) Copyright Tod Sambar 1996-1997
  9. **        All rights reserved.
  10. **
  11. **
  12. ** History:
  13. ** Chg#    Date    Description                                                Resp
  14. ** ----    -------    -------------------------------------------------------    ----
  15. **        10AUG96    Created                                                    sambar
  16. **        11APR97    Added server start/stop APIs                            sambar
  17. */
  18.  
  19. #if     !defined(__SAMBAR_H__)
  20. #define __SAMBAR_H__
  21.  
  22. /*
  23. ** Types
  24. */
  25. typedef int                            SA_RETCODE;
  26. typedef long                        SA_INT;
  27. typedef int                            SA_BOOL;
  28. typedef void                        SA_VOID;
  29. typedef unsigned char                SA_BYTE;
  30. typedef char                        SA_CHAR;
  31.  
  32. #ifndef TEXT
  33. #define TEXT(x)                        (x)
  34. #endif
  35.  
  36. #ifndef MAX
  37. #define MAX(a,b)                    ((SA_INT)(a) > (SA_INT)(b) ? (a) : (b))
  38. #endif
  39.  
  40. #ifndef MIN
  41. #define MIN(a,b)                    ((SA_INT)(a) < (SA_INT)(b) ? (a) : (b))
  42. #endif
  43.  
  44. /*
  45. ** Public Structures
  46. */
  47. #define SA_CTX                        SA_VOID
  48. #define SA_CONN                        SA_VOID
  49. #define SA_PARAMS                    SA_VOID
  50. #define SA_REC                        SA_VOID
  51.  
  52.  
  53. /*
  54. ** Return Codes
  55. */
  56. #define SA_SUCCEED                    1
  57. #define SA_FAIL                        0
  58.  
  59.  
  60. /*
  61. ** Error Codes
  62. */
  63. #define SA_E_INTERNALSYSTEM            (SA_INT)0
  64. #define SA_E_ALREADYLOGGEDIN        (SA_INT)1
  65. #define SA_E_BADCOOKIE                (SA_INT)2
  66. #define SA_E_INVALIDLOGIN            (SA_INT)3
  67. #define SA_E_MAXLOGINS                (SA_INT)4
  68. #define SA_E_ALREADYDEFINED            (SA_INT)5
  69. #define SA_E_INVALIDDATA            (SA_INT)6
  70. #define SA_E_NOTIMPLEMENTED            (SA_INT)7
  71. #define SA_E_FORBIDDEN                (SA_INT)8
  72. #define SA_E_NOTFOUND                (SA_INT)9
  73. #define SA_E_DUPLICATE                (SA_INT)10
  74. #define SA_E_DBOPFAILED                (SA_INT)11
  75. #define SA_E_BADGATEWAY                (SA_INT)12
  76. #define SA_E_REDIRECT                (SA_INT)13
  77. #define SA_E_USRDEF1                (SA_INT)14
  78. #define SA_E_USRDEF2                (SA_INT)15
  79. #define SA_E_USRDEF3                (SA_INT)16
  80. #define SA_E_USRDEF4                (SA_INT)17
  81. #define SA_E_USRDEF5                (SA_INT)18
  82. #define SA_E_USRDEF6                (SA_INT)19
  83. #define SA_E_USRDEF7                (SA_INT)20
  84. #define SA_E_USRDEF8                (SA_INT)21
  85. #define SA_E_USRDEF9                (SA_INT)22
  86. #define SA_E_USRDEF10                (SA_INT)23
  87. #define SA_E_USRDEF11                (SA_INT)24
  88. #define SA_E_USRDEF12                (SA_INT)25
  89. #define SA_E_USRDEF13                (SA_INT)26
  90. #define SA_E_USRDEF14                (SA_INT)27
  91. #define SA_E_USRDEF15                (SA_INT)28
  92. #define SA_E_USRDEF16                (SA_INT)29
  93. #define SA_E_USRDEF17                (SA_INT)30
  94. #define SA_E_USRDEF18                (SA_INT)31
  95. #define SA_E_USRDEF19                (SA_INT)32
  96. #define SA_E_USRDEF20                (SA_INT)33
  97. #define SA_E_TIMEOUT                (SA_INT)34
  98. #define SA_E_SHUTDOWN                (SA_INT)35
  99. #define SA_E_SERVERDOWN                (SA_INT)36
  100. #define SA_E_PAUSED                    (SA_INT)37
  101.  
  102.  
  103. /*
  104. ** Actions
  105. */
  106. #define    SA_GET                        (SA_INT)1
  107. #define    SA_SET                        (SA_INT)2
  108. #define    SA_CLEAR                    (SA_INT)3
  109.  
  110. /*
  111. ** Misc Defines
  112. */
  113. #define SA_NULLTERM                    (SA_INT)-3
  114.  
  115. /*
  116. ** Context Properties
  117. */
  118. #define SA_CTXPROP_SYSADMIN            (SA_INT)1
  119. #define SA_CTXPROP_HOMEDIR            (SA_INT)2
  120. #define SA_CTXPROP_LOGDIR            (SA_INT)3
  121. #define SA_CTXPROP_DBCACHE            (SA_INT)4
  122. #define SA_CTXPROP_APPLICDIR        (SA_INT)5
  123. #define SA_CTXPROP_SERVERSW            (SA_INT)7
  124. #define SA_CTXPROP_SERVERPORT        (SA_INT)8
  125. #define SA_CTXPROP_SERVERNAME        (SA_INT)9
  126. #define SA_CTXPROP_SERVERIP            (SA_INT)10
  127. #define SA_CTXPROP_BUILDID            (SA_INT)11
  128. #define SA_CTXPROP_HTTPLOGFUNC        (SA_INT)12
  129.  
  130. /*
  131. ** Connection Properties
  132. */
  133. #define SA_CONNPROP_HOST            (SA_INT)1
  134. #define SA_CONNPROP_AGENT            (SA_INT)2
  135. #define SA_CONNPROP_REFERER            (SA_INT)3
  136. #define SA_CONNPROP_REQUEST            (SA_INT)4
  137. #define SA_CONNPROP_REQUESTMETHOD    (SA_INT)5
  138. #define SA_CONNPROP_USERNAME        (SA_INT)6
  139. #define SA_CONNPROP_NAME            (SA_INT)7
  140. #define SA_CONNPROP_PASSWORD        (SA_INT)8
  141. #define SA_CONNPROP_IPADDR            (SA_INT)9
  142. #define SA_CONNPROP_DOCSDIR            (SA_INT)10
  143.  
  144. /*
  145. ** Next Page Argument
  146. */
  147. #define SA_PAGE_ARG                    TEXT("RCpage")
  148. #define SA_REDIRECT_ARG                TEXT("RCredirect")
  149.  
  150. /*
  151. ** System Administrator Folder
  152. */
  153. #define SA_ADMIN_FOLDER                TEXT("sysadmin")
  154.  
  155. /*
  156. ** Default group
  157. */
  158. #define SA_DEFAULT_GROUP            TEXT("other")
  159.  
  160. /*
  161. ** RPC authorization types
  162. */
  163. #define SA_AUTHORIZATION_ALL        (SA_INT)0        /* All clients */
  164. #define SA_AUTHORIZATION_USER        (SA_INT)1        /* Logged in users only */
  165. #define SA_AUTHORIZATION_ADMIN        (SA_INT)2        /* Admin only */
  166.  
  167. /*
  168. ** RPC parameters
  169. */
  170. typedef struct sa__rpcparam
  171. {
  172.     SA_CHAR            *name;                /* Parameter name */
  173.     SA_BOOL            required;            /* Required or optional param */
  174.     SA_CHAR            *descr;                /* Parameter description */
  175. } SA_RPCPARAM;
  176.  
  177. /*
  178. ** Request-handler modules
  179. */
  180. typedef struct sa__request
  181. {
  182.         SA_INT        method;                /* SA_METHOD_* */
  183.         SA_CHAR        *uri;                /* URI requested. */
  184.         SA_INT         urilen; 
  185.         SA_CHAR        *path;                /* path to requested URI. */
  186.         SA_INT         pathlen; 
  187.         SA_CHAR     *args;
  188.         SA_INT         argslen; 
  189.         SA_CHAR     *content;
  190.         SA_INT         contentlen;
  191.         SA_CHAR     *pathinfo;
  192.         SA_INT         pathinfolen;
  193. } SA_REQUEST;
  194.  
  195. #define SA_METHOD_GET                (SA_INT)1
  196. #define SA_METHOD_POST                (SA_INT)2
  197. #define SA_METHOD_PUT                (SA_INT)3
  198.  
  199. /*
  200. ** HTTP Log callback structure
  201. */
  202. typedef struct sa__httplog
  203. {
  204.         SA_INT         size; 
  205.         SA_INT         status; 
  206.         SA_CHAR        *method;
  207.         SA_CHAR     *timestamp;
  208.         SA_CHAR     *request;
  209.         SA_CHAR     *args;
  210.         SA_CHAR     *vhost;
  211.         SA_CHAR     *user;                /* User IP Address */
  212.         SA_CHAR        *username;
  213.         SA_CHAR        *referer;
  214.         SA_CHAR        *agent;
  215.  
  216.         /* Include system statistics.                                    */
  217.         SA_INT         allconns;             /* Total network connections    */
  218.         SA_INT         httpconns;             /* # of HTTP connections        */
  219.         SA_INT         threads;             /* Total threads                */
  220. } SA_HTTPLOG;
  221.  
  222. /*
  223. ** Password Management
  224. */
  225. #define SA_PASSWD_FILE                TEXT("passwd")
  226. #define SA_MAX_NAME                    (SA_INT)64
  227.  
  228. typedef struct sa__ftp
  229. {
  230.     SA_INT        privs;                                    /* FTP access */
  231.     SA_INT        dirlen;
  232.     SA_CHAR        dir[SA_MAX_NAME + 1];                    /* FTP root dir */
  233. } SA_FTP;
  234.  
  235. typedef struct sa__passwd
  236. {
  237.     SA_INT        ftpprivs;                                /* FTP priviledges */
  238.     SA_INT        nntpprivs;                                /* NNTP priviledges */
  239.     SA_INT        dirlen;
  240.     SA_INT        namelen;
  241.     SA_INT        grouplen;
  242.     SA_INT        passwordlen;
  243.     SA_CHAR        name[SA_MAX_NAME + 1];                    /* Symbolic name */
  244.     SA_CHAR        group[SA_MAX_NAME + 1];
  245.     SA_CHAR        password[SA_MAX_NAME + 1];
  246.     SA_CHAR        dir[SA_MAX_NAME + 1];                    /* FTP dir */
  247.  
  248. } SA_PASSWD;
  249.  
  250. typedef struct sa__user
  251. {
  252.     SA_INT        grouplen;
  253.     SA_INT        usernamelen;
  254.     SA_CHAR        group[SA_MAX_NAME + 1];
  255.     SA_CHAR        username[SA_MAX_NAME + 1];
  256. } SA_USER;
  257.  
  258. typedef struct sa__group
  259. {
  260.     SA_INT        namelen;
  261.     SA_CHAR        name[SA_MAX_NAME + 1];
  262. } SA_GROUP;
  263.  
  264. /*
  265. ** FTP Priviledges
  266. */
  267. #define SA_PRIV_NOACCESS            (SA_INT)0
  268. #define SA_PRIV_READONLY            (SA_INT)1
  269. #define SA_PRIV_READWRITE            (SA_INT)2
  270.  
  271. /*
  272. ** Server Types
  273. */
  274. #define SA_SERVERTYPE_HTTP            (SA_INT)100
  275. #define SA_SERVERTYPE_HTTPPROXY        (SA_INT)101
  276. #define SA_SERVERTYPE_FTP            (SA_INT)102
  277. #define SA_SERVERTYPE_SMTPPROXY        (SA_INT)103
  278. #define SA_SERVERTYPE_POP3PROXY        (SA_INT)104
  279. #define SA_SERVERTYPE_IMAP4PROXY    (SA_INT)105
  280. #define SA_SERVERTYPE_BRIDGEPROXY    (SA_INT)106
  281. #define SA_SERVERTYPE_NNTPPROXY        (SA_INT)107
  282. #define SA_SERVERTYPE_TELNETD        (SA_INT)108
  283.  
  284. /*
  285. ** Record Flags
  286. */ 
  287. #define SA_REC_CREATE                (SA_INT)0x0001
  288. #define SA_REC_DELETE                (SA_INT)0x0002
  289.  
  290.  
  291. /*
  292. ** Sambar Server callbacks
  293. */
  294. typedef SA_RETCODE                (* SA_INITFUNC)(SA_CTX *ctx);
  295. typedef SA_RETCODE                (* SA_EXITFUNC)(SA_CTX *ctx);
  296. typedef SA_RETCODE                (* SA_LOGINFUNC)(SA_CTX *ctx, SA_CONN *conn, 
  297.                                     SA_CHAR *username, SA_INT usernamelen, 
  298.                                     SA_CHAR *password, SA_INT passwordlen, 
  299.                                     SA_INT *infop);
  300. typedef SA_RETCODE                (* SA_LOGOUTFUNC)(SA_CTX *ctx, SA_CONN *conn);
  301. typedef SA_RETCODE                (* SA_PROFILEFUNC)(SA_CTX *ctx, SA_CONN *conn,
  302.                                     SA_CHAR *buffer, SA_INT buflen, 
  303.                                     SA_CHAR *data);
  304. typedef SA_RETCODE                (* SA_REQUESTFUNC)(SA_CTX *ctx, SA_CONN *conn,
  305.                                     SA_CHAR *uri, SA_INT urilen, 
  306.                                     SA_PARAMS *params, SA_INT *infop);
  307. typedef SA_RETCODE                (* SA_RPCFUNC)(SA_CTX *ctx, SA_CONN *conn,
  308.                                     SA_PARAMS *params, SA_INT *infop);
  309. typedef SA_RETCODE                (* SA_PROPFUNC)(SA_CTX *ctx, SA_VOID *argp, 
  310.                                     SA_CHAR *name, SA_CHAR *value);
  311. typedef SA_RETCODE                (* SA_FTPFUNC)(SA_CTX *ctx, SA_CHAR *name,
  312.                                     SA_INT namelen, SA_CHAR *password, 
  313.                                     SA_INT passwordlen, SA_FTP *ftpresp);
  314. typedef SA_RETCODE                (* SA_NETCONNECTFUNC)(SA_CTX *ctx, 
  315.                                     SA_CHAR *ipaddr, SA_INT servertype);
  316. typedef SA_RETCODE                (* SA_HTTPPROXYFUNC)(SA_CTX *ctx, SA_CONN *conn,
  317.                                     SA_CHAR *host, SA_INT hostlen,
  318.                                     SA_CHAR *url, SA_INT urllen);
  319. typedef SA_RETCODE                (* SA_ENVTFUNC)(SA_CTX *ctx, SA_CONN *conn,
  320.                                     SA_CHAR *buffer, SA_INT buflen, 
  321.                                     SA_CHAR *data);
  322. typedef SA_RETCODE                (* SA_MODULEFUNC)(SA_CTX *ctx, SA_CONN *conn,
  323.                                     SA_REQUEST *request, SA_INT *infop);
  324. typedef SA_VOID                    (* SA_HTTPLOGFUNC)(SA_CTX *ctx, 
  325.                                     SA_HTTPLOG *httplog);
  326.  
  327.  
  328. /*
  329. ** Sambar Server Function Prototypes
  330. */
  331.  
  332. #define SA_PUBLIC                __cdecl
  333. #define SA_EXPORT                __declspec(dllexport)
  334.  
  335. #if defined(__cplusplus)
  336. extern "C" {
  337. #endif    /* defined(__cplusplus) */
  338.  
  339. /*
  340. ** Sambar Server startup/shutdown
  341. */
  342. extern SA_RETCODE SA_EXPORT        sa_server(
  343.                                 SA_VOID            *hWnd
  344.                                 );
  345. extern SA_BOOL SA_EXPORT        sa_stopped(
  346.                                 );
  347. extern SA_RETCODE SA_EXPORT        sa_shutdown(
  348.                                 SA_BOOL            restart
  349.                                 );
  350. /*
  351. ** General Functions
  352. */
  353.  
  354. extern SA_RETCODE SA_EXPORT        sa_cgi_exec(
  355.                                 SA_CTX            *ctx,
  356.                                 SA_CONN            *conn,
  357.                                 SA_REQUEST        *request
  358.                                 );
  359. extern SA_RETCODE SA_EXPORT        sa_wincgi_exec(
  360.                                 SA_CTX            *ctx,
  361.                                 SA_CONN            *conn,
  362.                                 SA_REQUEST        *request
  363.                                 );
  364. extern SA_RETCODE SA_EXPORT        sa_cmd_init(
  365.                                 SA_CTX            *ctx,
  366.                                 SA_CHAR            *name,
  367.                                 SA_RPCPARAM        *params,
  368.                                 SA_INT            numparams,
  369.                                 SA_INT            authorization,
  370.                                 SA_CHAR            *descr,
  371.                                 SA_RPCFUNC        funcp
  372.                                 );
  373. extern SA_RETCODE SA_EXPORT        sa_props_load(
  374.                                 SA_CTX            *ctx,
  375.                                 SA_CHAR            *filename,
  376.                                 SA_CHAR            *section,
  377.                                 SA_VOID            *argp,
  378.                                 SA_PROPFUNC        funcp
  379.                                 );
  380. extern SA_RETCODE SA_EXPORT        sa_send_file(
  381.                                 SA_CONN            *conn,
  382.                                 SA_CHAR            *filename
  383.                                 );
  384. extern SA_RETCODE SA_EXPORT        sa_send_macro(
  385.                                 SA_CONN            *conn,
  386.                                 SA_CHAR            *macroname
  387.                                 );
  388. extern SA_RETCODE SA_EXPORT        sa_send_header(
  389.                                 SA_CONN            *conn,
  390.                                 SA_CHAR            *buffer,
  391.                                 SA_INT            buflen
  392.                                 );
  393. extern SA_RETCODE SA_EXPORT        sa_param(
  394.                                 SA_CTX            *ctx,
  395.                                 SA_PARAMS        *params,
  396.                                 SA_CHAR            *name,
  397.                                 SA_CHAR            **valuep,
  398.                                 SA_INT            *valuelenp
  399.                                 );
  400. extern SA_VOID SA_EXPORT        sa_log(
  401.                                 SA_CTX            *ctx,
  402.                                 SA_CHAR            *buffer
  403.                                 );
  404. extern SA_VOID SA_EXPORT        sa_observe(
  405.                                 SA_CTX            *ctx,
  406.                                 SA_CHAR            *buffer
  407.                                 );
  408. extern SA_RETCODE SA_EXPORT        sa_smtpmail(
  409.                                 SA_CTX            *ctx,
  410.                                 SA_CHAR            *from,
  411.                                 SA_CHAR            *tolist,
  412.                                 SA_CHAR            *cclist,
  413.                                 SA_CHAR            *bcclist,
  414.                                 SA_CHAR            *subject,
  415.                                 SA_CHAR            *message,
  416.                                 SA_CHAR            *attachment
  417.                                 );
  418. extern SA_RETCODE SA_EXPORT        sa_get_macro(
  419.                                 SA_CTX            *ctx,
  420.                                 SA_CHAR            *macroname,
  421.                                 SA_CHAR            **macrop,
  422.                                 SA_INT            *macrolenp
  423.                                 );
  424. extern SA_RETCODE SA_EXPORT        sa_get_mime(
  425.                                 SA_CTX            *ctx,
  426.                                 SA_CHAR            *extension,
  427.                                 SA_INT            extensionlen,
  428.                                 SA_CHAR            **mimetypep
  429.                                 );
  430. extern SA_INT SA_EXPORT            sa_wildcmp(
  431.                                 SA_CTX            *ctx,
  432.                                 SA_CHAR            *wildstr,
  433.                                 SA_INT            wildstrlen,
  434.                                 SA_CHAR            *arg,
  435.                                 SA_INT            arglen
  436.                                 );
  437.                                 
  438.  
  439. /*
  440. ** Context Functions
  441. */
  442. extern SA_RETCODE SA_EXPORT        sa_ctx_global(
  443.                                 SA_CTX            **ctxp
  444.                                 );
  445. extern SA_RETCODE SA_EXPORT        sa_ctx_key(
  446.                                 SA_CTX            *ctx,
  447.                                 SA_INT            action,
  448.                                 SA_CHAR            *key,
  449.                                 SA_VOID            **valuep
  450.                                 );
  451. extern SA_RETCODE SA_EXPORT        sa_ctx_props(
  452.                                 SA_CTX            *ctx,
  453.                                 SA_INT            action,
  454.                                 SA_INT            property,
  455.                                 SA_BYTE            *buffer,
  456.                                 SA_INT            buflen,
  457.                                 SA_INT            *outlenp
  458.                                 );
  459. extern SA_RETCODE SA_EXPORT        sa_envt_prop(
  460.                                 SA_CTX            *ctx,
  461.                                 SA_CONN            *conn,
  462.                                 SA_BYTE            *prop,
  463.                                 SA_INT            proplen,
  464.                                 SA_CHAR            *buffer
  465.                                 );
  466.  
  467. /*
  468. ** Connection Functions
  469. */
  470. extern SA_RETCODE SA_EXPORT        sa_conn_key(
  471.                                 SA_CONN            *conn,
  472.                                 SA_INT            action,
  473.                                 SA_CHAR            *key,
  474.                                 SA_VOID            **valuep
  475.                                 );
  476. extern SA_RETCODE SA_EXPORT        sa_conn_props(
  477.                                 SA_CONN            *conn,
  478.                                 SA_INT            action,
  479.                                 SA_INT            property,
  480.                                 SA_BYTE            *buffer,
  481.                                 SA_INT            buflen,
  482.                                 SA_INT            *outlenp
  483.                                 );
  484. extern SA_RETCODE SA_EXPORT        sa_conn_send(
  485.                                 SA_CONN            *conn,
  486.                                 SA_CHAR            *buffer,
  487.                                 SA_INT            buflen
  488.                                 );
  489. extern SA_RETCODE SA_EXPORT        sa_conn_flush(
  490.                                 SA_CONN            *conn
  491.                                 );
  492. extern SA_RETCODE SA_EXPORT        sa_conn_redirect(
  493.                                 SA_CONN            *conn,
  494.                                 SA_CHAR            *location,
  495.                                 SA_CHAR            *buffer,
  496.                                 SA_INT            buflen
  497.                                 );
  498.  
  499. /*
  500. ** User/Password Management Routines
  501. */
  502. extern SA_RETCODE SA_EXPORT        sa_passwd_lookup(
  503.                                 SA_CTX            *ctx,
  504.                                 SA_CHAR            *username,
  505.                                 SA_INT            usernamelen,
  506.                                 SA_PASSWD        *passwd
  507.                                 );
  508. extern SA_RETCODE SA_EXPORT        sa_passwd_add(
  509.                                 SA_CTX            *ctx,
  510.                                 SA_CHAR            *username,
  511.                                 SA_INT            usernamelen,
  512.                                 SA_PASSWD        *passwd
  513.                                 );
  514. extern SA_RETCODE SA_EXPORT        sa_passwd_update(
  515.                                 SA_CTX            *ctx,
  516.                                 SA_CHAR            *username,
  517.                                 SA_INT            usernamelen,
  518.                                 SA_PASSWD        *passwd
  519.                                 );
  520. extern SA_RETCODE SA_EXPORT        sa_passwd_delete(
  521.                                 SA_CTX            *ctx,
  522.                                 SA_CHAR            *username,
  523.                                 SA_INT            usernamelen
  524.                                 );
  525. extern SA_RETCODE SA_EXPORT        sa_passwd_list(
  526.                                 SA_CTX            *ctx,
  527.                                 SA_USER            *users,
  528.                                 SA_INT            numusers,
  529.                                 SA_INT            *countp
  530.                                 );
  531.  
  532. /*
  533. ** Group Management Routines
  534. */
  535. extern SA_RETCODE SA_EXPORT        sa_group_add(
  536.                                 SA_CTX            *ctx,
  537.                                 SA_CHAR            *name,
  538.                                 SA_INT            namelen
  539.                                 );
  540. extern SA_RETCODE SA_EXPORT        sa_group_delete(
  541.                                 SA_CTX            *ctx,
  542.                                 SA_CHAR            *name,
  543.                                 SA_INT            namelen
  544.                                 );
  545. extern SA_RETCODE SA_EXPORT        sa_group_list(
  546.                                 SA_CTX            *ctx,
  547.                                 SA_GROUP        *groups,
  548.                                 SA_INT            numgroups,
  549.                                 SA_INT            *countp
  550.                                 );
  551.  
  552. /*
  553. ** Record Functions
  554. */
  555. extern SA_RETCODE SA_EXPORT        sa_rec_init(
  556.                                 SA_CTX            *ctx,
  557.                                 SA_CHAR            *filename,
  558.                                 SA_INT            flags,
  559.                                 SA_INT            reclen,
  560.                                 SA_REC            **recp
  561.                                 );
  562. extern SA_RETCODE SA_EXPORT        sa_rec_exit(
  563.                                 SA_REC            *rec,
  564.                                 SA_INT            flags
  565.                                 );
  566. extern SA_RETCODE SA_EXPORT        sa_rec_insert(
  567.                                 SA_REC            *rec,
  568.                                 SA_BYTE            *data,
  569.                                 SA_INT            *idp
  570.                                 );
  571. extern SA_RETCODE SA_EXPORT        sa_rec_update(
  572.                                 SA_REC            *rec,
  573.                                 SA_INT            id,
  574.                                 SA_BYTE            *data
  575.                                 );
  576. extern SA_RETCODE SA_EXPORT        sa_rec_delete(
  577.                                 SA_REC            *rec,
  578.                                 SA_INT            id
  579.                                 );
  580. extern SA_RETCODE SA_EXPORT        sa_rec_fetch(
  581.                                 SA_REC            *rec,
  582.                                 SA_INT            id,
  583.                                 SA_BYTE            *data
  584.                                 );
  585. extern SA_RETCODE SA_EXPORT        sa_rec_next(
  586.                                 SA_REC            *rec,
  587.                                 SA_INT            lastid,
  588.                                 SA_BYTE            *data,
  589.                                 SA_INT            *idp
  590.                                 );
  591.  
  592. #if defined(__cplusplus)
  593. }
  594. #endif    /* defined(__cplusplus) */
  595.  
  596. #endif /* __SAMBAR_H__ */
  597.