-/* xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999, 2000 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#define FLARE 1
#define NORMAL 2
#define FADE 3
+#define STATE_MAX FADE
#define CURSOR_INDEX 128
font = state->font;
state->scale = get_integer_resource ("scale", "Integer");
- state->ticks = 3 + get_integer_resource ("ticks", "Integer");
+ state->ticks = STATE_MAX + get_integer_resource ("ticks", "Integer");
#if 0
for (i = 0; i < font->n_properties; i++)
colors, &ncolors,
False, True, False);
+ /* Adjust to the number of colors we actually got. */
+ state->ticks = ncolors + STATE_MAX;
+
/* Now, GCs all around.
*/
state->gcv.font = font->fid;
for (i = 0; i < ncolors; i++)
{
state->gcv.foreground = colors[i].pixel;
- state->gcs[FADE + i] = XCreateGC (state->dpy, state->window,
- flags, &state->gcv);
+ state->gcs[STATE_MAX + i] = XCreateGC (state->dpy, state->window,
+ flags, &state->gcv);
}
}
continue;
XDrawString (state->dpy, p, state->gc1,
i * safe_width, font->ascent,
- string + i, 1);
+ (char *) (string + i), 1);
}
/* Draw the cursor. */
scroll (p_state *state)
{
int x, y;
+
for (x = 0; x < state->grid_width; x++)
{
- p_cell *from, *to;
+ p_cell *from = 0, *to = 0;
for (y = 1; y < state->grid_height; y++)
{
from = &state->cells[state->grid_width * y + x];
}
to = from;
- if (to->state == FLARE || to->state == NORMAL)
+ if (to && (to->state == FLARE || to->state == NORMAL))
{
to->state = FADE;
to->changed = True;
static void
print_char (p_state *state, int c)
{
+ static char last_c = 0;
+
p_cell *cell = &state->cells[state->grid_width * state->cursor_y
+ state->cursor_x];
if (c == '\r' || c == '\n')
{
- state->cursor_x = 0;
- if (state->cursor_y == state->grid_height - 1)
- scroll (state);
+ if (c == '\n' && last_c == '\r')
+ ; /* CRLF -- do nothing */
else
- state->cursor_y++;
+ {
+ state->cursor_x = 0;
+ if (state->cursor_y == state->grid_height - 1)
+ scroll (state);
+ else
+ state->cursor_y++;
+ }
}
else if (c == '\014')
{
}
}
set_cursor (state, True);
+
+ last_c = c;
}
GC gc2 = ((cell->state + 2) < state->ticks
? state->gcs[cell->state + 2]
: 0);
- XCopyPlane (state->dpy, cell->p_char->pixmap, state->window,
- (gc2 ? gc2 : gc1),
- 0, 0, width, height, tx, ty, 1L);
+ GC gc3 = (gc2 ? gc2 : gc1);
+ if (gc3)
+ XCopyPlane (state->dpy, cell->p_char->pixmap, state->window, gc3,
+ 0, 0, width, height, tx, ty, 1L);
if (gc2)
{
XSetClipMask (state->dpy, gc1, cell->p_char->pixmap2);
{
if (state->input_available_p)
{
- char s[2];
+ unsigned char s[2];
int n = read (fileno (state->pipe), (void *) s, 1);
if (n == 1)
{
"*ticks: 20",
"*delay: 50000",
"*cursor: 333",
- "*program: " ZIPPY_PROGRAM,
+ "*program: " FORTUNE_PROGRAM,
"*relaunch: 5",
0
};
XSync (dpy, False);
screenhack_handle_events (dpy);
- if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput|XtIMSignal))
- XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput|XtIMSignal);
+ if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput))
+ XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput);
if (delay) usleep (delay);
}