int ttgetc() { ttflsh(); if(have) have=0; else if(read(fileno(term),&havec,1)<1) ttsig(0); return havec; }
void *joe_realloc(void *ptr,size_t size) { void *p = realloc(ptr, size); if (!p) ttsig(-1); return p; }
void *joe_calloc(size_t nmemb,size_t size) { void *p = calloc(nmemb, size); if (!p) ttsig(-1); return p; }
void *joe_malloc(size_t size) { void *p = malloc(size); if (!p) ttsig(-1); return p; }
int ttgetc() { char c; ttflsh(); if(read(fileno(term),&c,1)<1) ttsig(0); have=0; return c; }
int ttgetc(void) { int stat; long new_time; int flg; tickon(); loop: flg = 0; /* Status line clock */ new_time = time(NULL); if (new_time != last_time) { last_time = new_time; dostaupd = 1; ticked = 1; } /* Autoscroller */ if (auto_scroll && mnow() >= auto_trig_time) { do_auto_scroll(); ticked = 1; flg = 1; } ttflsh(); while (winched) { winched = 0; edupd(1); ttflsh(); } if (ticked) { edupd(flg); ttflsh(); tickon(); } if (ackkbd != -1) { if (!have) { /* Wait for input */ stat = read(mpxfd, &pack, sizeof(struct packet) - 1024); if (pack.size && stat > 0) { joe_read(mpxfd, pack.data, pack.size); } else if (stat < 1) { if (winched || ticked) goto loop; else ttsig(0); } acceptch = pack.ch; } have = 0; if (pack.who) { /* Got bknd input */ if (acceptch != NO_MORE_DATA) { if (pack.who->func) { pack.who->func(pack.who->object, pack.data, pack.size); edupd(1); } } else mpxdied(pack.who); goto loop; } else { if (acceptch != NO_MORE_DATA) { tickoff(); return acceptch; } else { tickoff(); ttsig(0); return 0; } } } if (have) { have = 0; } else { if (read(fileno(termin), &havec, 1) < 1) { if (winched || ticked) goto loop; else ttsig(0); } } tickoff(); return havec; }