diff --git a/wmMatrix/config.h b/wmMatrix/config.h index ad4dadd..cc6070c 100644 --- a/wmMatrix/config.h +++ b/wmMatrix/config.h @@ -9,7 +9,6 @@ * that your changes will be lost if you ever run `configure' again. */ - /* ************************************************************************* CONFIGURING SERVER EXTENSIONS ************************************************************************* */ @@ -110,8 +109,6 @@ */ /* #undef HAVE_PROC_INTERRUPTS */ - - /* ************************************************************************* CONFIGURING GRAPHICS TOOLKITS ************************************************************************* */ @@ -184,8 +181,6 @@ */ #define ZIPPY_PROGRAM "/packages/libexec/emacs/20.2/sparc-sun-solaris2.6/yow" - - /* ************************************************************************* CONFIGURING PASSWORD AUTHENTICATION ************************************************************************* */ @@ -258,13 +253,11 @@ */ /* #undef HAVE_VT_LOCKSWITCH */ - /* Define this if you the openlog(), syslog(), and closelog() functions. This is used for logging failed login attempts. */ #define HAVE_SYSLOG 1 - /* ************************************************************************* OTHER C ENVIRONMENT JUNK ************************************************************************* */ diff --git a/wmMatrix/matrix.c b/wmMatrix/matrix.c index da2f2a2..90f2d75 100644 --- a/wmMatrix/matrix.c +++ b/wmMatrix/matrix.c @@ -31,323 +31,328 @@ #include "resources.h" */ -extern GC NormalGC; -extern GC EraseGC; -extern Pixel back_pix, fore_pix; -extern int PixmapSize; -int CHAR_HEIGHT; +extern GC NormalGC; +extern GC EraseGC; +extern Pixel back_pix, fore_pix; +extern int PixmapSize; +int CHAR_HEIGHT; +static void load_images(m_state * state) +{ + if (state->xgwa.depth > 1) { + XpmAttributes xpmattrs; + int result; + xpmattrs.valuemask = 0; + xpmattrs.valuemask |= XpmCloseness; + xpmattrs.closeness = 40000; + xpmattrs.valuemask |= XpmVisual; + xpmattrs.visual = state->xgwa.visual; + xpmattrs.valuemask |= XpmDepth; + xpmattrs.depth = state->xgwa.depth; + xpmattrs.valuemask |= XpmColormap; + xpmattrs.colormap = state->xgwa.colormap; -static void load_images (m_state *state) { + if (PixmapSize == 1) { - if (state->xgwa.depth > 1) { + CHAR_HEIGHT = 4; + result = XpmCreatePixmapFromData(state->dpy, state->window, small, &state->images, 0 /* mask */ , + &xpmattrs); + } else if (PixmapSize == 2) { - XpmAttributes xpmattrs; - int result; + CHAR_HEIGHT = 6; + result = XpmCreatePixmapFromData(state->dpy, state->window, medium, &state->images, 0 /* mask */ , + &xpmattrs); + } else { - xpmattrs.valuemask = 0; - xpmattrs.valuemask |= XpmCloseness; - xpmattrs.closeness = 40000; - xpmattrs.valuemask |= XpmVisual; - xpmattrs.visual = state->xgwa.visual; - xpmattrs.valuemask |= XpmDepth; - xpmattrs.depth = state->xgwa.depth; - xpmattrs.valuemask |= XpmColormap; - xpmattrs.colormap = state->xgwa.colormap; + CHAR_HEIGHT = 8; + result = XpmCreatePixmapFromData(state->dpy, state->window, large, &state->images, 0 /* mask */ , + &xpmattrs); + } - if (PixmapSize == 1){ + if (!state->images || (result != XpmSuccess && result != XpmColorError)) + state->images = 0; - CHAR_HEIGHT = 4; - result = XpmCreatePixmapFromData (state->dpy, state->window, small, - &state->images, 0 /* mask */, - &xpmattrs); - } else if (PixmapSize == 2){ + state->image_width = xpmattrs.width; + state->image_height = xpmattrs.height; + state->nglyphs = state->image_height / CHAR_HEIGHT; - CHAR_HEIGHT = 6; - result = XpmCreatePixmapFromData (state->dpy, state->window, medium, - &state->images, 0 /* mask */, - &xpmattrs); - } else { + } else { - CHAR_HEIGHT = 8; - result = XpmCreatePixmapFromData (state->dpy, state->window, large, - &state->images, 0 /* mask */, - &xpmattrs); - } + state->image_width = matrix_width; + state->image_height = matrix_height; + state->nglyphs = state->image_height / CHAR_HEIGHT; - if (!state->images || (result != XpmSuccess && result != XpmColorError)) - state->images = 0; - - state->image_width = xpmattrs.width; - state->image_height = xpmattrs.height; - state->nglyphs = state->image_height / CHAR_HEIGHT; - - } else { - - state->image_width = matrix_width; - state->image_height = matrix_height; - state->nglyphs = state->image_height / CHAR_HEIGHT; - - state->images = XCreatePixmapFromBitmapData (state->dpy, state->window, - (char *) matrix_bits, - state->image_width, state->image_height, - back_pix, fore_pix, state->xgwa.depth); - } + state->images = XCreatePixmapFromBitmapData(state->dpy, state->window, + (char *)matrix_bits, + state->image_width, state->image_height, back_pix, fore_pix, state->xgwa.depth); + } } +m_state *init_matrix(Display * dpy, Window window) +{ -m_state *init_matrix( Display *dpy, Window window ) { + m_state *state = (m_state *) calloc(sizeof(*state), 1); - m_state *state = (m_state *) calloc (sizeof(*state), 1); + state->dpy = dpy; + state->window = window; + XGetWindowAttributes(dpy, window, &state->xgwa); + load_images(state); - state->dpy = dpy; - state->window = window; + state->draw_gc = NormalGC; + state->erase_gc = EraseGC; - XGetWindowAttributes (dpy, window, &state->xgwa); - load_images (state); + state->char_width = state->image_width / 2; + state->char_height = CHAR_HEIGHT; - state->draw_gc = NormalGC; - state->erase_gc = EraseGC; + state->grid_width = state->xgwa.width / state->char_width; + state->grid_height = state->xgwa.height / state->char_height; + state->grid_width++; + state->grid_height++; - state->char_width = state->image_width / 2; - state->char_height = CHAR_HEIGHT; + state->cells = (m_cell *) calloc(sizeof(m_cell), state->grid_width * state->grid_height); + state->feeders = (m_feeder *) calloc(sizeof(m_feeder), state->grid_width); - state->grid_width = state->xgwa.width / state->char_width; - state->grid_height = state->xgwa.height / state->char_height; - state->grid_width++; - state->grid_height++; + state->density = 40; - state->cells = (m_cell *)calloc (sizeof(m_cell), state->grid_width * state->grid_height); - state->feeders = (m_feeder *)calloc (sizeof(m_feeder), state->grid_width); + state->insert_top_p = False; + state->insert_bottom_p = True; - state->density = 40; - - state->insert_top_p = False; - state->insert_bottom_p = True; - - - return state; + return state; } +static void insert_glyph(m_state * state, int glyph, int x, int y) +{ -static void insert_glyph (m_state *state, int glyph, int x, int y) { + Bool bottom_feeder_p = (y >= 0); + m_cell *from, *to; - Bool bottom_feeder_p = (y >= 0); - m_cell *from, *to; + if (y >= state->grid_height) + return; - if (y >= state->grid_height) return; + if (bottom_feeder_p) { - if (bottom_feeder_p) { + to = &state->cells[state->grid_width * y + x]; - to = &state->cells[state->grid_width * y + x]; + } else { - } else { + for (y = state->grid_height - 1; y > 0; y--) { - for (y = state->grid_height-1; y > 0; y--) { + from = &state->cells[state->grid_width * (y - 1) + x]; + to = &state->cells[state->grid_width * y + x]; + *to = *from; + to->changed = True; - from = &state->cells[state->grid_width * (y-1) + x]; - to = &state->cells[state->grid_width * y + x]; - *to = *from; - to->changed = True; - - } - to = &state->cells[x]; - - } - - to->glyph = glyph; - to->changed = True; - - if (!to->glyph) ; - else if (bottom_feeder_p) to->glow = 1 + (random() % 2); - else to->glow = 0; - -} - - -static void feed_matrix (m_state *state) { - - int x; - - - /* - * Update according to current feeders. - */ - for (x = 0; x < state->grid_width; x++) { - - m_feeder *f = &state->feeders[x]; - - if (f->throttle) { /* this is a delay tick, synced to frame. */ - - f->throttle--; - - } else if (f->remaining > 0) { /* how many items are in the pipe */ - - int g = (random() % state->nglyphs) + 1; - insert_glyph (state, g, x, f->y); - f->remaining--; - if (f->y >= 0) f->y++; /* bottom_feeder_p */ - - } else { /* if pipe is empty, insert spaces */ - - insert_glyph (state, 0, x, f->y); - if (f->y >= 0) f->y++; /* bottom_feeder_p */ - - } - - if ((random() % 10) == 0) { /* randomly change throttle speed */ - - f->throttle = ((random() % 5) + (random() % 5)); + } + to = &state->cells[x]; } - } + to->glyph = glyph; + to->changed = True; + + if (!to->glyph) ; + else if (bottom_feeder_p) + to->glow = 1 + (random() % 2); + else + to->glow = 0; } -static int densitizer (m_state *state) { +static void feed_matrix(m_state * state) +{ - /* Horrid kludge that converts percentages (density of screen coverage) - to the parameter that actually controls this. I got this mapping - empirically, on a 1024x768 screen. Sue me. */ - if (state->density < 10) return 85; - else if (state->density < 15) return 60; - else if (state->density < 20) return 45; - else if (state->density < 25) return 25; - else if (state->density < 30) return 20; - else if (state->density < 35) return 15; - else if (state->density < 45) return 10; - else if (state->density < 50) return 8; - else if (state->density < 55) return 7; - else if (state->density < 65) return 5; - else if (state->density < 80) return 3; - else if (state->density < 90) return 2; - else return 1; + int x; -} - - -static void hack_matrix (m_state *state) { - - int x; - - /* Glow some characters. */ - if (!state->insert_bottom_p) { - - int i = random() % (state->grid_width / 2); - while (--i > 0) { - - int x = random() % state->grid_width; - int y = random() % state->grid_height; - m_cell *cell = &state->cells[state->grid_width * y + x]; - if (cell->glyph && cell->glow == 0) { - - cell->glow = random() % 10; - cell->changed = True; - } - - } - } - - /* Change some of the feeders. */ - for (x = 0; x < state->grid_width; x++) { - - m_feeder *f = &state->feeders[x]; - Bool bottom_feeder_p; - - if (f->remaining > 0) /* never change if pipe isn't empty */ - continue; - - if ((random() % densitizer(state)) != 0) /* then change N% of the time */ - continue; - - f->remaining = 3 + (random() % state->grid_height); - f->throttle = ((random() % 5) + (random() % 5)); - - if ((random() % 4) != 0) - f->remaining = 0; - - if (state->insert_top_p && state->insert_bottom_p) - bottom_feeder_p = (random() & 1); - else - bottom_feeder_p = state->insert_bottom_p; - - if (bottom_feeder_p) - f->y = random() % (state->grid_height / 2); - else - f->y = -1; - } -} - - -void draw_matrix (m_state *state, int d) { - - int x, y; - int count = 0; - - state->density = d; - feed_matrix( state ); - hack_matrix( state ); - - for (y = 0; y < state->grid_height; y++) { + /* + * Update according to current feeders. + */ for (x = 0; x < state->grid_width; x++) { - m_cell *cell = &state->cells[state->grid_width * y + x]; + m_feeder *f = &state->feeders[x]; - if ( cell->glyph ) count++; + if (f->throttle) { /* this is a delay tick, synced to frame. */ - if ( !cell->changed ) continue; + f->throttle--; - if ( cell->glyph == 0 ) { + } else if (f->remaining > 0) { /* how many items are in the pipe */ - XFillRectangle( state->dpy, state->window, state->erase_gc, - x * state->char_width, y * state->char_height, - state->char_width, state->char_height ); - } else { + int g = (random() % state->nglyphs) + 1; + insert_glyph(state, g, x, f->y); + f->remaining--; + if (f->y >= 0) + f->y++; /* bottom_feeder_p */ - XCopyArea( state->dpy, state->images, state->window, state->draw_gc, - (cell->glow ? state->char_width : 0), (cell->glyph - 1) * state->char_height, - state->char_width, state->char_height, x * state->char_width, y * state->char_height ); - - } + } else { /* if pipe is empty, insert spaces */ - cell->changed = False; + insert_glyph(state, 0, x, f->y); + if (f->y >= 0) + f->y++; /* bottom_feeder_p */ - if (cell->glow > 0) { + } - cell->glow--; - cell->changed = True; + if ((random() % 10) == 0) { /* randomly change throttle speed */ - } + f->throttle = ((random() % 5) + (random() % 5)); + + } } - } +} + +static int densitizer(m_state * state) +{ + + /* Horrid kludge that converts percentages (density of screen coverage) + to the parameter that actually controls this. I got this mapping + empirically, on a 1024x768 screen. Sue me. */ + if (state->density < 10) + return 85; + else if (state->density < 15) + return 60; + else if (state->density < 20) + return 45; + else if (state->density < 25) + return 25; + else if (state->density < 30) + return 20; + else if (state->density < 35) + return 15; + else if (state->density < 45) + return 10; + else if (state->density < 50) + return 8; + else if (state->density < 55) + return 7; + else if (state->density < 65) + return 5; + else if (state->density < 80) + return 3; + else if (state->density < 90) + return 2; + else + return 1; + +} + +static void hack_matrix(m_state * state) +{ + + int x; + + /* Glow some characters. */ + if (!state->insert_bottom_p) { + + int i = random() % (state->grid_width / 2); + while (--i > 0) { + + int x = random() % state->grid_width; + int y = random() % state->grid_height; + m_cell *cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph && cell->glow == 0) { + + cell->glow = random() % 10; + cell->changed = True; + } + + } + } + + /* Change some of the feeders. */ + for (x = 0; x < state->grid_width; x++) { + + m_feeder *f = &state->feeders[x]; + Bool bottom_feeder_p; + + if (f->remaining > 0) /* never change if pipe isn't empty */ + continue; + + if ((random() % densitizer(state)) != 0) /* then change N% of the time */ + continue; + + f->remaining = 3 + (random() % state->grid_height); + f->throttle = ((random() % 5) + (random() % 5)); + + if ((random() % 4) != 0) + f->remaining = 0; + + if (state->insert_top_p && state->insert_bottom_p) + bottom_feeder_p = (random() & 1); + else + bottom_feeder_p = state->insert_bottom_p; + + if (bottom_feeder_p) + f->y = random() % (state->grid_height / 2); + else + f->y = -1; + } +} + +void draw_matrix(m_state * state, int d) +{ + + int x, y; + int count = 0; + + state->density = d; + feed_matrix(state); + hack_matrix(state); + + for (y = 0; y < state->grid_height; y++) { + for (x = 0; x < state->grid_width; x++) { + + m_cell *cell = &state->cells[state->grid_width * y + x]; + + if (cell->glyph) + count++; + + if (!cell->changed) + continue; + + if (cell->glyph == 0) { + + XFillRectangle(state->dpy, state->window, state->erase_gc, + x * state->char_width, y * state->char_height, state->char_width, state->char_height); + } else { + + XCopyArea(state->dpy, state->images, state->window, state->draw_gc, + (cell->glow ? state->char_width : 0), (cell->glyph - 1) * state->char_height, + state->char_width, state->char_height, x * state->char_width, y * state->char_height); + + } + + cell->changed = False; + + if (cell->glow > 0) { + + cell->glow--; + cell->changed = True; + + } + + } + } #if 0 - { - static int i = 0; - static int ndens = 0; - static int tdens = 0; - i++; - if (i > 50) - { - int dens = (100.0 * - (((double)count) / - ((double) (state->grid_width * state->grid_height)))); - tdens += dens; - ndens++; - printf ("density: %d%% (%d%%)\n", dens, (tdens / ndens)); - i = 0; - } - } + { + static int i = 0; + static int ndens = 0; + static int tdens = 0; + i++; + if (i > 50) { + int dens = (100.0 * (((double)count) / ((double)(state->grid_width * state->grid_height)))); + tdens += dens; + ndens++; + printf("density: %d%% (%d%%)\n", dens, (tdens / ndens)); + i = 0; + } + } #endif } - diff --git a/wmMatrix/matrix.h b/wmMatrix/matrix.h index ae90d93..f3e7d92 100644 --- a/wmMatrix/matrix.h +++ b/wmMatrix/matrix.h @@ -6,34 +6,32 @@ #include #include - typedef struct { - int glyph; - int changed; - int glow; + int glyph; + int changed; + int glow; } m_cell; typedef struct { - int remaining; - int throttle; - int y; + int remaining; + int throttle; + int y; } m_feeder; typedef struct { - Display *dpy; - Window window; - XWindowAttributes xgwa; - GC draw_gc, erase_gc; - int grid_width, grid_height; - int char_width, char_height; - m_cell *cells; - m_feeder *feeders; - int insert_top_p, insert_bottom_p; - int density; + Display *dpy; + Window window; + XWindowAttributes xgwa; + GC draw_gc, erase_gc; + int grid_width, grid_height; + int char_width, char_height; + m_cell *cells; + m_feeder *feeders; + int insert_top_p, insert_bottom_p; + int density; - Pixmap images; - int image_width, image_height; - int nglyphs; + Pixmap images; + int image_width, image_height; + int nglyphs; } m_state; - diff --git a/wmMatrix/version.h b/wmMatrix/version.h index f71c521..a119d20 100644 --- a/wmMatrix/version.h +++ b/wmMatrix/version.h @@ -1,2 +1 @@ -static const char screensaver_id[] = - "@(#)xscreensaver 3.17 (15-Jul-99), by Jamie Zawinski (jwz@jwz.org)"; +static const char screensaver_id[] = "@(#)xscreensaver 3.17 (15-Jul-99), by Jamie Zawinski (jwz@jwz.org)"; diff --git a/wmMatrix/wmMatrix.c b/wmMatrix/wmMatrix.c index 002f993..e4b387e 100644 --- a/wmMatrix/wmMatrix.c +++ b/wmMatrix/wmMatrix.c @@ -38,7 +38,6 @@ * */ - /* * Includes */ @@ -54,157 +53,155 @@ #include "wmMatrix_mask.xbm" #include "matrix.h" - /* * Delay between refreshes (in microseconds) */ -#define DELAY 20000UL /* 0.020000 sec */ +#define DELAY 20000UL /* 0.020000 sec */ #define WMMATRIX_VERSION "0.2" +void ParseCMDLine(int argc, char *argv[]); +void ButtonPressEvent(XButtonEvent *); +void print_usage(); +m_state *init_matrix(Display *, Window); +void draw_matrix(m_state *, int); -void ParseCMDLine(int argc, char *argv[]); -void ButtonPressEvent(XButtonEvent *); -void print_usage(); -m_state *init_matrix( Display *, Window ); -void draw_matrix( m_state *, int ); - - -int GotFirstClick1, GotDoubleClick1; -int GotFirstClick2, GotDoubleClick2; -int GotFirstClick3, GotDoubleClick3; -int DblClkDelay; +int GotFirstClick1, GotDoubleClick1; +int GotFirstClick2, GotDoubleClick2; +int GotFirstClick3, GotDoubleClick3; +int DblClkDelay; /*int HasExecute;*/ /*char* ExecuteCommand = "xmatrixsmall";*/ -char *progname = "wmMatrix"; -char *progclass = "WMMatrix"; -int PixmapSize; +char *progname = "wmMatrix"; +char *progclass = "WMMatrix"; +int PixmapSize; char *DoubleClickCmd = NULL; char *RDoubleClickCmd = NULL; -char* TimeColor = "#ffff00"; -char* BackgroundColor = "#181818"; - +char *TimeColor = "#ffff00"; +char *BackgroundColor = "#181818"; /* * main */ -int main(int argc, char *argv[]) { - XEvent event; - m_state *state; - - - /* - * Parse any command line arguments. - */ - ParseCMDLine(argc, argv); - if(DoubleClickCmd==NULL) - DoubleClickCmd=strdup("xscreensaver-demo"); - if(RDoubleClickCmd==NULL) - RDoubleClickCmd=strdup("xscreensaver-command -activate"); - initXwindow(argc, argv); - openXwindow(argc, argv, wmMatrix_master, wmMatrix_mask_bits, wmMatrix_mask_width, wmMatrix_mask_height); - state = init_matrix( display, iconwin ); - - /* - * Loop until we die - */ - while(1) { - draw_matrix( state, 40 ); - - /* - * Double Click Delays - * Keep track of click events. If Delay too long, set GotFirstClick's to False. - */ - /* 25 * 0.02 = .5 sec */ - if (DblClkDelay > 25) { - DblClkDelay = 0; - GotFirstClick1 = 0; GotDoubleClick1 = 0; - GotFirstClick2 = 0; GotDoubleClick2 = 0; - GotFirstClick3 = 0; GotDoubleClick3 = 0; - } else { - ++DblClkDelay; - } +int main(int argc, char *argv[]) +{ + XEvent event; + m_state *state; /* - * Process any pending X events. + * Parse any command line arguments. */ - while(XPending(display)){ - XNextEvent(display, &event); - switch(event.type){ - case Expose: - RedrawWindow(); - break; - case ButtonPress: - ButtonPressEvent(&event.xbutton); - break; - case ButtonRelease: - break; - } - } + ParseCMDLine(argc, argv); + if (DoubleClickCmd == NULL) + DoubleClickCmd = strdup("xscreensaver-demo"); + if (RDoubleClickCmd == NULL) + RDoubleClickCmd = strdup("xscreensaver-command -activate"); + initXwindow(argc, argv); + openXwindow(argc, argv, wmMatrix_master, wmMatrix_mask_bits, wmMatrix_mask_width, wmMatrix_mask_height); + state = init_matrix(display, iconwin); /* - * sleep till next update. I cant seem to get usleep or select to work properly - * with args smaller than 10000. A kernel tick problem? If I comment out the next line, - * the app screams (chews up cpu too). Or if I use DELAY of 0 it also screams. - * But a delay of 1 or higher is slow..... - * + * Loop until we die */ - short_uusleep(DELAY); - } + while (1) { + draw_matrix(state, 40); + + /* + * Double Click Delays + * Keep track of click events. If Delay too long, set GotFirstClick's to False. + */ + /* 25 * 0.02 = .5 sec */ + if (DblClkDelay > 25) { + DblClkDelay = 0; + GotFirstClick1 = 0; + GotDoubleClick1 = 0; + GotFirstClick2 = 0; + GotDoubleClick2 = 0; + GotFirstClick3 = 0; + GotDoubleClick3 = 0; + } else { + ++DblClkDelay; + } + + /* + * Process any pending X events. + */ + while (XPending(display)) { + XNextEvent(display, &event); + switch (event.type) { + case Expose: + RedrawWindow(); + break; + case ButtonPress: + ButtonPressEvent(&event.xbutton); + break; + case ButtonRelease: + break; + } + } + + /* + * sleep till next update. I cant seem to get usleep or select to work properly + * with args smaller than 10000. A kernel tick problem? If I comment out the next line, + * the app screams (chews up cpu too). Or if I use DELAY of 0 it also screams. + * But a delay of 1 or higher is slow..... + * + */ + short_uusleep(DELAY); + } } - /* * ParseCMDLine() */ -void ParseCMDLine(int argc, char *argv[]) { - int i; - PixmapSize = 2; - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-display")){ - ++i; - } else if (!strcmp(argv[i], "-c")){ - if ((i+1 >= argc)||(argv[i+1][0] == '-')) { - fprintf(stderr, "wmMatrix: No command given\n"); - print_usage(); - exit(-1); - } - if(DoubleClickCmd!=NULL) - free(DoubleClickCmd); - DoubleClickCmd=strdup(argv[++i]); - } else if (!strcmp(argv[i], "-cr")){ - if ((i+1 >= argc)||(argv[i+1][0] == '-')) { - fprintf(stderr, "wmMatrix: No command given\n"); - print_usage(); - exit(-1); - } - if(RDoubleClickCmd!=NULL) - free(RDoubleClickCmd); - RDoubleClickCmd=strdup(argv[++i]); - } else if (!strcmp(argv[i], "-sml")){ - PixmapSize = 1; - } else if (!strcmp(argv[i], "-med")){ - PixmapSize = 2; - } else if (!strcmp(argv[i], "-lrg")){ - PixmapSize = 3; - } else { - print_usage(); - exit(1); +void ParseCMDLine(int argc, char *argv[]) +{ + int i; + PixmapSize = 2; + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-display")) { + ++i; + } else if (!strcmp(argv[i], "-c")) { + if ((i + 1 >= argc) || (argv[i + 1][0] == '-')) { + fprintf(stderr, "wmMatrix: No command given\n"); + print_usage(); + exit(-1); + } + if (DoubleClickCmd != NULL) + free(DoubleClickCmd); + DoubleClickCmd = strdup(argv[++i]); + } else if (!strcmp(argv[i], "-cr")) { + if ((i + 1 >= argc) || (argv[i + 1][0] == '-')) { + fprintf(stderr, "wmMatrix: No command given\n"); + print_usage(); + exit(-1); + } + if (RDoubleClickCmd != NULL) + free(RDoubleClickCmd); + RDoubleClickCmd = strdup(argv[++i]); + } else if (!strcmp(argv[i], "-sml")) { + PixmapSize = 1; + } else if (!strcmp(argv[i], "-med")) { + PixmapSize = 2; + } else if (!strcmp(argv[i], "-lrg")) { + PixmapSize = 3; + } else { + print_usage(); + exit(1); + } } - } } - -void print_usage() { - printf("\nwmMatrix version: %s\n", WMMATRIX_VERSION); - printf("\t-h\t\tDisplay help screen.\n"); - printf("\t-c cmd\t\tCommand executed on doubleclick.\n"); - printf("\t-cr cmd\t\tCommand executed on right doubleclick\n"); - printf("\t-sml\t\tUse small size pixmap.\n"); - printf("\t-med\t\tUse medium size pixmap.\n"); - printf("\t-lrg\t\tUse large size pixmap.\n"); +void print_usage() +{ + printf("\nwmMatrix version: %s\n", WMMATRIX_VERSION); + printf("\t-h\t\tDisplay help screen.\n"); + printf("\t-c cmd\t\tCommand executed on doubleclick.\n"); + printf("\t-cr cmd\t\tCommand executed on right doubleclick\n"); + printf("\t-sml\t\tUse small size pixmap.\n"); + printf("\t-med\t\tUse medium size pixmap.\n"); + printf("\t-lrg\t\tUse large size pixmap.\n"); } - /* * This routine handles button presses. * @@ -215,46 +212,50 @@ void print_usage() { * * */ -void ButtonPressEvent(XButtonEvent *xev){ - DblClkDelay = 0; - if ((xev->button == Button1) && (xev->type == ButtonPress)){ - if (GotFirstClick1) GotDoubleClick1 = 1; - else GotFirstClick1 = 1; - } else if ((xev->button == Button2) && (xev->type == ButtonPress)){ - if (GotFirstClick2) GotDoubleClick2 = 1; - else GotFirstClick2 = 1; - } else if ((xev->button == Button3) && (xev->type == ButtonPress)){ - if (GotFirstClick3) GotDoubleClick3 = 1; - else GotFirstClick3 = 1; - } +void ButtonPressEvent(XButtonEvent * xev) +{ + DblClkDelay = 0; + if ((xev->button == Button1) && (xev->type == ButtonPress)) { + if (GotFirstClick1) + GotDoubleClick1 = 1; + else + GotFirstClick1 = 1; + } else if ((xev->button == Button2) && (xev->type == ButtonPress)) { + if (GotFirstClick2) + GotDoubleClick2 = 1; + else + GotFirstClick2 = 1; + } else if ((xev->button == Button3) && (xev->type == ButtonPress)) { + if (GotFirstClick3) + GotDoubleClick3 = 1; + else + GotFirstClick3 = 1; + } + /* + * We got a double click on Mouse Button1 (i.e. the left one) + */ + if (GotDoubleClick1) { + GotFirstClick1 = 0; + GotDoubleClick1 = 0; + system(DoubleClickCmd); + } - /* - * We got a double click on Mouse Button1 (i.e. the left one) - */ - if (GotDoubleClick1) { - GotFirstClick1 = 0; - GotDoubleClick1 = 0; - system(DoubleClickCmd); - } + /* + * We got a double click on Mouse Button2 (i.e. the middle one) + */ + if (GotDoubleClick2) { + GotFirstClick2 = 0; + GotDoubleClick2 = 0; + } - - /* - * We got a double click on Mouse Button2 (i.e. the middle one) - */ - if (GotDoubleClick2) { - GotFirstClick2 = 0; - GotDoubleClick2 = 0; - } - - - /* - * We got a double click on Mouse Button3 (i.e. the right one) - */ - if (GotDoubleClick3) { - GotFirstClick3 = 0; - GotDoubleClick3 = 0; - system(RDoubleClickCmd); - } - return; + /* + * We got a double click on Mouse Button3 (i.e. the right one) + */ + if (GotDoubleClick3) { + GotFirstClick3 = 0; + GotDoubleClick3 = 0; + system(RDoubleClickCmd); + } + return; } diff --git a/wmMatrix/xutils.c b/wmMatrix/xutils.c index 6adb87b..c43a98a 100644 --- a/wmMatrix/xutils.c +++ b/wmMatrix/xutils.c @@ -27,7 +27,7 @@ * * * - */ + */ #include #include #include @@ -41,342 +41,297 @@ #include #include "xutils.h" - - /* * X11 Variables */ -int x_fd; -XSizeHints mysizehints; -XWMHints mywmhints; -Pixel back_pix, fore_pix; -char *Geometry = ""; -GC NormalGC; -GC EraseGC; -XpmIcon wmgen; -Pixmap pixmask; - +int x_fd; +XSizeHints mysizehints; +XWMHints mywmhints; +Pixel back_pix, fore_pix; +char *Geometry = ""; +GC NormalGC; +GC EraseGC; +XpmIcon wmgen; +Pixmap pixmask; /* * Colors for wmCalClock */ -extern char TimeColor[30]; -extern char BackgroundColor[30]; - - - - - +extern char TimeColor[30]; +extern char BackgroundColor[30]; /* * flush_expose */ -static int flush_expose(Window w) { +static int flush_expose(Window w) +{ - XEvent dummy; - int i=0; + XEvent dummy; + int i = 0; - while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) - i++; + while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) + i++; - return i; + return i; } - - - - - - - - /* * RedrawWindow * RedrawWindowXY */ -void RedrawWindow(void) { - - flush_expose(iconwin); - XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 0,0, wmgen.attributes.width, wmgen.attributes.height, 0, 0); +void RedrawWindow(void) +{ - flush_expose(win); - XCopyArea(display, wmgen.pixmap, win, NormalGC, 0,0, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 0, 0, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, 0, 0, wmgen.attributes.width, wmgen.attributes.height, 0, 0); } -void RedrawWindowXY(int x, int y) { - - flush_expose(iconwin); - XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, x,y, wmgen.attributes.width, wmgen.attributes.height, 0, 0); +void RedrawWindowXY(int x, int y) +{ - flush_expose(win); - XCopyArea(display, wmgen.pixmap, win, NormalGC, x,y, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, x, y, wmgen.attributes.width, wmgen.attributes.height, 0, 0); + + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, x, y, wmgen.attributes.width, wmgen.attributes.height, 0, 0); } - - - - - - /* * copyXPMArea * copyXBMArea */ -void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) { +void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) +{ XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); } -void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) { +void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) +{ XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); } - - /* * initXwindow */ -void initXwindow(int argc, char *argv[]){ +void initXwindow(int argc, char *argv[]) +{ - int i; - char *display_name = NULL; + int i; + char *display_name = NULL; - for (i=1; argv[i]; ++i) { - if (!strcmp(argv[i], "-display")) display_name = argv[i+1]; - } + for (i = 1; argv[i]; ++i) { + if (!strcmp(argv[i], "-display")) + display_name = argv[i + 1]; + } + if (!(display = XOpenDisplay(display_name))) { + fprintf(stderr, "%s: can't open display %s\n", argv[0], XDisplayName(display_name)); + exit(1); + } - if (!(display = XOpenDisplay(display_name))) { - fprintf(stderr, "%s: can't open display %s\n", - argv[0], XDisplayName(display_name)); - exit(1); - } - - - screen = DefaultScreen(display); - Root = RootWindow(display, screen); - DisplayDepth = DefaultDepth(display, screen); - x_fd = XConnectionNumber(display); + screen = DefaultScreen(display); + Root = RootWindow(display, screen); + DisplayDepth = DefaultDepth(display, screen); + x_fd = XConnectionNumber(display); } - - - - /* * openXwindow */ -void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, - int pixmask_width, int pixmask_height) { +void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) +{ - unsigned int borderwidth = 1; - XClassHint classHint; - char *wname = argv[0]; - XTextProperty name; - XGCValues gcv; - unsigned long gcm; - int dummy=0, red, grn, blu; - XpmColorSymbol cols[10]={ {"Back", NULL, 0}, - {"Color1", NULL, 0}, - {"Color2", NULL, 0}, - {"Color3", NULL, 0}, - {"Color4", NULL, 0}, - {"Color5", NULL, 0}, - {"Color6", NULL, 0}, - {"Color7", NULL, 0}, - {"Color8", NULL, 0}, - {"Color9", NULL, 0}}; + unsigned int borderwidth = 1; + XClassHint classHint; + char *wname = argv[0]; + XTextProperty name; + XGCValues gcv; + unsigned long gcm; + int dummy = 0, red, grn, blu; + XpmColorSymbol cols[10] = { {"Back", NULL, 0}, + {"Color1", NULL, 0}, + {"Color2", NULL, 0}, + {"Color3", NULL, 0}, + {"Color4", NULL, 0}, + {"Color5", NULL, 0}, + {"Color6", NULL, 0}, + {"Color7", NULL, 0}, + {"Color8", NULL, 0}, + {"Color9", NULL, 0} + }; + /* + * Create Pixmap + */ + cols[0].pixel = getColor(BackgroundColor, 1.0000, &red, &grn, &blu); + cols[1].pixel = getBlendedColor(TimeColor, 0.1522, red, grn, blu); + cols[2].pixel = getBlendedColor(TimeColor, 0.2602, red, grn, blu); + cols[3].pixel = getBlendedColor(TimeColor, 0.3761, red, grn, blu); + cols[4].pixel = getBlendedColor(TimeColor, 0.4841, red, grn, blu); + cols[5].pixel = getBlendedColor(TimeColor, 0.5922, red, grn, blu); + cols[6].pixel = getBlendedColor(TimeColor, 0.6980, red, grn, blu); + cols[7].pixel = getBlendedColor(TimeColor, 0.7961, red, grn, blu); + cols[8].pixel = getBlendedColor(TimeColor, 0.8941, red, grn, blu); + cols[9].pixel = getBlendedColor(TimeColor, 1.0000, red, grn, blu); - + wmgen.attributes.numsymbols = 10; + wmgen.attributes.colorsymbols = cols; + wmgen.attributes.exactColors = False; + wmgen.attributes.closeness = 40000; + wmgen.attributes.valuemask = XpmReturnPixels | XpmReturnExtensions | XpmColorSymbols | XpmExactColors | XpmCloseness | XpmSize; + if (XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen.pixmap), &(wmgen.mask), &(wmgen.attributes)) != XpmSuccess) { + fprintf(stderr, "Not enough free colorcells.\n"); + exit(1); + } - /* - * Create Pixmap - */ - cols[0].pixel = getColor(BackgroundColor, 1.0000, &red, &grn, &blu); - cols[1].pixel = getBlendedColor(TimeColor, 0.1522, red, grn, blu); - cols[2].pixel = getBlendedColor(TimeColor, 0.2602, red, grn, blu); - cols[3].pixel = getBlendedColor(TimeColor, 0.3761, red, grn, blu); - cols[4].pixel = getBlendedColor(TimeColor, 0.4841, red, grn, blu); - cols[5].pixel = getBlendedColor(TimeColor, 0.5922, red, grn, blu); - cols[6].pixel = getBlendedColor(TimeColor, 0.6980, red, grn, blu); - cols[7].pixel = getBlendedColor(TimeColor, 0.7961, red, grn, blu); - cols[8].pixel = getBlendedColor(TimeColor, 0.8941, red, grn, blu); - cols[9].pixel = getBlendedColor(TimeColor, 1.0000, red, grn, blu); + /* + * Create a window + */ + mysizehints.flags = USSize | USPosition; + mysizehints.x = 0; + mysizehints.y = 0; - wmgen.attributes.numsymbols = 10; - wmgen.attributes.colorsymbols = cols; - wmgen.attributes.exactColors = False; - wmgen.attributes.closeness = 40000; - wmgen.attributes.valuemask = XpmReturnPixels | XpmReturnExtensions | XpmColorSymbols - | XpmExactColors | XpmCloseness | XpmSize; - if (XpmCreatePixmapFromData(display, Root, pixmap_bytes, - &(wmgen.pixmap), &(wmgen.mask), &(wmgen.attributes)) != XpmSuccess){ - fprintf(stderr, "Not enough free colorcells.\n"); - exit(1); - } + back_pix = getColor("black", 1.0, &red, &grn, &blu); + fore_pix = getColor("white", 1.0, &red, &grn, &blu); + XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, + &mysizehints.x, &mysizehints.y, &mysizehints.width, &mysizehints.height, &dummy); + mysizehints.width = 64; + mysizehints.height = 64; + win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); - /* - * Create a window - */ - mysizehints.flags = USSize | USPosition; - mysizehints.x = 0; - mysizehints.y = 0; + iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); - back_pix = getColor("black", 1.0, &red, &grn, &blu); - fore_pix = getColor("white", 1.0, &red, &grn, &blu); + /* + * Activate hints + */ + XSetWMNormalHints(display, win, &mysizehints); + classHint.res_name = wname; + classHint.res_class = wname; + XSetClassHint(display, win, &classHint); - XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, - &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy); + /* + * Set up the xevents that you want the relevent windows to inherit + * Currently, its seems that setting KeyPress events here has no + * effect. I.e. for some you will need to Grab the focus and then return + * it after you are done... + */ + XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask + | PointerMotionMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask | KeyPressMask | KeyReleaseMask); + XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask + | PointerMotionMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask | KeyPressMask | KeyReleaseMask); - mysizehints.width = 64; - mysizehints.height = 64; - + if (XStringListToTextProperty(&wname, 1, &name) == 0) { + fprintf(stderr, "%s: can't allocate window name\n", wname); + exit(1); + } + XSetWMName(display, win, &name); - win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y, - mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); - - iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y, - mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + /* + * Create Graphics Context (GC) for drawing + */ + gcm = GCForeground | GCBackground | GCGraphicsExposures; + gcv.foreground = fore_pix; + gcv.background = back_pix; + gcv.graphics_exposures = 0; + NormalGC = XCreateGC(display, Root, gcm, &gcv); + /* + * Create Graphics Context (GC) for erasing + */ + gcm = GCForeground | GCBackground | GCGraphicsExposures; + gcv.foreground = back_pix; + gcv.background = back_pix; + gcv.graphics_exposures = 0; + EraseGC = XCreateGC(display, Root, gcm, &gcv); + pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height); + XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet); + XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); - /* - * Activate hints - */ - XSetWMNormalHints(display, win, &mysizehints); - classHint.res_name = wname; - classHint.res_class = wname; - XSetClassHint(display, win, &classHint); + mywmhints.initial_state = WithdrawnState; + mywmhints.icon_window = iconwin; + mywmhints.icon_x = mysizehints.x; + mywmhints.icon_y = mysizehints.y; + mywmhints.window_group = win; + mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; + XSetWMHints(display, win, &mywmhints); - - /* - * Set up the xevents that you want the relevent windows to inherit - * Currently, its seems that setting KeyPress events here has no - * effect. I.e. for some you will need to Grab the focus and then return - * it after you are done... - */ - XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask - | PointerMotionMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask - | KeyPressMask | KeyReleaseMask); - XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask - | PointerMotionMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask - | KeyPressMask | KeyReleaseMask); - - - if (XStringListToTextProperty(&wname, 1, &name) == 0) { - fprintf(stderr, "%s: can't allocate window name\n", wname); - exit(1); - } - - - XSetWMName(display, win, &name); - - /* - * Create Graphics Context (GC) for drawing - */ - gcm = GCForeground | GCBackground | GCGraphicsExposures; - gcv.foreground = fore_pix; - gcv.background = back_pix; - gcv.graphics_exposures = 0; - NormalGC = XCreateGC(display, Root, gcm, &gcv); - - /* - * Create Graphics Context (GC) for erasing - */ - gcm = GCForeground | GCBackground | GCGraphicsExposures; - gcv.foreground = back_pix; - gcv.background = back_pix; - gcv.graphics_exposures = 0; - EraseGC = XCreateGC(display, Root, gcm, &gcv); - - - - pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height); - XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet); - XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); - - - mywmhints.initial_state = WithdrawnState; - mywmhints.icon_window = iconwin; - mywmhints.icon_x = mysizehints.x; - mywmhints.icon_y = mysizehints.y; - mywmhints.window_group = win; - mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; - - - XSetWMHints(display, win, &mywmhints); - - - XSetCommand(display, win, argv, argc); - XMapWindow(display, win); + XSetCommand(display, win, argv, argc); + XMapWindow(display, win); } -unsigned long getColor(char *ColorName, float fac, int *red, int *grn, int *blu) { +unsigned long getColor(char *ColorName, float fac, int *red, int *grn, int *blu) +{ - XColor Color; - XWindowAttributes Attributes; + XColor Color; + XWindowAttributes Attributes; - XGetWindowAttributes(display, Root, &Attributes); - Color.pixel = 0; + XGetWindowAttributes(display, Root, &Attributes); + Color.pixel = 0; - XParseColor(display, Attributes.colormap, ColorName, &Color); - Color.red = (unsigned short)(fac*(Color.red-24) + 24); - Color.blue = (unsigned short)(fac*(Color.blue-24) + 24); - Color.green = (unsigned short)(fac*(Color.green-24) + 24); - Color.flags = DoRed | DoGreen | DoBlue; - XAllocColor(display, Attributes.colormap, &Color); + XParseColor(display, Attributes.colormap, ColorName, &Color); + Color.red = (unsigned short)(fac * (Color.red - 24) + 24); + Color.blue = (unsigned short)(fac * (Color.blue - 24) + 24); + Color.green = (unsigned short)(fac * (Color.green - 24) + 24); + Color.flags = DoRed | DoGreen | DoBlue; + XAllocColor(display, Attributes.colormap, &Color); - - *red = Color.red; - *grn = Color.green; - *blu = Color.blue; - return Color.pixel; + *red = Color.red; + *grn = Color.green; + *blu = Color.blue; + return Color.pixel; } -unsigned long getBlendedColor(char *ColorName, float fac, int red, int grn, int blu) { +unsigned long getBlendedColor(char *ColorName, float fac, int red, int grn, int blu) +{ - XColor Color; - XWindowAttributes Attributes; + XColor Color; + XWindowAttributes Attributes; - XGetWindowAttributes(display, Root, &Attributes); - Color.pixel = 0; + XGetWindowAttributes(display, Root, &Attributes); + Color.pixel = 0; - XParseColor(display, Attributes.colormap, ColorName, &Color); - Color.red = (unsigned short)(fac*(Color.red-red) + red); - Color.blue = (unsigned short)(fac*(Color.blue-grn) + grn); - Color.green = (unsigned short)(fac*(Color.green-blu) + blu); - Color.flags = DoRed | DoGreen | DoBlue; - XAllocColor(display, Attributes.colormap, &Color); + XParseColor(display, Attributes.colormap, ColorName, &Color); + Color.red = (unsigned short)(fac * (Color.red - red) + red); + Color.blue = (unsigned short)(fac * (Color.blue - grn) + grn); + Color.green = (unsigned short)(fac * (Color.green - blu) + blu); + Color.flags = DoRed | DoGreen | DoBlue; + XAllocColor(display, Attributes.colormap, &Color); - return Color.pixel; + return Color.pixel; } - /* * Here is a faster version of usleep using select() */ -void uusleep(unsigned long usecs) { +void uusleep(unsigned long usecs) +{ - struct timeval tv; - fd_set fds; - tv.tv_sec = usecs / 1000000UL; - tv.tv_usec = usecs % 1000000UL; - FD_ZERO(&fds); - FD_SET(x_fd, &fds); - select(x_fd + 1, &fds, NULL, NULL, &tv); + struct timeval tv; + fd_set fds; + tv.tv_sec = usecs / 1000000UL; + tv.tv_usec = usecs % 1000000UL; + FD_ZERO(&fds); + FD_SET(x_fd, &fds); + select(x_fd + 1, &fds, NULL, NULL, &tv); } @@ -385,15 +340,15 @@ void uusleep(unsigned long usecs) { * will be less than 1 second. This allows us to save on a div operation. * */ -void short_uusleep(unsigned long usecs) { +void short_uusleep(unsigned long usecs) +{ - struct timeval tv; - fd_set fds; - tv.tv_sec = 0; - tv.tv_usec = usecs; - FD_ZERO(&fds); - FD_SET(x_fd, &fds); - select(x_fd + 1, &fds, NULL, NULL, &tv); + struct timeval tv; + fd_set fds; + tv.tv_sec = 0; + tv.tv_usec = usecs; + FD_ZERO(&fds); + FD_SET(x_fd, &fds); + select(x_fd + 1, &fds, NULL, NULL, &tv); } - diff --git a/wmMatrix/xutils.h b/wmMatrix/xutils.h index 9c062b9..8f4da0b 100644 --- a/wmMatrix/xutils.h +++ b/wmMatrix/xutils.h @@ -1,51 +1,40 @@ #ifndef WMGENERAL_H_INCLUDED #define WMGENERAL_H_INCLUDED - - /* * Typedefs */ typedef struct { - Pixmap pixmap; - Pixmap mask; - XpmAttributes attributes; + Pixmap pixmap; + Pixmap mask; + XpmAttributes attributes; } XpmIcon; - - - /* * Global variable */ -Display *display; -Window Root; -Window iconwin, win; -int screen; -int DisplayDepth; - - - - +Display *display; +Window Root; +Window iconwin, win; +int screen; +int DisplayDepth; /* * Function Prototypes */ -void AddMouseRegion(int, int, int, int, int); -int CheckMouseRegion(int, int); -void openXwindow(int, char **, char **, char *, int, int); -void initXwindow(int, char **); -void RedrawWindow(void); -void RedrawWindowXY(int, int); -void copyXPMArea(int, int, int, int, int, int); -void copyXBMArea(int, int, int, int, int, int); -void setMaskXY(int, int); -unsigned long getColor(char *, float, int *, int *, int *); -unsigned long getBlendedColor(char *, float, int, int, int); -void RedrawWindow(void); -void uusleep( unsigned long ); -void short_uusleep( unsigned long ); - - +void AddMouseRegion(int, int, int, int, int); +int CheckMouseRegion(int, int); +void openXwindow(int, char **, char **, char *, int, int); +void initXwindow(int, char **); +void RedrawWindow(void); +void RedrawWindowXY(int, int); +void copyXPMArea(int, int, int, int, int, int); +void copyXBMArea(int, int, int, int, int, int); +void setMaskXY(int, int); +unsigned long getColor(char *, float, int *, int *, int *); +unsigned long getBlendedColor(char *, float, int, int, int); +void RedrawWindow(void); +void uusleep(unsigned long); +void short_uusleep(unsigned long); #endif diff --git a/wmMatrix/yarandom.c b/wmMatrix/yarandom.c index 8ae5c96..571b8ac 100644 --- a/wmMatrix/yarandom.c +++ b/wmMatrix/yarandom.c @@ -42,15 +42,13 @@ Irix 6.2; Indy r5k; SGI cc version 6; gcc version 2.7.2.1. */ - #ifdef HAVE_UNISTD_H -# include /* for getpid() */ +#include /* for getpid() */ #endif -#include /* for gettimeofday() */ +#include /* for gettimeofday() */ #include "yarandom.h" - /* The following 'random' numbers are taken from CRC, 18th Edition, page 622. Each array element was taken from the corresponding line in the table, except that a[0] was from line 100. 8s and 9s in the table were simply @@ -58,55 +56,53 @@ */ #define VectorSize 55 static unsigned int a[VectorSize] = { - 035340171546, 010401501101, 022364657325, 024130436022, 002167303062, /* 5 */ - 037570375137, 037210607110, 016272055420, 023011770546, 017143426366, /* 10 */ - 014753657433, 021657231332, 023553406142, 004236526362, 010365611275, /* 14 */ - 007117336710, 011051276551, 002362132524, 001011540233, 012162531646, /* 20 */ - 007056762337, 006631245521, 014164542224, 032633236305, 023342700176, /* 25 */ - 002433062234, 015257225043, 026762051606, 000742573230, 005366042132, /* 30 */ - 012126416411, 000520471171, 000725646277, 020116577576, 025765742604, /* 35 */ - 007633473735, 015674255275, 017555634041, 006503154145, 021576344247, /* 40 */ - 014577627653, 002707523333, 034146376720, 030060227734, 013765414060, /* 45 */ - 036072251540, 007255221037, 024364674123, 006200353166, 010126373326, /* 50 */ - 015664104320, 016401041535, 016215305520, 033115351014, 017411670323 /* 55 */ + 035340171546, 010401501101, 022364657325, 024130436022, 002167303062, /* 5 */ + 037570375137, 037210607110, 016272055420, 023011770546, 017143426366, /* 10 */ + 014753657433, 021657231332, 023553406142, 004236526362, 010365611275, /* 14 */ + 007117336710, 011051276551, 002362132524, 001011540233, 012162531646, /* 20 */ + 007056762337, 006631245521, 014164542224, 032633236305, 023342700176, /* 25 */ + 002433062234, 015257225043, 026762051606, 000742573230, 005366042132, /* 30 */ + 012126416411, 000520471171, 000725646277, 020116577576, 025765742604, /* 35 */ + 007633473735, 015674255275, 017555634041, 006503154145, 021576344247, /* 40 */ + 014577627653, 002707523333, 034146376720, 030060227734, 013765414060, /* 45 */ + 036072251540, 007255221037, 024364674123, 006200353166, 010126373326, /* 50 */ + 015664104320, 016401041535, 016215305520, 033115351014, 017411670323 /* 55 */ }; static int i1, i2; -unsigned int -ya_random (void) +unsigned int ya_random(void) { - register int ret = a[i1] + a[i2]; - a[i1] = ret; - if (++i1 >= VectorSize) i1 = 0; - if (++i2 >= VectorSize) i2 = 0; - return ret; + register int ret = a[i1] + a[i2]; + a[i1] = ret; + if (++i1 >= VectorSize) + i1 = 0; + if (++i2 >= VectorSize) + i2 = 0; + return ret; } -void -ya_rand_init(unsigned int seed) +void ya_rand_init(unsigned int seed) { - int i; - if (seed == 0) - { - struct timeval tp; + int i; + if (seed == 0) { + struct timeval tp; #ifdef GETTIMEOFDAY_TWO_ARGS - struct timezone tzp; - gettimeofday(&tp, &tzp); + struct timezone tzp; + gettimeofday(&tp, &tzp); #else - gettimeofday(&tp); + gettimeofday(&tp); #endif - /* ignore overflow */ - seed = (999*tp.tv_sec) + (1001*tp.tv_usec) + (1003 * getpid()); - } + /* ignore overflow */ + seed = (999 * tp.tv_sec) + (1001 * tp.tv_usec) + (1003 * getpid()); + } - a[0] += seed; - for (i = 1; i < VectorSize; i++) - { - seed = a[i-1]*1001 + seed*999; - a[i] += seed; - } + a[0] += seed; + for (i = 1; i < VectorSize; i++) { + seed = a[i - 1] * 1001 + seed * 999; + a[i] += seed; + } - i1 = a[0] % VectorSize; - i2 = (i1 + 024) % VectorSize; + i1 = a[0] % VectorSize; + i2 = (i1 + 024) % VectorSize; } diff --git a/wmMatrix/yarandom.h b/wmMatrix/yarandom.h index abea226..b36da43 100644 --- a/wmMatrix/yarandom.h +++ b/wmMatrix/yarandom.h @@ -22,33 +22,32 @@ #undef RAND_MAX #ifdef VMS -# include "vms-gtod.h" +#include "vms-gtod.h" #endif #define random() ya_random() #define srandom(i) ya_rand_init(0) #define RAND_MAX 0x7FFFFFFF -extern unsigned int ya_random (void); -extern void ya_rand_init (unsigned int); - +extern unsigned int ya_random(void); +extern void ya_rand_init(unsigned int); #if defined (__GNUC__) && (__GNUC__ >= 2) /* Implement frand using GCC's statement-expression extension. */ -# define frand(f) \ +#define frand(f) \ ({ double tmp = (((double) random()) / \ (((double) ((unsigned int)~0)) / ((double) (f)))); \ tmp < 0 ? (-tmp) : tmp; }) -#else /* not GCC2 - implement frand using a global variable.*/ +#else /* not GCC2 - implement frand using a global variable. */ static double _frand_tmp_; -# define frand(f) \ +#define frand(f) \ (_frand_tmp_ = (((double) random()) / \ (((double) ((unsigned int)~0)) / ((double) (f)))), \ _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_) -#endif /* not GCC2 */ +#endif /* not GCC2 */ -#endif /* __YARANDOM_H__ */ +#endif /* __YARANDOM_H__ */