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