[comp.os.minix] minix/ST add rs232 to kernel - rs232.cdiff

hcj@lzaz.ATT.COM (HC Johnson) (01/04/89)

This is a 4 part posting of the files and changes to add rs232 and midi
drivers to minix-st.

The component parts are:
rs232.shar, the all new rs232 files
rs232diff.shar, cdif of files changed to support rs232 and midi
midi.shar, the all new midi files

cu.shar.  a user terminal emulator like that on unix.  This may be only a 
	binary depending on other factors.

midi need not be installed to use rs232.

the major minor for rs232 is determined by your fs/table.c
on my system its major 8 minor 0.  (always minor 0, or you'll panic).

the rs232 inode must be named tty1.

rs232 will support login. -- change /etc/ttys to add the line , 101.
You will find out how SLOW minix can be when you start interacting
with rs232.

Howard Johnson
ATT-BL
lzaz!hcj
This is rs232diff.shar, the rs232 cdif files for adding rs232 and midi to
minix-st.
==============================================================
echo extracting 'rs232.cdif'
sed -e 's/^X//' >rs232.cdif <<'SHAR_EOF'
X*** /az1/hcj/minix.src/src/kernel/Makefile	Sat Oct 29 11:50:08 1988
X--- kernel/Makefile	Sat Dec 24 06:48:04 1988
X***************
X*** 7,19 ****
X  
X  OBJ	= stmpx.o stmain.o proc.o system.o stshadow.o \
X  	  tty.o clock.o memory.o stdma.o stfloppy.o stwini.o \
X  	  stcon.o stkbd.o stvdu.o stfnt.o stprint.o \
X  	  table.o stdmp.o
X  HDR	= ../h/callnr.h ../h/com.h ../h/const.h ../h/error.h \
X  	  ../h/sgtty.h ../h/signal.h ../h/type.h \
X  	  const.h glo.h proc.h tty.h type.h \
X  	  stacia.h staddr.h stdma.h stfdc.h sthdc.h stmfp.h \
X! 	  stram.h stsound.h stvideo.h
X  ALL	= kernel.mix
X  
X  all:	$(ALL)
X--- 7,21 ----
X  
X  OBJ	= stmpx.o stmain.o proc.o system.o stshadow.o \
X  	  tty.o clock.o memory.o stdma.o stfloppy.o stwini.o \
X+ 	  rstty.o miditty.o \
X+ 	  bmsclock.o midis.o midi.o rs232.o rs232s.o \
X  	  stcon.o stkbd.o stvdu.o stfnt.o stprint.o \
X  	  table.o stdmp.o
X  HDR	= ../h/callnr.h ../h/com.h ../h/const.h ../h/error.h \
X  	  ../h/sgtty.h ../h/signal.h ../h/type.h \
X  	  const.h glo.h proc.h tty.h type.h \
X  	  stacia.h staddr.h stdma.h stfdc.h sthdc.h stmfp.h \
X! 	  stram.h stsound.h stvideo.h ring.h
X  ALL	= kernel.mix
X  
X  all:	$(ALL)
X***************
X*** 32,36 ****
X--- 34,44 ----
X  
X  stmpx.o:	stmpx.s
X  	$(CC) -c $(CFLAGS) stmpx.s
X+ 
X+ midis.o:	midis.s
X+ 	$(CC) -c $(CFLAGS) midis.s
X+ 
X+ rs232s.o:	rs232s.s
X+ 	$(CC) -c $(CFLAGS) rs232s.s
X  
X  $(OBJ):	$(HDR)
X*** /az1/hcj/minix.src/src/kernel/stacia.h	Sat Oct 29 11:49:41 1988
X--- kernel/stacia.h	Wed Nov 23 17:40:22 1988
X***************
X*** 47,50 ****
X  
X  /* values for the ST: */
X  #define	KBD_INIT	(A_81N|A_Q64)
X! #define	MDI_INIT	(A_81N|A_Q16)
X--- 47,50 ----
X  
X  /* values for the ST: */
X  #define	KBD_INIT	(A_81N|A_Q64)
X! #define	MDI_INIT	(A_RXINT|A_TXPOL|A_81N|A_Q16)
X*** /az1/hcj/minix.src/src/kernel/stcon.c	Sat Oct 29 11:49:42 1988
X--- kernel/stcon.c	Wed Dec 28 16:34:34 1988
X***************
X*** 4,9 ****
X--- 4,10 ----
X   */
X  #define DEBDMP		/* dump system tables */
X  #define DEBOUT		/* debugging on console and/or printer */
X+ #define DBG_RS232
X  
X  #include "../h/const.h"
X  #include "../h/type.h"
X***************
X*** 57,62 ****
X--- 58,77 ----
X    case 5:	/* PF5: ON/OFF printer debugging */
X  	STusePrt ^= 1; return;
X  #endif
X+ #ifdef DBG_RS232
X+   case 7:
X+ 	rstty_dmp(); 
X+ 	rs232_dmp(); return;
X+ #ifdef NONO
X+   case 8:	/* PF8: special */
X+ 	tty_dmp(); return;
X+ #endif
X+ 
X+   case 9:	/* PF9: special */
X+ 	miditty_dmp(); 
X+ 	midi_dmp(); return;
X+ #endif
X+ 
X    case 10:	/* PF10: issue SIGKILL */
X  	sigchar(&tty_struct[CONSOLE], SIGKILL); return;
X    }
X*** /az1/hcj/minix.src/src/kernel/stdmp.c	Sat Oct 29 11:49:44 1988
X--- kernel/stdmp.c	Wed Dec 28 07:17:57 1988
X***************
X*** 30,39 ****
X    vir_clicks base, limit, first, last;
X    phys_bytes ltmp, dst;
X    int index;
X    extern phys_bytes umap();
X  
X    printf(
X!   "\nproc    pid     pc     sp  splow flag  user    sys  base limit recv   command\n");
X  
X    dst = umap(proc_addr(SYSTASK), D, (vir_bytes)nbuff, (vir_bytes)NSIZE);
X  
X--- 30,41 ----
X    vir_clicks base, limit, first, last;
X    phys_bytes ltmp, dst;
X    int index;
X+ int i;
X+ char *cp;
X    extern phys_bytes umap();
X  
X    printf(
X!   "\r\nproc    pid     pc     sp  splow flag  user    sys  base limit recv   command\n");
X  
X    dst = umap(proc_addr(SYSTASK), D, (vir_bytes)nbuff, (vir_bytes)NSIZE);
X  
X***************
X*** 45,50 ****
X--- 47,53 ----
X  	base = (vir_clicks) (ltmp/1024L);
X  	ltmp = (((long) last << CLICK_SHIFT) + 512L);
X  	limit = (vir_clicks) (ltmp/1024L);
X+ printf("\r");
X  	prname((int)(rp - proc));
X  	printf(" %4d %6X %6X %6X %4x %5D %6D  %3dK %3dK  ",
X  		rp->p_pid, (long)rp->p_pcpsw.pc,
X***************
X*** 64,72 ****
X  		for (np = &nbuff[0]; np < &nbuff[NSIZE]; np++)
X  			if (*np <= ' ' || *np >= 0177) *np = 0;
X  		if (index == LOW_USER + 1)
X! 			printf("/bin/sh");
X  		else
X! 			printf("%s", nbuff);
X  	}
X  	printf("\n");
X    }
X--- 67,81 ----
X  		for (np = &nbuff[0]; np < &nbuff[NSIZE]; np++)
X  			if (*np <= ' ' || *np >= 0177) *np = 0;
X  		if (index == LOW_USER + 1)
X! 			cp = "/bin/sh";
X  		else
X! 			cp = nbuff;
X! 		for(i=0;i<100;i++) 
X! 			if(cp[i] == '\0')
X! 				break;
X! 		if(i > 8)
X! 			printf("\n\r\t");
X! 		printf("%s", cp);
X  	}
X  	printf("\n");
X    }
X***************
X*** 121,127 ****
X  }
X  
X  
X! char *nayme[]= {"PRINTR", "TTY   ", "WINCHE", "FLOPPY", "RAMDSK", "CLOCK ", 
X  		"SYS   ", "HARDWR", "MM    ", "FS    ", "INIT  "};
X  prname(i)
X  int i;
X--- 130,140 ----
X  }
X  
X  
X! char *nayme[]= {
X! 		"MIDI  ",
X! 		"RS232 ",
X! 		"BMSCLK",
X! 		"PRINTR", "TTY   ", "WINCHE", "FLOPPY", "RAMDSK", "CLOCK ", 
X  		"SYS   ", "HARDWR", "MM    ", "FS    ", "INIT  "};
X  prname(i)
X  int i;
X*** /az1/hcj/minix.src/src/kernel/stmain.c	Sat Oct 29 11:49:50 1988
X--- kernel/stmain.c	Tue Nov 29 18:03:21 1988
X***************
X*** 1,3 ****
X--- 1,4 ----
X+ 
X  #ifdef ATARI_ST
X  /* This file contains the main program of MINIX for the Atari ST.
X   * The routine main() initializes the system and starts the ball
X***************
X*** 249,266 ****
X   *===========================================================================*/
X  PUBLIC aciaint()
X  {
X    if (KBD->ac_cs & A_IRQ)
X  	kbdint();
X    if (MDI->ac_cs & A_IRQ)
X  	mdiint();
X  }
X  
X  /*===========================================================================*
X   *				temporary stuff				     *
X   *===========================================================================*/
X  timint(t)	{fake_int("timint", t);}
X! siaint(t)	{fake_int("siaint", t);}
X! mdiint(t)	{fake_int("mdiint", t);}
X  iob(t)		{fake_int("iob", t);}
X  
X  fake_int(s, t) char *s; {
X--- 250,270 ----
X   *===========================================================================*/
X  PUBLIC aciaint()
X  {
X+ 	MFP->mf_ierb &= ~IB_AINT;
X+ 	do {
X    if (KBD->ac_cs & A_IRQ)
X  	kbdint();
X    if (MDI->ac_cs & A_IRQ)
X  	mdiint();
X+ 	} while ((MFP->mf_gpip & IO_AINT)==0);
X+ 	MFP->mf_ierb |= IB_AINT;
X  }
X  
X  /*===========================================================================*
X   *				temporary stuff				     *
X   *===========================================================================*/
X  timint(t)	{fake_int("timint", t);}
X! xmdiint(t)	{fake_int("mdiint", MDI->ac_da);}
X  iob(t)		{fake_int("iob", t);}
X  
X  fake_int(s, t) char *s; {
X*** /az1/hcj/minix.src/src/kernel/stvdu.c	Sat Oct 29 11:49:57 1988
X--- kernel/stvdu.c	Tue Dec  6 14:11:21 1988
X***************
X*** 720,725 ****
X--- 720,728 ----
X    }
X  }
X  
X+ PRIVATE noop()
X+ {}
X+ 
X  /*===========================================================================*
X   *				vduinit				     *
X   *===========================================================================*/
X***************
X*** 728,733 ****
X--- 731,739 ----
X    register struct vduinfo	*v = &vduinfo;
X  
X    tty_struct[CONSOLE].tty_start = start;
X+   tty_struct[CONSOLE].tty_open = noop;
X+   tty_struct[CONSOLE].tty_close = noop;
X+   tty_struct[CONSOLE].tty_ioctl = noop;
X    tty_struct[CONSOLE].tty_echo = echo;
X    if (VIDEO->vd_res & RES_HIGH) {
X  	v->mono = 1;
X*** /az1/hcj/minix.src/src/kernel/table.c	Sat Oct 29 11:50:03 1988
X--- kernel/table.c	Wed Dec 28 04:24:58 1988
X***************
X*** 33,45 ****
X  #include "proc.h"
X  
X  extern int sys_task(), clock_task(), mem_task(), floppy_task(),
X!            winchester_task(), tty_task(), printer_task();
X  
X  /* The startup routine of each task is given below, from -NR_TASKS upwards.
X   * The order of the names here MUST agree with the numerical values assigned to
X   * the tasks in ../h/com.h.
X   */
X  int (*task[NR_TASKS+INIT_PROC_NR+1])() = {
X   printer_task, tty_task, winchester_task, floppy_task, mem_task,
X   clock_task, sys_task, 0, 0, 0, 0
X  };
X--- 33,49 ----
X  #include "proc.h"
X  
X  extern int sys_task(), clock_task(), mem_task(), floppy_task(),
X!            winchester_task(), tty_task(), printer_task(),
X! 	   midi_task(), rs232_task(), bmsclock_task();
X  
X  /* The startup routine of each task is given below, from -NR_TASKS upwards.
X   * The order of the names here MUST agree with the numerical values assigned to
X   * the tasks in ../h/com.h.
X   */
X  int (*task[NR_TASKS+INIT_PROC_NR+1])() = {
X+  midi_task,
X+  rs232_task,
X+  bmsclock_task,
X   printer_task, tty_task, winchester_task, floppy_task, mem_task,
X   clock_task, sys_task, 0, 0, 0, 0
X  };
X*** /az1/hcj/minix.src/src/kernel/tty.h	Sat Oct 29 11:50:06 1988
X--- kernel/tty.h	Sat Dec 24 15:53:04 1988
X***************
X*** 1,10 ****
X  #define NR_TTYS            1	/* how many terminals can system handle */
X  #define CONSOLE            0	/* line number for console */
X  #define OPERATOR        (-1)	/* handle CTRL-ALT-PFX sequences */
X  
X! #define TTY_IN_BYTES     200	/* input queue size */
X  #define TAB_SIZE           8	/* distance between tabs */
X  #define TAB_MASK          07	/* mask for tty_column when tabbing */
X  #define MAX_OVERRUN       16	/* size of overrun input buffer */
X  
X  #define ERASE_CHAR      '\b'	/* default erase character */
X--- 1,16 ----
X  #define NR_TTYS            1	/* how many terminals can system handle */
X+ #define NR_RS232           1	/* how many rs232 ports can system handle */
X+ #define NR_MIDI           1	/* how many midi ports can system handle */
X  #define CONSOLE            0	/* line number for console */
X+ #define COM0               0	/* line number for rs232 */
X+ #define MIDI0               0	/* line number for midi */
X+ 
X  #define OPERATOR        (-1)	/* handle CTRL-ALT-PFX sequences */
X  
X! #define TTY_IN_BYTES     200	/* 200 input queue size */
X  #define TAB_SIZE           8	/* distance between tabs */
X  #define TAB_MASK          07	/* mask for tty_column when tabbing */
X+ 
X  #define MAX_OVERRUN       16	/* size of overrun input buffer */
X  
X  #define ERASE_CHAR      '\b'	/* default erase character */
X***************
X*** 28,33 ****
X--- 34,44 ----
X    int	(*tty_start)();		/* routine to start device output */
X    int	(*tty_echo)();		/* echo character and flush output */
X  
X+   /* Open/Close section. */
X+   int	(*tty_open)();		/* device specific open  */
X+   int	(*tty_close)();		/* device specific close */
X+   int   (*tty_ioctl)();		/* device specific ioctl */
X+ 
X    /* Terminal parameters and status. */
X    int tty_mode;			/* terminal mode set by IOCTL */
X    char tty_escaped;		/* 1 when '\' just seen, else 0 */
X***************
X*** 55,60 ****
X--- 66,72 ----
X    int tty_outleft;		/* # chars yet to be copied to tty_outqueue */
X    int tty_cum;			/* # chars copied to tty_outqueue so far */
X    int tty_pgrp;			/* Slot number of controlling process */
X+   char tty_baud;		/* index of baud (rs232) */
X  };
X  
X  /* Values for the fields. */
X*** /az1/hcj/minix.src/src/fs/table.c	Sat Oct 29 11:47:02 1988
X--- fs/table.c	Wed Dec 28 04:26:03 1988
X***************
X*** 124,130 ****
X      no_call,   rw_dev,      no_call,    WINCHESTER,  /* 3 = /dev/hd0  */
X      tty_open,  rw_dev,      no_call,    TTY,         /* 4 = /dev/tty0 */
X      no_call,   rw_dev2,     no_call,    TTY,         /* 5 = /dev/tty  */
X!     no_call,   rw_dev,      no_call,    PRINTER      /* 6 = /dev/lp   */
X  };
X  
X  int max_major = sizeof(dmap)/sizeof(struct dmap);
X--- 124,133 ----
X      no_call,   rw_dev,      no_call,    WINCHESTER,  /* 3 = /dev/hd0  */
X      tty_open,  rw_dev,      no_call,    TTY,         /* 4 = /dev/tty0 */
X      no_call,   rw_dev2,     no_call,    TTY,         /* 5 = /dev/tty  */
X!     no_call,   rw_dev,      no_call,    PRINTER,     /* 6 = /dev/lp   */
X!     no_call,   rw_dev,      no_call,    BMSCLOCK,    /* 7 = /dev/bms   */
X!     tty_open,  rw_dev,      no_call,    RS232,	    /* 8 = /dev/com0   */
X!     no_call,   rw_dev,      no_call,    MIDI,	    /* 9 = /dev/midi   */
X  };
X  
X  int max_major = sizeof(dmap)/sizeof(struct dmap);
X*** /az1/hcj/minix.src/src/h/com.h	Sat Oct 29 11:49:02 1988
X--- h/com.h	Thu Dec 29 04:00:07 1988
X***************
X*** 21,26 ****
X--- 21,27 ----
X  #	define SYS_FRESH  10	/* fcn code for sys_fresh() */
X  #endif
X  #	define SYS_KILL   11	/* fcn code for sys_kill(proc, sig) */
X+ #	define SYS_TRACE  12	/* fcn code for sys_trace(req,pid,addr,data) */
X  
X  #define CLOCK             -3	/* clock class */
X  #	define SET_ALARM   1	/* fcn code to CLOCK, set up alarm */
X***************
X*** 50,57 ****
X--- 51,84 ----
X  #	define TTY_WRITE   4	/* fcn code for writing to tty */
X  #	define TTY_IOCTL   5	/* fcn code for ioctl */
X  #	define TTY_SETPGRP 6	/* fcn code for setpgrp */
X+ #	define TTY_OPEN 7	/* fcn code for open */
X+ #	define TTY_CLOSE 8	/* fcn code for close */
X  #	define SUSPEND	-998	/* used in interrupts when tty has no data */
X  
X+ #define BMSCLOCK	   -9	/* clock on BMS 100 */
X+ #	define BMS_READ	    3
X+ #	define BMS_WRITE    4
X+ 
X+ #define RS232		   -10	/* serial port */
X+ #	define RS232_CHAR_INT 1	/* fcn code for tty input interrupt */
X+ #	define RS232_O_DONE  2	/* fcn code for tty output done */
X+ #	define RS232_READ	   3	/* fcn code for reading from tty */
X+ #	define RS232_WRITE   4	/* fcn code for writing to tty */
X+ #	define RS232_IOCTL   5	/* fcn code for ioctl */
X+ #	define RS232_SETPGRP 6	/* fcn code for setpgrp */
X+ #	define RS232_OPEN 7	/* fcn code for open */
X+ #	define RS232_CLOSE 8	/* fcn code for close */
X+ 	
X+ #define MIDI		   -11	/* midi port */
X+ #	define MIDI_CHAR_INT 1	/* fcn code for tty input interrupt */
X+ #	define MIDI_O_DONE  2	/* fcn code for tty output done */
X+ #	define MIDI_READ	   3	/* fcn code for reading from tty */
X+ #	define MIDI_WRITE   4	/* fcn code for writing to tty */
X+ #	define MIDI_IOCTL   5	/* fcn code for ioctl */
X+ #	define MIDI_SETPGRP 6	/* fcn code for setpgrp */
X+ #	define MIDI_OPEN 7	/* fcn code for open */
X+ #	define MIDI_CLOSE 8	/* fcn code for close */
X+ 	
X  /* Names of message fields for messages to CLOCK task. */
X  #define DELTA_TICKS    m6_l1	/* alarm interval in clock ticks */
X  #define FUNC_TO_CALL   m6_f1	/* pointer to function to call */
X***************
X*** 102,104 ****
X--- 129,142 ----
X  #define MEM_PTR        m1_p1	/* tells where memory map is for sys_newmap */
X  #define CANCEL             0    /* general request to force a task to cancel */
X  #define SIG_MAP        m1_i2	/* used by kernel for passing signal bit map */
X+ 
X+ /* do_ioctl in fs/device.c needs to know who to do ioctl for
X+  * this is an unfortunate hack. HCJ
X+  * These numbers are the major numbers in fs/table.c
X+  */
X+ 
X+ #define DEV_WINI	3
X+ #define	DEV_TTY		4
X+ #define	DEV_TTY0	5
X+ #define DEV_RS232	8
X+ #define DEV_MIDI	9
X*** /az1/hcj/minix.src/src/h/const.h	Sat Oct 29 11:49:03 1988
X--- h/const.h	Fri Dec 16 15:48:03 1988
X***************
X*** 22,29 ****
X  #define MAJOR	           8	/* major device = (dev>>MAJOR) & 0377 */
X  #define MINOR	           0	/* minor device = (dev>>MINOR) & 0377 */
X  
X! #define NR_TASKS           8	/* number of tasks in the transfer vector */
X! #define NR_PROCS          16	/* number of slots in proc table */
X  #define NR_SEGS            3	/* # segments per process */
X  #define T                  0	/* proc[i].mem_map[T] is for text */
X  #define D                  1	/* proc[i].mem_map[D] is for data */
X--- 22,29 ----
X  #define MAJOR	           8	/* major device = (dev>>MAJOR) & 0377 */
X  #define MINOR	           0	/* minor device = (dev>>MINOR) & 0377 */
X  
X! #define NR_TASKS           11	/* number of tasks in the transfer vector */
X! #define NR_PROCS          17	/* number of slots in proc table */
X  #define NR_SEGS            3	/* # segments per process */
X  #define T                  0	/* proc[i].mem_map[T] is for text */
X  #define D                  1	/* proc[i].mem_map[D] is for data */
X***************
X*** 64,70 ****
X  #define NO_NUM           0x8000	/* used as numerical argument to panic() */
X  #define MAX_PATH            128	/* max length of path names */
X  #define SIG_PUSH_BYTES	      8	/* how many bytes pushed by signal */
X! #define MAX_ISTACK_BYTES   1024	/* maximum initial stack size for EXEC */
X  
X  /* Device numbers of root (RAM) and boot (fd0) devices. */
X  #define ROOT_DEV (dev_nr)   256	/* major-minor device number of root dev */
X--- 64,70 ----
X  #define NO_NUM           0x8000	/* used as numerical argument to panic() */
X  #define MAX_PATH            128	/* max length of path names */
X  #define SIG_PUSH_BYTES	      8	/* how many bytes pushed by signal */
X! #define MAX_ISTACK_BYTES   2048	/* maximum initial stack size for EXEC */
X  
X  /* Device numbers of root (RAM) and boot (fd0) devices. */
X  #define ROOT_DEV (dev_nr)   256	/* major-minor device number of root dev */
X*** /az1/hcj/minix.src/src/h/sgtty.h	Sat Oct 29 11:49:04 1988
X--- h/sgtty.h	Wed Dec 28 05:06:36 1988
X***************
X*** 18,31 ****
X  };
X  
X  /* Field names */
X! #define XTABS	     0006000	/* do tab expansion */
X  #define RAW	     0000040	/* enable raw mode */
X  #define CRMOD	     0000020	/* map lf to cr + lf */
X  #define ECHO	     0000010	/* echo input */
X  #define CBREAK	     0000002	/* enable cbreak mode */
X  #define COOKED       0000000	/* neither CBREAK nor RAW */
X  
X  #define TIOCGETP (('t'<<8) | 8)
X  #define TIOCSETP (('t'<<8) | 9)
X  #define TIOCGETC (('t'<<8) | 18)
X  #define TIOCSETC (('t'<<8) | 17)
X--- 18,77 ----
X  };
X  
X  /* Field names */
X! /* every one thinks XTABS is 06000 but only 1 bit is needed:
X!  */
X! #define XTABS	     0004000	/* do tab expansion */
X  #define RAW	     0000040	/* enable raw mode */
X+ #define IN_CANON     0001000	/* when off, no special processing on input */
X+                                 /* the VEOF is how many inchars to wakeup on*/
X  #define CRMOD	     0000020	/* map lf to cr + lf */
X+ /* the following is a magic cookie, the same name and value with termio.h */
X  #define ECHO	     0000010	/* echo input */
X  #define CBREAK	     0000002	/* enable cbreak mode */
X  #define COOKED       0000000	/* neither CBREAK nor RAW */
X+ /* when IN_CANON is OFF, then we will interpret additional bits for special
X+  * processing
X+  */
X+ #define SPECIAL_0    0000040
X+ #define SPECIAL_1    0000100
X  
X  #define TIOCGETP (('t'<<8) | 8)
X  #define TIOCSETP (('t'<<8) | 9)
X  #define TIOCGETC (('t'<<8) | 18)
X  #define TIOCSETC (('t'<<8) | 17)
X+ #define TIOCSTART (('t'<<8) | 1)
X+ #define TIOCSTOP (('t'<<8) | 2)
X+ 
X+ /* Baud rates for rs232 */
X+ #define B19200	0
X+ #define B9600	1
X+ #define B4800	2
X+ #define B3600	3
X+ #define B2400	4
X+ #define B2000	5
X+ #define B1800	6
X+ #define B1200	7
X+ #define B600	8
X+ #define B300	9
X+ #define B200	10
X+ #define B150	11
X+ #define B134	12
X+ #define B110	13
X+ #define B75	14
X+ #define B50	15
X+ 
X+ 
X+ /* these ioctls for rs232 taken from termio.h */
X+ #ifndef TCGETA
X+ 
X+ #define	TC_RS232	('T'<<8)
X+ #define	TCGETA	(TC_RS232|1)
X+ #define	TCSETA	(TC_RS232|2)
X+ #define	TCSETAW	(TC_RS232|3)
X+ #define	TCSETAF	(TC_RS232|4)
X+ #define	TCSBRK	(TC_RS232|5)
X+ #define	TCXONC	(TC_RS232|6)
X+ #define	TCFLSH	(TC_RS232|7)
X+ #define	TCDSET	(TC_RS232|32)
X+ #endif
X+ 
SHAR_EOF