[CM] reading characters from keyboard in s7

Bill Schottstaedt bil at ccrma.Stanford.EDU
Thu Jul 26 10:36:45 PDT 2012


(read-char *stdin*)

will wait for you to type something in the terminal, then
return it.  There's a fancier example in s7.html (under 
begin-hook) which
watches for C-C to break out of a loop.  It uses tcgetattr
and friends; here's a stand-alone C program that is very
similar:

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <termios.h>

static struct termios saveit;

static int tty_reset(int fd)
{
  if (tcsetattr(fd, TCSAFLUSH, &saveit) < 0)
    return(-1);
  return(0);
}

static void sigcatch(int no)
{
  tty_reset(fileno(stdin));
  exit(0);
}

int main (int argc, char **argv)
{
  struct termios buf;
  int i;
  char c;

  if (signal(SIGINT, sigcatch) == SIG_ERR) exit(1);
  if (signal(SIGQUIT, sigcatch) == SIG_ERR) exit(1);
  if (signal(SIGTERM, sigcatch) == SIG_ERR) exit(1);

  if (tcgetattr(fileno(stdin), &saveit) < 0)
    exit(1);
  buf = saveit;
  buf.c_lflag &= ~(ECHO | ICANON);
  buf.c_cc[VMIN] = 1;
  buf.c_cc[VTIME] = 0;
  
  if (tcsetattr(fileno(stdin), TCSAFLUSH, &buf) < 0)
    exit(1);
  while ((i = read(fileno(stdin), &c, 1)) == 1) /* Ctrl-C to exit */
    {
      c &= 255;
      fprintf(stderr,"got %c\n", c);
    }
  tty_reset(fileno(stdin));
  return(0);
}

In the Snd listener, read-hook might be what you want (except it waits
for carriage-return).  To do something fancier in the listener would
probably require hacking the XmNmodifyVerify callback (in Motif)
or its equivalent in gtk as applied to the listener text widget.
snd-motif.scm has some code that might give you a start.



More information about the Cmdist mailing list