Skip to content

Commit 3270282

Browse files
committed
COMMON: remove invalid headers, cleanup termios
1 parent 3c32386 commit 3270282

File tree

5 files changed

+109
-98
lines changed

5 files changed

+109
-98
lines changed

configure.ac

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
dnl
22
dnl Configure script for SmallBASIC
33
dnl
4-
dnl Copyright(C) 2001-2015 Chris Warren-Smith.
4+
dnl Copyright(C) 2001-2016 Chris Warren-Smith.
55
dnl
66
dnl This program is distributed under the terms of the GPL v2.0
77
dnl Download the GNU Public License (GPL) from www.gnu.org
@@ -95,6 +95,23 @@ function checkPCRE() {
9595
fi
9696
}
9797

98+
function checkTermios() {
99+
AC_CHECK_HEADERS([termios.h], [have_termios_h=yes; break;])
100+
101+
case "${host_os}" in
102+
*mingw* | pw32* | cygwin*)
103+
have_termios_h="no"
104+
esac
105+
106+
if test x$ac_build_android = xyes; then
107+
have_termios_h="no"
108+
fi
109+
110+
if test "${have_termios_h}" = "yes" ; then
111+
AC_DEFINE(USE_TERM_IO, 1, [use the termios library.])
112+
fi
113+
}
114+
98115
function defaultConditionals() {
99116
AM_CONDITIONAL(WITH_CYGWIN_CONSOLE, false)
100117
}
@@ -332,6 +349,7 @@ else
332349
fi
333350

334351
checkPCRE
352+
checkTermios
335353
checkDebugMode
336354
checkForWindows
337355

src/common/device.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
#if !defined(_device_h)
2727
#define _device_h
2828

29+
#include "config.h"
30+
31+
#if USE_TERM_IO
32+
#include <termios.h>
33+
#endif
34+
2935
#include "common/sys.h"
3036
#include "common/var.h"
3137

src/common/fs_serial.c

Lines changed: 84 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -10,67 +10,92 @@
1010
#include "common/sys.h"
1111
#include "common/device.h"
1212
#include "common/pproc.h"
13-
14-
#include <errno.h>
15-
#include <dirent.h>
13+
#include "common/fs_stream.h"
14+
#include "common/fs_serial.h"
1615

1716
#if USE_TERM_IO
1817
#include <sys/time.h>
1918
#include <termios.h>
2019
#include <unistd.h>
21-
#endif
22-
23-
typedef int FileHand;
24-
25-
#include "common/fs_stream.h"
26-
#include "common/fs_serial.h"
20+
#include <sys/select.h>
21+
#include <errno.h>
2722

