diff --git a/WEGA/src/lib/libc/TODO b/WEGA/src/lib/libc/TODO index a885438..198e47a 100644 --- a/WEGA/src/lib/libc/TODO +++ b/WEGA/src/lib/libc/TODO @@ -8,14 +8,9 @@ ffltioc.o ffltioc.c C fltioc.o fltioc.c C goodmagic.o goodmagic.c C length.o length.c C -mpx.o mpx.c C pow10.o pow10.s ASM readsym.o readsym.c C -rindex.o rindex.c C setret.o setret.s ASM stfl.o ??? swap.o swap.c C symscan.o symscan.c C -tmpfile.o tmpfile.c C -tolower.o tolower.c C -toupper.o toupper.c C diff --git a/WEGA/src/lib/libc/TODO.done b/WEGA/src/lib/libc/TODO.done index 235516f..3c6b0e0 100644 --- a/WEGA/src/lib/libc/TODO.done +++ b/WEGA/src/lib/libc/TODO.done @@ -157,3 +157,8 @@ tmpnam.o tmpnam.c C ctermid.o ctermid.c C cuserid.o cuserid.c C index.o index.c C +mpx.o mpx.c C +rindex.o rindex.c C +tmpfile.o tmpfile.c C +tolower.o tolower.c C +toupper.o toupper.c C diff --git a/WEGA/src/lib/libc/gen/mpx.c b/WEGA/src/lib/libc/gen/mpx.c new file mode 100644 index 0000000..bff8d11 --- /dev/null +++ b/WEGA/src/lib/libc/gen/mpx.c @@ -0,0 +1,85 @@ +/* @[$] mpx.c 2.1 09/12/83 11:27:38 - 87wega3.2 */ + +#include +#include +#include "mx.h" + +static struct mx_args vec; +int mpxcall(); + + +mpx(name,mode) +char *name; +{ + if (*name) { + vec.m_name = name; + vec.m_arg[0] = mode; + return(mpxcall(MPX, &vec)); + } else + return(mpxcall(MPXN, 0)); +} + +chan(gr) +{ + vec.m_arg[1] = gr; + return(mpxcall(CHAN, &vec)); +} + +join(fd,ch) +{ + vec.m_arg[0] = fd; + vec.m_arg[1] = ch; + return(mpxcall(JOIN, &vec)); +} + +connect(fd,ch,side) +{ + vec.m_arg[0] = fd; + vec.m_arg[1] = ch; + vec.m_arg[2] = side; + return(mpxcall(CONNECT, &vec)); +} + +attach(sub,gp) +{ + vec.m_arg[0] = sub; + vec.m_arg[1] = gp; + return(mpxcall(ATTACH, &vec)); +} + +detach(sub,gp) +{ + vec.m_arg[0] = sub; + vec.m_arg[1] = gp; + return(mpxcall(DETACH, &vec)); +} + +extract(sub,ch,side) +{ + vec.m_arg[0] = sub; + vec.m_arg[1] = ch; + vec.m_arg[2] = side; + return(mpxcall(EXTR, &vec)); +} + +debug(var,val) +{ + vec.m_arg[0] = var; + vec.m_arg[1] = val; + return(mpxcall(DEBUG, &vec)); +} + +npgrp(ch, gfd, pid) +{ + vec.m_arg[0] = ch; + vec.m_arg[1] = gfd; + vec.m_arg[2] = pid; + return(mpxcall(NPGRP, &vec)); +} +ckill(index,gp,sig) +{ + vec.m_arg[0] = index; + vec.m_arg[1] = gp; + vec.m_arg[2] = sig; + return(mpxcall(CSIG, &vec)); +} diff --git a/WEGA/src/lib/libc/gen/mx.h b/WEGA/src/lib/libc/gen/mx.h new file mode 100644 index 0000000..7d5a95f --- /dev/null +++ b/WEGA/src/lib/libc/gen/mx.h @@ -0,0 +1,145 @@ +#define NGROUPS 10 /* number of mpx files permitted at one time */ +#define NCHANS 20 /* number of channel structures */ +#define NPORTS 30 /* number of channels to i/o ports */ +#define CNTLSIZ 10 +#define NLEVELS 4 +#define NMSIZE 50 /* max size of mxlstn file name */ + +/* + * header returned on read of mpx + */ +struct rh { + short index; + short count; + short ccount; +}; + +/* + * head expected on write of mpx + */ +struct wh { + short index; + short count; + short ccount; + char *data; +}; + +struct mx_args { + char *m_name; + int m_cmd; + int m_arg[3]; +}; + + +#ifdef KERNEL +/* + * internal structure for channel + */ + +struct chan { + short c_flags; + char c_index; + char c_line; + struct group *c_group; + struct file *c_fy; + struct tty *c_ttyp; + struct clist c_ctlx; + int c_pgrp; + struct tty *c_ottyp; + char c_oline; + union { + struct clist datq; + } cx; + union { + struct clist datq; + struct chan *c_chan; + } cy; + struct clist c_ctly; +}; + +struct schan { + short c_flags; + char c_index; + char c_line; + struct group *c_group; + struct file *c_fy; + struct tty *c_ttyp; + struct clist c_ctlx; + int c_pgrp; +}; + + +/* + * flags + */ +#define INUSE 01 +#define COPEN 02 +#define XGRP 04 +#define YGRP 010 +#define WCLOSE 020 +#define ISGRP 0100 +#define BLOCK 0200 +#define EOTMARK 0400 +#define SIGBLK 01000 +#define BLKMSG 01000 +#define ENAMSG 02000 +#define WFLUSH 04000 +#define NMBUF 010000 +#define PORT 020000 +#define ALT 040000 + +#endif + + + + + + + + + +/* + * mpxchan command codes + */ +#define MPX 5 +#define MPXN 6 +#define CHAN 1 +#define JOIN 2 +#define EXTR 3 +#define ATTACH 4 +#define CONNECT 7 +#define DETACH 8 +#define DISCON 9 +#define DEBUG 10 +#define NPGRP 11 +#define CSIG 12 +#define PACK 13 + +#define NDEBUGS 30 +/* + * control channel message codes + */ +#define M_WATCH 1 +#define M_CLOSE 2 +#define M_EOT 3 +#define M_OPEN 4 +#define M_BLK 5 +#define M_UBLK 6 +#define DO_BLK 7 +#define DO_UBLK 8 +#define M_IOCTL 12 +#define M_SIG 14 + + +/* + * debug codes other than mpxchan cmds + */ +#define MCCLOSE 29 +#define MCOPEN 28 +#define ALL 27 +#define SCON 26 +#define MSREAD 25 +#define SDATA 24 +#define MCREAD 23 +#define MCWRITE 22 + diff --git a/WEGA/src/lib/libc/gen/rindex.c b/WEGA/src/lib/libc/gen/rindex.c new file mode 100644 index 0000000..9c5231c --- /dev/null +++ b/WEGA/src/lib/libc/gen/rindex.c @@ -0,0 +1,22 @@ +/* @[$] rindex.c 2.1 09/12/83 11:30:12 - 87wega3.2 */ + +/* + * Return the ptr in sp at which the character c last + * appears; NULL if not found +*/ + +#define NULL 0 + +char * +rindex(sp, c) +register char *sp, c; +{ + register char *r; + + r = NULL; + do { + if (*sp == c) + r = sp; + } while (*sp++); + return(r); +} diff --git a/WEGA/src/lib/libc/gen/tolower.c b/WEGA/src/lib/libc/gen/tolower.c new file mode 100644 index 0000000..1633e75 --- /dev/null +++ b/WEGA/src/lib/libc/gen/tolower.c @@ -0,0 +1,11 @@ +/* @[$] tolower.c 2.1 09/12/83 11:37:39 - 87wega3.2 */ + +/*LINTLIBRARY*/ + +tolower(c) +register int c; +{ + if(c >= 'A' && c <= 'Z') + c -= 'A' - 'a'; + return c; +} diff --git a/WEGA/src/lib/libc/gen/toupper.c b/WEGA/src/lib/libc/gen/toupper.c new file mode 100644 index 0000000..4c6ea94 --- /dev/null +++ b/WEGA/src/lib/libc/gen/toupper.c @@ -0,0 +1,11 @@ +/* @[$] toupper.c 2.1 09/12/83 11:37:53 - 87wega3.2 */ + +/*LINTLIBRARY*/ + +toupper(c) +register int c; +{ + if(c >= 'a' && c <= 'z') + c += 'A' - 'a'; + return c; +} diff --git a/WEGA/src/lib/libc/stdio/tmpfile.c b/WEGA/src/lib/libc/stdio/tmpfile.c new file mode 100644 index 0000000..eacb019 --- /dev/null +++ b/WEGA/src/lib/libc/stdio/tmpfile.c @@ -0,0 +1,22 @@ +/* @[$] tmpfile.c 2.1 09/12/83 11:18:07 - 87wega3.2 */ + +/*LINTLIBRARY*/ +/* + * tmpfile - return a pointer to an update file that can be + * used for scratch. The file will automatically + * go away if the program using it terminates. + */ + +#include + +FILE * +tmpfile() +{ + char tfname [L_tmpnam]; + register FILE *p; + + tmpnam (tfname); + p = fopen (tfname, "w+"); + unlink (tfname); + return p; +}