This repository has been archived by the owner on Jun 16, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtraccia_car_codici_immediato.cpp
95 lines (78 loc) · 2.18 KB
/
traccia_car_codici_immediato.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
Partendo dal frammento di programma di seguito fornito, scrivere un
programma che legge e stampa i codici di tutti i caratteri letti in
ingresso, senza dover aspettare l'imissione del newline, finche' non
viene immesso il carattere -
Un possibile output sullo schermo e' il seguente:
Inserisci un carattere e
Il codice ASCII del carattere e' 101
Inserisci un carattere
Il codice ASCII del carattere e' 32
Inserisci un carattere ,
Il codice ASCII del carattere e' 44
Inserisci un carattere
Il codice ASCII del carattere e' 10
Inserisci un carattere -
Il codice ASCII del carattere e' 45
*/
/*
* Segue il frammento di programma da cui partire
*
* Per lo svolgimento dell'esercizio non e' di nessuna importanza
* capire come si ottiene il cambio di modalita' del terminale. Quello
* che va fatto e' solo scrivere le righe mancanti!
*/
#include <iostream>
#include <stdio.h>
#include <termios.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std ;
/*
* Configura il terminale in modo non canonico
*/
void vai_in_modo_non_canonico()
{
struct termios nuovo ;
if (tcgetattr(STDIN_FILENO, &nuovo) < 0) {
cout<<"Salvataggio modo terminale fallito"<<endl ;
exit(1) ;
}
nuovo.c_lflag &= ~ICANON ;
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &nuovo) < 0) {
cout<<"Settaggio modo terminale fallito"<<endl ;
exit(1) ;
}
}
void salva_modo_terminale(termios &modo)
{
if (tcgetattr(STDIN_FILENO, &modo) < 0) {
cout<<"Salvataggio modo terminale fallito" ;
exit(1) ;
}
}
void assegna_modo_terminale(termios &modo)
{
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &modo) < 0) {
cout<<"Salvataggio modo terminale fallito" ;
exit(1) ;
}
}
int main()
{
termios vecchio_modo_terminale ;
// si salva la modalita' corrente per ripristinarla al termine del
// programma
salva_modo_terminale(vecchio_modo_terminale) ;
vai_in_modo_non_canonico() ;
char c;
do {
cout << "Carattere: ";
cin >> noskipws >> c;
cout << endl << "Valore: " << static_cast<int>(c) << endl;
} while (c != '-');
// qui il terminale viene riportato nella modalita' precedente
assegna_modo_terminale(vecchio_modo_terminale) ;
return 0 ;
}