From 56d74ddbb524514de70902b39341ec41dc15074a Mon Sep 17 00:00:00 2001
From: Peder Refsnes <peder.refsnes@gmail.com>
Date: Tue, 3 Jun 2014 10:57:54 +0200
Subject: [PATCH] Check for termios ispeed and ospeed
The struct termios contains two fields; ispeed and ospeed, that are
not always present (ie. the bionic c lib for android). This patch adds
tests to see if _HAVE_STRUCT_TERMIOS_C_ISPEED and
_HAVE_STRUCT_TERMIOS_C_OSPEED are defined using the feature-test egg.
When the tests fail getters and setters will be defined that return #f.
---
stty-features.scm | 10 ++++++++++
stty.meta | 2 +-
stty.scm | 37 +++++++++++++++++++++++++++----------
stty.setup | 4 +++-
4 files changed, 41 insertions(+), 12 deletions(-)
create mode 100644 stty-features.scm
diff --git a/stty-features.scm b/stty-features.scm
new file mode 100644
index 0000000..abf0d64
-
|
+
|
|
| 1 | (use feature-test) |
| 2 | |
| 3 | #> #include <termios.h><# |
| 4 | |
| 5 | (declaration-prefix SCM) |
| 6 | (registration-prefix "") |
| 7 | |
| 8 | (define-foreign-features |
| 9 | _HAVE_STRUCT_TERMIOS_C_ISPEED |
| 10 | _HAVE_STRUCT_TERMIOS_C_OSPEED) |
diff --git a/stty.meta b/stty.meta
index d6e49ff..ff7a420 100644
a
|
b
|
|
2 | 2 | |
3 | 3 | ( |
4 | 4 | (egg "stty.egg") |
5 | | (needs setup-helper foreigners) |
| 5 | (needs setup-helper foreigners feature-test) |
6 | 6 | (synopsis "stty-style interface to termios") |
7 | 7 | (category io) |
8 | 8 | (license "BSD") |
diff --git a/stty.scm b/stty.scm
index 938dbc8..481c274 100644
a
|
b
|
|
83 | 83 | (declare (foreign-declare "#include <termios.h>\n")) |
84 | 84 | (declare (foreign-declare "typedef struct termios struct_termios;\n")) |
85 | 85 | |
86 | | (define-foreign-record-type (term-attrs struct_termios) |
87 | | (constructor: make-term-attrs) |
88 | | (destructor: free-term-attrs) |
89 | | (unsigned-long c_iflag term-attrs-iflag term-attrs-iflag-set!) |
90 | | (unsigned-long c_oflag term-attrs-oflag term-attrs-oflag-set!) |
91 | | (unsigned-long c_cflag term-attrs-cflag term-attrs-cflag-set!) |
92 | | (unsigned-long c_lflag term-attrs-lflag term-attrs-lflag-set!) |
93 | | (unsigned-char (c_cc 22) term-attrs-cc term-attrs-cc-set!) |
94 | | (unsigned-long c_ispeed term-attrs-ispeed term-attrs-ispeed-set!) |
95 | | (unsigned-long c_ospeed term-attrs-ospeed term-attrs-ospeed-set!) |
| 86 | (cond-expand |
| 87 | ((and _HAVE_STRUCT_TERMIOS_C_ISPEED _HAVE_STRUCT_TERMIOS_C_OSPEED) |
| 88 | (define-foreign-record-type (term-attrs struct_termios) |
| 89 | (constructor: make-term-attrs) |
| 90 | (destructor: free-term-attrs) |
| 91 | (unsigned-long c_iflag term-attrs-iflag term-attrs-iflag-set!) |
| 92 | (unsigned-long c_oflag term-attrs-oflag term-attrs-oflag-set!) |
| 93 | (unsigned-long c_cflag term-attrs-cflag term-attrs-cflag-set!) |
| 94 | (unsigned-long c_lflag term-attrs-lflag term-attrs-lflag-set!) |
| 95 | (unsigned-char (c_cc 22) term-attrs-cc term-attrs-cc-set!) |
| 96 | (unsigned-long c_ispeed term-attrs-ispeed term-attrs-ispeed-set!) |
| 97 | (unsigned-long c_ospeed term-attrs-ospeed term-attrs-ospeed-set!) |
| 98 | ) |
96 | 99 | ) |
| 100 | (else |
| 101 | (define-foreign-record-type (term-attrs struct_termios) |
| 102 | (constructor: make-term-attrs) |
| 103 | (destructor: free-term-attrs) |
| 104 | (unsigned-long c_iflag term-attrs-iflag term-attrs-iflag-set!) |
| 105 | (unsigned-long c_oflag term-attrs-oflag term-attrs-oflag-set!) |
| 106 | (unsigned-long c_cflag term-attrs-cflag term-attrs-cflag-set!) |
| 107 | (unsigned-long c_lflag term-attrs-lflag term-attrs-lflag-set!) |
| 108 | (unsigned-char (c_cc 22) term-attrs-cc term-attrs-cc-set!)) |
| 109 | (define term-attrs-ispeed (lambda (_) #f)) |
| 110 | (define term-attrs-ispeed-set! (lambda (_ _) #f)) |
| 111 | (define term-attrs-ospeed (lambda (_) #f)) |
| 112 | (define term-attrs-ospeed-set! (lambda (_ _) #f)) |
| 113 | )) |
97 | 114 | |
98 | 115 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
99 | 116 | ;; constants |
diff --git a/stty.setup b/stty.setup
index f1d9fcf..8e995e5 100644
a
|
b
|
|
| 1 | (compile stty-features.scm) |
| 2 | (run (./stty-features > stty-config.scm)) |
1 | 3 | |
2 | | (compile -shared -O2 -j stty stty.scm) |
| 4 | (compile -shared -O2 -j stty -X stty-config.scm stty.scm) |
3 | 5 | (compile -shared -O2 stty.import.scm) |
4 | 6 | |
5 | 7 | (install-extension 'stty |