#pragma prototyped
#ifndef _CS_H
#define _CS_H
#define CS_VERSION 19970717L
#include <ast.h>
#include <ast_cs.h>
#include <hashpart.h>
#include <ls.h>
#include <times.h>
#define cs _cs_info_
#define Cs (&cs)
#define CSTIME() (cs.time=(unsigned long)time(NiL))
#define CSTOSS(n,c) HASHPART(n,c)
#define CS_LOCAL (-1L)
#define CS_NEVER (-1L)
#define CS_EXACT 0x0001
#define CS_LIMIT 0x0002
#define CS_LINE 0x0004
#define CS_RESTART 0x1000
#define CS_PORT_NORMAL 0x00000000
#define CS_PORT_MIN 0x00000001
#define CS_PORT_MAX 0x0000ffff
#define CS_PORT_INVALID 0xffffffff
#define CS_PORT_RESERVED 0xfffffffe
#define CS_NORMAL CS_PORT_NORMAL
#define CS_RESERVED CS_PORT_RESERVED
#define CS_HOST_GATEWAY "ftp"
#define CS_HOST_LOCAL "local"
#define CS_HOST_PROXY "proxy"
#define CS_HOST_SHARE "share"
#define CS_HOST_UNKNOWN "unknown"
#define CS_STAT_DAEMON "lib/ssd"
#define CS_STAT_DIR "share/lib/ss"
#define CS_STAT_DOWN (3*CS_STAT_FREQ)
#define CS_STAT_FREQ 50
#define CS_STAT_IGNORE (24*60*60)
#define CS_SVC_ACCESS "access"
#define CS_SVC_DIR "lib/cs"
#define CS_SVC_DORMANT (5*60)
#define CS_SVC_HOSTS "hosts"
#define CS_SVC_INFO "local"
#define CS_SVC_REMOTE "remote"
#define CS_SVC_SUFFIX ".svc"
#define CS_MNT_MAX 14
#define CS_NAME_MAX 256
#define CS_MNT_TAIL "-cs.mnt"
#define CS_MNT_AUTH 'A'
#define CS_MNT_LOCK 'X'
#define CS_MNT_LOG 'L'
#define CS_MNT_OLDLOG 'O'
#define CS_MNT_OTHER '#'
#define CS_MNT_PROCESS 'P'
#define CS_MNT_STREAM 'S'
#define CS_MNT_TMP 'Z'
#define CS_REMOTE_CONTROL "cs"
#define CS_REMOTE_DEBUG 'd'
#define CS_REMOTE_DELAY 8
#define CS_REMOTE_OPEN 'O'
#define CS_REMOTE_OPEN_AGENT 'A'
#define CS_REMOTE_OPEN_LOCAL 'L'
#define CS_REMOTE_OPEN_NOW 'N'
#define CS_REMOTE_OPEN_READ 'R'
#define CS_REMOTE_OPEN_SHARE 'S'
#define CS_REMOTE_OPEN_TEST 'T'
#define CS_REMOTE_OPEN_TRUST 'X'
#define CS_REMOTE_PROFILE "set true; $1 eval 'unset true eval; source ./.login >& /dev/null < /dev/null'; set eval CsH=true; $1 $CsH 'shift; shift; . ./.profile >/dev/null 2>&1 </dev/null'"
#define CS_FD_ALLOCATE (-2)
#define CS_OPEN_READ 0
#define CS_OPEN_CREATE 1
#define CS_OPEN_AGENT (1<<1)
#define CS_OPEN_LOCAL (1<<2)
#define CS_OPEN_MOUNT (1<<3)
#define CS_OPEN_NOW (1<<4)
#define CS_OPEN_REMOTE (1<<5)
#define CS_OPEN_SHARE (1<<6)
#define CS_OPEN_SLAVE (1<<7)
#define CS_OPEN_TEST (1<<8)
#define CS_OPEN_TRUST (1<<9)
#define CS_PATH_NAME (1<<0)
#define CS_VAR_LOCAL 0
#define CS_VAR_PROXY 1
#define CS_VAR_SHARE 2
#define CS_VAR_TRUST 3
#define CS_ADDR_FULL (1<<0)
#define CS_ADDR_LOCAL (1<<1)
#define CS_ADDR_NOW (1<<2)
#define CS_ADDR_NUMERIC (1<<3)
#define CS_ADDR_REMOTE (1<<4)
#define CS_ADDR_SHARE (1<<5)
#define CS_ADDR_TEST (1<<6)
#define CS_ADDR_TRUST (1<<7)
#define CS_DAEMON_SLAVE (1<<8)
#define CS_PIPE_BLOCKED (1<<9)
#define CS_TEST (1<<10)
#define CS_CLIENT_ARGV (1<<0)
#define CS_CLIENT_RAW (1<<1)
#define CS_CLIENT_SEP (1<<2)
typedef struct
{
unsigned long addr[3];
} Csaddr_t;
typedef struct
{
unsigned long hid;
unsigned long pid;
unsigned long uid;
unsigned long gid;
} Csid_t;
typedef struct
{
unsigned long idle;
long up;
int load;
int pctsys;
int pctusr;
int users;
} Csstat_t;
struct Cs_s;
typedef struct Cs_s Cs_t;
struct Csdisc_s;
typedef struct Csdisc_s Csdisc_t;
struct Csdisc_s
{
unsigned long version;
unsigned long flags;
Error_f errorf;
};
struct Cs_s
{
char* id;
Csdisc_t* disc;
unsigned long addr;
unsigned long port;
unsigned long time;
unsigned long flags;
char* control;
char* cs;
char type[8];
char qual[CS_NAME_MAX];
char host[CS_NAME_MAX];
char mount[PATH_MAX];
char user[CS_NAME_MAX];
#ifdef _CS_PRIVATE_
_CS_PRIVATE_
#endif
};
#if _BLD_cs && defined(__EXPORT__)
#define extern __EXPORT__
#endif
#if !_BLD_cs && defined(__IMPORT__)
#define extern extern __IMPORT__
#endif
extern Cs_t cs;
#undef extern
#if _BLD_cs && defined(__EXPORT__)
#define extern __EXPORT__
#endif
#if CS_INTERFACE <= 1
#define Cs_addr_t Csaddr_t
#define Cs_id_t Csid_t
#define Cs_info_t Cs_t
#define Cs_poll_t Cspoll_t
#define Cs_stat_t Csstat_t
#define CSADDR Csaddr_t
#define CSID Csid_t
#define CSINFO Csinfo_t
#define CSPOLL Cspoll_t
#define CSSTAT Csstat_t
#define csaddr _cs_addr
#define csattach _cs_attach
#define csattr _cs_attr
#define csauth _cs_auth
#define csbind _cs_bind
#define csclient _cs_client
#define csclone _cs_clone
#define cschallenge _cs_challenge
#define csdaemon _cs_daemon
#define csfd _cs_fd
#define csfrom _cs_from
#define csfull _cs_full
#define csinfo _cs_info
#define cslocal _cs_local
#define csname _cs_name
#define csnote _cs_note
#define csntoa _cs_ntoa
#define csopen _cs_open
#define cspath _cs_path
#define cspeek _cs_peek
#define csping _cs_ping
#define cspipe _cs_pipe
#define cspoll _cs_poll
#define csport _cs_port
#define csread _cs_read
#define csrecv _cs_recv
#define cssend _cs_send
#define csserve _cs_serve
#define csstat _cs_stat
#define cstimeout _cs_timeout
#define csto _cs_to
#define csvar _cs_var
#define cswakeup _cs_wakeup
#define cswrite _cs_write
#else
extern unsigned long csaddr(Cs_t*, const char*);
extern Cs_t* csalloc(Csdisc_t*);
extern int csattach(Cs_t*, const char*, int, int);
extern char* csattr(Cs_t*, const char*, const char*);
extern int csauth(Cs_t*, int, const char*, const char*);
extern int csbind(Cs_t*, const char*, unsigned long, unsigned long, unsigned long);
extern int cschallenge(Cs_t*, const char*, unsigned long*, unsigned long*);
extern int csclient(Cs_t*, int, const char*, const char*, char**, unsigned int);
extern unsigned long csclone(Cs_t*, int);
extern int csdaemon(Cs_t*, int);
extern int csfd(Cs_t*, int, int);
extern int csfree(Cs_t*);
extern ssize_t csfrom(Cs_t*, int, void*, size_t, Csaddr_t*);
extern char* csfull(Cs_t*, unsigned long);
extern Sfio_t* csinfo(Cs_t*, const char*, int*);
extern int cslocal(Cs_t*, const char*);
extern char* csname(Cs_t*, unsigned long);
extern int csnote(Cs_t*, const char*, Csstat_t*);
extern char* csntoa(Cs_t*, unsigned long);
extern int csopen(Cs_t*, const char*, int);
extern char* cspath(Cs_t*, int, int);
extern ssize_t cspeek(Cs_t*, int, void*, size_t);
extern int csping(Cs_t*, const char*);
extern int cspipe(Cs_t*, int*);
extern int cspoll(Cs_t*, Cspoll_t*, int, int);
extern unsigned long csport(Cs_t*, const char*, const char*);
extern ssize_t csread(Cs_t*, int, void*, size_t, int);
extern int csrecv(Cs_t*, int, Csid_t*, int*, int);
extern int cssend(Cs_t*, int, int*, int);
extern void csserve(Cs_t*, void*, const char*, void*(*)(void*, int), int(*)(void*, int), int(*)(void*, int, Csid_t*, int, char**), int(*)(void*, int), int(*)(void*, int), int(*)(void*));
extern int csstat(Cs_t*, const char*, Csstat_t*);
extern unsigned long cstimeout(Cs_t*, unsigned long);
extern ssize_t csto(Cs_t*, int, const void*, size_t, Csaddr_t*);
extern char* csvar(Cs_t*, int, int);
extern unsigned long cswakeup(Cs_t*, unsigned long);
extern ssize_t cswrite(Cs_t*, int, const void*, size_t);
#endif
#if CS_INTERFACE <= 1 || defined(_CS_PRIVATE_)
extern unsigned long _cs_addr(const char*);
extern int _cs_attach(const char*, int, int);
extern char* _cs_attr(const char*, const char*);
extern int _cs_auth(int, const char*, const char*);
extern int _cs_bind(const char*, unsigned long, unsigned long, unsigned long);
extern int _cs_client(int, const char*, const char*, char**, unsigned int);
extern unsigned long _cs_clone(int);
extern int _cs_daemon(int);
extern int _cs_fd(int, int);
extern ssize_t _cs_from(int, void*, size_t, Csaddr_t*);
extern char* _cs_full(unsigned long);
extern Sfio_t* _cs_info(const char*, int*);
extern int _cs_local(const char*);
extern char* _cs_name(unsigned long);
extern int _cs_note(const char*, Csstat_t*);
extern char* _cs_ntoa(unsigned long);
extern int _cs_open(const char*, int);
extern char* _cs_path(int, int);
extern ssize_t _cs_peek(int, void*, size_t);
extern int _cs_ping(const char*);
extern int _cs_pipe(int*);
extern int _cs_poll(Cspoll_t*, int, int);
extern unsigned long _cs_port(const char*, const char*);
extern ssize_t _cs_read(int, void*, size_t, int);
extern int _cs_recv(int, Csid_t*, int*, int);
extern int _cs_send(int, int*, int);
extern void _cs_serve(void*, const char*, void*(*)(void*, int), int(*)(void*, int), int(*)(void*, int, Csid_t*, int, char**), int(*)(void*, int), int(*)(void*, int), int(*)(void*));
extern int _cs_stat(const char*, Csstat_t*);
extern unsigned long _cs_timeout(unsigned long);
extern ssize_t _cs_to(int, const void*, size_t, Csaddr_t*);
extern char* _cs_var(int, int);
extern unsigned long _cs_wakeup(unsigned long);
extern ssize_t _cs_write(int, const void*, size_t);
#endif
#undef extern
#endif