X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=usystem.c;h=4a08e576d56bed1cbfebb439365618a480a9a85d;hb=51e9503489f2cee28a076bf52c56185a5283b069;hp=2334572f301ffbb91494ced99ad70545aac7eee6;hpb=e6e38912837a4fe2464356408d10dee950b3121c;p=xboard.git diff --git a/usystem.c b/usystem.c index 2334572..4a08e57 100644 --- a/usystem.c +++ b/usystem.c @@ -263,6 +263,7 @@ ParseIcsTextColors () } textColors[ColorNone].fg = textColors[ColorNone].bg = -1; textColors[ColorNone].attr = 0; + SetTextColor(cnames, textColors[ColorNormal].fg - 30, textColors[ColorNormal].bg - 40, -2); // kludge to announce background color to front-end } static Boolean noEcho; @@ -307,6 +308,8 @@ Colorize (ColorClass cc, int continuation) char buf[MSG_SIZ]; int count, outCount, error; + SetTextColor(cnames, textColors[(int)cc].fg - 30, textColors[(int)cc].bg - 40, textColors[(int)cc].attr); // for GTK widget + if (textColors[(int)cc].bg > 0) { if (textColors[(int)cc].fg > 0) { snprintf(buf, MSG_SIZ, "\033[0;%d;%d;%dm", textColors[(int)cc].attr, @@ -497,9 +500,12 @@ StartChildProcess (char *cmdLine, char *dir, ProcRef *pr) } // [HGM] kill: implement the 'hard killing' of AS's Winboard_x +static int pid; + static RETSIGTYPE AlarmCallBack (int n) { + kill(pid, SIGKILL); // kill forcefully return; } @@ -510,22 +516,17 @@ DestroyChildProcess (ProcRef pr, int signalType) if (cp->kind != CPReal) return; cp->kind = CPNone; - if (signalType == 10) { // [HGM] kill: if it does not terminate in 3 sec, kill - signal(SIGALRM, AlarmCallBack); - alarm(3); - if(wait((int *) 0) == -1) { // process does not terminate on its own accord - kill(cp->pid, SIGKILL); // kill it forcefully - wait((int *) 0); // and wait again - } - } else { - if (signalType) { - kill(cp->pid, signalType == 9 ? SIGKILL : SIGTERM); // [HGM] kill: use hard kill if so requested - } - /* Process is exiting either because of the kill or because of - a quit command sent by the backend; either way, wait for it to die. - */ - wait((int *) 0); + if (signalType & 1) { + kill(cp->pid, signalType == 9 ? SIGKILL : SIGTERM); // [HGM] kill: for 9 hard-kill immediately } + signal(SIGALRM, AlarmCallBack); + pid = cp->pid; + if(signalType & 4) alarm(1 + appData.delayAfterQuit); // [HGM] kill: schedule hard kill if so requested + /* Process is exiting either because of the kill or because of + a quit command sent by the backend; either way, wait for it to die. + */ + wait((int *) 0); + alarm(0); // cancel alarm if still pending close(cp->fdFrom); close(cp->fdTo); } @@ -678,6 +679,7 @@ OutputToProcess (ProcRef pr, char *message, int count, int *outError) free(msg); } } + if(*message != '\033') ConsoleWrite(message, count); } else outCount = write(cp->fdTo, message, count);