static void draw_status_line(size_t line, Window *wp) { size_t i; char *buf, *eol_type; Point pt = window_pt(wp); astr as, bs; term_attrset(1, FONT_REVERSE); term_move(line, 0); for (i = 0; i < wp->ewidth; ++i) term_addch('-'); if (cur_bp->eol == coding_eol_cr) eol_type = "(Mac)"; else if (cur_bp->eol == coding_eol_crlf) eol_type = "(DOS)"; else eol_type = ":"; term_move(line, 0); bs = astr_afmt(astr_new(), "(%d,%d)", pt.n+1, get_goalc_wp(wp)); as = astr_afmt(astr_new(), "--%s%2s %-15s %s %-9s (Text", eol_type, make_mode_line_flags(wp), wp->bp->name, make_screen_pos(wp, &buf), astr_cstr(bs)); free(buf); astr_delete(bs); if (wp->bp->flags & BFLAG_AUTOFILL) astr_cat_cstr(as, " Fill"); if (wp->bp->flags & BFLAG_OVERWRITE) astr_cat_cstr(as, " Ovwrt"); if (thisflag & FLAG_DEFINING_MACRO) astr_cat_cstr(as, " Def"); if (wp->bp->flags & BFLAG_ISEARCH) astr_cat_cstr(as, " Isearch"); astr_cat_char(as, ')'); term_addnstr(astr_cstr(as), min(term_width(), astr_len(as))); astr_delete(as); term_attrset(1, FONT_NORMAL); }
astr variableDump(le *varlist) { astr as = astr_new(); for (; varlist; varlist = varlist->list_next) { if (varlist->branch) { astr_afmt(as, "%s \t", varlist->data); astr_cat_delete(as, leDumpReformat(varlist->branch)); astr_cat_char(as, '\n'); } } return as; }
/* * Convert a key chord into its ASCII representation */ astr chordtostr(size_t key) { astr as = astr_new(); if (key & KBD_CTRL) astr_cat_cstr(as, "C-"); if (key & KBD_META) astr_cat_cstr(as, "M-"); key &= ~(KBD_CTRL | KBD_META); switch (key) { case KBD_PGUP: astr_cat_cstr(as, "<prior>"); break; case KBD_PGDN: astr_cat_cstr(as, "<next>"); break; case KBD_HOME: astr_cat_cstr(as, "<home>"); break; case KBD_END: astr_cat_cstr(as, "<end>"); break; case KBD_DEL: astr_cat_cstr(as, "<delete>"); break; case KBD_BS: astr_cat_cstr(as, "<backspace>"); break; case KBD_INS: astr_cat_cstr(as, "<insert>"); break; case KBD_LEFT: astr_cat_cstr(as, "<left>"); break; case KBD_RIGHT: astr_cat_cstr(as, "<right>"); break; case KBD_UP: astr_cat_cstr(as, "<up>"); break; case KBD_DOWN: astr_cat_cstr(as, "<down>"); break; case KBD_RET: astr_cat_cstr(as, "<RET>"); break; case KBD_TAB: astr_cat_cstr(as, "<TAB>"); break; case KBD_F1: astr_cat_cstr(as, "<f1>"); break; case KBD_F2: astr_cat_cstr(as, "<f2>"); break; case KBD_F3: astr_cat_cstr(as, "<f3>"); break; case KBD_F4: astr_cat_cstr(as, "<f4>"); break; case KBD_F5: astr_cat_cstr(as, "<f5>"); break; case KBD_F6: astr_cat_cstr(as, "<f6>"); break; case KBD_F7: astr_cat_cstr(as, "<f7>"); break; case KBD_F8: astr_cat_cstr(as, "<f8>"); break; case KBD_F9: astr_cat_cstr(as, "<f9>"); break; case KBD_F10: astr_cat_cstr(as, "<f10>"); break; case KBD_F11: astr_cat_cstr(as, "<f11>"); break; case KBD_F12: astr_cat_cstr(as, "<f12>"); break; case ' ': astr_cat_cstr(as, "SPC"); break; default: if (isgraph(key)) astr_cat_char(as, (int)(key & 0xff)); else astr_afmt(as, "<%x>", key); } return as; }
int main(void) { astr as1, as2, as3; int i; as1 = astr_new(); astr_assign_cstr(as1, " world"); astr_prepend_cstr(as1, "hello"); astr_append_char(as1, '!'); assert_eq(as1, "hello world!"); as3 = astr_substr(as1, 6, 5); assert_eq(as3, "world"); as2 = astr_new(); astr_assign_cstr(as2, " "); astr_prepend_cstr(as2, "The"); astr_append(as2, as3); astr_append_char(as2, '.'); assert_eq(as2, "The world."); astr_delete(as3); as3 = astr_substr(as1, -6, 5); assert_eq(as3, "world"); astr_assign_cstr(as1, "12345"); astr_delete(as2); as2 = astr_left(as1, 10); assert_eq(as2, "12345"); astr_delete(as2); as2 = astr_left(as1, 3); assert_eq(as2, "123"); astr_delete(as2); as2 = astr_right(as1, 10); assert_eq(as2, "12345"); astr_delete(as2); as2 = astr_right(as1, 3); assert_eq(as2, "345"); astr_assign_cstr(as1, "12345"); astr_insert_cstr(as1, 3, "mid"); astr_insert_cstr(as1, 0, "begin"); astr_insert_cstr(as1, 100, "end"); assert_eq(as1, "begin123mid45end"); astr_assign_cstr(as1, "12345"); astr_insert_char(as1, -2, 'x'); astr_insert_char(as1, -10, 'y'); astr_insert_char(as1, 10, 'z'); assert_eq(as1, "y123x45z"); astr_assign_cstr(as1, "12345"); astr_delete(as2); as2 = astr_substr(as1, -2, 5); assert_eq(as2, "45"); astr_assign_cstr(as1, "12345"); astr_delete(as2); as2 = astr_substr(as1, -10, 5); assert_eq(as2, "12345"); astr_assign_cstr(as1, "1234567"); astr_replace_cstr(as1, -4, 2, "foo"); assert_eq(as1, "123foo67"); astr_assign_cstr(as1, "1234567"); astr_replace_cstr(as1, 1, 3, "foo"); assert_eq(as1, "1foo567"); astr_assign_cstr(as1, "1234567"); astr_replace_cstr(as1, -1, 5, "foo"); assert_eq(as1, "123456foo"); astr_assign_cstr(as1, "1234567"); astr_remove(as1, 4, 10); assert_eq(as1, "1234"); astr_assign_cstr(as1, "abc def de ab cd ab de fg"); while ((i = astr_find_cstr(as1, "de")) >= 0) astr_replace_cstr(as1, i, 2, "xxx"); assert_eq(as1, "abc xxxf xxx ab cd ab xxx fg"); while ((i = astr_find_cstr(as1, "ab")) >= 0) astr_remove(as1, i, 2); assert_eq(as1, "c xxxf xxx cd xxx fg"); while ((i = astr_find_cstr(as1, " ")) >= 0) astr_replace_char(as1, i, 2, ' '); assert_eq(as1, "c xxxf xxx cd xxx fg"); astr_fill(as1, 'x', 3); assert_eq(as1, "xxx"); astr_fmt(as1, "%s * %d = ", "5", 3); astr_afmt(as1, "%d", 15); assert_eq(as1, "5 * 3 = 15"); printf("Input one string: "); fflush(stdout); astr_fgets(as1, stdin); printf("You wrote: \"%s\"\n", astr_cstr(as1)); astr_delete(as1); astr_delete(as2); astr_delete(as3); printf("astr test successful.\n"); return 0; }