From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27979 invoked from network); 22 Oct 1999 07:00:29 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 22 Oct 1999 07:00:29 -0000 Received: (qmail 28509 invoked by alias); 22 Oct 1999 06:52:17 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 8368 Received: (qmail 13178 invoked from network); 21 Oct 1999 22:06:53 -0000 Message-Id: <199910212206.RAA05701@wo1203.cmg.FCNBD.COM> Content-Type: text/plain MIME-Version: 1.0 (NeXT Mail 4.2mach v148) In-Reply-To: <991021211235.ZM14963@candle.brasslantern.com> X-Nextstep-Mailer: Mail 4.2mach (Enhance 2.0b5) From: Brian Boonstra Date: Thu, 21 Oct 99 17:06:18 -0500 To: "Bart Schaefer" Subject: Re: BUG: doinsert() in NextStep/OpenStep 4.2 cc: zsh-workers@sunsite.auc.dk References: <199910211531.KAA17425@wo1203.cmg.FCNBD.COM> <991021175506.ZM14852@candle.brasslantern.com> <199910211928.OAA22771@wo1203.cmg.FCNBD.COM> <991021211235.ZM14963@candle.brasslantern.com> You wrote: > > I have to say that I can't see why this line is failing. Since zshcs==0, > > and *s!=Meta, this should just be setting line[0]="l" with no problem. Is > > there something unusual I misunderstand about attaching debuggers to > > shells? > > Not that I can see ... but it may be that the debugger is confused. Do you > get a crash at that point when running without the debugger attached? Yes, I did. But only on the config with --enable-zsh-debug. When I config normally, I get a hang after a command has finished, like this: wo1203 % Src/zsh +Z wo1203 % ls ChangeLog INSTALL StartupFiles/ config.h install-sh* ChangeLog.3.0 META-FAQ Util/ config.h.in mkinstalldirs* Completion/ Makefile acconfig.h config.log stamp-h Config/ Makefile.in aclocal.m4 config.status* stamp-h.in Doc/ Misc/ aczsh.m4 config.sub* Etc/ README config.cache configure* Functions/ Src/ config.guess* configure.in ** hung here (killed from another terminal window) > > [problem with remaining in mini-editor in 3.0.7] > That indicates that your RETURN key is not sending the > character that zsh has bound to the ZLE accept-line > action. Zsh is supposed to map both CR and LF to the > same thing on input so that this does not happen. What > if you type Ctrl-J or Ctrl-M explicitly? It still stays in the mini-editor -- never getting the accept-line, I guess. Is it possible zsh isn't binding any such character? > If one of those works, what is the output you get from > "stty -a" ? Neither worked, but I ran "stty all" in each. For both 3.0.7 and bart-7 I got: wo1203 % stty all /Cache/zsh/zsh-3.1.6-bart-7 new tty, speed 38400 baud, 55 rows, 94 columns; -tabs crt pass8 pass8out erase kill werase rprnt flush lnext susp intr quit stop eof ^? ^U ^W ^R ^O ^V ^Z/^Y ^C ^\ ^S/^Q ^D > It may be that zsh is selecting the wrong > terminal-manipulation package. grep TERM config.h > might tell something. wo1203 % grep TERM config.h /Cache/zsh/zsh-3.1.6-bart-7 /* #undef HAVE_TERMCAP_H */ /* #undef HAVE_TERMIO_H */ #define HAVE_TERMIOS_H 1 I took a look at that header, and there was some NeXT-specific stuff in it (according to whether _NEXT_SOURCE is set) that--for all I know--is causing the problem. I've included it below. I tried a new build of bart-7 having added -D_NEXT_SOURCE to the compiler flags, but got the same hanging behavior: wo1203 % ls /Cache/zsh/zsh-3.1.6-bart-7 ChangeLog INSTALL StartupFiles/ config.h install-sh* ChangeLog.3.0 META-FAQ Util/ config.h.in mkinstalldirs* Completion/ Makefile acconfig.h config.log stamp-h Config/ Makefile.in aclocal.m4 config.status* stamp-h.in Doc/ Misc/ aczsh.m4 config.sub* Etc/ README config.cache configure* Functions/ Src/ config.guess* configure.in ** (hung here) > You should try running both bart-7 and 3.0.7 as "zsh +Z" > to turn off the line editor, to see if the problems are > related to terminal handling. They must be, at least in the case of 3.0.7. When I ran 3.0.7 as "zsh +Z", it seemed to work just fine. Nice deductive work, there! On the other hand, running bart-7 this way did not solve the hanging problem. I would like to check a backtrace in gdb to see where it is hanging, but of course the debug build exhibits that immediate crash on the first character typed, rather than the hang after the command finishes executing. Any other reasonable avenues of investigation? Best Regards, Brian --------------- /usr/include/bsd/sys/termios.h --------------------- /* * termios structure */ #ifndef _TERMIOS_H_ #define _TERMIOS_H_ /* * Special Control Characters * * Index into c_cc[] character array. * * Name Subscript Enabled by */ #define VEOF 0 /* ICANON */ #define VEOL 1 /* ICANON */ #define VERASE 2 /* ICANON */ #define VKILL 3 /* ICANON */ #define VINTR 4 /* ISIG */ #define VQUIT 5 /* ISIG */ #define VSUSP 6 /* ISIG */ #define VSTART 7 /* IXON, IXOFF */ #define VSTOP 8 /* IXON, IXOFF */ #define VMIN 9 /* !ICANON */ #define VTIME 10 /* !ICANON */ #if defined(_NEXT_SOURCE) #define VWERASE 11 /* ICANON */ #define VREPRINT 12 /* ICANON */ #define VLNEXT 13 /* IEXTEN */ #define VDISCARD 14 /* IEXTEN */ #define VDSUSP 15 /* ISIG */ #define VQUOTE 16 /* ICANON */ #endif /* _NEXT_SOURCE */ #define NCCS 17 /* * Input flags - software input processing */ #define IGNBRK 0x00000001 /* ignore BREAK condition */ #define BRKINT 0x00000002 /* map BREAK to SIGINTR */ #define IGNPAR 0x00000004 /* ignore (discard) parity errors */ #define PARMRK 0x00000008 /* mark parity and framing errors */ #define INPCK 0x00000010 /* enable checking of parity errors */ #define ISTRIP 0x00000020 /* strip 8th bit off chars */ #define INLCR 0x00000040 /* map NL into CR */ #define IGNCR 0x00000080 /* ignore CR */ #define ICRNL 0x00000100 /* map CR to NL (ala CRMOD) */ #define IXON 0x00000200 /* enable output flow control */ #define IXOFF 0x00000400 /* enable input flow control */ #if defined(_NEXT_SOURCE) #define IXANY 0x00000800 /* any char will restart after stop */ #define IMAXBEL 0x00002000 /* ring bell on input queue full */ #endif /* _NEXT_SOURCE */ /* * Output flags - software output processing */ #define OPOST 0x00000001 /* enable following output processing */ #if defined(_NEXT_SOURCE) #define ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */ /* use the same bits as old delay flags */ #define NLDELAY 0x00000300 /* \n delay */ #define NL0 0x00000000 #define NL1 0x00000100 /* tty 37 */ #define NL2 0x00000200 /* vt05 */ #define NL3 0x00000300 #define TBDELAY 0x00000c00 /* horizontal tab delay */ #define TAB0 0x00000000 #define TAB1 0x00000400 /* tty 37 */ #define TAB2 0x00000800 #define XTABS 0x00000c00 /* expand tabs on output */ #define CRDELAY 0x00003000 /* \r delay */ #define CR0 0x00000000 #define CR1 0x00001000 /* tn 300 */ #define CR2 0x00002000 /* tty 37 */ #define CR3 0x00003000 /* concept 100 */ #define VTDELAY 0x00004000 /* vertical tab delay */ #define FF0 0x00000000 #define FF1 0x00004000 /* tty 37 */ #define BSDELAY 0x00008000 /* \b delay */ #define BS0 0x00000000 #define BS1 0x00008000 #define ALLDELAY (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY) #endif /* _NEXT_SOURCE */ /* * Control flags - hardware control of terminal */ #if defined(_NEXT_SOURCE) #define CIGNORE 0x00000001 /* ignore control flags */ #endif /* _NEXT_SOURCE */ #define CSIZE 0x00000300 /* character size mask */ #define CS5 0x00000000 /* 5 bits (pseudo) */ #define CS6 0x00000100 /* 6 bits */ #define CS7 0x00000200 /* 7 bits */ #define CS8 0x00000300 /* 8 bits */ #define CSTOPB 0x00000400 /* send 2 stop bits */ #define CREAD 0x00000800 /* enable receiver */ #define PARENB 0x00001000 /* parity enable */ #define PARODD 0x00002000 /* odd parity, else even */ #define HUPCL 0x00004000 /* hang up on last close */ #define CLOCAL 0x00008000 /* ignore modem status lines */ #if defined(_NEXT_SOURCE) #define CSTOPB110 0x00010000 #define PAR0 0x00020000 /* Space parity */ #define PAR1 0x00040000 /* Mark parity */ #endif /* _NEXT_SOURCE */ /* * "Local" flags - dumping ground for other state * * Warning: some flags in this structure begin with * the letter "I" and look like they belong in the * input flag. */ #if defined(_NEXT_SOURCE) #define ECHOKE 0x00000001 /* visual erase for line kill */ #endif /* _NEXT_SOURCE */ #define ECHOE 0x00000002 /* visually erase chars */ #define ECHOK 0x00000004 /* echo NL after line kill */ #define ECHO 0x00000008 /* enable echoing */ #define ECHONL 0x00000010 /* echo NL even if ECHO is off */ #define ICANON 0x00000020 /* canonicalize input lines */ #define ISIG 0x00000040 /* enable signals INTR, QUIT, [D]SUSP */ #define IEXTEN 0x00000080 /* enable DISCARD and LNEXT */ #if defined(_NEXT_SOURCE) #define ECHOCRT 0x00000100 /* visual erase mode for crt */ #define ECHOPRT 0x00000200 /* visual erase mode for hardcopy */ #define ECHOCTL 0x00000400 /* echo control chars as ^(Char) */ #define ALTWERASE 0x00000800 /* use alternate WERASE algorithm */ #define MDMBUF 0x00100000 /* flow control output via Carrier */ #endif /* _NEXT_SOURCE */ #define TOSTOP 0x00400000 /* stop background jobs from output */ #if defined(_NEXT_SOURCE) #define XLCASE 0x04000000 #define XEUCBKSP 0x08000000 #endif /* _NEXT_SOURCE */ #define NOFLSH 0x80000000 /* don't flush after interrupt */ typedef unsigned long tcflag_t; typedef unsigned char cc_t; typedef char speed_t; struct termios { tcflag_t c_iflag; /* input flags */ tcflag_t c_oflag; /* output flags */ tcflag_t c_cflag; /* control flags */ tcflag_t c_lflag; /* local flags */ cc_t c_cc[NCCS]; /* control chars */ speed_t c_ispeed; /* input speed */ speed_t c_ospeed; /* output speed */ }; /* * Commands passed to tcsetattr() for setting the termios structure. */ #define TCSANOW 0 /* make change immediate */ #define TCSADRAIN 1 /* drain output, then change */ #define TCSAFLUSH 2 /* drain output, flush input */ #if defined(_NEXT_SOURCE) #define TCSASOFT 0x10 /* flag - don't alter h.w. state */ #endif /* _NEXT_SOURCE */ /* * Standard speeds */ #import #ifndef KERNEL #ifdef __STDC__ speed_t cfgetispeed(const struct termios *); speed_t cfgetospeed(const struct termios *); int cfsetispeed(struct termios *, int); int cfsetospeed(struct termios *, int); int tcdrain(int); int tcflow(int, int); int tcflush(int, int); int tcgetattr(int, struct termios *); int tcsendbreak(int, int); int tcsetattr(int, int, const struct termios *); #if defined(_NEXT_SOURCE) void cfmakeraw(struct termios *); void cfsetspeed(struct termios *, int); #endif /* _NEXT_SOURCE */ #endif /* __STDC__ */ #define TCIFLUSH 1 #define TCOFLUSH 2 #define TCIOFLUSH 3 #define TCOOFF 1 #define TCOON 2 #define TCIOFF 3 #define TCION 4 #endif /* !KERNEL */ /* * END OF PROTECTED INCLUDE. */ #endif /* !_TERMIOS_H_ */