- inserted possiblity to send spy commands when busy

- general enhancements of six
This commit is contained in:
zolliker
2005-03-17 16:08:08 +00:00
parent 7bf31b710b
commit c33fb15498
3 changed files with 289 additions and 176 deletions

View File

@@ -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, &regMask);
void term_reg_socket(int socket) {
FD_SET(socket, &regMask);
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, &regMask);
void term_unr_socket(int socket) {
FD_CLR(socket, &regMask);
}
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 */