ref: 8a788aea84aad3bfbd5b39d78c1925654f3b9e14
dir: /emu/port/devindir.c/
#include "dat.h" #include "fns.h" #include "error.h" static Chan * indirattach(char *spec) { char *p; Dev *d; if(*spec == 0) error(Ebadspec); p = strrchr(spec, '!'); if(p == nil) p = ""; else *p++ = 0; d = devbyname(spec); if(d == nil || d->dc == '*'){ snprint(up->env->errstr, ERRMAX, "unknown device: %s", spec); error(up->env->errstr); } if(up->env->pgrp->nodevs && (utfrune("|esDa", d->dc) == nil || d->dc == 's' && *p!='\0')) error(Enoattach); return d->attach(p); } Dev indirdevtab = { '*', "indir", devinit, indirattach, };