Questo documento è una introduzione alla programmazione con le
curses
. Non è un manuale di riferimento alla interfaccia
di programmazione delle curses (API); tale ruolo è svolto dalle
pagine del manuale delle curses
.
Piuttosto si propone di aiutare i programmatori 'C' a prendere
confidenza col pacchetto.
Questo documento è destinato ai programmatori di applicazioni 'C'
non ancora specificatamente familiarizzati con le ncurses
.
Anche se sei un programmatore già esperto di curses
,
dovresti comunque leggere le sezioni
Interfacciamento del mouse ,
Debugging ,
Compatibilità con Precedenti Versioni , e
Consigli, Suggerimenti e Trucchi .
Ti introdurranno velocemente alle speciali caratteristiche ed
arguzie della implementazione delle ncurses
.
Se non hai questa preparazione, inizia a leggere.
Il pacchetto curses
è una libreria di sottoprogrammi
per la gestione dello schermo indipendentemente dal terminale
e per la gestione degli eventi di input che presenta al
programmatore un modello ad alto livello dello schermo,
nascondendo le differenze tra diversi tipi di terminale ed
ottimizzando l'output tra una schermata di testo e l'altra.
Le curses
usano terminfo, che è un database che descrive
le capacità di migliaia di diversi terminali.
La API curses
potrebbero sembrare un arcaismo sui desktop UNIX
sempre più dominati da X, Motif e Tcl/Tk.
Tuttavia, UNIX ancora supporta le linee seriali, mentre X supporta
xterm(1); la API curses
ha i vantaggi della
(a) retro-portabilità verso i terminali a celle di carattere, e
(b) semplicità.
Per una applicazione che non richiede grafica e diversi font di
caratteri, l'implementazine di una interfaccia usando le
curses
sarà tipicamente molto più semplice e meno costosa
di una che usi il toolkit X.
Storicamente, il primo antenato delle curses
furono le routine
scritte per fornire la gestione dello schermo al gioco rogue
;
utilizzavano il già esistente database termcap
per descrivere
le capacità di un terminale.
Queste routine furono raccolte in una libreria documentata e
rilasciata con le prime versioni del BSD UNIX.
UNIX System III dei Bell Labs si caratterizzava con una libreria
curses
riscritta e molto migliorata.
Introduceva il formato terminfo.
Terminfo si basa sul database termcap di Berkeley, ma contiene
un numero di migliorie ed estensioni.
Furono introdotte le capacità parametrizzate, rendendo possibile
la descrizione di attributi video multipli, colori e la gestione
di terminali molto più insoliti di quanto fosse possibile con termcap.
Nel successivo System V di AT&T, le curses
si evolsero
nell'usare ancor più facilitazioni ed offrire più capacità,
andando più in là delle curses BSD in potenza e flessibilità.
Questo documento descrive ncurses
, una implementazione
freeware della API delle curses
di System V,
con alcune estensioni ben definite.
Include le seguenti caratteristiche delle curses di System V:
Inoltre, questo pacchetto fa uso delle capacità di alcuni terminali di inserire e cancellare linee e caratteri, e determina come usare queste capacità nel modo più efficace senza intervento del programmatore. Permette di visualizzare arbitrarie combinazioni di attributi video persino su terminali che lasciano biscottini (magic cookies) sullo schermo per indicare modifiche degli attributi.
Il pacchetto ncurses
può inoltre catturare ed utilizzare
rapporti di eventi provenienti dal mouse in alcuni ambienti
(soprattutto xterm(1) sotto il sistema X window).
Questo documento contiene suggerimenti sull'uso del mouse.
Il pacchetto ncurses
è stato creato da Pavel Curtis.
Il principale manutentore del pacchetto è
Zeyd Ben-Halim
<zmbenhal@netcom.com>
.
Eric S. Raymond
<esr@snark.thyrsus.com>
ha scritto molte delle nuove caratteristiche nelle versioni
successive alla 1.8.1 ed ha scritto il più di questa introduzione.
Questo documento inoltre descrive la libreria delle estensioni, modellata a somiglianza dei panel di SVr4. Questa libreria vi permette di memorizzare il sottofondo associato ad una serie di finestre sovrapposte, e fornisce operazioni per muovere in modo naturale le finestre in una pila che ne cambia la visibilità (gestendo la sovrapposizione delle finestre).
In fine, questo documento descrive in dettaglio le librerie di estensione menus e forms, anch'esse clonate dal System V, che consentono la facile costruzione e uso di menù e form da compilare. Questo codice è dovuto al contributo di Jürgen Pfeifer.
In questo documento la seguente terminologia è usata con ragionevole
coerenza;
i termini WINDOW
(finestra) e SCREEN
(schermo)
verranno mantenuti nel testo nell'originale inglese maiuscolo
(singolare) quando si riferiscono alle strutture dati in memoria:
WINDOW
) Una struttura di dati che descrive un rettangolo dello schermo (addirittura l'intero schermo). Potete scrivere in una finestra come fosse uno schermo in miniatura, scrollando il testo indipendentemente dalle altre finestre dello schermo fisico.
SCREEN
) Un sottoinsieme di finestre che sono grandi come lo schermo del
terminale, cioè partono dall'angolo superiore sinistro e
raggiungono l'angolo inferiore destro.
Uno di questi SCREEN, stdscr
,
viene fornito automaticamente al programmatore.
L'idea del pacchetto di cosa il display del terminale vaccia vedere,
cioè quello che l'utente vede ora.
Questo è lo speciale SCREEN curscr
.