Пример #1
0
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);
}
Пример #2
0
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;
}
Пример #3
0
/*
 * 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;
}
Пример #4
0
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;
}