/* test8274.c   Stewart, December 7, 1981  11:44 AM   */
/* last edit    Stewart, June 9, 1982  11:42 AM   */

int bauda, baudb;
char leftover, escchar;

main()
  {
  char c;
  escchar = 'z';
  wf("\r8274 test, ? for help.\r");
  baud(1200, 0);
  baud(1200, 1);
  for (;;) {
    if (chav()) {
      c = getchar() & 0177;
      switch (c) {
        case 'q': {
          wf("\rQuit!\r");
          return;
          };
        case 'e': {
          escape();
          break;
          };
        case 'E': {
          echo();
          break;
          };
        case 's': {
          setspeed();
          break;
          };
        case 't': {
          typeon(0);
          break;
          };
        case 'T': {
          typeon(1);
          break;
          };
        case '?': help();
          break;
        default: wf("\r unknown command\r");
        };
      wf("% ");
      };
   };
 };

echo()
  {
  char c;
  wf1("escape char is %c", escchar);
  for (;;) {
    if (siochav(0)) {
      c = siogetc(0);
      if ((c & 0177) == escchar) return;
      while (!siofree(0));
      sioputc(0, c);
      };
    if (siochav(1)) {
      c = siogetc(1);
      if ((c & 0177) == escchar) return;
      while (!siofree(1));
      sioputc(1, c);
      };
    };
  };

escape() {
  wf("Escape character = ");
  escchar = getchar() & 0177;
  wf1(" (%c)\r", escchar);
  };

help()
  {
  wf("\rq: quit, ?: help\r");
  wf("e: escape char, E: echo\r");
  wf("s: setspeed (0/1)(baudrate)\r");
  wf("t: typeon ch 0, T: typeon ch 1\r");
  };

setspeed()
  {
  char c, *s;
  int br, ch;
  wf("Speed, type 0 for voice channel or 1 for lark: ");
  c = getchar();
  putchar(c);
  if (c=='0') ch = 0;
  else ch = 1;
  wf("\rType in decimal baud rate: ");
  br = getdec();
  wf2("\rSetting channel %d to %d baud\r", ch, br);
  baud(br, ch);
  };

typeon(ch)
  int ch;
  {
  char c;
  for(;;) {
    c = getchar();
    putchar(c);
    while(!siofree(ch));
    sioputc(ch, c);
    if (c=='\r') break;
    };
  };

putsiostr(s, ch)
  char *s;
  int ch;
  {
  while (*s) {
    while(!siofree(ch));
    sioputc(ch, *s++);
    };
  };

int getdec()
  {
  int v;
  v = 0;
  for (;;) {
    leftover = getchar();
    putchar(leftover);
    if (leftover>='0' && leftover<='9') {
      v = v*10;
      v += (leftover-'0');
      continue;
      };
    break;
    };
  return(v);
  };