diff options
| -rw-r--r-- | include/.gitkeep | 0 | ||||
| -rw-r--r-- | main.c3 | 49 | ||||
| -rw-r--r-- | project.json | 2 |
3 files changed, 48 insertions, 3 deletions
diff --git a/include/.gitkeep b/include/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/include/.gitkeep +++ /dev/null @@ -7,19 +7,50 @@ module main; import std::io; +import std::os; import rgfw; import rsgl; import rfont; +import libc::termios; -fn int main(String[] args) +faultdef FAIL_OPENPTY, FAIL_FORK; + +fn Window* init() { GlHints* hints = rgfw::getGlobalHints(); hints.major = 3; hints.minor = 3; hints.profile = GlProfile.COMPATIBILITY; rgfw::setGlobalHints(hints); + return rgfw::createWindow("window title", 0, 0, 800, 400, WindowFlags.CENTER | WindowFlags.NO_RESIZE | WindowFlags.OPENGL); +} + +fn int? init_tty() +{ + int master; + int slave; + if (openpty(&master, &slave, null, null, null) < 0) return FAIL_OPENPTY~; + Pid_t f = fork(); + switch (f) + { + case -1: + return FAIL_FORK~; + case 0: // child + dup2(slave, 0); + dup2(slave, 1); + dup2(slave, 2); + os::exit(execvp(getenv("SHELL"), {null})); + default: // parent + return master; + } +} + +fn int main(String[] args) +{ + init_tty()!!; + + Window* window = init(); - Window* window = rgfw::createWindow("window title", 0, 0, 800, 400, WindowFlags.CENTER | WindowFlags.NO_RESIZE | WindowFlags.OPENGL); rsgl::Renderer* renderer = rsgl::renderer_init(rsgl::gl::rendererProc(), &rgfw::getProcAddress); rsgl::renderer_viewport(renderer, rsgl::@rect(0,0,500,500)); @@ -52,3 +83,17 @@ fn int main(String[] args) return(0); } + +struct Winsize +{ + ushort ws_row; + ushort ws_column; + ushort ws_xpixel; + ushort ws_ypixel; +} + +extern fn CInt dup2(CInt, CInt); +extern fn CInt execvp(ZString, ZString[]); +extern fn Pid_t fork(); +extern fn ZString getenv(ZString); +extern fn CInt openpty(CInt*, CInt*, ZString, Termios*, Winsize*); diff --git a/project.json b/project.json index 0912679..215004b 100644 --- a/project.json +++ b/project.json @@ -5,13 +5,13 @@ "version": "0.1.0", "build-dir": "build", "output": "build", + "dependency-search-paths": [ "lib" ], "targets": { "c3term-linux-x64": { "name": "c3term", "type": "executable", "target": "linux-x64", "sources": [ "main.c3" ], - "dependency-search-paths": [ "lib" ], "c-sources": [ "shim.c", "wl", // wayland-generated code |
