From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: Date: Tue, 6 Nov 2007 15:00:01 -0500 From: "Russ Cox" To: "Fans of the OS Plan 9 from Bell Labs" <9fans@cse.psu.edu> Subject: Re: [9fans] consterm In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: Topicbox-Message-UUID: ebc9e73c-ead2-11e9-9d60-3106f5b1d025 On 11/6/07, Eric Van Hensbergen wrote: > Has anyone done a term program to connect to Plan 9 or Inferno -- > kinda like drawterm, without the draw bits? I guess I am thinking > about something that exports /dev/cons, /mnt/term, /dev/audio, etc. -- > but then just runs an rc on the other end instead of rio so I can just > run it within an xterm (or whatever). Seems like it would be a useful > thing to have. It is trivial to rip the gui out of drawterm and make reads and writes to /dev/cons redirect to reads and writes on /dev/tty instead of the graphics console. Patch below. There is no p9p cpu, only the very very sketchy beginnings. You're much better off starting with drawterm, especially if you want things like /dev/audio. Russ diff -c drawterm/Makefile consterm/Makefile drawterm/Makefile:18,27 - consterm/Makefile:18,23 libauthsrv/libauthsrv.a\ libsec/libsec.a\ libmp/libmp.a\ - libmemdraw/libmemdraw.a\ - libmemlayer/libmemlayer.a\ - libdraw/libdraw.a\ - gui-$(GUI)/libgui.a\ libc/libc.a\ # stupid gcc drawterm/Makefile:55,71 - consterm/Makefile:51,55 libsec/libsec.a: (cd libsec; $(MAKE)) - libmemdraw/libmemdraw.a: - (cd libmemdraw; $(MAKE)) - - libmemlayer/libmemlayer.a: - (cd libmemlayer; $(MAKE)) - - libdraw/libdraw.a: - (cd libdraw; $(MAKE)) - libc/libc.a: (cd libc; $(MAKE)) - - gui-$(GUI)/libgui.a: - (cd gui-$(GUI); $(MAKE)) diff -c drawterm/kern/Makefile consterm/kern/Makefile drawterm/kern/Makefile:11,23 - consterm/kern/Makefile:11,21 devaudio.$O\ devaudio-$(AUDIO).$O\ devcons.$O\ - devdraw.$O\ devfs-$(OS).$O\ devip.$O\ devip-$(OS).$O\ devlfd.$O\ devmnt.$O\ - devmouse.$O\ devpipe.$O\ devroot.$O\ devssl.$O\ drawterm/kern/Makefile:35,41 - consterm/kern/Makefile:33,38 sysproc.$O\ qio.$O\ qlock.$O\ - term.$O\ uart.$O\ waserror.$O\ $(OS).$O diff -c drawterm/kern/devcons.c consterm/kern/devcons.c drawterm/kern/devcons.c:465,471 - consterm/kern/devcons.c:465,470 Qreboot, Qsecstore, Qshowfile, - Qsnarf, Qswap, Qsysname, Qsysstat, drawterm/kern/devcons.c:499,505 - consterm/kern/devcons.c:498,503 "reboot", {Qreboot}, 0, 0664, "secstore", {Qsecstore}, 0, 0666, "showfile", {Qshowfile}, 0, 0220, - "snarf", {Qsnarf}, 0, 0666, "swap", {Qswap}, 0, 0664, "sysname", {Qsysname}, 0, 0664, "sysstat", {Qsysstat}, 0, 0666, drawterm/kern/devcons.c:510,516 - consterm/kern/devcons.c:508,513 char secstorebuf[65536]; Dirtab *secstoretab = &consdir[Qsecstore]; - Dirtab *snarftab = &consdir[Qsnarf]; int readnum(ulong off, char *buf, ulong n, ulong val, int size) drawterm/kern/devcons.c:607,620 - consterm/kern/devcons.c:604,609 memset(secstorebuf, 0, sizeof secstorebuf); break; - case Qsnarf: - if(omode == ORDWR) - error(Eperm); - if(omode == OREAD) - c->aux = strdup(""); - else - c->aux = mallocz(SnarfSize, 1); - break; } return c; } drawterm/kern/devcons.c:640,651 - consterm/kern/devcons.c:629,634 qhangup(kprintoq, nil); } break; - - case Qsnarf: - if(c->mode == OWRITE) - clipwrite(c->aux); - free(c->aux); - break; } } drawterm/kern/devcons.c:751,765 - consterm/kern/devcons.c:734,739 case Qnull: return 0; - case Qsnarf: - if(offset == 0){ - free(c->aux); - c->aux = clipread(); - } - if(c->aux == nil) - return 0; - return readstr(offset, buf, n, c->aux); - case Qsecstore: return readstr(offset, buf, n, secstorebuf); drawterm/kern/devcons.c:919,931 - consterm/kern/devcons.c:893,898 case Qshowfile: return showfilewrite(a, n); - - case Qsnarf: - if(offset >= SnarfSize || offset+n >= SnarfSize) - error(Etoobig); - snarftab->qid.vers++; - memmove((uchar*)c->aux+offset, va, n); - return n; case Qsysstat: n = 0; diff -c drawterm/kern/devtab.c consterm/kern/devtab.c drawterm/kern/devtab.c:9,16 - consterm/kern/devtab.c:9,14 extern Dev pipedevtab; extern Dev ssldevtab; extern Dev tlsdevtab; - extern Dev mousedevtab; - extern Dev drawdevtab; extern Dev ipdevtab; extern Dev fsdevtab; extern Dev mntdevtab; drawterm/kern/devtab.c:23,30 - consterm/kern/devtab.c:21,26 &pipedevtab, &ssldevtab, &tlsdevtab, - &mousedevtab, - &drawdevtab, &ipdevtab, &fsdevtab, &mntdevtab, diff -c drawterm/main.c consterm/main.c drawterm/main.c:9,14 - consterm/main.c:9,16 char *argv0; char *user; + void ttyinit(void); + extern int errfmt(Fmt*); void sizebug(void) drawterm/main.c:40,57 - consterm/main.c:42,55 osinit(); procinit0(); printinit(); - screeninit(); chandevreset(); chandevinit(); quotefmtinstall(); + ttyinit(); if(bind("#c", "/dev", MBEFORE) < 0) panic("bind #c: %r"); - if(bind("#m", "/dev", MBEFORE) < 0) - panic("bind #m: %r"); - if(bind("#i", "/dev", MBEFORE) < 0) - panic("bind #i: %r"); if(bind("#I", "/net", MBEFORE) < 0) panic("bind #I: %r"); if(bind("#U", "/", MAFTER) < 0) drawterm/main.c:122,126 - consterm/main.c:120,151 return pass; } return nil; + } + + #undef read + #undef write + #undef system + + void + ttyputs(char *s, int n) + { + write(1, s, n); + } + + void + ttyreader(void *arg) + { + char c; + + system("stty raw; stty -echo"); + while(read(0, &c, 1) == 1) + kbdputc(kbdq, c&0xff); + } + + void + ttyinit(void) + { + screenputs = ttyputs; + kproc("tty", ttyreader, 0); }