- inserted possiblity to send spy commands when busy
- general enhancements of six
This commit is contained in:
63
tecs/term.c
63
tecs/term.c
@@ -25,13 +25,20 @@
|
||||
static char esc_key='\0';
|
||||
|
||||
static fd_set regMask;
|
||||
static int minReg=0, maxReg=0;
|
||||
|
||||
void term_reg_socket(int fd) {
|
||||
FD_SET(fd, ®Mask);
|
||||
void term_reg_socket(int socket) {
|
||||
FD_SET(socket, ®Mask);
|
||||
if (socket > maxReg) {
|
||||
if (maxReg == 0) minReg = socket;
|
||||
maxReg = socket;
|
||||
} else if (socket < minReg) {
|
||||
minReg = socket;
|
||||
}
|
||||
}
|
||||
|
||||
void term_unr_socket(int fd) {
|
||||
FD_CLR(fd, ®Mask);
|
||||
void term_unr_socket(int socket) {
|
||||
FD_CLR(socket, ®Mask);
|
||||
}
|
||||
|
||||
int term_raw_key(char *key, int msecTmo) {
|
||||
@@ -41,21 +48,37 @@ int term_raw_key(char *key, int msecTmo) {
|
||||
return(sys_select_or_key(&mask, msecTmo, key));
|
||||
}
|
||||
|
||||
int term_wait_fd(int fd, int msecTmo) {
|
||||
int term_wait_socket(int socket, int msecTmo) {
|
||||
fd_set mask;
|
||||
struct timeval tmo;
|
||||
int i;
|
||||
|
||||
FD_ZERO(&mask);
|
||||
FD_SET(fd, &mask);
|
||||
if (socket == 0) {
|
||||
mask = regMask;
|
||||
} else {
|
||||
FD_ZERO(&mask);
|
||||
FD_SET(socket, &mask);
|
||||
}
|
||||
FD_SET(STDIN_FILENO, &mask);
|
||||
tmo.tv_sec=msecTmo / 1000;
|
||||
tmo.tv_usec=(msecTmo % 1000) * 1000+1;
|
||||
tmo.tv_usec=(msecTmo % 1000) * 1000;
|
||||
i=select(FD_SETSIZE, &mask, NULL, NULL, &tmo);
|
||||
if (FD_ISSET(STDIN_FILENO, &mask)) {
|
||||
return 0;
|
||||
}
|
||||
return i;
|
||||
if (i<0) return i;
|
||||
if (i) {
|
||||
if (socket && FD_ISSET(socket, &mask)) {
|
||||
return socket;
|
||||
}
|
||||
for (i=minReg; i<=maxReg; i++) {
|
||||
if (FD_ISSET(i, &mask)) {
|
||||
return i;
|
||||
};
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int term_get_key(char *key, int msecTmo) {
|
||||
@@ -250,7 +273,7 @@ static int dirty=0; /* line is to be cleared through a call of term_clear */
|
||||
|
||||
void term_clear(void) {
|
||||
if (dirty) {
|
||||
fputs("\r\033[K\033[0m", stdout);
|
||||
fputs("\r\033[K\033[0m", stdout); /* clear to end of line, clear colors */
|
||||
dirty=0;
|
||||
}
|
||||
}
|
||||
@@ -281,19 +304,10 @@ int term_get_line(char *buf, int size, int *pos, char *prompt, fd_set *mask) {
|
||||
while (1) {
|
||||
if (iret==-1 || key == RET_CHAR || key==EVT_CHAR) { /* refresh after a short timeout */
|
||||
snprintf(tmp, sizeof tmp, "%s%s%s%s%s%.*s",
|
||||
"\r\033[1m", prompt, "\033[34m", buf, "\033[K\033[0m", l - *pos, back);
|
||||
/*
|
||||
assert(l*2+20+strlen(prompt)<sizeof(tmp));
|
||||
strcpy(tmp,"\r\033[1;34m");
|
||||
strcat(tmp, prompt);
|
||||
strcat(tmp, buf);
|
||||
strcat(tmp,"\033[K\033[0m");
|
||||
j=strlen(tmp);
|
||||
for (i=l; i>*pos; i--) {
|
||||
tmp[j]='\b'; j++;
|
||||
}
|
||||
tmp[j]='\0';
|
||||
*/
|
||||
"\r\033[1m", /* bold */
|
||||
prompt, "\033[34m", /* blue */
|
||||
buf, "\033[K\033[0m", /* clear to end of line, clear colors */
|
||||
l - *pos, back);
|
||||
fputs(tmp, stdout);
|
||||
if (iret==-1) {
|
||||
iret=term_get_key(&key, -1); /* no timeout */
|
||||
@@ -322,9 +336,6 @@ int term_get_line(char *buf, int size, int *pos, char *prompt, fd_set *mask) {
|
||||
}
|
||||
hist_pos=hist_end;
|
||||
term_save_hist(0);
|
||||
printf("\r\033[K\n\033[1;34m");
|
||||
printf("%s", buf);
|
||||
printf("\033[0m");
|
||||
return(STDIN_FILENO);
|
||||
|
||||
/* normal EXIT */
|
||||
|
||||
Reference in New Issue
Block a user