void TTYInputSequenceParser::AddStrCursors(WORD vk, const char *code) { AddStr(vk, 0, "O%s", code); AddStr(vk, 0, "[%s", code); AddStr_ControlsThenCode(vk, "[%d%s", code); AddStr_ControlsThenCode(vk, "[1;%d%s", code); }
void TTYInputSequenceParser::AddStrTilde(WORD vk, int code) { AddStr(vk, 0, "[%d~", code); for (int i = 0; i <= 7; ++i) { DWORD control_keys = 0; if (i & 1) control_keys|= SHIFT_PRESSED; if (i & 2) control_keys|= LEFT_ALT_PRESSED; if (i & 4) control_keys|= LEFT_CTRL_PRESSED; AddStr(vk, control_keys, "[%d;%d~", code, 1 + i); } }
void CMenu::DoDraw() { int y = 1; TMenuList::iterator it=m_MenuList.begin() + m_iYOffset; for (; ((it!=m_MenuList.end()) && (y<Height()-1)); it++, y++) { bool highlight = ((y-1) == m_iCursorLine); if (highlight) SetAttr(this, A_REVERSE, true); int width = SafeConvert<int>(MBWidth(it->name)); if (width >= m_iXOffset) { int endw = std::min(ScrollFieldWidth(), width-m_iXOffset); TSTLStrSize start = GetMBLenFromW(it->name, m_iXOffset); TSTLStrSize end = GetMBLenFromW(it->name.substr(start), endw); AddStr(this, 1, y, it->name.substr(start, end).c_str()); } if (highlight) SetAttr(this, A_REVERSE, false); } }
StrPP& StrPP::operator<<(const unsigned long n) { char num[15]; ultoa(n, num, 10); AddStr(num); return *this; };
void TTYInputSequenceParser::AddStr_ControlsThenCode(WORD vk, const char *fmt, const char *code) { for (int i = 0; i <= 7; ++i) { DWORD control_keys = 0; if (i & 1) control_keys|= SHIFT_PRESSED; if (i & 2) control_keys|= LEFT_ALT_PRESSED; if (i & 4) control_keys|= LEFT_CTRL_PRESSED; AddStr(vk, control_keys, fmt, 1 + i, code); } }
bool ParamSet::SetStr( Core::Symbol name, const vd::string& value) { if(!IsA(ParamSet::Str, name)) return AddStr(name, value); m_Strings[name.GetKey()].Set(value); return true; }
void CInputField::DoDraw() { std::string::iterator first = m_Text.begin(), last; utf8::advance(first, m_StartPos, m_Text.end()); last = first + GetMBLenFromW(std::string(first, m_Text.end()), Width()-2); // -2 for the border and cursor if (m_cOut) { TSTLStrSize charn = utf8::distance(first, last); AddStr(this, 1, 1, std::string(charn, m_cOut).c_str()); } else AddStr(this, 1, 1, std::string(first, last).c_str()); if (Focused()) { std::string::iterator start = m_Text.begin(); utf8::advance(start, m_StartPos, m_Text.end()); int cursx = SafeConvert<int>(GetMBWidthFromC(m_Text, start, m_CursorPos)) + 1; TUI.LockCursor(GetWX(GetWin()) + cursx, GetWY(GetWin())+1); } }
void CTextWidget::DoDraw() { TLinesList &lines = GetLineList(); int y = 0; TLinesList::iterator it=lines.begin() + m_iYOffset; for (; ((it!=lines.end()) && (y<Height())); it++, y++) { if (y >= Height()) break; int len = SafeConvert<int>(it->length()); if (len >= m_iXOffset) { int end = std::min(Width(), len-m_iXOffset); AddStr(this, 0, y, it->substr(m_iXOffset, end).c_str()); } } }
static void test_adds(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; char buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = (Options) ((unsigned) (m_opt ? oMove : oDefault) | (unsigned) ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; MvWAddChStr(work, 1, 2, ChStr("String")); MvWAddChStr(work, limit + 1, 2, ChStr("Chars")); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); /* * Show the characters added in color, to distinguish from those that * are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); show_attr = (attr_t) COLOR_PAIR(1); wbkgdset(work, show_attr | ' '); } else { show_attr = A_STANDOUT; } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_adds(level + 1); touchwin(look); touchwin(work); touchwin(show); wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { AddNStr(ChStr2(buffer + col), LEN(col)); } } } else { if (move(row, col2) != ERR) { AddStr(ChStr2(buffer)); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvAddNStr(row, col2, ChStr2(buffer + col), LEN(col)); } } else { MvAddStr(row, col2, ChStr2(buffer)); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WAddNStr(work, ChStr2(buffer + col), LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WAddStr(work, ChStr2(buffer)); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWAddNStr(work, row, col2, ChStr2(buffer + col), LEN(col)); } } else { MvWAddStr(work, row, col2, ChStr2(buffer)); } break; } /* do the corresponding single-character add */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { AddCh(UChar(buffer[col])); } break; case oMove: MvAddCh(row2, col2, UChar(buffer[col])); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WAddCh(work, UChar(buffer[col])); } break; case oMoveWindow: MvWAddCh(work, row2, col2, UChar(buffer[col])); break; } } } else { beep(); } break; case KEY_BACKSPACE: ch = '\b'; /* FALLTHRU */ default: if (ch <= 0 || ch > 255) { beep(); break; } buffer[length++] = (char) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { AddStr(ChStr2(buffer + length - 1)); } break; case oMove: MvAddStr(row, col, ChStr2(buffer + length - 1)); break; case oWindow: if (wmove(work, row, col) != ERR) { WAddStr(work, ChStr2(buffer + length - 1)); } break; case oMoveWindow: MvWAddStr(work, row, col, ChStr2(buffer + length - 1)); break; } /* do the corresponding single-character add */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { AddCh(UChar(ch)); } break; case oMove: MvAddCh(limit + row, col, UChar(ch)); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WAddCh(work, UChar(ch)); } break; case oMoveWindow: MvWAddCh(work, limit + row, col, UChar(ch)); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } if (level > 0) { delwin(show); delwin(work); delwin(look); } }
TBigStrPool::TBigStrPool(TSize MxBfLen, uint _GrowBy) : MxBfL(MxBfLen), BfL(0), GrowBy(_GrowBy), Bf(0) { //IAssert(MxBfL >= 0); IAssert(GrowBy >= 0); if (MxBfL > 0) { Bf = (char *) malloc(MxBfL); IAssert(Bf); } AddStr(""); // add empty string }
/* * this will be called twice: * 1) rcfilename = "/etc/screenrc" * 2) rcfilename = RcFileName */ int StartRc(char *rcfilename, int nopanic) { int argc, len; char *p, *cp; char buf[2048]; char *args[MAXARGS]; int argl[MAXARGS]; FILE *fp; char *oldrc_name = rc_name; /* always fix termcap/info capabilities */ extra_incap = CatExtra("TF", extra_incap); /* Special settings for vt100 and others */ if (display && (!strncmp(D_termname, "vt", 2) || !strncmp(D_termname, "xterm", 5))) extra_incap = CatExtra ("xn:f0=\033Op:f1=\033Oq:f2=\033Or:f3=\033Os:f4=\033Ot:f5=\033Ou:f6=\033Ov:f7=\033Ow:f8=\033Ox:f9=\033Oy:f.=\033On:f,=\033Ol:fe=\033OM:f+=\033Ok:f-=\033Om:f*=\033Oj:f/=\033Oo:fq=\033OX", extra_incap); rc_name = findrcfile(rcfilename); if (rc_name == NULL || (fp = secfopen(rc_name, "r")) == NULL) { const char *rc_nonnull = rc_name ? rc_name : rcfilename; if (!rc_recursion && RcFileName && !strcmp(RcFileName, rc_nonnull)) { /* * User explicitly gave us that name, * this is the only case, where we get angry, if we can't read * the file. */ if (!nopanic) Panic(0, "Unable to open \"%s\".", rc_nonnull); /* possibly NOTREACHED */ } if (rc_name) Free(rc_name); rc_name = oldrc_name; return 1; } while (fgets(buf, sizeof buf, fp) != NULL) { if ((p = strrchr(buf, '\n')) != NULL) *p = '\0'; if ((argc = Parse(buf, sizeof buf, args, argl)) == 0) continue; if (strcmp(args[0], "echo") == 0) { if (!display) continue; if (argc < 2 || (argc == 3 && strcmp(args[1], "-n")) || argc > 3) { Msg(0, "%s: 'echo [-n] \"string\"' expected.", rc_name); continue; } AddStr(args[argc - 1]); if (argc != 3) { AddStr("\r\n"); Flush(0); } } else if (strcmp(args[0], "sleep") == 0) { if (!display) continue; if (argc != 2) { Msg(0, "%s: sleep: one numeric argument expected.", rc_name); continue; } DisplaySleep1000(1000 * atoi(args[1]), 1); } else if (!strcmp(args[0], "termcapinfo") || !strcmp(args[0], "terminfo")) { if (!display) continue; if (argc < 3 || argc > 4) { Msg(0, "%s: %s: incorrect number of arguments.", rc_name, args[0]); continue; } for (p = args[1]; p && *p; p = cp) { if ((cp = strchr(p, '|')) != 0) *cp++ = '\0'; len = strlen(p); if (p[len - 1] == '*') { if (!(len - 1) || !strncmp(p, D_termname, len - 1)) break; } else if (!strcmp(p, D_termname)) break; } if (!(p && *p)) continue; extra_incap = CatExtra(args[2], extra_incap); if (argc == 4) extra_outcap = CatExtra(args[3], extra_outcap); } else if (!strcmp(args[0], "source")) { if (rc_recursion <= 10) { rc_recursion++; (void)StartRc(args[1], 0); rc_recursion--; } } } fclose(fp); Free(rc_name); rc_name = oldrc_name; return 0; }
StrPP& StrPP::operator<<(const double n) { StrPP tmp(n); AddStr(tmp); return *this; };
StrPP& StrPP::operator<<(const StrPP& s) { AddStr(s); return *this; }
StrPP& StrPP::operator<<(const char* p) { AddStr(p); return *this; }
StrPP& StrPP::operator<<(const char c) { AddStr(c); return *this; }
TTYInputSequenceParser::TTYInputSequenceParser(ITTYInputSpecialSequenceHandler *handler) : _handler(handler) { for (char c = 'A'; c <= 'Z'; ++c) { AddStr(c, LEFT_ALT_PRESSED, "%c", c + ('a' - 'A')); if (c != 'O') { AddStr(c, LEFT_ALT_PRESSED | SHIFT_PRESSED, "%c", c); } } for (char c = '0'; c <= '9'; ++c) { AddStr(c, LEFT_ALT_PRESSED, "%c", c); } AddStr('C', LEFT_CTRL_PRESSED | LEFT_ALT_PRESSED, "\x03"); AddStr('0', LEFT_ALT_PRESSED | SHIFT_PRESSED, ")"); AddStr('1', LEFT_ALT_PRESSED | SHIFT_PRESSED, "!"); AddStr('2', LEFT_ALT_PRESSED | SHIFT_PRESSED, "@"); AddStr('3', LEFT_ALT_PRESSED | SHIFT_PRESSED, "#"); AddStr('4', LEFT_ALT_PRESSED | SHIFT_PRESSED, "$"); AddStr('5', LEFT_ALT_PRESSED | SHIFT_PRESSED, "%%"); AddStr('6', LEFT_ALT_PRESSED | SHIFT_PRESSED, "^"); AddStr('7', LEFT_ALT_PRESSED | SHIFT_PRESSED, "&"); AddStr('8', LEFT_ALT_PRESSED | SHIFT_PRESSED, "*"); AddStr('9', LEFT_ALT_PRESSED | SHIFT_PRESSED, "("); AddStr(VK_OEM_PLUS, LEFT_ALT_PRESSED, "="); AddStr(VK_OEM_PLUS, LEFT_ALT_PRESSED | SHIFT_PRESSED, "+"); AddStr(VK_OEM_MINUS, LEFT_ALT_PRESSED, "-"); AddStr(VK_TAB, LEFT_ALT_PRESSED, "\x08"); AddStr(VK_CLEAR, LEFT_ALT_PRESSED, "\x7f"); AddStr(VK_DIVIDE, LEFT_ALT_PRESSED, "/"); AddStr(VK_OEM_PERIOD, LEFT_ALT_PRESSED, "."); AddStr(VK_OEM_COMMA, LEFT_ALT_PRESSED, ","); AddStr(VK_OEM_1, LEFT_ALT_PRESSED, ";"); AddStr(VK_OEM_3, LEFT_ALT_PRESSED, "`"); //AddStr(VK_OEM_4, LEFT_ALT_PRESSED, "["); AddStr(VK_OEM_5, LEFT_ALT_PRESSED, "\\"); AddStr(VK_OEM_6, LEFT_ALT_PRESSED, "]"); AddStr(VK_OEM_7, LEFT_ALT_PRESSED, "\'"); //AddStr(VK_DIVIDE, LEFT_ALT_PRESSED, "/"); //AddStr(VK_ADD, LEFT_ALT_PRESSED | SHIFT_PRESSED, "_", c); AddStrCursors(VK_UP, "A"); AddStrCursors(VK_DOWN, "B"); AddStrCursors(VK_RIGHT, "C"); AddStrCursors(VK_LEFT, "D"); AddStrCursors(VK_END, "F"); AddStrCursors(VK_HOME, "H"); AddStrF1F5(VK_F1, "P"); AddStr(VK_F1, 0, "[[A"); AddStrF1F5(VK_F2, "Q"); AddStr(VK_F2, 0, "[[B"); AddStrF1F5(VK_F3, "R"); AddStr(VK_F3, 0, "[[C"); AddStrF1F5(VK_F4, "S"); AddStr(VK_F4, 0, "[[D"); AddStrF1F5(VK_F5, "E"); AddStr(VK_F5, 0, "[[E"); AddStrTilde(VK_HOME, 1); AddStrTilde(VK_INSERT, 2); AddStrTilde(VK_DELETE, 3); AddStrTilde(VK_END, 4); AddStrTilde(VK_PRIOR, 5); AddStrTilde(VK_NEXT, 6); AddStrTilde(VK_F1, 11); AddStr(VK_F1, SHIFT_PRESSED, "[25~"); AddStrTilde(VK_F2, 12); AddStr(VK_F2, SHIFT_PRESSED, "[26~"); AddStrTilde(VK_F3, 13); AddStr(VK_F3, SHIFT_PRESSED, "[28~"); AddStrTilde(VK_F4, 14); AddStr(VK_F4, SHIFT_PRESSED, "[29~"); AddStrTilde(VK_F5, 15); AddStr(VK_F5, SHIFT_PRESSED, "[31~"); AddStrTilde(VK_F6, 17); AddStr(VK_F6, SHIFT_PRESSED, "[32~"); AddStrTilde(VK_F7, 18); AddStr(VK_F7, SHIFT_PRESSED, "[33~"); AddStrTilde(VK_F8, 19); AddStr(VK_F8, SHIFT_PRESSED, "[34~"); AddStrTilde(VK_F9, 20); AddStrTilde(VK_F10, 21); AddStrTilde(VK_F11, 23); AddStrTilde(VK_F12, 24); AddStr(VK_ESCAPE, 0, "\x1b"); AddStr(VK_TAB, SHIFT_PRESSED, "[Z"); AssertNoConflicts(); }