# Carattere di controllo

Nell'informatica, un carattere di controllo o carattere non visualizzabile, è un codice (un numero) in un set di caratteri che non rappresenta in sé un simbolo scritto. Tutti i caratteri nella tabella ASCII al di sotto della posizione 32 fanno parte di questa categoria, incluso BEL (che di solito provoca un segnale sonoro nel terminale ricevente), SYN (che è il segnale di sincronizzazione), e ENQ (un segnale che richiede una risposta dal terminale ricevente, per conoscere lo stato della linea). Lo standard Unicode ha aggiunto molti nuovi caratteri non visualizzabili.

## Nella tabella ASCII

I caratteri di controllo nella tabella ASCII ancora d'uso comune comprendono
* 7 (bell), provoca l'emissione di un segnale sonoro da parte del terminale ricevente
* 8 (backspace), utilizzato per cancellare l'ultimo carattere visualizzato, di solito quello immediatamente a sinistra del cursore
* 9 (horizontal tab), tabulatore orizzontale
* 10 (line feed), utilizzato per terminare le linee di testo nei sistemi Mac OS X e versioni successive, Unix e le loro varianti.
* 12 (form feed), per terminare la pagina sulla stampante e avanzare al modulo successivo
* 13 (carriage return), ritorno a capo, utilizzato per terminare le linee di testo nel Mac OS (nelle versioni inferiori alla 10) e nei derivati del CP/M, compreso il DOS).
* 27 (escape).
A volte si incontra un utilizzo più moderno di alcuni altri codici, come nel caso del codice 4 (End of transmission) EOT, utilizzato per terminare una shell di Unix o Linux o una trasmissione di dati alla stampante PostScript.
Il codice 27 (Escape) è un caso che merita di essere analizzato. Anche se molti di questi caratteri di controllo non vengono mai usati, il concetto di inviare informazioni per il controllo delle periferiche, inframezzati a caratteri stampabili, è così utile che i produttori trovarono il modo di inviare centinaia di istruzioni alle periferiche. Nello specifico usavano una serie di caratteri multipli, chiamati "sequenza di controllo" o "sequenza di escape". Tipicamente il codice 27 veniva inviato per primo per avvisare la periferica che i caratteri seguenti dovevano essere interpretati come una sequenza di controllo, piuttosto che come dei normali caratteri, quindi uno o più caratteri successivi spiegavano quale azione intraprendere, dopo di che la periferica tornava a interpretare i caratteri normalmente. Ad esempio, la sequenza del codice 27, seguita dai caratteri stampabili "[2;10H", faceva sì che un terminale VT-102 della Digital spostasse il suo cursore sulla decima cella della seconda riga dello schermo. Esistono alcuni standard per queste sequenze, soprattutto l'ANSI X3.64 (1979), che si basava sul comportamento dei terminali della serie VT-100. Ma il numero di varianti non standard in uso è ampio, specialmente per le stampanti, dove la tecnologia è progredita molto più velocemente, ben al di là delle tempistiche imposte da ciascun processo di standardizzazione.

## Corrispondenza dei caratteri di controllo nella tastiera

Le tastiere basate sul sistema ASCII possiedono un tasto "Control" o "Ctrl", che viene utilizzato in modo similare a quanto avviene con il tasto shift, che viene premuto in combinazione con un'altra lettera o simbolo per far sì che la tastiera generi uno dei 32 caratteri di controllo.
In questo caso la tastiera produce un codice che si trova 64 posizioni al disotto del codice del carattere della lettera maiuscola che è stata premuta (in pratica, viene posto a zero il bit 5). La pressione di "control" e della lettera "G" (codice 71), per esempio, produce il codice 7 (Bell), anche indicato a volte come ^G.
Le tastiere hanno anche dei tasti che da soli producono codici che appartengono ai caratteri di controllo. Ad esempio, il tasto "Backspace", che sulle tastiere italiane si trova sopra al tasto "Invio" ed è contrassegnato da una freccia lunga verso sinistra (←), produce il codice 8; il "Tab", contrassegnato da due frecce ciascuna con la punta verso una barretta verticale produce il codice 9, "Invio", "Enter" o "Return" il codice 13 (anche se talune tastiere producono il codice 10 per l'"Enter").
Le tastiere moderne hanno molti tasti che non corrispondono a caratteri ASCII o a caratteri di controllo, ad esempio i tasti cursore e le funzioni di elaborazione testo. Queste tastiere comunicano la pressione di questi tasti al computer cui sono collegate usando uno di questi tre metodi:
* appropriandosi allo scopo di caratteri di controllo altrimenti inutilizzati
* usando codifiche diverse dall'ASCII
* usando sequenze di controllo composte da più caratteri
Le tastiere collegate ai personal computer in genere usano uno (o entrambi) dei primi due metodi. I terminali di solito adottano il terzo.

## Suddivisione in famiglie

I caratteri di controllo vennero progettati per ricadere all'interno di alcuni gruppi: controllo della stampa, controllo delle strutture dati, controllo della trasmissione, e varie.

### Controllo della stampa

I caratteri di controllo della stampa indicano dove mettere il carattere successivo. Il "carriage return" indica l'inserimento del carattere all'inizio della linea (può o non può spostarsi sulla linea successiva). Il "line feed" indica l'inserimento del prossimo carattere sulla linea successiva (e può o non può posizionarsi all'inizio della stessa). Le tabuzioni orizzontali e verticali indicano alla stampante di muovere la testina sul successivo punto di tabulazione lungo la direzione di lettura. Il "form feed" posiziona all'inizio di un nuovo foglio. "Shift In" e "Shift Out" selezionano set di caratteri alternativi, font, sottolineature o altre modalità di stampa. Il "backspace" sposta la testina indietro di un carattere, di modo che la stampante possa effettuare una sovrascrittura per creare caratteri speciali.

