X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmsdos.c;h=5b037e0287befbf489d097cbdbbeba580d10434e;hb=998be01ad92a672b69b11e24d472f6c0c076817f;hp=cc8aedd7a6ab71af5c44b74e907e8fbfe8abbb6e;hpb=da14f69fd95c7bd5a0d70cdf4935af06f1f20a04;p=rocksndiamonds.git diff --git a/src/libgame/msdos.c b/src/libgame/msdos.c index cc8aedd7..5b037e02 100644 --- a/src/libgame/msdos.c +++ b/src/libgame/msdos.c @@ -1,21 +1,27 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Artsoft Retro-Game Library * *----------------------------------------------------------* -* ©1995 Artsoft Development * -* Holger Schemel * -* 33659 Bielefeld-Senne * -* Telefon: (0521) 493245 * -* eMail: aeglos@valinor.owl.de * -* aeglos@uni-paderborn.de * -* q99492@pbhrzx.uni-paderborn.de * +* (c) 1994-2000 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* msdos.c * +* msdos.c * ***********************************************************/ -#include "libgame.h" +#include "system.h" + #if defined(PLATFORM_MSDOS) +#include "sound.h" +#include "misc.h" +#include "pcx.h" + +#define AllegroDefaultScreen() (display->screens[display->default_screen]) + /* allegro driver declarations */ DECLARE_GFX_DRIVER_LIST(GFX_DRIVER_VBEAF GFX_DRIVER_VESA2L GFX_DRIVER_VESA1) DECLARE_COLOR_DEPTH_LIST(COLOR_DEPTH_8) @@ -238,10 +244,10 @@ void XMapWindow(Display *display, Window window) unsigned int width, height; boolean mouse_off; - x = display->screens[display->default_screen].x; - y = display->screens[display->default_screen].y; - width = display->screens[display->default_screen].width; - height = display->screens[display->default_screen].height; + x = AllegroDefaultScreen().x; + y = AllegroDefaultScreen().y; + width = AllegroDefaultScreen().width; + height = AllegroDefaultScreen().height; mouse_off = hide_mouse(display, x, y, width, height); blit((BITMAP *)window, video_bitmap, 0, 0, x, y, width, height); @@ -291,14 +297,8 @@ Display *XOpenDisplay(char *display_name) Screen *screen; Display *display; BITMAP *mouse_bitmap = NULL; - char *filename; - - filename = getPath3(options.ro_base_directory, GRAPHICS_DIRECTORY, - MOUSE_FILENAME); - - mouse_bitmap = Read_PCX_to_AllegroBitmap(filename); - free(filename); + mouse_bitmap = Read_PCX_to_AllegroBitmap(program.msdos_pointer_filename); if (mouse_bitmap == NULL) return NULL; @@ -340,11 +340,11 @@ Window XCreateSimpleWindow(Display *display, Window parent, int x, int y, video_bitmap = create_video_bitmap(XRES, YRES); clear_to_color(video_bitmap, background); - display->screens[display->default_screen].video_bitmap = video_bitmap; - display->screens[display->default_screen].x = x; - display->screens[display->default_screen].y = y; - display->screens[display->default_screen].width = XRES; - display->screens[display->default_screen].height = YRES; + AllegroDefaultScreen().video_bitmap = video_bitmap; + AllegroDefaultScreen().x = x; + AllegroDefaultScreen().y = y; + AllegroDefaultScreen().width = XRES; + AllegroDefaultScreen().height = YRES; set_mouse_sprite(display->mouse_ptr); @@ -353,10 +353,10 @@ Window XCreateSimpleWindow(Display *display, Window parent, int x, int y, #endif set_mouse_speed(1, 1); - set_mouse_range(display->screens[display->default_screen].x + 1, - display->screens[display->default_screen].y + 1, - display->screens[display->default_screen].x + WIN_XSIZE + 1, - display->screens[display->default_screen].y + WIN_YSIZE + 1); + set_mouse_range(AllegroDefaultScreen().x + 1, + AllegroDefaultScreen().y + 1, + AllegroDefaultScreen().x + video.width + 1, + AllegroDefaultScreen().y + video.height + 1); show_video_bitmap(video_bitmap); @@ -425,8 +425,8 @@ void XFillRectangle(Display *display, Drawable d, GC gc, int x, int y, if ((BITMAP *)d == video_bitmap) { - x += display->screens[display->default_screen].x; - y += display->screens[display->default_screen].y; + x += AllegroDefaultScreen().x; + y += AllegroDefaultScreen().y; freeze_mouse_flag = TRUE; mouse_off = hide_mouse(display, x, y, width, height); } @@ -446,7 +446,7 @@ Pixmap XCreatePixmap(Display *display, Drawable d, unsigned int width, BITMAP *bitmap = NULL; if (gfx_capabilities & GFX_HW_VRAM_BLIT && - width == FXSIZE && height == FYSIZE) + width == gfx.scrollbuffer_width && height == gfx.scrollbuffer_height) bitmap = create_video_bitmap(width, height); if (bitmap == NULL) @@ -469,14 +469,14 @@ inline void XCopyArea(Display *display, Drawable src, Drawable dest, GC gc, if ((BITMAP *)src == video_bitmap) { - src_x += display->screens[display->default_screen].x; - src_y += display->screens[display->default_screen].y; + src_x += AllegroDefaultScreen().x; + src_y += AllegroDefaultScreen().y; } if ((BITMAP *)dest == video_bitmap) { - dest_x += display->screens[display->default_screen].x; - dest_y += display->screens[display->default_screen].y; + dest_x += AllegroDefaultScreen().x; + dest_y += AllegroDefaultScreen().y; freeze_mouse_flag = TRUE; mouse_off = hide_mouse(display, dest_x, dest_y, width, height); } @@ -645,6 +645,10 @@ void XFreeGC(Display *display, GC gc) free(gcv); } +void XUnmapWindow(Display *display, Window window) +{ +} + void XCloseDisplay(Display *display) { BITMAP *bitmap = video_bitmap; @@ -812,8 +816,8 @@ int XPending(Display *display) pending_events++; xmotion = (XMotionEvent *)&event_buffer[pending_events]; xmotion->type = MotionNotify; - xmotion->x = mouse_x - display->screens[display->default_screen].x; - xmotion->y = mouse_y - display->screens[display->default_screen].y; + xmotion->x = mouse_x - AllegroDefaultScreen().x; + xmotion->y = mouse_y - AllegroDefaultScreen().y; } /* mouse button event */ @@ -831,8 +835,8 @@ int XPending(Display *display) xbutton = (XButtonEvent *)&event_buffer[pending_events]; xbutton->type = (mouse_b & bitmask ? ButtonPress : ButtonRelease); xbutton->button = mapping[i]; - xbutton->x = mouse_x - display->screens[display->default_screen].x; - xbutton->y = mouse_y - display->screens[display->default_screen].y; + xbutton->x = mouse_x - AllegroDefaultScreen().x; + xbutton->y = mouse_y - AllegroDefaultScreen().y; } } last_mouse_b = mouse_b; @@ -868,10 +872,10 @@ void XDrawLine(Display *display, Drawable d, GC gc, if ((BITMAP *)d == video_bitmap) { - x1 += display->screens[display->default_screen].x; - y1 += display->screens[display->default_screen].y; - x2 += display->screens[display->default_screen].x; - y2 += display->screens[display->default_screen].y; + x1 += AllegroDefaultScreen().x; + y1 += AllegroDefaultScreen().y; + x2 += AllegroDefaultScreen().x; + y2 += AllegroDefaultScreen().y; freeze_mouse_flag = TRUE; mouse_off = hide_mouse(display, MIN(x1, x2), MIN(y1, y2), MAX(x1, x2) - MIN(x1, x2), @@ -890,12 +894,16 @@ void XDestroyImage(XImage *ximage) { } +void XDestroyWindow(Display *display, Window window) +{ +} + Bool XQueryPointer(Display *display, Window window, Window *root, Window *child, int *root_x, int *root_y, int *win_x, int *win_y, unsigned int *mask) { - *win_x = mouse_x - display->screens[display->default_screen].x; - *win_y = mouse_y - display->screens[display->default_screen].y; + *win_x = mouse_x - AllegroDefaultScreen().x; + *win_y = mouse_y - AllegroDefaultScreen().y; return True; } @@ -911,12 +919,45 @@ void XAutoRepeatOff(Display *display) keyboard_auto_repeat = FALSE; } -boolean MSDOSOpenAudio(void) +void AllegroDrawLine(Drawable d, int from_x, int from_y, int to_x, int to_y, + Pixel color) +{ + boolean mouse_off = FALSE; + + if ((BITMAP *)d == video_bitmap) + { + int dx = AllegroDefaultScreen().x; + int dy = AllegroDefaultScreen().y; + int x1, y1, x2, y2; + + from_x += dx; + from_y += dy; + to_x += dx; + to_y += dy; + + x1 = (from_x < to_x ? from_x : to_x); + y1 = (from_y < to_y ? from_y : to_y); + x2 = (from_x < to_x ? to_x : from_x); + y2 = (from_y < to_y ? to_y : from_y); + + freeze_mouse_flag = TRUE; + mouse_off = hide_mouse(display, x1, y1, x2 - x1 + 1, y2 - y1 + 1); + } + + line((BITMAP *)d, from_x, from_y, to_x, to_y, color); + + if (mouse_off) + unhide_mouse(display); + + freeze_mouse_flag = FALSE; +} + +Bool MSDOSOpenAudio(void) { return allegro_init_audio(); } -boolean MSDOSCloseAudio(void) +void MSDOSCloseAudio(void) { /* nothing to be done here */ }