This is a port of PDCurses for X11, aka XCurses. It is designed to allow existing curses programs to be re-compiled with PDCurses, resulting in native X11 programs.
Run “./configure”. To build the narrow-character version of the library, specify “–disable-widec” as a parameter.
If your system is lacking in UTF-8 support, you can force the use of UTF-8 instead of the system locale via “–enable-force-utf8”.
If configure can’t find your X include files or X libraries, you can specify the paths with the arguments “–x-includes=inc_path” and/or “–x-libraries=lib_path”.
By default, the library and demo programs are built with the optimizer switch -O2. You can turn this off, and turn on debugging (-g), by adding “–enable-debug” to the configure command.
Run “make”. This should build libXCurses. Add the target “demos” to build the sample programs.
Optionally, run “make install”. To avoid conflicts with any existing curses installations, copies of curses.h and panel.h are installed in (by default) /usr/local/include/xcurses.
When compiling your application, you need to include the <curses.h> that comes with PDCurses. You also need to link your code with libXCurses. You may need to link with the following libraries:
Xaw Xmu Xt X11 SM ICE Xext Xpm
You can run “xcurses-config –libs” to show the link parameters for your system. If using dynamic linking, on some systems, “-lXCurses” suffices.
By calling Xinitscr() rather than initscr(), you can pass your program name and resource overrides to PDCurses. The program name is used as the title of the X window, and for defining X resources specific to your program. You can also set the width and height via PDC_COLS and PDC_LINES (command-line options and resources will take precedence), and as always, you can set the title via PDC_set_title().
Be aware that curses programs that expect to have a normal tty underneath them will be very disappointed! Output directed to stdout will go to the xterm that invoked the PDCurses application, or to the console if not invoked directly from an xterm. Similarly, stdin will expect its input from the same place as stdout.
PDCurses for X11 recognizes the following resources:
Specify the number of lines and columns the “screen” will have. Directly equate to LINES and COLS. There is no theoretical maximum. The minimum values must each be 2. Defaults: 24, 80
Names of fonts to use. These should be fixed-width. italicFont and boldFont are used for characters with the A_ITALIC and A_BOLD atttributes, respectively (if PDC_set_bold(), in the case of boldFont), and must have the same cell size as normalFont.
Defaults – wide:
The name of a valid pointer cursor. Default: xterm
Foreground and background colors for the pointer. Defaults: black, white
The alignment of the text cursor; horizontal or vertical. Default: horizontal
The initial values for the first eight colors, as represented by the curses macros COLOR_BLACK through COLOR_WHITE. Note that these can all be changed via init_color().
The defaults are Black, red3, green3, yellow3, blue3, magenta3, cyan3 and Grey.
The initial values for the next eight colors (8 through 15). When COLORS was limited to 8, these colors could only be accessed by combining the appropriate COLOR_# with the A_BOLD attribute, in the case of foreground colors, or A_BLINK for background colors. They can now be used directly by their numbers (or COLOR_# + 8). (Note that some terminals still use COLORS = 8.) See also PDC_set_bold() and PDC_set_blink().
The defaults are grey40, red1, green1, yellow1, blue1, magenta1, cyan1 and White.
The name of a valid bitmap file of depth 1 (black and white) used for the application’s icon. The file is an X bitmap. Default: none
The name of a valid pixmap file of any depth supported by the window manager (color) for the application’s icon, The file is an X11 pixmap. This resource overrides the “bitmap” resource. Default: a 32x32 or 64x64 pixmap depending on the window manager
The period (in milliseconds) between a button press and a button release that determines if a click of a button has occurred. Default: 100
The period (in milliseconds) between two button press events that determines if a double click of a button has occurred. Default: 200
All applications have a top-level class name of “XCurses”. If Xinitscr() is used, it sets an application’s top-level widget name. (Otherwise the name defaults to “PDCurses”.)
Examples for app-defaults or .Xdefaults:
! ! resources for XCurses class of programs ! XCurses*lines: 30 XCurses*cols: 80 XCurses*normalFont: 9x13 XCurses*bitmap: /tmp/xcurses.xbm XCurses*pointer: top_left_arrow ! ! resources for testcurs - XCurses ! testcurs.colorRed: orange testcurs.colorBlack: midnightblue testcurs.lines: 25 *testcurs.Translations: #override \n \ <Key>F12: string(0x1b) string("[11~") \n ! ! resources for THE - XCurses ! ! resources with the * wildcard can be overridden by a parameter passed ! to initscr() ! the*normalFont: 9x15 the*lines: 40 the*cols: 86 the*pointer: xterm the*pointerForeColor: white the*pointerBackColor: black ! ! resources with the . format can not be overridden by a parameter passed ! to Xinitscr() ! the.bitmap: /home/mark/the/the64.xbm the.pixmap: /home/mark/the/the64.xpm
Resources may also be passed as parameters to the Xinitscr() function. Parameters are strings in the form of switches; e.g., to set the color “red” to “indianred”, and the number of lines to 30, the string passed to Xinitscr would be: “-colorRed indianred -lines 30”
XCursesProgramName is no longer used. To set the program name, you must use Xinitscr(), or PDC_set_title() to set just the window title.
The XCursesExit() function is now called automatically via atexit(). (Multiple calls to it are OK, so you don’t need to remove it if you’ve already added it for previous versions of PDCurses.)
XCURSES is no longer defined automatically, but need not be defined, unless you want the X11-specific prototypes. (Normal curses programs won’t need it.)
As of April 13, 2006, the files in this directory are released to the public domain, except for ScrollBox*, which are under essentially the MIT X License; config.guess and config.sub, which are under the GPL; and configure, which is under a free license described within it.
X11 port was provided by Mark Hessling firstname.lastname@example.org
Single-process modifications by William McBrine