Tue Nov 2 16:53:56 PST 1999 Michael Jennings <mej@eterm.org>
Several bugs fixed here, most notably a potential seg fault in Esetroot, and remembering an Eterm's size works again. Also a minor redraw speedup. And %exec() now works properly instead of just causing Eterm to crash. :-) SVN revision: 1153
This commit is contained in:
parent
dfed60dd34
commit
e8e8127832
|
@ -2721,3 +2721,11 @@ Fri Oct 29 16:43:19 PDT 1999 Michael Jennings <mej@eterm.org>
|
||||||
You'll see what I'm talking about. :-)
|
You'll see what I'm talking about. :-)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
Tue Nov 2 16:53:56 PST 1999 Michael Jennings <mej@eterm.org>
|
||||||
|
|
||||||
|
Several bugs fixed here, most notably a potential seg fault in
|
||||||
|
Esetroot, and remembering an Eterm's size works again. Also a minor
|
||||||
|
redraw speedup. And %exec() now works properly instead of just
|
||||||
|
causing Eterm to crash. :-)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
2
src/e.c
2
src/e.c
|
@ -54,7 +54,7 @@ static unsigned char timeout = 0;
|
||||||
unsigned char
|
unsigned char
|
||||||
check_for_enlightenment(void)
|
check_for_enlightenment(void)
|
||||||
{
|
{
|
||||||
static char have_e = -1;
|
static signed char have_e = -1;
|
||||||
|
|
||||||
if (have_e == -1) {
|
if (have_e == -1) {
|
||||||
if (XInternAtom(Xdisplay, "ENLIGHTENMENT_COMMS", True) != None) {
|
if (XInternAtom(Xdisplay, "ENLIGHTENMENT_COMMS", True) != None) {
|
||||||
|
|
116
src/options.c
116
src/options.c
|
@ -1275,9 +1275,44 @@ char *
|
||||||
builtin_exec(char *param)
|
builtin_exec(char *param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
unsigned long fsize;
|
||||||
|
char *Command, *Output = NULL, *OutFile;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
D_PARSE(("builtin_exec(%s) called\n", param));
|
D_PARSE(("builtin_exec(%s) called\n", param));
|
||||||
|
|
||||||
return (param);
|
Command = (char *) MALLOC(CONFIG_BUFF);
|
||||||
|
OutFile = tmpnam(NULL);
|
||||||
|
if (strlen(param) + strlen(OutFile) + 8 > CONFIG_BUFF) {
|
||||||
|
print_error("Parse error in file %s, line %lu: Cannot execute command, line too long",
|
||||||
|
file_peek_path(), file_peek_line());
|
||||||
|
return ((char *) NULL);
|
||||||
|
}
|
||||||
|
strcpy(Command, param);
|
||||||
|
strcat(Command, " >");
|
||||||
|
strcat(Command, OutFile);
|
||||||
|
system(Command);
|
||||||
|
if ((fp = fopen(OutFile, "rb")) != NULL) {
|
||||||
|
fseek(fp, 0, SEEK_END);
|
||||||
|
fsize = ftell(fp);
|
||||||
|
rewind(fp);
|
||||||
|
if (fsize) {
|
||||||
|
Output = (char *) MALLOC(fsize + 1);
|
||||||
|
fread(Output, fsize, 1, fp);
|
||||||
|
Output[fsize] = 0;
|
||||||
|
fclose(fp);
|
||||||
|
remove(OutFile);
|
||||||
|
Output = CondenseWhitespace(Output);
|
||||||
|
} else {
|
||||||
|
print_warning("Command at line %lu of file %s returned no output.", file_peek_line(), file_peek_path());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print_warning("Output file %s could not be created. (line %lu of file %s)", NONULL(OutFile),
|
||||||
|
file_peek_line(), file_peek_path());
|
||||||
|
}
|
||||||
|
FREE(Command);
|
||||||
|
|
||||||
|
return (Output);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
@ -1335,10 +1370,9 @@ shell_expand(char *s)
|
||||||
register unsigned long j, k, l = 0;
|
register unsigned long j, k, l = 0;
|
||||||
char new[CONFIG_BUFF];
|
char new[CONFIG_BUFF];
|
||||||
unsigned char eval_escape = 1, eval_var = 1, eval_exec = 1, eval_func = 1, in_single = 0, in_double = 0;
|
unsigned char eval_escape = 1, eval_var = 1, eval_exec = 1, eval_func = 1, in_single = 0, in_double = 0;
|
||||||
unsigned long fsize, cnt1 = 0, cnt2 = 0;
|
unsigned long cnt1 = 0, cnt2 = 0;
|
||||||
const unsigned long max = CONFIG_BUFF - 1;
|
const unsigned long max = CONFIG_BUFF - 1;
|
||||||
char *Command, *Output, *EnvVar, *OutFile;
|
char *Command, *Output, *EnvVar;
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
ASSERT_RVAL(s != NULL, (char *) NULL);
|
ASSERT_RVAL(s != NULL, (char *) NULL);
|
||||||
|
|
||||||
|
@ -1455,72 +1489,22 @@ shell_expand(char *s)
|
||||||
Command = (char *) MALLOC(CONFIG_BUFF);
|
Command = (char *) MALLOC(CONFIG_BUFF);
|
||||||
l = 0;
|
l = 0;
|
||||||
for (pbuff++; *pbuff && *pbuff != '`' && l < max; pbuff++, l++) {
|
for (pbuff++; *pbuff && *pbuff != '`' && l < max; pbuff++, l++) {
|
||||||
switch (*pbuff) {
|
Command[l] = *pbuff;
|
||||||
case '$':
|
|
||||||
D_OPTIONS(("Environment variable detected. Evaluating.\n"));
|
|
||||||
EnvVar = (char *) MALLOC(128);
|
|
||||||
switch (*(++pbuff)) {
|
|
||||||
case '{':
|
|
||||||
for (pbuff++, k = 0; *pbuff != '}' && k < 127; k++, pbuff++)
|
|
||||||
EnvVar[k] = *pbuff;
|
|
||||||
break;
|
|
||||||
case '(':
|
|
||||||
for (pbuff++, k = 0; *pbuff != ')' && k < 127; k++, pbuff++)
|
|
||||||
EnvVar[k] = *pbuff;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
for (k = 0; (isalnum(*pbuff) || *pbuff == '_') && k < 127; k++, pbuff++)
|
|
||||||
EnvVar[k] = *pbuff;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
EnvVar[k] = 0;
|
|
||||||
if ((tmp = getenv(EnvVar))) {
|
|
||||||
strncpy(Command + l, tmp, max - l);
|
|
||||||
cnt1 = strlen(tmp) - 1;
|
|
||||||
cnt2 = max - l - 1;
|
|
||||||
l += MIN(cnt1, cnt2);
|
|
||||||
}
|
|
||||||
pbuff--;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Command[l] = *pbuff;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ASSERT(l < CONFIG_BUFF);
|
ASSERT(l < CONFIG_BUFF);
|
||||||
Command[l] = 0;
|
Command[l] = 0;
|
||||||
OutFile = tmpnam(NULL);
|
Command = shell_expand(Command);
|
||||||
if (l + strlen(OutFile) + 8 > CONFIG_BUFF) {
|
Output = builtin_exec(Command);
|
||||||
print_error("Parse error in file %s, line %lu: Cannot execute command, line too long",
|
|
||||||
file_peek_path(), file_peek_line());
|
|
||||||
return ((char *) NULL);
|
|
||||||
}
|
|
||||||
strcat(Command, " >");
|
|
||||||
strcat(Command, OutFile);
|
|
||||||
system(Command);
|
|
||||||
if ((fp = fopen(OutFile, "rb")) != NULL) {
|
|
||||||
fseek(fp, 0, SEEK_END);
|
|
||||||
fsize = ftell(fp);
|
|
||||||
rewind(fp);
|
|
||||||
if (fsize) {
|
|
||||||
Output = (char *) MALLOC(fsize + 1);
|
|
||||||
fread(Output, fsize, 1, fp);
|
|
||||||
Output[fsize] = 0;
|
|
||||||
fclose(fp);
|
|
||||||
remove(OutFile);
|
|
||||||
Output = CondenseWhitespace(Output);
|
|
||||||
strncpy(new + j, Output, max - j);
|
|
||||||
cnt1 = strlen(Output) - 1;
|
|
||||||
cnt2 = max - j - 1;
|
|
||||||
j += MIN(cnt1, cnt2);
|
|
||||||
FREE(Output);
|
|
||||||
} else {
|
|
||||||
print_warning("Command at line %lu of file %s returned no output.", file_peek_line(), file_peek_path());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print_warning("Output file %s could not be created. (line %lu of file %s)", NONULL(OutFile),
|
|
||||||
file_peek_line(), file_peek_path());
|
|
||||||
}
|
|
||||||
FREE(Command);
|
FREE(Command);
|
||||||
|
if (Output && *Output) {
|
||||||
|
l = strlen(Output) - 1;
|
||||||
|
strncpy(new + j, Output, max - j);
|
||||||
|
cnt2 = max - j - 1;
|
||||||
|
j += MIN(l, cnt2);
|
||||||
|
FREE(Output);
|
||||||
|
} else {
|
||||||
|
j--;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
new[j] = *pbuff;
|
new[j] = *pbuff;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,6 +201,8 @@ scrollbar_init(void)
|
||||||
Cursor cursor;
|
Cursor cursor;
|
||||||
long mask;
|
long mask;
|
||||||
|
|
||||||
|
D_SCROLLBAR(("scrollbar_init(): Initializing all scrollbar elements.\n"));
|
||||||
|
|
||||||
Attributes.background_pixel = PixColors[scrollColor];
|
Attributes.background_pixel = PixColors[scrollColor];
|
||||||
Attributes.border_pixel = PixColors[bgColor];
|
Attributes.border_pixel = PixColors[bgColor];
|
||||||
Attributes.override_redirect = TRUE;
|
Attributes.override_redirect = TRUE;
|
||||||
|
@ -213,22 +215,26 @@ scrollbar_init(void)
|
||||||
CWOverrideRedirect | CWBackingStore | CWBackPixel | CWBorderPixel | CWColormap, &Attributes);
|
CWOverrideRedirect | CWBackingStore | CWBackPixel | CWBorderPixel | CWColormap, &Attributes);
|
||||||
XDefineCursor(Xdisplay, scrollBar.win, cursor);
|
XDefineCursor(Xdisplay, scrollBar.win, cursor);
|
||||||
XSelectInput(Xdisplay, scrollBar.win, mask);
|
XSelectInput(Xdisplay, scrollBar.win, mask);
|
||||||
|
D_SCROLLBAR(("scrollbar_init(): Created scrollbar window 0x%08x\n", scrollBar.win));
|
||||||
|
|
||||||
#ifdef PIXMAP_SCROLLBAR
|
#ifdef PIXMAP_SCROLLBAR
|
||||||
if (scrollbar_uparrow_is_pixmapped()) {
|
if (scrollbar_uparrow_is_pixmapped()) {
|
||||||
scrollBar.up_win = XCreateWindow(Xdisplay, scrollBar.win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
scrollBar.up_win = XCreateWindow(Xdisplay, scrollBar.win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
||||||
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
||||||
XSelectInput(Xdisplay, scrollBar.up_win, mask);
|
XSelectInput(Xdisplay, scrollBar.up_win, mask);
|
||||||
|
D_SCROLLBAR(("scrollbar_init(): Created scrollbar up arrow window 0x%08x\n", scrollBar.up_win));
|
||||||
}
|
}
|
||||||
if (scrollbar_downarrow_is_pixmapped()) {
|
if (scrollbar_downarrow_is_pixmapped()) {
|
||||||
scrollBar.dn_win = XCreateWindow(Xdisplay, scrollBar.win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
scrollBar.dn_win = XCreateWindow(Xdisplay, scrollBar.win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
||||||
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
||||||
XSelectInput(Xdisplay, scrollBar.dn_win, mask);
|
XSelectInput(Xdisplay, scrollBar.dn_win, mask);
|
||||||
|
D_SCROLLBAR(("scrollbar_init(): Created scrollbar down arrow window 0x%08x\n", scrollBar.dn_win));
|
||||||
}
|
}
|
||||||
if (scrollbar_anchor_is_pixmapped()) {
|
if (scrollbar_anchor_is_pixmapped()) {
|
||||||
scrollBar.sa_win = XCreateWindow(Xdisplay, scrollBar.win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
scrollBar.sa_win = XCreateWindow(Xdisplay, scrollBar.win, 0, 0, 1, 1, 0, Xdepth, InputOutput, CopyFromParent,
|
||||||
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWColormap, &Attributes);
|
||||||
XSelectInput(Xdisplay, scrollBar.sa_win, mask);
|
XSelectInput(Xdisplay, scrollBar.sa_win, mask);
|
||||||
|
D_SCROLLBAR(("scrollbar_init(): Created scrollbar anchor window 0x%08x\n", scrollBar.sa_win));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -237,6 +243,7 @@ scrollbar_init(void)
|
||||||
} else {
|
} else {
|
||||||
scrollbar_set_shadow((Options & Opt_scrollBar_floating) ? 0 : SHADOW);
|
scrollbar_set_shadow((Options & Opt_scrollBar_floating) ? 0 : SHADOW);
|
||||||
}
|
}
|
||||||
|
D_SCROLLBAR(("scrollbar_init(): Set scrollbar shadow to %d\n", scrollbar_get_shadow()));
|
||||||
event_register_dispatcher(scrollbar_dispatch_event, scrollbar_event_init_dispatcher);
|
event_register_dispatcher(scrollbar_dispatch_event, scrollbar_event_init_dispatcher);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -376,9 +383,6 @@ sb_handle_expose(event_t * ev)
|
||||||
|
|
||||||
while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, Expose, &unused_xevent));
|
while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, Expose, &unused_xevent));
|
||||||
while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, GraphicsExpose, &unused_xevent));
|
while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, GraphicsExpose, &unused_xevent));
|
||||||
if (scrollbar_win_is_scrollbar(ev->xany.window)) {
|
|
||||||
scrollbar_show(0);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -613,6 +617,7 @@ scrollbar_mapping(unsigned char show)
|
||||||
D_SCROLLBAR(("scrollbar_mapping(%d)\n", show));
|
D_SCROLLBAR(("scrollbar_mapping(%d)\n", show));
|
||||||
|
|
||||||
if (show && !scrollbar_visible()) {
|
if (show && !scrollbar_visible()) {
|
||||||
|
D_SCROLLBAR((" -> Mapping all scrollbar windows. Returning 1.\n"));
|
||||||
scrollBar.state = 1;
|
scrollBar.state = 1;
|
||||||
XMapWindow(Xdisplay, scrollBar.win);
|
XMapWindow(Xdisplay, scrollBar.win);
|
||||||
#ifdef PIXMAP_SCROLLBAR
|
#ifdef PIXMAP_SCROLLBAR
|
||||||
|
@ -628,6 +633,7 @@ scrollbar_mapping(unsigned char show)
|
||||||
#endif
|
#endif
|
||||||
change = 1;
|
change = 1;
|
||||||
} else if (!show && scrollbar_visible()) {
|
} else if (!show && scrollbar_visible()) {
|
||||||
|
D_SCROLLBAR((" -> Unmapping all scrollbar windows. Returning 1.\n"));
|
||||||
scrollBar.state = 0;
|
scrollBar.state = 0;
|
||||||
#ifdef PIXMAP_SCROLLBAR
|
#ifdef PIXMAP_SCROLLBAR
|
||||||
if (scrollbar_uparrow_is_pixmapped()) {
|
if (scrollbar_uparrow_is_pixmapped()) {
|
||||||
|
@ -642,6 +648,8 @@ scrollbar_mapping(unsigned char show)
|
||||||
#endif
|
#endif
|
||||||
XUnmapWindow(Xdisplay, scrollBar.win);
|
XUnmapWindow(Xdisplay, scrollBar.win);
|
||||||
change = 1;
|
change = 1;
|
||||||
|
} else {
|
||||||
|
D_SCROLLBAR((" -> No action required. Returning 0.\n"));
|
||||||
}
|
}
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,8 +205,8 @@ eterm_bootstrap(int argc, char *argv[])
|
||||||
Create_Windows(argc, argv);
|
Create_Windows(argc, argv);
|
||||||
scr_reset(); /* initialize screen */
|
scr_reset(); /* initialize screen */
|
||||||
|
|
||||||
/* add scrollBar, do it directly to avoid resize() */
|
|
||||||
scrollbar_mapping(Options & Opt_scrollBar);
|
scrollbar_mapping(Options & Opt_scrollBar);
|
||||||
|
scrollbar_resize(szHint.width, szHint.height);
|
||||||
|
|
||||||
#if DEBUG >= DEBUG_X
|
#if DEBUG >= DEBUG_X
|
||||||
if (debug_level >= DEBUG_X) {
|
if (debug_level >= DEBUG_X) {
|
||||||
|
@ -276,7 +276,6 @@ eterm_bootstrap(int argc, char *argv[])
|
||||||
|
|
||||||
D_CMD(("init_command()\n"));
|
D_CMD(("init_command()\n"));
|
||||||
init_command(rs_execArgs);
|
init_command(rs_execArgs);
|
||||||
parent_resize();
|
|
||||||
|
|
||||||
main_loop();
|
main_loop();
|
||||||
|
|
||||||
|
|
|
@ -169,9 +169,17 @@ main(int argc, char *argv[])
|
||||||
params.flags = PARAMS_VISUALID;
|
params.flags = PARAMS_VISUALID;
|
||||||
params.visualid = (DefaultVisual(Xdisplay, screen))->visualid;
|
params.visualid = (DefaultVisual(Xdisplay, screen))->visualid;
|
||||||
id = Imlib_init_with_params(Xdisplay, ¶ms);
|
id = Imlib_init_with_params(Xdisplay, ¶ms);
|
||||||
im = Imlib_load_image(id, fname);
|
if (id == NULL) {
|
||||||
if (debug) {
|
fprintf(stderr, "%s: Unable to initialize Imlib.\n", *argv);
|
||||||
|
exit(1);
|
||||||
|
} else if (debug) {
|
||||||
fprintf(stderr, "%s:%d: The Imlib Data is at %8p\n", __FILE__, __LINE__, id);
|
fprintf(stderr, "%s:%d: The Imlib Data is at %8p\n", __FILE__, __LINE__, id);
|
||||||
|
}
|
||||||
|
im = Imlib_load_image(id, fname);
|
||||||
|
if (im == NULL) {
|
||||||
|
fprintf(stderr, "%s: Unable to load image file \"%s\".\n", *argv, fname);
|
||||||
|
exit(1);
|
||||||
|
} else if (debug) {
|
||||||
fprintf(stderr, "%s:%d: The Imlib Image is at %8p\n", __FILE__, __LINE__, im);
|
fprintf(stderr, "%s:%d: The Imlib Image is at %8p\n", __FILE__, __LINE__, im);
|
||||||
}
|
}
|
||||||
if (scale) {
|
if (scale) {
|
||||||
|
|
Loading…
Reference in New Issue