* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free
+ * Software Foundation, Inc.
*
* The following terms apply to Digital Equipment Corporation's copyright
* interest in XBoard:
}
textColors[ColorNone].fg = textColors[ColorNone].bg = -1;
textColors[ColorNone].attr = 0;
-}
-
-static Boolean noEcho;
-
-void
-EchoOn ()
-{
- system("stty echo");
- noEcho = False;
-}
-
-void
-EchoOff ()
-{
- system("stty -echo");
- noEcho = True;
+ SetTextColor(cnames, textColors[ColorNormal].fg - 30, textColors[ColorNormal].bg - 40, -2); // kludge to announce background color to front-end
}
char *oldICSInteractionTitle;
if (saveSettingsOnExit) SaveSettings(settingsFileName);
unlink(gameCopyFilename);
unlink(gamePasteFilename);
- if(noEcho) EchoOn();
+ EchoOn();
}
void
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,
if (*s == '~') {
if(s[1] == '~') { // use ~~ for XBoard's private data directory
- snprintf(d, 4*MSG_SIZ, DATADIR "%s", s+2);
+ snprintf(d, 4*MSG_SIZ, "%s%s", dataDir, s+2);
} else
if (*(s+1) == '/') {
safeStrCpy(d, getpwuid(getuid())->pw_dir, 4*MSG_SIZ );
close(cp->fdTo);
}
+char *
+BufferCommandOutput (char *command, int size)
+{
+ char *res = (char *) calloc(1, size);
+ if(res) {
+ int count;
+ FILE *f;
+#if 0
+ ChildProc *pr;
+ StartChildProcess(command, ".", (ProcRef) &pr); // run command in daughter process
+ f = fdopen(pr->fdFrom, "r");
+ count = fread(res, 1, size-1, f); // read its output
+ fclose(f);
+ DestroyChildProcess((ProcRef) pr, 9);
+ free(pr);
+#else
+ f = popen(command, "r");
+ if(!f) return res;
+ count = fread(res, 1, size-1, f); // read its output
+ pclose(f);
+#endif
+ res[count > 0 ? count : 0] = NULLCHAR;
+ }
+ return res; // return buffer with output
+}
+
void
InterruptChildProcess (ProcRef pr)
{
return -1;
}
+Boolean stdoutClosed = FALSE;
+
int
OutputToProcess (ProcRef pr, char *message, int count, int *outError)
{
static int line = 0;
ChildProc *cp = (ChildProc *) pr;
- int outCount;
+ int outCount = count;
if (pr == NoProc)
{
- if (appData.noJoin || !appData.useInternalWrap)
- outCount = fwrite(message, 1, count, stdout);
- else
+ if (appData.noJoin || !appData.useInternalWrap) {
+ if(!stdoutClosed) outCount = fwrite(message, 1, count, stdout);
+ } else
{
int width = get_term_width();
int len = wrap(NULL, message, count, width, &line);
free(msg);
}
}
+ if(*message != '\033') ConsoleWrite(message, count);
}
else
outCount = write(cp->fdTo, message, count);