#ifndef	lint
static char sccsid[] = "@(#)init.c 1.5 88/12/21";
#endif

#include "cbratp.h"

initpktmode()
{
    out_queue.tail = out_queue.data;
    out_queue.head = out_queue.data;
    out_queue.size = 0;

    /*
     * For system services, the channel is the same as the type.
     */
    alloc_channel(CONTROL_CHN, CONTROL_CHN, 0);
    alloc_channel(OPEN_CHN, OPEN_CHN, 0);
    alloc_channel(CLOSE_CHN, CLOSE_CHN, 0);
    alloc_channel(LSEEK_CHN, LSEEK_CHN, 0);
    alloc_channel(OPENCON_CHN, OPENCON_CHN, 0);
    alloc_channel(ACCEPTCON_CHN, ACCEPTCON_CHN, 0);
    alloc_channel(SERVERADDR_CHN, SERVERADDR_CHN, 0);
    alloc_channel(CLIENTADDR_CHN, CLIENTADDR_CHN, 0);
    alloc_channel(SERVERNAME_CHN, SERVERNAME_CHN, 0);
    alloc_channel(GETENV_CHN, GETENV_CHN, 0);
    alloc_channel(HOMEDIR_CHN, HOMEDIR_CHN, 0);
    alloc_channel(PUTENV_CHN, PUTENV_CHN, 0);
    alloc_channel(SPAWN_CHN, SPAWN_CHN, 0);
    alloc_channel(FILESIZE_CHN, FILESIZE_CHN, 0);
    alloc_channel(CWD_CHN, CWD_CHN, 0);
    alloc_channel(WRITE_CHN, WRITE_CHN, 1); 
    alloc_channel(GETHOSTNAME_CHN, GETHOSTNAME_CHN, 0);
    alloc_channel(GETHOSTADDR_CHN, GETHOSTADDR_CHN, 0);
    alloc_channel(VERSION_CHN, VERSION_CHN, 0);
    alloc_channel(PIPE_CHN, PIPE_CHN, 0);

    wr_chan[1] = wr_chan[2] = WRITE_CHN;
}

extern rcv_control();
extern rcv_open();
extern rcv_close();
extern rcv_lseek();
extern rcv_opencon();
extern rcv_acceptcon();
extern rcv_serveraddr();
extern rcv_clientaddr();
extern rcv_servername();
extern rcv_getenv();
extern rcv_homedir();
extern rcv_putenv();
extern rcv_spawn();
extern rcv_filesize();
extern rcv_cwd();
extern rcv_read();
extern rcv_write();
extern rcv_gethostname();
extern rcv_gethostaddr();
extern rcv_version();
extern rcv_pipe();

/*
 * types is a translation table
 * each entry is a pointer to the function that is to be used to
 * interpret the data on a channel of the specified type
 */
int (*types[])() =
{
    rcv_control,	/* 0 */
    rcv_open,		/* 1 */
    rcv_close,		/* 2 */
    rcv_lseek,		/* 3 */
    rcv_opencon,	/* 4 */
    rcv_acceptcon,	/* 5 */
    rcv_serveraddr,	/* 6 */
    rcv_clientaddr,	/* 7 */
    rcv_servername,	/* 8 */
    rcv_getenv,		/* 9 */
    rcv_homedir,	/* 10 */
    rcv_putenv,		/* 11 */
    rcv_spawn,		/* 12 */
    rcv_filesize,	/* 13 */
    rcv_cwd,		/* 14 */
    rcv_read,		/* 15 */
    rcv_write,		/* 16 */
    rcv_gethostname,	/* 17 */
    rcv_gethostaddr,	/* 18 */
    rcv_version,	/* 19 */
    rcv_pipe,		/* 20 */
};
