Ncurses!
Text mode programming ain't dead yet!
This page supports the original book, The Programmer's Guide to NCurses. For the support page on my more recent Ncurses programming eBook, click here.
Table of Contents
Source Code
Here is a tar.gz file chock full of the book's source code. That's 238 C source code (plain text) files in two directories. The files in the book
directory are from the tutorial part of the book. Files in the book-ref
directory are the sample files from the reference. The archive uses the same filenames as referenced in the text.
Please let me know if anything is missing or wrong; my e-mail address can be found in the front of the book. Thanks!
Supplemental Information
* Here is a link to a page on using Python with NCurses courtesy of the Npyscreen python widget library and application framework.
* I've received e-mail from a fellow who's created a JavaScript binding to NCurses, implemented on top of the SpiderMonkey JavaScript engine (used by Mozilla/Firefox). By using this binding it makes it easier and faster to write NCurses apps in JavaScript, as well as having several advantages over using C. Check it out at: http://SpiderApe.sourceforge.net/
* Here's a screen map for you! It can be used to help build menus or plot coordinates on a standard 80x24 screen. PDF format.
* NCruses Colors, hues, and other information. As the book is not in color I wasn't able to include color swatches for the various NCurses color commands. But, hey! The web is in color! So here are those swatches:
Color | Function | Hue | Constant Name |
---|---|---|---|
0 | init_color(0,0,0,0); | COLOR_BLACK | |
1 | init_color(0,1000,0,0); | COLOR_RED | |
2 | init_color(0,0,1000,0); | COLOR_GREEN | |
3 | init_color(0,1000,1000,0); | COLOR_YELLOW | |
4 | init_color(0,0,0,1000); | COLOR_BLUE | |
5 | init_color(0,1000,0,1000); | COLOR_MAGENTA | |
6 | init_color(0,0,1000,1000); | COLOR_CYAN | |
7 | init_color(0,1000,1000,1000); | COLOR_WHITE |
* It is possible to get more than the standard 8 (or 16) colors out of NCurses, but you must be using a compatible terminal and re-compile NCurses on your computer to include that full color support. Read more...
* A few of the books' figures were done originally in color. Sadly, it's not a four-color book. To see the images in their original color, lookee here.
Bonus Programs
Here is my solution for the dual-window, rot13 program at the end of Chapter 8.
Here is my solution for the clickput.c source code mentioned in Chapter 13.
The gettysburg.txt file used in a few of the sample programs for filling a window with text.
Errata
- Page 20, first paragraph
- The last sentence improperly spells initscr() as inistscr().
- Page 75, bottom of the page
- stdscr is improperly written as sdtscr. So the code example should be nodelay(stdscr,TRUE)
- Page 98, "Dueling Windows" section
- You need to call the refresh() command after initscr() in order for the windows to appear. This is apparently a change in Ncurses since the book was written. The change applies to the source code for
quad1.c
,quad2.c
, andquad3.c
. Basically, just add a refresh() statement after initscr() in each listing and the programs will run properly. - Page 99
- Per the Page 98 errata, a
refresh() function call needs to be added after Line 11. - Page 100
- A refresh() function call needs to be added after Line 11.
- Page 102
- A refresh() function call needs to be added after Line 11.
- Page 104, first paragraph
- There are 26 letters in the alphabet, not 36 as suggested in the text.
- Page 110, Listing 9-3, kid3.c
- The code as presented in the book doesn't update the subwindows. You can insert a getch() statement before Line 29 to do so. A more elegant solution is to change Line 30 to read wgetch(grandpa), which refreshes that window and updates the screen.
- Page 173, Table 14-1
- Oops! The double-line drawing characters are missing from the table. What a gross oversight! Here they are:
- Page 287
- The entire getmouse() entry is not properly placed alphabetically in the appendix; it should be on page 284 or just before the getnstr() entry.
- Page 352, first paragraph
- Replace ROWS with LINES so that the paragraph reads:
- LINES is a variable, not a constant. Note that changing the value of LINES does not re-size the standard screen or terminal window.
- Page 370
- First paragraph below the napms(ms) header: The function measures milliseconds, not microseconds. The difference? About 1,000 microseconds make for one millisecond. Specifically, the descriptive sentence should read:
- The napms() function pauses program execution for a given number of milliseconds (1/1000th of a second).
- Page 376, second paragraph
- The maximum value for ncols is 32767, the same as for nlines and as set by NCURSES_SIZE_T.
Char | Dec | Hex | Char | Dec | Hex |
---|---|---|---|---|---|
186 |
0xBA |
187 |
0xBB |
||
205 |
0xCD |
200 |
0xC8 |
||
201 |
0xC9 |
188 |
0xBC |
Other Resources
GNU NCurses web page - How to get NCurses, options, features, and so on.
Thomas Dickey's NCurses FAQ - General questions about NCurses itself, plus a few links to some How-Tos.
Copyright © 1997-2024 by QPBC.
All rights reserved