|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2004 (0x7d4)
Types: TextFile
Notes: UNIX file
Names: »v0.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦2d53db1df⟧ UNIX Filesystem
└─⟦this⟧ »sys/z8001/rec/v0.c«
/* (-lgl
* The information contained herein is a trade secret of Mark Williams
* Company, and is confidential information. It is provided under a
* license agreement, and may be copied or disclosed only under the
* terms of that agreement. Any reproduction or disclosure of this
* material without the express written authorization of Mark Williams
* Company or persuant to the license agreement is unlawful.
*
* COHERENT Version 0.7.3
* Copyright (c) 1982, 1983, 1984.
* An unpublished work by Mark Williams Company, Chicago.
* All rights reserved.
-lgl) */
#include <coherent.h>
#include <con.h>
#include <errno.h>
#include <stat.h>
#include <tty.h>
#include <uproc.h>
#include <sched.h>
#include <signal.h>
int mmstart();
/*
* Terminal structure.
*/
TTY kvtty = {
{0}, {0}, 0, mmstart, NULL, 0, 0
};
v0open(dev)
dev_t dev;
{
register int s;
if (minor(dev) != 0) {
u.u_error = ENXIO;
return;
}
if ((kvtty.t_flags&T_EXCL)!=0 && super()==0) {
u.u_error = ENODEV;
return;
}
ttsetgrp(&kvtty, dev);
s = sphi();
if (kvtty.t_open++ == 0)
{
kvtty.t_flags = T_CARR; /* indicate "carrier" */
ttopen(&kvtty);
}
spl(s);
kbopen();
}
v0close(dev)
{
register int s;
s = sphi();
if (--kvtty.t_open == 0)
ttclose(&kvtty);
spl(s);
kbclose();
}
v0read(dev, iop)
dev_t dev;
IO *iop;
{
ttread(&kvtty, iop, SFCW);
}
v0write(dev, iop)
dev_t dev;
IO *iop;
{
ttwrite(&kvtty, iop, SFCW);
}
v0ioctl(dev, com, vec)
dev_t dev;
struct sgttyb *vec;
{
register int s;
switch (com) {
case TIOVGETB:
case TIOVPUTB:
while (kvtty.t_oq.cq_cc != 0) {
s = sphi();
if (kvtty.t_oq.cq_cc != 0) {
kvtty.t_flags |= T_DRAIN;
sleep((char *)&kvtty.t_oq,
CVTTOUT, IVTTOUT, SVTTOUT);
}
spl(s);
if (SELF->p_ssig && nondsig()) {
u.u_error = EINTR;
return;
}
}
mmioctl(com, vec);
return;
}
s = sphi();
ttioctl(&kvtty, com, vec);
spl(s);
}
v0load()
{
mmload();
}
v0uload()
{
}
v0in(c)
{
ttin(&kvtty, c);
}