more work

This commit is contained in:
Oliver Lehmann 2009-08-27 19:04:49 +00:00
parent 8bc2f4770d
commit ae1f366586
8 changed files with 301 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,85 @@
/* @[$] mpx.c 2.1 09/12/83 11:27:38 - 87wega3.2 */
#include <sys/param.h>
#include <sys/tty.h>
#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));
}

145
WEGA/src/lib/libc/gen/mx.h Normal file
View File

@ -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

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 <stdio.h>
FILE *
tmpfile()
{
char tfname [L_tmpnam];
register FILE *p;
tmpnam (tfname);
p = fopen (tfname, "w+");
unlink (tfname);
return p;
}