Attachment "tclUnixChan.c.patch" to
ticket [438509ffff]
added by
schroedter
2002-02-26 20:49:02.
0000: 2a 2a 2a 20 74 63 6c 55 6e 69 78 43 68 61 6e 2e *** tclUnixChan.
0010: 63 2e 6f 6c 64 09 54 75 65 20 46 65 62 20 32 36 c.old.Tue Feb 26
0020: 20 30 38 3a 30 35 3a 32 36 20 32 30 30 32 0a 2d 08:05:26 2002.-
0030: 2d 2d 20 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 -- tclUnixChan.c
0040: 09 54 75 65 20 46 65 62 20 32 36 20 31 34 3a 33 .Tue Feb 26 14:3
0050: 34 3a 30 37 20 32 30 30 32 0a 2a 2a 2a 2a 2a 2a 4:07 2002.******
0060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 34 35 *********.*** 45
0070: 2c 36 30 20 2a 2a 2a 2a 0a 2d 2d 2d 20 34 35 2c ,60 ****.--- 45,
0080: 38 31 20 2d 2d 2d 2d 0a 20 20 0a 20 20 23 69 66 81 ----. . #if
0090: 64 65 66 20 55 53 45 5f 54 45 52 4d 49 4f 53 0a def USE_TERMIOS.
00a0: 20 20 23 20 20 20 69 6e 63 6c 75 64 65 20 3c 74 # include <t
00b0: 65 72 6d 69 6f 73 2e 68 3e 0a 2b 20 23 20 20 20 ermios.h>.+ #
00c0: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 69 6f 63 include <sys/ioc
00d0: 74 6c 2e 68 3e 0a 20 20 23 20 20 20 64 65 66 69 tl.h>. # defi
00e0: 6e 65 20 49 4f 53 54 41 54 45 09 09 09 73 74 72 ne IOSTATE...str
00f0: 75 63 74 20 74 65 72 6d 69 6f 73 0a 20 20 23 20 uct termios. #
0100: 20 20 64 65 66 69 6e 65 20 47 45 54 49 4f 53 54 define GETIOST
0110: 41 54 45 28 66 64 2c 20 73 74 61 74 65 50 74 72 ATE(fd, statePtr
0120: 29 09 74 63 67 65 74 61 74 74 72 28 28 66 64 29 ).tcgetattr((fd)
0130: 2c 20 28 73 74 61 74 65 50 74 72 29 29 0a 20 20 , (statePtr)).
0140: 23 20 20 20 64 65 66 69 6e 65 20 53 45 54 49 4f # define SETIO
0150: 53 54 41 54 45 28 66 64 2c 20 73 74 61 74 65 50 STATE(fd, stateP
0160: 74 72 29 09 74 63 73 65 74 61 74 74 72 28 28 66 tr).tcsetattr((f
0170: 64 29 2c 20 54 43 53 41 44 52 41 49 4e 2c 20 28 d), TCSADRAIN, (
0180: 73 74 61 74 65 50 74 72 29 29 0a 2b 20 23 20 20 statePtr)).+ #
0190: 20 64 65 66 69 6e 65 20 47 45 54 43 4f 4e 54 52 define GETCONTR
01a0: 4f 4c 28 66 64 2c 20 69 6e 74 50 74 72 29 09 69 OL(fd, intPtr).i
01b0: 6f 63 74 6c 28 28 66 64 29 2c 20 54 49 4f 43 4d octl((fd), TIOCM
01c0: 47 45 54 2c 20 28 69 6e 74 50 74 72 29 29 0a 2b GET, (intPtr)).+
01d0: 20 23 20 20 20 64 65 66 69 6e 65 20 53 45 54 43 # define SETC
01e0: 4f 4e 54 52 4f 4c 28 66 64 2c 20 69 6e 74 50 74 ONTROL(fd, intPt
01f0: 72 29 09 69 6f 63 74 6c 28 28 66 64 29 2c 20 54 r).ioctl((fd), T
0200: 49 4f 43 4d 53 45 54 2c 20 28 69 6e 74 50 74 72 IOCMSET, (intPtr
0210: 29 29 0a 2b 20 23 20 20 20 64 65 66 69 6e 65 20 )).+ # define
0220: 54 54 59 46 4c 55 53 48 28 66 64 29 09 09 09 74 TTYFLUSH(fd)...t
0230: 63 66 6c 75 73 68 28 28 66 64 29 2c 20 54 43 49 cflush((fd), TCI
0240: 4f 46 4c 55 53 48 29 3b 0a 2b 20 23 20 20 20 69 OFLUSH);.+ # i
0250: 66 64 65 66 20 46 49 4f 4e 52 45 41 44 0a 2b 20 fdef FIONREAD.+
0260: 23 09 64 65 66 69 6e 65 20 47 45 54 52 45 41 44 #.define GETREAD
0270: 51 55 45 55 45 28 66 64 2c 20 69 6e 74 29 09 69 QUEUE(fd, int).i
0280: 6f 63 74 6c 28 28 66 64 29 2c 20 46 49 4f 4e 52 octl((fd), FIONR
0290: 45 41 44 2c 20 26 28 69 6e 74 29 29 0a 2b 20 23 EAD, &(int)).+ #
02a0: 20 20 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 elif defined(
02b0: 46 49 4f 52 44 43 48 4b 29 0a 2b 20 23 09 64 65 FIORDCHK).+ #.de
02c0: 66 69 6e 65 20 47 45 54 52 45 41 44 51 55 45 55 fine GETREADQUEU
02d0: 45 28 66 64 2c 20 69 6e 74 29 09 69 6e 74 20 3d E(fd, int).int =
02e0: 20 69 6f 63 74 6c 28 28 66 64 29 2c 20 46 49 4f ioctl((fd), FIO
02f0: 52 44 43 48 4b 2c 20 4e 55 4c 4c 29 0a 2b 20 23 RDCHK, NULL).+ #
0300: 20 20 20 65 6e 64 69 66 0a 2b 20 23 20 20 20 69 endif.+ # i
0310: 66 64 65 66 20 54 49 4f 43 4f 55 54 51 0a 2b 20 fdef TIOCOUTQ.+
0320: 23 09 64 65 66 69 6e 65 20 47 45 54 57 52 49 54 #.define GETWRIT
0330: 45 51 55 45 55 45 28 66 64 2c 20 69 6e 74 29 09 EQUEUE(fd, int).
0340: 69 6f 63 74 6c 28 28 66 64 29 2c 20 54 49 4f 43 ioctl((fd), TIOC
0350: 4f 55 54 51 2c 20 26 28 69 6e 74 29 29 0a 2b 20 OUTQ, &(int)).+
0360: 23 20 20 20 65 6e 64 69 66 0a 2b 20 23 20 20 20 # endif.+ #
0370: 69 66 20 64 65 66 69 6e 65 64 28 54 49 4f 43 53 if defined(TIOCS
0380: 42 52 4b 29 20 26 26 20 64 65 66 69 6e 65 64 28 BRK) && defined(
0390: 54 49 4f 43 43 42 52 4b 29 0a 2b 20 23 09 64 65 TIOCCBRK).+ #.de
03a0: 66 69 6e 65 20 53 45 54 42 52 45 41 4b 28 66 64 fine SETBREAK(fd
03b0: 2c 20 66 6c 61 67 29 09 09 5c 0a 2b 20 09 09 69 , flag)..\.+ ..i
03c0: 6f 63 74 6c 28 28 66 64 29 2c 20 28 75 6e 73 69 octl((fd), (unsi
03d0: 67 6e 65 64 29 20 28 28 66 6c 61 67 29 20 3f 20 gned) ((flag) ?
03e0: 54 49 4f 43 53 42 52 4b 3a 54 49 4f 43 43 42 52 TIOCSBRK:TIOCCBR
03f0: 4b 29 2c 20 4e 55 4c 4c 29 0a 2b 20 23 20 20 20 K), NULL).+ #
0400: 65 6e 64 69 66 0a 2b 20 23 20 20 20 69 66 20 21 endif.+ # if !
0410: 64 65 66 69 6e 65 64 28 43 52 54 53 43 54 53 29 defined(CRTSCTS)
0420: 20 26 26 20 64 65 66 69 6e 65 64 28 43 4e 45 57 && defined(CNEW
0430: 5f 52 54 53 43 54 53 29 0a 2b 20 23 09 64 65 66 _RTSCTS).+ #.def
0440: 69 6e 65 20 43 52 54 53 43 54 53 20 43 4e 45 57 ine CRTSCTS CNEW
0450: 5f 52 54 53 43 54 53 0a 2b 20 23 20 20 20 65 6e _RTSCTS.+ # en
0460: 64 69 66 0a 20 20 23 65 6c 73 65 09 2f 2a 20 21 dif. #else./* !
0470: 55 53 45 5f 54 45 52 4d 49 4f 53 20 2a 2f 0a 2b USE_TERMIOS */.+
0480: 20 0a 20 20 23 69 66 64 65 66 20 55 53 45 5f 54 . #ifdef USE_T
0490: 45 52 4d 49 4f 0a 20 20 23 20 20 20 69 6e 63 6c ERMIO. # incl
04a0: 75 64 65 20 3c 74 65 72 6d 69 6f 2e 68 3e 0a 20 ude <termio.h>.
04b0: 20 23 20 20 20 64 65 66 69 6e 65 20 49 4f 53 54 # define IOST
04c0: 41 54 45 09 09 09 73 74 72 75 63 74 20 74 65 72 ATE...struct ter
04d0: 6d 69 6f 0a 20 20 23 20 20 20 64 65 66 69 6e 65 mio. # define
04e0: 20 47 45 54 49 4f 53 54 41 54 45 28 66 64 2c 20 GETIOSTATE(fd,
04f0: 73 74 61 74 65 50 74 72 29 09 69 6f 63 74 6c 28 statePtr).ioctl(
0500: 28 66 64 29 2c 20 54 43 47 45 54 41 2c 20 28 73 (fd), TCGETA, (s
0510: 74 61 74 65 50 74 72 29 29 0a 20 20 23 20 20 20 tatePtr)). #
0520: 64 65 66 69 6e 65 20 53 45 54 49 4f 53 54 41 54 define SETIOSTAT
0530: 45 28 66 64 2c 20 73 74 61 74 65 50 74 72 29 09 E(fd, statePtr).
0540: 69 6f 63 74 6c 28 28 66 64 29 2c 20 54 43 53 45 ioctl((fd), TCSE
0550: 54 41 57 2c 20 28 73 74 61 74 65 50 74 72 29 29 TAW, (statePtr))
0560: 0a 20 20 23 65 6c 73 65 09 2f 2a 20 21 55 53 45 . #else./* !USE
0570: 5f 54 45 52 4d 49 4f 20 2a 2f 0a 2b 20 0a 20 20 _TERMIO */.+ .
0580: 23 69 66 64 65 66 20 55 53 45 5f 53 47 54 54 59 #ifdef USE_SGTTY
0590: 0a 20 20 23 20 20 20 69 6e 63 6c 75 64 65 20 3c . # include <
05a0: 73 67 74 74 79 2e 68 3e 0a 20 20 23 20 20 20 64 sgtty.h>. # d
05b0: 65 66 69 6e 65 20 49 4f 53 54 41 54 45 09 09 09 efine IOSTATE...
05c0: 73 74 72 75 63 74 20 73 67 74 74 79 62 0a 2a 2a struct sgttyb.**
05d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a *************.**
05e0: 2a 20 36 33 2c 36 38 20 2a 2a 2a 2a 0a 2d 2d 2d * 63,68 ****.---
05f0: 20 38 34 2c 39 30 20 2d 2d 2d 2d 0a 20 20 23 65 84,90 ----. #e
0600: 6c 73 65 09 2f 2a 20 21 55 53 45 5f 53 47 54 54 lse./* !USE_SGTT
0610: 59 20 2a 2f 0a 20 20 23 20 20 20 75 6e 64 65 66 Y */. # undef
0620: 20 53 55 50 50 4f 52 54 53 5f 54 54 59 0a 20 20 SUPPORTS_TTY.
0630: 23 65 6e 64 69 66 09 2f 2a 20 21 55 53 45 5f 53 #endif./* !USE_S
0640: 47 54 54 59 20 2a 2f 0a 2b 20 0a 20 20 23 65 6e GTTY */.+ . #en
0650: 64 69 66 09 2f 2a 20 21 55 53 45 5f 54 45 52 4d dif./* !USE_TERM
0660: 49 4f 20 2a 2f 0a 20 20 23 65 6e 64 69 66 09 2f IO */. #endif./
0670: 2a 20 21 55 53 45 5f 54 45 52 4d 49 4f 53 20 2a * !USE_TERMIOS *
0680: 2f 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a /. .***********
0690: 2a 2a 2a 2a 0a 2a 2a 2a 20 32 32 30 2c 32 32 35 ****.*** 220,225
06a0: 20 2a 2a 2a 2a 0a 2d 2d 2d 20 32 34 32 2c 32 34 ****.--- 242,24
06b0: 39 20 2d 2d 2d 2d 0a 20 20 09 09 09 20 20 20 20 9 ----. ...
06c0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
06d0: 72 70 2c 20 43 4f 4e 53 54 20 63 68 61 72 20 2a rp, CONST char *
06e0: 6f 70 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 09 09 optionName,. ..
06f0: 09 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 . Tcl_DString
0700: 20 2a 64 73 50 74 72 29 29 3b 0a 20 20 73 74 61 *dsPtr));. sta
0710: 74 69 63 20 46 69 6c 65 53 74 61 74 65 20 2a 09 tic FileState *.
0720: 54 74 79 49 6e 69 74 20 5f 41 4e 53 49 5f 41 52 TtyInit _ANSI_AR
0730: 47 53 5f 28 28 69 6e 74 20 66 64 2c 20 69 6e 74 GS_((int fd, int
0740: 20 69 6e 69 74 69 61 6c 69 7a 65 29 29 3b 0a 2b initialize));.+
0750: 20 73 74 61 74 69 63 20 69 6e 74 09 09 54 74 79 static int..Tty
0760: 4f 75 74 70 75 74 50 72 6f 63 20 5f 41 4e 53 49 OutputProc _ANSI
0770: 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 _ARGS_((ClientDa
0780: 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c ta instanceData,
0790: 0a 2b 20 09 09 09 20 20 20 20 43 4f 4e 53 54 20 .+ ... CONST
07a0: 63 68 61 72 20 2a 62 75 66 2c 20 69 6e 74 20 74 char *buf, int t
07b0: 6f 57 72 69 74 65 2c 20 69 6e 74 20 2a 65 72 72 oWrite, int *err
07c0: 6f 72 43 6f 64 65 29 29 3b 0a 20 20 73 74 61 74 orCode));. stat
07d0: 69 63 20 69 6e 74 09 09 54 74 79 50 61 72 73 65 ic int..TtyParse
07e0: 4d 6f 64 65 20 5f 41 4e 53 49 5f 41 52 47 53 5f Mode _ANSI_ARGS_
07f0: 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e ((Tcl_Interp *in
0800: 74 65 72 70 2c 0a 20 20 09 09 09 20 20 20 20 43 terp,. ... C
0810: 4f 4e 53 54 20 63 68 61 72 20 2a 6d 6f 64 65 2c ONST char *mode,
0820: 20 69 6e 74 20 2a 73 70 65 65 64 50 74 72 2c 20 int *speedPtr,
0830: 69 6e 74 20 2a 70 61 72 69 74 79 50 74 72 2c 0a int *parityPtr,.
0840: 20 20 09 09 09 20 20 20 20 69 6e 74 20 2a 64 61 ... int *da
0850: 74 61 50 74 72 2c 20 69 6e 74 20 2a 73 74 6f 70 taPtr, int *stop
0860: 50 74 72 29 29 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a Ptr));.*********
0870: 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 32 36 34 2c 32 ******.*** 264,2
0880: 37 30 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 54 43 70 ****. TC
0890: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
08a0: 4e 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e N_2,./* v2 chann
08b0: 65 6c 20 2a 2f 0a 20 20 20 20 20 20 54 74 79 43 el */. TtyC
08c0: 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43 6c loseProc,../* Cl
08d0: 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 ose proc. */.
08e0: 20 20 20 46 69 6c 65 49 6e 70 75 74 50 72 6f 63 FileInputProc
08f0: 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 ,../* Input proc
0900: 2e 20 2a 2f 0a 21 20 20 20 20 20 46 69 6c 65 4f . */.! FileO
0910: 75 74 70 75 74 50 72 6f 63 2c 09 09 2f 2a 20 4f utputProc,../* O
0920: 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 20 utput proc. */.
0930: 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 NULL,.../*
0940: 53 65 65 6b 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 Seek proc. */.
0950: 20 20 20 20 54 74 79 53 65 74 4f 70 74 69 6f 6e TtySetOption
0960: 50 72 6f 63 2c 09 09 2f 2a 20 53 65 74 20 6f 70 Proc,../* Set op
0970: 74 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 tion proc. */.
0980: 20 20 20 20 54 74 79 47 65 74 4f 70 74 69 6f 6e TtyGetOption
0990: 50 72 6f 63 2c 09 09 2f 2a 20 47 65 74 20 6f 70 Proc,../* Get op
09a0: 74 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f 0a 2d 2d tion proc. */.--
09b0: 2d 20 32 38 38 2c 32 39 34 20 2d 2d 2d 2d 0a 20 - 288,294 ----.
09c0: 20 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c TCL_CHANNEL
09d0: 5f 56 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 76 _VERSION_2,./* v
09e0: 32 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 2 channel */.
09f0: 20 20 20 54 74 79 43 6c 6f 73 65 50 72 6f 63 2c TtyCloseProc,
0a00: 09 09 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e ../* Close proc.
0a10: 20 2a 2f 0a 20 20 20 20 20 20 46 69 6c 65 49 6e */. FileIn
0a20: 70 75 74 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 putProc,../* Inp
0a30: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 21 20 20 20 ut proc. */.!
0a40: 20 20 54 74 79 4f 75 74 70 75 74 50 72 6f 63 2c TtyOutputProc,
0a50: 09 09 2f 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 ../* Output proc
0a60: 2e 20 2a 2f 0a 20 20 20 20 20 20 4e 55 4c 4c 2c . */. NULL,
0a70: 09 09 09 2f 2a 20 53 65 65 6b 20 70 72 6f 63 2e .../* Seek proc.
0a80: 20 2a 2f 0a 20 20 20 20 20 20 54 74 79 53 65 74 */. TtySet
0a90: 4f 70 74 69 6f 6e 50 72 6f 63 2c 09 09 2f 2a 20 OptionProc,../*
0aa0: 53 65 74 20 6f 70 74 69 6f 6e 20 70 72 6f 63 2e Set option proc.
0ab0: 20 2a 2f 0a 20 20 20 20 20 20 54 74 79 47 65 74 */. TtyGet
0ac0: 4f 70 74 69 6f 6e 50 72 6f 63 2c 09 09 2f 2a 20 OptionProc,../*
0ad0: 47 65 74 20 6f 70 74 69 6f 6e 20 70 72 6f 63 2e Get option proc.
0ae0: 20 2a 2f 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a */.************
0af0: 2a 2a 2a 0a 2a 2a 2a 20 36 33 31 2c 36 34 31 20 ***.*** 631,641
0b00: 2a 2a 2a 2a 0a 20 20 20 2a 09 30 20 69 66 20 73 ****. *.0 if s
0b10: 75 63 63 65 73 73 66 75 6c 2c 20 65 72 72 6e 6f uccessful, errno
0b20: 20 69 66 20 66 61 69 6c 65 64 2e 0a 20 20 20 2a if failed.. *
0b30: 0a 20 20 20 2a 20 53 69 64 65 20 65 66 66 65 63 . * Side effec
0b40: 74 73 3a 0a 21 20 20 2a 09 52 65 73 74 6f 72 65 ts:.! *.Restore
0b50: 73 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 61 s the settings a
0b60: 6e 64 20 63 6c 6f 73 65 73 20 74 68 65 20 64 65 nd closes the de
0b70: 76 69 63 65 20 6f 66 20 74 68 65 20 63 68 61 6e vice of the chan
0b80: 6e 65 6c 2e 0a 20 20 20 2a 0a 20 20 20 2a 2d 2d nel.. *. *--
0b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0bd0: 2d 2d 2d 2d 0a 20 20 20 2a 2f 0a 2d 20 0a 20 20 ----. */.- .
0be0: 73 74 61 74 69 63 20 69 6e 74 0a 20 20 54 74 79 static int. Tty
0bf0: 43 6c 6f 73 65 50 72 6f 63 28 69 6e 73 74 61 6e CloseProc(instan
0c00: 63 65 44 61 74 61 2c 20 69 6e 74 65 72 70 29 0a ceData, interp).
0c10: 20 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 ClientData
0c20: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 09 2f instanceData;./
0c30: 2a 20 54 74 79 20 73 74 61 74 65 2e 20 2a 2f 0a * Tty state. */.
0c40: 2d 2d 2d 20 36 35 35 2c 36 36 34 20 2d 2d 2d 2d --- 655,664 ----
0c50: 0a 20 20 20 2a 09 30 20 69 66 20 73 75 63 63 65 . *.0 if succe
0c60: 73 73 66 75 6c 2c 20 65 72 72 6e 6f 20 69 66 20 ssful, errno if
0c70: 66 61 69 6c 65 64 2e 0a 20 20 20 2a 0a 20 20 20 failed.. *.
0c80: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a * Side effects:.
0c90: 21 20 20 2a 09 43 6c 6f 73 65 73 20 74 68 65 20 ! *.Closes the
0ca0: 64 65 76 69 63 65 20 6f 66 20 74 68 65 20 63 68 device of the ch
0cb0: 61 6e 6e 65 6c 2e 0a 20 20 20 2a 0a 20 20 20 2a annel.. *. *
0cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d00: 2d 2d 2d 2d 2d 2d 0a 20 20 20 2a 2f 0a 20 20 73 ------. */. s
0d10: 74 61 74 69 63 20 69 6e 74 0a 20 20 54 74 79 43 tatic int. TtyC
0d20: 6c 6f 73 65 50 72 6f 63 28 69 6e 73 74 61 6e 63 loseProc(instanc
0d30: 65 44 61 74 61 2c 20 69 6e 74 65 72 70 29 0a 20 eData, interp).
0d40: 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 ClientData
0d50: 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 09 2f 2a instanceData;./*
0d60: 20 54 74 79 20 73 74 61 74 65 2e 20 2a 2f 0a 2a Tty state. */.*
0d70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a **************.*
0d80: 2a 2a 20 36 34 34 2c 36 35 38 20 2a 2a 2a 2a 0a ** 644,658 ****.
0d90: 2d 2d 2d 20 36 36 37 2c 37 36 31 20 2d 2d 2d 2d --- 667,761 ----
0da0: 0a 20 20 20 20 20 20 54 74 79 53 74 61 74 65 20 . TtyState
0db0: 2a 74 74 79 50 74 72 3b 0a 20 20 0a 20 20 20 20 *ttyPtr;. .
0dc0: 20 20 74 74 79 50 74 72 20 3d 20 28 54 74 79 53 ttyPtr = (TtyS
0dd0: 74 61 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 tate *) instance
0de0: 44 61 74 61 3b 0a 2b 20 23 69 66 64 65 66 20 54 Data;.+ #ifdef T
0df0: 54 59 46 4c 55 53 48 0a 2b 20 20 20 20 20 54 54 TYFLUSH.+ TT
0e00: 59 46 4c 55 53 48 28 74 74 79 50 74 72 2d 3e 66 YFLUSH(ttyPtr->f
0e10: 73 2e 66 64 29 3b 0a 2b 20 23 65 6e 64 69 66 0a s.fd);.+ #endif.
0e20: 2b 20 20 20 20 20 2f 2a 20 44 6f 6e 27 74 20 75 + /* Don't u
0e30: 6e 73 61 76 65 20 54 54 59 20 73 74 61 74 65 2c nsave TTY state,
0e40: 20 74 63 6c 20 6d 61 79 20 62 65 20 75 73 65 64 tcl may be used
0e50: 20 61 73 20 61 20 73 69 6d 70 6c 65 72 20 27 73 as a simpler 's
0e60: 74 74 79 27 20 2a 2f 0a 2b 20 23 69 66 20 30 0a tty' */.+ #if 0.
0e70: 20 20 20 20 20 20 69 66 20 28 74 74 79 50 74 72 if (ttyPtr
0e80: 2d 3e 73 74 61 74 65 55 70 64 61 74 65 64 29 20 ->stateUpdated)
0e90: 7b 0a 20 20 09 53 45 54 49 4f 53 54 41 54 45 28 {. .SETIOSTATE(
0ea0: 74 74 79 50 74 72 2d 3e 66 73 2e 66 64 2c 20 26 ttyPtr->fs.fd, &
0eb0: 74 74 79 50 74 72 2d 3e 73 61 76 65 64 53 74 61 ttyPtr->savedSta
0ec0: 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 2b 20 23 te);. }.+ #
0ed0: 65 6e 64 69 66 0a 20 20 20 20 20 20 72 65 74 75 endif. retu
0ee0: 72 6e 20 46 69 6c 65 43 6c 6f 73 65 50 72 6f 63 rn FileCloseProc
0ef0: 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 69 (instanceData, i
0f00: 6e 74 65 72 70 29 3b 0a 20 20 7d 0a 20 20 0a 20 nterp);. }. .
0f10: 20 2f 2a 0a 20 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d /*. *--------
0f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 --------------.
0f60: 20 20 2a 0a 2b 20 20 2a 20 54 74 79 4f 75 74 70 *.+ * TtyOutp
0f70: 75 74 50 72 6f 63 2d 2d 0a 2b 20 20 2a 0a 2b 20 utProc--.+ *.+
0f80: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 *.This procedur
0f90: 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 72 6f e is invoked fro
0fa0: 6d 20 74 68 65 20 67 65 6e 65 72 69 63 20 49 4f m the generic IO
0fb0: 20 6c 65 76 65 6c 20 74 6f 20 77 72 69 74 65 0a level to write.
0fc0: 2b 20 20 2a 09 6f 75 74 70 75 74 20 74 6f 20 61 + *.output to a
0fd0: 20 54 54 59 20 63 68 61 6e 6e 65 6c 2e 0a 2b 20 TTY channel..+
0fe0: 20 2a 0a 2b 20 20 2a 20 52 65 73 75 6c 74 73 3a *.+ * Results:
0ff0: 0a 2b 20 20 2a 09 54 68 65 20 6e 75 6d 62 65 72 .+ *.The number
1000: 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65 of bytes writte
1010: 6e 20 69 73 20 72 65 74 75 72 6e 65 64 20 6f 72 n is returned or
1020: 20 2d 31 20 6f 6e 20 65 72 72 6f 72 2e 20 41 6e -1 on error. An
1030: 0a 2b 20 20 2a 09 6f 75 74 70 75 74 20 61 72 67 .+ *.output arg
1040: 75 6d 65 6e 74 09 63 6f 6e 74 61 69 6e 73 20 61 ument.contains a
1050: 20 50 4f 53 49 58 20 65 72 72 6f 72 20 63 6f 64 POSIX error cod
1060: 65 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 e if an error oc
1070: 63 75 72 72 65 64 2c 0a 2b 20 20 2a 09 6f 72 20 curred,.+ *.or
1080: 7a 65 72 6f 2e 0a 2b 20 20 2a 0a 2b 20 20 2a 20 zero..+ *.+ *
1090: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 Side effects:.+
10a0: 20 2a 09 57 72 69 74 65 73 20 6f 75 74 70 75 74 *.Writes output
10b0: 20 6f 6e 20 74 68 65 20 6f 75 74 70 75 74 20 64 on the output d
10c0: 65 76 69 63 65 20 6f 66 20 74 68 65 20 63 68 61 evice of the cha
10d0: 6e 6e 65 6c 0a 2b 20 20 2a 09 69 66 20 74 68 65 nnel.+ *.if the
10e0: 20 63 68 61 6e 6e 65 6c 20 69 73 20 6e 6f 74 20 channel is not
10f0: 64 65 73 69 67 6e 61 74 65 64 20 74 6f 20 62 65 designated to be
1100: 20 63 6c 6f 73 65 64 2e 0a 2b 20 20 2a 0a 2b 20 closed..+ *.+
1110: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1150: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 20 2a 2f 0a 2b --------.+ */.+
1160: 20 0a 2b 20 73 74 61 74 69 63 20 69 6e 74 0a 2b .+ static int.+
1170: 20 54 74 79 4f 75 74 70 75 74 50 72 6f 63 28 69 TtyOutputProc(i
1180: 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 62 75 66 nstanceData, buf
1190: 2c 20 74 6f 57 72 69 74 65 2c 20 65 72 72 6f 72 , toWrite, error
11a0: 43 6f 64 65 50 74 72 29 0a 2b 20 20 20 20 20 43 CodePtr).+ C
11b0: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e lientData instan
11c0: 63 65 44 61 74 61 3b 09 09 2f 2a 20 46 69 6c 65 ceData;../* File
11d0: 20 73 74 61 74 65 2e 20 2a 2f 0a 2b 20 20 20 20 state. */.+
11e0: 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 62 75 66 CONST char *buf
11f0: 3b 09 09 09 2f 2a 20 54 68 65 20 64 61 74 61 20 ;.../* The data
1200: 62 75 66 66 65 72 2e 20 2a 2f 0a 2b 20 20 20 20 buffer. */.+
1210: 20 69 6e 74 20 74 6f 57 72 69 74 65 3b 09 09 09 int toWrite;...
1220: 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 62 79 74 65 /* How many byte
1230: 73 20 74 6f 20 77 72 69 74 65 3f 20 2a 2f 0a 2b s to write? */.+
1240: 20 20 20 20 20 69 6e 74 20 2a 65 72 72 6f 72 43 int *errorC
1250: 6f 64 65 50 74 72 3b 09 09 09 2f 2a 20 57 68 65 odePtr;.../* Whe
1260: 72 65 20 74 6f 20 73 74 6f 72 65 20 65 72 72 6f re to store erro
1270: 72 20 63 6f 64 65 2e 20 2a 2f 0a 2b 20 7b 0a 2b r code. */.+ {.+
1280: 20 20 20 20 20 69 66 20 28 20 54 63 6c 49 6e 45 if ( TclInE
1290: 78 69 74 28 29 20 29 20 7b 0a 2b 20 09 2f 2a 0a xit() ) {.+ ./*.
12a0: 2b 20 09 20 2a 20 44 6f 20 6e 6f 74 20 77 72 69 + . * Do not wri
12b0: 74 65 20 64 61 74 61 20 64 75 72 69 6e 67 20 54 te data during T
12c0: 63 6c 20 65 78 69 74 2e 0a 2b 20 09 20 2a 20 53 cl exit..+ . * S
12d0: 65 72 69 61 6c 20 70 6f 72 74 20 6d 61 79 20 62 erial port may b
12e0: 6c 6f 63 6b 20 70 72 65 76 65 6e 74 69 6e 67 20 lock preventing
12f0: 54 63 6c 20 66 72 6f 6d 20 65 78 69 74 2e 0a 2b Tcl from exit..+
1300: 20 09 20 2a 2f 0a 2b 20 09 72 65 74 75 72 6e 20 . */.+ .return
1310: 74 6f 57 72 69 74 65 3b 0a 2b 20 20 20 20 20 7d toWrite;.+ }
1320: 20 65 6c 73 65 20 7b 0a 2b 20 09 72 65 74 75 72 else {.+ .retur
1330: 6e 20 46 69 6c 65 4f 75 74 70 75 74 50 72 6f 63 n FileOutputProc
1340: 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 62 (instanceData, b
1350: 75 66 2c 20 74 6f 57 72 69 74 65 2c 20 65 72 72 uf, toWrite, err
1360: 6f 72 43 6f 64 65 50 74 72 29 3b 0a 2b 20 20 20 orCodePtr);.+
1370: 20 20 7d 0a 2b 20 7d 0a 2b 20 0a 2b 20 23 69 66 }.+ }.+ .+ #if
1380: 64 65 66 20 55 53 45 5f 54 45 52 4d 49 4f 53 0a def USE_TERMIOS.
1390: 2b 20 0a 2b 20 2f 2a 0a 2b 20 20 2a 2d 2d 2d 2d + .+ /*.+ *----
13a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13e0: 2d 2d 0a 2b 20 20 2a 0a 2b 20 20 2a 20 54 74 79 --.+ *.+ * Tty
13f0: 4d 6f 64 65 6d 53 74 61 74 75 73 53 74 72 20 2d ModemStatusStr -
1400: 2d 0a 2b 20 20 2a 0a 2b 20 20 2a 20 20 43 6f 6e -.+ *.+ * Con
1410: 76 65 72 74 73 20 61 20 52 53 32 33 32 20 6d 6f verts a RS232 mo
1420: 64 65 6d 20 73 74 61 74 75 73 20 6c 69 73 74 20 dem status list
1430: 6f 66 20 72 65 61 64 61 62 6c 65 20 66 6c 61 67 of readable flag
1440: 73 0a 2b 20 20 2a 0a 2b 20 20 2a 2d 2d 2d 2d 2d s.+ *.+ *-----
1450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1490: 2d 0a 2b 20 20 2a 2f 0a 2b 20 73 74 61 74 69 63 -.+ */.+ static
14a0: 20 76 6f 69 64 0a 2b 20 54 74 79 4d 6f 64 65 6d void.+ TtyModem
14b0: 53 74 61 74 75 73 53 74 72 28 73 74 61 74 75 73 StatusStr(status
14c0: 2c 20 64 73 50 74 72 29 0a 2b 20 20 20 20 20 69 , dsPtr).+ i
14d0: 6e 74 20 73 74 61 74 75 73 3b 20 20 20 20 20 20 nt status;
14e0: 20 20 20 20 20 20 2f 2a 20 52 53 32 33 32 20 6d /* RS232 m
14f0: 6f 64 65 6d 20 73 74 61 74 75 73 20 2a 2f 0a 2b odem status */.+
1500: 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 Tcl_DString
1510: 20 2a 64 73 50 74 72 3b 20 20 20 20 2f 2a 20 57 *dsPtr; /* W
1520: 68 65 72 65 20 74 6f 20 73 74 6f 72 65 20 73 74 here to store st
1530: 72 69 6e 67 20 2a 2f 0a 2b 20 7b 0a 2b 20 23 69 ring */.+ {.+ #i
1540: 66 64 65 66 20 54 49 4f 43 4d 5f 43 54 53 0a 2b fdef TIOCM_CTS.+
1550: 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 Tcl_DString
1560: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 64 73 AppendElement(ds
1570: 50 74 72 2c 20 22 43 54 53 22 29 3b 0a 2b 20 20 Ptr, "CTS");.+
1580: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 Tcl_DStringAp
1590: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 64 73 50 74 pendElement(dsPt
15a0: 72 2c 20 28 73 74 61 74 75 73 20 26 20 54 49 4f r, (status & TIO
15b0: 43 4d 5f 43 54 53 29 20 3f 20 22 31 22 20 3a 20 CM_CTS) ? "1" :
15c0: 22 30 22 20 29 3b 0a 2b 20 23 65 6e 64 69 66 0a "0" );.+ #endif.
15d0: 2b 20 23 69 66 64 65 66 20 54 49 4f 43 4d 5f 44 + #ifdef TIOCM_D
15e0: 53 52 0a 2b 20 20 20 20 20 54 63 6c 5f 44 53 74 SR.+ Tcl_DSt
15f0: 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e ringAppendElemen
1600: 74 28 64 73 50 74 72 2c 20 22 44 53 52 22 29 3b t(dsPtr, "DSR");
1610: 0a 2b 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 .+ Tcl_DStri
1620: 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 ngAppendElement(
1630: 64 73 50 74 72 2c 20 28 73 74 61 74 75 73 20 26 dsPtr, (status &
1640: 20 54 49 4f 43 4d 5f 44 53 52 29 20 3f 20 22 31 TIOCM_DSR) ? "1
1650: 22 20 3a 20 22 30 22 20 29 3b 0a 2b 20 23 65 6e " : "0" );.+ #en
1660: 64 69 66 0a 2b 20 23 69 66 64 65 66 20 54 49 4f dif.+ #ifdef TIO
1670: 43 4d 5f 52 4e 47 0a 2b 20 20 20 20 20 54 63 6c CM_RNG.+ Tcl
1680: 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c _DStringAppendEl
1690: 65 6d 65 6e 74 28 64 73 50 74 72 2c 20 22 52 49 ement(dsPtr, "RI
16a0: 4e 47 22 29 3b 0a 2b 20 20 20 20 20 54 63 6c 5f NG");.+ Tcl_
16b0: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 DStringAppendEle
16c0: 6d 65 6e 74 28 64 73 50 74 72 2c 20 28 73 74 61 ment(dsPtr, (sta
16d0: 74 75 73 20 26 20 54 49 4f 43 4d 5f 52 4e 47 29 tus & TIOCM_RNG)
16e0: 20 3f 20 22 31 22 20 3a 20 22 30 22 20 29 3b 0a ? "1" : "0" );.
16f0: 2b 20 23 65 6e 64 69 66 0a 2b 20 23 69 66 64 65 + #endif.+ #ifde
1700: 66 20 54 49 4f 43 4d 5f 43 44 0a 2b 20 20 20 20 f TIOCM_CD.+
1710: 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 Tcl_DStringAppe
1720: 6e 64 45 6c 65 6d 65 6e 74 28 64 73 50 74 72 2c ndElement(dsPtr,
1730: 20 22 44 43 44 22 29 3b 0a 2b 20 20 20 20 20 54 "DCD");.+ T
1740: 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 cl_DStringAppend
1750: 45 6c 65 6d 65 6e 74 28 64 73 50 74 72 2c 20 28 Element(dsPtr, (
1760: 73 74 61 74 75 73 20 26 20 54 49 4f 43 4d 5f 43 status & TIOCM_C
1770: 44 29 20 3f 20 22 31 22 20 3a 20 22 30 22 20 29 D) ? "1" : "0" )
1780: 3b 0a 2b 20 23 65 6e 64 69 66 0a 2b 20 7d 0a 2b ;.+ #endif.+ }.+
1790: 20 0a 2b 20 23 65 6e 64 69 66 0a 2b 20 0a 2b 20 .+ #endif.+ .+
17a0: 2f 2a 0a 2b 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d /*.+ *---------
17b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
17c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
17d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
17e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 -------------.+
17f0: 20 2a 0a 20 20 20 2a 20 54 74 79 53 65 74 4f 70 *. * TtySetOp
1800: 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 20 20 2a tionProc --. *
1810: 0a 20 20 20 2a 09 53 65 74 73 20 61 6e 20 6f 70 . *.Sets an op
1820: 74 69 6f 6e 20 6f 6e 20 61 20 63 68 61 6e 6e 65 tion on a channe
1830: 6c 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a l..*************
1840: 2a 2a 0a 2a 2a 2a 20 36 37 36 2c 36 38 36 20 2a **.*** 676,686 *
1850: 2a 2a 2a 0a 20 20 20 20 20 20 43 4f 4e 53 54 20 ***. CONST
1860: 63 68 61 72 20 2a 76 61 6c 75 65 3b 09 09 2f 2a char *value;../*
1870: 20 4e 65 77 20 76 61 6c 75 65 20 66 6f 72 20 6f New value for o
1880: 70 74 69 6f 6e 2e 20 2a 2f 0a 20 20 7b 0a 20 20 ption. */. {.
1890: 20 20 20 20 46 69 6c 65 53 74 61 74 65 20 2a 66 FileState *f
18a0: 73 50 74 72 20 3d 20 28 46 69 6c 65 53 74 61 74 sPtr = (FileStat
18b0: 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 74 e *) instanceDat
18c0: 61 3b 0a 21 20 20 20 20 20 75 6e 73 69 67 6e 65 a;.! unsigne
18d0: 64 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20 20 d int len;.
18e0: 20 54 74 79 41 74 74 72 73 20 74 74 79 3b 0a 20 TtyAttrs tty;.
18f0: 20 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 74 . len = st
1900: 72 6c 65 6e 28 6f 70 74 69 6f 6e 4e 61 6d 65 29 rlen(optionName)
1910: 3b 0a 21 20 20 20 20 20 69 66 20 28 28 6c 65 6e ;.! if ((len
1920: 20 3e 20 31 29 20 26 26 20 28 73 74 72 6e 63 6d > 1) && (strncm
1930: 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 2c 20 22 2d p(optionName, "-
1940: 6d 6f 64 65 22 2c 20 6c 65 6e 29 20 3d 3d 20 30 mode", len) == 0
1950: 29 29 20 7b 0a 20 20 09 69 66 20 28 54 74 79 50 )) {. .if (TtyP
1960: 61 72 73 65 4d 6f 64 65 28 69 6e 74 65 72 70 2c arseMode(interp,
1970: 20 76 61 6c 75 65 2c 20 26 74 74 79 2e 62 61 75 value, &tty.bau
1980: 64 2c 20 26 74 74 79 2e 70 61 72 69 74 79 2c 20 d, &tty.parity,
1990: 26 74 74 79 2e 64 61 74 61 2c 0a 20 20 09 09 26 &tty.data,. ..&
19a0: 74 74 79 2e 73 74 6f 70 29 20 21 3d 20 54 43 4c tty.stop) != TCL
19b0: 5f 4f 4b 29 20 7b 0a 20 20 09 20 20 20 20 72 65 _OK) {. . re
19c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
19d0: 2d 2d 2d 20 37 37 39 2c 37 39 39 20 2d 2d 2d 2d --- 779,799 ----
19e0: 0a 20 20 20 20 20 20 43 4f 4e 53 54 20 63 68 61 . CONST cha
19f0: 72 20 2a 76 61 6c 75 65 3b 09 09 2f 2a 20 4e 65 r *value;../* Ne
1a00: 77 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 w value for opti
1a10: 6f 6e 2e 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 20 on. */. {.
1a20: 20 46 69 6c 65 53 74 61 74 65 20 2a 66 73 50 74 FileState *fsPt
1a30: 72 20 3d 20 28 46 69 6c 65 53 74 61 74 65 20 2a r = (FileState *
1a40: 29 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a ) instanceData;.
1a50: 21 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 ! unsigned i
1a60: 6e 74 20 6c 65 6e 2c 20 76 6c 65 6e 3b 0a 20 20 nt len, vlen;.
1a70: 20 20 20 20 54 74 79 41 74 74 72 73 20 74 74 79 TtyAttrs tty
1a80: 3b 0a 2b 20 23 69 66 64 65 66 20 55 53 45 5f 54 ;.+ #ifdef USE_T
1a90: 45 52 4d 49 4f 53 0a 2b 20 20 20 20 20 69 6e 74 ERMIOS.+ int
1aa0: 20 66 6c 61 67 2c 20 63 6f 6e 74 72 6f 6c 2c 20 flag, control,
1ab0: 61 72 67 63 3b 0a 2b 20 20 20 20 20 43 4f 4e 53 argc;.+ CONS
1ac0: 54 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 0a 2b T char **argv;.+
1ad0: 20 20 20 20 20 49 4f 53 54 41 54 45 20 69 6f 73 IOSTATE ios
1ae0: 74 61 74 65 3b 0a 2b 20 23 65 6e 64 69 66 0a 20 tate;.+ #endif.
1af0: 20 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 74 . len = st
1b00: 72 6c 65 6e 28 6f 70 74 69 6f 6e 4e 61 6d 65 29 rlen(optionName)
1b10: 3b 0a 21 20 20 20 20 20 76 6c 65 6e 20 3d 20 73 ;.! vlen = s
1b20: 74 72 6c 65 6e 28 76 61 6c 75 65 29 3b 0a 21 20 trlen(value);.!
1b30: 0a 21 20 20 20 20 20 2f 2a 0a 21 20 20 20 20 20 .! /*.!
1b40: 20 2a 20 4f 70 74 69 6f 6e 20 2d 6d 6f 64 65 20 * Option -mode
1b50: 62 61 75 64 2c 70 61 72 69 74 79 2c 64 61 74 61 baud,parity,data
1b60: 62 69 74 73 2c 73 74 6f 70 62 69 74 73 0a 21 20 bits,stopbits.!
1b70: 20 20 20 20 20 2a 2f 0a 21 20 20 20 20 20 69 66 */.! if
1b80: 20 28 28 6c 65 6e 20 3e 20 32 29 20 26 26 20 28 ((len > 2) && (
1b90: 73 74 72 6e 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 strncmp(optionNa
1ba0: 6d 65 2c 20 22 2d 6d 6f 64 65 22 2c 20 6c 65 6e me, "-mode", len
1bb0: 29 20 3d 3d 20 30 29 29 20 7b 0a 20 20 09 69 66 ) == 0)) {. .if
1bc0: 20 28 54 74 79 50 61 72 73 65 4d 6f 64 65 28 69 (TtyParseMode(i
1bd0: 6e 74 65 72 70 2c 20 76 61 6c 75 65 2c 20 26 74 nterp, value, &t
1be0: 74 79 2e 62 61 75 64 2c 20 26 74 74 79 2e 70 61 ty.baud, &tty.pa
1bf0: 72 69 74 79 2c 20 26 74 74 79 2e 64 61 74 61 2c rity, &tty.data,
1c00: 0a 20 20 09 09 26 74 74 79 2e 73 74 6f 70 29 20 . ..&tty.stop)
1c10: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 20 09 != TCL_OK) {. .
1c20: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 return TCL_E
1c30: 52 52 4f 52 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a RROR;.**********
1c40: 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 36 39 32 2c 37 30 *****.*** 692,70
1c50: 30 20 2a 2a 2a 2a 0a 20 20 09 54 74 79 53 65 74 0 ****. .TtySet
1c60: 41 74 74 72 69 62 75 74 65 73 28 66 73 50 74 72 Attributes(fsPtr
1c70: 2d 3e 66 64 2c 20 26 74 74 79 29 3b 0a 20 20 09 ->fd, &tty);. .
1c80: 28 28 54 74 79 53 74 61 74 65 20 2a 29 20 66 73 ((TtyState *) fs
1c90: 50 74 72 29 2d 3e 73 74 61 74 65 55 70 64 61 74 Ptr)->stateUpdat
1ca0: 65 64 20 3d 20 31 3b 0a 20 20 09 72 65 74 75 72 ed = 1;. .retur
1cb0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 20 n TCL_OK;.
1cc0: 7d 20 65 6c 73 65 20 7b 0a 21 20 09 72 65 74 75 } else {.! .retu
1cd0: 72 6e 20 54 63 6c 5f 42 61 64 43 68 61 6e 6e 65 rn Tcl_BadChanne
1ce0: 6c 4f 70 74 69 6f 6e 28 69 6e 74 65 72 70 2c 20 lOption(interp,
1cf0: 6f 70 74 69 6f 6e 4e 61 6d 65 2c 20 22 6d 6f 64 optionName, "mod
1d00: 65 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 7d e");. }. }
1d10: 0a 20 20 0c 0a 20 20 2f 2a 0a 2d 2d 2d 20 38 30 . .. /*.--- 80
1d20: 35 2c 39 38 35 20 2d 2d 2d 2d 0a 20 20 09 54 74 5,985 ----. .Tt
1d30: 79 53 65 74 41 74 74 72 69 62 75 74 65 73 28 66 ySetAttributes(f
1d40: 73 50 74 72 2d 3e 66 64 2c 20 26 74 74 79 29 3b sPtr->fd, &tty);
1d50: 0a 20 20 09 28 28 54 74 79 53 74 61 74 65 20 2a . .((TtyState *
1d60: 29 20 66 73 50 74 72 29 2d 3e 73 74 61 74 65 55 ) fsPtr)->stateU
1d70: 70 64 61 74 65 64 20 3d 20 31 3b 0a 20 20 09 72 pdated = 1;. .r
1d80: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 eturn TCL_OK;.+
1d90: 20 20 20 20 7d 0a 2b 20 0a 2b 20 23 69 66 64 65 }.+ .+ #ifde
1da0: 66 20 55 53 45 5f 54 45 52 4d 49 4f 53 0a 2b 20 f USE_TERMIOS.+
1db0: 0a 2b 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 .+ /*.+
1dc0: 20 2a 20 4f 70 74 69 6f 6e 20 2d 68 61 6e 64 73 * Option -hands
1dd0: 68 61 6b 65 20 6e 6f 6e 65 7c 78 6f 6e 78 6f 66 hake none|xonxof
1de0: 66 7c 72 74 73 63 74 73 7c 64 74 72 64 73 72 0a f|rtscts|dtrdsr.
1df0: 2b 20 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 20 + */.+
1e00: 69 66 20 28 28 6c 65 6e 20 3e 20 31 29 20 26 26 if ((len > 1) &&
1e10: 20 28 73 74 72 6e 63 6d 70 28 6f 70 74 69 6f 6e (strncmp(option
1e20: 4e 61 6d 65 2c 20 22 2d 68 61 6e 64 73 68 61 6b Name, "-handshak
1e30: 65 22 2c 20 6c 65 6e 29 20 3d 3d 20 30 29 29 20 e", len) == 0))
1e40: 7b 0a 2b 20 09 2f 2a 0a 2b 20 09 20 2a 20 52 65 {.+ ./*.+ . * Re
1e50: 73 65 74 20 61 6c 6c 20 68 61 6e 64 73 68 61 6b set all handshak
1e60: 65 20 6f 70 74 69 6f 6e 73 0a 2b 20 09 20 2a 20 e options.+ . *
1e70: 44 54 52 20 61 6e 64 20 52 54 53 20 61 72 65 20 DTR and RTS are
1e80: 4f 4e 20 62 79 20 64 65 66 61 75 6c 74 0a 2b 20 ON by default.+
1e90: 09 20 2a 2f 0a 2b 20 09 47 45 54 49 4f 53 54 41 . */.+ .GETIOSTA
1ea0: 54 45 28 66 73 50 74 72 2d 3e 66 64 2c 20 26 69 TE(fsPtr->fd, &i
1eb0: 6f 73 74 61 74 65 29 3b 0a 2b 20 09 69 6f 73 74 ostate);.+ .iost
1ec0: 61 74 65 2e 63 5f 69 66 6c 61 67 20 26 3d 20 7e ate.c_iflag &= ~
1ed0: 28 49 58 4f 4e 20 7c 20 49 58 4f 46 46 20 7c 20 (IXON | IXOFF |
1ee0: 49 58 41 4e 59 29 3b 0a 2b 20 23 69 66 64 65 66 IXANY);.+ #ifdef
1ef0: 20 43 52 54 53 43 54 53 0a 2b 20 09 69 6f 73 74 CRTSCTS.+ .iost
1f00: 61 74 65 2e 63 5f 63 66 6c 61 67 20 26 3d 20 7e ate.c_cflag &= ~
1f10: 43 52 54 53 43 54 53 3b 0a 2b 20 23 65 6e 64 69 CRTSCTS;.+ #endi
1f20: 66 0a 2b 20 09 69 66 20 28 73 74 72 6e 63 61 73 f.+ .if (strncas
1f30: 65 63 6d 70 28 76 61 6c 75 65 2c 20 22 4e 4f 4e ecmp(value, "NON
1f40: 45 22 2c 20 76 6c 65 6e 29 20 3d 3d 20 30 29 20 E", vlen) == 0)
1f50: 7b 0a 2b 20 09 20 20 20 20 2f 2a 20 6c 65 61 76 {.+ . /* leav
1f60: 65 20 61 6c 6c 20 68 61 6e 64 73 68 61 6b 65 20 e all handshake
1f70: 6f 70 74 69 6f 6e 73 20 64 69 73 61 62 6c 65 64 options disabled
1f80: 20 2a 2f 0a 2b 20 09 7d 20 65 6c 73 65 20 69 66 */.+ .} else if
1f90: 20 28 73 74 72 6e 63 61 73 65 63 6d 70 28 76 61 (strncasecmp(va
1fa0: 6c 75 65 2c 20 22 58 4f 4e 58 4f 46 46 22 2c 20 lue, "XONXOFF",
1fb0: 76 6c 65 6e 29 20 3d 3d 20 30 29 20 7b 0a 2b 20 vlen) == 0) {.+
1fc0: 09 20 20 20 20 69 6f 73 74 61 74 65 2e 63 5f 69 . iostate.c_i
1fd0: 66 6c 61 67 20 7c 3d 20 28 49 58 4f 4e 20 7c 20 flag |= (IXON |
1fe0: 49 58 4f 46 46 20 7c 20 49 58 41 4e 59 29 3b 0a IXOFF | IXANY);.
1ff0: 2b 20 09 7d 20 65 6c 73 65 20 69 66 20 28 73 74 + .} else if (st
2000: 72 6e 63 61 73 65 63 6d 70 28 76 61 6c 75 65 2c rncasecmp(value,
2010: 20 22 52 54 53 43 54 53 22 2c 20 76 6c 65 6e 29 "RTSCTS", vlen)
2020: 20 3d 3d 20 30 29 20 7b 0a 2b 20 23 69 66 64 65 == 0) {.+ #ifde
2030: 66 20 43 52 54 53 43 54 53 0a 2b 20 09 20 20 20 f CRTSCTS.+ .
2040: 20 69 6f 73 74 61 74 65 2e 63 5f 63 66 6c 61 67 iostate.c_cflag
2050: 20 7c 3d 20 43 52 54 53 43 54 53 3b 0a 2b 20 23 |= CRTSCTS;.+ #
2060: 65 6c 73 65 0a 2b 20 09 20 20 20 20 69 66 20 28 else.+ . if (
2070: 69 6e 74 65 72 70 29 20 7b 0a 2b 20 09 09 54 63 interp) {.+ ..Tc
2080: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 l_AppendResult(i
2090: 6e 74 65 72 70 2c 20 22 2d 68 61 6e 64 73 68 61 nterp, "-handsha
20a0: 6b 65 20 52 54 53 43 54 53 20 22 2c 0a 2b 20 09 ke RTSCTS ",.+ .
20b0: 09 20 20 20 20 22 6e 6f 74 20 73 75 70 70 6f 72 . "not suppor
20c0: 74 65 64 20 66 6f 72 20 74 68 69 73 20 70 6c 61 ted for this pla
20d0: 74 66 6f 72 6d 22 2c 0a 2b 20 09 09 20 20 20 20 tform",.+ ..
20e0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b (char *) NULL);
20f0: 0a 2b 20 09 09 7d 0a 2b 20 09 20 20 20 20 72 65 .+ ..}.+ . re
2100: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
2110: 2b 20 23 65 6e 64 69 66 0a 2b 20 09 7d 20 65 6c + #endif.+ .} el
2120: 73 65 20 69 66 20 28 73 74 72 6e 63 61 73 65 63 se if (strncasec
2130: 6d 70 28 76 61 6c 75 65 2c 20 22 44 54 52 44 53 mp(value, "DTRDS
2140: 52 22 2c 20 76 6c 65 6e 29 20 3d 3d 20 30 29 20 R", vlen) == 0)
2150: 7b 0a 2b 20 09 20 20 20 20 69 66 20 28 69 6e 74 {.+ . if (int
2160: 65 72 70 29 20 7b 0a 2b 20 09 09 54 63 6c 5f 41 erp) {.+ ..Tcl_A
2170: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
2180: 72 70 2c 20 22 2d 68 61 6e 64 73 68 61 6b 65 20 rp, "-handshake
2190: 44 54 52 44 53 52 20 22 2c 0a 2b 20 09 09 20 20 DTRDSR ",.+ ..
21a0: 20 20 22 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 "not supported
21b0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo
21c0: 72 6d 22 2c 0a 2b 20 09 09 20 20 20 20 20 28 63 rm",.+ .. (c
21d0: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 2b 20 har *) NULL);.+
21e0: 09 09 7d 0a 2b 20 09 20 20 20 20 72 65 74 75 72 ..}.+ . retur
21f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 09 n TCL_ERROR;. .
2200: 7d 20 65 6c 73 65 20 7b 0a 21 20 09 20 20 20 20 } else {.! .
2210: 69 66 20 28 69 6e 74 65 72 70 29 20 7b 0a 21 20 if (interp) {.!
2220: 09 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 ..Tcl_AppendResu
2230: 6c 74 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20 lt(interp, "bad
2240: 76 61 6c 75 65 20 66 6f 72 20 2d 68 61 6e 64 73 value for -hands
2250: 68 61 6b 65 3a 20 22 2c 0a 21 20 09 09 20 20 20 hake: ",.! ..
2260: 20 22 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 "must be one of
2270: 20 78 6f 6e 78 6f 66 66 2c 20 72 74 73 63 74 73 xonxoff, rtscts
2280: 2c 20 64 74 72 64 73 72 20 6f 72 20 6e 6f 6e 65 , dtrdsr or none
2290: 22 2c 0a 21 20 09 09 20 20 20 20 28 63 68 61 72 ",.! .. (char
22a0: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 21 20 09 09 72 *) NULL);.! ..r
22b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
22c0: 0a 21 20 09 20 20 20 20 7d 0a 21 20 09 7d 0a 21 .! . }.! .}.!
22d0: 20 09 53 45 54 49 4f 53 54 41 54 45 28 66 73 50 .SETIOSTATE(fsP
22e0: 74 72 2d 3e 66 64 2c 20 26 69 6f 73 74 61 74 65 tr->fd, &iostate
22f0: 29 3b 0a 21 20 09 72 65 74 75 72 6e 20 54 43 4c );.! .return TCL
2300: 5f 4f 4b 3b 0a 21 20 20 20 20 20 7d 0a 21 20 0a _OK;.! }.! .
2310: 21 20 20 20 20 20 2f 2a 0a 21 20 20 20 20 20 20 ! /*.!
2320: 2a 20 4f 70 74 69 6f 6e 20 2d 78 63 68 61 72 20 * Option -xchar
2330: 7b 5c 78 31 31 20 5c 78 31 33 7d 0a 21 20 20 20 {\x11 \x13}.!
2340: 20 20 20 2a 2f 0a 21 20 20 20 20 20 69 66 20 28 */.! if (
2350: 28 6c 65 6e 20 3e 20 31 29 20 26 26 20 28 73 74 (len > 1) && (st
2360: 72 6e 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 rncmp(optionName
2370: 2c 20 22 2d 78 63 68 61 72 22 2c 20 6c 65 6e 29 , "-xchar", len)
2380: 20 3d 3d 20 30 29 29 20 7b 0a 21 20 0a 21 20 09 == 0)) {.! .! .
2390: 47 45 54 49 4f 53 54 41 54 45 28 66 73 50 74 72 GETIOSTATE(fsPtr
23a0: 2d 3e 66 64 2c 20 26 69 6f 73 74 61 74 65 29 3b ->fd, &iostate);
23b0: 0a 21 20 09 69 66 20 28 54 63 6c 5f 53 70 6c 69 .! .if (Tcl_Spli
23c0: 74 4c 69 73 74 28 69 6e 74 65 72 70 2c 20 76 61 tList(interp, va
23d0: 6c 75 65 2c 20 26 61 72 67 63 2c 20 26 61 72 67 lue, &argc, &arg
23e0: 76 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 v) == TCL_ERROR)
23f0: 20 7b 0a 21 20 09 20 20 20 20 72 65 74 75 72 6e {.! . return
2400: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 21 20 09 7d TCL_ERROR;.! .}
2410: 0a 21 20 09 69 66 20 28 61 72 67 63 20 3d 3d 20 .! .if (argc ==
2420: 32 29 20 7b 0a 21 20 09 20 20 20 20 69 6f 73 74 2) {.! . iost
2430: 61 74 65 2e 63 5f 63 63 5b 56 53 54 41 52 54 5d ate.c_cc[VSTART]
2440: 20 3d 20 61 72 67 76 5b 30 5d 5b 30 5d 3b 0a 21 = argv[0][0];.!
2450: 20 09 20 20 20 20 69 6f 73 74 61 74 65 2e 63 5f . iostate.c_
2460: 63 63 5b 56 53 54 4f 50 5d 20 20 3d 20 61 72 67 cc[VSTOP] = arg
2470: 76 5b 31 5d 5b 30 5d 3b 0a 21 20 09 7d 20 65 6c v[1][0];.! .} el
2480: 73 65 20 7b 0a 21 20 09 20 20 20 20 69 66 20 28 se {.! . if (
2490: 69 6e 74 65 72 70 29 20 7b 0a 21 20 09 09 54 63 interp) {.! ..Tc
24a0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 l_AppendResult(i
24b0: 6e 74 65 72 70 2c 0a 21 20 09 09 20 20 20 20 22 nterp,.! .. "
24c0: 62 61 64 20 76 61 6c 75 65 20 66 6f 72 20 2d 78 bad value for -x
24d0: 63 68 61 72 3a 20 73 68 6f 75 6c 64 20 62 65 20 char: should be
24e0: 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c a list of two el
24f0: 65 6d 65 6e 74 73 22 2c 0a 21 20 09 09 20 20 20 ements",.! ..
2500: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b (char *) NULL);
2510: 0a 21 20 09 20 20 20 20 7d 0a 21 20 09 20 20 20 .! . }.! .
2520: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f return TCL_ERRO
2530: 52 3b 0a 20 20 09 7d 0a 2b 20 09 53 45 54 49 4f R;. .}.+ .SETIO
2540: 53 54 41 54 45 28 66 73 50 74 72 2d 3e 66 64 2c STATE(fsPtr->fd,
2550: 20 26 69 6f 73 74 61 74 65 29 3b 0a 2b 20 09 72 &iostate);.+ .r
2560: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 eturn TCL_OK;.+
2570: 20 20 20 20 7d 0a 2b 20 0a 2b 20 20 20 20 20 2f }.+ .+ /
2580: 2a 0a 2b 20 20 20 20 20 2a 20 4f 70 74 69 6f 6e *.+ * Option
2590: 20 2d 74 69 6d 65 6f 75 74 20 6d 73 65 63 0a 2b -timeout msec.+
25a0: 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 20 69 66 */.+ if
25b0: 20 28 28 6c 65 6e 20 3e 20 32 29 20 26 26 20 28 ((len > 2) && (
25c0: 73 74 72 6e 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 strncmp(optionNa
25d0: 6d 65 2c 20 22 2d 74 69 6d 65 6f 75 74 22 2c 20 me, "-timeout",
25e0: 6c 65 6e 29 20 3d 3d 20 30 29 29 20 7b 0a 2b 20 len) == 0)) {.+
25f0: 09 69 6e 74 20 6d 73 65 63 3b 0a 2b 20 0a 2b 20 .int msec;.+ .+
2600: 09 47 45 54 49 4f 53 54 41 54 45 28 66 73 50 74 .GETIOSTATE(fsPt
2610: 72 2d 3e 66 64 2c 20 26 69 6f 73 74 61 74 65 29 r->fd, &iostate)
2620: 3b 0a 2b 20 09 69 66 20 28 20 54 63 6c 5f 47 65 ;.+ .if ( Tcl_Ge
2630: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 76 61 6c tInt(interp, val
2640: 75 65 2c 20 26 6d 73 65 63 29 20 21 3d 20 54 43 ue, &msec) != TC
2650: 4c 5f 4f 4b 20 29 20 7b 0a 2b 20 09 20 20 20 20 L_OK ) {.+ .
2660: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
2670: 3b 0a 2b 20 09 7d 0a 2b 20 09 69 6f 73 74 61 74 ;.+ .}.+ .iostat
2680: 65 2e 63 5f 63 63 5b 56 4d 49 4e 5d 20 20 3d 20 e.c_cc[VMIN] =
2690: 30 3b 0a 2b 20 09 69 6f 73 74 61 74 65 2e 63 5f 0;.+ .iostate.c_
26a0: 63 63 5b 56 54 49 4d 45 5d 20 3d 20 28 6d 73 65 cc[VTIME] = (mse
26b0: 63 20 3d 3d 20 30 29 20 3f 20 30 20 3a 20 28 6d c == 0) ? 0 : (m
26c0: 73 65 63 20 3c 20 31 30 30 29 20 3f 20 31 20 3a sec < 100) ? 1 :
26d0: 20 28 6d 73 65 63 2b 35 30 29 2f 31 30 30 3b 0a (msec+50)/100;.
26e0: 2b 20 09 53 45 54 49 4f 53 54 41 54 45 28 66 73 + .SETIOSTATE(fs
26f0: 50 74 72 2d 3e 66 64 2c 20 26 69 6f 73 74 61 74 Ptr->fd, &iostat
2700: 65 29 3b 0a 2b 20 09 72 65 74 75 72 6e 20 54 43 e);.+ .return TC
2710: 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 20 7d 0a 2b 20 L_OK;.+ }.+
2720: 0a 2b 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 .+ /*.+
2730: 20 2a 20 4f 70 74 69 6f 6e 20 2d 74 74 79 63 6f * Option -ttyco
2740: 6e 74 72 6f 6c 20 7b 44 54 52 20 31 20 52 54 53 ntrol {DTR 1 RTS
2750: 20 30 20 42 52 45 41 4b 20 30 7d 0a 2b 20 20 20 0 BREAK 0}.+
2760: 20 20 20 2a 2f 0a 2b 20 20 20 20 20 69 66 20 28 */.+ if (
2770: 28 6c 65 6e 20 3e 20 34 29 20 26 26 20 28 73 74 (len > 4) && (st
2780: 72 6e 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 rncmp(optionName
2790: 2c 20 22 2d 74 74 79 63 6f 6e 74 72 6f 6c 22 2c , "-ttycontrol",
27a0: 20 6c 65 6e 29 20 3d 3d 20 30 29 29 20 7b 0a 2b len) == 0)) {.+
27b0: 20 0a 2b 20 09 69 66 20 28 54 63 6c 5f 53 70 6c .+ .if (Tcl_Spl
27c0: 69 74 4c 69 73 74 28 69 6e 74 65 72 70 2c 20 76 itList(interp, v
27d0: 61 6c 75 65 2c 20 26 61 72 67 63 2c 20 26 61 72 alue, &argc, &ar
27e0: 67 76 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 gv) == TCL_ERROR
27f0: 29 20 7b 0a 2b 20 09 20 20 20 20 72 65 74 75 72 ) {.+ . retur
2800: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 09 n TCL_ERROR;.+ .
2810: 7d 0a 2b 20 09 69 66 20 28 28 61 72 67 63 20 25 }.+ .if ((argc %
2820: 20 32 29 20 3d 3d 20 31 29 20 7b 0a 2b 20 09 20 2) == 1) {.+ .
2830: 20 20 20 69 66 20 28 69 6e 74 65 72 70 29 20 7b if (interp) {
2840: 0a 2b 20 09 09 54 63 6c 5f 41 70 70 65 6e 64 52 .+ ..Tcl_AppendR
2850: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a 2b 20 esult(interp,.+
2860: 09 09 20 20 20 20 22 62 61 64 20 76 61 6c 75 65 .. "bad value
2870: 20 66 6f 72 20 2d 74 74 79 63 6f 6e 74 72 6f 6c for -ttycontrol
2880: 3a 20 73 68 6f 75 6c 64 20 62 65 20 61 20 6c 69 : should be a li
2890: 73 74 20 6f 66 22 2c 0a 2b 20 09 09 20 20 20 20 st of",.+ ..
28a0: 22 73 69 67 6e 61 6c 2c 76 61 6c 75 65 20 70 61 "signal,value pa
28b0: 69 72 73 22 2c 20 28 63 68 61 72 20 2a 29 20 4e irs", (char *) N
28c0: 55 4c 4c 29 3b 0a 2b 20 09 20 20 20 20 7d 0a 2b ULL);.+ . }.+
28d0: 20 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c . return TCL
28e0: 5f 45 52 52 4f 52 3b 0a 2b 20 09 7d 0a 2b 20 0a _ERROR;.+ .}.+ .
28f0: 2b 20 09 47 45 54 43 4f 4e 54 52 4f 4c 28 66 73 + .GETCONTROL(fs
2900: 50 74 72 2d 3e 66 64 2c 20 26 63 6f 6e 74 72 6f Ptr->fd, &contro
2910: 6c 29 3b 0a 2b 20 09 77 68 69 6c 65 20 28 61 72 l);.+ .while (ar
2920: 67 63 20 3e 20 31 29 20 7b 0a 2b 20 09 20 20 20 gc > 1) {.+ .
2930: 20 69 66 20 28 54 63 6c 5f 47 65 74 42 6f 6f 6c if (Tcl_GetBool
2940: 65 61 6e 28 69 6e 74 65 72 70 2c 20 61 72 67 76 ean(interp, argv
2950: 5b 31 5d 2c 20 26 66 6c 61 67 29 20 3d 3d 20 54 [1], &flag) == T
2960: 43 4c 5f 45 52 52 4f 52 29 20 7b 0a 2b 20 09 09 CL_ERROR) {.+ ..
2970: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
2980: 3b 0a 2b 20 09 20 20 20 20 7d 0a 2b 20 09 20 20 ;.+ . }.+ .
2990: 20 20 69 66 20 28 73 74 72 6e 63 61 73 65 63 6d if (strncasecm
29a0: 70 28 61 72 67 76 5b 30 5d 2c 20 22 44 54 52 22 p(argv[0], "DTR"
29b0: 2c 20 73 74 72 6c 65 6e 28 61 72 67 76 5b 30 5d , strlen(argv[0]
29c0: 29 29 20 3d 3d 20 30 29 20 7b 0a 2b 20 23 69 66 )) == 0) {.+ #if
29d0: 64 65 66 20 54 49 4f 43 4d 5f 44 54 52 0a 2b 20 def TIOCM_DTR.+
29e0: 09 09 69 66 20 28 66 6c 61 67 20 29 20 7b 0a 2b ..if (flag ) {.+
29f0: 20 09 09 20 20 20 20 63 6f 6e 74 72 6f 6c 20 7c .. control |
2a00: 3d 20 54 49 4f 43 4d 5f 44 54 52 3b 0a 2b 20 09 = TIOCM_DTR;.+ .
2a10: 09 7d 20 65 6c 73 65 20 7b 0a 2b 20 09 09 20 20 .} else {.+ ..
2a20: 20 20 63 6f 6e 74 72 6f 6c 20 26 3d 20 7e 54 49 control &= ~TI
2a30: 4f 43 4d 5f 44 54 52 3b 0a 2b 20 09 09 7d 0a 2b OCM_DTR;.+ ..}.+
2a40: 20 23 65 6c 73 65 0a 2b 20 09 09 69 66 20 28 69 #else.+ ..if (i
2a50: 6e 74 65 72 70 29 20 7b 0a 2b 20 09 09 20 20 20 nterp) {.+ ..
2a60: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c Tcl_AppendResul
2a70: 74 28 69 6e 74 65 72 70 2c 20 22 2d 74 74 79 63 t(interp, "-ttyc
2a80: 6f 6e 74 72 6f 6c 20 44 54 52 20 22 2c 0a 2b 20 ontrol DTR ",.+
2a90: 09 09 09 22 6e 6f 74 20 73 75 70 70 6f 72 74 65 ..."not supporte
2aa0: 64 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 d for this platf
2ab0: 6f 72 6d 22 2c 0a 2b 20 09 09 09 28 63 68 61 72 orm",.+ ...(char
2ac0: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 2b 20 09 09 7d *) NULL);.+ ..}
2ad0: 0a 2b 20 09 09 72 65 74 75 72 6e 20 54 43 4c 5f .+ ..return TCL_
2ae0: 45 52 52 4f 52 3b 0a 2b 20 23 65 6e 64 69 66 0a ERROR;.+ #endif.
2af0: 2b 20 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 + . } else if
2b00: 20 28 73 74 72 6e 63 61 73 65 63 6d 70 28 61 72 (strncasecmp(ar
2b10: 67 76 5b 30 5d 2c 20 22 52 54 53 22 2c 20 73 74 gv[0], "RTS", st
2b20: 72 6c 65 6e 28 61 72 67 76 5b 30 5d 29 29 20 3d rlen(argv[0])) =
2b30: 3d 20 30 29 20 7b 0a 2b 20 23 69 66 64 65 66 20 = 0) {.+ #ifdef
2b40: 54 49 4f 43 4d 5f 52 54 53 0a 2b 20 09 09 69 66 TIOCM_RTS.+ ..if
2b50: 20 28 66 6c 61 67 20 29 20 7b 0a 2b 20 09 09 20 (flag ) {.+ ..
2b60: 20 20 20 63 6f 6e 74 72 6f 6c 20 7c 3d 20 54 49 control |= TI
2b70: 4f 43 4d 5f 52 54 53 3b 0a 2b 20 09 09 7d 20 65 OCM_RTS;.+ ..} e
2b80: 6c 73 65 20 7b 0a 2b 20 09 09 20 20 20 20 63 6f lse {.+ .. co
2b90: 6e 74 72 6f 6c 20 26 3d 20 7e 54 49 4f 43 4d 5f ntrol &= ~TIOCM_
2ba0: 52 54 53 3b 0a 2b 20 09 09 7d 0a 2b 20 23 65 6c RTS;.+ ..}.+ #el
2bb0: 73 65 0a 2b 20 09 09 69 66 20 28 69 6e 74 65 72 se.+ ..if (inter
2bc0: 70 29 20 7b 0a 2b 20 09 09 20 20 20 20 54 63 6c p) {.+ .. Tcl
2bd0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
2be0: 74 65 72 70 2c 20 22 2d 74 74 79 63 6f 6e 74 72 terp, "-ttycontr
2bf0: 6f 6c 20 52 54 53 20 22 2c 0a 2b 20 09 09 09 22 ol RTS ",.+ ..."
2c00: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f not supported fo
2c10: 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 22 r this platform"
2c20: 2c 0a 2b 20 09 09 09 28 63 68 61 72 20 2a 29 20 ,.+ ...(char *)
2c30: 4e 55 4c 4c 29 3b 0a 2b 20 09 09 7d 0a 2b 20 09 NULL);.+ ..}.+ .
2c40: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f .return TCL_ERRO
2c50: 52 3b 0a 2b 20 23 65 6e 64 69 66 0a 2b 20 09 20 R;.+ #endif.+ .
2c60: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73 74 } else if (st
2c70: 72 6e 63 61 73 65 63 6d 70 28 61 72 67 76 5b 30 rncasecmp(argv[0
2c80: 5d 2c 20 22 42 52 45 41 4b 22 2c 20 73 74 72 6c ], "BREAK", strl
2c90: 65 6e 28 61 72 67 76 5b 30 5d 29 29 20 3d 3d 20 en(argv[0])) ==
2ca0: 30 29 20 7b 0a 2b 20 23 69 66 64 65 66 20 53 45 0) {.+ #ifdef SE
2cb0: 54 42 52 45 41 4b 0a 2b 20 09 09 53 45 54 42 52 TBREAK.+ ..SETBR
2cc0: 45 41 4b 28 66 73 50 74 72 2d 3e 66 64 2c 20 66 EAK(fsPtr->fd, f
2cd0: 6c 61 67 29 3b 0a 2b 20 23 65 6c 73 65 0a 2b 20 lag);.+ #else.+
2ce0: 09 09 69 66 20 28 69 6e 74 65 72 70 29 20 7b 0a ..if (interp) {.
2cf0: 2b 20 09 09 20 20 20 20 54 63 6c 5f 41 70 70 65 + .. Tcl_Appe
2d00: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c ndResult(interp,
2d10: 20 22 2d 74 74 79 63 6f 6e 74 72 6f 6c 20 42 52 "-ttycontrol BR
2d20: 45 41 4b 20 22 2c 0a 2b 20 09 09 09 22 6e 6f 74 EAK ",.+ ..."not
2d30: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 74 supported for t
2d40: 68 69 73 20 70 6c 61 74 66 6f 72 6d 22 2c 0a 2b his platform",.+
2d50: 20 09 09 09 28 63 68 61 72 20 2a 29 20 4e 55 4c ...(char *) NUL
2d60: 4c 29 3b 0a 2b 20 09 09 7d 0a 2b 20 09 09 72 65 L);.+ ..}.+ ..re
2d70: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
2d80: 2b 20 23 65 6e 64 69 66 0a 2b 20 09 20 20 20 20 + #endif.+ .
2d90: 7d 20 65 6c 73 65 20 7b 0a 2b 20 09 09 69 66 20 } else {.+ ..if
2da0: 28 69 6e 74 65 72 70 29 20 7b 0a 2b 20 09 09 20 (interp) {.+ ..
2db0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 Tcl_AppendRes
2dc0: 75 6c 74 28 69 6e 74 65 72 70 2c 0a 2b 20 09 09 ult(interp,.+ ..
2dd0: 09 22 62 61 64 20 73 69 67 6e 61 6c 20 66 6f 72 ."bad signal for
2de0: 20 2d 74 74 79 63 6f 6e 74 72 6f 6c 3a 20 6d 75 -ttycontrol: mu
2df0: 73 74 20 62 65 20 22 2c 0a 2b 20 09 09 09 22 44 st be ",.+ ..."D
2e00: 54 52 2c 20 52 54 53 20 6f 72 20 42 52 45 41 4b TR, RTS or BREAK
2e10: 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c ", (char *) NULL
2e20: 29 3b 0a 2b 20 09 09 7d 0a 2b 20 09 09 72 65 74 );.+ ..}.+ ..ret
2e30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b urn TCL_ERROR;.+
2e40: 20 09 20 20 20 20 7d 0a 2b 20 09 20 20 20 20 61 . }.+ . a
2e50: 72 67 63 20 2d 3d 20 32 2c 20 61 72 67 76 20 2b rgc -= 2, argv +
2e60: 3d 20 32 3b 0a 2b 20 09 7d 20 2f 2a 20 77 68 69 = 2;.+ .} /* whi
2e70: 6c 65 20 28 61 72 67 63 20 3e 20 31 29 20 2a 2f le (argc > 1) */
2e80: 0a 2b 20 0a 2b 20 09 53 45 54 43 4f 4e 54 52 4f .+ .+ .SETCONTRO
2e90: 4c 28 66 73 50 74 72 2d 3e 66 64 2c 20 26 63 6f L(fsPtr->fd, &co
2ea0: 6e 74 72 6f 6c 29 3b 0a 2b 20 09 72 65 74 75 72 ntrol);.+ .retur
2eb0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 20 n TCL_OK;.+
2ec0: 20 7d 0a 2b 20 0a 2b 20 20 20 20 20 72 65 74 75 }.+ .+ retu
2ed0: 72 6e 20 54 63 6c 5f 42 61 64 43 68 61 6e 6e 65 rn Tcl_BadChanne
2ee0: 6c 4f 70 74 69 6f 6e 28 69 6e 74 65 72 70 2c 20 lOption(interp,
2ef0: 6f 70 74 69 6f 6e 4e 61 6d 65 2c 0a 2b 20 09 22 optionName,.+ ."
2f00: 6d 6f 64 65 20 68 61 6e 64 73 68 61 6b 65 20 74 mode handshake t
2f10: 69 6d 65 6f 75 74 20 74 74 79 63 6f 6e 74 72 6f imeout ttycontro
2f20: 6c 20 78 63 68 61 72 20 22 29 3b 0a 2b 20 0a 2b l xchar ");.+ .+
2f30: 20 23 65 6c 73 65 20 20 20 20 2f 2a 20 6e 6f 74 #else /* not
2f40: 20 55 53 45 5f 54 45 52 4d 49 4f 53 20 2a 2f 0a USE_TERMIOS */.
2f50: 2b 20 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c + return Tcl
2f60: 5f 42 61 64 43 68 61 6e 6e 65 6c 4f 70 74 69 6f _BadChannelOptio
2f70: 6e 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e n(interp, option
2f80: 4e 61 6d 65 2c 20 22 6d 6f 64 65 22 29 3b 0a 2b Name, "mode");.+
2f90: 20 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 0a 20 #endif. }. .
2fa0: 20 2f 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a /*.************
2fb0: 2a 2a 2a 0a 2a 2a 2a 20 37 33 30 2c 37 35 30 20 ***.*** 730,750
2fc0: 2a 2a 2a 2a 0a 20 20 20 20 20 20 75 6e 73 69 67 ****. unsig
2fd0: 6e 65 64 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 ned int len;.
2fe0: 20 20 20 63 68 61 72 20 62 75 66 5b 33 20 2a 20 char buf[3 *
2ff0: 54 43 4c 5f 49 4e 54 45 47 45 52 5f 53 50 41 43 TCL_INTEGER_SPAC
3000: 45 20 2b 20 31 36 5d 3b 0a 20 20 20 20 20 20 54 E + 16];. T
3010: 74 79 41 74 74 72 73 20 74 74 79 3b 0a 20 20 0a tyAttrs tty;. .
3020: 20 20 20 20 20 20 69 66 20 28 6f 70 74 69 6f 6e if (option
3030: 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a Name == NULL) {.
3040: 2d 20 09 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 - .Tcl_DStringAp
3050: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 64 73 50 74 pendElement(dsPt
3060: 72 2c 20 22 2d 6d 6f 64 65 22 29 3b 0a 20 20 09 r, "-mode");. .
3070: 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d len = 0;. }
3080: 20 65 6c 73 65 20 7b 0a 20 20 09 6c 65 6e 20 3d else {. .len =
3090: 20 73 74 72 6c 65 6e 28 6f 70 74 69 6f 6e 4e 61 strlen(optionNa
30a0: 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 me);. }.
30b0: 20 20 20 69 66 20 28 28 6c 65 6e 20 3d 3d 20 30 if ((len == 0
30c0: 29 20 7c 7c 20 0a 21 20 09 20 20 20 20 28 28 6c ) || .! . ((l
30d0: 65 6e 20 3e 20 31 29 20 26 26 20 28 73 74 72 6e en > 1) && (strn
30e0: 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 2c 20 cmp(optionName,
30f0: 22 2d 6d 6f 64 65 22 2c 20 6c 65 6e 29 20 3d 3d "-mode", len) ==
3100: 20 30 29 29 29 20 7b 0a 20 20 09 54 74 79 47 65 0))) {. .TtyGe
3110: 74 41 74 74 72 69 62 75 74 65 73 28 66 73 50 74 tAttributes(fsPt
3120: 72 2d 3e 66 64 2c 20 26 74 74 79 29 3b 0a 20 20 r->fd, &tty);.
3130: 09 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 25 .sprintf(buf, "%
3140: 64 2c 25 63 2c 25 64 2c 25 64 22 2c 20 74 74 79 d,%c,%d,%d", tty
3150: 2e 62 61 75 64 2c 20 74 74 79 2e 70 61 72 69 74 .baud, tty.parit
3160: 79 2c 20 74 74 79 2e 64 61 74 61 2c 20 74 74 79 y, tty.data, tty
3170: 2e 73 74 6f 70 29 3b 0a 20 20 09 54 63 6c 5f 44 .stop);. .Tcl_D
3180: 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d StringAppendElem
3190: 65 6e 74 28 64 73 50 74 72 2c 20 62 75 66 29 3b ent(dsPtr, buf);
31a0: 0a 20 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f . .return TCL_O
31b0: 4b 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 K;. } else
31c0: 7b 0a 21 20 09 72 65 74 75 72 6e 20 54 63 6c 5f {.! .return Tcl_
31d0: 42 61 64 43 68 61 6e 6e 65 6c 4f 70 74 69 6f 6e BadChannelOption
31e0: 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e 4e (interp, optionN
31f0: 61 6d 65 2c 20 22 6d 6f 64 65 22 29 3b 0a 20 20 ame, "mode");.
3200: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 0c 0a 2d 2d }. }. ..--
3210: 2d 20 31 30 31 35 2c 31 31 30 38 20 2d 2d 2d 2d - 1015,1108 ----
3220: 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 . unsigned
3230: 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20 20 20 63 int len;. c
3240: 68 61 72 20 62 75 66 5b 33 20 2a 20 54 43 4c 5f har buf[3 * TCL_
3250: 49 4e 54 45 47 45 52 5f 53 50 41 43 45 20 2b 20 INTEGER_SPACE +
3260: 31 36 5d 3b 0a 20 20 20 20 20 20 54 74 79 41 74 16];. TtyAt
3270: 74 72 73 20 74 74 79 3b 0a 2b 20 20 20 20 20 69 trs tty;.+ i
3280: 6e 74 20 76 61 6c 69 64 20 3d 20 30 3b 20 20 2f nt valid = 0; /
3290: 2a 20 66 6c 61 67 20 69 66 20 76 61 6c 69 64 20 * flag if valid
32a0: 6f 70 74 69 6f 6e 20 70 61 72 73 65 64 20 2a 2f option parsed */
32b0: 0a 20 20 0a 20 20 20 20 20 20 69 66 20 28 6f 70 . . if (op
32c0: 74 69 6f 6e 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c tionName == NULL
32d0: 29 20 7b 0a 20 20 09 6c 65 6e 20 3d 20 30 3b 0a ) {. .len = 0;.
32e0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 } else {.
32f0: 20 09 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 6f .len = strlen(o
3300: 70 74 69 6f 6e 4e 61 6d 65 29 3b 0a 20 20 20 20 ptionName);.
3310: 20 20 7d 0a 2b 20 20 20 20 20 69 66 20 28 6c 65 }.+ if (le
3320: 6e 20 3d 3d 20 30 29 20 7b 0a 2b 20 09 54 63 6c n == 0) {.+ .Tcl
3330: 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c _DStringAppendEl
3340: 65 6d 65 6e 74 28 64 73 50 74 72 2c 20 22 2d 6d ement(dsPtr, "-m
3350: 6f 64 65 22 29 3b 0a 2b 20 20 20 20 20 7d 0a 20 ode");.+ }.
3360: 20 20 20 20 20 69 66 20 28 28 6c 65 6e 20 3d 3d if ((len ==
3370: 20 30 29 20 7c 7c 20 0a 21 20 09 20 20 20 20 28 0) || .! . (
3380: 28 6c 65 6e 20 3e 20 32 29 20 26 26 20 28 73 74 (len > 2) && (st
3390: 72 6e 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 rncmp(optionName
33a0: 2c 20 22 2d 6d 6f 64 65 22 2c 20 6c 65 6e 29 20 , "-mode", len)
33b0: 3d 3d 20 30 29 29 29 20 7b 0a 21 20 09 76 61 6c == 0))) {.! .val
33c0: 69 64 20 3d 20 31 3b 0a 20 20 09 54 74 79 47 65 id = 1;. .TtyGe
33d0: 74 41 74 74 72 69 62 75 74 65 73 28 66 73 50 74 tAttributes(fsPt
33e0: 72 2d 3e 66 64 2c 20 26 74 74 79 29 3b 0a 20 20 r->fd, &tty);.
33f0: 09 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 25 .sprintf(buf, "%
3400: 64 2c 25 63 2c 25 64 2c 25 64 22 2c 20 74 74 79 d,%c,%d,%d", tty
3410: 2e 62 61 75 64 2c 20 74 74 79 2e 70 61 72 69 74 .baud, tty.parit
3420: 79 2c 20 74 74 79 2e 64 61 74 61 2c 20 74 74 79 y, tty.data, tty
3430: 2e 73 74 6f 70 29 3b 0a 20 20 09 54 63 6c 5f 44 .stop);. .Tcl_D
3440: 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d StringAppendElem
3450: 65 6e 74 28 64 73 50 74 72 2c 20 62 75 66 29 3b ent(dsPtr, buf);
3460: 0a 2b 20 20 20 20 20 7d 0a 2b 20 0a 2b 20 23 69 .+ }.+ .+ #i
3470: 66 64 65 66 20 55 53 45 5f 54 45 52 4d 49 4f 53 fdef USE_TERMIOS
3480: 0a 2b 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 .+ /*.+
3490: 20 2a 20 67 65 74 20 6f 70 74 69 6f 6e 20 2d 78 * get option -x
34a0: 63 68 61 72 0a 2b 20 20 20 20 20 20 2a 2f 0a 2b char.+ */.+
34b0: 20 20 20 20 20 69 66 20 28 6c 65 6e 20 3d 3d 20 if (len ==
34c0: 30 29 20 7b 0a 2b 20 09 54 63 6c 5f 44 53 74 72 0) {.+ .Tcl_DStr
34d0: 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 ingAppendElement
34e0: 28 64 73 50 74 72 2c 20 22 2d 78 63 68 61 72 22 (dsPtr, "-xchar"
34f0: 29 3b 0a 2b 20 09 54 63 6c 5f 44 53 74 72 69 6e );.+ .Tcl_DStrin
3500: 67 53 74 61 72 74 53 75 62 6c 69 73 74 28 64 73 gStartSublist(ds
3510: 50 74 72 29 3b 0a 2b 20 20 20 20 20 7d 0a 2b 20 Ptr);.+ }.+
3520: 20 20 20 20 69 66 20 28 28 6c 65 6e 20 3d 3d 20 if ((len ==
3530: 30 29 20 7c 7c 0a 2b 20 09 20 20 20 20 28 28 6c 0) ||.+ . ((l
3540: 65 6e 20 3e 20 31 29 20 26 26 20 28 73 74 72 6e en > 1) && (strn
3550: 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 2c 20 cmp(optionName,
3560: 22 2d 78 63 68 61 72 22 2c 20 6c 65 6e 29 20 3d "-xchar", len) =
3570: 3d 20 30 29 29 29 20 7b 0a 2b 20 0a 2b 20 09 49 = 0))) {.+ .+ .I
3580: 4f 53 54 41 54 45 20 69 6f 73 74 61 74 65 3b 0a OSTATE iostate;.
3590: 2b 20 09 76 61 6c 69 64 20 3d 20 31 3b 0a 2b 20 + .valid = 1;.+
35a0: 0a 2b 20 09 47 45 54 49 4f 53 54 41 54 45 28 66 .+ .GETIOSTATE(f
35b0: 73 50 74 72 2d 3e 66 64 2c 20 26 69 6f 73 74 61 sPtr->fd, &iosta
35c0: 74 65 29 3b 0a 2b 20 09 73 70 72 69 6e 74 66 28 te);.+ .sprintf(
35d0: 62 75 66 2c 20 22 25 63 22 2c 20 69 6f 73 74 61 buf, "%c", iosta
35e0: 74 65 2e 63 5f 63 63 5b 56 53 54 41 52 54 5d 29 te.c_cc[VSTART])
35f0: 3b 0a 2b 20 09 54 63 6c 5f 44 53 74 72 69 6e 67 ;.+ .Tcl_DString
3600: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 64 73 AppendElement(ds
3610: 50 74 72 2c 20 62 75 66 29 3b 0a 2b 20 09 73 70 Ptr, buf);.+ .sp
3620: 72 69 6e 74 66 28 62 75 66 2c 20 22 25 63 22 2c rintf(buf, "%c",
3630: 20 69 6f 73 74 61 74 65 2e 63 5f 63 63 5b 56 53 iostate.c_cc[VS
3640: 54 4f 50 5d 29 3b 0a 2b 20 09 54 63 6c 5f 44 53 TOP]);.+ .Tcl_DS
3650: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 tringAppendEleme
3660: 6e 74 28 64 73 50 74 72 2c 20 62 75 66 29 3b 0a nt(dsPtr, buf);.
3670: 2b 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 69 66 + }.+ if
3680: 20 28 6c 65 6e 20 3d 3d 20 30 29 20 7b 0a 2b 20 (len == 0) {.+
3690: 09 54 63 6c 5f 44 53 74 72 69 6e 67 45 6e 64 53 .Tcl_DStringEndS
36a0: 75 62 6c 69 73 74 28 64 73 50 74 72 29 3b 0a 2b ublist(dsPtr);.+
36b0: 20 20 20 20 20 7d 0a 2b 20 0a 2b 20 20 20 20 20 }.+ .+
36c0: 2f 2a 0a 2b 20 20 20 20 20 20 2a 20 67 65 74 20 /*.+ * get
36d0: 6f 70 74 69 6f 6e 20 2d 71 75 65 75 65 0a 2b 20 option -queue.+
36e0: 20 20 20 20 20 2a 20 6f 70 74 69 6f 6e 20 69 73 * option is
36f0: 20 72 65 61 64 6f 6e 6c 79 20 61 6e 64 20 72 65 readonly and re
3700: 74 75 72 6e 65 64 20 62 79 20 5b 66 63 6f 6e 66 turned by [fconf
3710: 69 67 75 72 65 20 63 68 61 6e 20 2d 71 75 65 75 igure chan -queu
3720: 65 5d 0a 2b 20 20 20 20 20 20 2a 20 62 75 74 20 e].+ * but
3730: 6e 6f 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 not returned by
3740: 75 6e 6e 61 6d 65 64 20 5b 66 63 6f 6e 66 69 67 unnamed [fconfig
3750: 75 72 65 20 63 68 61 6e 5d 0a 2b 20 20 20 20 20 ure chan].+
3760: 20 2a 2f 0a 2b 20 20 20 20 20 69 66 20 28 20 28 */.+ if ( (
3770: 6c 65 6e 20 3e 20 31 29 20 26 26 20 28 73 74 72 len > 1) && (str
3780: 6e 63 6d 70 28 6f 70 74 69 6f 6e 4e 61 6d 65 2c ncmp(optionName,
3790: 20 22 2d 71 75 65 75 65 22 2c 20 6c 65 6e 29 20 "-queue", len)
37a0: 3d 3d 20 30 29 20 29 20 7b 0a 2b 20 09 69 6e 74 == 0) ) {.+ .int
37b0: 20 69 6e 51 75 65 75 65 3d 30 2c 20 6f 75 74 51 inQueue=0, outQ
37c0: 75 65 75 65 3d 30 3b 0a 2b 20 09 69 6e 74 20 69 ueue=0;.+ .int i
37d0: 6e 42 75 66 66 65 72 65 64 2c 20 6f 75 74 42 75 nBuffered, outBu
37e0: 66 66 65 72 65 64 3b 0a 2b 20 20 20 20 20 20 20 ffered;.+
37f0: 20 20 76 61 6c 69 64 20 3d 20 31 3b 0a 2b 20 23 valid = 1;.+ #
3800: 69 66 64 65 66 20 47 45 54 52 45 41 44 51 55 45 ifdef GETREADQUE
3810: 55 45 0a 2b 20 09 47 45 54 52 45 41 44 51 55 45 UE.+ .GETREADQUE
3820: 55 45 28 66 73 50 74 72 2d 3e 66 64 2c 20 69 6e UE(fsPtr->fd, in
3830: 51 75 65 75 65 29 3b 0a 2b 20 23 65 6e 64 69 66 Queue);.+ #endif
3840: 0a 2b 20 23 69 66 64 65 66 20 47 45 54 57 52 49 .+ #ifdef GETWRI
3850: 54 45 51 55 45 55 45 0a 2b 20 09 47 45 54 57 52 TEQUEUE.+ .GETWR
3860: 49 54 45 51 55 45 55 45 28 66 73 50 74 72 2d 3e ITEQUEUE(fsPtr->
3870: 66 64 2c 20 6f 75 74 51 75 65 75 65 29 3b 0a 2b fd, outQueue);.+
3880: 20 23 65 6e 64 69 66 0a 2b 20 09 69 6e 42 75 66 #endif.+ .inBuf
3890: 66 65 72 65 64 20 20 3d 20 54 63 6c 5f 49 6e 70 fered = Tcl_Inp
38a0: 75 74 42 75 66 66 65 72 65 64 28 66 73 50 74 72 utBuffered(fsPtr
38b0: 2d 3e 63 68 61 6e 6e 65 6c 29 3b 0a 2b 20 09 6f ->channel);.+ .o
38c0: 75 74 42 75 66 66 65 72 65 64 20 3d 20 54 63 6c utBuffered = Tcl
38d0: 5f 4f 75 74 70 75 74 42 75 66 66 65 72 65 64 28 _OutputBuffered(
38e0: 66 73 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 29 3b fsPtr->channel);
38f0: 0a 2b 20 0a 2b 20 09 73 70 72 69 6e 74 66 28 62 .+ .+ .sprintf(b
3900: 75 66 2c 20 22 25 64 22 2c 20 69 6e 42 75 66 66 uf, "%d", inBuff
3910: 65 72 65 64 2b 69 6e 51 75 65 75 65 29 3b 0a 2b ered+inQueue);.+
3920: 20 09 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 .Tcl_DStringApp
3930: 65 6e 64 45 6c 65 6d 65 6e 74 28 64 73 50 74 72 endElement(dsPtr
3940: 2c 20 62 75 66 29 3b 0a 2b 20 09 73 70 72 69 6e , buf);.+ .sprin
3950: 74 66 28 62 75 66 2c 20 22 25 64 22 2c 20 6f 75 tf(buf, "%d", ou
3960: 74 42 75 66 66 65 72 65 64 2b 6f 75 74 51 75 65 tBuffered+outQue
3970: 75 65 29 3b 0a 2b 20 09 54 63 6c 5f 44 53 74 72 ue);.+ .Tcl_DStr
3980: 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 ingAppendElement
3990: 28 64 73 50 74 72 2c 20 62 75 66 29 3b 0a 2b 20 (dsPtr, buf);.+
39a0: 20 20 20 20 7d 0a 2b 20 0a 2b 20 20 20 20 20 2f }.+ .+ /
39b0: 2a 0a 2b 20 20 20 20 20 20 2a 20 67 65 74 20 6f *.+ * get o
39c0: 70 74 69 6f 6e 20 2d 74 74 79 73 74 61 74 75 73 ption -ttystatus
39d0: 0a 2b 20 20 20 20 20 20 2a 20 6f 70 74 69 6f 6e .+ * option
39e0: 20 69 73 20 72 65 61 64 6f 6e 6c 79 20 61 6e 64 is readonly and
39f0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 66 63 returned by [fc
3a00: 6f 6e 66 69 67 75 72 65 20 63 68 61 6e 20 2d 74 onfigure chan -t
3a10: 74 79 73 74 61 74 75 73 5d 0a 2b 20 20 20 20 20 tystatus].+
3a20: 20 2a 20 62 75 74 20 6e 6f 74 20 72 65 74 75 72 * but not retur
3a30: 6e 65 64 20 62 79 20 75 6e 6e 61 6d 65 64 20 5b ned by unnamed [
3a40: 66 63 6f 6e 66 69 67 75 72 65 20 63 68 61 6e 5d fconfigure chan]
3a50: 0a 2b 20 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 .+ */.+
3a60: 20 69 66 20 28 20 28 6c 65 6e 20 3e 20 34 29 20 if ( (len > 4)
3a70: 26 26 20 28 73 74 72 6e 63 6d 70 28 6f 70 74 69 && (strncmp(opti
3a80: 6f 6e 4e 61 6d 65 2c 20 22 2d 74 74 79 73 74 61 onName, "-ttysta
3a90: 74 75 73 22 2c 20 6c 65 6e 29 20 3d 3d 20 30 29 tus", len) == 0)
3aa0: 20 29 20 7b 0a 2b 20 09 69 6e 74 20 73 74 61 74 ) {.+ .int stat
3ab0: 75 73 3b 0a 2b 20 09 76 61 6c 69 64 20 3d 20 31 us;.+ .valid = 1
3ac0: 3b 0a 2b 20 09 47 45 54 43 4f 4e 54 52 4f 4c 28 ;.+ .GETCONTROL(
3ad0: 66 73 50 74 72 2d 3e 66 64 2c 20 26 73 74 61 74 fsPtr->fd, &stat
3ae0: 75 73 29 3b 0a 2b 20 09 54 74 79 4d 6f 64 65 6d us);.+ .TtyModem
3af0: 53 74 61 74 75 73 53 74 72 28 73 74 61 74 75 73 StatusStr(status
3b00: 2c 20 64 73 50 74 72 29 3b 0a 2b 20 20 20 20 20 , dsPtr);.+
3b10: 7d 0a 2b 20 23 65 6e 64 69 66 0a 2b 20 0a 2b 20 }.+ #endif.+ .+
3b20: 20 20 20 20 69 66 20 28 76 61 6c 69 64 29 20 7b if (valid) {
3b30: 0a 20 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f . .return TCL_O
3b40: 4b 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 K;. } else
3b50: 7b 0a 21 20 09 72 65 74 75 72 6e 20 54 63 6c 5f {.! .return Tcl_
3b60: 42 61 64 43 68 61 6e 6e 65 6c 4f 70 74 69 6f 6e BadChannelOption
3b70: 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e 4e (interp, optionN
3b80: 61 6d 65 2c 0a 21 20 23 69 66 64 65 66 20 55 53 ame,.! #ifdef US
3b90: 45 5f 54 45 52 4d 49 4f 53 0a 21 20 09 20 20 20 E_TERMIOS.! .
3ba0: 20 22 6d 6f 64 65 20 71 75 65 75 65 20 74 74 79 "mode queue tty
3bb0: 73 74 61 74 75 73 20 78 63 68 61 72 22 29 3b 0a status xchar");.
3bc0: 21 20 23 65 6c 73 65 0a 21 20 09 20 20 20 20 22 ! #else.! . "
3bd0: 6d 6f 64 65 22 29 3b 0a 21 20 23 65 6e 64 69 66 mode");.! #endif
3be0: 0a 20 20 20 20 20 20 7d 0a 20 20 7d 0a 20 20 0a . }. }. .