+ /* user input in enter mode */
+ ch = getch();
+ if (ch == 10)
+ {
+ FILE *fp;
+
+ enter = 0;
+ if (!enter_string[0])
+ goto again;
+
+ SPRINT(logline[logcur++ % LOGLINES], "> %s", enter_string);
+ if (!!strncmp(enter_string, "interface", 10) &&
+ !!strncmp(enter_string, "route", 6) &&
+ !!strncmp(enter_string, "release ", 8) &&
+ !!strncmp(enter_string, "block ", 6) &&
+ !!strncmp(enter_string, "unblock ", 8) &&
+ !!strncmp(enter_string, "unload ", 7))
+ {
+ SPRINT(logline[logcur++ % LOGLINES], "usage:");
+ SPRINT(logline[logcur++ % LOGLINES], "interface (reload interface.conf)");
+ SPRINT(logline[logcur++ % LOGLINES], "route (reload routing.conf)");
+ SPRINT(logline[logcur++ % LOGLINES], "release <EP> (release endpoint with given ID)");
+ SPRINT(logline[logcur++ % LOGLINES], "block <port> (block port for further calls)");
+ SPRINT(logline[logcur++ % LOGLINES], "unblock <port> (unblock port for further calls, load if not loaded)");
+ SPRINT(logline[logcur++ % LOGLINES], "unload <port> (unload mISDN stack, release call calls)");
+ } else
+ {
+ /* applend output to log window */
+ SPRINT(buffer, "%s %s", argv[0], enter_string);
+ fp = popen(buffer, "r");
+ if (fp)
+ {
+ while(fgets(logline[logcur % LOGLINES], sizeof(logline[0]), fp))
+ logline[logcur++ % LOGLINES][sizeof(logline[0])-1] = '\0';
+ pclose(fp);
+ } else
+ {
+ SPRINT(logline[logcur++ % LOGLINES], "failed to execute '%s'", buffer);
+ }
+ }
+ logline[logcur % LOGLINES][0] = '\0';
+ enter_string[0] = '\0';
+ goto again;
+ }
+ if (ch>=32 && ch<=126)
+ {
+ SCCAT(enter_string, ch);
+ goto again;
+ } else
+ if (ch==8 || ch==127)
+ {
+ if (enter_string[0])
+ enter_string[strlen(enter_string)-1] = '\0';
+ goto again;
+ } else
+ if (ch != 3)
+ {
+ usleep(250000);
+ goto again;
+ }
+ } else
+ {
+ /* user input in normal mode */
+ switch(getch())
+ {
+ case 12: /* refresh */
+ cleanup_curses();
+ init_curses();
+ goto again;
+ break;