Path: utzoo!attcan!uunet!husc6!mailrus!ames!amdahl!pacbell!sactoh0!tree!asmodeus From: asmodeus@tree.UUCP (Jonathan Ballard) Newsgroups: comp.unix.questions Subject: Re: Terminal modes in Ultrix's System V emulation Message-ID: <117@tree.UUCP> Date: 5 Oct 88 23:15:05 GMT References: <829@philmds.UUCP> Organization: TREE BBS (916)-349-0385 Sacramento, Ca Lines: 72 In article <829@philmds.UUCP>, leo@philmds.UUCP (Leo de Wit) writes: > > When porting a database application to Ultrix (Oracle dbms), I found > out we had to use System V libraries (grrr 8-), since the Oracle > libraries depended upon them. I don't want to discuss whether Oracle's ... [stuff deleted] > The problem: > I want to read characters from a terminal, without echo and not having > to wait for a newline. After each character I might do some processing, > based on the character read. The old solution did something along the ...[more stuff deleted] This code here is what I used also... > > #include > > struct termio newbuf, oldbuf; /* oldbuf needed for restoring afterwards */ > > ioctl(0,TCGETA,&oldbuf); > newbuf = oldbuf; > newbuf.c_lflag &= ~(ECHO|ICANON); > ioctl(0,TCSETA,&newbuf); > Have you triing using a switch() to post process what you need? This is what i use. If your just looking for a return you could do something like... c=getchar(); switch(c) { case RETURN : printf("\n"); break; default : printf(c); break; } RETURN could be the real value or '\n' if you want to go by how the compiler would implement it. This is how I get the terminal set... #include /* include needed */ struct termio save, term; /* global varibles used */ /* check and see if terminal */ if ( ioctl (0, TCGETA, &term) == -1 ) { fprintf (stderr, "standard input not a tty\n"); exit (1); } /* set terminal for one-char input */ save = term; term.c_lflag &= ~ICANON; /* single key input ready */ term.c_lflag &= ~ECHO; /* turn off echo */ term.c_cc[VMIN] = 1; /* minimal of one key for input being ready */ term.c_cc[VTIME] = 0; /* turn off time-out */ ioctl (0, TCSETA, &term); /* to reset old tty state */ ioctl (0, TCSETA, &save); That seems to be the usual way other programmers use too... Well.. hope it helps... -- _ | | \ UUCP e-mail: ..!{csusac,pacbell}!sactoh0!jhballar | |-< ..!{csusac,pacbell}!sactoh0!tree!asmodeus |__|on |_/allard ..!csusac!tree!asmodeus