|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 3934 (0xf5e) Types: TextFile Names: »display.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/X/Xmille/cards/display.c«
# include <X/Xlib.h> # include "background.h" # include "color.h" struct color { char *name; int pixel; }; struct color colorMap[NUM_COLOR] = { "black", 0, "white", 0, "red", 0, "green", 0, "light gray", 0, "blue", 0, }; struct card_init { short *bits; short *mask; int color; }; extern short go_bits[], go_mask_bits[]; extern short stop_bits[], stop_mask_bits[]; extern short right_bits[], right_mask_bits[]; extern short speed_bits[], speed_mask_bits[]; extern short end_bits[], end_mask_bits[]; extern short accident_bits[], accident_mask_bits[]; extern short repairs_bits[], repairs_mask_bits[]; extern short ace_bits[], ace_mask_bits[]; extern short flat_bits[], flat_mask_bits[]; extern short spare_bits[], spare_mask_bits[]; extern short puncture_bits[], puncture_mask_bits[]; extern short out_bits[], out_mask_bits[]; extern short gas_bits[], gas_mask_bits[]; extern short extra_bits[], extra_mask_bits[]; extern short miles_mask_bits[]; extern short _25_bits[], _50_bits[], _75_bits[], _100_bits[], _200_bits[]; struct card_init card_inits[] = { { go_bits, go_mask_bits, GREEN_COLOR, }, { stop_bits, stop_mask_bits, RED_COLOR, }, { right_bits, right_mask_bits, RED_COLOR, }, { speed_bits, speed_mask_bits, RED_COLOR, }, { end_bits, end_mask_bits, GREEN_COLOR, }, { accident_bits, accident_mask_bits, RED_COLOR, }, { repairs_bits, repairs_mask_bits, GREEN_COLOR, }, { ace_bits, ace_mask_bits, BLUE_COLOR, }, { flat_bits, flat_mask_bits, RED_COLOR, }, { spare_bits, spare_mask_bits, GREEN_COLOR, }, { puncture_bits, puncture_mask_bits, BLUE_COLOR, }, { out_bits, out_mask_bits, RED_COLOR, }, { gas_bits, gas_mask_bits, GREEN_COLOR, }, { extra_bits, extra_mask_bits, BLUE_COLOR, }, { _25_bits, miles_mask_bits, BLUE_COLOR, }, { _50_bits, miles_mask_bits, BLUE_COLOR, }, { _75_bits, miles_mask_bits, BLUE_COLOR, }, { _100_bits, miles_mask_bits, BLUE_COLOR, }, { _200_bits, miles_mask_bits, BLUE_COLOR, }, }; # define NUM_CARDS (sizeof (card_inits) / sizeof (card_inits[0])) struct plane { Bitmap bits; int pixel; }; struct card { int nPlanes; struct plane planes[5]; }; struct card cards[NUM_CARDS]; Window w; # define WINDOW_WIDTH 1000 # define WINDOW_HEIGHT 700 main () { Color hardware_color, exact_color; XEvent rep; Bitmap fill; Pixmap background; Pixmap border; int i; XOpenDisplay (""); for (i = 0; i < NUM_COLOR; i++) { XGetColor (colorMap[i].name, &hardware_color, &exact_color); colorMap[i].pixel = hardware_color.pixel; } fill = XStoreBitmap (WIDTH, HEIGHT, fill_bits); for (i = 0; i < NUM_CARDS; i++) { cards[i].planes[2].bits = XStoreBitmap (WIDTH, HEIGHT, card_inits[i].bits); cards[i].planes[2].pixel = colorMap[card_inits[i].color].pixel; cards[i].planes[1].bits = XStoreBitmap (WIDTH, HEIGHT, card_inits[i].mask); cards[i].planes[1].pixel = colorMap[BLACK_COLOR].pixel; cards[i].planes[0].bits = fill; cards[i].planes[0].pixel = colorMap[WHITE_COLOR].pixel; cards[i].nPlanes = 3; } background = XMakePixmap (0, colorMap[GREY_COLOR].pixel, colorMap[WHITE_COLOR].pixel); border = XMakePixmap (0, colorMap[WHITE_COLOR].pixel, colorMap[GREY_COLOR].pixel); w = XCreateWindow (RootWindow, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 1, WhitePixmap, background); XMapWindow (w); XSelectInput (w, ExposeWindow); displayAll (); for (;;) { XNextEvent (&rep); switch (rep.type) { case ExposeWindow: displayAll (); break; } } } displayAll () { struct card *card; int x, y; int i; x = 10; y = 10; for (i = 0; i < NUM_CARDS; i++) { displayOne (&cards[i], x, y); x += WIDTH + 20; if (x + WIDTH > WINDOW_WIDTH) { x = 10; y += HEIGHT + 20; } } XFlush (); } displayOne (card, x, y) struct card *card; int x, y; { int i; for (i = 0; i < card->nPlanes; i++) { XPixFill (w, x, y, WIDTH, HEIGHT, card->planes[i].pixel, card->planes[i].bits, GXcopy, AllPlanes); } }