static unsigned long phosphor_draw (Display *dpy, Window window, void *closure) { p_state *state = (p_state *) closure; update_display (state, True); decay (state); drain_input (state); return state->delay; }
/* Returns a newly-allocated string with one word in it, or NULL if there is no complete word available. */ static char * get_word_text (state *s) { char *start = s->buf; char *end; char *result = 0; int lfs = 0; drain_input (s); if (unread_word_text) { start = unread_word_text; unread_word_text = 0; return start; } /* Skip over whitespace at the beginning of the buffer, and count up how many linebreaks we see while doing so. */ while (*start && (*start == ' ' || *start == '\t' || *start == '\r' || *start == '\n')) { if (*start == '\n' || (*start == '\r' && start[1] != '\n')) lfs++; start++; } end = start; /* If we saw a blank line, then return NULL (treat it as a temporary "eof", to trigger a sentence break here.) */ if (lfs >= 2) goto DONE; /* Skip forward to the end of this word (find next whitespace.) */ while (*end && (! (*end == ' ' || *end == '\t' || *end == '\r' || *end == '\n'))) end++; /* If we have a word, allocate a string for it */ if (end > start) { result = malloc ((end - start) + 1); strncpy (result, start, (end-start)); result [end-start] = 0; } DONE: /* Make room in the buffer by compressing out any bytes we've processed. */ if (end > s->buf) { int n = end - s->buf; memmove (s->buf, end, sizeof(s->buf) - n); s->buf_tail -= n; } return result; }
static void subproc_cb (XtPointer closure, int *source, XtInputId *id) { sws_configuration *sc = (sws_configuration *) closure; drain_input (sc); }