X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Finit.c;h=0262c37ea1e887ca48655f17e33f03f0b66f4797;hp=0f0bd65234873a2ea12c2877b54c65b68c810924;hb=3367ba5eaec57086e3c1013708967e8a995ef2e3;hpb=cf5b3a1e9077e88eb40ce2fb59e985a0ae037c84 diff --git a/src/init.c b/src/init.c index 0f0bd652..0262c37e 100644 --- a/src/init.c +++ b/src/init.c @@ -19,14 +19,13 @@ #include "tools.h" #include "files.h" #include "joystick.h" -#include "gfxloader.h" +#include "gfxload.h" +#include "gifload.h" #include #ifdef DEBUG -/* #define DEBUG_TIMING -*/ #endif struct PictureFileInfo @@ -93,6 +92,7 @@ void InitSound() if (sound_status==SOUND_OFF) return; +#ifndef MSDOS if (access(sound_device_name,W_OK)<0) { fprintf(stderr,"%s: cannot access sound device - no sounds\n",progname); @@ -114,9 +114,16 @@ void InitSound() sound_loops_allowed = TRUE; sound_loops_on = TRUE; #endif +#else + sound_loops_allowed = TRUE; + sound_loops_on = TRUE; +#endif for(i=0;ivisual; + XFree((void *)vinfo); + } + + /* got appropriate visual? */ + if (depth < 8) + { + printf("Sorry, displays with less than 8 bits per pixel not supported.\n"); + exit(-1); + } + else if ((depth ==8 && visual->class != PseudoColor) || + (depth > 8 && visual->class != TrueColor && + visual->class != DirectColor)) + { + printf("Sorry, cannot get appropriate visual.\n"); + exit(-1); + } } void InitWindow(int argc, char *argv[]) @@ -226,18 +271,37 @@ void InitWindow(int argc, char *argv[]) char *window_name = WINDOWTITLE_STRING; char *icon_name = WINDOWTITLE_STRING; long window_event_mask; + Atom proto_atom = None, delete_atom = None; + int screen_width, screen_height; + int win_xpos = WIN_XPOS, win_ypos = WIN_YPOS; + +#ifndef MSDOS static struct IconFileInfo icon_pic = { "rocks_icon.xbm", "rocks_iconmask.xbm" }; +#endif + + screen_width = XDisplayWidth(display, screen); + screen_height = XDisplayHeight(display, screen); width = WIN_XSIZE; height = WIN_YSIZE; + win_xpos = (screen_width - width) / 2; + win_ypos = (screen_height - height) / 2; + window = XCreateSimpleWindow(display, RootWindow(display, screen), - WIN_XPOS, WIN_YPOS, width, height, border_width, - pen_fg, pen_bg); + win_xpos, win_ypos, width, height, border_width, + pen_fg, pen_bg); + +#ifndef MSDOS + proto_atom = XInternAtom(display, "WM_PROTOCOLS", FALSE); + delete_atom = XInternAtom(display, "WM_DELETE_WINDOW", FALSE); + if ((proto_atom != None) && (delete_atom != None)) + XChangeProperty(display, window, proto_atom, XA_ATOM, 32, + PropModePrepend, (unsigned char *) &delete_atom, 1); sprintf(icon_filename,"%s/%s",GFX_PATH,icon_pic.picture_filename); XReadBitmapFile(display,window,icon_filename, @@ -261,9 +325,16 @@ void InitWindow(int argc, char *argv[]) exit(-1); } - size_hints.flags = PSize | PMinSize | PMaxSize; size_hints.width = size_hints.min_width = size_hints.max_width = width; size_hints.height = size_hints.min_height = size_hints.max_height = height; + size_hints.flags = PSize | PMinSize | PMaxSize; + + if (win_xpos || win_ypos) + { + size_hints.x = win_xpos; + size_hints.y = win_ypos; + size_hints.flags |= PPosition; + } if (!XStringListToTextProperty(&window_name, 1, &windowName)) { @@ -301,6 +372,7 @@ void InitWindow(int argc, char *argv[]) KeyPressMask | KeyReleaseMask; XSelectInput(display, window, window_event_mask); +#endif /* create GC for drawing with window depth */ gc_values.graphics_exposures = False; gc_values.foreground = pen_bg; @@ -325,6 +397,17 @@ void InitGfx() int i,j; XGCValues clip_gc_values; unsigned long clip_gc_valuemask; +#ifdef MSDOS + static struct PictureFileInfo pic[NUM_PICTURES] = + { + { "Screen", TRUE }, + { "Door", TRUE }, + { "Heroes", TRUE }, + { "Toons", TRUE }, + { "Font", FALSE }, + { "Font2", FALSE } + }; +#else static struct PictureFileInfo pic[NUM_PICTURES] = { { "RocksScreen", TRUE }, @@ -334,6 +417,7 @@ void InitGfx() { "RocksFont", FALSE }, { "RocksFont2", FALSE } }; +#endif #ifdef DEBUG_TIMING long count1, count2; @@ -343,6 +427,10 @@ void InitGfx() LoadGfx(PIX_SMALLFONT,&pic[PIX_SMALLFONT]); DrawInitText(WINDOWTITLE_STRING,20,FC_YELLOW); DrawInitText(COPYRIGHT_STRING,50,FC_RED); +#ifdef MSDOS + DrawInitText("MSDOS version done by Guido Schulz",210,FC_BLUE); + rest(200); +#endif MSDOS DrawInitText("Loading graphics:",120,FC_GREEN); for(i=0;ipicture_filename); CloseAll(); exit(-1); } @@ -516,6 +616,9 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) /* zugehörige Maske laden (wenn vorhanden) */ if (pic->picture_with_mask) { + +#ifdef XPM_INCLUDE_FILE + sprintf(basefilename,"%s%s",pic->picture_filename,picturemask_ext); DrawInitText(basefilename,150,FC_YELLOW); sprintf(filename,"%s/%s",GFX_PATH,basefilename); @@ -524,10 +627,9 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) count1 = Counter(); #endif -#ifdef XPM_INCLUDE_FILE - xbm_err = XReadBitmapFile(display,window,filename, &width,&height,&clipmask[pos],&hot_x,&hot_y); + switch(xbm_err) { case BitmapSuccess: @@ -551,46 +653,18 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) break; } -#else - - ilbm_err = Read_ILBM_to_Bitmap(display,filename,&clipmask[pos]); - - switch(ilbm_err) - { - case ILBM_Success: - break; - case ILBM_OpenFailed: - fprintf(stderr,"Cannot open ILBM file '%s' !\n",filename); - CloseAll(); - exit(-1); - case ILBM_ReadFailed: - fprintf(stderr,"Cannot read ILBM file '%s' !\n",filename); - CloseAll(); - exit(-1); - case ILBM_FileInvalid: - fprintf(stderr,"Invalid ILBM file '%s'!\n",filename); - CloseAll(); - exit(-1); - case ILBM_NoMemory: - fprintf(stderr,"Not enough memory for ILBM file '%s'!\n",filename); - CloseAll(); - exit(1); - default: - break; - } - -#endif - #ifdef DEBUG_TIMING count2 = Counter(); - printf("LOADING %s IN %.2f SECONDS\n", + printf("XBM LOADING %s IN %.2f SECONDS\n", filename,(float)(count2-count1)/100.0); +#endif + #endif if (!clipmask[pos]) { - fprintf(stderr, "%s: cannot read graphics file '%s'.\n", - progname,filename); + fprintf(stderr, "%s: cannot get clipmask for '%s'.\n", + progname, pic->picture_filename); CloseAll(); exit(-1); } @@ -1165,8 +1239,12 @@ void CloseAll() if (gc) XFreeGC(display, gc); + if (display) + { + XAutoRepeatOn(display); XCloseDisplay(display); + } exit(0); }