Example #1
0
int ttgetc()
{
ttflsh();
if(have) have=0;
else if(read(fileno(term),&havec,1)<1) ttsig(0);
return havec;
}
Example #2
0
void *joe_realloc(void *ptr,size_t size)
{
	void *p = realloc(ptr, size);
	if (!p)
		ttsig(-1);
	return p;
}
Example #3
0
void *joe_calloc(size_t nmemb,size_t size)
{
	void *p = calloc(nmemb, size);
	if (!p)
		ttsig(-1);
	return p;
}
Example #4
0
void *joe_malloc(size_t size)
{
	void *p = malloc(size);
	if (!p)
		ttsig(-1);
	return p;
}
Example #5
0
int ttgetc()
{
    char c;
    ttflsh();
    if(read(fileno(term),&c,1)<1) ttsig(0);
    have=0;
    return c;
}
Example #6
0
File: tty.c Project: Distrotech/joe
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;
}