]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1000b7.zip
authorToni Wilen <twilen@winuae.net>
Sat, 7 May 2005 17:17:52 +0000 (20:17 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:25:34 +0000 (21:25 +0200)
31 files changed:
audio.c
cfgfile.c
debug.c
driveclick.c
filesys.c
hardfile.c
include/debug.h
include/options.h
include/uae.h
include/xwin.h
inputdevice.c
memory.c
od-win32/ahidsound.c
od-win32/blkdev_win32_ioctl.c
od-win32/dinput.c
od-win32/dxwrap.c
od-win32/keyboard_win32.c
od-win32/mman.c
od-win32/picasso96_win.c
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/screenshot.c
od-win32/sounddep/sound.c
od-win32/srcrelease.bat
od-win32/win32.c
od-win32/win32.h
od-win32/win32_scale2x.c
od-win32/win32gfx.c
od-win32/win32gfx.h
od-win32/win32gui.c
zfile.c

diff --git a/audio.c b/audio.c
index c11beae6e8b5a3ccc227d9fc705c2ea7a439b4fb..1f51bb04523cc9d3636a990f3b2936c7789d330f 100755 (executable)
--- a/audio.c
+++ b/audio.c
@@ -922,6 +922,8 @@ STATIC_INLINE int sound_prefs_changed (void)
            || changed_prefs.sound_adjust != currprefs.sound_adjust
            || changed_prefs.sound_interpol != currprefs.sound_interpol
            || changed_prefs.sound_volume != currprefs.sound_volume
+           || changed_prefs.sound_stereo_swap_paula != currprefs.sound_stereo_swap_paula
+           || changed_prefs.sound_stereo_swap_ahi != currprefs.sound_stereo_swap_ahi
            || changed_prefs.sound_filter != currprefs.sound_filter);
 }
 
@@ -947,6 +949,8 @@ void check_prefs_changed_audio (void)
        currprefs.sound_maxbsiz = changed_prefs.sound_maxbsiz;
        currprefs.sound_filter = changed_prefs.sound_filter;
        currprefs.sound_volume = changed_prefs.sound_volume;
