-
Notifications
You must be signed in to change notification settings - Fork 43
/
print_sequences.ml
56 lines (51 loc) · 1.28 KB
/
print_sequences.ml
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
(*
* print_sequences.ml
* ------------------
* Copyright : (c) 2012, Jeremie Dimino <jeremie@dimino.org>
* Licence : BSD3
*
* This file is a part of Lambda-Term.
*)
(* Script to print sequences returned by the terminal. You can execute
it like this:
# ocaml print_sequences.ml
*)
#load "unix.cma";;
let () =
(* Setup terminal attributes. *)
let attr = Unix.tcgetattr Unix.stdin in
Unix.tcsetattr Unix.stdin Unix.TCSAFLUSH {
attr with
Unix.c_brkint = false;
Unix.c_inpck = false;
Unix.c_istrip = false;
Unix.c_ixon = false;
Unix.c_csize = 8;
Unix.c_parenb = false;
Unix.c_echo = false;
Unix.c_icanon = false;
Unix.c_vmin = 1;
Unix.c_vtime = 0;
Unix.c_isig = false;
};
(* Read and print key sequences. *)
print_endline "press 'q' to quit";
let buf = Bytes.create 128 in
let rec loop () =
let n = Unix.read Unix.stdin buf 0 (Bytes.length buf) in
let s = Bytes.to_string (Bytes.sub buf 0 n) in
print_endline (String.escaped s);
if s <> "q" then loop ()
in
let result =
try
loop ();
`OK
with exn ->
`Exn exn
in
(* Reset terminal attributes. *)
Unix.tcsetattr Unix.stdin Unix.TCSAFLUSH attr;
match result with
| `OK -> ()
| `Exn exn -> raise exn