/* * Export options into a string. */ const char *OptString (const Opt *opts) { static str_s str; int i, flag; val_t val = 0; s_init (&str, "", 100); for (i = 0; OptList[i].name; i++) if (OptGetVal (opts, flag = OptList[i].flag, &val)) { if (flag & COF_BOOL) { if (!*str.txt) s_cat (&str, "options"); s_catf (&str, " %s %s", OptList[i].name, val ? "on" : "off"); } else { if (*str.txt) s_catc (&str, '\n'); if (flag & COF_NUMERIC) s_catf (&str, "options %s %lu", OptList[i].name, UD2UL (val)); else if (flag & COF_COLOR) s_catf (&str, "options %s %s", OptList[i].name, s_quote (OptS2C (strtable[val]))); else s_catf (&str, "options %s %s", OptList[i].name, s_quote (strtable[val])); } } if (*str.txt) s_catc (&str, '\n'); return str.txt; }
/* * Go to given column */ static void rl_goto (UDWORD pos) { if (pos == rl_colpos) return; if (rl_colpos > pos) { #ifdef ANSI_TERM int l = ((rl_prompt_len + rl_colpos) / rl_columns) - ((rl_prompt_len + pos) / rl_columns); if (l) s_catf (&rl_operate, ESC "[%dA", l); rl_colpos -= l * rl_columns; s_catc (&rl_operate, '\r'); rl_colpos -= (rl_prompt_len + rl_colpos) % rl_columns; if ((int)rl_colpos < 0) { if (rl_prompt_len) s_catf (&rl_operate, ESC "[%uC", rl_prompt_len); rl_colpos = 0; } #else while (pos < rl_colpos) { s_catc (&rl_operate, '\b'); rl_curpos --; } #endif } rl_syncpos (rl_colpos); while (rl_colpos + rl_ucscol.txt[rl_ucspos] <= pos && rl_ucspos < rl_ucscol.len) { s_catn (&rl_operate, rl_display.txt + rl_bytepos, rl_ucsbytes.txt[rl_ucspos]); rl_colpos += rl_ucscol.txt[rl_ucspos]; rl_bytepos += rl_ucsbytes.txt[rl_ucspos]; rl_ucspos++; } if (!((rl_prompt_len + rl_colpos) % rl_columns)) { if (rl_ucspos < rl_ucscol.len) s_catn (&rl_operate, rl_display.txt + rl_bytepos, rl_ucsbytes.txt[rl_ucspos]); else s_catc (&rl_operate, ' '); s_catc (&rl_operate, '\r'); } assert (rl_colpos == pos); }
int main(int argc, char **argv) { HC_DEF_S(s); /* copyf */ s_copyf(s, "[%i]", 123); puts_s(s); s_copyf(s, "[%f]", 2.718281828459045); puts_s(s); s_copyf(s, "[%s]", "hello world of possibilities!"); puts_s(s); s_copyf(s, "[%i][%f][%s]", 123, 2.718281828459045, "hello world of possibilities!"); puts_s(s); /* catf */ s->len = 0; /* truncate */ s_catf(s, "[%i]", 123); puts_s(s); s_catf(s, "[%f]", 2.718281828459045); puts_s(s); s_catf(s, "[%s]", "hello world of possibilities!"); puts_s(s); s_catf(s, "[%i][%f][%s]", 123, 2.718281828459045, "hello world of possibilities!"); puts_s(s); /* */ s_free(s); return 0; }