R_API void r_cons_canvas_write(RConsCanvas *c, const char *s) { char *p, ch; int orig_x, x; int left, slen, attr_len, piece_len; if (!c || !s || !*s) { return; } /* split the string into pieces of non-ANSI chars and print them normally, ** using the ANSI chars to set the attr of the canvas */ orig_x = c->x; do { const char *s_part = set_attr (c, s); ch = 0; piece_len = get_piece (s_part, &ch); if (piece_len == 0 && ch == '\0' && s_part == s) { break; } left = 0; p = prefixline (c, &left); slen = R_MIN (left, piece_len); attr_len = slen <= 0 && s_part != s? 1: slen; if (attr_len > 0) { stamp_attr (c, attr_len); } x = c->x - c->sx; if (G (x, c->y - c->sy)) { memcpy (p, s_part, slen); } s = s_part; if (ch == '\n') { c->y++; c->x = orig_x; s++; if (*s == '\0') { break; } } else { c->x += slen; } s += piece_len; } while (*s); c->x = orig_x; }
R_API void r_cons_canvas_write(RConsCanvas *c, const char *s) { char *p, ch; int orig_x, x; int left, slen, piece_len; if (!c || !s || !*s) return; /* split the string into pieces of non-ANSI chars and print them normally, * using the ANSI chars to set the attr of the canvas */ orig_x = c->x; do { s = set_attr (c, s); piece_len = get_piece (s, &ch); if (piece_len == 0 && ch == '\0') break; slen = 0; if (piece_len > 0) { p = prefixline (c, &left); slen = R_MIN (left, piece_len); x = c->x - c->sx; if (G (x, c->y - c->sy)) { stamp_attr(c, slen); memcpy (p, s, slen); } } if (ch == '\n') { c->y++; c->x = orig_x; s++; if (*s == '\0') break; } else { c->x += slen; } s += piece_len; } while (*s); }
R_API void r_cons_canvas_write(RConsCanvas *c, const char *_s) { int left, slen; char *p, *s, *str; char *line, *n; int x; if (!c || !_s || !*_s) return; str = n = strdup (_s); do { s = n; line = getrow (s, &n); if (!line) break; if (*line == '\0' && n) continue; p = prefixline (c, &left); slen = R_MIN (left, strlen (line)); if (slen < 1) break; x = c->x - c->sx; if (!G (x, c->y - c->sy)) continue; stamp_attr(c, slen); memcpy (p, line, slen); if (!n) break; } while (G (c->x - c->sx, c->y + 1 - c->sy)); free (str); }