/
driver3.2@304/autoconf/
driver3.2@304/doc/LPC/
driver3.2@304/hosts/
driver3.2@304/hosts/amiga/NetIncl/
driver3.2@304/hosts/amiga/NetIncl/netinet/
driver3.2@304/hosts/amiga/NetIncl/sys/
driver3.2@304/hosts/fcrypt/
driver3.2@304/hosts/os2/
driver3.2@304/mudlib/sys/
driver3.2@304/util/
driver3.2@304/util/indent/hosts/next/
driver3.2@304/util/make_docs/
/*
 *  Client for OS/2 lpmud
 */

#include <os2.h>
#include <string.h>
#include <io.h>
#include <stdio.h>

#include "socket.h"

#define BUF_SIZE MAX_SOCKET_PACKET_SIZE

void print_pipe();
void error();

const char *version = "mudclient 1.0";
char in_buffer[BUF_SIZE];
char out_buffer[BUF_SIZE];
int fd;

main (int argc, char *argv[])
{
  int thread_id, ret, ph, len;
  ULONG count;
  char s[50];

  sprintf(s, REQUEST_PIPE, 7680);

  if ((ph = open(s, 2)) < 0)
    error("Connection refused (Can't open request pipe)");
  if ((ret = read(ph, &in_buffer, 1)) != 1)
    error("Invalid data in request pipe");
  close(ph);

  sprintf(s, CLIENT_PIPE, (int) in_buffer[0]);

  if (DosWaitNPipe(s, 10000L))
    error("Connection timed out");

  if ((fd = open(s, 2)) < 0)
    error("Can't open client pipe");

  if (DosCreateThread(&thread_id, print_pipe, 0L, 0L, 8192L))
    error("Can't create second thread");

  printf("Connected.\n");

  for (;;)
    if (gets (in_buffer, BUF_SIZE - 2) != NULL)
    {
      len = strlen (in_buffer); 
      in_buffer[len++] = '\n';
      in_buffer[len++] = '\0';
      write(fd, in_buffer, len);
    }

  exit(0);
}

VOID
print_pipe(ULONG ulThreadArg)
{
  int bc;

  for (;;)
    if (bc = read(fd, out_buffer, BUF_SIZE))
      write(1, out_buffer, bc);
    else
      error ("Connection closed by foreign host");
}

void
error (char *msg)
{
  printf("%s: %s.\n",version,msg);
  exit(10);
}