/* ST.c : Serial Test */
/* Created by John Schultz, 4/16/90 */
/* Interrupt driven serial I/O testbed */

#include <stdio.h>
#include <dos.h>
#include "input.h"

#define CLOCK 3579545

#define MINBAUD 300        /* Change these at will */
#define MAXBAUD 230000

#define BUFFSIZE 80

#define ESCAPE 69

extern void openserial(void);
extern void __asm sendser(register __d0 char c);
extern void __asm sendsernobuff(register __d0 char c);
extern char __asm readser(void);
extern short __asm checkser(void);
extern char __asm rawtoascii(register __d0 char c);

extern short far baudper;

void main(int argc,char ** argv) {
short i = 0;
long console;
long baud;
char traw;
short notquit = 1;
char buffer[BUFFSIZE];


  if (argc != 2) {
    printf("USAGE: st <baud>\n");
    exit(0);
  }

  baud = atoi(argv[1]);
  if (baud < MINBAUD)
    baud = MINBAUD;
  else if (baud > MAXBAUD)
    baud = MAXBAUD;

  printf("Setting baud to %d. Press ESC to quit.\n",baud);
  
  baudper = (CLOCK / baud)-1;

  console = _dopen("*",MODE_OLDFILE);
  if (console == -1) {
    printf("Couldn't open console.\n");
    exit(0);
  }

  if (createti()) {
    openserial();
    traw = 0;
    raw = 0;

    while (notquit) {
      if (raw) {
        traw = raw;
        raw = 0;
	if (traw == ESCAPE) notquit = 0;    /* ESC */
        traw = rawtoascii(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);
        sendser(traw);

      }

      if (checkser())
        for (i = 0;
            (i < BUFFSIZE) && (checkser());
            buffer[i++] = readser());
      
      if (i > 0) _dwrite(console,buffer,i);

      i = 0;

    } /* while notquit */

    closeserial();
    deleteti();
  } /* if createti */

  printf("\n");

} /* END ST.c */