### Controllo delle strutture dati

I caratteri di controllo di separazione (gruppo, record, ecc.) erano stati creati per strutturare i dati, normalmente su un nastro magnetico, in modo da simulare le schede perforate.
End of media (fine del supporto) avverte che il nastro (o simile) sta terminando.

### Controllo della trasmissione

I caratteri di controllo della trasmissione erano intesi a strutturare un pacchetto di dati e controllare quando ritrasmetterlo in caso di errore.
Lo "start of header" segnava la sezione priva di dati del pacchetto - la parte del messaggio che contiene l'indirizzo e altre informazioni utili alla trasmissione. Lo "start-of-text" segnava la fine dell'intestazione e l'inizio della parte contenente i dati. L'"End-of-text" segnava la fine del pacchetto. Una convenzione standard è quella di usare i due caratteri che precedono la fine del testo per il controllo di parità (CRC) del messaggio.
L'"escape" era pensato per essere posto davanti ad un valore binario all'interno di un messaggio, che poteva altrimenti essere interpretato come un carattere di controllo. Ad esempio, il valore per il 27 binario sarebbe stato "escape" "escape".
Il "substitute" era pensato per richiedere la traduzione del seguente carattere, dal carattere stampabile a valore binario, solitamente impostando a zero il quinto bit. Questo è comodo perché alcuni mezzi di trasmissione, trasmettono solo caratteri stampabili.
Il "cancel" avrebbe interrotto la trasmissione di un pacchetto. Il "negative acknowledge" richiedeva una ritrasmissione del pacchetto. L'"acknowledge" indicava che la trasmissione era stata ricevuta correttamente.
Quando il mezzo di trasmissione funzionava in half duplex (ovvero, può trasmettere solo in una direzione alla volta), si ha solitamente una stazione primaria che può trasmettere in ogni momento, e una secondaria che trasmette solo quando ne ha il permesso. L'"enquiry" veniva utilizzato dalla stazione primaria per richiedere alla stazione secondaria di inviare il suo messaggio successivo. Una stazione secondaria indicava di aver terminato la trasmissione inviando un "end of transmission".
I codici di controllo delle periferiche erano in origine generici, da definire differentemente per ogni apparato. Comunque, un bisogno universale della trasmissione dati e quello di richiedere al trasmittente di interrompere l'invio di dati, quando il ricevente non è in grado di accettarne altri. La Digital Equipment Corporation inventò la convenzione che utilizzava il 19, (device control 3, noto anche come control S, o "X-OFF") per fermare ("S"top) la trasmissione, e il 17, (device control 1, noto come control Q, o "X-ON") per avviarla. Questo permette ai produttori di controllare la trasmissione senza usare fili per il "transmission control" nel cavo per i dati. Questo permette di risparmiare e rende le operazioni più affidabili, riducendo il numero di connessioni presenti nel cavo.
Il "data link escape" dice all'altro capo del collegamento dati di terminare la sessione.

### Varie

Molti dei caratteri di controllo ASCII vennero progettati per periferiche dell'epoca, che non sono più utilizzate oggi. Ad esempio il codice 22, "Synchronous idle", veniva inviato dai modem sincroni (che devono inviare dati costantemente) quando non c'erano dati da trasmettere — i sistemi moderni usano tipicamente un bit di start per annunciare l'inizio di una trasmissione.
Il "Codice 0", "null", è un caso speciale. Nei nastri perforati indica il caso in cui non ci sono buchi. È conveniente trattarlo come un carattere inesistente.
Anche il "Codice 127" è un caso speciale. Il suo codice equivale al valore binario in cui tutti i bit sono impostati a 1, il che rendeva facile cancellare una parte di nastro perforato, un comune mezzo di memorizzazione dell'epoca, punzonando tutti i fori. Il nastro perforato divenne rapidamente obsoleto, quindi questa funzione non venne quasi mai usata. Ma siccome il suo codice si trova nell'intervallo occupato da altri caratteri stampabili, molti computer lo usarono come carattere stampabile addizionale (spesso come un quadrato completamente nero, utile per cancellare del testo sovrascrivendolo).

