Solved

capturing the PageDown keypress ...

Posted on 1999-01-10
3
381 Views
Last Modified: 2008-02-26
hi,
  can anyone post me a snippet of the code that captures the PageDn keypress in a C program under unix environment...
I can capture other usual keys but I am not to sure on how to capture 'PageDn'.

Thanks
0
Comment
Question by:Haho
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 5

Expert Comment

by:scrapdog
ID: 1255748
Use the same code you use to capture other keys, and if the scan code for the keypress is 34, then the Page Down key has been pressed.
0
 
LVL 3

Accepted Solution

by:
mliberi earned 50 total points
ID: 1255749
I'm posting two C test program allowing to capture key pressed.
The first one uses 'curses' standard library.
The second is 'curses' independent, but the codes are terminal
dependent.

#include <stdlib.h>
#include <curses.h>

void gotoxy(int X, int Y)
{
  move(Y,X);
}

int keypressed()
/* return true if there is a keystroke ready to be read */
{
  int Z;
  nodelay(stdscr, TRUE);
  Z = getch();
  nodelay(stdscr, FALSE);
  if (Z==ERR)
    return FALSE;
  ungetch(Z);
  return TRUE;
}

int rotella[4]={'-','/','|','\\'};

main()
{
  int Z,i;
  char alfa[20];

  initscr();
  box(stdscr,0,0);
  if (has_colors())
    start_color();
  curs_set(0); /* 0=invisible, 1=visible, 2=very visible */
  scrollok(stdscr, TRUE);
  keypad(stdscr,TRUE);
  notimeout(stdscr, FALSE);
  noecho();
  raw();
  init_pair(1,7,1);
  wattrset(stdscr,COLOR_PAIR(1));
  erase();
  gotoxy(20,1);
  addstr("Keyboard codes, (c) M.Liberi, 1995");
  gotoxy(1,3);
  addstr("Press ^C to exit\n");
  refresh();
  while (Z != 3) /* F10 */
  {
    int i=0;
    while (! keypressed())
    {
      gotoxy(1,5);
      addch(rotella[i]);
      i= (++i)&3;
      refresh();
    }
    Z = getch();
    printw("  %d   %s\n", Z, keyname(Z));
    refresh();
  }
  clear();
  endwin();
}


----------------------------------------------------------------

#include <stdio.h>
#include <errno.h>
#include <termio.h>

#define fd_stdin 0
#define then
#define true  1
#define false 0

int waitkey(unsigned char TimeOut)
/* read a single char, without echo, from stdin with a timeout         */
/* if nothing has arrived within Timeout tenths of a seconds return -1 */
{
  int rc;
  struct termios old_termdef, new_termdef;

  tcgetattr(fd_stdin,&old_termdef);
  new_termdef = old_termdef;
  new_termdef.c_iflag &=  IGNCR;    /* ignore CR OFF            */
  new_termdef.c_lflag &= ~ISIG;     /* signal generation OFF    */
  new_termdef.c_lflag &= ~ICANON;   /* Non canonical input      */
  new_termdef.c_lflag &= ~ECHO;     /* No echo                  */
  new_termdef.c_cc[VMIN] = 0;       /* read zero or one char    */
  new_termdef.c_cc[VTIME]= TimeOut; /* TIMEOUT in 0.1 sec units */
  tcsetattr(fd_stdin,TCSANOW,&new_termdef);
  rc = getchar();
  tcsetattr(fd_stdin,TCSANOW,&old_termdef);
  return rc;                        /* -1 if timeout reached */
}

int KeyPressed()
/* true if a character is present in input buffer */
{
  int rc=waitkey(0);
  if (rc>=0)
  {
    ungetc(rc,stdin);
    return true;
  }
  return false;
}

int inkey()
/* read a single character, without echo, from stdin */
{
  int rc;
  struct termios old_termdef, new_termdef;

  tcgetattr(fd_stdin,&old_termdef);
  new_termdef = old_termdef;
  new_termdef.c_iflag &=  IGNCR;    /* ignore CR OFF            */
  new_termdef.c_lflag &= ~ISIG;     /* signal generation OFF    */
  new_termdef.c_lflag &= ~ICANON;   /* Non canonical input      */
  new_termdef.c_lflag &= ~ECHO;     /* No echo                  */
  new_termdef.c_cc[VMIN] = 1;       /* read only one char       */
  new_termdef.c_cc[VTIME]= 0;       /* forever                  */
  tcsetattr(fd_stdin,TCSANOW,&new_termdef);
  rc = getchar();
  tcsetattr(fd_stdin,TCSANOW,&old_termdef);
  return rc;
}

int main()
{
  int c,i;

  if (!isatty(fd_stdin))
  {
    fprintf(stderr,"stdin is not a tty\n");
    return 1;
  }
  fprintf(stderr,"keybd, M.Liberi, 1996\n");
  fprintf(stderr,"Press ^C to exit\n");
  while ((c=inkey()) != 3)
  {
    if (isprint(c))
      then
        printf("%c %d", c, c);
      else
        printf("  %d", c);
    while (KeyPressed())
    {
      c=inkey();
      printf(" %d", c);
    }
    putchar('\n');
  }
  return 0;
}

0
 
LVL 1

Author Comment

by:Haho
ID: 1255750
thanks
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Inorder binary search tree 5 186
How to set environment variables in C 2 102
Programming Arduino to control a Max7219 using C 2 157
List out all word 7 354
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.

732 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question