platform-headers := \
unistd.h \
+ termios.h \
pi.h \
ack/config.h
kill.c \
lseek.c \
time.c \
- signal.c
+ signal.c \
+ tcgetattr.c \
+ tcsetattr.c
$(eval $(call build-platform))
--- /dev/null
+/*
+ * Raspberry Pi support library for the ACK
+ * © 2013 David Given
+ * This file is redistributable under the terms of the 3-clause BSD license.
+ * See the file 'Copying' in the root of the distribution for the full text.
+ */
+
+#ifndef _TERMIOS_H
+#define _TERMIOS_H
+
+typedef unsigned char tcflag_t;
+
+struct termios
+{
+ tcflag_t c_iflag;
+ tcflag_t c_oflag;
+ tcflag_t c_lflag;
+};
+
+#define ONLCR 1
+#define ECHO 2
+#define INLCR 4
+
+#define TCSANOW 0
+#define TCSADRAIN 1
+#define TCSAFLUSH 2
+
+extern int tcgetattr(int fd, struct termios* t);
+extern int tcsetattr(int fd, int actions, struct termios* t);
+
+#endif
extern void _sys_write_tty(char c);
-/* extern int _sys_ttyflags; */
+extern int _sys_ttyflags;
#endif
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
+#include <termios.h>
#include "libsys.h"
int read(int fd, void* buffer, size_t count)
/* Read one byte. */
i = _sys_rawread();
-#if 0
- if ((i == '\r') && !(_sys_ttyflags & RAW))
+ if ((i == '\r') && !(_sys_ttyflags & INLCR))
i = '\n';
if (_sys_ttyflags & ECHO)
_sys_write_tty(i);
-#endif
- if (i == '\r')
- i = '\n';
- _sys_write_tty(i);
-
+
*(char*)buffer = i;
return 1;
}
--- /dev/null
+/*
+ * Raspberry Pi support library for the ACK
+ * © 2013 David Given
+ * This file is redistributable under the terms of the 3-clause BSD license.
+ * See the file 'Copying' in the root of the distribution for the full text.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <termios.h>
+#include "libsys.h"
+
+int tcgetattr(int fd, struct termios* t)
+{
+ t->c_iflag = _sys_ttyflags & INLCR;
+ t->c_oflag = _sys_ttyflags & ONLCR;
+ t->c_lflag = _sys_ttyflags & ECHO;
+ return 0;
+}
+
--- /dev/null
+/*
+ * Raspberry Pi support library for the ACK
+ * © 2013 David Given
+ * This file is redistributable under the terms of the 3-clause BSD license.
+ * See the file 'Copying' in the root of the distribution for the full text.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <termios.h>
+#include "libsys.h"
+
+int tcsetattr(int fd, int actions, struct termios* t)
+{
+ _sys_ttyflags = t->c_iflag | t->c_oflag | t->c_lflag;
+ return 0;
+}
+
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
+#include <termios.h>
#include "libsys.h"
+int _sys_ttyflags = ONLCR | INLCR | ECHO;
+
void _sys_write_tty(char c)
{
_sys_rawwrite(c);
-#if 0
- if ((c == '\n') && !(_sys_ttyflags & RAW))
- _sys_rawwrite('\r');
-#endif
- if (c == '\n')
+ if ((c == '\n') && (_sys_ttyflags & ONLCR))
_sys_rawwrite('\r');
}