1*5390Swnj /* tty_tty.c 4.5 82/01/13 */ 235Sbill 335Sbill /* 43117Swnj * Indirect driver for controlling tty. 54487Swnj * 64487Swnj * THIS IS GARBAGE: MUST SOON BE DONE WITH struct inode * IN PROC TABLE. 735Sbill */ 835Sbill #include "../h/param.h" 935Sbill #include "../h/systm.h" 1035Sbill #include "../h/conf.h" 1135Sbill #include "../h/dir.h" 1235Sbill #include "../h/user.h" 1335Sbill #include "../h/tty.h" 1435Sbill #include "../h/proc.h" 1535Sbill 1635Sbill /*ARGSUSED*/ 1735Sbill syopen(dev, flag) 1835Sbill { 1935Sbill 202305Swnj if(u.u_ttyp == NULL || (u.u_procp->p_flag&SDETACH)) { 2135Sbill u.u_error = ENXIO; 2235Sbill return; 2335Sbill } 2435Sbill (*cdevsw[major(u.u_ttyd)].d_open)(u.u_ttyd, flag); 2535Sbill } 2635Sbill 2735Sbill /*ARGSUSED*/ 2835Sbill syread(dev) 2935Sbill { 3035Sbill 31*5390Swnj if (u.u_ttyp == NULL || (u.u_procp->p_flag&SDETACH)) { 322305Swnj u.u_error = ENXIO; 332305Swnj return; 342305Swnj } 3535Sbill (*cdevsw[major(u.u_ttyd)].d_read)(u.u_ttyd); 3635Sbill } 3735Sbill 3835Sbill /*ARGSUSED*/ 3935Sbill sywrite(dev) 4035Sbill { 4135Sbill 42*5390Swnj if (u.u_ttyp == NULL || (u.u_procp->p_flag&SDETACH)) { 432305Swnj u.u_error = ENXIO; 442305Swnj return; 452305Swnj } 4635Sbill (*cdevsw[major(u.u_ttyd)].d_write)(u.u_ttyd); 4735Sbill } 4835Sbill 4935Sbill /*ARGSUSED*/ 5035Sbill syioctl(dev, cmd, addr, flag) 5135Sbill caddr_t addr; 5235Sbill { 5335Sbill 54*5390Swnj if (cmd == TIOCNOTTY) { 55*5390Swnj u.u_ttyp = 0; 56*5390Swnj u.u_ttyd = 0; 57*5390Swnj u.u_procp->p_pgrp = 0; 58*5390Swnj return; 59*5390Swnj } 60*5390Swnj if (u.u_ttyp == NULL || (u.u_procp->p_flag&SDETACH)) { 612305Swnj u.u_error = ENXIO; 622305Swnj return; 632305Swnj } 6435Sbill (*cdevsw[major(u.u_ttyd)].d_ioctl)(u.u_ttyd, cmd, addr, flag); 6535Sbill } 664487Swnj 674487Swnj syselect(dev, flag) 684487Swnj { 694487Swnj 70*5390Swnj if (u.u_ttyp == NULL || (u.u_procp->p_flag&SDETACH)) { 714487Swnj u.u_error = ENXIO; 72*5390Swnj return (0); 734487Swnj } 74*5390Swnj return ((*cdevsw[major(u.u_ttyd)].d_select)(dev, flag)); 754487Swnj } 76