X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=std.c;h=1b918f557096f6273fdb14a2a1e4caa088da7915;hb=47d8633f157156ef4701ce71ed7eff766206c107;hp=0dae5c2ccf98b9dcc09b00a37fc7044086d3c28d;hpb=5d055fdc7cb441162f4ff5b67d0cbf6c58439d10;p=st.git diff --git a/std.c b/std.c index 0dae5c2..1b918f5 100644 --- a/std.c +++ b/std.c @@ -25,7 +25,7 @@ void eprintn(const char *errstr, ...); void getpty(void); void movea(int x, int y); void mover(int x, int y); -void parse(void); +void parseesc(void); void scroll(int l); void shell(void); void sigchld(int n); @@ -97,38 +97,6 @@ eprintn(const char *errstr, ...) { exit(EXIT_FAILURE); } -void -getpty(void) { - char *ptsdev; - -#if defined(_GNU_SOURCE) - ptm = getpt(); -#elif _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 - ptm = posix_openpt(O_RDWR); -#else - ptm = open("/dev/ptmx", O_RDWR); - if(ptm == -1) - if(openpty(&ptm, &pts, NULL, NULL, NULL) == -1) - eprintn("error, cannot open pty"); -#endif -#if defined(_XOPEN_SOURCE) - if(ptm != -1) { - if(grantpt(ptm) == -1) - eprintn("error, cannot grant access to pty"); - if(unlockpt(ptm) == -1) - eprintn("error, cannot unlock pty"); - ptsdev = ptsname(ptm); - if(!ptsdev) - eprintn("error, slave pty name undefined"); - pts = open(ptsdev, O_RDWR); - if(pts == -1) - eprintn("error, cannot open slave pty"); - } - else - eprintn("error, cannot open pty"); -#endif -} - void movea(int x, int y) { x = MAX(x, cols); @@ -312,5 +280,18 @@ main(int argc, char *argv[]) { eprint("usage: st [-v]\n"); getpty(); shell(); + fptm = fdopen(ptm, "r+"); + if(!fptm) + eprintn("cannot open slave pty"); + for(;;) { + c = getc(fptm); + switch(c) { + case '\033': + parseesc(); + break; + default: + putchar(c); + } + } return 0; }