Thursday, December 31, 2015

Install ncurses on Ubuntu

How To Install ncurses Library on a Linux

Ineed to compile an application with ncurses library and header files. How do I install install ncurses libs and header files on a Linux operating system? How do I write a simple hello world program using the ncurses and compile it on a Linux?
GNU ncurses is software API for controlling writing to the console screen under Unix, Linux and other operating systems. You can create text-based user interfaces (TUI) on a Linux or Unix-like system using ncurses library.

Installing the ncurses library in Debian/Ubuntu Linux
  1. You need to install the following two packages: 
    libncurses5-dev : Developer's libraries for ncurses
    libncursesw5-dev : Developer's libraries for ncursesw
  2. Open the Terminal application.
  3. Type the following apt-get command to install ncurses header and libs:
    sudo apt-get install libncurses5-dev libncursesw5-dev
Sample outputs:
Fig.01: Install ncurses library using apt-get
Fig.01: Install ncurses library using apt-get

Installing the ncurses library in CentOS/RHEL/Scientific Linux 6.x/7.x+ and Fedora Linux 21 or older

  1. You need to install the following package: 
    ncurses-devel : Developer's libraries for ncurses
  2. Open the Terminal application.
  3. Type the following yum command to install ncurses header and libs:
    sudo yum install ncurses-devel
Sample outputs:
Fig.02: Install ncurses library using yum
Fig.02: Install ncurses library using yum

Installing the ncurses library in Fedora Linux 22.x+

  1. You need to install the following package: 
    ncurses-devel : Developer's libraries for ncurses
  2. Open the Terminal application.
  3. Type the following dnf command to install ncurses header and libs:
    sudo dnf install ncurses-devel

How do compile C program and use the ncurses library?

Create a test program called hello.c as follows:
#include <ncurses.h>
 
int main(void){
 initscr();           // Start curses mode
 printw("Hello World !!!"); // Print Hello World
 refresh();           // Print it on to the real screen
 getch();           // Wait for user input
 endwin();           // End curses mode
 return 0;
}
First, make sure you install GNU/GCC C compiler on a Linux:
To link to the ncurses library pass the -lncurses option to gcc/cc command:
$ cc -o output input.c -lncurses
$ cc -o hello hello.c -lncurses

Run it:
$ ./hello
Sample outputs:
Hello World !!!
Here is another program:
/*
  CURWIN1.C
  =========
  (c) Copyright Paul Griffiths 1999
  Email: mail@paulgriffiths.net
  Moving windows with ncurses.
*/
 
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
 
int main(void) {
    WINDOW * mainwin, * childwin;
    int      ch;
 
    // Set the dimensions and initial position for our child window
    int      width = 23, height = 7;
    int      rows  = 25, cols   = 80;
    int      x = (cols - width)  / 2;
    int      y = (rows - height) / 2;
 
 
    // Initialize ncurses
    if ((mainwin = initscr()) == NULL) {
     fprintf(stderr, "Error initialising ncurses.\n");
     exit(EXIT_FAILURE);
    }
 
    // Switch of echoing and enable keypad (for arrow keys)
 
    noecho();
    keypad(mainwin, TRUE);
 
    // Make our child window, and add a border and some text to it.
 
    childwin = subwin(mainwin, height, width, y, x);
    box(childwin, 0, 0);
    mvwaddstr(childwin, 1, 4, "Move the window");
    mvwaddstr(childwin, 2, 2, "with the arrow keys");
    mvwaddstr(childwin, 3, 6, "or HOME/END");
    mvwaddstr(childwin, 5, 3, "Press 'q' to quit");
 
    refresh();
 
    // Loop until user hits 'q' to quit
 
    while ((ch = getch()) != 'q') {
 switch (ch) {
 case KEY_UP:
     if (y > 0)
  --y;
     break;
 case KEY_DOWN:
     if (y < (rows - height))
  ++y;
     break;
 case KEY_LEFT:
     if (x > 0)
  --x;
     break;
 case KEY_RIGHT:
     if (x < (cols - width))
  ++x;
     break;
 case KEY_HOME:
     x = 0;
     y = 0;
     break;
 case KEY_END:
     x = (cols - width);
     y = (rows - height);
     break;
 }
 mvwin(childwin, y, x);
    }
 
 
    /*  Clean up after ourselves  */
 
    delwin(childwin);
    delwin(mainwin);
    endwin();
    refresh();
 
    return EXIT_SUCCESS;
}
Compile and run it as follows:
$ cc -o curwin1 curwin1.c -lncurses
$ ./curwin1

Sample outputs:
Fig.03: Basic window operations in action using ncurses
Fig.03: Basic window operations in action using ncurses

See this page and GNU ncurses project home page for more information.

Comments: One of the very earliest O’Reilly books was gloriously entitled “Programming with curses”.

No comments:

Post a Comment