kf: linux console for I/O
This commit is contained in:
parent
708e812049
commit
0d2758a994
|
@ -36,7 +36,9 @@ ltmain.sh
|
||||||
m4/
|
m4/
|
||||||
missing
|
missing
|
||||||
|
|
||||||
ch??ex??
|
# build artifacts
|
||||||
|
ods/src/ch??ex??
|
||||||
*_test
|
*_test
|
||||||
*.la
|
*.la
|
||||||
*_bench
|
*_bench
|
||||||
|
misc/kf/kf
|
||||||
|
|
|
@ -5,5 +5,5 @@ compilers:
|
||||||
targets:
|
targets:
|
||||||
cc:
|
cc:
|
||||||
kf:
|
kf:
|
||||||
- io.cc
|
- interface.cc
|
||||||
- kf.cc
|
- kf.cc
|
|
@ -0,0 +1,3 @@
|
||||||
|
#ifdef __linux__
|
||||||
|
#include "io-linux.cc"
|
||||||
|
#endif
|
|
@ -0,0 +1,62 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include "io.h"
|
||||||
|
#include "io-linux.h"
|
||||||
|
|
||||||
|
char
|
||||||
|
Console::rdch()
|
||||||
|
{
|
||||||
|
char ch;
|
||||||
|
std::cin >> ch;
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Console::wrch(char c)
|
||||||
|
{
|
||||||
|
std::cout << c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Console::rdbuf(char *buf, size_t len, bool stopat, char stopch)
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
while (n < len) {
|
||||||
|
std::cin >> ch;
|
||||||
|
if (stopat && stopch == ch) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[n] = ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Console::wrbuf(char *buf, size_t len)
|
||||||
|
{
|
||||||
|
for (size_t n = 0; n < len; n++) {
|
||||||
|
std::cout << buf[n];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Line I/O
|
||||||
|
bool
|
||||||
|
Console::rdln(char *buf, size_t len) {
|
||||||
|
size_t n = 0;
|
||||||
|
char ch;
|
||||||
|
bool line = false;
|
||||||
|
|
||||||
|
while (n < len) {
|
||||||
|
std::cin >> ch;
|
||||||
|
if (ch == 0xa) {
|
||||||
|
line = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[n] = ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
return line;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef __KF_IO_LINUX_H__
|
||||||
|
#define __KF_IO_LINUX_H__
|
||||||
|
|
||||||
|
#include "io.h"
|
||||||
|
|
||||||
|
class Console : public IO {
|
||||||
|
public:
|
||||||
|
~Console() {};
|
||||||
|
char rdch(void);
|
||||||
|
void wrch(char c);
|
||||||
|
|
||||||
|
// Buffer I/O.
|
||||||
|
void rdbuf(char *buf, size_t len, bool stopat, char stopch);
|
||||||
|
void wrbuf(char *buf, size_t len);
|
||||||
|
|
||||||
|
// Line I/O
|
||||||
|
bool rdln(char *buf, size_t len);
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __KF_IO_LINUX_H__
|
19
misc/kf/io.h
19
misc/kf/io.h
|
@ -3,8 +3,25 @@
|
||||||
|
|
||||||
// TODO(kyle): make this selectable by architecture.
|
// TODO(kyle): make this selectable by architecture.
|
||||||
|
|
||||||
class IO {
|
#ifdef __linux__
|
||||||
|
#include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class IO {
|
||||||
|
public:
|
||||||
|
// Virtual destructor is required in all ABCs.
|
||||||
|
virtual ~IO() {};
|
||||||
|
|
||||||
|
// Building block methods.
|
||||||
|
virtual char rdch(void) = 0;
|
||||||
|
virtual void wrch(char c) = 0;
|
||||||
|
|
||||||
|
// Buffer I/O.
|
||||||
|
virtual void rdbuf(char *buf, size_t len, bool stopat, char stopch) = 0;
|
||||||
|
virtual void wrbuf(char *buf, size_t len) = 0;
|
||||||
|
|
||||||
|
// Line I/O
|
||||||
|
virtual bool rdln(char *buf, size_t len) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __KF_IO_H__
|
#endif // __KF_IO_H__
|
|
@ -1,8 +1,26 @@
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
|
#ifdef __linux__
|
||||||
|
#include "linux.h"
|
||||||
|
#endif // __linux__
|
||||||
|
|
||||||
|
static void
|
||||||
|
repl(IO &interface)
|
||||||
|
{
|
||||||
|
static char lbuf[81];
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
interface.rdln(lbuf, 80);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
Console interface;
|
||||||
|
#endif
|
||||||
|
repl(interface);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef __KF_LINUX_H__
|
||||||
|
#define __KF_LINUX_H__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// build support for linux
|
||||||
|
#include "io-linux.h"
|
||||||
|
|
||||||
|
constexpr uint8_t STACK_SIZE = 128;
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __KF_LINUX_H__
|
Loading…
Reference in New Issue