28-
/*
29-
*/
30-
int serial_open(dev_file_t * f) {
31-
#if USE_TERM_IO
32-
// /////////////////////////////////////////////////////////////////////////////////////////
33-
// Unix
23+
int serial_open(dev_file_t *f) {
3424
sprintf(f->name, "/dev/ttyS%d", f->port);
3525

3626
f->handle = open(f->name, O_RDWR | O_NOCTTY);
37-
if (f->handle < 0)
38-
err_file((f->last_error = errno));
39-
40-
tcgetattr(f->handle, &f->oldtio); /* save current port settings */
27+
if (f->handle < 0) {
28+
err_file((f->last_error = errno));
29+
}
30+
// save current port settings
31+
tcgetattr(f->handle, &f->oldtio);
4132
bzero(&f->newtio, sizeof(f->newtio));
4233
f->newtio.c_cflag = f->devspeed | CRTSCTS | CS8 | CLOCAL | CREAD;
4334
f->newtio.c_iflag = IGNPAR;
4435
f->newtio.c_oflag = 0;
4536

46-
/*
47-
* set input mode (non-canonical, no echo,...)
48-
*/
37+
// set input mode (non-canonical, no echo,...)
4938
f->newtio.c_lflag = 0;
50-
f->newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
51-
f->newtio.c_cc[VMIN] = 1; /* blocking read until 1 char received */
39+
f->newtio.c_cc[VTIME] = 0; // inter-character timer unused
40+
f->newtio.c_cc[VMIN] = 1; // blocking read until 1 char received
5241
tcflush(f->handle, TCIFLUSH);
5342
tcsetattr(f->handle, TCSANOW, &f->newtio);
5443
return (f->handle >= 0);
44+
}
5545

56-
#elif defined(_Win32) || defined(__CYGWIN__)
57-
// /////////////////////////////////////////////////////////////////////////////////////////
58-
// Win32
46+
int serial_close(dev_file_t *f) {
47+
tcsetattr(f->handle, TCSANOW, &f->oldtio);
48+
close(f->handle);
49+
f->handle = -1;
50+
return 1;
51+
}
52+
53+
int serial_write(dev_file_t *f, byte *data, dword size) {
54+
return stream_write(f, data, size);
55+
}
56+
57+
int serial_read(dev_file_t *f, byte *data, dword size) {
58+
return stream_read(f, data, size);
59+
}
60+
61+
// Returns the number of the available data on serial port
62+
dword serial_length(dev_file_t *f) {
63+
fd_set readfs;
64+
struct timeval tv;
65+
66+
FD_ZERO(&readfs);
67+
FD_SET(f->handle, &readfs);
68+
69+
tv.tv_usec = 250; // milliseconds
70+
tv.tv_sec = 0; // seconds
71+
72+
select(f->handle + 1, &readfs, NULL, NULL, &tv);
73+
if (FD_ISSET(f->handle, &readfs)) {
74+
return 1;
75+
}
76+
return 0;
77+
}
78+
79+
#elif defined(_Win32)
80+
typedef int FileHand;
81+
82+
int serial_open(dev_file_t *f) {
5983
DCB dcb;
6084
HANDLE hCom;
6185
DWORD dwer;
6286

6387
sprintf(f->name, "COM%d", f->port);
6488

6589
hCom = CreateFile(f->name, GENERIC_READ | GENERIC_WRITE,
66-
0, NULL, OPEN_EXISTING, 0, NULL);
90+
0, NULL, OPEN_EXISTING, 0, NULL);
6791

6892
if (hCom == INVALID_HANDLE_VALUE) {
6993
dwer = GetLastError();
70-
if (dwer != 5)
71-
rt_raise("SERIALFS: CreateFile() failed (%d)", dwer);
72-
else
73-
rt_raise("SERIALFS: ACCESS DENIED");
94+
if (dwer != 5) {
95+
rt_raise("SERIALFS: CreateFile() failed (%d)", dwer);
96+
} else {
97+
rt_raise("SERIALFS: ACCESS DENIED");
98+
}
7499
return 0;
75100
}
76101

@@ -91,96 +116,60 @@ int serial_open(dev_file_t * f) {
91116

92117
f->handle = (FileHand) hCom;
93118
return 1;
94-
#else
95-
// /////////////////////////////////////////////////////////////////////////////////////////
96-
// ERROR
97-
err_unsup();
98-
return 0; // failed
99-
#endif
100119
}
101120

102-
/*
103-
*/
104-
int serial_close(dev_file_t * f) {
105-
#if USE_TERM_IO
106-
tcsetattr(f->handle, TCSANOW, &f->oldtio);
107-
close(f->handle);
108-
f->handle = -1;
109-
return 1;
110-
111-
#elif defined(_Win32) || defined(__CYGWIN__) || defined(__MINGW32__)
121+
int serial_close(dev_file_t *f) {
112122
CloseHandle((HANDLE) f->handle);
113123
f->handle = -1;
114124
return 1;
115-
116-
#else
117-
return 0;
118-
#endif
119125
}
120126

121-
/*
122-
*/
123-
int serial_write(dev_file_t * f, byte * data, dword size) {
124-
#if defined(_UnixOS)
125-
return stream_write(f, data, size);
126-
#elif defined(_Win32)
127+
int serial_write(dev_file_t *f, byte *data, dword size) {
127128
DWORD bytes;
128-
129129
f->last_error = !WriteFile((HANDLE) f->handle, data, size, &bytes, NULL);
130130
return bytes;
131-
#else
132-
return 0;
133-
#endif
134131
}
135132

136-
/*
137-
*/
138-
int serial_read(dev_file_t * f, byte * data, dword size) {
139-
#if defined(_UnixOS)
140-
return stream_read(f, data, size);
141-
#elif defined(_Win32)
133+
int serial_read(dev_file_t *f, byte *data, dword size) {
142134
DWORD bytes;
143-
144135
f->last_error = !ReadFile((HANDLE) f->handle, data, size, &bytes, NULL);
145136
return bytes;
146-
#else
147-
return 0;
148-
#endif
149137
}
150138

151-
/*
152-
* Returns the number of the available data on serial port
153-
*/
154-
dword serial_length(dev_file_t * f) {
155-
#if defined(_UnixOS) && !defined(SERIAL_UNSUP)
156-
fd_set readfs;
157-
struct timeval tv;
139+
dword serial_length(dev_file_t *f) {
140+
COMSTAT cs;
141+
DWORD de = CE_BREAK;
142+
ClearCommError((HANDLE) f->handle, &de, &cs);
143+
return cs.cbInQue;
144+
}
158145

159-
FD_ZERO(&readfs);
160-
FD_SET(f->handle, &readfs);
146+
#else
161147

162-
tv.tv_usec = 250; /* milliseconds */
163-
tv.tv_sec = 0; /* seconds */
148+
int serial_open(dev_file_t *f) {
149+
err_unsup();
150+
}
164151

165-
select(f->handle + 1, &readfs, NULL, NULL, &tv);
166-
if (FD_ISSET(f->handle, &readfs))
167-
return 1;
152+
int serial_close(dev_file_t *f) {
153+
return 0;
154+
}
168155

156+
int serial_write(dev_file_t *f, byte *data, dword size) {
169157
return 0;
170-
#elif defined(_Win32)
171-
COMSTAT cs;
172-
DWORD de = CE_BREAK;
158+
}
173159

174-
ClearCommError((HANDLE) f->handle, &de, &cs);
175-
return cs.cbInQue;
176-
#else
160+
int serial_read(dev_file_t *f, byte *data, dword size) {
161+
return 0;
162+
}
163+
164+
dword serial_length(dev_file_t *f) {
177165
return 0;
178-
#endif
179166
}
180167

168+
#endif
169+
181170
/*
182-
* Returns true (EOF) if the connection is broken
171+
* Returns true (EOF) if the connection is broken
183172
*/
184-
dword serial_eof(dev_file_t * f) {
173+
dword serial_eof(dev_file_t *f) {
185174
return f->last_error;
186175
}

src/lib/search.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
// Totally public domain.
1111
//
1212

13-
#include <sys/cdefs.h>
1413
#include <assert.h>
1514
#include <stdlib.h>
1615
#include <stdio.h>

src/lib/search.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#ifndef _SEARCH_H_
88
#define _SEARCH_H_
99

10-
#include <sys/cdefs.h>
1110
#include <sys/types.h>
1211

1312
typedef enum {

0 commit comments

Comments
 (0)