(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (FILECREATED "15-Aug-90 11:05:53" |{PELE:MV:ENVOS}LIBRARY>UNIXCHAT.;3| 6995 changes to%: (VARS UNIXCHATCOMS) previous date%: "13-Jun-90 01:05:35" |{PELE:MV:ENVOS}LIBRARY>UNIXCHAT.;2|) (* ; " Copyright (c) 1989, 1990 by Venue & Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT UNIXCHATCOMS) (RPAQQ UNIXCHATCOMS ( (* ;; "A Chat %"protocol%" that handles 1 host: SHELL, by opening a pty & fork to a csh.") (FILES UNIXCOMM CHAT) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) UNIXCOMM CHATDECLS)) (COMS (* ;; "Tell Chat about us: give host filter & opening fn.") (FNS UNIX.HOST.FILTER UNIXCHAT.OPEN) (ADDVARS (CHAT.PROTOCOLTYPES (SHELL . UNIX.HOST.FILTER)) (CHAT.HOST.TO.PROTOCOL (SHELL . SHELL))) (* ;; "make the BS key send DEL when talking to shell") (ALISTS (CHAT.HOSTINFO SHELL))) (COMS (* ;  "pseudo ostype for Shell. Not sure if this is still needed. Make sure it survives logout") (ADDVARS (NETWORKOSTYPES (SHELL . SHELL))) (PROP VARTYPE SYSTEMINITVARS) (ALISTS (SYSTEMINITVARS NETWORKOSTYPES))) (COMS (* ; "telling unix about terminal") (FNS UNIX.SENDSCREENPARAMS UNIX.SETDISPLAYTYPE LISP-TO-UNIX-TERMTYPE UNIX.PARAMS.CONFIRM) (INITVARS (CHAT.TO.UNIX.TERMINALS) (UNIXCHAT.NOTICE.RESHAPE 'ASK) (UNIXCHAT.TSET.DELAY 2000)) (GLOBALVARS CHAT.TO.UNIX.TERMINALS UNIXCHAT.NOTICE.RESHAPE)) (VARS (CHAT.ALLHOSTS (SORT (UNION '(SHELL) CHAT.ALLHOSTS) (FUNCTION UALPHORDER))) (CHAT.HOSTMENU)))) (* ;; "A Chat %"protocol%" that handles 1 host: SHELL, by opening a pty & fork to a csh.") (FILESLOAD UNIXCOMM CHAT) (DECLARE%: EVAL@COMPILE DONTCOPY (FILESLOAD (LOADCOMP) UNIXCOMM CHATDECLS) ) (* ;; "Tell Chat about us: give host filter & opening fn.") (DEFINEQ (UNIX.HOST.FILTER (LAMBDA (HOST) (* ; "Edited 13-Apr-89 17:18 by bvm") (if (AND (EQ \MACHINETYPE \MAIKO) (STRING.EQUAL HOST "SHELL")) then (QUOTE (SHELL UNIXCHAT.OPEN)))) ) (UNIXCHAT.OPEN (LAMBDA (HOST TERMTYPE) (* ; "Edited 15-Feb-90 15:01 by bvm") (* ;; "Return input and output sides of a stream connection to the %"host%" SHELL.") (AND (EQ \MACHINETYPE \MAIKO) (LET ((STR (CREATE-SHELL-STREAM TERMTYPE))) (* ; "Tell chat that no login is necessary") (LIST STR STR (QUOTE LOGOPTION) (QUOTE NONE))))) ) ) (ADDTOVAR CHAT.PROTOCOLTYPES (SHELL . UNIX.HOST.FILTER)) (ADDTOVAR CHAT.HOST.TO.PROTOCOL (SHELL . SHELL)) (* ;; "make the BS key send DEL when talking to shell") (ADDTOVAR CHAT.HOSTINFO [SHELL :KEYACTIONS ((BS (127 127]) (* ; "pseudo ostype for Shell. Not sure if this is still needed. Make sure it survives logout") (ADDTOVAR NETWORKOSTYPES (SHELL . SHELL)) (PUTPROPS SYSTEMINITVARS VARTYPE ALIST) (ADDTOVAR SYSTEMINITVARS (NETWORKOSTYPES (SHELL . SHELL))) (* ; "telling unix about terminal") (DEFINEQ (UNIX.SENDSCREENPARAMS (LAMBDA (STREAM HEIGHT WIDTH ASK) (* ; "Edited 14-Feb-90 14:14 by bvm") (if (SUBRCALL UNIX-HANDLECOMM 8) then (* ; "It's implemented right") (LET ((CONN (UNIX-CHANNEL STREAM))) (AND CONN (SUBRCALL UNIX-HANDLECOMM 10 (\DTEST CONN (QUOTE SMALLP)) (\DTEST HEIGHT (QUOTE SMALLP)) (\DTEST WIDTH (QUOTE SMALLP))))) elseif (if ASK then (UNIX.PARAMS.CONFIRM STREAM "size") elseif (STREAMPROP STREAM (QUOTE UNIXWINDOWSIZE) (CONS WIDTH HEIGHT)) then (* ; "Not the first time, so spawn a process to handle the interaction") (ADD.PROCESS (BQUOTE (UNIX.SENDSCREENPARAMS (QUOTE (\, STREAM)) (QUOTE (\, HEIGHT)) (QUOTE (\, WIDTH)) T))) NIL else (* ; "First time, do it!") T) then (CL:FORMAT STREAM "stty rows ~D columns ~D~%%" HEIGHT WIDTH))) ) (UNIX.SETDISPLAYTYPE (LAMBDA (STREAM CODE NAME ASK) (* ; "Edited 14-Feb-90 15:27 by bvm") (LET (OLDTYPE) (if (AND NAME (if (SETQ OLDTYPE (STREAMPROP STREAM (QUOTE UNIXTERMTYPE))) then (* ; "Not the first time") (if ASK then (UNIX.PARAMS.CONFIRM STREAM "type") else (* ; "spawn a proc so we don't tie up the typeout proc") (ADD.PROCESS (BQUOTE (UNIX.SETDISPLAYTYPE (QUOTE (\, STREAM)) NIL (QUOTE (\, NAME)) T))) NIL) elseif (SUBRCALL UNIX-HANDLECOMM 8) then (STREAMPROP STREAM (QUOTE UNIXTERMTYPE) NAME) (* ; "The open shell stream already told it the type, so just note it now") NIL else (* ; "First time, do it!") T)) then (if (NOT OLDTYPE) then (* ;; "On the very first call, wait until there's some output. Newer chats do this before opening the stream, which is a big improvement. This is actually a race here with chat.typeout") (LET ((TIMER (SETUPTIMER 15000)) (WINDOW (PROCESSPROP (THIS.PROCESS) (QUOTE WINDOW)))) (if (AND WINDOW (SETQ WINDOW (WINDOWPROP WINDOW (QUOTE CHATSTATE)))) then (replace (CHAT.STATE HELD) of WINDOW with T)) (until (OR (READP STREAM) (TIMEREXPIRED? TIMER)) do (BLOCK)) (if WINDOW then (replace (CHAT.STATE HELD) of WINDOW with NIL) (DISMISS UNIXCHAT.TSET.DELAY)))) (CL:FORMAT STREAM "set noglob; eval `tset ~@[-e^~A ~]-srIQ ~A`; set glob~%%" (AND (NULL OLDTYPE) (LET ((BS (CAAR (KEYACTION (QUOTE BS))))) (if (EQ BS 127) then "?" else (CL:CODE-CHAR (LOGOR BS (CHARCODE "@")))))) (LISP-TO-UNIX-TERMTYPE NAME)) (STREAMPROP STREAM (QUOTE UNIXTERMTYPE) NAME)))) ) (LISP-TO-UNIX-TERMTYPE (LAMBDA (TERMTYPE) (* ; "Edited 14-Feb-90 14:20 by bvm") (OR (CDR (ASSOC TERMTYPE CHAT.TO.UNIX.TERMINALS)) (CL:STRING-DOWNCASE TERMTYPE))) ) (UNIX.PARAMS.CONFIRM (LAMBDA (STREAM TYPE) (* ; "Edited 31-Jan-90 16:00 by bvm") (CASE UNIXCHAT.NOTICE.RESHAPE ((T) T) (ASK (EQ (MENU (create MENU ITEMS _ (QUOTE (("Stuff shell command to adjust terminal parms" T "Chat will inject a command to set the terminal parameters. You must be talking to a shell prompt for this to work. If you're not at a shell prompt now, get to one before selecting this.") ("Skip it--I'm not talking to the shell" :NO "Don't tell the host about the change"))) CENTERFLG _ T TITLE _ (CL:FORMAT NIL "Tell host about change in terminal ~A?" TYPE)) NIL T) T)))) ) ) (RPAQ? CHAT.TO.UNIX.TERMINALS ) (RPAQ? UNIXCHAT.NOTICE.RESHAPE 'ASK) (RPAQ? UNIXCHAT.TSET.DELAY 2000) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS CHAT.TO.UNIX.TERMINALS UNIXCHAT.NOTICE.RESHAPE) ) (RPAQ CHAT.ALLHOSTS (SORT (UNION '(SHELL) CHAT.ALLHOSTS) (FUNCTION UALPHORDER))) (RPAQQ CHAT.HOSTMENU NIL) (PUTPROPS UNIXCHAT COPYRIGHT ("Venue & Xerox Corporation" 1989 1990)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2393 2918 (UNIX.HOST.FILTER 2403 . 2579) (UNIXCHAT.OPEN 2581 . 2916)) (3473 6503 ( UNIX.SENDSCREENPARAMS 3483 . 4239) (UNIX.SETDISPLAYTYPE 4241 . 5738) (LISP-TO-UNIX-TERMTYPE 5740 . 5907) (UNIX.PARAMS.CONFIRM 5909 . 6501))))) STOP