bitwise:
Turning off echoing tends to be platform specific. Under System V Unix, you must manipulate the terminal driver. The following code doesn't do quite what you request. It gets one character from the terminal driver, but it illustrates turning off echoing.
Regards,
Ed
#include <stdio.h>
#include <termio.h>
#include <fcntl.h>
void main()
{
printf("%c\n", ret_char());
exit(0);
}
/* ret_char.c. Unix System V dependent.
* This function is designed to return the ascii value of a
* single character * as long as it's alphanumeric, an interrupt,
* control-c or a Carriage Return. This function only accepts
* an alphanumeric, an interrupt or control-c.
*
* 1. Save original terminal settings.
* 2. Turn off canonial mode and echoing.
* 3. Get the character.
* 4. Reset the original terminal settings.
* 5. Return the character.
*
* Use this in a shell script as such:
* achar=`ret_char`
* echo "achar is: "$achar
*/
int ret_char()
{
struct termio tsave, chgit;
int c;
/* save original terminal settings */
if(ioctl(0, TCGETA, &tsave) == -1)
{
perror("bad term setting"

;
exit(1);
}
chgit = tsave;
/* turn off canonial mode and echoing */
chgit.c_lflag &= ~(ICANON|ECHO);
chgit.c_cc[VMIN] = 1;
chgit.c_cc[VTIME] = 0;
/* modify terminal settings */
if(ioctl(0, TCSETA, &chgit) == -1)
perror("can't modify terminal settings "

;
while (1)
{ /* break when an alphanumeric, interrupt,
control-c, CR is pressed */
c = getchar();
/* CR is ascii value 13, interrupt is -1, control-c is 3 */
if(isalnum(c) || c == '\r' || c == '\n' || c == '\b'
|| c == -1 || c == 3)
break;
}
/* reset to original terminal settings */
if(ioctl(0, TCSETA, &tsave) == -1)
{
perror("can't reset original setting"

;
exit(1);
}
/* return the character */
return(c);
}
/* End of File */