Precedente Successivo Indice

1. Introduzione

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.

1.1 Una storia sommaria delle Curses

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à.

1.2 Contenuto di questo documento

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.

1.3 Terminologia

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:

finestra (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.

schermi (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.

schermo del terminale

L'idea del pacchetto di cosa il display del terminale vaccia vedere, cioè quello che l'utente vede ora. Questo è lo speciale SCREEN curscr.


Precedente Successivo Indice