<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <!--Converted with LaTeX2HTML 96.1-c (Feb 29, 1996) by Nikos Drakos (nikos@cbl.leeds.ac.uk), CBLU, University of Leeds --> <HTML> <HEAD> <TITLE>8 Character Cell Graphics</TITLE> <META NAME="description" CONTENT="8 Character Cell Graphics"> <META NAME="keywords" CONTENT="lpg"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <LINK REL=STYLESHEET HREF="lpg.css"> </HEAD> <BODY LANG="EN"> <A NAME="tex2html1414" HREF="node86.html"><IMG WIDTH=37 HEIGHT=24 ALIGN=BOTTOM ALT="next" SRC="/icons//next_motif.gif"></A> <A NAME="tex2html1412" HREF="lpg.html"><IMG WIDTH=26 HEIGHT=24 ALIGN=BOTTOM ALT="up" SRC="/icons//up_motif.gif"></A> <A NAME="tex2html1406" HREF="node84.html"><IMG WIDTH=63 HEIGHT=24 ALIGN=BOTTOM ALT="previous" SRC="/icons//previous_motif.gif"></A> <A NAME="tex2html1416" HREF="node1.html"><IMG WIDTH=65 HEIGHT=24 ALIGN=BOTTOM ALT="contents" SRC="/icons//contents_motif.gif"></A> <BR> <B> Next:</B> <A NAME="tex2html1415" HREF="node86.html">8.1 I/O Function in </A> <B>Up:</B> <A NAME="tex2html1413" HREF="lpg.html">e</A> <B> Previous:</B> <A NAME="tex2html1407" HREF="node84.html">7.2 Programming a sound </A> <BR> <P> <A NAME="vdm"> </A><H1><A NAME="SECTION00900000000000000000">8 Character Cell Graphics</A></H1> <P> This chapter deals with screen input and output that is not pixel based, but character based. When we say character, we mean a composition of pixels that can be changed depending on a charset. Your graphic card already offers one or more charsets and operates by default in text (charset) mode because text can be processed much faster than pixel graphic. There is more to do with terminals than to use them as simple (dumb) and boring text displays. I will describe how to use the special features that your linux terminal, especially the linux console, offers. <P> <UL><LI> <B>printf, sprintf, fprintf, scanf, sscanf, fscanf</B> <BR> With these functions from you can output formatted strings to (standard output), (standard error) or other streams defined as <TT>FILE *stream</TT> (files, for example). <B>Scanf(...)</B> provides a similar way to read formatted input from .<LI> <B>termcap</B> <BR> The TERMinal CAPabilitie database is a set of terminal description entries in the ASCII file /etc/termcap. Here you can find information about how to display special characters, how to perform operations (delete, insert characters or lines etc) and how to initialize a terminal. The database is used, for example, by the editor vi. There are view library functions to read and use the terminal capabilities (termcap(3x)). With this database, programs can work with a variety of terminals with the same code. Using the termcap database and library functions provides only low level access to the terminal. Changing attributes or colors, parameterized output and optimization must be done by the programmer himself.<LI> <B>terminfo database</B> <BR> The TERMinal INFOrmation database is based on the termcap database and also describes terminal capabilities, but on a higher level than termcap. Using terminfo, the program can easily change screen attributes, use special keys such as function keys and more. The database can be found in <I>/usr/lib/terminfo/[A-z,0-9]*</I>. Every file describes one terminal.<LI> <B>curses</B> <BR> Terminfo is a good base to use for terminal handling in a program. The (BSD-)CURSES library gives you high level access to the terminal and is based on the terminfo database. Curses allows you to open and manipulate windows on the screen, provides a complete set of input and output functions, and can alter video attributes in a terminal independent manner on more than 150 terminals. The curses library can be found in <I>/usr/lib/libcurses.a</I>. This is the BSD version of curses.<LI> <B>ncurses</B> <BR> Ncurses is the next improvement. In version 1.8.6 it should be compatible with AT&T curses as defined in SYSVR4 and has some extensions such as color manipulation, special optimization for output, terminal specific optimizations, and more. It has been tested on a lot of systems such as Sun-OS, HP and Linux. I recommend using ncurses instead of the others. On SYSV Unix systems (such as Sun's Solaris) there should exist a curses library with the same functionality as ncurses (actually the solaris curses has some more functions and mouse support). </UL> <P> In the following sections I will describe how to use the different packages to access a terminal. With Linux we have the GNU-version of termcap and we can use ncurses instead of curses. <P> <BR> <HR> <UL> <LI> <A NAME="tex2html1417" HREF="node86.html#SECTION00910000000000000000">8.1 I/O Function in libc</A> <UL> <LI> <A NAME="tex2html1418" HREF="node87.html#SECTION00911000000000000000">8.1.1 Formatted Output</A> <LI> <A NAME="tex2html1419" HREF="node88.html#SECTION00912000000000000000">8.1.2 Formatted Input</A> </UL> <LI> <A NAME="tex2html1420" HREF="node89.html#SECTION00920000000000000000">8.2 The Termcap Library</A> <UL> <LI> <A NAME="tex2html1421" HREF="node90.html#SECTION00921000000000000000">8.2.1 Introduction</A> <LI> <A NAME="tex2html1422" HREF="node91.html#SECTION00922000000000000000">8.2.2 Find a Terminal Description</A> <LI> <A NAME="tex2html1423" HREF="node92.html#SECTION00923000000000000000">8.2.3 Look at a Terminal Description</A> <LI> <A NAME="tex2html1424" HREF="node93.html#SECTION00924000000000000000">8.2.4 Termcap Capabilities</A> <UL> <LI> <A NAME="tex2html1425" HREF="node94.html#SECTION00924100000000000000">Boolean Capabilities</A> <LI> <A NAME="tex2html1426" HREF="node95.html#SECTION00924200000000000000">Numeric Capabilities</A> <LI> <A NAME="tex2html1427" HREF="node96.html#SECTION00924300000000000000">String Capabilities</A> </UL> </UL> <LI> <A NAME="tex2html1428" HREF="node97.html#SECTION00930000000000000000">8.3 Ncurses - Introduction</A> <LI> <A NAME="tex2html1429" HREF="node98.html#SECTION00940000000000000000">8.4 Initializing</A> <LI> <A NAME="tex2html1430" HREF="node99.html#SECTION00950000000000000000">8.5 Windows</A> <LI> <A NAME="tex2html1431" HREF="node100.html#SECTION00960000000000000000">8.6 Output</A> <UL> <LI> <A NAME="tex2html1432" HREF="node101.html#SECTION00961000000000000000">8.6.1 Formatted Output</A> <LI> <A NAME="tex2html1433" HREF="node102.html#SECTION00962000000000000000">8.6.2 Insert Characters/Lines</A> <LI> <A NAME="tex2html1434" HREF="node103.html#SECTION00963000000000000000">8.6.3 Delete Characters/Lines</A> <LI> <A NAME="tex2html1435" HREF="node104.html#SECTION00964000000000000000">8.6.4 Boxes and Lines</A> <LI> <A NAME="tex2html1436" HREF="node105.html#SECTION00965000000000000000">8.6.5 Background Character</A> </UL> <LI> <A NAME="tex2html1437" HREF="node106.html#SECTION00970000000000000000">8.7 Input</A> <UL> <LI> <A NAME="tex2html1438" HREF="node107.html#SECTION00971000000000000000">8.7.1 Formated Input</A> </UL> <LI> <A NAME="tex2html1439" HREF="node108.html#SECTION00980000000000000000">8.8 Options</A> <UL> <LI> <A NAME="tex2html1440" HREF="node109.html#SECTION00980100000000000000">Output Options</A> <LI> <A NAME="tex2html1441" HREF="node110.html#SECTION00981000000000000000">8.8.1 Input Options</A> <LI> <A NAME="tex2html1442" HREF="node111.html#SECTION00982000000000000000">8.8.2 Terminal Attributes</A> <LI> <A NAME="tex2html1443" HREF="node112.html#SECTION00983000000000000000">8.8.3 Use Options</A> </UL> <LI> <A NAME="tex2html1444" HREF="node113.html#SECTION00990000000000000000">8.9 Clear Window and Lines</A> <LI> <A NAME="tex2html1445" HREF="node114.html#SECTION009100000000000000000">8.10 Updating the Terminal</A> <LI> <A NAME="tex2html1446" HREF="node115.html#SECTION009110000000000000000">8.11 Video Attributes and Color</A> <LI> <A NAME="tex2html1447" HREF="node116.html#SECTION009120000000000000000">8.12 Cursor and Window Coordinates</A> <LI> <A NAME="tex2html1448" HREF="node117.html#SECTION009130000000000000000">8.13 Scrolling</A> <LI> <A NAME="tex2html1449" HREF="node118.html#SECTION009140000000000000000">8.14 Pads</A> <LI> <A NAME="tex2html1450" HREF="node119.html#SECTION009150000000000000000">8.15 Soft-labels</A> <LI> <A NAME="tex2html1451" HREF="node120.html#SECTION009160000000000000000">8.16 Miscellaneous</A> <LI> <A NAME="tex2html1452" HREF="node121.html#SECTION009170000000000000000">8.17 Low-level Access</A> <LI> <A NAME="tex2html1453" HREF="node122.html#SECTION009180000000000000000">8.18 Screen Dump</A> <LI> <A NAME="tex2html1454" HREF="node123.html#SECTION009190000000000000000">8.19 Termcap Emulation</A> <LI> <A NAME="tex2html1455" HREF="node124.html#SECTION009200000000000000000">8.20 Terminfo Functions</A> <LI> <A NAME="tex2html1456" HREF="node125.html#SECTION009210000000000000000">8.21 Debug Function</A> <LI> <A NAME="tex2html1457" HREF="node126.html#SECTION009220000000000000000">8.22 Terminfo Capabilities</A> <UL> <LI> <A NAME="tex2html1458" HREF="node127.html#SECTION009221000000000000000">8.22.1 Boolean Capabilities</A> <LI> <A NAME="tex2html1459" HREF="node128.html#SECTION009222000000000000000">8.22.2 Numbers</A> <LI> <A NAME="tex2html1460" HREF="node129.html#SECTION009223000000000000000">8.22.3 Strings</A> </UL> <LI> <A NAME="tex2html1461" HREF="node130.html#SECTION009230000000000000000">8.23 [N]Curses Function Overview</A> </UL> <HR><A NAME="tex2html1414" HREF="node86.html"><IMG WIDTH=37 HEIGHT=24 ALIGN=BOTTOM ALT="next" SRC="/icons//next_motif.gif"></A> <A NAME="tex2html1412" HREF="lpg.html"><IMG WIDTH=26 HEIGHT=24 ALIGN=BOTTOM ALT="up" SRC="/icons//up_motif.gif"></A> <A NAME="tex2html1406" HREF="node84.html"><IMG WIDTH=63 HEIGHT=24 ALIGN=BOTTOM ALT="previous" SRC="/icons//previous_motif.gif"></A> <A NAME="tex2html1416" HREF="node1.html"><IMG WIDTH=65 HEIGHT=24 ALIGN=BOTTOM ALT="contents" SRC="/icons//contents_motif.gif"></A> <BR> <B> Next:</B> <A NAME="tex2html1415" HREF="node86.html">8.1 I/O Function in </A> <B>Up:</B> <A NAME="tex2html1413" HREF="lpg.html">e</A> <B> Previous:</B> <A NAME="tex2html1407" HREF="node84.html">7.2 Programming a sound </A> <P><ADDRESS> <I>Converted on: <BR> Fri Mar 29 14:43:04 EST 1996</I> </ADDRESS> </BODY> </HTML>