diff options
| author | David Walter Seikel | 2014-01-31 14:40:17 +1000 |
|---|---|---|
| committer | David Walter Seikel | 2014-01-31 14:40:17 +1000 |
| commit | 293f4efeb1de2f36f56528e57b48b471717d3e29 (patch) | |
| tree | 49799b0a98214f09e7b0203064cc3c9f5c6fd674 | |
| parent | And the rest of the gratuitous name changes. (diff) | |
| download | boxes-293f4efeb1de2f36f56528e57b48b471717d3e29.zip boxes-293f4efeb1de2f36f56528e57b48b471717d3e29.tar.gz boxes-293f4efeb1de2f36f56528e57b48b471717d3e29.tar.bz2 boxes-293f4efeb1de2f36f56528e57b48b471717d3e29.tar.xz | |
More gratuitous name changes.
Diffstat (limited to '')
| -rw-r--r-- | dumbsh.c | 52 |
1 files changed, 28 insertions, 24 deletions
| @@ -1,4 +1,4 @@ | |||
| 1 | /* dumbsh.c - A really dumb shell, to demonstrate handlekeys usage. | 1 | /* dumbsh.c - A really dumb shell, to demonstrate handle_keys usage. |
| 2 | * | 2 | * |
| 3 | * Copyright 2014 David Seikel <won_fang@yahoo.com.au> | 3 | * Copyright 2014 David Seikel <won_fang@yahoo.com.au> |
| 4 | * | 4 | * |
| @@ -30,7 +30,7 @@ struct keyCommand | |||
| 30 | GLOBALS( | 30 | GLOBALS( |
| 31 | unsigned h, w; | 31 | unsigned h, w; |
| 32 | int x, y; | 32 | int x, y; |
| 33 | struct double_list *current; | 33 | struct double_list *history; |
| 34 | ) | 34 | ) |
| 35 | 35 | ||
| 36 | #define TT this.dumbsh | 36 | #define TT this.dumbsh |
| @@ -115,16 +115,16 @@ static void leftChar() | |||
| 115 | 115 | ||
| 116 | static void nextHistory() | 116 | static void nextHistory() |
| 117 | { | 117 | { |
| 118 | TT.current = TT.current->next; | 118 | TT.history = TT.history->next; |
| 119 | strcpy(toybuf, TT.current->data); | 119 | strcpy(toybuf, TT.history->data); |
| 120 | TT.x = strlen(toybuf); | 120 | TT.x = strlen(toybuf); |
| 121 | updateLine(); | 121 | updateLine(); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | static void prevHistory() | 124 | static void prevHistory() |
| 125 | { | 125 | { |
| 126 | TT.current = TT.current->prev; | 126 | TT.history = TT.history->prev; |
| 127 | strcpy(toybuf, TT.current->data); | 127 | strcpy(toybuf, TT.history->data); |
| 128 | TT.x = strlen(toybuf); | 128 | TT.x = strlen(toybuf); |
| 129 | updateLine(); | 129 | updateLine(); |
| 130 | } | 130 | } |
| @@ -208,34 +208,38 @@ static int handleKeySequence(long extra, char *sequence) | |||
| 208 | 208 | ||
| 209 | void dumbsh_main(void) | 209 | void dumbsh_main(void) |
| 210 | { | 210 | { |
| 211 | struct termios termio, oldtermio; | 211 | struct termios termIo, oldTermIo; |
| 212 | char *temp = getenv("HOME"); | 212 | char *t = getenv("HOME"); |
| 213 | int fd; | 213 | int fd; |
| 214 | 214 | ||
| 215 | // Load bash history. | 215 | // Load bash history. |
| 216 | temp = xmsprintf("%s/%s", temp ? temp : "", ".bash_history"); | 216 | t = xmsprintf("%s/%s", t ? t : "", ".bash_history"); |
| 217 | if (-1 != (fd = open(temp, O_RDONLY))) | 217 | if (-1 != (fd = open(t, O_RDONLY))) |
| 218 | { | 218 | { |
| 219 | while ((temp = get_line(fd))) TT.current = dlist_add(&TT.current, temp); | 219 | while ((t = get_line(fd))) TT.history = dlist_add(&TT.history, t); |
| 220 | close(fd); | 220 | close(fd); |
| 221 | } | 221 | } |
| 222 | if (!TT.current) | 222 | if (!TT.history) |
| 223 | TT.current = dlist_add(&TT.current, ""); | 223 | TT.history = dlist_add(&TT.history, ""); |
| 224 | 224 | ||
| 225 | // Grab the old terminal settings and save it. | 225 | // Grab the old terminal settings and save it. |
| 226 | tcgetattr(0, &oldtermio); | 226 | tcgetattr(0, &oldTermIo); |
| 227 | tcflush(0, TCIFLUSH); | 227 | tcflush(0, TCIFLUSH); |
| 228 | termio = oldtermio; | 228 | termIo = oldTermIo; |
| 229 | 229 | ||
| 230 | // Mould the terminal to our will. | 230 | // Mould the terminal to our will. |
| 231 | termio.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IUCLC | IXON | IXOFF | IXANY); | 231 | // In this example we are turning off all the terminal smarts, but real code |
| 232 | termio.c_oflag &= ~OPOST; | 232 | // might not want that. |
| 233 | termio.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | TOSTOP | ICANON | ISIG | IEXTEN); | 233 | termIo.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL |
| 234 | termio.c_cflag &= ~(CSIZE | PARENB); | 234 | | IUCLC | IXON | IXOFF | IXANY); |
| 235 | termio.c_cflag |= CS8; | 235 | termIo.c_oflag &= ~OPOST; |
| 236 | termio.c_cc[VTIME]=0; // deciseconds. | 236 | termIo.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | TOSTOP | ICANON | ISIG |
| 237 | termio.c_cc[VMIN]=1; | 237 | | IEXTEN); |
| 238 | tcsetattr(0, TCSANOW, &termio); | 238 | termIo.c_cflag &= ~(CSIZE | PARENB); |
| 239 | termIo.c_cflag |= CS8; | ||
| 240 | termIo.c_cc[VTIME]=0; // deciseconds. | ||
| 241 | termIo.c_cc[VMIN]=1; | ||
| 242 | tcsetattr(0, TCSANOW, &termIo); | ||
| 239 | 243 | ||
| 240 | // Let the mouldy old terminal mold us. | 244 | // Let the mouldy old terminal mold us. |
| 241 | TT.w = 80; | 245 | TT.w = 80; |
| @@ -245,7 +249,7 @@ void dumbsh_main(void) | |||
| 245 | updateLine(); | 249 | updateLine(); |
| 246 | handle_keys(0, handleKeySequence, handleCSI); | 250 | handle_keys(0, handleKeySequence, handleCSI); |
| 247 | 251 | ||
| 248 | tcsetattr(0, TCSANOW, &oldtermio); | 252 | tcsetattr(0, TCSANOW, &oldTermIo); |
| 249 | puts(""); | 253 | puts(""); |
| 250 | fflush(stdout); | 254 | fflush(stdout); |
| 251 | } | 255 | } |