## Tavole

La tabella ASCII a 7 bit definisce 33 codici, da 0 a 31 e il 127 come caratteri di controllo.
Caratteri di controllo US-ASCII :
| Dec | Hex | Abbr | Nome del carattere |
| 00 | 0x00 | NUL | Null |
| 01 | 0x01 | SOH | Start of Heading |
| 02 | 0x02 | STX | Start of Text |
| 03 | 0x03 | ETX | End of Text |
| 04 | 0x04 | EOT | End of Transmission |
| 05 | 0x05 | ENQ | Enquiry |
| 06 | 0x06 | ACK | Acknowledge |
| 07 | 0x07 | BEL | Bell |
| 08 | 0x08 | BS | Backspace |
| 09 | 0x09 | HT | Horizontal Tab |
| 10 | 0x0A | LF | Line feed |
| 11 | 0x0B | VT | Vertical Tab |
| 12 | 0x0C | FF | Form feed |
| 13 | 0x0D | CR | Carriage return |
| 14 | 0x0E | SO | Shift Out |
| 15 | 0x0F | SI | Shift In |
| 16 | 0x10 | DLE | Data Link Escape |
| 17 | 0x11 | DC1 | Device Control 1 |
| 18 | 0x12 | DC2 | Device Control 2 |
| 19 | 0x13 | DC3 | Device Control 3 |
| 20 | 0x14 | DC4 | Device Control 4 |
| 21 | 0x15 | NAK | Negative Acknowledge |
| 22 | 0x16 | SYN | Synchronous Idle |
| 23 | 0x17 | ETB | End of Transmission Block |
| 24 | 0x18 | CAN | Cancel |
| 25 | 0x19 | EM | End of Medium |
| 26 | 0x1A | SUB | Substitute |
| 27 | 0x1B | ESC | Escape |
| 28 | 0x1C | FS | File Separator |
| 29 | 0x1D | GS | Group Separator |
| 30 | 0x1E | RS | Record Separator |
| 31 | 0x1F | US | Unit Separator |
| 127 | 0x7F | DEL | Rubout/Delete |
La tabella a 8-bit compatibile ISO-8859-1 mappa in aggiunta i 32 codici dalla posizione 128 alla 159, che sono inutilizzati nella specifica ISO/IEC 8859-1, assegnandoli a caratteri di controllo.
Control Characters in ISO-8859-* :
| Dec | Hex | Abbr | Nome del carattere |
| 128 | 0x80 | PAD | Padding Character |
| 129 | 0x81 | HOP | High Octet Preset |
| 130 | 0x82 | BPH | Break Permitted Here |
| 131 | 0x83 | NBH | No Break Here |
| 132 | 0x84 | IND | Index |
| 133 | 0x85 | NEL | Next Line |
| 134 | 0x86 | SSA | Start of Selected Area |
| 135 | 0x87 | ESA | End of Selected Area |
| 136 | 0x88 | HTS | Horizontal Tab Set |
| 137 | 0x89 | HTJ | Horizontal Tab Justified |
| 138 | 0x8A | VTS | Vertical Tab Set |
| 139 | 0x8B | PLD | Partial Line Forward |
| 140 | 0x8C | PLU | Partial Line Backward |
| 141 | 0x8D | RI | Reverse Line Feed |
| 142 | 0x8E | SS2 | Single-Shift 2 |
| 143 | 0x8F | SS3 | Single-Shift 3 |
| 144 | 0x90 | DCS | Device Control String |
| 145 | 0x91 | PU1 | Private Use 1 |
| 146 | 0x92 | PU2 | Private Use 2 |
| 147 | 0x93 | STS | Set Transmit State |
| 148 | 0x94 | CCH | Cancel Character |
| 149 | 0x95 | MW | Message Waiting |
| 150 | 0x96 | SPA | Start of Protected Area |
| 151 | 0x97 | EPA | End of Protected Area |
| 152 | 0x98 | SOS | Start of String |
| 153 | 0x99 | SGCI | Single Graphic Char Intro |
| 154 | 0x9A | SCI | Single Char Intro |
| 155 | 0x9B | CSI | Control Sequence Intro |
| 156 | 0x9C | ST | String Terminator |
| 157 | 0x9D | OSC | OS Command |
| 158 | 0x9E | PM | Private Message |
| 159 | 0x9F | APC | App Program Command |