mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-18 16:40:32 +00:00
Make improvements
This commit is contained in:
parent
3e4fd4b0ad
commit
e44a0cf6f8
256 changed files with 23100 additions and 2294 deletions
136
examples/acid2.c
136
examples/acid2.c
|
@ -1,136 +0,0 @@
|
|||
#if 0
|
||||
/*─────────────────────────────────────────────────────────────────╗
|
||||
│ To the extent possible under law, Justine Tunney has waived │
|
||||
│ all copyright and related or neighboring rights to this file, │
|
||||
│ as it is written in the following disclaimers: │
|
||||
│ • http://unlicense.org/ │
|
||||
│ • http://creativecommons.org/publicdomain/zero/1.0/ │
|
||||
╚─────────────────────────────────────────────────────────────────*/
|
||||
#endif
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/ioctl.h"
|
||||
#include "libc/calls/struct/termios.h"
|
||||
#include "libc/fmt/fmt.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/sysv/consts/termios.h"
|
||||
|
||||
int yn2, xn2;
|
||||
int yn3, xn3;
|
||||
char b[128], inbuf[128];
|
||||
int y, x, yn, xn, my, mx;
|
||||
struct termios term, oldterm;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int i;
|
||||
setvbuf(stdout, inbuf, _IONBF, 128); /* make things slower */
|
||||
|
||||
/* raw mode */
|
||||
ioctl(1, TCGETS, &oldterm);
|
||||
memcpy(&term, &oldterm, sizeof(term));
|
||||
term.c_cc[VMIN] = 1;
|
||||
term.c_cc[VTIME] = 1;
|
||||
term.c_iflag &= ~(INPCK | ISTRIP | PARMRK | INLCR | IGNCR | ICRNL | IXON);
|
||||
term.c_lflag &= ~(IEXTEN | ICANON | ECHO | ECHONL);
|
||||
term.c_cflag &= ~(CSIZE | PARENB);
|
||||
term.c_oflag &= ~OPOST;
|
||||
term.c_cflag |= CS8;
|
||||
term.c_iflag |= IUTF8;
|
||||
ioctl(1, TCSETSF, &term);
|
||||
|
||||
/* get cursor position and display dimensions */
|
||||
printf("\e7\e[6n\e[9979;9979H\e[6n\e8");
|
||||
read(0, b, sizeof(b));
|
||||
sscanf(b, "\e[%d;%dR\e[%d;%dR", &y, &x, &yn, &xn);
|
||||
|
||||
printf("\e[1q"); /* turn on led one */
|
||||
printf("\e[2J"); /* clear display */
|
||||
printf("\e#8"); /* fill display with E's */
|
||||
printf("\e[H");
|
||||
|
||||
/* clear display again */
|
||||
printf("\e[2q"); /* turn on led two */
|
||||
for (i = 0; i < yn; ++i) {
|
||||
if (i) printf("\n");
|
||||
printf(" ");
|
||||
printf("\e[0K");
|
||||
}
|
||||
for (i = 0; i < yn - 1; ++i) {
|
||||
if (i) printf("\eM");
|
||||
printf("\e[1K");
|
||||
}
|
||||
|
||||
printf("\e(0"); /* line drawing mode */
|
||||
printf("\e[3q"); /* turn on led three */
|
||||
printf("\e[H");
|
||||
|
||||
/* move to center */
|
||||
my = yn / 2;
|
||||
mx = xn / 2 - 7;
|
||||
if (y > my) {
|
||||
printf("\e[%dA", y - my);
|
||||
} else if (y < my) {
|
||||
printf("\e[%dB", my - y);
|
||||
}
|
||||
if (x > mx) {
|
||||
printf("\e[%dD", x - mx);
|
||||
} else if (x < mx) {
|
||||
printf("\e[%dC", mx - x);
|
||||
}
|
||||
|
||||
printf("\e[90;103m"); /* black on yellow */
|
||||
printf("\e[90;103ma ` a"); /* draw nose */
|
||||
|
||||
printf("\e[0m"); /* reset style */
|
||||
printf("\e(B"); /* ascii mode */
|
||||
|
||||
/* draw corners */
|
||||
printf("\e[H"); /* top left */
|
||||
printf("A");
|
||||
printf("\e[9979C"); /* rightmost */
|
||||
printf("B");
|
||||
printf("\e[9979;9979H"); /* bottom right corner */
|
||||
printf("\e[C"); /* move right gets clamped */
|
||||
printf("D"); /* write, set redzone flag */
|
||||
printf("\e[2A"); /* move up, unsets redzone */
|
||||
|
||||
/* gnu screen now reports out of bounds position */
|
||||
/* kitty hasnt got a redzone reporting next line */
|
||||
printf("\e[6n");
|
||||
read(0, b, sizeof(b));
|
||||
sscanf(b, "\e[%d;%dR", &yn2, &xn2);
|
||||
|
||||
/* writes to (yn-3,xn-1) normally and (yn-2,0) in gnu screen */
|
||||
printf("!");
|
||||
|
||||
/* draw ruler on top */
|
||||
printf("\e[H");
|
||||
for (i = 8; i + 1 < xn; i += 8) {
|
||||
printf("\e[%dG%d", i + 1, i); /* set column */
|
||||
}
|
||||
|
||||
printf("\e[9979;9979H"); /* bottom right */
|
||||
printf("\e[9979D"); /* leftmost */
|
||||
printf("C");
|
||||
|
||||
/* let's break gnu screen again with multimonospace redzone */
|
||||
printf("\e[%d;9979H", yn / 2); /* right middle */
|
||||
printf("\e[D"); /* left */
|
||||
printf("A");
|
||||
printf("\e[6n");
|
||||
read(0, b, sizeof(b));
|
||||
sscanf(b, "\e[%d;%dR", &yn2, &xn2);
|
||||
|
||||
printf("\e[%dH", yn / 2);
|
||||
printf("%d %d vs. %d %d\r\n", yn, xn, yn2, xn2);
|
||||
printf("%d %d vs. %d %d\r\n", yn / 2, xn, yn2, xn2);
|
||||
printf("\e#6double width\e#5\r\n");
|
||||
printf("\e[3mthis text is so \e[1mitalic\e[0m\r\n");
|
||||
printf("\e[1;20mpress any fraktur exit\e[0m");
|
||||
printf("\a");
|
||||
|
||||
read(0, b, sizeof(b));
|
||||
printf("\r\n");
|
||||
ioctl(1, TCSETS, &oldterm);
|
||||
return 0;
|
||||
}
|
|
@ -33,7 +33,6 @@
|
|||
* - libc/nexgen32e/bsf.h
|
||||
* - libc/nexgen32e/tzcnt.h
|
||||
* - libc/nexgen32e/cpuid4.internal.h
|
||||
* - libc/nexgen32e/tinystrcmp.internal.h
|
||||
* - https://gist.github.com/jart/fe8d104ef93149b5ba9b72912820282c
|
||||
*/
|
||||
|
||||
|
|
|
@ -16,13 +16,13 @@
|
|||
#include "libc/stdio/stdio.h"
|
||||
#include "libc/time/time.h"
|
||||
|
||||
noinline void dostuff(void) {
|
||||
noinline void dostuff(const char *s) {
|
||||
int i, us;
|
||||
srand(rand64()); /* seeds rand() w/ intel rdrnd, auxv, etc. */
|
||||
for (i = 0; i < 5; ++i) {
|
||||
us = rand() % 500000;
|
||||
usleep(us);
|
||||
printf("%s%u%s%u [%s=%d]\n", "hello no. ", i, " from ", getpid(), "us", us);
|
||||
printf("hello no. %u from %s %u [us=%d]\n", i, s, getpid(), us);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
@ -32,13 +32,14 @@ int main(int argc, char *argv[]) {
|
|||
CHECK_NE(-1, (child = fork()));
|
||||
if (!child) {
|
||||
/* child process */
|
||||
dostuff();
|
||||
dostuff("child");
|
||||
return 0;
|
||||
} else {
|
||||
/* parent process */
|
||||
dostuff();
|
||||
dostuff("parent");
|
||||
/* note: abandoned children become zombies */
|
||||
CHECK_NE(-1, (rc = wait(&wstatus)));
|
||||
return WEXITSTATUS(wstatus);
|
||||
CHECK_EQ(0, WEXITSTATUS(wstatus));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
/ @see also glibc static binaries which start at 800kb!!!
|
||||
/ @see also go where interfaces sadly disempower ld prune
|
||||
/ @see also the stl where bad linkage is due to tech debt
|
||||
/ @see libc/macros-cpp.inc forthe getstr macro definition
|
||||
/ @note libc/elf/elf.lds can be tinier with page align off
|
||||
/ @note gas is more powerful than nasm due to rms notation
|
||||
/ @noreturn
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue