#ifdef _WIN32 #include #else #include #endif int main() { initscr(); noecho(); char word[128]; int index = 0; int level = 1; struct Word { char str[128]; int len; }; struct Word words[128]; int numWords = 1; words[0].str[0] = '('; words[0].len = 1; while (true) { move(0, 0); clear(); refresh(); for (int i = 0; i < numWords; i++) { printw("%.*s\n", words[i].len, words[i].str); } int key = getch(); /**/ if (key == ' ') { if (index == 0) { if (level > 0) { // end list words[numWords].str[0] = ')'; words[numWords].len = 1; numWords++; level--; } } else { // add to list // for (int i = 0; i < index; i++) { // words[numWords].str[i] = word[i]; // } // words[numWords].len = index; index = 0; // numWords++; } } else if (key == '\n') { // if (index == 0) { // // add to list // for (int i = 0; i < index; i++) { // words[numWords].str[i] = word[i]; // } // words[numWords].len = index; // index = 0; // numWords++; // add list words[numWords].str[0] = '('; words[numWords].len = 1; numWords++; level++; // } index = 0; } else if (key == 8 || key == 127) { if (numWords > 0) { if (words[numWords-1].len == 1 && words[numWords-1].str[0] == '(') level--; if (words[numWords-1].len == 1 && words[numWords-1].str[0] == ')') level++; numWords--; } } else { if (index == 0) { numWords++; words[numWords-1].len = 0; } printw("%d\n", key); words[numWords-1].str[index++] = (char)key; words[numWords-1].len++; } } endwin(); return 0; }