+       currprefs.sound_stereo_swap_paula = changed_prefs.sound_stereo_swap_paula;
+       currprefs.sound_stereo_swap_ahi = changed_prefs.sound_stereo_swap_ahi;
        if (currprefs.produce_sound >= 2) {
            if (!init_audio ()) {
                if (! sound_available) {
index e7236236db2d513c82464d6d6a8af08f4683dccd..2a24fae4d364ce101164c283db1e22dcf795502f 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -27,6 +27,7 @@
 #include "newcpu.h"
 #include "zfile.h"
 #include "filesys.h"
+#include "fsdb.h"
 
 #define CONFIG_BLEN 2560
 
@@ -148,7 +149,9 @@ static const char *obsolete[] = {
     "gfx_immediate_blits", "gfx_ntsc", "win32", "gfx_filter_bits",
     "sound_pri_cutoff", "sound_pri_time", "sound_min_buff",
     "gfx_test_speed", "gfxlib_replacement", "enforcer", "catweasel_io",
-    0 };
+    "kickstart_key_file",
+    0
+};
 
 #define UNEXPANDED "$(FILE_PATH)"
 
diff --git a/debug.c b/debug.c
index aa2ca77f5f452523e16e72a1a8e3f3394bb686ea..8325696483be88f3477b99296e148ddb573e4c05 100755 (executable)
--- a/debug.c
+++ b/debug.c
@@ -62,12 +62,8 @@ void activate_debugger (void)
 
 int firsthist = 0;
 int lasthist = 0;
-#ifdef NEED_TO_DEBUG_BADLY
-struct regstruct history[MAX_HIST];
-union flagu historyf[MAX_HIST];
-#else
-uaecptr history[MAX_HIST];
-#endif
+static struct regstruct history[MAX_HIST];
+static struct flag_struct historyf[MAX_HIST];
 
 static char help[] = {
     "          HELP for UAE Debugger\n"
@@ -91,7 +87,7 @@ static char help[] = {
     "  o <1|2|addr> [<lines>]View memory as Copper instructions\n"
     "  O                     Display bitplane offsets\n"
     "  O <plane> <offset>    Offset a bitplane\n"
-    "  H <count>             Show PC history <count> instructions\n"
+    "  H[H] <count>          Show PC history (HH=full CPU info) <count> instructions\n"
     "  M                     Search for *Tracker sound modules\n"
     "  C <value>             Search for values like energy or lifes in games\n"
     "  W <address> <value>   Write into Amiga memory\n"
@@ -1320,7 +1316,7 @@ static void debug_1 (void)
        case 'S': savemem (&inptr); break;
        case 's':
            if (*inptr == 'c') {
-               screenshot (1);
+               screenshot (1, 1);
            } else {
                searchmem (&inptr);
            }
@@ -1383,12 +1379,16 @@ static void debug_1 (void)
 
        case 'H':
        {
-           int count;
-           int temp;
-#ifdef NEED_TO_DEBUG_BADLY
+           int count, temp, badly;
+           uae_u32 oldpc = m68k_getpc();
            struct regstruct save_regs = regs;
-           union flagu save_flags = regflags;
-#endif
+           struct flag_struct save_flags = regflags;
+
+           badly = 0;
+           if (inptr[0] == 'H') {
+               badly = 1;
+               inptr++;
+           }
 
            if (more_params(&inptr))
                count = readhex(&inptr);
@@ -1398,22 +1398,26 @@ static void debug_1 (void)
                break;
            temp = lasthist;
            while (count-- > 0 && temp != firsthist) {
-               if (temp == 0) temp = MAX_HIST-1; else temp--;
+               if (temp == 0)
+                   temp = MAX_HIST-1;
+               else
+                   temp--;
            }
            while (temp != lasthist) {
-#ifdef NEED_TO_DEBUG_BADLY
-               regs = history[temp];
+               regs = history[temp];
                regflags = historyf[temp];
-               m68k_dumpstate (NULL);
-#else
-               m68k_disasm (stdout, history[temp], NULL, 1);
-#endif
-               if (++temp == MAX_HIST) temp = 0;
+               m68k_setpc(history[temp].pc);
+               if (badly) {
+                   m68k_dumpstate(stdout, NULL);
+               } else {
+                   m68k_disasm(stdout, history[temp].pc, NULL, 1);
+               }
+               if (++temp == MAX_HIST)
+                   temp = 0;
            }
-#ifdef NEED_TO_DEBUG_BADLY
            regs = save_regs;
            regflags = save_flags;
-#endif
+           m68k_setpc(oldpc);
        }
        break;
        case 'm':
@@ -1482,6 +1486,18 @@ static void debug_1 (void)
     }
 }
 
+static void addhistory(void)
+{
+    history[lasthist] = regs;
+    history[lasthist].pc = m68k_getpc();
+    historyf[lasthist] = regflags;
+    if (++lasthist == MAX_HIST)
+       lasthist = 0;
+    if (lasthist == firsthist) {
+       if (++firsthist == MAX_HIST) firsthist = 0;
+    }
+}
+
 void debug (void)
 {
     int i;
@@ -1490,6 +1506,7 @@ void debug (void)
        return;
 
     bogusframe = 1;
+    addhistory();
 
     if (do_skip && skipaddr_start == 0xC0DEDBAD) {
 #if 0
@@ -1562,16 +1579,6 @@ void debug (void)
        }
     }
 
-#ifdef NEED_TO_DEBUG_BADLY
-    history[lasthist] = regs;
-    historyf[lasthist] = regflags;
-#else
-    history[lasthist] = m68k_getpc();
-#endif
-    if (++lasthist == MAX_HIST) lasthist = 0;
-    if (lasthist == firsthist) {
-       if (++firsthist == MAX_HIST) firsthist = 0;
-    }
     inputdevice_unacquire ();
     pause_sound ();
     do_skip = 0;
index 8bdfa829d36c393e054b9eb3b9eb07dbf16e34a9..e60a529856d9a134bf7daa27b50212f21f03849d 100755 (executable)
@@ -155,21 +155,21 @@ void driveclick_init(void)
                for (j = 0; j < CLICK_TRACKS; j++)
                    drvs[i][DS_CLICK].lengths[j] = drvs[i][DS_CLICK].len;
                sprintf (tmp, "%suae_data%cdrive_click_%s",
-                   start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
+                   start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
                v = loadsample (tmp, &drvs[i][DS_CLICK]);
                if (v)
                    processclicks (&drvs[i][DS_CLICK]);
                sprintf (tmp, "%suae_data%cdrive_spin_%s",
-                   start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
+                   start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
                v += loadsample (tmp, &drvs[i][DS_SPIN]);
                sprintf (tmp, "%suae_data%cdrive_spinnd_%s",
-                   start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
+                   start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
                v += loadsample (tmp, &drvs[i][DS_SPINND]);
                sprintf (tmp, "%suae_data%cdrive_startup_%s",
-                   start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
+                   start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
                v += loadsample (tmp, &drvs[i][DS_START]);
                sprintf (tmp, "%suae_data%cdrive_snatch_%s",
-                   start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
+                   start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]);
                v += loadsample (tmp, &drvs[i][DS_SNATCH]);
            }
            if (v == 0) {
index 3f9e562b71a33e62b89fe3f9147692a8cad7be4d..3ad3825212a26bbedbbda0d212427b954d9b13bf 100755 (executable)
--- a/filesys.c
+++ b/filesys.c
@@ -3789,7 +3789,7 @@ static char *device_dupfix (uaecptr expbase, char *devname)
 static void dump_partinfo (char *name, int num, uaecptr pp)
 {
     uae_u32 dostype = get_long (pp + 80);
-    write_log ("RDB: '%s' uaehf.device:%d, dostype=%08.8X\n", name, num, dostype);
+    write_log ("RDB: '%s' dostype=%08.8X\n", name, dostype);
     write_log ("BlockSize: %d, Surfaces: %d, SectorsPerBlock %d\n",
        get_long (pp + 20) * 4, get_long (pp + 28), get_long (pp + 32));
     write_log ("SectorsPerTrack: %d, Reserved: %d, LowCyl %d, HighCyl %d\n",
@@ -3798,6 +3798,8 @@ static void dump_partinfo (char *name, int num, uaecptr pp)
        get_long (pp + 60), get_long (pp + 64), get_long (pp + 68), get_long (pp + 76));
 }
 
+#define rdbmnt write_log("Mounting uaehf.device %d (%d) (size=%I64u):\n", unit_no, partnum, hfd->size);
+
 static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacket)
 {
     int lastblock = 63, blocksize, readblocksize, badblock, driveinitblock;
@@ -3812,10 +3814,16 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
     int oldversion, oldrevision;
     int newversion, newrevision;
 
-    if (lastblock * hfd->blocksize > hfd->size)
+    if (lastblock * hfd->blocksize > hfd->size) {
+       rdbmnt
+       write_log("failed, too small (%d*%d > %I64u)\n", lastblock, hfd->blocksize, hfd->size);
        return -2;
-    if (hfd->blocksize == 0)
+    }
+    if (hfd->blocksize == 0) {
+       rdbmnt
+       write_log("failed, blocksize == 0\n");
        return -2;
+    }
     for (rdblock = 0; rdblock < lastblock; rdblock++) {
        hdf_read (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize);
        if (rdb_checksum ("RDSK", bufrdb, rdblock))
@@ -3833,17 +3841,22 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
            }
        }
     }
-    if (rdblock == lastblock)
+    if (rdblock == lastblock) {
+       rdbmnt
+       write_log("failed, no RDB detected\n");
        return -2;
+    }
     blocksize = rl (bufrdb + 16);
     readblocksize = blocksize > hfd->blocksize ? blocksize : hfd->blocksize;
     badblock = rl (bufrdb + 24);
     if (badblock != -1) {
+       rdbmnt
        write_log ("RDB: badblock list is not yet supported. Contact the author.\n");
        return -2;
     }
     driveinitblock = rl (bufrdb + 36);
     if (driveinitblock != -1) {
+       rdbmnt
        write_log ("RDB: driveinit is not yet supported. Contact the author.\n");
        return -2;
     }
@@ -3866,9 +3879,11 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
        partblock = rl (buf + 4 * 4);
     }
 
+    rdbmnt
     flags = rl (buf + 20);
     if (flags & 2) { /* do not mount */
        err = -1;
+       write_log("Automount disabled, not mounting\n");
        goto error;
     }
 
@@ -3887,10 +3902,14 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
     dostype = get_long (parmpacket + 80);
 
     if (dostype == 0) {
+       write_log("failed, dostype==0\n");
        err = -1;
        goto error;
     }
     
+    if (hfd->cylinders * hfd->sectors * hfd->heads * blocksize > hfd->size)
+       write_log("WARNING: end of partition > size of disk!\n");
+
     err = 2;
 
     /* load custom filesystems if needed */
@@ -3931,10 +3950,10 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
     if (get_long (fsnode)) {
        oldversion = get_word (fsnode + 18);
        oldrevision = get_word (fsnode + 20);
-       write_log ("RDB: ROM filesystem version %d.%d\n", oldversion, oldrevision);
+       write_log ("RDB: %08.8X in FileSystem.resouce version %d.%d\n", dostype, oldversion, oldrevision);
     }
     if (newversion * 65536 + newrevision <= oldversion * 65536 + oldrevision && oldversion >= 0) {
-       write_log ("RDB: ROM filesystem is newer or same, ignoring RDB filesystem\n");
+       write_log ("RDB: fs in FileSystem.resource is newer or same, ignoring RDB filesystem\n");
        goto error;
     }
 
@@ -4072,6 +4091,7 @@ static uae_u32 filesys_dev_storeinfo (void)
     }
     if (sub_no)
         return -2;
+    write_log("Mounting uaehf.device %d (%d):\n", unit_no, sub_no);
     get_new_device (type, parmpacket, &uip[unit_no].devname, &uip[unit_no].devname_amiga, unit_no);
     uip[unit_no].devno = unit_no;
     put_long (parmpacket, uip[unit_no].devname_amiga);
index 439b3bb40e75f567595b1a331a7893ad66ff9a56..ac7b717016fca15068626d2386b819fb798c2667 100755 (executable)
@@ -272,9 +272,17 @@ static int handle_scsi (uaecptr request, struct hardfiledata *hfd)
        len *= hfd->blocksize;
        scsi_len = (uae_u32)cmd_write (hfd, scsi_data, offset, len);
         break;
+       case 0x37: /* READ DEFECT DATA */
+       write_log ("UAEHF: READ DEFECT DATA\n");
+       status = 2; /* CHECK CONDITION */
+       s[0] = 0x70;
+       s[2] = 0; /* NO SENSE */
+       s[12] = 0x1c; /* DEFECT LIST NOT FOUND */
+       ls = 12;
+       break;
        default:
        lr = -1;
-       write_log ("unsupported scsi command 0x%02.2X\n", cmd);
+       write_log ("UAEHF: unsupported scsi command 0x%02.2X\n", cmd);
        status = 2; /* CHECK CONDITION */
        s[0] = 0x70;
        s[2] = 5; /* ILLEGAL REQUEST */
@@ -498,13 +506,13 @@ static void getchs (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head,
 
 static void outofbounds (int cmd, uae_u64 offset, uae_u64 len, uae_u64 max)
 {
-    write_log ("cmd %d: out of bounds, %08.8X-%08.8X + %08.8X-%08.8X > %08.8X-%08.8X\n", cmd,
+    write_log ("UAEHF: cmd %d: out of bounds, %08.8X-%08.8X + %08.8X-%08.8X > %08.8X-%08.8X\n", cmd,
        (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len,
        (uae_u32)(max >> 32),(uae_u32)max);
 }
 static void unaligned (int cmd, uae_u64 offset, uae_u64 len, int blocksize)
 {
-    write_log ("cmd %d: unaligned access, %08.8X-%08.8X, %08.8X-%08.8X, %08.8X\n", cmd,
+    write_log ("UAEHF: cmd %d: unaligned access, %08.8X-%08.8X, %08.8X-%08.8X, %08.8X\n", cmd,
        (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len,
        blocksize);
 }
index cc3218c4630e37a293adb4bfb1fc575644e894f2..b79b4bbffaebbf58c28671e726b5f3da194c343f 100755 (executable)
@@ -9,17 +9,9 @@
 
 #ifdef DEBUGGER
 
-#define        MAX_HIST        10000
+#define        MAX_HIST 100
 
-extern int firsthist;
-extern int lasthist;
 extern int debugging;
-#ifdef NEED_TO_DEBUG_BADLY
-extern struct regstruct history[MAX_HIST];
-extern union flagu historyf[MAX_HIST];
-#else
-extern uaecptr history[MAX_HIST];
-#endif
 extern int exception_debugging;
 
 extern void debug(void);
index 5ae77cd65f939bcfe98a738eb8574bab6606a45f..00d015576e57449096a8b36e553602173f454b2e 100755 (executable)
@@ -87,6 +87,8 @@ struct uae_prefs {
     int sound_adjust;
     int sound_filter;
     int sound_volume;
+    int sound_stereo_swap_paula;
+    int sound_stereo_swap_ahi;
 
     int comptrustbyte;
     int comptrustword;
index 6944a7e6219136d4010c42411a2bb7aeec750021..b29a3de6181cd11f0efa85103cbc35216809f04e 100755 (executable)
@@ -24,7 +24,8 @@ extern void reset_all_systems (void);
 extern int quit_program;
 
 extern char warning_buffer[256];
-extern char *start_path;
+extern char start_path_data[];
+extern char start_path_data_exe[];
 
 /* This structure is used to define menus. The val field can hold key
  * shortcuts, or one of these special codes:
index 659c7dbd0f71fc9d61441281af178c95b1137b0e..7723b1a8d5136921959b0c6d164c0c3d2167aff8 100755 (executable)
@@ -29,7 +29,7 @@ extern void unlockscr (void);
 
 extern int debuggable (void);
 extern void LED (int);
-extern void screenshot (int);
+extern void screenshot (int,int);
 
 extern int bits_in_mask (unsigned long mask);
 extern int mask_shift (unsigned long mask);
index 867c8d76ebf7a6dddcb67bfc8741f52cf18ca14d..cc784e8dd12f7fe2e48a68541385758b8c1a8456 100755 (executable)
@@ -1216,7 +1216,7 @@ void inputdevice_handle_inputcode (void)
        gui_display (-1);
        break;
        case AKS_SCREENSHOT:
-       screenshot (1);
+       screenshot(1, 1);
        break;
 #ifdef ACTION_REPLAY
        case AKS_FREEZEBUTTON:
index 2fe8fbba396e84c8b2d0ef6c771c09485c050436..eb4ede7c91a521bd43a0d1dd2475480a1d4633ad 100755 (executable)
--- a/memory.c
+++ b/memory.c
@@ -198,11 +198,11 @@ uae_u8 *load_keyfile (struct uae_prefs *p, char *path, int *size)
            if (!f) {
                f = zfile_fopen ("roms/rom.key", "rb");
                if (!f) {
-                   strcpy (tmp, start_path);
+                   strcpy (tmp, start_path_data);
                    strcat (tmp, "rom.key");
                    f = zfile_fopen(tmp, "rb");
                    if (!f) {
-                       sprintf (tmp, "%s../shared/rom/rom.key", start_path);
+                       sprintf (tmp, "%s../shared/rom/rom.key", start_path_data);
                        f = zfile_fopen(tmp, "rb");
                    }
                }
@@ -1512,16 +1512,16 @@ static int load_kickstart (void)
 
     strcpy (tmprom, currprefs.romfile);
     if (f == NULL) {
-       sprintf (tmprom2, "%s%s", start_path, currprefs.romfile);
+       sprintf (tmprom2, "%s%s", start_path_data, currprefs.romfile);
        f = zfile_fopen (tmprom2, "rb");
        if (f == NULL) {
-           sprintf (currprefs.romfile, "%sroms/kick.rom", start_path);
+           sprintf (currprefs.romfile, "%sroms/kick.rom", start_path_data);
            f = zfile_fopen (currprefs.romfile, "rb");
            if (f == NULL) {
-               sprintf (currprefs.romfile, "%skick.rom", start_path);
+               sprintf (currprefs.romfile, "%skick.rom", start_path_data);
                f = zfile_fopen (currprefs.romfile, "rb");
                if (f == NULL) {
-                   sprintf (currprefs.romfile, "%s../shared/rom/kick.rom", start_path);
+                   sprintf (currprefs.romfile, "%s../shared/rom/kick.rom", start_path_data);
                    f = zfile_fopen (currprefs.romfile, "rb");
                }
            }
index d7912ab8f0451291f2a4582951262b2c5cdcbf90..4ef74f968b2b551e0a5e44e40fe3155d3852020b 100755 (executable)
@@ -74,7 +74,7 @@ int sound_freq_ahi;
 static int vin,devicenum;
 static int amigablksize;
 
-DWORD sound_flushes2  = 0;
+static DWORD sound_flushes2 = 0;
 
 extern HWND hAmigaWnd;
 #ifdef __GNUC__
@@ -94,9 +94,9 @@ static LPDIRECTSOUNDCAPTUREBUFFER lpDSB2r = NULL;
 struct winuae        //this struct is put in a6 if you call 
                         //execute native function
 {
-       HWND                    amigawnd;    //adress of amiga Window Windows Handle
-    unsigned int    changenum;   //number to detect screen close/open 
-    unsigned int    z3offset;    //the offset to add to acsess Z3 mem from Dll side
+    HWND amigawnd;    //adress of amiga Window Windows Handle
+    unsigned int changenum;   //number to detect screen close/open 
+    unsigned int z3offset;    //the offset to add to acsess Z3 mem from Dll side
 };
 
 struct winuae uaevar;
@@ -134,22 +134,22 @@ static uae_u32 emulib_ExecuteNativeCode2 (void)
     __asm
        {   mov espstore,esp
            push regs_
-               push a7
-               push a6
-               push a5
-               push a4
-               push a3
-               push a2
-               push a1
-        push d7
-               push d6
-        push d5
-               push d4
-               push d3
-               push d2
-               push d1
-               call native_func
-               mov esp,espstore
+           push a7
+           push a6
+           push a5
+           push a4
+           push a3
+           push a2
+           push a1
+           push d7
+           push d6
+           push d5
+           push d4
+           push d3
+           push d2
+           push d1
+           call native_func
+           mov esp,espstore
        }
        //CALL_NATIVE_FUNC2( d1, d2,d3, d4, d5, d6, d7, a1, a2, a3, a4 , a5 , a6 , a7);
     }
@@ -157,146 +157,76 @@ static uae_u32 emulib_ExecuteNativeCode2 (void)
     return 0;
 }
 
-char *DSError2( HRESULT error )
-{
-    switch( error )
-    {
-    case DSERR_ALLOCATED:
-        return "Allocated";
-
-    case DSERR_CONTROLUNAVAIL:
-        return "Control Unavailable";
-
-    case DSERR_INVALIDPARAM:
-        return "Invalid Parameter";
-
-    case DSERR_INVALIDCALL:
-        return "Invalid Call";
-
-    case DSERR_GENERIC:
-        return "Generic";
-
-    case DSERR_PRIOLEVELNEEDED:
-        return "Priority Level Needed";
-
-    case DSERR_OUTOFMEMORY:
-        return "Out of Memory";
-
-    case DSERR_BADFORMAT:
-        return "Bad Format";
-
-    case DSERR_UNSUPPORTED:
-        return "Unsupported";
-
-    case DSERR_NODRIVER:
-        return "No Driver";
-
-    case DSERR_ALREADYINITIALIZED:
-        return "Already Initialized";
-
-    case DSERR_NOAGGREGATION:
-        return "No Aggregation";
-
-    case DSERR_BUFFERLOST:
-        return "Buffer Lost";
-
-    case DSERR_OTHERAPPHASPRIO:
-        return "Other Application Has Priority";
-
-    case DSERR_UNINITIALIZED:
-        return "Uninitialized";
-
-    case DSERR_NOINTERFACE:
-        return "No Interface";
-
-    default:
-        return "Unknown";
-    }
-}
-
-
 void ahi_close_sound (void)
 {
-        HRESULT hr = DS_OK;
-
+    HRESULT hr = DS_OK;
    
-        if (!ahi_on)
-            return;
-               ahi_on=0;
-        ahisndbufpt =(int*) ahisndbuffer;
-        samplecount = 0;
-               if( lpDSB2 )
-               {
-        hr = IDirectSoundBuffer_Stop( lpDSB2 );
-               }
+    if (!ahi_on)
+       return;
+    ahi_on=0;
+    ahisndbufpt =(int*) ahisndbuffer;
+    samplecount = 0;
+    if(lpDSB2) {
+       hr = IDirectSoundBuffer_Stop(lpDSB2);
+    }
         
-        if( hr != DS_OK )
-        {
-            write_log( "SoundStop() failure: %s\n", DSError2( hr ) );
-        }
-     else
-       {
-            write_log( "Sound Stopped...\n" );
-       }
-    if( lpDSB2 )
-    {
+    if(FAILED(hr)) {
+       write_log( "SoundStop() failure: %s\n", DXError(hr));
+    } else {
+       write_log( "Sound Stopped...\n" );
+    }
+    if(lpDSB2) {
         IDirectSoundBuffer_Release( lpDSB2 );
         lpDSB2 = NULL;
     }
-    if( lpDSBprimary2 )
+    if(lpDSBprimary2)
     {
-        IDirectSoundBuffer_Release( lpDSBprimary2 );
+        IDirectSoundBuffer_Release(lpDSBprimary2);
         lpDSBprimary2 = NULL;
     }
-    if( lpDS2 )
+    if(lpDS2)
     {
-        IDirectSound_Release( lpDS2 );
+        IDirectSound_Release(lpDS2);
         lpDS2 = NULL;
     }
-  
-        if( lpDSB2r )
+    
+    if(lpDSB2r)
     {
-        IDirectSoundCaptureBuffer_Release( lpDSB2r );
+        IDirectSoundCaptureBuffer_Release(lpDSB2r);
         lpDSB2r = NULL;
     }
-       if (dsound_tmpw)
-       {
-               DestroyWindow(dsound_tmpw);dsound_tmpw=0;
-       }
-       if (ahisndbuffer) free(ahisndbuffer);
-    
-
+    if (dsound_tmpw)
+    {
+       DestroyWindow(dsound_tmpw);dsound_tmpw=0;
     }
+    if (ahisndbuffer)
+       free(ahisndbuffer);
+}
 
 void ahi_updatesound( int force )
 {
-  HRESULT hr;
-       int i;
-
+    HRESULT hr;
+    int i;
 
-  
-               if( sound_flushes2 == 1 )
+    if(sound_flushes2 == 1)
+    {
+       oldpos=0;
+       INTREQ(0xa000);
+       intcount=1;
+       /* Lock the entire buffer */
+       hr = IDirectSoundBuffer_Lock(lpDSB2, 0, ahisndbufsize, &lpData, &dwBytes,&dwData2,&dwBytes2,0);
+       if(hr == DSERR_BUFFERLOST)
        {
-               oldpos=0;
-           INTREQ(0xa000);
-               intcount=1;
-               /* Lock the entire buffer */
-               hr = IDirectSoundBuffer_Lock( lpDSB2, 0, ahisndbufsize, &lpData, &dwBytes,&dwData2,&dwBytes2,0 );
-               if( hr == DSERR_BUFFERLOST )
-               {
-                   IDirectSoundBuffer_Restore( lpDSB2 );
-                   hr = IDirectSoundBuffer_Lock( lpDSB2, 0, 0, &lpData, &dwBytes,&dwData2,&dwBytes2, DSBLOCK_ENTIREBUFFER );
-                       
-               }
-         
-           /* Get the big looping IDirectSoundBuffer_Play() rolling here, but only once at startup */
-           hr = IDirectSoundBuffer_Play( lpDSB2, 0, 0, DSBPLAY_LOOPING );
-               hr=IDirectSoundBuffer_Unlock(lpDSB2,lpData,dwBytes,dwData2,dwBytes2); 
-        if (!norec)hr = IDirectSoundCaptureBuffer_Start( lpDSB2r,DSBPLAY_LOOPING );
-
-        //memset( lpData, 0x80,4 );
-        
+           IDirectSoundBuffer_Restore(lpDSB2);
+           hr = IDirectSoundBuffer_Lock(lpDSB2, 0, 0, &lpData, &dwBytes,&dwData2,&dwBytes2, DSBLOCK_ENTIREBUFFER);
        }
+       /* Get the big looping IDirectSoundBuffer_Play() rolling here, but only once at startup */
+       hr = IDirectSoundBuffer_Play(lpDSB2, 0, 0, DSBPLAY_LOOPING);
+       hr = IDirectSoundBuffer_Unlock(lpDSB2,lpData,dwBytes,dwData2,dwBytes2); 
+        if (!norec)
+           hr = IDirectSoundCaptureBuffer_Start(lpDSB2r,DSBPLAY_LOOPING);
+        //memset( lpData, 0x80,4 );
+    }
 /*
                {
 long dwEvt=1;
@@ -318,53 +248,60 @@ if (dwEvt>1 ){calcsound=0;return;}
                }
 */
 
-   hr = IDirectSoundBuffer_GetCurrentPosition(lpDSB2, &i, 0);
-  if( hr != DSERR_BUFFERLOST )
-       {
+    hr = IDirectSoundBuffer_GetCurrentPosition(lpDSB2, &i, 0);
+    if(hr != DSERR_BUFFERLOST)
+    {
        i -= ahitweak;
-       if (i < 0)i = i + ahisndbufsize;                  
-       if (i >= ahisndbufsize)i = i - ahisndbufsize;
-       i = ( i / (amigablksize * 4 )) * ( amigablksize * 4 );
-               if (force == 1)
-               {
-                       if (( oldpos != i) )
-                       {
-                       INTREQ( 0xa000 );
-                       intcount = 1;
-                       return; //to generate amiga ints every amigablksize
-                              
-                       }
-                       else
-                       {
-                       return;
-                       }
-               }
-  
-   }
+       if (i < 0)
+           i = i + ahisndbufsize;                  
+       if (i >= ahisndbufsize)
+           i = i - ahisndbufsize;
+       i = (i / (amigablksize * 4)) * (amigablksize * 4);
+       if (force == 1)
+       {
+           if ((oldpos != i))
+           {
+               INTREQ(0xa000);
+               intcount = 1;
+               return; //to generate amiga ints every amigablksize
+           } else {
+               return;
+           }
+       }
+    }
 
-hr = IDirectSoundBuffer_Lock( lpDSB2, oldpos, amigablksize * 4, &dwData1, &dwBytes1, &dwData2, &dwBytes2 ,0);
+    hr = IDirectSoundBuffer_Lock(lpDSB2, oldpos, amigablksize * 4, &dwData1, &dwBytes1, &dwData2, &dwBytes2, 0);
+    if(hr == DSERR_BUFFERLOST)
+    {
+       write_log("lostbuf%d  %x\n",i,amigablksize);
+        IDirectSoundBuffer_Restore(lpDSB2);
+        hr = IDirectSoundBuffer_Lock(lpDSB2, 0, 0, &lpData, &dwBytes, NULL, NULL, DSBLOCK_ENTIREBUFFER);
+       dwData1=lpData;dwBytes1=dwBytes;dwBytes2=0;dwData2=0;
+    }
+    if(FAILED(hr))
+       return;
 
+    //write_log("%d  %x\n",freeblock,blksize);
 
-               if( hr == DSERR_BUFFERLOST )
-                       {
-                       write_log("lostbuf%d  %x\n",i,amigablksize);
-                   IDirectSoundBuffer_Restore( lpDSB2 );
-                   hr = IDirectSoundBuffer_Lock( lpDSB2, 0, 0, &lpData, &dwBytes, NULL, NULL, DSBLOCK_ENTIREBUFFER );
-                       dwData1=lpData;dwBytes1=dwBytes;dwBytes2=0;dwData2=0;
-               }
-               
-       
-                               //write_log("%d  %x\n",freeblock,blksize);
-                       
-                
+    if (currprefs.sound_stereo_swap_ahi) {
+       int i;
+       uae_s16 *p1 = (uae_s16*)ahisndbuffer;
+       uae_s16 *p2 = (uae_s16*)dwData1;
+       for (i = 0; i < dwBytes1 / 2; i += 2) {
+           p2[i + 0] = p1[i + 1];
+           p2[i + 1] = p1[i + 0];
+       }
+    } else {
        memcpy(dwData1,ahisndbuffer,dwBytes1);                                                                        
+    }
+
     sndptrmax = ahisndbuffer+ahisndbufsize;
-       ahisndbufpt = (int*)ahisndbuffer;
+    ahisndbufpt = (int*)ahisndbuffer;
  
-IDirectSoundBuffer_Unlock(lpDSB2, dwData1,dwBytes1,dwData2, dwBytes2); 
-  oldpos = i;
-  //oldpos=oldpos+(amigablksize*4);
-  //if (oldpos >= ahisndbufsize)oldpos=0; 
+    IDirectSoundBuffer_Unlock(lpDSB2, dwData1,dwBytes1,dwData2, dwBytes2); 
+    oldpos = i;
+    //oldpos=oldpos+(amigablksize*4);
+    //if (oldpos >= ahisndbufsize)oldpos=0; 
 }
 
 
@@ -374,9 +311,7 @@ IDirectSoundBuffer_Unlock(lpDSB2, dwData1,dwBytes1,dwData2, dwBytes2);
 void ahi_finish_sound_buffer( void )
 {
     sound_flushes2++;
-
     ahi_updatesound(2);
-       
 }
 
 extern GUID sound_device_guid[];
@@ -388,7 +323,7 @@ static int ahi_init_sound_win32 (void)
     DSCAPS DSCaps;
     DSCBUFFERDESC sound_buffer_rec;
     
-    if (lpDS2 )
+    if (lpDS2)
         return 0;
 
     enumerate_sound_devices (0);
@@ -403,14 +338,15 @@ static int ahi_init_sound_win32 (void)
     soundneutral = 0;
     ahisndbufsize = (amigablksize*4)*NATIVBUFFNUM;  // use 4 native buffer
     ahisndbuffer=malloc(ahisndbufsize+32);
-    if (!ahisndbuffer)return 0;
+    if (!ahisndbuffer)
+       return 0;
     hr = DirectSoundCreate( &sound_device_guid[currprefs.win32_soundcard], &lpDS2, NULL );
-    if (hr != DS_OK
+    if (FAILED(hr)
     {
-        write_log( "DirectSoundCreate() failure: %s\n", DSError2 (hr));
+        write_log( "DirectSoundCreate() failure: %s\n", DXError(hr));
         return 0;
     }
-       memset (&sound_buffer, 0, sizeof( DSBUFFERDESC ));
+    memset (&sound_buffer, 0, sizeof( DSBUFFERDESC ));
     sound_buffer.dwSize = sizeof( DSBUFFERDESC );
     sound_buffer.dwFlags = DSBCAPS_PRIMARYBUFFER;
     sound_buffer.dwBufferBytes = 0;
@@ -429,35 +365,35 @@ static int ahi_init_sound_win32 (void)
 
     
 
-    DSCaps.dwSize = sizeof( DSCAPS );
-    hr = IDirectSound_GetCaps( lpDS2, &DSCaps );
-    if( hr == DS_OK )
+    DSCaps.dwSize = sizeof(DSCAPS);
+    hr = IDirectSound_GetCaps(lpDS2, &DSCaps);
+    if(SUCCEEDED(hr))
     {
-       if( DSCaps.dwFlags & DSCAPS_EMULDRIVER )
+       if(DSCaps.dwFlags & DSCAPS_EMULDRIVER)
            write_log( "Your DirectSound Driver is emulated via WaveOut - yuck!\n" );
     }
-       if FAILED(IDirectSound_SetCooperativeLevel(
-            lpDS2,dsound_tmpw, DSSCL_PRIORITY))
+    if FAILED(IDirectSound_SetCooperativeLevel(lpDS2,dsound_tmpw, DSSCL_PRIORITY))
         return 0;
-    hr = IDirectSound_CreateSoundBuffer (lpDS2, &sound_buffer, &lpDSBprimary2, NULL);
-    if( hr != DS_OK 
+    hr = IDirectSound_CreateSoundBuffer(lpDS2, &sound_buffer, &lpDSBprimary2, NULL);
+    if(FAILED(hr)
     {
-        write_log( "CreateSoundBuffer() failure: %s\n", DSError2( hr ) );
+        write_log("CreateSoundBuffer() failure: %s\n", DXError(hr));
         return 0;
     }
-    hr = IDirectSoundBuffer_SetFormat (lpDSBprimary2, &wavfmt);
-    if( hr != DS_OK 
+    hr = IDirectSoundBuffer_SetFormat(lpDSBprimary2, &wavfmt);
+    if(FAILED(hr)
     {
-        write_log( "SetFormat() failure: %s\n", DSError2 (hr));
+        write_log( "SetFormat() failure: %s\n", DXError(hr));
         return 0;
     }
     sound_buffer.dwBufferBytes = ahisndbufsize;
     sound_buffer.lpwfxFormat = &wavfmt;
-    sound_buffer.dwFlags = DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLVOLUME /*| DSBCAPS_CTRLPOSITIONNOTIFY */| DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_GLOBALFOCUS |DSBCAPS_STATIC ;
-    hr = IDirectSound_CreateSoundBuffer( lpDS2, &sound_buffer, &lpDSB2, NULL );
-    if (hr != DS_OK) 
+    sound_buffer.dwFlags = DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLVOLUME /*| DSBCAPS_CTRLPOSITIONNOTIFY */
+       | DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_GLOBALFOCUS |DSBCAPS_STATIC ;
+    hr = IDirectSound_CreateSoundBuffer(lpDS2, &sound_buffer, &lpDSB2, NULL);
+    if (FAILED(hr)) 
     {
-        write_log ("CreateSoundBuffer() failure: %s\n", DSError2 (hr));
+        write_log("CreateSoundBuffer() failure: %s\n", DXError(hr));
         return 0;
     }
 /*  //used for PositionNotify 
@@ -486,52 +422,50 @@ static int ahi_init_sound_win32 (void)
 */
 
     hr = IDirectSoundBuffer_SetVolume (lpDSB2, 0);
-    if (hr != DS_OK
+    if (FAILED(hr)
     {
-        write_log( "SetVolume() 2 failure: %s\n", DSError2 (hr));
-        return 0;
+       write_log("SetVolume() 2 failure: %s\n", DXError(hr));
+       return 0;
     }
 
-     hr = IDirectSoundBuffer_GetFormat (lpDSBprimary2,&wavfmt,500,0);
-    if( hr != DS_OK 
+    hr = IDirectSoundBuffer_GetFormat(lpDSBprimary2,&wavfmt,500,0);
+    if(FAILED(hr)
     {
-        write_log( "GetFormat() failure: %s\n", DSError2 (hr));
-        return 0;
+       write_log("GetFormat() failure: %s\n", DXError(hr));
+       return 0;
     }
     // Record begin
-       hr = DirectSoundCaptureCreate( NULL, &lpDS2r, NULL );
-    if (hr != DS_OK
+    hr = DirectSoundCaptureCreate( NULL, &lpDS2r, NULL );
+    if (FAILED(hr)
     {
-        write_log( "DirectSoundCaptureCreate() failure: %s\n", DSError2 (hr));
-        norec = 1;
+       write_log( "DirectSoundCaptureCreate() failure: %s\n", DXError(hr));
+       norec = 1;
     }
     memset (&sound_buffer_rec, 0, sizeof( DSCBUFFERDESC ));
     sound_buffer_rec.dwSize = sizeof( DSCBUFFERDESC );
-       sound_buffer_rec.dwBufferBytes = amigablksize*4*RECORDBUFFER;
+    sound_buffer_rec.dwBufferBytes = amigablksize*4*RECORDBUFFER;
     sound_buffer_rec.lpwfxFormat = &wavfmt;
     sound_buffer_rec.dwFlags = 0 ;
   
-       if (!norec)
-       {       
-               hr = IDirectSoundCapture_CreateCaptureBuffer( lpDS2r, &sound_buffer_rec, &lpDSB2r, NULL );
-               }
-               if (hr != DS_OK) 
-               {
-                       write_log ("CreateCaptureSoundBuffer() failure: %s\n", DSError2 (hr));
-                       norec = 1;
-               }
-               else
+    if (!norec)
+    {  
+       hr = IDirectSoundCapture_CreateCaptureBuffer( lpDS2r, &sound_buffer_rec, &lpDSB2r, NULL );
+        if (FAILED(hr)) 
+       {
+           write_log ("CreateCaptureSoundBuffer() failure: %s\n", DXError(hr));
+           norec = 1;
+       }
+    }
                
-
-    
-    
-    if(ahisndbuffer==0)return 0;
+    if(ahisndbuffer==0)
+       return 0;
     ahisndbufpt =(int*) ahisndbuffer;
     sndptrmax = ahisndbuffer + ahisndbufsize;
     samplecount = 0;
-    memset( ahisndbuffer, soundneutral,amigablksize*8 );
+    memset(ahisndbuffer,  soundneutral, amigablksize*8);
     write_log("Init AHI Sound Rate %d Buffsize %d\n",sound_freq_ahi,amigablksize); 
-       if (!norec)write_log("Init AHI Audio Recording \n");
+    if (!norec)
+       write_log("Init AHI Audio Recording \n");
     ahi_on = 1;
     return sound_freq_ahi;
 }
@@ -564,18 +498,16 @@ uae_u32 ahi_demux (void)
 // d0 1=closesound     d1=unit
 // d0 2=writesamples   d1=unit a0=addr      write blksize samples to card     
 // d0 3=readsamples    d1=unit a0=addr      read samples from card ret: d0=samples read
-      // make sure you have from amigaside blksize*4 mem alloced 
-      // d0=-1 no data available d0=-2 no recording open
-         // d0 > 0 there are more blksize Data in the que
-         // do the loop until d0 get 0
-         // if d0 is greater than 200 bring a message
-         // that show the user that data is lost
-         // maximum blocksbuffered are 250 (8,5 sec)
+       // make sure you have from amigaside blksize*4 mem alloced 
+       // d0=-1 no data available d0=-2 no recording open
+       // d0 > 0 there are more blksize Data in the que
+       // do the loop until d0 get 0
+       // if d0 is greater than 200 bring a message
+       // that show the user that data is lost
+       // maximum blocksbuffered are 250 (8,5 sec)
 // d0 4=writeinterrupt d1=unit  d0=0 no interrupt happen for this unit
-         // d0=-2 no playing open
-
+       // d0=-2 no playing open
        //note units for now not support use only unit 0
-       
 // d0=10 get clipboard size      d0=size in bytes  
 // d0=11 get clipboard data      a0=clipboarddata
                                   //Note: a get clipboard size must do before
@@ -592,316 +524,331 @@ uae_u32 ahi_demux (void)
 // d0=108 free swap array
 // d0=200 ahitweak               d1=offset for dsound position pointer
 
-int opcode = m68k_dreg (regs, 0);
-switch (opcode) {
-       int i,slen,t,todo,byte1,byte2;  
+    int opcode = m68k_dreg (regs, 0);
+    switch (opcode)
+    {
+       int i,slen,t,todo,byte1,byte2;  
        LPTSTR p,p2,pos1,pos2;
        uae_u32 src, num_vars;
        static int cap_pos,clipsize;
-       static  LPTSTR clipdat;
+       static LPTSTR clipdat;
        int cur_pos;
        
-    case 0:
-               cap_pos=0;
-               sound_freq_ahi=m68k_dreg (regs, 2);
-               amigablksize=m68k_dreg (regs, 3);
-               sound_freq_ahi=ahi_open_sound();
-               uaevar.changenum--;
-               return sound_freq_ahi;
-    case 1:
-               ahi_close_sound();
-               sound_freq_ahi = 0;
-               return 0;
+       case 0:
+           cap_pos=0;
+           sound_freq_ahi=m68k_dreg (regs, 2);
+           amigablksize=m68k_dreg (regs, 3);
+           sound_freq_ahi=ahi_open_sound();
+           uaevar.changenum--;
+       return sound_freq_ahi;
+
+        case 1:
+           ahi_close_sound();
+           sound_freq_ahi = 0;
+       return 0;
+
        case 2:
-               addr=(char *)m68k_areg (regs, 0);
-               for (i=0;i<(amigablksize*4);i+=4)
-               
-               
-                       ahisndbufpt[0]=get_long((unsigned int)addr+i);
-                       ahisndbufpt+=1;
-                       /*ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+2);
-                       ahisndbufpt+=1;
-                       ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+1);
-                       ahisndbufpt+=1;
-                       ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i);
-                       ahisndbufpt+=1;*/
-               }
-                       ahi_finish_sound_buffer();
-               return amigablksize;
+           addr=(char *)m68k_areg (regs, 0);
+           for (i=0;i<(amigablksize*4);i+=4)
+           { 
+               ahisndbufpt[0] = get_long((unsigned int)addr+i);
+               ahisndbufpt+=1;
+               /*ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+2);
+               ahisndbufpt+=1;
+               ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+1);
+               ahisndbufpt+=1;
+               ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i);
+               ahisndbufpt+=1;*/
+           }
+           ahi_finish_sound_buffer();
+       return amigablksize;
+
        case 3:
-               if (norec)return -1;
-               if (!ahi_on)return -2;
-        i = IDirectSoundCaptureBuffer_GetCurrentPosition(lpDSB2r,&t,&cur_pos);
-        t =  amigablksize*4;
+           if (norec)return -1;
+           if (!ahi_on)return -2;
+           i = IDirectSoundCaptureBuffer_GetCurrentPosition(lpDSB2r,&t,&cur_pos);
+           t =  amigablksize*4;
                
-               if (cap_pos<=cur_pos)todo=cur_pos-cap_pos;
-               else
-                       todo=cur_pos+(RECORDBUFFER*t)-cap_pos;
-               if (todo<t)    
-               {                //if no complete buffer ready exit
-                       return -1;
-               }
-               i = IDirectSoundCaptureBuffer_Lock(lpDSB2r,cap_pos,t,&pos1,&byte1,&pos2,&byte2,0);
+           if (cap_pos<=cur_pos)
+               todo=cur_pos-cap_pos;
+           else
+               todo=cur_pos+(RECORDBUFFER*t)-cap_pos;
+           if (todo<t)    
+           {                //if no complete buffer ready exit
+               return -1;
+           }
+           i = IDirectSoundCaptureBuffer_Lock(lpDSB2r,cap_pos,t,&pos1,&byte1,&pos2,&byte2,0);
+
+           if ((cap_pos+t)< (t*RECORDBUFFER))
+           {
+               cap_pos=cap_pos+t;
+           }
+           else
+           {
+               cap_pos = 0;
+           }  
+           addr=(char *)m68k_areg (regs, 0);
+           sndbufrecpt=(unsigned int*)pos1;
+           t=t/4;
+           for (i=0;i<t;i++)
+           {
+               put_long((uae_u32)addr,sndbufrecpt[0]);
+               addr+=4;
+               sndbufrecpt+=1;
+           }
+           t=t*4;
+           i=IDirectSoundCaptureBuffer_Unlock(lpDSB2r,pos1,byte1,pos2,byte2);
+       return (todo-t)/t;
 
-               if ((cap_pos+t)< (t*RECORDBUFFER))
-               {
-                       cap_pos=cap_pos+t;
-               }
-               else
-               {
-                       cap_pos = 0;
-
-               }  
-               addr=(char *)m68k_areg (regs, 0);
-               sndbufrecpt=(unsigned int*)pos1;
-               t=t/4;
-               for (i=0;i<t;i++)
-               {
-                       put_long((uae_u32)addr,sndbufrecpt[0]);
-                       addr+=4;
-                       sndbufrecpt+=1;
-               }
-               t=t*4;
-               i=IDirectSoundCaptureBuffer_Unlock(lpDSB2r,pos1,byte1,pos2,byte2);
-        return (todo-t)/t;
        case 4:
-               if (!ahi_on)return -2;
-               i=intcount;
-               intcount=0;
-        return i;
+           if (!ahi_on)
+               return -2;
+           i=intcount;
+           intcount=0;
+       return i;
+
        case 5:
-        if ( !ahi_on ) return 0;
-            ahi_updatesound ( 1 );
+            if ( !ahi_on )
+               return 0;
+           ahi_updatesound ( 1 );
         return 1;      
 
        case 10:        
-       i=OpenClipboard(0);
-          clipdat=GetClipboardData(CF_TEXT);
-          if (clipdat)
-          {
-              clipsize=strlen(clipdat);
-              clipsize++;
-              return clipsize;
-          }
-          else 
-          {
-                  return 0;
-          }
+           i=OpenClipboard(0);
+           clipdat=GetClipboardData(CF_TEXT);
+           if (clipdat)
+           {
+               clipsize=strlen(clipdat);
+               clipsize++;
+               return clipsize;
+           }
+        return 0;
+
        case 11:
-               addr=(char *)m68k_areg (regs, 0);
-               for (i=0;i<clipsize;i++)
-               {
-                       put_byte((uae_u32)addr,clipdat[0]);
-                       addr++;
-                       clipdat++;
-               }
-               CloseClipboard();
-               return 0;
+           addr=(char *)m68k_areg (regs, 0);
+           for (i=0;i<clipsize;i++)
+           {
+               put_byte((uae_u32)addr,clipdat[0]);
+               addr++;
+               clipdat++;
+           }
+           CloseClipboard();
+       return 0;
+
        case 12:           
-          addr = (char *)m68k_areg (regs, 0);
-          addr = (char *)get_real_address ((uae_u32)addr);
-          i = OpenClipboard (0);
-          EmptyClipboard();
-          slen = strlen(addr);
-          p = GlobalAlloc (GMEM_DDESHARE,slen+2);
-          p2 = GlobalLock (p);
-       memcpy (p2,addr,slen);
-          p2[slen]=0;
-          GlobalUnlock (p);
-          i = (int)SetClipboardData (CF_TEXT,p2);
-          CloseClipboard ();
-          GlobalFree (p);
-          return 0;
-       case 13:
-      /* HACK */
-        { //for higher P96 mouse draw rate
-       extern int p96hack_vpos2,hack_vpos,p96refresh_active;
-       extern uae_u16 vtotal;
-       extern unsigned int new_beamcon0;
-       p96hack_vpos2 = 0;
-       if (m68k_dreg (regs, 1) > 0)
+           addr = (char *)m68k_areg (regs, 0);
+           addr = (char *)get_real_address ((uae_u32)addr);
+           i = OpenClipboard (0);
+           EmptyClipboard();
+           slen = strlen(addr);
+           p = GlobalAlloc (GMEM_DDESHARE,slen+2);
+           p2 = GlobalLock (p);
+           memcpy (p2,addr,slen);
+           p2[slen]=0;
+           GlobalUnlock (p);
+           i = (int)SetClipboardData (CF_TEXT,p2);
+           CloseClipboard ();
+           GlobalFree (p);
+       return 0;
+
+       case 13: /* HACK */
+       { //for higher P96 mouse draw rate
+           extern int p96hack_vpos2,hack_vpos,p96refresh_active;
+           extern uae_u16 vtotal;
+           extern unsigned int new_beamcon0;
+           p96hack_vpos2 = 0;
+           if (m68k_dreg (regs, 1) > 0)
            p96hack_vpos2 = 15625 / m68k_dreg (regs, 1);
-       p96refresh_active=1;
-       picasso_refresh (0);
-        } //end for higher P96 mouse draw rate
-      return 0;
+           p96refresh_active=1;
+           picasso_refresh (0);
+       } //end for higher P96 mouse draw rate
+       return 0;
 
        case 20:
-               return enforcer_enable(m68k_dreg (regs, 1));
+       return enforcer_enable(m68k_dreg (regs, 1));
 
        case 21:
-               return enforcer_disable();
+       return enforcer_disable();
 
        case 25:
-        flushprinter ();
+           flushprinter ();
        return 0;
        
        case 100: // open dll
-               {  
-               char *dllname;
-               uae_u32 result;
-        dllname = ( char *) m68k_areg (regs, 0);
-        dllname = (char *)get_real_address ((uae_u32)dllname);
-        result=(uae_u32) LoadLibrary(dllname);
-               write_log("%s windows dll/alib loaded at %d (0 mean failure)\n",dllname,result); 
-               return result;
-               }
+       {  
+           char *dllname;
+           uae_u32 result;
+           dllname = ( char *) m68k_areg (regs, 0);
+           dllname = (char *)get_real_address ((uae_u32)dllname);
+           result=(uae_u32) LoadLibrary(dllname);
+           write_log("%s windows dll/alib loaded at %d (0 mean failure)\n",dllname,result); 
+       return result;
+       }
+
        case 101:      //get dll label
-               {
-               HMODULE m;
-        char *funcname;
-               m = (HMODULE) m68k_dreg (regs, 1);
-               funcname = (char *)m68k_areg (regs, 0);
-        funcname = (char *)get_real_address ((uae_u32)funcname);
-               return (uae_u32) GetProcAddress(m,funcname);
-               }
+       {
+           HMODULE m;
+           char *funcname;
+           m = (HMODULE) m68k_dreg (regs, 1);
+           funcname = (char *)m68k_areg (regs, 0);
+           funcname = (char *)get_real_address ((uae_u32)funcname);
+       return (uae_u32) GetProcAddress(m,funcname);
+       }
+
        case 102:      //execute native code
-               return emulib_ExecuteNativeCode2 ();
+           return emulib_ExecuteNativeCode2 ();
                
        case 103:      //close dll
-               {
-               HMODULE libaddr;
-               libaddr= (HMODULE) m68k_dreg (regs, 1);
-               FreeLibrary(libaddr);
-               return 0;
-               }
+       {
+           HMODULE libaddr;
+           libaddr = (HMODULE) m68k_dreg (regs, 1);
+           FreeLibrary(libaddr);
+           return 0;
+       }
+
        case 104:        //screenlost
        {
-               static int oldnum=0;
-               if (uaevar.changenum == oldnum)return 0;
-               oldnum=uaevar.changenum;return 1;
+           static int oldnum=0;
+           if (uaevar.changenum == oldnum)
+               return 0;
+           oldnum=uaevar.changenum;
+           return 1;
        }
-       case 105:               //returns memory offset
+
+       case 105:   //returns memory offset
            return (uae_u32) get_real_address(0);
-       case 106:               //byteswap 16bit vars
-                                       //a0 = start address
-                                       //d1 = number of 16bit vars
-                                       //returns address of new array
-               src = m68k_areg(regs, 0);
-               num_vars = m68k_dreg(regs, 1);
+       case 106:   //byteswap 16bit vars
+                   //a0 = start address
+                   //d1 = number of 16bit vars
+                   //returns address of new array
+           src = m68k_areg(regs, 0);
+           num_vars = m68k_dreg(regs, 1);
                
-               if (bswap_buffer_size < num_vars * 2) {
-                       bswap_buffer_size = (num_vars + 1024) * 2;
-                       free(bswap_buffer);
-                       bswap_buffer = (void*)malloc(bswap_buffer_size);
-               }
-                       __asm {
-                               mov esi, dword ptr [src]
-                               mov edi, dword ptr [bswap_buffer]
-                               mov ecx, num_vars
-                               
-                               mov ebx, ecx
-                               and ecx, 3
-                               je BSWAP_WORD_4X
-                               
-                       BSWAP_WORD_LOOP:
-                               mov ax, [esi]
-                               mov dl, al
-                               mov al, ah
-                               mov ah, dl
-                               mov [edi], ax
-                               add esi, 2
-                               add edi, 2
-                               loopne BSWAP_WORD_LOOP
+           if (bswap_buffer_size < num_vars * 2) {
+               bswap_buffer_size = (num_vars + 1024) * 2;
+               free(bswap_buffer);
+               bswap_buffer = (void*)malloc(bswap_buffer_size);
+           }
+           __asm {
+               mov esi, dword ptr [src]
+               mov edi, dword ptr [bswap_buffer]
+               mov ecx, num_vars
                                
-                       BSWAP_WORD_4X:
-                               mov ecx, ebx
-                               shr ecx, 2
-                               je BSWAP_WORD_END
-                       BSWAP_WORD_4X_LOOP:
-                               mov ax, [esi]
-                               mov dl, al
-                               mov al, ah
-                               mov ah, dl
-                               mov [edi], ax
-                               mov ax, [esi+2]
-                               mov dl, al
-                               mov al, ah
-                               mov ah, dl
-                               mov [edi+2], ax
-                               mov ax, [esi+4]
-                               mov dl, al
-                               mov al, ah
-                               mov ah, dl
-                               mov [edi+4], ax
-                               mov ax, [esi+6]
-                               mov dl, al
-                               mov al, ah
-                               mov ah, dl
-                               mov [edi+6], ax
-                               add esi, 8
-                               add edi, 8
-                               loopne BSWAP_WORD_4X_LOOP
+               mov ebx, ecx
+               and ecx, 3
+               je BSWAP_WORD_4X
                                
-                       BSWAP_WORD_END:
-                       }
-               return (uae_u32) bswap_buffer;
-       case 107:       //byteswap 32bit vars - see case 106
-                               //a0 = start address
-                               //d1 = number of 32bit vars
-                               //returns address of new array
-               src = m68k_areg(regs, 0);
-               num_vars = m68k_dreg(regs, 1);
-               if (bswap_buffer_size < num_vars * 4) {
-                       bswap_buffer_size = (num_vars + 16384) * 4;
-                       free(bswap_buffer);
-                       bswap_buffer = (void*)malloc(bswap_buffer_size);
-               }
-                       __asm {
-                               mov esi, dword ptr [src]
-                               mov edi, dword ptr [bswap_buffer]
-                               mov ecx, num_vars
-                               
-                               mov ebx, ecx
-                               and ecx, 3
-                               je BSWAP_DWORD_4X
-                               
-                       BSWAP_DWORD_LOOP:
-                               mov eax, [esi]
-                               bswap eax
-                               mov [edi], eax
-                               add esi, 4
-                               add edi, 4
-                               loopne BSWAP_DWORD_LOOP
+               BSWAP_WORD_LOOP:
+               mov ax, [esi]
+               mov dl, al
+               mov al, ah
+               mov ah, dl
+               mov [edi], ax
+               add esi, 2
+               add edi, 2
+               loopne BSWAP_WORD_LOOP
+                       
+               BSWAP_WORD_4X:
+               mov ecx, ebx
+               shr ecx, 2
+               je BSWAP_WORD_END
+               BSWAP_WORD_4X_LOOP:
+               mov ax, [esi]
+               mov dl, al
+               mov al, ah
+               mov ah, dl
+               mov [edi], ax
+               mov ax, [esi+2]
+               mov dl, al
+               mov al, ah
+               mov ah, dl
+               mov [edi+2], ax
+               mov ax, [esi+4]
+               mov dl, al
+               mov al, ah
+               mov ah, dl
+               mov [edi+4], ax
+               mov ax, [esi+6]
+               mov dl, al
+               mov al, ah
+               mov ah, dl
+               mov [edi+6], ax
+               add esi, 8
+               add edi, 8
+               loopne BSWAP_WORD_4X_LOOP               
+               BSWAP_WORD_END:
+           }
+        return (uae_u32) bswap_buffer;
+
+       case 107:   //byteswap 32bit vars - see case 106
+                   //a0 = start address
+                   //d1 = number of 32bit vars
+                   //returns address of new array
+           src = m68k_areg(regs, 0);
+           num_vars = m68k_dreg(regs, 1);
+           if (bswap_buffer_size < num_vars * 4) {
+               bswap_buffer_size = (num_vars + 16384) * 4;
+               free(bswap_buffer);
+               bswap_buffer = (void*)malloc(bswap_buffer_size);
+           }
+           __asm {
+               mov esi, dword ptr [src]
+               mov edi, dword ptr [bswap_buffer]
+               mov ecx, num_vars
+               
+               mov ebx, ecx
+               and ecx, 3
+               je BSWAP_DWORD_4X
                                
-                       BSWAP_DWORD_4X:
-                               mov ecx, ebx
-                               shr ecx, 2
-                               je BSWAP_DWORD_END
-                       BSWAP_DWORD_4X_LOOP:
-                               mov eax, [esi]
-                               bswap eax
-                               mov [edi], eax
-                               mov eax, [esi+4]
-                               bswap eax
-                               mov [edi+4], eax
-                               mov eax, [esi+8]
-                               bswap eax
-                               mov [edi+8], eax
-                               mov eax, [esi+12]
-                               bswap eax
-                               mov [edi+12], eax
-                               add esi, 16
-                               add edi, 16
-                               loopne BSWAP_DWORD_4X_LOOP
+               BSWAP_DWORD_LOOP:
+               mov eax, [esi]
+               bswap eax
+               mov [edi], eax
+               add esi, 4
+               add edi, 4
+               loopne BSWAP_DWORD_LOOP
+                       
+               BSWAP_DWORD_4X:
+               mov ecx, ebx
+               shr ecx, 2
+               je BSWAP_DWORD_END
+               BSWAP_DWORD_4X_LOOP:
+               mov eax, [esi]
+               bswap eax
+               mov [edi], eax
+               mov eax, [esi+4]
+               bswap eax
+               mov [edi+4], eax
+               mov eax, [esi+8]
+               bswap eax
+               mov [edi+8], eax
+               mov eax, [esi+12]
+               bswap eax
+               mov [edi+12], eax
+               add esi, 16
+               add edi, 16
+               loopne BSWAP_DWORD_4X_LOOP
                                
-                       BSWAP_DWORD_END:
-                       }
-               return (uae_u32) bswap_buffer;
-       case 108:               //frees swap array
-               bswap_buffer_size = 0;
-               free(bswap_buffer);
-               bswap_buffer = NULL;
-               return 0;       
+               BSWAP_DWORD_END:
+           }
+       return (uae_u32) bswap_buffer;
+
+       case 108: //frees swap array
+           bswap_buffer_size = 0;
+           free(bswap_buffer);
+           bswap_buffer = NULL;
+       return 0;       
+
        case 200:
-       ahitweak = m68k_dreg (regs, 1);
-       ahi_pollrate = m68k_dreg (regs, 2);
-       if (ahi_pollrate < 10)
-           ahi_pollrate = 10;
-       if (ahi_pollrate > 60)
-           ahi_pollrate = 60;
+           ahitweak = m68k_dreg (regs, 1);
+           ahi_pollrate = m68k_dreg (regs, 2);
+           if (ahi_pollrate < 10)
+               ahi_pollrate = 10;
+           if (ahi_pollrate > 60)
+               ahi_pollrate = 60;
        return 1;
+
        default:
        return 0x12345678;     // Code for not supportet function
-       }
+    }
 } 
index d1996d2f0afdc1952b2bbc02467d54a39f714a04..9f908bfd1b506c63d6aa06677c93a582df9fe21a 100755 (executable)
@@ -186,7 +186,7 @@ static uae_u8 *ioctl_command_read (int unitnum, int sector)
     while (cnt-- > 0) {
        gui_cd_led (1);
        seterrormode ();
-       if (SetFilePointer (ciw32[unitnum].h, sector  * 2048, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
+       if (SetFilePointer (ciw32[unitnum].h, sector * 2048, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
            reseterrormode ();
            if (win32_error (unitnum, "SetFilePointer") < 0)
                continue;
@@ -257,7 +257,7 @@ static uae_u8 *ioctl_command_toc (int unitnum)
         seterrormode ();
        if (!DeviceIoControl(ciw32[unitnum].h, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &len, NULL)) {
            reseterrormode ();
-           if (!win32_error (unitnum, "IOCTL_CDROM_READ_TOC"))
+           if (win32_error (unitnum, "IOCTL_CDROM_READ_TOC") < 0)
                continue;
            return 0;
        }
index 6ace22caaa502b158155edaf01c2f3d8205d2d72..0812860cd291a018db695daa2f74eb5b3a61958b 100755 (executable)
@@ -659,7 +659,7 @@ static BOOL CALLBACK di_enumcallback (LPCDIDEVICEINSTANCE lpddi, LPVOID *dd)
         lpddi->guidInstance.Data1, lpddi->guidInstance.Data2, lpddi->guidInstance.Data3,
         lpddi->guidInstance.Data4[0], lpddi->guidInstance.Data4[1], lpddi->guidInstance.Data4[2], lpddi->guidInstance.Data4[3],
         lpddi->guidInstance.Data4[4], lpddi->guidInstance.Data4[5], lpddi->guidInstance.Data4[6], lpddi->guidInstance.Data4[7]);
-    write_log ("'%s' '%s' %08.8X (%s)\n", lpddi->tszProductName, lpddi->tszInstanceName, lpddi->dwDevType, typetxt);
+    write_log ("'%s' '%s' %08.8X [%s]\n", lpddi->tszProductName, lpddi->tszInstanceName, lpddi->dwDevType, typetxt);
 #endif
 
     if (did == di_mouse) {
index d263329f43311aeed2dfe354a569f93e82c03018..10128f9b9c55167f6f3eba5d056a8adac41092a1 100755 (executable)
@@ -50,13 +50,13 @@ static int flipinterval_supported;
 static int restoresurface (LPDIRECTDRAWSURFACE7 surface)
 {
     HRESULT hr = IDirectDrawSurface7_Restore (surface);
-    if (hr == DD_OK) {
+    if (SUCCEEDED(hr)) {
        HRESULT hr2;
        DDBLTFX bltfx;
        memset (&bltfx, 0, sizeof (bltfx));
        bltfx.dwSize = sizeof (bltfx);
        hr2 = IDirectDrawSurface7_Blt (surface, NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltfx);
-       if (hr2 != DD_OK) {
+       if (FAILED(hr2)) {
            static int crap = 0;
            if (hr2 == 0x887601C2) {
                if (crap)
@@ -265,12 +265,12 @@ static int LockStub( surface_type_e type )
        IDirectDrawSurface7_Restore( DirectDrawState.primary.surface );
     }
 
-    while ( (ddrval = IDirectDrawSurface7_Lock( surface, NULL, surfacedesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,
-                                                NULL ) ) != DD_OK )
+    while (FAILED(ddrval = IDirectDrawSurface7_Lock(surface, NULL, surfacedesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,
+                                                NULL)))
     {
         if (ddrval == DDERR_SURFACELOST) {
            ddrval = restoresurface (surface);
-            if (ddrval != DD_OK)
+            if (FAILED(ddrval))
             {
                 result = 0;
                 break;
@@ -283,7 +283,7 @@ static int LockStub( surface_type_e type )
             break;
         }
     }
-    if( ddrval == DD_OK )
+    if(SUCCEEDED(ddrval))
         result = 1;
     
     if( result )
@@ -680,8 +680,8 @@ int DirectDraw_Start( GUID *guid )
     helcaps.dwSize = sizeof( helcaps );
 
     ddrval = DirectDrawCreate( guid, &DirectDrawState.directdraw.ddx, NULL );
-    if (ddrval != DD_OK) {
-       if ( guid != NULL)
+    if (FAILED(ddrval)) {
+       if (guid != NULL)
            return 0;
        goto oops;
     }
@@ -691,7 +691,7 @@ int DirectDraw_Start( GUID *guid )
     ddrval = IDirectDraw_QueryInterface( DirectDrawState.directdraw.ddx,
                                          &IID_IDirectDraw7,
                                          (LPVOID *)&DirectDrawState.directdraw.dd );
-    if( ddrval != DD_OK )
+    if(FAILED(ddrval))
     {
        gui_message("start_ddraw(): DirectX 7 or newer required");
         DirectDraw_Release();
@@ -701,7 +701,7 @@ int DirectDraw_Start( GUID *guid )
     DirectDraw_GetCaps( &drivercaps, &helcaps );
     ShowDDCaps( drivercaps, 1 );
     ShowDDCaps( helcaps, 0 );
-    if (DirectDraw_GetDisplayMode () == DD_OK)
+    if (SUCCEEDED(DirectDraw_GetDisplayMode ()))
        return 1;
     if (guid != NULL) {
        DirectDraw_Release ();
@@ -787,8 +787,7 @@ HRESULT DirectDraw_SetCooperativeLevel( HWND window, int want_fullscreen )
                                                want_fullscreen ?
                                                DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN  :
                                                DDSCL_NORMAL );
-    if( ddrval == DD_OK )
-    {
+    if(SUCCEEDED(ddrval)) {
        DirectDrawState.fullscreen = want_fullscreen;
        DirectDrawState.window = window;
     }
@@ -945,7 +944,7 @@ static DWORD ConvertGDIColor( COLORREF dwGDIColor )
     IDirectDrawSurface7_GetSurfaceDesc(DirectDrawState.primary.surface, &pdds);
 
     //  Use GDI SetPixel to color match for us
-    if( dwGDIColor != CLR_INVALID && IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface, &hdc) == DD_OK)
+    if(dwGDIColor != CLR_INVALID && SUCCEEDED(IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface, &hdc)))
     {
         rgbT = GetPixel(hdc, 0, 0);     // Save current pixel value
         SetPixel(hdc, 0, 0, dwGDIColor);       // Set our value
@@ -955,7 +954,7 @@ static DWORD ConvertGDIColor( COLORREF dwGDIColor )
     // Now lock the surface so we can read back the converted color
     ddsd.dwSize = sizeof(ddsd);
     hr = IDirectDrawSurface7_Lock(DirectDrawState.primary.surface, NULL, &ddsd, DDLOCK_WAIT, NULL );
-    if( hr == DD_OK)
+    if(SUCCEEDED(hr))
     {
         dw = *(DWORD *) ddsd.lpSurface; 
         if( ddsd.ddpfPixelFormat.dwRGBBitCount < 32 ) // Mask it to bpp
@@ -964,7 +963,7 @@ static DWORD ConvertGDIColor( COLORREF dwGDIColor )
     }
 
     //  Now put the color that was there back.
-    if( dwGDIColor != CLR_INVALID && IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface,&hdc) == DD_OK )
+    if(dwGDIColor != CLR_INVALID && SUCCEEDED(IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface,&hdc)))
     {
         SetPixel( hdc, 0, 0, rgbT );
        IDirectDrawSurface7_ReleaseDC(DirectDrawState.primary.surface,hdc);
@@ -1043,7 +1042,7 @@ HRESULT DirectDraw_CreateOverlaySurface(int width, int height, int bits, int typ
 
        // Attempt to create the surface with theses settings
        ddrval = IDirectDraw7_CreateSurface (DirectDrawState.directdraw.dd, &ddsd, &DirectDrawState.overlay.surface, NULL);
-       if( ddrval == DD_OK )
+       if(SUCCEEDED(ddrval))
        {
            DirectDrawState.isoverlay = 1;
        }
@@ -1092,7 +1091,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
                                            &DirectDrawState.primary.desc,
                                            &DirectDrawState.primary.surface,
                                            NULL);
-       if (ddrval != DD_OK) {
+       if (FAILED(ddrval)) {
            // Create a non-flipping pair, since the flipping pair creation failed...
            ZeroMemory (&DirectDrawState.primary.desc, sizeof(DDSURFACEDESC2));
            DirectDrawState.primary.desc.dwSize = sizeof(DDSURFACEDESC2);
@@ -1118,7 +1117,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
                                            NULL);
     }
 
-    if( ddrval != DD_OK )
+    if(FAILED(ddrval))
     {
        goto out;
     }
@@ -1135,14 +1134,14 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
        ddSCaps.dwCaps = DDSCAPS_BACKBUFFER;
 
        ddrval = IDirectDrawSurface7_GetAttachedSurface( DirectDrawState.primary.surface, &ddSCaps, &DirectDrawState.secondary.surface );
-       if( ddrval == DD_OK )
+       if(SUCCEEDED(ddrval))
        {
            /* get third buffer */
            ZeroMemory(&ddSCaps, sizeof(ddSCaps));
            ddSCaps.dwCaps = DDSCAPS_FLIP;
 
            ddrval = IDirectDrawSurface7_GetAttachedSurface( DirectDrawState.secondary.surface, &ddSCaps, &DirectDrawState.tertiary.surface );
-           if( ddrval == DD_OK )
+           if(SUCCEEDED(ddrval))
            {
                clearsurface (tertiary_surface);
     #if 0
@@ -1150,7 +1149,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
                ddrval = IDirectDrawSurface7_QueryInterface( DirectDrawState.tertiary.surface,
                                                            &IID_IDirectDrawSurface7,
                                                            (LPVOID *)&DirectDrawState.tertiary.surface );
-               if( ddrval != DD_OK )
+               if(FAILED(ddrval))
                {
                    goto out;
                }
@@ -1165,7 +1164,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
            ddrval = IDirectDrawSurface_QueryInterface( DirectDrawState.secondary.surface,
                                                        &IID_IDirectDrawSurface7,
                                                        (LPVOID *)&DirectDrawState.secondary.surface );
-           if( ddrval != DD_OK )
+           if(FAILED(ddrval))
            {
                goto out;
            }
@@ -1183,7 +1182,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
                                                &IID_IDirectDrawSurface7,
                                                (LPVOID *)&DirectDrawState.primary.surface );
 
-    if( ddrval != DD_OK )
+    if(FAILED(ddrval))
     {
        goto out;
     }
@@ -1204,7 +1203,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
                                             &DirectDrawState.secondary.desc,
                                             &DirectDrawState.secondary.surface,
                                             NULL );
-        if( ddrval != DD_OK )
+        if(FAILED(ddrval))
         {
            write_log( "DDRAW:Secondary surface creation attempt #1 failed with %s\n", DXError(ddrval));
             DirectDrawState.secondary.desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
@@ -1212,7 +1211,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
                                                 &DirectDrawState.secondary.desc,
                                                 &DirectDrawState.secondary.surface,
                                                 NULL );
-           if( ddrval == DD_OK )
+           if(SUCCEEDED(ddrval))
                write_log( "DDRAW: Secondary surface created in plain system-memory\n" );
            else
            {
@@ -1228,7 +1227,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height )
         ddrval = IDirectDrawSurface7_QueryInterface( DirectDrawState.secondary.surface,
                                                     &IID_IDirectDrawSurface7,
                                                     (LPVOID *)&DirectDrawState.secondary.surface );
-        if( ddrval != DD_OK )
+        if(FAILED(ddrval))
         {
            goto out;
         }
@@ -1325,7 +1324,7 @@ HRESULT DirectDraw_SetClipper( HWND hWnd )
 
     ddrval = IDirectDrawSurface7_SetClipper( DirectDrawState.primary.surface,
                                              hWnd ? DirectDrawState.lpDDC : NULL );
-    if( hWnd && ( ddrval == DD_OK ) )
+    if( hWnd && SUCCEEDED(ddrval))
     {
         ddrval = IDirectDrawClipper_SetHWnd( DirectDrawState.lpDDC, 0, hWnd );
     }
@@ -1402,7 +1401,7 @@ HRESULT DirectDraw_SetPalette( int remove )
        remove ? NULL : DirectDrawState.lpDDP);
     if (ddrval == DDERR_SURFACELOST) {
        ddrval = restoresurface (DirectDrawState.primary.surface);
-       if (ddrval == DD_OK) {
+       if (SUCCEEDED(ddrval)) {
            ddrval = IDirectDrawSurface7_SetPalette (DirectDrawState.primary.surface,
                remove ? NULL : DirectDrawState.lpDDP);
        }
@@ -1431,7 +1430,7 @@ HRESULT DirectDraw_CreatePalette( LPPALETTEENTRY pal )
     ddrval = IDirectDraw_CreatePalette( DirectDrawState.directdraw.dd,
                                         DDPCAPS_8BIT | DDPCAPS_ALLOW256,
                                         pal, &DirectDrawState.lpDDP, NULL);
-    if( ddrval == DD_OK )
+    if(SUCCEEDED(ddrval))
     {
         ddrval = DirectDraw_SetPalette(0);
     }
@@ -1613,7 +1612,7 @@ DWORD DirectDraw_CurrentHeight( void )
 int DirectDraw_GetVerticalBlankStatus (void)
 {
     BOOL status;
-    if (IDirectDraw7_GetVerticalBlankStatus (DirectDrawState.directdraw.dd, &status) != DD_OK)
+    if (FAILED(IDirectDraw7_GetVerticalBlankStatus (DirectDrawState.directdraw.dd, &status)))
        return -1;
     return status;
 }
@@ -1645,12 +1644,12 @@ static int DirectDraw_BltFastStub4( LPDIRECTDRAWSURFACE7 dstsurf, DWORD x, DWORD
     int result = 0;
     HRESULT ddrval;
 
-    while( ( ddrval = IDirectDrawSurface7_BltFast( dstsurf, x, y, srcsurf, srcrect, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT ) ) != DD_OK )
+    while(FAILED(ddrval = IDirectDrawSurface7_BltFast( dstsurf, x, y, srcsurf, srcrect, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT )))
     {
         if (ddrval == DDERR_SURFACELOST) 
         {
            ddrval = restoresurface ( dstsurf );
-            if (ddrval != DD_OK)
+            if (FAILED(ddrval))
             {
                 break;
             }
@@ -1661,7 +1660,7 @@ static int DirectDraw_BltFastStub4( LPDIRECTDRAWSURFACE7 dstsurf, DWORD x, DWORD
             break;
         }
     }
-    if( ddrval == DD_OK )
+    if(SUCCEEDED(ddrval))
     {
         result = 1;
     }
@@ -1736,7 +1735,7 @@ static int DirectDraw_BltStub( LPDIRECTDRAWSURFACE7 dstsurf, LPRECT dstrect, LPD
     int result = 0, errcnt = 0;
     HRESULT ddrval;
 
-    while( ( ddrval = IDirectDrawSurface7_Blt( dstsurf, dstrect, srcsurf, srcrect, flags, ddbltfx ) ) != DD_OK )
+    while(FAILED(ddrval = IDirectDrawSurface7_Blt( dstsurf, dstrect, srcsurf, srcrect, flags, ddbltfx)))
     {
         if (ddrval == DDERR_SURFACELOST) 
         {
@@ -1744,7 +1743,7 @@ static int DirectDraw_BltStub( LPDIRECTDRAWSURFACE7 dstsurf, LPRECT dstrect, LPD
                return 1;
            errcnt++;
            ddrval = restoresurface ( dstsurf );
-            if (ddrval != DD_OK)
+            if (FAILED(ddrval))
             {
                 break;
             }
@@ -1763,7 +1762,7 @@ static int DirectDraw_BltStub( LPDIRECTDRAWSURFACE7 dstsurf, LPRECT dstrect, LPD
        }
 #endif
     }
-    if( ddrval == DD_OK )
+    if(SUCCEEDED(ddrval))
     {
         result = 1;
     }
@@ -1834,7 +1833,7 @@ int DirectDraw_Flip(int wait)
     } else {
        return 1;
     }
-    if(ddrval == DD_OK) {
+    if(SUCCEEDED(ddrval)) {
         result = 1;
     } else {
        if (ddrval == DDERR_SURFACELOST) {
@@ -2076,7 +2075,7 @@ HRESULT DirectDraw_UpdateOverlay( RECT sr, RECT dr )
        result = IDirectDrawSurface7_UpdateOverlay( DirectDrawState.overlay.surface, &sr, DirectDrawState.primary.surface, &dr, overlayflags, &overlayfx);
        
     }
-    if (result != DD_OK) {
+    if (FAILED(result)) {
        if (result == DDERR_SURFACELOST)
            display_change_requested++;
        write_log ("UpdateOverlay failed %s\n", DXError (result));
@@ -2107,7 +2106,7 @@ int DirectDraw_GetPrimaryPixelFormat (LPDDPIXELFORMAT ddpf)
        ddrval = IDirectDrawSurface7_GetPixelFormat (DirectDrawState.overlay.surface, ddpf);
     else
        ddrval = IDirectDrawSurface7_GetPixelFormat (DirectDrawState.primary.surface, ddpf);
-    if (ddrval != DD_OK) {
+    if (FAILED(ddrval)) {
        write_log ("GetPixelFormat failed\n%s\n", DXError (ddrval));
        return 0;
     }
index 54d71536a44222bcf645dd7c4e94dea531307669..7e1eb6e72a0d29f89331414e59e7eb074959fd43 100755 (executable)
@@ -41,8 +41,6 @@
 #include "akiko.h"
 #include "arcadia.h"
 
-extern void screenshot(int);
-
 //#define DBG_KEYBD 1
 //#define DEBUG_KBD
 
@@ -389,7 +387,7 @@ void my_kbd_handler (int keyboard, int scancode, int newstate)
            }
            break;
            case DIK_SYSRQ:
-           screenshot (endpressed() ? 1 : 0);
+           screenshot (endpressed() ? 1 : 0, 1);
            break;
            case DIK_PAUSE:
            if (endpressed ())
index 5e75be282f7acc39ad80abde66e8b583ddb9a46f..e68baf1798c4815fa990a4efefea11c4ad29ca33 100755 (executable)
@@ -16,6 +16,7 @@ static struct shmid_ds shmids[MAX_SHMID];
 static uae_u32 gfxoffs;
 
 uae_u32 natmem_offset = 0;
+uae_u32 max_allowed_mman = 512;
 
 void init_shm(void)
 {
@@ -33,10 +34,10 @@ void init_shm(void)
 
     while ((uae_u64)memstats.dwAvailPageFile + (uae_u64)memstats.dwAvailPhys >= ((uae_u64)max_z3fastmem << 1)
        && max_z3fastmem != ((uae_u64)2048 * 1024 * 1024))
-       max_z3fastmem <<= 1;
+           max_z3fastmem <<= 1;
     size = max_z3fastmem;
-    if (size > 512 * 1024 * 1024)
-       size = 512 * 1024 * 1024;
+    if (size > max_allowed_mman * 1024 * 1024)
+       size = max_allowed_mman * 1024 * 1024;
 
     canbang = 0;
     gfxoffs = 0;
index 267bb6914a516a26645c15fc044b63b07c2ea0f5..05416bdb28fcc4bb648c20ba6db6ace58d71484c 100755 (executable)
@@ -108,6 +108,41 @@ struct ScreenResolution hicolour = { 640, 480 };
 struct ScreenResolution truecolour = { 640, 480 };
 struct ScreenResolution alphacolour = { 640, 480 };
 
+#include "win32gui.h"
+#include "resource.h"
+#define UAE_RTG_LIBRARY_VERSION 40
+#define UAE_RTG_LIBRARY_REVISION 3993
+static void checkrtglibrary(void)
+{
+    uae_u32 v;
+    static int checked = FALSE;
+
+    if (checked)
+       return;
+    v = get_long (4); // execbase
+    v += 378; // liblist
+    while ((v = get_long(v))) {
+       uae_u32 v2 = get_long(v + 10); // name
+       uae_u8 *p;
+       addrbank *b = &get_mem_bank(v2);
+       if (!b || !b->check (v2, 12))
+           continue;
+       p = b->xlateaddr(v2);
+       if (!memcmp(p, "rtg.library\0", 12)) {
+           uae_u16 ver = get_word(v + 20);
+           uae_u16 rev = get_word(v + 22);
+           if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) {
+               char msg[2000];
+               WIN32GUI_LoadUIString(IDS_OLDRTGLIBRARY, msg, sizeof(msg));
+               gui_message(msg, ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION);
+           } else {
+               write_log("P96: rtg.library %d.%d detected\n", ver, rev);
+           }
+           checked = TRUE;
+       }
+    }
+}
+
 static uae_u32 p2ctab[256][2];
 static int set_gc_called = 0;
 //fastscreen
@@ -1751,6 +1786,7 @@ void picasso_enablescreen (int on)
     wgfx_linestart = 0xFFFFFFFF;
     picasso_refresh (1);
     write_log ("SetSwitch() from threadid %d - showing %s screen\n", GetCurrentThreadId(), on ? "picasso96": "amiga");
+    checkrtglibrary();
 }
 
 /*
index 0523451121e7dec105180d20753f8cd7b54a7092..52efc784bc88afa1cbed49b42fe30a1a160b1150 100755 (executable)
 #define IDS_PRI_BELOWNORMAL             186
 #define IDS_PRI_LOW                     187
 #define IDI_FOLDER                      188
+#define IDS_OLDRTGLIBRARY               188
 #define IDI_DISPLAY                     190
 #define IDI_ROOT                        192
 #define IDI_ICON2                       194
 #define IDS_STATEFILE_RAMDUMP           247
 #define IDS_STATEFILE_WAVE              248
 #define IDD_FRONTEND                    249
+#define IDS_SOUND_SWAP_PAULA            249
+#define IDS_SOUND_SWAP_AHI              250
+#define IDS_SOUND_SWAP_BOTH             251
 #define IDS_NUMSG_NEEDEXT2              300
 #define IDS_NUMSG_NOROMKEY              301
 #define IDS_NUMSG_KSROMCRCERROR         302
 #define IDC_PATHS_ROMS                  1661
 #define IDC_SOUNDSTEREOMIX              1661
 #define IDC_PATHS_CONFIGS               1662
+#define IDC_SOUNDSWAP                   1662
 #define IDC_PATHS_SCREENSHOTS           1663
 #define IDC_PATHS_SAVESTATES            1664
+#define IDC_SOUNDSTEREOSWAPTXT          1664
+#define IDC_SOUNDSWAPTXT                1664
 #define IDC_PATHS_SAVEIMAGES            1665
 #define IDC_PATHS_ROML                  1666
 #define IDC_PATHS_CONFIGL               1667
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        249
 #define _APS_NEXT_COMMAND_VALUE         40021
-#define _APS_NEXT_CONTROL_VALUE         1703
+#define _APS_NEXT_CONTROL_VALUE         1704
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif
index 32481f25e62a43f6adb09bc85fa02b011c98d5be..1d2a7249e7c3bf0da72ab812bbd6daa683a0b244 100755 (executable)
@@ -136,8 +136,8 @@ BEGIN
     RTEXT           "Z3-Fast:",IDC_Z3TEXT,139,85,30,10,SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",
                     TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,80,60,20
-    RTEXT           "RTG (graphics card):",IDC_GFXCARDTEXT,96,110,76,10,
-                    SS_CENTERIMAGE
+    RTEXT           "RTG: [] Graphics card memory. Required for Picasso96 emulation.",
+                    IDC_GFXCARDTEXT,96,110,76,10,SS_NOTIFY | SS_CENTERIMAGE
     CONTROL         "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | 
                     TBS_TOP | WS_TABSTOP,179,105,60,20
     EDITTEXT        IDC_CHIPRAM,105,59,30,12,ES_CENTER | ES_READONLY
@@ -329,28 +329,28 @@ BEGIN
                     TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,138,75,106,19
     EDITTEXT        IDC_SOUNDBUFFERMEM,248,78,40,12,ES_CENTER | ES_READONLY
     GROUPBOX        "Settings",IDC_SOUNDINTERPOLATION2,6,101,290,60
-    RTEXT           "Frequency:",IDC_SOUNDFREQTXT,34,110,37,8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFREQ,36,119,67,75,CBS_DROPDOWN | WS_VSCROLL | 
+    LTEXT           "Frequency",IDC_SOUNDFREQTXT,13,111,37,8,SS_CENTERIMAGE
+    COMBOBOX        IDC_SOUNDFREQ,15,120,59,75,CBS_DROPDOWN | WS_VSCROLL | 
                     WS_TABSTOP
-    RTEXT           "Audio filter:",IDC_SOUNDFILTERTXT,36,135,36,8,
+    LTEXT           "Audio filter",IDC_SOUNDFILTERTXT,227,135,34,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDFILTER,36,144,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDFILTER,227,144,62,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Stereo mode:",IDC_SOUNDSTEREOTXT,116,110,43,8,
+    LTEXT           "Stereo mode",IDC_SOUNDSTEREOTXT,86,111,41,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREO,116,119,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDSTEREO,85,120,62,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,115,135,41,8,
+    LTEXT           "Interpolation",IDC_SOUNDINTERPOLATIONTXT,227,111,41,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDINTERPOLATION,116,144,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDINTERPOLATION,227,119,62,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,196,110,58,8,
+    LTEXT           "Stereo separation",IDC_SOUNDSTEREOSEPTXT,155,111,56,8,
                     SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREOSEP,197,119,67,75,CBS_DROPDOWNLIST | 
+    COMBOBOX        IDC_SOUNDSTEREOSEP,156,120,62,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    RTEXT           "Stereo mixing delay:",IDC_SOUNDSTEREOMIXTXT,196,135,63,
-                    8,SS_CENTERIMAGE
-    COMBOBOX        IDC_SOUNDSTEREOMIX,197,144,67,75,CBS_DROPDOWNLIST | 
+    LTEXT           "Stereo mixing delay",IDC_SOUNDSTEREOMIXTXT,155,135,63,8,
+                    SS_CENTERIMAGE
+    COMBOBOX        IDC_SOUNDSTEREOMIX,156,144,62,75,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
     GROUPBOX        "Disk Drive Sound Emulation",IDC_STATIC,6,164,290,46
     CONTROL         "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",
@@ -366,6 +366,10 @@ BEGIN
                     TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,221,107,19
     EDITTEXT        IDC_SOUNDADJUSTNUM,124,224,40,12,ES_CENTER | ES_READONLY
     PUSHBUTTON      "Calibrate",IDC_SOUNDCALIBRATE,183,223,40,14
+    COMBOBOX        IDC_SOUNDSWAP,85,144,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    LTEXT           "Swap channels",IDC_SOUNDSWAPTXT,86,135,50,8,
+                    SS_CENTERIMAGE
 END
 
 IDD_LOADSAVE DIALOGEX 0, 0, 302, 241
@@ -413,8 +417,9 @@ BEGIN
                     BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,78,12
     CONTROL         "PostScript printer emulation",IDC_PSPRINTER,"Button",
                     BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,93,33,100,12
-    RTEXT           "Autoflush timeout []Time in seconds after pending print job is automatically flushed.",
-                    IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_CENTERIMAGE
+    RTEXT           "Autoflush timeout [] Time in seconds after pending print job is automatically flushed.",
+                    IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | 
+                    SS_CENTERIMAGE
     EDITTEXT        IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER
     RTEXT           "Ghostscript extra parameters:",IDC_STATIC,12,49,91,15,
                     SS_CENTERIMAGE
@@ -426,8 +431,9 @@ BEGIN
                     BS_VCENTER | WS_TABSTOP,132,83,48,13
     CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | 
                     BS_VCENTER | WS_TABSTOP,185,83,53,12
-    CONTROL         "Direct",IDC_SERIAL_DIRECT,"Button",BS_AUTOCHECKBOX | 
-                    BS_VCENTER | WS_TABSTOP,243,83,46,12
+    CONTROL         "Direct []Use when emulating serial linked games on two PCs running WinUAE",
+                    IDC_SERIAL_DIRECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | 
+                    WS_TABSTOP,243,83,46,12
     GROUPBOX        "MIDI",IDC_MIDIFRAME,4,104,292,33
     RTEXT           "Out:",IDC_MIDI,10,115,34,15,SS_CENTERIMAGE
     COMBOBOX        IDC_MIDIOUTLIST,50,115,95,130,CBS_DROPDOWNLIST | 
@@ -435,14 +441,16 @@ BEGIN
     RTEXT           "In:",IDC_MIDI2,150,115,29,15,SS_CENTERIMAGE
     COMBOBOX        IDC_MIDIINLIST,185,115,95,134,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Amiga Mouse/Joystick Ports",IDC_PORT0,4,139,292,77
+    GROUPBOX        "Mouse/Joystick Ports",IDC_PORT0,4,139,292,75
     COMBOBOX        IDC_PORT0_JOYS,45,155,241,130,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
     COMBOBOX        IDC_PORT1_JOYS,45,176,241,130,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
-    PUSHBUTTON      "Swap Ports",IDC_SWAP,114,195,75,14
+    PUSHBUTTON      "Swap Ports",IDC_SWAP,211,195,75,14
     RTEXT           "Port 0:",IDC_STATIC,11,154,25,15,SS_CENTERIMAGE
     RTEXT           "Port 1:",IDC_STATIC,11,175,25,15,SS_CENTERIMAGE
+    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,16,195,106,
+                    15,SS_NOTIFY | SS_CENTERIMAGE
 END
 
 IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242
@@ -1287,6 +1295,7 @@ BEGIN
     IDS_PRI_NORMAL          "Normal"
     IDS_PRI_BELOWNORMAL     "Below Normal"
     IDS_PRI_LOW             "Low"
+    IDS_OLDRTGLIBRARY       "Your LIBS:Picasso96/rtg.library (%d.%d) requires updating.\nReplace it with version from ""Amiga Programs""-directory in WinUAE archive.\nNew library fixes graphics problems and increases performance."
 END
 
 STRINGTABLE 
@@ -1379,6 +1388,9 @@ BEGIN
     IDS_STATEFILE_UNCOMPRESSED "Uncompressed"
     IDS_STATEFILE_RAMDUMP   "RAM dump"
     IDS_STATEFILE_WAVE      "Wave audio dump"
+    IDS_SOUND_SWAP_PAULA    "Paula only"
+    IDS_SOUND_SWAP_AHI      "AHI only"
+    IDS_SOUND_SWAP_BOTH     "Both"
 END
 
 STRINGTABLE 
@@ -1438,7 +1450,7 @@ END
 STRINGTABLE 
 BEGIN
     IDS_QS_MODEL_UAE        "High-end expanded configuration"
-    IDS_QS_MODEL_ARCADIA    "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and  Mastertronic. It is based on an Amiga 500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel."
+    IDS_QS_MODEL_ARCADIA    "Your LIBS:Picasso96/rtg.library (%d.%d) needs updating\nReplace it with newer version from ""Amiga Programs""-directory in WinUAE archive."
 END
 
 #endif    // English (U.S.) resources
index db9129f99ab732db0bb189d269ef4420b5a3da4b..79065b4998faf16ab025f7cc448cf9cb77addeb6 100755 (executable)
@@ -58,75 +58,114 @@ static int toclipboard (BITMAPINFO *bi, void *bmp)
     return v;
 }
 
+static HDC surface_dc, offscreen_dc;    
+static BITMAPINFO bi; // bitmap info
+static LPVOID lpvBits = NULL; // pointer to bitmap bits array
+static HBITMAP offscreen_bitmap;
+static int screenshot_prepared;
+
+void screenshot_free(void)
+{
+    if (surface_dc)
+        releasehdc (surface_dc);
+    surface_dc = NULL;
+    if(offscreen_dc)
+       DeleteDC(offscreen_dc);
+    offscreen_dc = NULL;
+    if(offscreen_bitmap)
+       DeleteObject(offscreen_bitmap);
+    offscreen_bitmap = NULL;
+    if(lpvBits)
+       free(lpvBits);
+    lpvBits = NULL;
+    screenshot_prepared = FALSE;
+}
+
+
+int screenshot_prepare(void)
+{
+    unsigned int width, height;
+    HGDIOBJ hgdiobj;
+
+    screenshot_free();
+
+    width = WIN32GFX_GetWidth();
+    height = WIN32GFX_GetHeight();
+
+    surface_dc = gethdc ();
+    if (surface_dc == NULL)
+       goto oops;
+
+    // need a HBITMAP to convert it to a DIB
+    if((offscreen_bitmap = CreateCompatibleBitmap(surface_dc, width, height)) == NULL)
+       goto oops; // error
+       
+    // The bitmap is empty, so let's copy the contents of the surface to it.
+    // For that we need to select it into a device context.
+    if((offscreen_dc = CreateCompatibleDC(surface_dc)) == NULL)
+       goto oops; // error
+
+    // select offscreen_bitmap into offscreen_dc
+    hgdiobj = SelectObject(offscreen_dc, offscreen_bitmap);
+
+    // now we can copy the contents of the surface to the offscreen bitmap
+    BitBlt(offscreen_dc, 0, 0, width, height, surface_dc, 0, 0, SRCCOPY);
+
+    // de-select offscreen_bitmap
+    SelectObject(offscreen_dc, hgdiobj);
+       
+    ZeroMemory(&bi, sizeof(bi));
+    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+    bi.bmiHeader.biWidth = width;
+    bi.bmiHeader.biHeight = height;
+    bi.bmiHeader.biPlanes = 1;
+    bi.bmiHeader.biBitCount = 24;
+    bi.bmiHeader.biCompression = BI_RGB;
+    bi.bmiHeader.biSizeImage = (((bi.bmiHeader.biWidth * bi.bmiHeader.biBitCount + 31) & ~31) / 8) * bi.bmiHeader.biHeight;
+    bi.bmiHeader.biXPelsPerMeter = 0;
+    bi.bmiHeader.biYPelsPerMeter = 0;
+    bi.bmiHeader.biClrUsed = 0;
+    bi.bmiHeader.biClrImportant = 0;
+
+    // Reserve memory for bitmap bits
+    if(!(lpvBits = malloc(bi.bmiHeader.biSizeImage)))
+       goto oops; // out of memory
+
+    // Have GetDIBits convert offscreen_bitmap to a DIB (device-independent bitmap):
+    if(!GetDIBits(offscreen_dc, offscreen_bitmap, 0, bi.bmiHeader.biHeight, lpvBits, &bi, DIB_RGB_COLORS))
+       goto oops; // GetDIBits FAILED
+
+    releasehdc (surface_dc);
+    surface_dc = NULL;
+    screenshot_prepared = TRUE;
+    return 1;
+
+oops:
+    screenshot_free();
+    return 0;
+}
+
+
 /*
 Captures the Amiga display (DirectDraw, D3D or OpenGL) surface and saves it to file as a 24bit bitmap.
 */
-void screenshot(int mode)
+void screenshot(int mode, int doprepare)
 {
        static int recursive;
-       
        FILE *fp = NULL;
        
-       HDC surface_dc = NULL; // GDI-compatible device context for the surface
        HBITMAP offscreen_bitmap = NULL; // bitmap that is converted to a DIB
        HDC offscreen_dc = NULL; // offscreen DC that we can select offscreen bitmap into
-       
-       BITMAPINFO bi; // bitmap info
-       LPVOID lpvBits = NULL; // pointer to bitmap bits array
-       
-       unsigned int width = WIN32GFX_GetWidth();
-       unsigned int height = WIN32GFX_GetHeight();
-       
+
        if(recursive)
                return;
        
        recursive++;
 
-       surface_dc = gethdc ();
-
-       // need a HBITMAP to convert it to a DIB
-       if((offscreen_bitmap = CreateCompatibleBitmap(surface_dc, width, height)) == NULL)
-               goto oops; // error
-       
-       // The bitmap is empty, so let's copy the contents of the surface to it.
-       // For that we need to select it into a device context.
-       if((offscreen_dc = CreateCompatibleDC(surface_dc)) == NULL)
-               goto oops; // error
-       
-       {
-               // select offscreen_bitmap into offscreen_dc
-               HGDIOBJ hgdiobj = SelectObject(offscreen_dc, offscreen_bitmap);
-               
-               // now we can copy the contents of the surface to the offscreen bitmap
-               BitBlt(offscreen_dc, 0, 0, width, height, surface_dc, 0, 0, SRCCOPY);
-               
-               // de-select offscreen_bitmap
-               SelectObject(offscreen_dc, hgdiobj);
+       if (!screenshot_prepared || doprepare) {
+           if (!screenshot_prepare())
+               goto oops;
        }
-       
-       ZeroMemory(&bi, sizeof(bi));
-       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
-       bi.bmiHeader.biWidth = width;
-       bi.bmiHeader.biHeight = height;
-       bi.bmiHeader.biPlanes = 1;
-       bi.bmiHeader.biBitCount = 24;
-       bi.bmiHeader.biCompression = BI_RGB;
-       bi.bmiHeader.biSizeImage = (((bi.bmiHeader.biWidth * bi.bmiHeader.biBitCount + 31) & ~31) / 8) * bi.bmiHeader.biHeight;
-       bi.bmiHeader.biXPelsPerMeter = 0;
-       bi.bmiHeader.biYPelsPerMeter = 0;
-       bi.bmiHeader.biClrUsed = 0;
-       bi.bmiHeader.biClrImportant = 0;
-
-       // Reserve memory for bitmap bits
-       if(!(lpvBits = malloc(bi.bmiHeader.biSizeImage)))
-               goto oops; // out of memory
-       
-       // Have GetDIBits convert offscreen_bitmap to a DIB (device-independent bitmap):
-       if(!GetDIBits(offscreen_dc, offscreen_bitmap, 0, bi.bmiHeader.biHeight, lpvBits, &bi, DIB_RGB_COLORS))
-               goto oops; // GetDIBits FAILED
-       
-       releasehdc (surface_dc);
-       surface_dc = 0;
 
        if (mode == 0) {
            toclipboard (&bi, lpvBits);
@@ -187,23 +226,14 @@ void screenshot(int mode)
        }
        
 oops:
-       if (surface_dc)
-           releasehdc (surface_dc);
-
-       if(offscreen_dc)
-               DeleteDC(offscreen_dc);
-       
-       if(offscreen_bitmap)
-               DeleteObject(offscreen_bitmap);
-       
-       if(lpvBits)
-               free(lpvBits);
-       
        if(fp)
                fclose(fp);
        
+       if (doprepare)
+           screenshot_free();
+
        recursive--;
-       
+
        return;
 }
 
index fdb770e630614ea4b7eae66d0d71c98cf5a55910..242b7a76ef239f90cec91865c1e64a0cb19cd6b6 100755 (executable)
@@ -106,7 +106,7 @@ static void clearbuffer (void)
        IDirectSoundBuffer_Restore (lpDSBsecondary);
        hr = IDirectSoundBuffer_Lock (lpDSBsecondary, 0, dsoundbuf, &buffer, &size, NULL, NULL, 0);
     }
-    if (hr != DS_OK) {
+    if (FAILED(hr)) {
        write_log ("failed to Lock sound buffer (clear): %s\n", DXError (hr));
        return;
     }
@@ -128,7 +128,7 @@ static void resume_audio_ds (void)
     paused = 0;
     clearbuffer ();
     hr = IDirectSoundBuffer_Play (lpDSBsecondary, 0, 0, DSBPLAY_LOOPING);
-    if (hr != DS_OK)
+    if (FAILED(hr))
        write_log ("Play failed: %s\n", DXError (hr));
     writepos = snd_configsize;
 }
@@ -141,7 +141,7 @@ static int restore (DWORD hr)
     write_log ("sound buffer lost\n");
 #endif
     hr = IDirectSoundBuffer_Restore (lpDSBsecondary);
-    if (hr != DS_OK) {
+    if (FAILED(hr)) {
        //write_log ("restore failed %s\n", DXError (hr));
        return 1;
     }
@@ -168,7 +168,7 @@ static int getpos (void)
     HRESULT hr;
 
     hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safepos);
-    if (hr != DS_OK) {
+    if (FAILED(hr)) {
        write_log ("GetCurrentPosition failed: %s\n", DXError (hr));
        return -1;
     }
@@ -238,7 +238,7 @@ static void setvolume (void)
     if (currprefs.sound_volume < 100 && !mute)
         vol = (LONG)((DSBVOLUME_MIN / 2) + (-DSBVOLUME_MIN / 2) * log (1 + (2.718281828 - 1) * (1 - currprefs.sound_volume / 100.0)));
     hr = IDirectSoundBuffer_SetVolume (lpDSBsecondary, vol);
-    if (hr != DS_OK)
+    if (FAILED(hr))
         write_log ("SOUND: SetVolume(%d) failed: %s\n", vol, DXError (hr));
 }
 
@@ -265,14 +265,14 @@ static int open_audio_ds (int size)
         sndbufsize = SND_MAX_BUFFER;
 
     hr = DirectSoundCreate (&sound_device_guid[currprefs.win32_soundcard], &lpDS, NULL);
-    if (hr != DS_OK)  {
+    if (FAILED(hr))  {
         write_log ("SOUND: DirectSoundCreate() failure: %s\n", DXError (hr));
         return 0;
     }
     memset (&DSCaps, 0, sizeof (DSCaps));
     DSCaps.dwSize = sizeof (DSCaps);
     hr = IDirectSound_GetCaps (lpDS, &DSCaps);
-    if (hr!= DS_OK) {
+    if (FAILED(hr)) {
        write_log ("SOUND: Error getting DirectSound capabilities: %s\n", DXError (hr));
        goto error;
     }
@@ -300,7 +300,7 @@ static int open_audio_ds (int size)
     sound_buffer.dwSize = sizeof (sound_buffer);
     sound_buffer.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_GETCURRENTPOSITION2;
     hr = IDirectSound_CreateSoundBuffer (lpDS, &sound_buffer, &lpDSBprimary, NULL);
-    if( hr != DS_OK )  {
+    if (FAILED(hr))  {
         write_log ("SOUND: Primary CreateSoundBuffer() failure: %s\n", DXError (hr));
        goto error;
     }
@@ -308,7 +308,7 @@ static int open_audio_ds (int size)
     memset(&DSBCaps, 0, sizeof(DSBCaps));
     DSBCaps.dwSize = sizeof(DSBCaps);
     hr = IDirectSoundBuffer_GetCaps(lpDSBprimary, &DSBCaps);
-    if (hr != DS_OK) {
+    if (FAILED(hr)) {
        write_log ("SOUND: Primary GetCaps() failure: %s\n",  DXError (hr));
        goto error;
     }
@@ -326,7 +326,7 @@ static int open_audio_ds (int size)
         max_sndbufsize = SND_MAX_BUFFER2;
     dsoundbuf = max_sndbufsize * 2;
     hr = IDirectSound_SetCooperativeLevel (lpDS, hMainWnd, DSSCL_PRIORITY);
-    if (hr != DS_OK) {
+    if (FAILED(hr)) {
         write_log ("SOUND: Can't set cooperativelevel: %s\n", DXError (hr));
         goto error;
     }
@@ -344,14 +344,14 @@ static int open_audio_ds (int size)
     sound_buffer.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS | DSBCAPS_STATIC;
     sound_buffer.dwFlags |= DSBCAPS_CTRLVOLUME;
 
-    hr = IDirectSound_CreateSoundBuffer( lpDS, &sound_buffer, &lpDSBsecondary, NULL );
-    if (hr != DS_OK) {
+    hr = IDirectSound_CreateSoundBuffer(lpDS, &sound_buffer, &lpDSBsecondary, NULL);
+    if (FAILED(hr)) {
         write_log ("SOUND: Secondary CreateSoundBuffer() failure: %s\n", DXError (hr));
         goto error;
     }
 
     hr = IDirectSoundBuffer_SetFormat (lpDSBprimary, &wavfmt);
-    if( hr != DS_OK )  {
+    if (FAILED(hr))  {
         write_log ("SOUND: Primary SetFormat() failure: %s\n", DXError (hr));
         goto error;
     }
@@ -496,7 +496,7 @@ static void finish_sound_buffer_ds (void)
     double vdiff, m, skipmode;
 
     hr = IDirectSoundBuffer_GetStatus (lpDSBsecondary, &status);
-    if (hr != DS_OK)
+    if (FAILED(hr))
        return;
     if (status & DSBSTATUS_BUFFERLOST) {
        restore (DSERR_BUFFERLOST);
@@ -509,7 +509,7 @@ static void finish_sound_buffer_ds (void)
     }
     for (;;) {
        hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safepos);
-       if (hr != DS_OK) {
+       if (FAILED(hr)) {
            restore (hr);
            //write_log ("GetCurrentPosition failed: %s\n", DirectSound_ErrorText (hr));
            return;
@@ -547,7 +547,7 @@ static void finish_sound_buffer_ds (void)
     hr = IDirectSoundBuffer_Lock (lpDSBsecondary, writepos, sndbufsize, &b1, &s1, &b2, &s2, 0);
     if (restore (hr))
        return;
-    if (hr != DS_OK) {
+    if (FAILED(hr)) {
         write_log ("lock failed: %s (%d %d)\n", DXError (hr), writepos, sndbufsize);
         return;
     }
@@ -578,6 +578,16 @@ static void finish_sound_buffer_ds (void)
     sound_setadjust (skipmode);
 }
 
+static void channelswap(uae_s16 *sndbuffer, int len)
+{
+    int i;
+    for (i = 0; i < len; i += 2) {
+       uae_s16 t = sndbuffer[i];
+       sndbuffer[i] = sndbuffer[i + 1];
+       sndbuffer[i + 1] = t;
+    }
+}
+
 static void filtercheck (uae_s16 *sndbuffer, int len)
 {
     int ch = currprefs.sound_stereo == 2 ? 4 : (currprefs.sound_stereo ? 2 : 1);
@@ -585,8 +595,6 @@ static void filtercheck (uae_s16 *sndbuffer, int len)
     static double cold[4];
     double old0, old1, v;
     
-    if (!currprefs.sound_filter)
-       return;
     if (gui_data.powerled || currprefs.sound_filter == 2) {
        if (ch == 1) {
            old0 = cold[0];
@@ -620,7 +628,10 @@ void finish_sound_buffer (void)
 {
     if (turbo_emulation)
        return;
-    filtercheck ((uae_s16*)sndbuffer, sndbufsize / 2);
+    if (currprefs.sound_filter)
+        filtercheck((uae_s16*)sndbuffer, sndbufsize / 2);
+    if (currprefs.sound_stereo == 1 && currprefs.sound_stereo_swap_paula)
+        channelswap((uae_s16*)sndbuffer, sndbufsize / 2);
 #ifdef DRIVESOUND
     driveclick_mix ((uae_s16*)sndbuffer, sndbufsize / 2);
 #endif
index c0b0e3aaee7bbf9f52e9971d9e3f45d1f2da86ad..dff75e5f44d33daa02b741d6872873f64bbf6e9b 100755 (executable)
@@ -1,7 +1,7 @@
-cd c:\projects\winuae_bak
+cd e:\projects\winuae_bak
 rm -rf bak
 mkdir bak
-copy /s c:\projects\winuae\src\*.* c:\projects\winuae_bak\bak\
+copy /s e:\projects\winuae\src\*.* e:\projects\winuae_bak\bak\
 cd bak
 del *.obj *.ilk *.exe *.pdb *.pch *.idb /s
 
@@ -84,6 +84,6 @@ zip -9 -r winuaesrc *
 
 copy winuaesrc.zip d:\amiga\winuaepackets\winuaesrc%1.zip
 move winuaesrc.zip d:\amiga
-cd c:\projects\winuae\src\od-win32
+cd e:\projects\winuae\src\od-win32
 zip -9 winuaedebug%1 winuae_msvc\release\winuae.pdb
 move winuaedebug%1.zip d:\amiga\winuaepackets\
index 32111ca5f428b0e7247cc7ae294ff5cb323988c0..8dcd7fa79d3462e5fc163840247230144eb4b9ec 100755 (executable)
@@ -29,6 +29,7 @@
 #include <math.h>
 #include <mmsystem.h>
 #include <shobjidl.h>
+#include <shlobj.h>
 
 #include "sysdeps.h"
 #include "options.h"
@@ -76,7 +77,7 @@ static int no_rdtsc;
 
 HINSTANCE hInst = NULL;
 HMODULE hUIDLL = NULL;
-HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD ) = NULL;
+HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD) = NULL;
 HWND hAmigaWnd, hMainWnd, hHiddenWnd;
 RECT amigawin_rect;
 static UINT TaskbarRestart;
@@ -107,7 +108,8 @@ static int mm_timerres;
 static int timermode, timeon;
 static HANDLE timehandle;
 
-char *start_path;
+char start_path_data[MAX_DPATH];
+char start_path_exe[MAX_DPATH];
 char help_file[MAX_DPATH];
 
 extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput;
@@ -231,7 +233,7 @@ static int figure_processor_speed (void)
        }
        if (mmx)
            cpu_mmx = 1;
-    } __except( GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ) {
+    } __except(GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION) {
     }
 
     if (QueryPerformanceFrequency(&freq)) {
@@ -1478,9 +1480,9 @@ static HMODULE LoadGUI( void )
        int fail = 1;
 
         if (language == 0x400)
-           sprintf (dllbuf, "%sguidll.dll", start_path);
+           sprintf (dllbuf, "%sguidll.dll", start_path_exe);
        else
-           sprintf (dllbuf, "%sWinUAE_%s.dll", start_path, dllname);
+           sprintf (dllbuf, "%sWinUAE_%s.dll", start_path_exe, dllname);
        result = WIN32_LoadLibrary (dllbuf);
        if( result) 
        {
@@ -1596,20 +1598,19 @@ void logging_init( void )
     }
 #ifndef SINGLEFILE
     if (currprefs.win32_logfile) {
-       sprintf (debugfilename, "%swinuaelog.txt", start_path);
+       sprintf (debugfilename, "%swinuaelog.txt", start_path_data);
        if (!debugfile)
            debugfile = fopen (debugfilename, "wt");
     } else if (!first) {
-       sprintf (debugfilename, "%swinuaebootlog.txt", start_path);
+       sprintf (debugfilename, "%swinuaebootlog.txt", start_path_data);
        if (!debugfile)
            debugfile = fopen (debugfilename, "wt");
     }
 #endif
     first++;
-    write_log ( "%s", VersionStr );
-    write_log (" (%s %d.%d %s%s)", os_winnt ? "NT" : "W9X/ME",
+    write_log ("%s (%s %d.%d %s%s%s)", VersionStr, os_winnt ? "NT" : "W9X/ME",
        osVersion.dwMajorVersion, osVersion.dwMinorVersion, osVersion.szCSDVersion,
-       os_winnt_admin ? " Admin" : "");
+       strlen(osVersion.szCSDVersion) > 0 ? " " : "", os_winnt_admin ? "Admin" : "");
     write_log (" %s %X.%X %d",
        SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL ? "32-bit x86" :
        SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ? "IA64" :
@@ -1621,10 +1622,11 @@ void logging_init( void )
               "\n(c) 1996-2001 Brian King      - Win32 port, Picasso96 RTG, and GUI."
               "\n(c) 1996-1999 Mathias Ortmann - Win32 port and bsdsocket support."
               "\n(c) 2000-2001 Bernd Meyer     - JIT engine."
-              "\n(c) 2000-2001 Bernd Roesch    - MIDI input, many fixes."
+              "\n(c) 2000-2005 Bernd Roesch    - MIDI input, many fixes."
               "\nPress F12 to show the Settings Dialog (GUI), Alt-F4 to quit."
               "\nEnd+F1 changes floppy 0, End+F2 changes floppy 1, etc."
               "\n");
+    write_log ("EXE: '%s'\nDATA: '%s'\n", start_path_exe, start_path_data);
 }
 
 void logging_cleanup( void )
@@ -1792,7 +1794,7 @@ void fetch_path (char *name, char *out, int size)
 {
     int size2 = size;
 
-    strcpy (out, start_path);
+    strcpy (out, start_path_data);
     if (!strcmp (name, "FloppyPath"))
        strcat (out, "..\\shared\\adf\\");
     if (!strcmp (name, "hdfPath"))
@@ -1804,7 +1806,7 @@ void fetch_path (char *name, char *out, int size)
     if (hWinUAEKey)
        RegQueryValueEx (hWinUAEKey, name, 0, NULL, out, &size);
     if (out[0] == '\\') { /* relative? */
-       strcpy (out, start_path);
+       strcpy (out, start_path_data);
         if (hWinUAEKey) {
            size2 -= strlen (out);
            RegQueryValueEx (hWinUAEKey, name, 0, NULL, out + strlen (out) - 1, &size2);
@@ -1814,7 +1816,7 @@ void fetch_path (char *name, char *out, int size)
     if (!strcmp (name, "KickstartPath")) {
        DWORD v = GetFileAttributes (out);
        if (v == INVALID_FILE_ATTRIBUTES || !(v & FILE_ATTRIBUTE_DIRECTORY))
-           strcpy (out, start_path);
+           strcpy (out, start_path_data);
     }
     strncat (out, "\\", size);
 }
@@ -1823,7 +1825,7 @@ void set_path (char *name, char *path)
     char tmp[MAX_DPATH];
 
     if (!path) {
-       strcpy (tmp, start_path);
+       strcpy (tmp, start_path_data);
        if (!strcmp (name, "KickstartPath"))
            strcat (tmp, "Roms");
        if (!strcmp (name, "ConfigurationPath"))
@@ -1841,7 +1843,7 @@ void set_path (char *name, char *path)
     if (!strcmp (name, "KickstartPath")) {
        DWORD v = GetFileAttributes (tmp);
        if (v == INVALID_FILE_ATTRIBUTES || !(v & FILE_ATTRIBUTE_DIRECTORY))
-           strcpy (tmp, start_path);
+           strcpy (tmp, start_path_data);
     }
     strcat (tmp, "\\");
 
@@ -1872,7 +1874,7 @@ void read_rom_list (int force)
     if (!hWinUAEKey)
        return;
     RegCreateKeyEx(hWinUAEKey , "DetectedROMs", 0, NULL, REG_OPTION_NON_VOLATILE,
-       KEY_ALL_ACCESS, NULL, &fkey, &disp);
+       KEY_READ | KEY_WRITE, NULL, &fkey, &disp);
     if (fkey == NULL)
        return;
     if (disp == REG_CREATED_NEW_KEY || force)
@@ -1943,59 +1945,76 @@ static void WIN32_HandleRegistryStuff( void )
     HKEY hWinUAEKeyLocal = NULL;
     HKEY fkey;
     int forceroms = 0;
+    HKEY rkey;
+    char rpath1[MAX_DPATH], rpath2[MAX_DPATH], rpath3[MAX_DPATH];
+
+    rpath1[0] = rpath2[0] = rpath3[0] = 0;
+    rkey = HKEY_CLASSES_ROOT;
+    if (os_winnt) {
+       if (os_winnt_admin)
+           rkey = HKEY_LOCAL_MACHINE;
+       else
+           rkey = HKEY_CURRENT_USER;
+       strcpy(rpath1, "Software\\Classes\\");
+       strcpy(rpath2, rpath1);
+       strcpy(rpath3, rpath1);
+    }
+    strcat(rpath1, ".uae");
+    strcat(rpath2, "WinUAE\\shell\\Edit\\command");
+    strcat(rpath3, "WinUAE\\shell\\Open\\command");
 
     /* Create/Open the hWinUAEKey which points to our config-info */
-    if( RegCreateKeyEx( HKEY_CLASSES_ROOT, ".uae", 0, "", REG_OPTION_NON_VOLATILE,
-                          KEY_ALL_ACCESS, NULL, &hWinUAEKey, &disposition ) == ERROR_SUCCESS )
+    if (RegCreateKeyEx(rkey, rpath1, 0, "", REG_OPTION_NON_VOLATILE,
+       KEY_WRITE | KEY_READ, NULL, &hWinUAEKey, &disposition) == ERROR_SUCCESS)
     {
        // Regardless of opening the existing key, or creating a new key, we will write the .uae filename-extension
        // commands in.  This way, we're always up to date.
 
         /* Set our (default) sub-key to point to the "WinUAE" key, which we then create */
-        RegSetValueEx( hWinUAEKey, "", 0, REG_SZ, (CONST BYTE *)"WinUAE", strlen( "WinUAE" ) + 1 );
+        RegSetValueEx(hWinUAEKey, "", 0, REG_SZ, (CONST BYTE *)"WinUAE", strlen( "WinUAE" ) + 1);
 
-        if( ( RegCreateKeyEx( HKEY_CLASSES_ROOT, "WinUAE\\shell\\Edit\\command", 0, "", REG_OPTION_NON_VOLATILE,
-                              KEY_ALL_ACCESS, NULL, &hWinUAEKeyLocal, &disposition ) == ERROR_SUCCESS ) )
+        if((RegCreateKeyEx(rkey, rpath2, 0, "", REG_OPTION_NON_VOLATILE,
+                              KEY_WRITE | KEY_READ, NULL, &hWinUAEKeyLocal, &disposition) == ERROR_SUCCESS))
         {
             /* Set our (default) sub-key to BE the "WinUAE" command for editing a configuration */
-            sprintf( path, "%sWinUAE.exe -f \"%%1\" -s use_gui=yes", start_path );
-            RegSetValueEx( hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen( path ) + 1 );
+            sprintf(path, "%sWinUAE.exe -f \"%%1\" -s use_gui=yes", start_path_data);
+            RegSetValueEx(hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen(path) + 1);
+           RegCloseKey(hWinUAEKeyLocal);
         }
-       RegCloseKey( hWinUAEKeyLocal );
 
-        if( ( RegCreateKeyEx( HKEY_CLASSES_ROOT, "WinUAE\\shell\\Open\\command", 0, "", REG_OPTION_NON_VOLATILE,
-                              KEY_ALL_ACCESS, NULL, &hWinUAEKeyLocal, &disposition ) == ERROR_SUCCESS ) )
+        if((RegCreateKeyEx(rkey, rpath3, 0, "", REG_OPTION_NON_VOLATILE,
+                              KEY_WRITE | KEY_READ, NULL, &hWinUAEKeyLocal, &disposition) == ERROR_SUCCESS))
         {
             /* Set our (default) sub-key to BE the "WinUAE" command for launching a configuration */
-            sprintf( path, "%sWinUAE.exe -f \"%%1\"", start_path );
-            RegSetValueEx( hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen( path ) + 1 );
+            sprintf(path, "%sWinUAE.exe -f \"%%1\"", start_path_data);
+            RegSetValueEx(hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen( path ) + 1);
+           RegCloseKey(hWinUAEKeyLocal);
         }
-       RegCloseKey( hWinUAEKeyLocal );
+        RegCloseKey(hWinUAEKey);
     }
-    RegCloseKey( hWinUAEKey );
     hWinUAEKey = NULL;
 
     /* Create/Open the hWinUAEKey which points our config-info */
-    if( RegCreateKeyEx( HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, "", REG_OPTION_NON_VOLATILE,
-                          KEY_ALL_ACCESS, NULL, &hWinUAEKey, &disposition ) == ERROR_SUCCESS )
+    if (RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, "", REG_OPTION_NON_VOLATILE,
+                          KEY_WRITE | KEY_READ, NULL, &hWinUAEKey, &disposition) == ERROR_SUCCESS)
     {
-        initpath ("FloppyPath", start_path);
-        initpath ("KickstartPath", start_path);
-        initpath ("hdfPath", start_path);
-        initpath ("ConfigurationPath", start_path);
-        initpath ("ScreenshotPath", start_path);
-        initpath ("StatefilePath", start_path);
-        initpath ("SaveimagePath", start_path);
-        initpath ("VideoPath", start_path);
-        if( disposition == REG_CREATED_NEW_KEY )
+        initpath ("FloppyPath", start_path_data);
+        initpath ("KickstartPath", start_path_data);
+        initpath ("hdfPath", start_path_data);
+        initpath ("ConfigurationPath", start_path_data);
+        initpath ("ScreenshotPath", start_path_data);
+        initpath ("StatefilePath", start_path_data);
+        initpath ("SaveimagePath", start_path_data);
+        initpath ("VideoPath", start_path_data);
+        if (disposition == REG_CREATED_NEW_KEY)
         {
             /* Create and initialize all our sub-keys to the default values */
             colortype = 0;
-            RegSetValueEx( hWinUAEKey, "DisplayInfo", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) );
-            RegSetValueEx( hWinUAEKey, "xPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) );
-            RegSetValueEx( hWinUAEKey, "yPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) );
-            RegSetValueEx( hWinUAEKey, "xPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) );
-            RegSetValueEx( hWinUAEKey, "yPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) );
+            RegSetValueEx(hWinUAEKey, "DisplayInfo", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype));
+            RegSetValueEx(hWinUAEKey, "xPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype));
+            RegSetValueEx(hWinUAEKey, "yPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype));
+            RegSetValueEx(hWinUAEKey, "xPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype));
+            RegSetValueEx(hWinUAEKey, "yPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype));
         }
        size = sizeof (version);
        if (RegQueryValueEx (hWinUAEKey, "Version", 0, &dwType, (LPBYTE)&version, &size) == ERROR_SUCCESS) {
@@ -2013,7 +2032,7 @@ static void WIN32_HandleRegistryStuff( void )
                forceroms = 1;
        }
         
-       RegQueryValueEx( hWinUAEKey, "DisplayInfo", 0, &dwType, (LPBYTE)&colortype, &dwDisplayInfoSize );
+       RegQueryValueEx(hWinUAEKey, "DisplayInfo", 0, &dwType, (LPBYTE)&colortype, &dwDisplayInfoSize);
        if (colortype == 0) /* No color information stored in the registry yet */
        {
            char szMessage[4096];
@@ -2031,7 +2050,7 @@ static void WIN32_HandleRegistryStuff( void )
            WIN32GFX_FigurePixelFormats(colortype);
        }
        size = sizeof (quickstart);
-       RegQueryValueEx( hWinUAEKey, "QuickStartMode", 0, &dwType, (LPBYTE)&quickstart, &size );
+       RegQueryValueEx(hWinUAEKey, "QuickStartMode", 0, &dwType, (LPBYTE)&quickstart, &size);
     }
     fetch_path ("ConfigurationPath", path, sizeof (path));
     path[strlen (path) - 1] = 0;
@@ -2168,12 +2187,14 @@ extern void test (void);
 static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
                    int nCmdShow)
 {
-    char *posn;
+    char *posn, *p;
     HANDLE hMutex;
     char **argv;
     int argc;
     int i;
     int multi_display = 1;
+    int start_data = 0;
+    DWORD v;
 
 #if 1
 #ifdef __GNUC__
@@ -2228,57 +2249,77 @@ __asm{
        if (!strcmp (arg, "-norawinput")) no_rawinput = 1;
        if (!strcmp (arg, "-scsilog")) log_scsi = 1;
        if (!strcmp (arg, "-nomultidisplay")) multi_display = 0;
+       if (!strcmp (arg, "-legacypaths")) start_data = -1;
+       if (!strcmp (arg, "-datapath") && i + 1 < argc) {
+           strcpy(start_path_data, argv[i + 1]);
+           start_data = 1;
+           i++;
+       }
     }
 #if 0
     argv = 0;
     argv[0] = 0;
 #endif
-    /* Get our executable's root-path */
-    if ((start_path = xmalloc (MAX_DPATH)))
+    GetModuleFileName(NULL, start_path_exe, MAX_DPATH);
+    if((posn = strrchr (start_path_exe, '\\')))
+        posn[1] = 0;
+    p = getenv("AMIGAFOREVERDATA");
+    if (start_data == 0 && p) {
+       strcpy (start_path_data, p);
+       v = GetFileAttributes(start_path_data);
+        strcat(start_path_data, "\\WinUAE");
+       if (v != INVALID_FILE_ATTRIBUTES && (v & FILE_ATTRIBUTE_DIRECTORY))
+           start_data = 1;
+    }
+    if (start_data == 0 && SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, 0, start_path_data))) {
+       strcat(start_path_data, "\\My Amiga Files\\WinUAE");
+       v = GetFileAttributes(start_path_data);
+       if (v != INVALID_FILE_ATTRIBUTES && (v & FILE_ATTRIBUTE_DIRECTORY))
+           start_data = 1;
+    }
+    v = GetFileAttributes(start_path_data);
+    if (v == INVALID_FILE_ATTRIBUTES || !(v & FILE_ATTRIBUTE_DIRECTORY) || start_data <= 0)
+        strcpy(start_path_data, start_path_exe);
+
+    if (strlen(start_path_data) > 0 && (start_path_data[strlen(start_path_data) - 1] != '\\' && start_path_data[strlen(start_path_data) - 1] != '/'))
+       strcat(start_path_data, "\\");
+
+    sprintf(help_file, "%sWinUAE.chm", start_path_data);
+    sprintf(VersionStr, "WinUAE %d.%d.%d%s", UAEMAJOR, UAEMINOR, UAESUBREV, WINUAEBETA ? WINUAEBETASTR : "");
+    SetCurrentDirectory (start_path_data);
+
+    logging_init ();
+
+    if(WIN32_RegisterClasses() && WIN32_InitLibraries() && DirectDraw_Start(NULL))
     {
-       GetModuleFileName( NULL, start_path, MAX_DPATH );
-       if((posn = strrchr (start_path, '\\')))
-           posn[1] = 0;
-       sprintf (help_file, "%sWinUAE.chm", start_path );
-       sprintf( VersionStr, "WinUAE %d.%d.%d%s", UAEMAJOR, UAEMINOR, UAESUBREV, WINUAEBETA ? WINUAEBETASTR : "" );
-       SetCurrentDirectory (start_path);
-
-       logging_init ();
-
-       if( WIN32_RegisterClasses() && WIN32_InitLibraries() && DirectDraw_Start(NULL) )
-       {
-           DEVMODE devmode;
-           DWORD i = 0;
-
-           DirectDraw_Release ();
-           write_log ("Enumerating display devices.. \n");
-           enumeratedisplays (multi_display);
-           write_log ("Sorting devices and modes..\n");
-           sortdisplays ();
-           write_log ("done\n");
+        DEVMODE devmode;
+        DWORD i = 0;
+
+        DirectDraw_Release ();
+        write_log ("Enumerating display devices.. \n");
+        enumeratedisplays (multi_display);
+        write_log ("Sorting devices and modes..\n");
+        sortdisplays ();
+        write_log ("done\n");
            
-           memset (&devmode, 0, sizeof(devmode));
-           devmode.dmSize = sizeof(DEVMODE);
-           if (EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &devmode))
-           {
-               default_freq = devmode.dmDisplayFrequency;
-               if( default_freq >= 70 )
-                   default_freq = 70;
-               else
-                   default_freq = 60;
-           }
-
-           WIN32_HandleRegistryStuff();
-           WIN32_InitHtmlHelp();
-           DirectDraw_Release();
-           betamessage ();
-           keyboard_settrans ();
+        memset (&devmode, 0, sizeof(devmode));
+        devmode.dmSize = sizeof(DEVMODE);
+        if (EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &devmode)) {
+           default_freq = devmode.dmDisplayFrequency;
+           if( default_freq >= 70 )
+               default_freq = 70;
+           else
+               default_freq = 60;
+       }
+        WIN32_HandleRegistryStuff();
+        WIN32_InitHtmlHelp();
+        DirectDraw_Release();
+        betamessage ();
+        keyboard_settrans ();
 #ifdef PARALLEL_PORT
-           paraport_mask = paraport_init ();
+        paraport_mask = paraport_init ();
 #endif
-           real_main (argc, argv);
-       }
-       free (start_path);
+        real_main (argc, argv);
     }
        
     if (mm_timerres && timermode == 0)
@@ -2314,8 +2355,8 @@ int execute_command (char *cmd)
     si.cb = sizeof (si);
     si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
     si.wShowWindow = SW_HIDE;
-    if( CreateProcess( NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ) )  {
-       WaitForSingleObject( pi.hProcess, INFINITE );
+    if(CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))  {
+       WaitForSingleObject(pi.hProcess, INFINITE);
        return 1;
     }
     return 0;
@@ -2538,9 +2579,9 @@ void systraymenu (HWND hwnd)
 HMODULE WIN32_LoadLibrary (const char *name)
 {
     HMODULE m;
-    char *s = xmalloc (strlen (start_path) + strlen (WIN32_PLUGINDIR) + strlen (name) + 1);
+    char *s = xmalloc (strlen (start_path_exe) + strlen (WIN32_PLUGINDIR) + strlen (name) + 1);
     if (s) {
-       sprintf (s, "%s%s%s", start_path, WIN32_PLUGINDIR, name);
+       sprintf (s, "%s%s%s", start_path_exe, WIN32_PLUGINDIR, name);
        m = LoadLibrary (s);
         xfree (s);
        if (m)
@@ -2559,8 +2600,7 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
     oldaff = SetThreadAffinityMask(thread, 1); 
     __try {
        WinMain2 (hInstance, hPrevInstance, lpCmdLine, nCmdShow);
-        } __except(ExceptionFilter(GetExceptionInformation(), GetExceptionCode()))
-    {
+    } __except(ExceptionFilter(GetExceptionInformation(), GetExceptionCode())) {
     }
     SetThreadAffinityMask(thread, oldaff);
     return FALSE;
index c48a2d2b31384787602ce2adc4501df8a3e67b1c..0e314bf890e4d184d9af23b742bdc1c9214fbd88 100755 (executable)
@@ -22,7 +22,10 @@ extern int manual_palette_refresh_needed;
 extern int mouseactive, focus;
 extern int ignore_messages_all;
 #define WINUAEBETA 1
-#define WINUAEBETASTR " Beta 6"
+#define WINUAEBETASTR " Beta 7"
+
+extern char start_path_exe[MAX_DPATH];
+extern char start_path_data[MAX_DPATH];
 
 extern void my_kbd_handler (int, int, int);
 extern void clearallkeys(void);
@@ -65,7 +68,6 @@ extern int win_x_diff, win_y_diff;
 
 extern void sleep_millis (int ms);
 extern void sleep_millis_busy (int ms);
-extern void screenshot(int mode);
 extern void wait_keyrelease (void);
 extern void keyboard_settrans (void);
 
@@ -95,4 +97,8 @@ void read_rom_list (int);
 #define WIN32_PLUGINDIR "plugins\\"
 HMODULE WIN32_LoadLibrary (const char *);
 
+extern int screenshot_prepare(void);
+extern void screenshot_free(void);
+
+
 #endif
\ No newline at end of file
index a7dd6ab3ba9063834a9156cd0f91f4251d0bf038..cc9f4cc66336bff47c485e657d891d3e1053316b 100755 (executable)
@@ -90,7 +90,7 @@ void S2X_init (int dw, int dh, int aw, int ah, int mult, int ad, int dd)
                                             &DirectDrawState.temporary.desc,
                                             &DirectDrawState.temporary.surface,
                                             NULL);
-    if (ddrval != DD_OK) {
+    if (FAILED(ddrval)) {
        write_log ("DDRAW: failed to create temp surface\n%s\n", DXError (ddrval));
        tempsurf = 0;
     }
@@ -175,10 +175,10 @@ void S2X_render (void)
 
     if (temp_needed) {
        desc.dwSize = sizeof (desc);
-       while ((ddrval = IDirectDrawSurface7_Lock (dds, NULL, &desc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL)) != DD_OK) {
+       while (FAILED(ddrval = IDirectDrawSurface7_Lock (dds, NULL, &desc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL))) {
            if (ddrval == DDERR_SURFACELOST) {
                ddrval = IDirectDrawSurface7_Restore (dds);
-               if (ddrval != DD_OK)
+               if (FAILED(ddrval))
                    return;
            } else if (ddrval != DDERR_SURFACEBUSY) {
                return;
index 74252414dce502b84e4f255480d72bbd948bae57..ea18660b9d40b520cd1918700c65a4ffbc05ebd3 100755 (executable)
@@ -325,23 +325,23 @@ static int set_ddraw (void)
     overlay = (currentmode->flags & DM_OVERLAY) ? TRUE : FALSE;
 
     ddrval = DirectDraw_SetCooperativeLevel( hAmigaWnd, dxfullscreen);
-    if (ddrval != DD_OK)
+    if (FAILED(ddrval))
        goto oops;
 
     if (dxfullscreen)  {
         write_log( "set_ddraw: Trying %dx%d, bits=%d, refreshrate=%d\n", width, height, bits, freq );
         ddrval = DirectDraw_SetDisplayMode (width, height, bits, freq);
-        if (ddrval != DD_OK) {
+        if (FAILED(ddrval)) {
            write_log ("set_ddraw: failed, trying without forced refresh rate\n");
             ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0);
-           if (ddrval != DD_OK) {
+           if (FAILED(ddrval)) {
                write_log( "set_ddraw: Couldn't SetDisplayMode()\n" );
                goto oops;
            }
         }
 
        ddrval = DirectDraw_GetDisplayMode();
-       if (ddrval != DD_OK) {
+       if (FAILED(ddrval)) {
             write_log( "set_ddraw: Couldn't GetDisplayMode()\n" );
            goto oops;
         }
@@ -354,18 +354,18 @@ static int set_ddraw (void)
 
     if (dd) {
         ddrval = DirectDraw_CreateClipper();
-        if (ddrval != DD_OK) {
+        if (FAILED(ddrval)) {
            write_log( "set_ddraw: No clipping support\n" );
            goto oops;
        }
        ddrval = DirectDraw_CreateSurface (width, height);
-       if (ddrval != DD_OK) {
+       if (FAILED(ddrval)) {
            write_log( "set_ddraw: Couldn't CreateSurface() for primary because %s.\n", DXError( ddrval ) );
            goto oops;
        }
        if (DirectDraw_GetPrimaryBitCount() != (unsigned)bits && overlay) {
            ddrval = DirectDraw_CreateOverlaySurface (width, height, bits, 0);
-           if( ddrval != DD_OK )
+           if(FAILED(ddrval))
            {
                write_log( "set_ddraw: Couldn't CreateOverlaySurface(%d,%d,%d) because %s.\n", width, height, bits, DXError( ddrval ) );
                goto oops2;
@@ -384,14 +384,14 @@ static int set_ddraw (void)
 
        ddrval = DirectDraw_SetClipper (hAmigaWnd);
 
-       if (ddrval != DD_OK) {
+       if (FAILED(ddrval)) {
            write_log( "set_ddraw: Couldn't SetHWnd()\n" );
            goto oops;
        }
 
         if (bits == 8) {
            ddrval = DirectDraw_CreatePalette (currentmode->pal);
-           if (ddrval != DD_OK)
+           if (FAILED(ddrval))
            {
                write_log( "set_ddraw: Couldn't CreatePalette()\n" );
                goto oops;
@@ -576,7 +576,7 @@ void sortdisplays (void)
         DisplayModes[0].depth = -1;
        md1->disabled = 1;
        if (DirectDraw_Start (md1->primary ? NULL : &md1->guid)) {
-           if (DirectDraw_GetDisplayMode () == DD_OK) {
+           if (SUCCEEDED(DirectDraw_GetDisplayMode())) {
                int w = DirectDraw_CurrentWidth ();
                int h = DirectDraw_CurrentHeight ();
                int b = DirectDraw_GetSurfaceBitCount ();
@@ -612,7 +612,7 @@ RGBFTYPE WIN32GFX_FigurePixelFormats( RGBFTYPE colortype )
 
     ignore_messages_all++;
     DirectDraw_Start (NULL);
-    if( colortype == 0 ) /* Need to query a 16-bit display mode for its pixel-format.  Do this by opening such a screen */
+    if(colortype == 0) /* Need to query a 16-bit display mode for its pixel-format.  Do this by opening such a screen */
     {
         hAmigaWnd = CreateWindowEx (WS_EX_TOPMOST,
                               "AmigaPowah", VersionStr,
@@ -621,19 +621,19 @@ RGBFTYPE WIN32GFX_FigurePixelFormats( RGBFTYPE colortype )
                               1,//GetSystemMetrics (SM_CXSCREEN),
                               1,//GetSystemMetrics (SM_CYSCREEN),
                               hHiddenWnd, NULL, 0, NULL);
-        if( hAmigaWnd )
+        if(hAmigaWnd)
         {
             window_created = 1;
             ddrval = DirectDraw_SetCooperativeLevel( hAmigaWnd, TRUE ); /* TRUE indicates full-screen */
-            if( ddrval != DD_OK )
+            if(FAILED(ddrval))
             {
-               gui_message( "WIN32GFX_FigurePixelFormats: ERROR - %s\n", DXError(ddrval) );
+               gui_message("WIN32GFX_FigurePixelFormats: ERROR - %s\n", DXError(ddrval));
                goto out;
             }
         }
         else
         {
-            gui_message( "WIN32GFX_FigurePixelFormats: ERROR - test-window could not be created.\n" );
+            gui_message("WIN32GFX_FigurePixelFormats: ERROR - test-window could not be created.\n");
         }
     }
     else
@@ -648,11 +648,11 @@ RGBFTYPE WIN32GFX_FigurePixelFormats( RGBFTYPE colortype )
            write_log ("figure_pixel_formats: Attempting %dx%d..\n", dm->res.width, dm->res.height);
 
            ddrval = DirectDraw_SetDisplayMode (dm->res.width, dm->res.height, 16, 0); /* 0 for default freq */
-           if (ddrval != DD_OK)
+           if (FAILED(ddrval))
                continue;
 
            ddrval = DirectDraw_GetDisplayMode();
-           if (ddrval != DD_OK)
+           if (FAILED(ddrval))
                continue;
 
            colortype = DirectDraw_GetPixelFormat();
@@ -1200,7 +1200,7 @@ void init_colors (void)
            case 1:
                memcpy (xcolors, xcol8, sizeof xcolors);
                ddrval = DirectDraw_SetPaletteEntries( 0, 256, colors256 );
-               if (ddrval != DD_OK)
+               if (FAILED(ddrval))
                    write_log ("DX_SetPalette() failed with %s/%d\n", DXError (ddrval), ddrval);
            break;
 
@@ -1292,9 +1292,9 @@ void DX_SetPalette (int start, int count)
     /* Set our DirectX palette here */
     if( currentmode->current_depth == 8 )
     {
-       if (DirectDraw_SetPalette( 0 ) == DD_OK) {
+       if (SUCCEEDED(DirectDraw_SetPalette(0))) {
            ddrval = DirectDraw_SetPaletteEntries( start, count, (LPPALETTEENTRY)&(picasso96_state.CLUT[start] ) );
-           if (ddrval != DD_OK)
+           if (FAILED(ddrval))
                gui_message("DX_SetPalette() failed with %s/%d\n", DXError (ddrval), ddrval);
        }
     }
@@ -2141,10 +2141,10 @@ void WIN32GFX_PaletteChange( void )
     if (currentmode->current_depth > 8)
        return;
     hr = DirectDraw_SetPalette (1); /* Remove current palette */
-    if (hr != DD_OK)
+    if (FAILED(hr))
        write_log ("SetPalette(1) failed, %s\n", DXError (hr));
     hr = DirectDraw_SetPalette (0); /* Set our real palette */
-    if (hr != DD_OK)
+    if (FAILED(hr))
        write_log ("SetPalette(0) failed, %s\n", DXError (hr));
 }
 
@@ -2155,9 +2155,9 @@ int WIN32GFX_ClearPalette( void )
        return 1;
     if (!(currentmode->flags & DM_DDRAW) || (currentmode->flags & DM_D3D)) return 1;
     hr = DirectDraw_SetPalette (1); /* Remove palette */
-    if (hr != DD_OK)
+    if (FAILED(hr))
        write_log ("SetPalette(1) failed, %s\n", DXError (hr));
-    return hr == DD_OK;
+    return SUCCEEDED(hr);
 }
 
 int WIN32GFX_SetPalette( void )
@@ -2167,9 +2167,9 @@ int WIN32GFX_SetPalette( void )
     if (currentmode->current_depth > 8)
        return 1;
     hr = DirectDraw_SetPalette (0); /* Set palette */
-    if (hr != DD_OK)
+    if (FAILED(hr))
        write_log ("SetPalette(0) failed, %s\n", DXError (hr));
-    return hr == DD_OK;
+    return SUCCEEDED(hr);
 }
 void WIN32GFX_WindowMove ( void )
 {
@@ -2268,7 +2268,7 @@ HDC gethdc (void)
     if (D3D_isenabled())
        return D3D_getDC (0);
 #endif
-    if(DirectDraw_GetDC(&hdc, DirectDraw_GetLockableType()) != DD_OK)
+    if(FAILED(DirectDraw_GetDC(&hdc, DirectDraw_GetLockableType())))
         hdc = 0;
     return hdc;
 }
index 731aaab18bc166794c8560fbfd8162490a715da9..d605dea598e628654a4b2068732e581574cd69f8 100755 (executable)
@@ -29,7 +29,6 @@ int WIN32GFX_AdjustScreenmode( uae_u32 *pwidth, uae_u32 *pheight, uae_u32 *ppixb
 
 extern HWND hStatusWnd;
 extern HINSTANCE hDDraw;
-extern char *start_path;
 extern uae_u32 default_freq;
 extern int normal_display_change_starting;
 
index d0accb985e84b684e31779536e7f2da8e1bd3ed4..0d47b9ae8201bbd8677d7623f6436773a4b2b106 100755 (executable)
@@ -96,10 +96,9 @@ extern HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD );
 { char szMessage[MAX_DPATH]; WIN32GUI_LoadUIString( IDS_NOHELP, szMessage, MAX_DPATH ); gui_message( szMessage ); }
 
 extern HWND hAmigaWnd;
-extern char help_file[ MAX_DPATH ];
+extern char help_file[MAX_DPATH];
 
 extern int mouseactive;
-extern char *start_path;
 
 static char config_filename[ MAX_DPATH ] = "";
 
@@ -560,7 +559,7 @@ int scan_roms (char *pathp)
     char path[MAX_DPATH];
 
     int ret = scan_roms_2 (pathp);
-    sprintf (path, "%s..\\shared\\rom\\", start_path);
+    sprintf (path, "%s..\\shared\\rom\\", start_path_data);
     if (!ret && pathp == NULL) {
        ret = scan_roms_2 (path);
        if (ret)
@@ -678,6 +677,7 @@ void gui_display( int shortcut )
     int flipflop = 0;
     HRESULT hr;
 
+    screenshot_prepare();
 #ifdef D3D
     D3D_guimode (TRUE);
 #endif
@@ -705,7 +705,7 @@ void gui_display( int shortcut )
 
     if (isfullscreen ()) {
        hr = DirectDraw_FlipToGDISurface();
-       if (hr != DD_OK)
+       if (FAILED(hr))
            write_log ("FlipToGDISurface failed, %s\n", DXError (hr));
     }
 
@@ -754,6 +754,7 @@ void gui_display( int shortcut )
 #ifdef PICASSO96
     DX_SetPalette (0, 256);
 #endif
+    screenshot_free();
 }
 
 static void prefs_to_gui (struct uae_prefs *p)
@@ -832,7 +833,7 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs
     
     memset (&openFileName, 0, sizeof (OPENFILENAME));
     
-    strncpy (init_path, start_path, MAX_DPATH);
+    strncpy (init_path, start_path_data, MAX_DPATH);
     switch (flag)
     {
        case 0:
@@ -2294,7 +2295,7 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
                if (workprefs.info[0]) {
                    char name_buf[MAX_DPATH];
                    if (strstr (workprefs.info, "Configurations\\"))
-                       sprintf (name_buf, "%s\\%s", start_path, workprefs.info);
+                       sprintf (name_buf, "%s\\%s", start_path_data, workprefs.info);
                    else
                        strcpy (name_buf, workprefs.info);
                    ShellExecute (NULL, NULL, name_buf, NULL, NULL, SW_SHOWNORMAL);
@@ -3670,7 +3671,7 @@ static BOOL CALLBACK DisplayDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
        recursive++;
        if( ( wParam == IDC_TEST16BIT ) && DirectDraw_Start(NULL) )
        {
-           if( RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, KEY_ALL_ACCESS, &hPixelFormatKey ) == ERROR_SUCCESS )
+           if( RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, KEY_WRITE | KEY_READ, &hPixelFormatKey ) == ERROR_SUCCESS )
            {
                char szMessage[ 4096 ];
                char szTitle[ MAX_DPATH ];
@@ -3716,7 +3717,7 @@ static void values_to_chipsetdlg (HWND hDlg)
     LPTSTR string = NULL;
     int which_button;
 
-    switch( workprefs.chipset_mask )
+    switch(workprefs.chipset_mask)
     {
     case 0:
        CheckRadioButton( hDlg, IDC_OCS, IDC_AGA, IDC_OCS+0 );
@@ -3802,9 +3803,6 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l
 static BOOL CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 {
     static int recursive = 0;
-    RGBFTYPE colortype      = RGBFB_NONE;
-    DWORD dwType            = REG_DWORD;
-    DWORD dwDisplayInfoSize = sizeof( colortype );
 
     switch (msg) {
     case WM_INITDIALOG:
@@ -4730,7 +4728,7 @@ static void enable_for_sounddlg (HWND hDlg)
     EnableWindow (GetDlgItem (hDlg, IDC_SOUNDVOLUME), workprefs.produce_sound);
     EnableWindow (GetDlgItem (hDlg, IDC_SOUNDVOLUME2), workprefs.produce_sound);
     EnableWindow (GetDlgItem (hDlg, IDC_SOUNDSTEREOSEP), workprefs.sound_stereo == 1 && workprefs.produce_sound);
-    EnableWindow (GetDlgItem (hDlg, IDC_SOUNDSTEREOMIX), workprefs.sound_stereo == 1&& workprefs.produce_sound);
+    EnableWindow (GetDlgItem (hDlg, IDC_SOUNDSTEREOMIX), workprefs.sound_stereo == 1 && workprefs.produce_sound);
 
     EnableWindow (GetDlgItem (hDlg, IDC_SOUNDBUFFERMEM), workprefs.produce_sound);
     EnableWindow (GetDlgItem (hDlg, IDC_SOUNDBUFFERRAM), workprefs.produce_sound);
@@ -4770,7 +4768,7 @@ static void sound_loaddrivesamples (void)
 
     free (drivesounds);
     p = drivesounds = 0;
-    sprintf (dirname, "%s\\uae_data\\*.wav", start_path);
+    sprintf (dirname, "%s\\uae_data\\*.wav", start_path_data);
     h = FindFirstFile (dirname, &fd);
     if (h == INVALID_HANDLE_VALUE)
        return;
@@ -4862,6 +4860,16 @@ static void values_to_sounddlg (HWND hDlg)
     SendDlgItemMessage(hDlg, IDC_SOUNDSTEREO, CB_ADDSTRING, 0, (LPARAM)txt);
     SendDlgItemMessage (hDlg, IDC_SOUNDSTEREO, CB_SETCURSEL, workprefs.sound_stereo, 0);
 
+    SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_RESETCONTENT, 0, 0);
+    SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)"-");
+    WIN32GUI_LoadUIString (IDS_SOUND_SWAP_PAULA, txt, sizeof (txt));
+    SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)txt);
+    WIN32GUI_LoadUIString (IDS_SOUND_SWAP_AHI, txt, sizeof (txt));
+    SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)txt);
+    WIN32GUI_LoadUIString (IDS_SOUND_SWAP_BOTH, txt, sizeof (txt));
+    SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)txt);
+    SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_SETCURSEL, workprefs.sound_stereo_swap_paula + workprefs.sound_stereo_swap_ahi * 2, 0);
+
     SendDlgItemMessage(hDlg, IDC_SOUNDSTEREOSEP, CB_RESETCONTENT, 0, 0);
     for (i = 10; i >= 0; i--) {
        sprintf (txt, "%d%%", i * 10);
@@ -4997,6 +5005,9 @@ static void values_from_sounddlg (HWND hDlg)
     workprefs.win32_soundcard = SendDlgItemMessage (hDlg, IDC_SOUNDCARDLIST, CB_GETCURSEL, 0, 0L);
     workprefs.sound_filter = SendDlgItemMessage (hDlg, IDC_SOUNDFILTER, CB_GETCURSEL, 0, 0);
 
+    workprefs.sound_stereo_swap_paula = (SendDlgItemMessage (hDlg, IDC_SOUNDSWAP, CB_GETCURSEL, 0, 0) & 1) ? 1 : 0;
+    workprefs.sound_stereo_swap_ahi = (SendDlgItemMessage (hDlg, IDC_SOUNDSWAP, CB_GETCURSEL, 0, 0) & 2) ? 1 : 0;
+
     idx = SendDlgItemMessage (hDlg, IDC_SOUNDDRIVE, CB_GETCURSEL, 0, 0);
     if (idx >= 0) {
        i = SendDlgItemMessage (hDlg, IDC_SOUNDDRIVESELECT, CB_GETCURSEL, 0, 0);
@@ -6409,20 +6420,7 @@ static DWORD dwEnumeratedPrinters = 0;
 static char comports[MAX_SERIALS][8];
 static int ghostscript_available;
 
-/*
-static int joy0idc[] = {
-    IDC_PORT0_JOYSC, IDC_PORT0_KBDA, IDC_PORT0_KBDB, IDC_PORT0_KBDC, IDC_PORT0_KBDD, IDC_PORT0_KBDE,
-    IDC_PORT0_JOYS, -1
-};
-
-static int joy1idc[] = {
-    IDC_PORT1_JOYSC, IDC_PORT1_KBDA, IDC_PORT1_KBDB, IDC_PORT1_KBDC, IDC_PORT1_KBDD, IDC_PORT1_KBDE,
-    IDC_PORT1_JOYS, -1
-};
-*/
 static int joy0previous, joy1previous;
-
-
 static BOOL bNoMidiIn = FALSE;
 
 static void enable_for_portsdlg( HWND hDlg )
@@ -6430,12 +6428,6 @@ static void enable_for_portsdlg( HWND hDlg )
     int v;
 
     v = workprefs.input_selected_setting > 0 ? FALSE : TRUE;
-/*
-    for (i = 0; joy0idc[i] >= 0; i++) {
-        EnableWindow (GetDlgItem (hDlg, joy0idc[i]), v);
-        EnableWindow (GetDlgItem (hDlg, joy1idc[i]), v);
-    }
-*/
     EnableWindow (GetDlgItem (hDlg, IDC_SWAP), v);
 #if !defined (SERIAL_PORT)
     EnableWindow( GetDlgItem( hDlg, IDC_MIDIOUTLIST), FALSE );
@@ -6470,20 +6462,6 @@ static void updatejoyport (HWND hDlg)
     char tmp[MAX_DPATH];
  
     enable_for_portsdlg (hDlg);
-/*
-    for (i = 0; i < 2; i++) {
-        int *idcs1 = i == 0 ? joy0idc : joy1idc;
-        int *idcs2 = i == 0 ? joy1idc : joy0idc;
-       v = jsem_iskbdjoy (i, &workprefs);
-       if (v < 0)
-           v = 0;
-       else
-           v++;
-       CheckRadioButton (hDlg, idcs1[0], idcs1[NUM_JOYKBD], idcs1[v]);
-       for (j = 1; j < NUM_JOYKBD + 2; j++)
-           EnableWindow (GetDlgItem (hDlg, idcs2[j]), workprefs.input_selected_setting == 0 && j != v);
-    }
-*/
     if (joy0previous < 0)
        joy0previous = inputdevice_get_device_total (IDTYPE_JOYSTICK) + 1;
     if (joy1previous < 0)
@@ -6597,44 +6575,6 @@ static void values_from_portsdlg (HWND hDlg)
            fixjport (&workprefs.jport1, workprefs.jport0);
     }
 
-/*    
-    for (i = 0; i < 2; i++) {
-       int *idcs = i == 0 ? joy0idc : joy1idc;
-       int *port = i == 0 ? &workprefs.jport0 : &workprefs.jport1;
-       int prevport = *port;
-       int *joyprev = i == 0 ? &joy0previous : &joy1previous;
-        int v = SendDlgItemMessage (hDlg, idcs[NUM_JOYKBD + 1], CB_GETCURSEL, 0, 0L);
-       if (v != CB_ERR)
-           *joyprev = v;
-       for (j = 0; j < NUM_JOYKBD + 1; j++) {
-           if (IsDlgButtonChecked (hDlg, idcs[j])) {
-               if (j > 0) {
-                   *port = JSEM_KBDLAYOUT + j - 1;
-               } else {
-                   if (v != CB_ERR && v > 0) {
-                       *joyprev = v;
-                       v--;
-                       if (v >= inputdevice_get_device_total (IDTYPE_JOYSTICK))
-                           *port = JSEM_MICE + v - inputdevice_get_device_total (IDTYPE_JOYSTICK);
-                       else
-                           *port = JSEM_JOYS + v;
-                   }
-               }
-           }
-       }
-       if (*port != prevport) {
-           lastside = i;
-           changed = 1;
-       }
-    }
-    if (changed) {
-       if (lastside)
-           fixjport (&workprefs.jport0, workprefs.jport1);
-       else
-           fixjport (&workprefs.jport1, workprefs.jport0);
-    }
-*/
-
     item = SendDlgItemMessage( hDlg, IDC_PRINTERLIST, CB_GETCURSEL, 0, 0L );
     if( item != CB_ERR )
     {
@@ -6922,10 +6862,10 @@ static BOOL CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
        recursive++;
        pages[PORTS_ID] = hDlg;
        currentpage = PORTS_ID;
-       init_portsdlg( hDlg );
-       enable_for_portsdlg (hDlg);
-       values_to_portsdlg (hDlg);
-       updatejoyport (hDlg);
+       init_portsdlg(hDlg);
+       enable_for_portsdlg(hDlg);
+       values_to_portsdlg(hDlg);
+       updatejoyport(hDlg);
        recursive--;
        break;      
     case WM_USER:
@@ -7213,7 +7153,7 @@ static BOOL CALLBACK InputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPa
        inputdevice_updateconfig (&workprefs);
        inputdevice_config_change ();
        input_selected_widget = -1;
-       init_inputdlg( hDlg );
+       init_inputdlg(hDlg);
            
     case WM_USER:
        recursive++;
@@ -7841,7 +7781,7 @@ static BOOL CALLBACK AVIOutputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM
                    break;
 
                case IDC_SCREENSHOT:
-                       screenshot(1);
+                       screenshot(1, 0);
                        break;
                        
                case IDC_AVIOUTPUT_PAL:
@@ -8033,6 +7973,7 @@ static BOOL CALLBACK childenumproc (HWND hwnd, LPARAM lParam)
     TOOLINFO ti;
     char tmp[MAX_DPATH];
     char *p;
+    int v;
 
     tmp[0] = 0;
     SendMessage (hwnd, WM_GETTEXT, (WPARAM)sizeof (tmp), (LPARAM)tmp);
@@ -8078,11 +8019,11 @@ static BOOL CALLBACK childenumproc (HWND hwnd, LPARAM lParam)
                SendMessage(ToolTipHWND2, TTM_SETDELAYTIME, (WPARAM)TTDT_AUTOPOP, (LPARAM)MAKELONG(20000, 0));
                SendMessage(ToolTipHWND2, TTM_SETMAXTIPWIDTH, 0, 400);
                SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)tmp);
-               SendMessage(ToolTipHWND2, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
+               v = SendMessage(ToolTipHWND2, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
            }
        } else {
-           SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)tmp);
-           SendMessage(ToolTipHWND, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
+           v = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)tmp);
+           v = SendMessage(ToolTipHWND, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
        }
         return 1;
     }
@@ -8826,14 +8767,14 @@ static int fsdialog (HWND *hwnd, DWORD *flags)
     if (!isfullscreen ())
        return 0;
     hr = DirectDraw_FlipToGDISurface();
-    if (hr != DD_OK)
+    if (FAILED(hr))
        write_log ("FlipToGDISurface failed, %s\n", DXError (hr));
     *flags &= ~MB_SETFOREGROUND;
     return 0;
 /*
     HRESULT hr;
     hr = DirectDraw_FlipToGDISurface();
-    if (hr != DD_OK) {
+    if (FAILED(hr)) {
         write_log ("FlipToGDISurface failed, %s\n", DXError (hr));
        return 0;
     }
diff --git a/zfile.c b/zfile.c
index 06997c5e3ab4eefc3907145f261d4a72390c2e77..78bd0f0eb794a2cd713f48079b7df1228f634720 100755 (executable)
--- a/zfile.c
+++ b/zfile.c
@@ -969,13 +969,26 @@ static int zunzip (struct zfile *z, zfile_callback zc, void *user)
     return 1;
 }
 
+#define AF "%AMIGAFOREVERDATA%"
+
+static void manglefilename(char *out, const char *in)
+{
+    out[0] = 0;
+    if (!strncasecmp(in, AF, strlen(AF)))
+       strcpy (out, start_path_data);
+    if ((in[0] == '/' || in[0] == '\\') || (strlen(in) > 3 && in[1] == ':' && in[2] == '\\'))
+       out[0] = 0;
+    strcat(out, in);
+}
 
 int zfile_zopen (const char *name, zfile_callback zc, void *user)
 {
     struct zfile *l;
     int ztype;
-    
-    l = zfile_fopen_2 (name, "rb");
+    char path[MAX_DPATH];
+
+    manglefilename(path, name);
+    l = zfile_fopen_2(path, "rb");
     if (!l)
        return 0;
     ztype = iszip (l);
@@ -987,7 +1000,7 @@ int zfile_zopen (const char *name, zfile_callback zc, void *user)
        arcacc_zunzip (l, zc, user, ztype);
     zfile_fclose (l);
     return 1;
-}    
+}
 
 /*
  * fopen() for a compressed file
@@ -995,7 +1008,10 @@ int zfile_zopen (const char *name, zfile_callback zc, void *user)
 struct zfile *zfile_fopen (const char *name, const char *mode)
 {
     struct zfile *l;
-    l = zfile_fopen_2 (name, mode);
+    char path[MAX_DPATH];
+
+    manglefilename(path, name);
+    l = zfile_fopen_2 (path, mode);
     if (!l)
        return 0;
     l = zuncompress (l);
@@ -1009,10 +1025,12 @@ int zfile_exists (const char *name)
 
     if (strlen (name) == 0)
        return 0;
-    strcpy (fname, name);
+    manglefilename(fname, name);
     f = openzip (fname, 0);
-    if (!f)
-       f = fopen(name,"rb");
+    if (!f) {
+       manglefilename(fname, name);
+       f = fopen(fname,"rb");
+    }
     if (!f)
        return 0;
     fclose (f);