uipc.p2

Bradley Smith bes at holin.ATT.COM
Sun Aug 13 02:36:41 AEST 1989


: This is a shar archive.  Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
if test -f 'uipc'
then	rm 'uipc'
fi
if test -d 'uipc'
then	:
else	echo 'Making     uipc/'
	mkdir 'uipc'
fi
chmod 'u=rwx,g=rx,o=rx' 'uipc'
echo 'Extracting uipc/conf.h'
sed 's/^X//' > uipc/conf.h << '+ END-OF-FILE uipc/conf.h'
X/*
X *	@(#)conf.h	1.1	(Alex Crain)	6/20/89
X *
X *  conf.h - 3b1 specifics for the uipc driver.
X *
X *  (C) Copyright 1989 Alex Crain
X *
X */
X
X#ifndef _conf_h_
X#define _conf_h_
X
X/*
X *  Useful spls. 
X */
X
X#define splimp	spl7
X#define splnet	spl5
X
X/*
X *  Useful macros
X */
X
X#define MIN(x, y) ((x) < (y) ? (x) : (y))
X#define MAX(x, y) ((x) > (y) ? (x) : (y))
X
X/*
X *  stdata is a pointer to a streams structure, and is referenced in 
X *  sys/inode.h. We rename it here and use it for a socket pointer.
X */
X
X#define stdata socket
X#define i_sptr i_socket
X
X/*
X *  I never understood why at&t doesn't offer a complete set of these.
X *  ushort and uint are found in types.h, but uchar() is a kernel function,
X *  so we invent a complete set from scratch.
X */
X
Xtypedef unsigned long	u_long;
Xtypedef unsigned int	u_int;
Xtypedef unsigned short	u_short;
Xtypedef unsigned char	u_char;
X
X/*
X *  The number of available mbufs
X */
X
X#define NMBUF 512
X
X/*
X *  New signals. The signal numbers are not the same as BSD.
X */
X
X#define SIGURG		22
X#define SIGIO		23
X
X/*
X *  New flags for (struct file *)->i_flag
X */
X
X#define FMARK		00040
X#define FDEFER		00100
X
X/*
X *  Flags for iomove (addr, len, flag)
X */
X
X#define IO_WRITE	0		/* u.u_base -> addr	*/
X#define IO_READ		1		/* addr -> u.u_base	*/
X
X/*
X *  Flags for useracc (addr, len, flag)
X */
X
X#define UACC_READ	0
X#define UACC_WRITE	1
X
X/*
X *  define the relationship between file structures and sockets
X */
X
X#define filesock(FP)	mtod (ptom ((FP)->f_offset), struct socket *)
X#define sockoffset(SO)	mtop (dtom (SO), off_t)
X
X#endif /* _conf_h_ */
+ END-OF-FILE uipc/conf.h
chmod 'u=rw,g=rw,o=rw' 'uipc/conf.h'
echo '	-rw-rw-rw-   1 bes      HSJ         1561 Jul 18 23:44 uipc/conf.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/conf.h
echo 'Extracting uipc/domain.h'
sed 's/^X//' > uipc/domain.h << '+ END-OF-FILE uipc/domain.h'
X/*
X *	@(#)domain.h	1.1	(Alex Crain)	6/20/89
X *
X *  domain.h - domain stucture definitions.
X *
X *  Written by Alex Crain.
X *
X *  This file is based in the Berkeley header file of the same
X *  name, but is *not* guarenteed to be in any way compatable. It is
X *  close enough to the berkeley code that the following applies...
X *
X *  Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X *  All rights reserved.
X * 
X *  Redistribution and use in source and binary forms are permitted
X *  provided that this notice is preserved and that due credit is given
X *  to the University of California at Berkeley. The name of the University
X *  may not be used to endorse or promote products derived from this
X *  software without specific prior written permission. This software
X *  is provided "as is" without express or implied warranty.
X *
X */
X
X#ifndef _domain_h_
X#define _domain_h_
X
X#include <uipc/conf.h>
X
Xstruct domain {
X   int 		dom_family;
X   char 	* dom_name;
X   int		(* dom_init) ();
X   int		(* dom_externalize) ();
X   int		(* dom_dispose) ();
X   struct	protosw * dom_protosw, * dom_protoswNPROTOSW;
X   struct 	domain * dom_next;
X};
X
X#ifdef KERNEL
Xstruct domain * domains;
X#endif
X
X#endif _domain_h_
+ END-OF-FILE uipc/domain.h
chmod 'u=rw,g=rw,o=rw' 'uipc/domain.h'
echo '	-rw-rw-rw-   1 bes      HSJ         1217 Jul 18 23:44 uipc/domain.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/domain.h
echo 'Extracting uipc/fproto.h'
sed 's/^X//' > uipc/fproto.h << '+ END-OF-FILE uipc/fproto.h'
X/*
X *	@(#)fproto.h	1.1	(Alex Crain)	6/20/89
X *
X *  fproto.h - function prototypes for uipc driver.
X *
X *  Written by Alex Crain.
X *
X *  This file contains ANSI function prototypes for the entire uipc 
X *  package and many of the existing system entry points. The prototypes 
X *  are blocked within a "#ifdef __STDC__" construct, the with an alternate
X *  "#else" block of old-style function declarations.
X */
X
X#ifndef _fproto_h_
X#define _fproto_h_
X
X#ifdef __STDC__
X/*
X *  Declarations from debug.c
X */
X
Xvoid dump_mbuf (struct mbuf *m, char *func);
X
X/*
X *  Declarations from domain.c
X */
X
Xvoid domaininit (void);
Xstruct protosw *pffindtype (int family, int type);
Xstruct protosw *pffindproto (int family, int protocol, int type);
X
X/*
X *  Declarations from interface.c
X */
X
Xvoid uipcinit (void);
Xvoid dosyscall(void);
Xint uipcrelease (void);
Xvoid uipc_write (void);
Xvoid uipc_read (void);
Xvoid uipc_close (off_t sp);
Xvoid bzero (char *s, int n);
Xint ufavail (void);
X
X/*
X *  Declarations from mbuf.c
X */
X
Xvoid mbinit(void);
Xstruct mbuf *m_get (int canwait, int type);
Xstruct mbuf *m_getclr (int canwait, int type);
Xstruct mbuf *m_free (struct mbuf *m);
Xstruct mbuf *m_more (int canwait, int type);
Xvoid m_freem (struct mbuf *m);
Xstruct mbuf *m_copy (struct mbuf *m, int off, int len);
X
X/*
X *  Declarations from socket.c
X */
X
Xint socreate (int domain, struct socket ** sop, int type, int proto);
Xint sobind (struct socket *so, struct mbuf *nam);
Xint solisten (struct socket *so, int backlog);
Xvoid sofree (struct socket *so);
Xint soclose (struct socket *so);
Xint soabort (struct socket *so);
Xint soaccept (struct socket *so, struct mbuf *nam);
Xint soconnect (struct socket *so, struct mbuf *nam);
Xint soconnect2 (struct socket *so1, struct socket *so2);
Xint sodisconnect (struct socket *so);
Xint sosend (struct socket *so, struct mbuf *nam, int flags, struct mbuf *rights);
Xint soreceive (struct socket *so, struct mbuf **nam, int flags, struct mbuf **rights);
Xvoid sorflush (struct socket *so);
Xint sosetopt (struct socket *so, int level, int optname, struct mbuf *m0);
Xint sogetopt (struct socket *so, int level, int optname, struct mbuf **mp);
Xvoid sohasoutofband (struct socket *so);
X
X/*
X *  Declarations from socket2.c
X */
X
X
Xvoid soisconnecting (struct socket *so);
Xvoid soisconnected (struct socket *so);
Xvoid soisdisconnecting (struct socket *so);
Xvoid soisdisconnected (struct socket *so);
Xstruct socket *sonewconn (struct socket *head);
Xvoid soinsque (struct socket *head, struct socket *so, int q);
Xint soqremque (struct socket *so, int q);
Xvoid socantsendmore (struct socket *so);
Xvoid socantrcvmore (struct socket *so);
Xvoid sbselqueue (struct sockbuf *sb);
Xvoid sbwait (struct sockbuf *sb);
Xvoid sbwakeup (struct sockbuf *sb);
Xvoid sowakeup (struct socket *so, struct sockbuf *sb);
Xint soreserve (struct socket *so, int sndcc, int rcvcc);
Xint sbreserve (struct sockbuf *sb, int cc);
Xvoid sbrelease (struct sockbuf *sb);
Xvoid sbappend (struct sockbuf *sb, struct mbuf *m);
Xvoid sbappendrecord (struct sockbuf *sb, struct mbuf *m0);
Xint sbappendaddr (struct sockbuf *sb, struct sockaddr *asa, struct mbuf *m0, struct mbuf *rights0);
Xint sbappendrights (struct sockbuf *sb, struct mbuf *m0, struct mbuf *rights);
Xvoid sbcompress (struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
Xvoid sbflush (struct sockbuf *sb);
Xvoid sbdrop (struct sockbuf *sb, int len);
Xvoid sbdroprecord (struct sockbuf *sb);
X
X/*
X *  Declarations from syscalls.c
X */
X
Xint sosetup(void);	/* setup window stuff needed */
Xint soselect (void);
Xint socket (void);
Xint bind (void);
Xint listen (void);
Xint accept (void);
Xint connect (void);
Xint socketpair (void);
Xint sendto (void);
Xint send (void);
Xint sendmsg (void);
Xvoid sendit (int s, struct msghdr * mp, int flags);
Xint recvfrom (void);
Xint recv (void);
Xint recvmsg (void);
Xvoid recvit (int s, struct msghdr * mp, int flags, caddr_t np, caddr_t rp);
Xint setsockopt (void);
Xint getsockopt (void);
Xint sockpipe (void);
Xvoid getsockname (void);
Xint sockargs (struct mbuf **aname, caddr_t name, int namelen, int type);
Xstruct file *getsock (int fd);
X
X/*
X *  Declarations from usrreq.c
X */
X
Xint uipc_usrreq (struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *rights);
Xint unp_attach (struct socket *so);
Xvoid unp_detach (struct unpcb *unp);
Xint unp_bind (struct unpcb *unp, struct mbuf *nam);
Xint unp_connect (struct socket *so, struct mbuf *nam);
Xint unp_connect2 (struct socket *so1, struct socket *so2);
Xvoid unp_disconnect (struct unpcb *unp);
Xvoid unp_usrclosed (struct unpcb *unp);
Xint unp_externalize (struct mbuf *rights);
Xint unp_internalize (struct mbuf *rights);
Xvoid unp_gc (void);
Xvoid unp_dispose (struct mbuf *m);
Xvoid unp_scan (struct mbuf *m0, int (*op)());
Xvoid unp_mark (struct file *fp);
Xvoid unp_discard (struct file *fp);
Xvoid unp_drop (struct unpcb *unp, int errno);
X
X/*
X * declarations for linesw.c
X */
Xint so_linesw_read(struct tty *tp);
Xint so_linesw_write(struct tty  *tp);
Xint so_linesw_setup(void);
X
X/* Misc stuff from -bes
X */
X
X
X/*
X *  declarations left out of systm.h
X */
X
Xint suser (void);
Xint fuword (int * addr);
Xint useracc (caddr_t address, int length, int flag);
X
Xshort spl7 (void);
Xshort spl6 (void);
Xshort spl5 (void);
Xshort spl4 (void);
Xshort spl3 (void);
Xshort spl2 (void);
Xshort spl1 (void);
Xshort splx (short sp);
X
Xint sleep (caddr_t addr, int p);
Xint wakeup (caddr_t addr);
Xvoid signal (int pgrp, int sig);
Xvoid psignal (struct proc * p, int sig);
Xint setjmp (label_t env);
Xvoid longjmp (label_t env, int val);
X
Xvoid panic (caddr_t msg);
Xvoid printf();
Xvoid eprintf();
X
Xint access (struct inode * ip, int mode);
Xextern struct inode * iget ();
Xvoid iput (struct inode * ip);
Xvoid prele (struct inode * ip);
Xint ufalloc (int fp);
Xvoid closef (struct file * fp);
Xvoid locsys ();
X
X#else ! __STDC__
X
X/*
X *  Declarations from debug.c
X */
X
Xvoid dump_mbuf ();
X
X/*
X *  Declarations from domain.c
X */
X
Xvoid domaininit ();
Xstruct protosw *pffindtype ();
Xstruct protosw *pffindproto ();
X
X/*
X *  Declarations from interface.c
X */
X
Xvoid uipcinit ();
Xvoid dosyscall();
Xint uipcrelease ();
Xvoid uipc_write ();
Xvoid uipc_read ();
Xvoid uipc_close ();
Xvoid bzero ();
Xint ufavail ();
X
X/*
X *  Declarations from mbuf.c
X */
X
Xvoid mbinit();
Xstruct mbuf *m_get ();
Xstruct mbuf *m_getclr ();
Xstruct mbuf *m_free ();
Xstruct mbuf *m_more ();
Xvoid m_freem ();
Xstruct mbuf *m_copy ();
X
X/*
X *  Declarations from socket.c
X */
X
Xint socreate ();
Xint sobind ();
Xint solisten ();
Xvoid sofree ();
Xint soclose ();
Xint soabort ();
Xint soaccept ();
Xint soconnect ();
Xint soconnect2 ();
Xint sodisconnect ();
Xint sosend ();
Xint soreceive ();
Xvoid sorflush ();
Xint sosetopt ();
Xint sogetopt ();
Xvoid sohasoutofband ();
X
X/*
X *  Declarations from socket2.c
X */
X
X
Xvoid soisconnecting ();
Xvoid soisconnected ();
Xvoid soisdisconnecting ();
Xvoid soisdisconnected ();
Xstruct socket *sonewconn ();
Xvoid soinsque ();
Xint soqremque ();
Xvoid socantsendmore ();
Xvoid socantrcvmore ();
Xvoid sbselqueue ();
Xvoid sbwait ();
Xvoid sbwakeup ();
Xvoid sowakeup ();
Xint soreserve ();
Xint sbreserve ();
Xvoid sbrelease ();
Xvoid sbappend ();
Xvoid sbappendrecord ();
Xint sbappendaddr ();
Xint sbappendrights ();
Xvoid sbcompress ();
Xvoid sbflush ();
Xvoid sbdrop ();
Xvoid sbdroprecord ();
X
X/*
X *  Declarations from syscalls.c
X */
X
Xint sosetup();	/* setup window stuff needed */
Xint soselect ();
Xint socket ();
Xint bind ();
Xint listen ();
Xint accept ();
Xint connect ();
Xint socketpair ();
Xint sockpipe ();
Xint sendto();
Xint send();
Xint recvfrom();
Xint recv ();
Xint setsockopt();
Xint getsockopt();
Xvoid sendit ();
Xint sockpipe ();
Xvoid getsockname ();
Xvoid recvit ();
Xint sockargs ();
Xstruct file *getsock ();
X
X/*
X *  Declarations from usrreq.c
X */
X
Xint uipc_usrreq ();
Xint unp_attach ();
Xvoid unp_detach ();
Xint unp_bind ();
Xint unp_connect ();
Xint unp_connect2 ();
Xvoid unp_disconnect ();
Xvoid unp_usrclosed ();
Xvoid unp_drop ();
Xint unp_externalize ();
Xint unp_internalize ();
Xvoid unp_gc ();
Xvoid unp_dispose ();
Xvoid unp_scan ();
Xvoid unp_mark ();
Xvoid unp_discard ();
X
X/*
X * declarations for linesw.c
X */
Xint so_linesw_read();
Xint so_linesw_write();
Xint so_linesw_setup();
X
X/*
X *  declarations left out of systm.h
X */
X
Xshort spl7 ();
Xshort spl6 ();
Xshort spl5 ();
Xshort spl4 ();
Xshort spl3 ();
Xshort spl2 ();
Xshort spl1 ();
Xshort splx ();
X
Xint sleep ();
Xint wakeup ();
X
Xvoid panic ();
Xvoid eprintf();
Xvoid signal ();
Xvoid psignal ();
X
Xint setjmp ();
Xvoid longjmp ();
X
Xint suser ();
X
X#endif __STDC__
X#endif _fproto_h_
+ END-OF-FILE uipc/fproto.h
chmod 'u=rw,g=rw,o=rw' 'uipc/fproto.h'
echo '	-rw-rw-rw-   1 bes      HSJ         8443 Aug 11 22:37 uipc/fproto.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/fproto.h
echo 'Extracting uipc/mbuf.h'
sed 's/^X//' > uipc/mbuf.h << '+ END-OF-FILE uipc/mbuf.h'
X/*
X *	@(#)mbuf.h	1.1	(Alex Crain)	6/20/89
X *
X *  mbuf.h - mbuf description macros
X *
X *  Written by Alex Crain.
X *
X *  This file is loosly based in the Berkeley header file of the 
X *  same name, but is *not* guarenteed to be in any way compatable. It is
X *  close enough to the berkeley code that the following applies...
X *
X *  Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X *  All rights reserved.
X * 
X *  Redistribution and use in source and binary forms are permitted
X *  provided that this notice is preserved and that due credit is given
X *  to the University of California at Berkeley. The name of the University
X *  may not be used to endorse or promote products derived from this
X *  software without specific prior written permission. This software
X *  is provided "as is" without express or implied warranty.
X *
X */
X
X#ifndef _mbuf_h_
X#define _mbuf_h_
X
X#include <uipc/conf.h>
X
X#define MSIZE		128
X
X#define MMINOFF		12
X#define MTAIL		4
X#define MMAXOFF		(MSIZE - MTAIL)
X#define MLEN		(MSIZE - MMINOFF - MTAIL)
X
X#define dtom(x)		((struct mbuf *)((int)(x) & ~(MSIZE - 1)))
X#define mtod(m, t)	((t)((int)(m) + (m)->m_off))
X
X#define ptom(x)		((struct mbuf *)(((int)(x) << 7) | mbmask))
X#define mtop(x, t)	((t)(((int)(x) >> 7) & 0xFFFF))
X
Xstruct mbuf {
X   struct	mbuf * m_next;
X   u_long	m_off;
X   short	m_len;
X   short	m_type;
X   u_char	m_dat[MLEN];
X   struct	mbuf * m_act;
X};
X
X#define MT_FREE		0
X#define MT_DATA		1
X#define MT_HEADER	2
X#define MT_SOCKET	3
X#define MT_PCB		4
X#define MT_SONAME	8
X#define MT_SOOPTS	10
X#define MT_RIGHTS	12
X
X/* flags to mget */
X#define M_DONTWAIT	0
X#define M_WAIT		1
X
X/* length to m_copy to copy all */
X#define M_COPYALL	10000000
X
X#define MGET(m, i, t)	\
X{  int _s = splimp ();		\
X   if ((m) = mfree)	\
X    {  if ((m)->m_type != MT_FREE) panic("mget"); (m)->m_type = t; \
X       mfree = (m)->m_next; (m)->m_next = (struct mbuf *) 0; \
X       (m)->m_off = MMINOFF; } \
X   else \
X       (m) = m_more (i, t); \
X   splx (_s); }
X
X#define MFREE(m, n) \
X{  int _s = splimp (); \
X   if ((m)->m_type == MT_FREE) panic ("mfree"); \
X   (m)->m_type = MT_FREE; \
X   (n) = (m)->m_next; (m)->m_next = mfree; mfree = (m); \
X   (m)->m_off = 0; (m)->m_act = 0;\
X   splx (_s); \
X   if (m_want) \
X    { m_want = 0; \
X      wakeup((caddr_t)&mfree); }}
X
X#ifdef KERNEL
Xstruct mbuf * mfree, * mbmem;
Xunsigned int mbmask;
Xint m_want;
Xstruct mbuf * m_get (), * m_getclr(), *m_free (), * m_more (), * m_copy ();
Xvoid m_freem ();
X#endif
X
X#endif _mbuf_h_
+ END-OF-FILE uipc/mbuf.h
chmod 'u=rw,g=rw,o=rw' 'uipc/mbuf.h'
echo '	-rw-rw-rw-   1 bes      HSJ         2484 Jul 18 23:44 uipc/mbuf.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/mbuf.h
echo 'Extracting uipc/number-ptys.h'
sed 's/^X//' > uipc/number-ptys.h << '+ END-OF-FILE uipc/number-ptys.h'
X/* number-ptys.h - Eric H. Herrin II
X *
X * define the number of ptys here so the actual number only has to be in
X * one place.
X * 
X * Version 2.1
X */
X#define NUMBER_OF_PTYS 8
+ END-OF-FILE uipc/number-ptys.h
chmod 'u=rw,g=r,o=r' 'uipc/number-ptys.h'
echo '	-rw-r--r--   1 bes      HSJ          175 Aug  4 22:39 uipc/number-ptys.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/number-ptys.h
echo 'Extracting uipc/protosw.h'
sed 's/^X//' > uipc/protosw.h << '+ END-OF-FILE uipc/protosw.h'
X/*
X *	@(#)protosw.h	1.1	(Alex Crain)	6/20/89
X *
X *  protosw.h - protocol switch definition
X *
X *  Written by Alex Crain.
X *
X *  This file is based in the Berkeley header file of the 
X *  same name, but is *not* guarenteed to be in any way compatable. It is
X *  close enough to the berkeley code that the following applies...
X *
X *  Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X *  All rights reserved.
X * 
X *  Redistribution and use in source and binary forms are permitted
X *  provided that this notice is preserved and that due credit is given
X *  to the University of California at Berkeley. The name of the University
X *  may not be used to endorse or promote products derived from this
X *  software without specific prior written permission. This software
X *  is provided "as is" without express or implied warranty.
X *
X */
X
X#ifndef _proto_h_
X#define _proto_h_
X
X#include <uipc/conf.h>
X
Xstruct protosw {
X   short	pr_type;
X   struct	domain * pr_domain;
X   short	pr_protocol;
X   short	pr_flags;
X   int 		(* pr_input) ();
X   int		(* pr_output) ();
X   int		(* pr_ctlinput) ();
X   int		(* pr_ctloutput) ();
X   int		(* pr_usrreq) ();
X   int		(* pr_init) ();
X   int		(* pr_fasttimo) ();
X   int		(* pr_slowtimo) ();
X   int		(* pr_drain) ();
X};
X
X#define PR_SLOWHZ	2
X#define PR_FASTHZ	5
X
X/*
X *  values for pr_flags
X */
X
X#define PR_ATOMIC	0x01		/* exchange atomic messages only     */
X#define PR_ADDR		0x02		/* addresses given w/ messages	     */
X#define PR_CONNREQUIRED	0x04		/* connection reuired by protocol    */
X#define PR_WANTRCVD	0x08		/* want PRU_RCVD calls		     */
X#define PR_RIGHTS	0x10		/* passes capabilities		     */
X
X/*
X *  arguments to usrreq
X */
X
X#define PRU_ATTACH	0
X#define PRU_DETACH	1
X#define PRU_BIND	2
X#define PRU_LISTEN	3
X#define PRU_CONNECT	4
X#define PRU_ACCEPT	5
X#define PRU_DISCONNECT	6
X#define PRU_SHUTDOWN	7
X#define PRU_RCVD	8
X#define PRU_SEND	9
X#define PRU_ABORT	10
X#define PRU_CONTROL	11
X#define PRU_SENSE	12
X#define PRU_RCVOOB	13
X#define PRU_SENDOOB	14
X#define PRU_SOCKADDR	15
X#define PRU_PEERADDR	16
X#define PRU_CONNECT2	17
X#define PRU_FASTTIMO	18
X#define PRU_SLOWTIMO	19
X#define PRU_PROTORCV	20
X#define PRU_PROTOSEND	21
X
X#define PRE_NREQ	21
X
X#define PRCO_GETOPT	0
X#define PRCO_SETOPT	1
X
X#endif /* _proto_h_ */
+ END-OF-FILE uipc/protosw.h
chmod 'u=rw,g=rw,o=rw' 'uipc/protosw.h'
echo '	-rw-rw-rw-   1 bes      HSJ         2264 Jul 18 23:44 uipc/protosw.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/protosw.h
echo 'Extracting uipc/pty.h'
sed 's/^X//' > uipc/pty.h << '+ END-OF-FILE uipc/pty.h'
X/* pty.h - Eric H. Herrin II (eric at ms.uky.edu)
X * 
X * some elementary definitions for the pty driver (UnixPC version)
X *
X * Version 2.1
X */
X
Xextern int ptsproc();
Xextern int ptyopen();
X
X#define True  (1 == 1)
X#define False (0 == 1)
X
X/*  This is the total number of ptys.  Note the maximum number here is
X *  currently 64 for the UnixPC (128 minor devices/2 minor devices per pty
X *  yields 64 total ptys).  I really don't see the need for more than 32
X *  on the 3B1, however, if someone does, then (s)he can change it.
X */
X#include <uipc/number-ptys.h>
X#define PTYCNT (dev_t)NUMBER_OF_PTYS
X
X/* some definitions to include kernel info from system header files.
X */
X#define KERNEL 1
X#define defined_io 1
X#define NOSTREAMS 1
X
X#define UNIXPC 1
X
X/* This macro returns True if the parameter is a master minor device number,
X * False otherwise.
X */
X#define Master( dev )	(minor(dev) >= PTYCNT)
X
Xextern struct tty pts_tty[];
Xextern int pts_cnt;
Xextern int ptystate[];
Xextern int pty_major;
+ END-OF-FILE uipc/pty.h
chmod 'u=rw,g=r,o=r' 'uipc/pty.h'
echo '	-rw-r--r--   1 bes      HSJ          983 Aug  6 11:00 uipc/pty.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/pty.h
echo 'Extracting uipc/socket.h'
sed 's/^X//' > uipc/socket.h << '+ END-OF-FILE uipc/socket.h'
X/*
X *	@(#)socket.h	1.1	(Alex Crain)	6/20/89
X *
X *  socket.h - socket related definitions
X *
X *  Written by Alex Crain.
X *
X *  This file is loosly based in the Berkeley header file of the 
X *  same name, but is *not* guarenteed to be in any way compatable. It is
X *  close enough to the berkeley code that the following applies...
X *
X *  Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X *  All rights reserved.
X * 
X *  Redistribution and use in source and binary forms are permitted
X *  provided that this notice is preserved and that due credit is given
X *  to the University of California at Berkeley. The name of the University
X *  may not be used to endorse or promote products derived from this
X *  software without specific prior written permission. This software
X *  is provided "as is" without express or implied warranty.
X *
X */
X
X#ifndef _socket_h_
X#define _socket_h_
X
X#include <uipc/conf.h>
X
X/*
X *  Socket types
X */
X
X#define SOCK_STREAM	1		/* stream socket	*/
X#define SOCK_DGRAM	2		/* datagram socket	*/
X#ifdef notdef
X#define SOCK_RAW	3		/* raw socket		*/
X#endif
X
X/*
X *  Socket option flags
X */
X
X#define SO_DEBUG	0x0001
X#define SO_ACCEPTCONN	0x0002
X#define SO_REUSEADDR	0x0004
X#define SO_KEEPALIVE	0x0008
X#define SO_DONTROUTE	0x0010
X#define SO_BROADCAST	0x0020
X#define SO_USELOOPBACK	0x0040
X#define SO_LINGER	0x0080
X#define SO_OOBINLINE	0x0100
X/*
X *  Extra socket options
X */
X
X#define SO_SNDBUF	0x1001
X#define SO_RCVBUF	0x1002
X#define SO_SNDLOWAT	0x1003
X#define SO_RCVLOWAT	0x1004
X#define SO_SNDTIMEO	0x1005
X#define SO_RCVTIMEO	0x1006
X#define SO_ERROR	0x1007
X#define SO_TYPE		0x1008
X
X/*
X *  Linger structure
X */
X
Xstruct linger {
X   int	l_onoff;
X   int	l_linger;
X};
X
X#define SOL_SOCKET	0xffff
X
X/*
X *  Address families
X */
X
X#define AF_UNSPEC	0
X#define AF_UNIX		1
X#define AF_INIT		2
X
X#define AF_MAX		3
X
X/*
X *  Structure for address specs.
X */
X
Xstruct sockaddr {
X   u_short	sa_family;		/* address family	*/
X   char		sa_data[14];		/* address spec		*/
X};
X
X/*
X *  Protocol families
X */
X
X#define PF_UNSPEC	AF_UNSPEC
X#define PF_UNIX		AF_UNIX
X#define PF_INET		AF_INET
X
X#define PF_MAX		AF_MAX
X
X/*
X *  maximum queue length for listen ()
X */
X
X#define SOMAXCONN	5
X
X
X/*
X *  message header for recvmsg and sendmsg calls.
X */
X
Xstruct msghdr {
X   caddr_t	msg_name;
X   int		msg_namelen;
X   caddr_t	msg_accrights;
X   int		msg_accrightslen;
X};
X
X#define MSG_OOB		0x01		/* flag for out-of-band data	*/
X#define MSG_PEEK	0x02		/* peek at incomming message	*/
X#define MSG_DONTROUTE	0x04		/* send without routing tables	*/
X
X#endif /* _socket_h_ */
+ END-OF-FILE uipc/socket.h
chmod 'u=rw,g=rw,o=rw' 'uipc/socket.h'
echo '	-rw-rw-rw-   1 bes      HSJ         2554 Jul 18 23:44 uipc/socket.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/socket.h
echo 'Extracting uipc/socketvar.h'
sed 's/^X//' > uipc/socketvar.h << '+ END-OF-FILE uipc/socketvar.h'
X/*
X *	@(#)socketvar.h	1.1	(Alex Crain)	6/20/89
X *
X *  socketvar.h - socket related definitions
X *
X *  Written by Alex Crain.
X *
X *  This file is loosly based in the Berkeley header file of the 
X *  same name, but is *not* guarenteed to be in any way compatable. It is
X *  close enough to the berkeley code that the following applies...
X *
X *  Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X *  All rights reserved.
X * 
X *  Redistribution and use in source and binary forms are permitted
X *  provided that this notice is preserved and that due credit is given
X *  to the University of California at Berkeley. The name of the University
X *  may not be used to endorse or promote products derived from this
X *  software without specific prior written permission. This software
X *  is provided "as is" without express or implied warranty.
X *
X */
X
X#ifndef _socketvar_h_
X#define _socketvar_h_
X
X#include <uipc/conf.h>
X
X/*
X *  structure describing a socket.
X */
X
Xtypedef ushort socketptr;
X
Xstruct socket {
X   short	so_type;
X   short	so_options;
X   short	so_linger;
X   short	so_state;
X   caddr_t	so_pcb;
X   struct	protosw * so_proto;
X
X   struct	socket * so_head;
X   struct	socket * so_q0;
X   struct	socket * so_q;
X   short	so_q0len;
X   short	so_qlen;
X   short	so_qlimit;
X   short	so_timeo;
X   ushort	so_error;
X   short	so_pgrp;
X   u_long	so_oobmark;
X
X   struct	sockbuf {
X      u_long	sb_cc;
X      u_long	sb_hiwat;
X      u_long	sb_mbcnt;
X      u_long	sb_mbmax;
X      u_long	sb_lowat;
X      struct	mbuf * sb_mb;
X      struct	proc * sb_sel;
X      short	sb_timeo;
X      short	sb_flags;
X   } so_rcv, so_snd;
X
X#define SB_MAX		(64 * 1024)
X#define SB_LOCK		0x01
X#define SB_WANT		0x02
X#define SB_WAIT		0x04
X#define SB_SEL		0x08
X#ifdef notdef
X#define SB_COLL		0x10
X#endif
X};
X
X/*
X *  Socket states
X */
X#define SS_NOFDREF		0x001
X#define SS_ISCONNECTED		0x002
X#define SS_ISCONNECTING		0x004
X#define SS_ISDISCONNECTING	0x008
X#define SS_CANTSENDMORE		0x010
X#define SS_CANTRCVMORE		0x020
X#define SS_RCVATMARK		0x040
X
X#define SS_PRIV			0x080
X#define SS_NBIO			0x100
X#define SS_ASYNC		0x200
X
X/*
X *  Socket macros
X */
X   
X#define sbspace(sb) \
X (MIN ((long) ((sb)->sb_hiwat - (sb)->sb_cc), \
X       (long) ((sb)->sb_mbmax - (sb)->sb_mbcnt)))
X
X#define sendallatonce(so) \
X ((so)->so_proto->pr_flags & PR_ATOMIC)
X
X#define soreadable(so) \
X ((so)->so_rcv.sb_cc || ((so)->so_state & SS_CANTRCVMORE) || \
X  (so)->so_qlen || (so)->so_error)
X
X#define sowriteable(so) \
X (sbspace (&(so)->so_snd) > 0 && \
X  (((so)->so_state & SS_ISCONNECTED) || \
X   ((so)->so_proto->pr_flags & PR_CONNREQUIRED) == 0) || \
X  ((so)->so_state & SS_CANTSENDMORE) || \
X  (so)->so_error)
X
X#define sballoc(sb, m) \
X{  (sb)->sb_cc += (m)->m_len; \
X   (sb)->sb_mbcnt += MSIZE; }
X
X#define sbfree(sb, m) \
X{  (sb)->sb_cc -= (m)->m_len; \
X   (sb)->sb_mbcnt -= MSIZE; }
X
X#define sblock(sb) \
X{   while ((sb)->sb_flags & SB_LOCK) \
X     {  (sb)->sb_flags |= SB_WANT; \
X	 (void) sleep ((caddr_t) &(sb)->sb_flags, PZERO+1); } \
X    (sb)->sb_flags |= SB_LOCK; }
X
X#define sbunlock(sb) \
X{  (sb)->sb_flags &= ~SB_LOCK; \
X   if ((sb)->sb_flags & SB_WANT) \
X    {  (sb)->sb_flags &= ~SB_WANT; \
X       wakeup ((caddr_t) &(sb)->sb_flags); }}
X
X#define sorwakeup(so)	sowakeup (so, &(so)->so_rcv)
X#define sowwakeup(so)	sowakeup (so, &(so)->so_snd)
X
X#ifdef KERNEL
X#ifdef __STDC__
Xstruct socket * sonewconn (struct socket *);
X#else  /* __STDC__ */
Xstruct socket * sonewconn ();
X#endif /* __STDC__ */
X
Xextern int	select_sleep; /* value to say if we need to wakeup */
Xextern int	select_sleep_addr; /* address we select on if wait in select */
X#endif KERNAL
X
X#endif /* _socketvar_h_ */
+ END-OF-FILE uipc/socketvar.h
chmod 'u=rw,g=rw,o=rw' 'uipc/socketvar.h'
echo '	-rw-rw-rw-   1 bes      HSJ         3629 Aug  2 20:49 uipc/socketvar.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/socketvar.h
echo 'Extracting uipc/un.h'
sed 's/^X//' > uipc/un.h << '+ END-OF-FILE uipc/un.h'
X/*
X *	@(#)un.h	1.1	(Alex Crain)	6/20/89
X *
X *  UNIX Domain definitions
X */
X
X#ifndef _un_h_
X#define _un_h_
X
X#include <uipc/conf.h>
X
Xstruct sockaddr_un {
X   short	sun_family;		/* AF_UNIX		*/
X   char		sun_path[108];		/* path name		*/
X};
X
X#endif /* _un_h_ */
+ END-OF-FILE uipc/un.h
chmod 'u=rw,g=rw,o=rw' 'uipc/un.h'
echo '	-rw-rw-rw-   1 bes      HSJ          255 Jul 18 23:44 uipc/un.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/un.h
echo 'Extracting uipc/unpcb.h'
sed 's/^X//' > uipc/unpcb.h << '+ END-OF-FILE uipc/unpcb.h'
X/*
X *	@(#)unpcb.h	1.1	(Alex Crain)	6/20/89
X *
X *  unpcb.h - unix intern protocol control block.
X *
X *  Written by Alex Crain.
X *
X *  This file is loosly based in the Berkeley file unpcb.h,
X *  but is *not* guarenteed to be in any way compatable. It is
X *  close enough to the Berkeley code that the following applies...
X *
X *  Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X *  All rights reserved.
X * 
X *  Redistribution and use in source and binary forms are permitted
X *  provided that this notice is preserved and that due credit is given
X *  to the University of California at Berkeley. The name of the University
X *  may not be used to endorse or promote products derived from this
X *  software without specific prior written permission. This software
X *  is provided "as is" without express or implied warranty.
X *
X */
X
X#ifndef _unpcb_h_
X#define _unpcb_h_
X
X#include <uipc/conf.h>
X
Xstruct unpcb {
X   struct	socket * unp_socket;	/* backpointer to socket	     */
X   struct	inode * unp_inode;	/* file reference		     */
X   ino_t	unp_ino;		/* fake inode number		     */
X   struct	unpcb * unp_conn;	/* control block of connected socket */
X   struct	unpcb * unp_refs;	/* referencing socket liked list     */
X   struct	unpcb * unp_nextref;	/* link in unp_refs list	     */
X   struct	mbuf * unp_addr;	/* bound address of socket	     */
X   int		unp_cc;			/* copy of rcv.sb_cc		     */
X   int		unp_mbcnt;		/* copy of rcv.sb_mbcnt		     */
X};
X
X#define sotounpcb(so)	((struct unpcb *)((so)->so_pcb))
X
X#endif /* _unpcb_h_ */
+ END-OF-FILE uipc/unpcb.h
chmod 'u=rw,g=rw,o=rw' 'uipc/unpcb.h'
echo '	-rw-rw-rw-   1 bes      HSJ         1543 Jul 18 23:44 uipc/unpcb.h        (as sent)'
echo '	\c'
/bin/ls -l uipc/unpcb.h
if test -f 'lib'
then	rm 'lib'
fi
if test -d 'lib'
then	:
else	echo 'Making     lib/'
	mkdir 'lib'
fi
chmod 'u=rwx,g=rx,o=rx' 'lib'
echo 'Extracting lib/Makefile'
sed 's/^X//' > lib/Makefile << '+ END-OF-FILE lib/Makefile'
X#
X#	@(#)Makefile	1.1	(Alex Crain) 6/20/89
X#
X# Makefile for user interface to the uipc loadable driver.
X#
X# copyright (c) 1989 Alex Crain
X#
X
X# CC=gcc
XRM=/bin/rm
XMV=/bin/mv
XECHO=/bin/echo
XM4=/usr/bin/m4
XSHELL=/bin/sh
XGET=/usr/bin/get
XCFLAGS= -O $(VFLAG)
X
XSCCSDIR=../sccs/lib
X
X#
X# the various file catagories.
X#
XCALLS=xxx
XSSUPPORT=syserr.o __cerror.o 
XCSUPPORT=perror.o  select.o
XCSOURCE=perror.c select.c
XSCCSFILES=Makefile.m4 gencall.m4 generic.m4 sockpipe.m4\
Xsyserr.s __cerror.s perror.c
X
Xall: Makefile.m4
X	make libuipc.a CALLS="`m4 Makefile.m4`"
X
Xlibuipc.a: $(CALLS) $(SSUPPORT) $(CSUPPORT)
X	rm -f libuipc.a
X	ar cq libuipc.a $(CALLS) $(SSUPPORT) $(CSUPPORT)
X
X$(CALLS): ../sysconfig.m4 gencall.m4 generic.m4
X	$(ECHO) "define(MYSELF,$@)" | $(M4) - gencall.m4 > tmp.s
X	$(AS) -o $@ tmp.s
X	$(RM) tmp.s
X
X$(CSUPPORT): $(?:.o=.c)
X	$(CC) $(CFLAGS) -c $(?:.o=.c)
X
X$(SSUPPORT): $(?:.o=.s)
X	$(AS) $(?:.o=.s)
X
X$(SCCSFILES):
X	$(GET) $(GFLAGS) -p $(SCCSDIR)/s.$@ > $@
X
Xdepend:
X	cat Makefile | sed -e "/^### DEPEND LINE/q" > Make.tmp
X	$(CC) -I. -M $(SOURCES) >> Make.tmp
X	$(MV) Make.tmp Makefile
X
Xclean:
X	$(RM) -f libuipc.a *.o \#* *~ core
X
X
X### DEPEND LINE --- do not delete! ###
+ END-OF-FILE lib/Makefile
chmod 'u=rw,g=rw,o=rw' 'lib/Makefile'
echo '	-rw-rw-rw-   1 bes      HSJ         1167 Aug 12 09:24 lib/Makefile        (as sent)'
echo '	\c'
/bin/ls -l lib/Makefile
echo 'Extracting lib/Makefile.m4'
sed 's/^X//' > lib/Makefile.m4 << '+ END-OF-FILE lib/Makefile.m4'
Xdivert(-1)
X#	@(#)Makefile.m4	1.1	(Alex Crain)	6/19/89
X#
X#  This file is used to generate the arguments for Makefile.
X#
Xdefine(concat,$1$2$3$4$5)
Xdefine(RESULT,)
Xdefine(DEFSYSCALL,`define(`RESULT',concat(RESULT,$2,.o,` '))')
Xinclude(../sysconfig.m4)
Xdivert
XRESULT
+ END-OF-FILE lib/Makefile.m4
chmod 'u=rw,g=rw,o=rw' 'lib/Makefile.m4'
echo '	-rw-rw-rw-   1 bes      HSJ          263 Jul 18 23:43 lib/Makefile.m4        (as sent)'
echo '	\c'
/bin/ls -l lib/Makefile.m4
echo 'Extracting lib/__cerror.s'
sed 's/^X//' > lib/__cerror.s << '+ END-OF-FILE lib/__cerror.s'
X#
X	text
X	asciz	"@(#)__cerror.s	1.1	(Alex Crain) 6/19/89"
X#
X#  Error handler for system call stub functions
X#
X	global	__cerror
X__cerror:
X
X	mov.l	%d0,errno
X	mov.l	&-1,%d0
X	mov.l	&0xffffffff,%a0
X	rts
X
X	data
X
+ END-OF-FILE lib/__cerror.s
chmod 'u=rw,g=rw,o=rw' 'lib/__cerror.s'
echo '	-rw-rw-rw-   1 bes      HSJ          205 Jul 18 23:43 lib/__cerror.s        (as sent)'
echo '	\c'
/bin/ls -l lib/__cerror.s
echo 'Extracting lib/gencall.m4'
sed 's/^X//' > lib/gencall.m4 << '+ END-OF-FILE lib/gencall.m4'
Xdivert(-1)
X#
X#	@(#)gencall.m4	1.1	(Alex Crain) 6/20/89
X#
X# gencall.m4 - generate a system call stub function
X#
X# This file is used with the command
X#
X#	echo "define(MYSELF,<syscall>.o)" | m4 - gencall.m4 > <syscall>.s
X#
X# where syscall is the system call function to be generated. The call must
X# be defined in sysconfig.h with a DEFSYSCALL macro.
X#
X# The resulting stub function is patterened after the code in generic.m4, 
X# unless the the file <syscall>.m4 exists, in which case that code will be
X# used instead.
X#
Xdefine(MYNAME,substr(MYSELF,0,eval(len(MYSELF)-2)))
Xdefine(DEFSYSCALL,
X	`ifelse($2,MYNAME,
X		`define(SYSCALL_NUMBER,incr(SYSENT_OFFSET))')
X	 define(`SYSENT_OFFSET',incr(SYSENT_OFFSET))')
Xdefine(CONCAT,$1$2$3$4)
Xinclude(../sysconfig.m4)
Xinclude(generic.m4)
Xsinclude(CONCAT(MYNAME,.m4))
Xdefine(SYSCALL_NAME,MYNAME)
Xdefine(SCCSDEF,`CONCAT(MYSELF,.s,`	(Alex Crain)	6/1/89')')
Xdivert
XPROCEDURE
+ END-OF-FILE lib/gencall.m4
chmod 'u=rw,g=rw,o=rw' 'lib/gencall.m4'
echo '	-rw-rw-rw-   1 bes      HSJ          907 Jul 18 23:43 lib/gencall.m4        (as sent)'
echo '	\c'
/bin/ls -l lib/gencall.m4
echo 'Extracting lib/generic.m4'
sed 's/^X//' > lib/generic.m4 << '+ END-OF-FILE lib/generic.m4'
X#
X#	@(#)generic.m4	1.1	(Alex Crain)	6/19/89
X#
X#	generic form for system calls
X#
X#
Xdefine(PROCEDURE,
X`#
X	text
X	global SYSCALL_NAME
XSYSCALL_NAME:
X	mov.l	(%sp),-(%sp)			# move the return address
X	mov.l	&SYSCALL_NUMBER,4(%sp)			# insert the first argument
X	mov.w	&67,%d0				#
X	trap	&0				# trap to syslocal()
X	bcc	noerror				# return if status = 0
X	jmp	__cerror			# otherwise __cerror()
Xnoerror:					#
X	rts					#
X')
+ END-OF-FILE lib/generic.m4
chmod 'u=rw,g=rw,o=rw' 'lib/generic.m4'
echo '	-rw-rw-rw-   1 bes      HSJ          412 Jul 18 23:43 lib/generic.m4        (as sent)'
echo '	\c'
/bin/ls -l lib/generic.m4
echo 'Extracting lib/perror.c'
sed 's/^X//' > lib/perror.c << '+ END-OF-FILE lib/perror.c'
X#ifndef LINT
Xstatic char * sccsdef = "@(#)perror.c	1.1	(Alex Crain) 6/19/89";
X#endif
X
X/*
X *
X * Replace ment for the perror(3c) subroutine. Note that sys_errlist and
X * sys_nerr have been renamed to uipc_errlist and uipc_lasterr, and that 
X * uipc_firsterr has been added. uipc_firsterr and uipc_lasterr represent
X * the maximum negative and posative offsets to uipc_errlist, respectively.
X *
X * Note also that we don't check for overflow of the print buffer, but 1024
X * should be enough.
X */
X
Xvoid
Xperror(str)
X  char * str;
X{
X   extern int errno;
X   extern int uipc_lasterr;
X   extern int uipc_firsterr;
X   extern char * uipc_errlist[];
X   int offset = (int) ((char) errno);
X   char buffer[1024];
X
X   if (str && strlen (str))
X    {
X       strcpy (buffer, str);
X       strcat (buffer, ": ");
X    }
X   else
X       buffer[0] = '\0';
X
X   if (offset == 0 ||
X       (offset < 0 && offset >= uipc_firsterr) ||
X       (offset > 0 && offset <= uipc_lasterr))
X
X    {
X       strcat (buffer, uipc_errlist[offset]);
X       strcat (buffer, ".\n");
X    }
X   else
X       sprintf (&buffer[strlen (buffer)], "Unknown error # %d.\n", errno);
X
X   write (2, buffer, strlen (buffer));
X   return;
X}
+ END-OF-FILE lib/perror.c
chmod 'u=rw,g=rw,o=rw' 'lib/perror.c'
echo '	-rw-rw-rw-   1 bes      HSJ         1177 Jul 18 23:43 lib/perror.c        (as sent)'
echo '	\c'
/bin/ls -l lib/perror.c
echo 'Extracting lib/select.c'
sed 's/^X//' > lib/select.c << '+ END-OF-FILE lib/select.c'
X#ifndef LINT
Xstatic char * sccsdef = "@(#)select.c	1.1	(Brad Smith) 8/2/89";
X#endif
X
X/*
X * select call
X */
X
X#include	<signal.h>
X#include	<setjmp.h>
X
Xjmp_buf sel_jmp;
X
Xint
Xselect(nfds,readfds,writefds,execptfds,timeout)
Xint nfds, *readfds, *writefds, *execptfds;
Xlong *timeout;
X{
X   int ret;
X   int alrm_time, (*alrm_func)(), select_catch();
X   int rd_save, wr_save, ex_save;
X
X   if(readfds)
X	   rd_save = *readfds;
X   if(writefds)
X	   wr_save = *writefds;	/* NOT SUPPORTED YET*/
X   /* ex_save = *execptfds;	/* NOT SUPPORTED YET*/
X
X   if(timeout && (*timeout == 0)) { /* Poll it just once */
X	   ret = soselect(nfds, readfds, writefds, execptfds);
X	   return(ret);
X   }
X
X   if(timeout) { /* if we want a time to stop then */
X	alrm_time = alarm((int) (*timeout)); /* save old value */
X	alrm_func = signal(SIGALRM, select_catch); /* function */
X	if(setjmp(sel_jmp)) { /* got alarm */
X		/* means we had a timeout */
X		if(alrm_time) {
X			signal(SIGALRM, alrm_func); /* reset signal */
X			alarm(alrm_time);
X		} else
X			signal(SIGALRM, SIG_DFL);
X		return(0); /* tell them no data */
X	}
X   }
X   do {
X	   /* set bitmask incase this is more than first time */
X	   if(readfds) 
X		   *readfds = rd_save;
X	   /* *writefds = wr_save; /* */
X	   /* *execptfds = ex_save; /* */
X	   ret = soselect(nfds, readfds, writefds, execptfds);
X   } while(ret == 0);
X   if(timeout) { /* need to reset things */
X	   if(alrm_time) {
X		signal(SIGALRM, alrm_func); /* reset signal */
X		alarm(alrm_time);
X	   } else {
X		alarm(0);
X		signal(SIGALRM, SIG_DFL);
X	   }
X   }
X   return (ret); /* return value */
X}
Xselect_catch()
X{
X	/* got alarm */
X	longjmp(sel_jmp,1); /* tell them a timeout */
X}
+ END-OF-FILE lib/select.c
chmod 'u=rw,g=r,o=r' 'lib/select.c'
echo '	-rw-r--r--   1 bes      HSJ         1657 Aug 11 20:38 lib/select.c        (as sent)'
echo '	\c'
/bin/ls -l lib/select.c
echo 'Extracting lib/syserr.s'
sed 's/^X//' > lib/syserr.s << '+ END-OF-FILE lib/syserr.s'
X#
X		text
X		asciz	"@(#)syserr.s	1.1	(Alex Crain) 6/19/89"
X
X#
X#  System error messages for uipc perror() function.
X#
X
XERROR0:		asciz	"Error 0"			# 0
X
X#
X#  Standard unix errors
X#
X
XEPERM:		asciz	"Not super-user"		# 1
XENOENT:		asciz	"No such file or directory"	# 2
XESRCH:		asciz	"No such process"		# 3
XEINTR:		asciz	"interrupted system call"	# 4
XEIO:		asciz	"I/O error"			# 5
XENXIO:		asciz	"No such device or address"	# 6
XE2BIG:		asciz	"Arg list too long"		# 7
XENOEXEC:	asciz	"Exec format error"		# 8
XEBADF:		asciz	"Bad file number"		# 9
XECHILD:		asciz	"No children"			# 10
XEAGAIN:		asciz	"No more processes"		# 11
XENOMEM:		asciz	"Not enough core"		# 12
XEACCES:		asciz	"Permission denied"		# 13
XEFAULT:		asciz	"Bad address"			# 14
XENOTBLK:	asciz	"Block device required"		# 15
XEBUSY:		asciz	"Mount device busy"		# 16
XEEXIST:		asciz	"File exists"			# 17
XEXDEV:		asciz	"Cross-device link"		# 18
XENODEV:		asciz	"No such device"		# 19
XENOTDIR:	asciz	"Not a directory"		# 20
XEISDIR:		asciz	"Is a directory"		# 21
XEINVAL:		asciz	"Invalid argument"		# 22
XENFILE:		asciz	"File table overflow"		# 23
XEMFILE:		asciz	"Too many open files"		# 24
XENOTTY:		asciz	"Not a typewriter"		# 25
XETXTBSY:	asciz	"Text file busy"		# 26
XEFBIG:		asciz	"File too large"		# 27
XENOSPC:		asciz	"No space left on device"	# 28
XESPIPE:		asciz	"Illegal seek"			# 29
XEROFS:		asciz	"Read only file system"		# 30
XEMLINK:		asciz	"Too many links"		# 31
XEPIPE:		asciz	"Broken pipe"			# 32
XEDOM:		asciz	"Math arg out of domain of func"# 33
XERANGE:		asciz	"Math result not representable"	# 34
XENOMSG:		asciz	"No message of desired type"	# 35
XEIDRM:		asciz	"Identifier removed"		# 36
XECHRNG:		asciz	"Channel number out of range"	# 37
XEL2NSYNC:	asciz	"Level 2 not synchronized"	# 38
XEL3HLT:		asciz	"Level 3 halted"		# 39
XEL3RST:		asciz	"Level 3 reset"			# 40
XELNRNG:		asciz	"Link number out of range"	# 41
XEUNATCH:	asciz	"Protocol driver not attached"	# 42
XENOCSI:		asciz	"No CSI structure available"	# 43
XEL2HLT:		asciz	"Level 2 halted"		# 44
X
X#
X#  filler messages
X#
X
XERROR45:	asciz	"Error 45"			# 45
XERROR46:	asciz	"Error 46"			# 46
XERROR47:	asciz	"Error 47"			# 47
XERROR48:	asciz	"Error 48"			# 48
XERROR49:	asciz	"Error 49"			# 49
X
X#
X#  Convergent Errors
X#
X
XEBADE:		asciz	"invalid exchange"		# 50
XEBADR:		asciz	"invalid request descriptor"	# 51
XEXFULL:		asciz	"exchange full"			# 52
XENOANO:		asciz	"no anode"			# 53
XEBADRQC:	asciz	"invalid request code"		# 54
XEBADSLT:	asciz	"invalid slot"			# 55
XEDEADLOCK:	asciz	"file locking deadlock error"	# 56
XEBFONT:		asciz	"bad font file fmt"		# 57
X
X# For BASSLOCKING
X
XENOLCK:		asciz	"no more locks available"	# 58
XEDEADLK:	asciz	"file locking deadlock error"	# 59
X
X#
X# Hardware specific errors 
X#
X
XENOHDW:		asciz	"No hardware available for operation"	# -32
XEBADFS:		asciz	"bitmapped filesystem is marked dirty"	# -31
X
X#
X#  4.[23] BSD error numbers & messages
X#
X#  errors for non-blocking I/O.
X#
X
XEWOULDBLOCK:	asciz	"Operation would block"			# -30
XEINPROGRESS:	asciz	"Operation now in progress"		# -29
XEALREADY:	asciz	"Operation already in progress"		# -28
X
X#
X#  Uipc errors
X#
X#  Argument errors
X#
X
XENOTSOCK:	asciz	"Socket operation on non-socket"	# -27
XEDESTADDRREQ:	asciz	"Destination address required"		# -26
XEMSGSIZE:	asciz	"Message too long"			# -25
XEPROTOTYPE:	asciz	"Protocol wrong type for socket"	# -24
XEPROTONOSUPPORT:	asciz	"Protocol not supported"	# -23
XESOCKTNOSUPPORT:	asciz	"Socket type not supported"	# -22
XEOPNOTSUPP:	asciz	"Operation not supported on socket"	# -21
XEPFNOSUPPORT:	asciz	"Protocol family not supported"		# -20
XEAFNOSUPPORT:	asciz	"Address family not supported by protocol family" # -19
XEADDRINUSE:	asciz	"Address already in use"		# -18
XEADDRNOTAVAIL:	asciz	"Can't assign requested address"	# -17
X
X#
X#  Network errors
X#
X
XENETDOWN:	asciz	"Network is down"			# -16
XENETUNREACH:	asciz	"Network is unreachable"		# -15
XENETRESET:	asciz	"Network dropped connection on reset"	# -14
XECONNABORTED:	asciz	"Software caused connection abort"	# -13
XECONNRESET:	asciz	"Connection reset by peer"		# -12
XENOBUFS:	asciz	"No buffer space available"		# -11
XEISCONN:	asciz	"Socket is already connected"		# -10
XENOTCONN:	asciz	"Socket is not connected"		# -9
XESHUTDOWN:	asciz	"Can't send after socket shutdown"	# -8
XETOOMANYREFS:	asciz	"Too many references: can't splice"	# -7
XETIMEDOUT:	asciz	"Connection timed out"			# -6
XECONNREFUSED:	asciz	"Connection refused"			# -5
XEHOSTDOWN:	asciz	"Host is down"				# -4
XEHOSTUNREACH:	asciz	"No route to host"			# -3
XENOPROTOOPT:	asciz	"Protocol not available"		# -2
X
XERROR_1:	asciz	"Error -1"				# -1
X
X#
X#  The system error table
X#
X	data
X	even
X
X	long	ENOHDW
X	long	EBADFS
X	long	EWOULDBLOCK
X	long	EINPROGRESS
X	long	EALREADY
X	long	ENOTSOCK
X	long	EDESTADDRREQ
X	long	EMSGSIZE
X	long	EPROTOTYPE
X	long	EPROTONOSUPPORT
X	long	ESOCKTNOSUPPORT
X	long	EOPNOTSUPP
X	long	EPFNOSUPPORT
X	long	EAFNOSUPPORT
X	long	EADDRINUSE
X	long	EADDRNOTAVAIL
X	long	ENETDOWN
X	long	ENETUNREACH
X	long	ENETRESET
X	long	ECONNABORTED
X	long	ECONNRESET
X	long	ENOBUFS
X	long	EISCONN
X	long	ENOTCONN
X	long	ESHUTDOWN
X	long	ETOOMANYREFS
X	long	ETIMEDOUT
X	long	ECONNREFUSED
X	long	EHOSTDOWN
X	long	EHOSTUNREACH
X	long	ENOPROTOOPT
X	long	ERROR_1
X
X	global uipc_errlist
Xuipc_errlist:
X	long	ERROR0
X	long	EPERM
X	long	ENOENT
X	long	ESRCH
X	long	EINTR
X	long	EIO
X	long	ENXIO
X	long	E2BIG
X	long	ENOEXEC
X	long	EBADF
X	long	ECHILD
X	long	EAGAIN
X	long	ENOMEM
X	long	EACCES
X	long	EFAULT
X	long	ENOTBLK
X	long	EBUSY
X	long	EEXIST
X	long	EXDEV
X	long	ENODEV
X	long	ENOTDIR
X	long	EISDIR
X	long	EINVAL
X	long	ENFILE
X	long	EMFILE
X	long	ENOTTY
X	long	ETXTBSY
X	long	EFBIG
X	long	ENOSPC
X	long	ESPIPE
X	long	EROFS
X	long	EMLINK
X	long	EPIPE
X	long	EDOM
X	long	ERANGE
X	long	ENOMSG
X	long	EIDRM
X	long	ECHRNG
X	long	EL2NSYNC
X	long	EL3HLT
X	long	EL3RST
X	long	ELNRNG
X	long	EUNATCH
X	long	ENOCSI
X	long	EL2HLT
X	long	ERROR45
X	long	ERROR46
X	long	ERROR47
X	long	ERROR48
X	long	ERROR49
X	long	EBADE
X	long	EBADR
X	long	EXFULL
X	long	ENOANO
X	long	EBADRQC
X	long	EBADSLT
X	long	EDEADLOCK
X	long	EBFONT
X	long	ENOLCK
X	long	EDEADLK
X
X	even
X
X	global uipc_firsterr
Xuipc_firsterr:
X	long	-32
X
X	global uipc_lasterr
Xuipc_lasterr:
X	long	59
X
+ END-OF-FILE lib/syserr.s
chmod 'u=rw,g=rw,o=rw' 'lib/syserr.s'
echo '	-rw-rw-rw-   1 bes      HSJ         6051 Jul 18 23:43 lib/syserr.s        (as sent)'
echo '	\c'
/bin/ls -l lib/syserr.s
exit 0
-- 
Bradley Smith
Computer Systems Offer Integration Laboratory
AT&T Bell Labs, Holmdel, NJ 
201-949-0090 att!holin!bes or bes at holin.ATT.COM



More information about the Unix-pc.sources mailing list