diff third_party/libuv/docs/code/tty-gravity/main.c @ 160:948de3f54cea

[ThirdParty] Added libuv
author June Park <parkjune1995@gmail.com>
date Wed, 14 Jan 2026 19:39:52 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/third_party/libuv/docs/code/tty-gravity/main.c	Wed Jan 14 19:39:52 2026 -0800
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <uv.h>
+
+uv_loop_t *loop;
+uv_tty_t tty;
+uv_timer_t tick;
+uv_write_t write_req;
+int width, height;
+int pos = 0;
+char *message = "  Hello TTY  ";
+
+void update(uv_timer_t *req) {
+    char data[500];
+
+    uv_buf_t buf;
+    buf.base = data;
+    buf.len = sprintf(data, "\033[2J\033[H\033[%dB\033[%luC\033[42;37m%s",
+                            pos,
+                            (unsigned long) (width-strlen(message))/2,
+                            message);
+    uv_write(&write_req, (uv_stream_t*) &tty, &buf, 1, NULL);
+
+    pos++;
+    if (pos > height) {
+        uv_tty_reset_mode();
+        uv_timer_stop(&tick);
+    }
+}
+
+int main() {
+    loop = uv_default_loop();
+
+    uv_tty_init(loop, &tty, STDOUT_FILENO, 0);
+    uv_tty_set_mode(&tty, 0);
+    
+    if (uv_tty_get_winsize(&tty, &width, &height)) {
+        fprintf(stderr, "Could not get TTY information\n");
+        uv_tty_reset_mode();
+        return 1;
+    }
+
+    fprintf(stderr, "Width %d, height %d\n", width, height);
+    uv_timer_init(loop, &tick);
+    uv_timer_start(&tick, update, 200, 200);
+    return uv_run(loop, UV_RUN_DEFAULT);
+}