X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmsdos.c;h=5ca9768d383f2cefada32a00b221b6625411c205;hb=e0e2697df0d0da483a91b1248c120aef6b3caf9b;hp=2e0d278085cec4a689fd429ca03fd5efba081819;hpb=681721dddc91bcdaef50002d1e861cc8d484e938;p=rocksndiamonds.git diff --git a/src/libgame/msdos.c b/src/libgame/msdos.c index 2e0d2780..5ca9768d 100644 --- a/src/libgame/msdos.c +++ b/src/libgame/msdos.c @@ -17,6 +17,7 @@ #if defined(PLATFORM_MSDOS) #include "sound.h" +#include "joystick.h" #include "misc.h" #include "pcx.h" @@ -311,13 +312,8 @@ Display *XOpenDisplay(char *display_name) screen[0].cmap = 0; screen[0].root = 0; -#if 0 - screen[0].white_pixel = 0xFF; - screen[0].black_pixel = 0x00; -#else screen[0].white_pixel = AllegroAllocColorCell(0xFFFF, 0xFFFF, 0xFFFF); screen[0].black_pixel = AllegroAllocColorCell(0x0000, 0x0000, 0x0000); -#endif screen[0].video_bitmap = NULL; display->default_screen = 0; @@ -510,12 +506,10 @@ static BITMAP *Image_to_AllegroBitmap(Image *image) byte *src_ptr = image->data; byte pixel_mapping[MAX_COLORS]; unsigned int depth = 8; - -#if 0 - int i, j, x, y; -#else int i, x, y; -#endif + + if (image->type == IMAGETYPE_TRUECOLOR && depth == 8) + Error(ERR_EXIT, "cannot handle true-color images on 8-bit display"); /* allocate new allegro bitmap structure */ if ((bitmap = create_bitmap_ex(depth, image->width, image->height)) == NULL) @@ -529,48 +523,12 @@ static BITMAP *Image_to_AllegroBitmap(Image *image) /* try to use existing colors from the global colormap */ for (i=0; irgb.color_used[i]) continue; - -#if 0 - r = image->rgb.red[i] >> 10; - g = image->rgb.green[i] >> 10; - b = image->rgb.blue[i] >> 10; - - for (j=0; jrgb.red[i], image->rgb.green[i], image->rgb.blue[i]); -#endif - } /* copy bitmap data */ @@ -608,17 +566,10 @@ int Read_PCX_to_Pixmap(Display *display, Window window, GC gc, char *filename, return errno_pcx; *pixmap = (Pixmap)bitmap; -#if 0 - *pixmap_mask = (Pixmap)bitmap; - /* !!! two pointers on same bitmap => second free() fails !!! */ -#else + /* pixmap_mask will never be used in Allegro (which uses masked_blit()), so use non-NULL dummy pointer to empty Pixmap */ - /* - *pixmap_mask = (Pixmap)checked_calloc(sizeof(Pixmap)); - */ *pixmap_mask = (Pixmap)DUMMY_MASK; -#endif return PCX_Success; } @@ -994,4 +945,57 @@ void NetworkServer(int port, int serveronly) Error(ERR_WARN, "networking not supported in DOS version"); } + +/* ========================================================================= */ +/* joystick functions */ +/* ========================================================================= */ + +void MSDOSInitJoysticks() +{ + int i; + + /* start from scratch */ + remove_joystick(); + + /* try to access two joysticks; if that fails, try to access just one */ + if (install_joystick(JOY_TYPE_2PADS) == 0 || + install_joystick(JOY_TYPE_AUTODETECT) == 0) + joystick.status = JOYSTICK_ACTIVATED; + + for (i=0; i= num_joysticks) + joystick_nr = -1; + + /* misuse joystick file descriptor variable to store joystick number */ + joystick.fd[i] = joystick_nr; + } +} + +boolean MSDOSReadJoystick(int nr, int *x, int *y, boolean *b1, boolean *b2) +{ + /* the allegro global variable 'num_joysticks' contains the number + of joysticks found at initialization under MS-DOS / Windows */ + + if (nr < 0 || nr >= num_joysticks) + return FALSE; + + poll_joystick(); + + if (x != NULL) + *x = joy[nr].stick[0].axis[0].pos; + if (y != NULL) + *y = joy[nr].stick[0].axis[1].pos; + + if (b1 != NULL) + *b1 = joy[nr].button[0].b; + if (b2 != NULL) + *b2 = joy[nr].button[1].b; + + return TRUE; +} + #endif /* PLATFORM_MSDOS */