]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1600b16.zip
authorToni Wilen <twilen@winuae.net>
Mon, 9 Mar 2009 16:59:04 +0000 (18:59 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:45:11 +0000 (21:45 +0200)
18 files changed:
cfgfile.c
cia.c
debug.c
expansion.c
filesys.c
gayle.c
include/fsdb.h
include/zarchive.h
memory.c
newcpu.c
od-win32/clipboard_win32.c
od-win32/fsdb_win32.c
od-win32/win32.h
od-win32/win32gui.c
od-win32/winuaechangelog.txt
savestate.c
zfile.c
zfile_archive.c

index 93817df5d2bba02a5df8873ff49d5d7853c25fac..17db9b78d80fd630246f6b4f82cfb2e21037f2a6 100644 (file)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -2799,7 +2799,7 @@ uae_u32 cfgfile_uaelib (int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen)
 uae_u8 *restore_configuration (uae_u8 *src)
 {
     TCHAR *s = au (src);
-    write_log (s);
+    //write_log (s);
     xfree (s);
     src += strlen (src) + 1;
     return src;
diff --git a/cia.c b/cia.c
index 1e529556c5adefede96a1541a0805209a0885d37..206f5a76152d3bf11a12aedc89c36dc03b2bca04 100644 (file)
--- a/cia.c
+++ b/cia.c
@@ -590,10 +590,12 @@ static void bfe001_change (void)
     }
     if (currprefs.cs_ciaoverlay && (v & 1) != oldovl) {
        oldovl = v & 1;
-       if (!oldovl || ersatzkickfile)
+       if (!oldovl || ersatzkickfile) {
            map_overlay (1);
-       else
+       } else {
+           //activate_debugger ();
            map_overlay (0);
+       }
     }
 }
 
@@ -610,7 +612,7 @@ static uae_u8 ReadCIAA (unsigned int addr)
     switch (addr & 0xf) {
     case 0:
 #ifdef ACTION_REPLAY
-       action_replay_ciaread();
+       action_replay_ciaread ();
 #endif
        tmp = DISK_status() & 0x3c;
        tmp |= handle_joystick_buttons (ciaadra);
@@ -1151,7 +1153,6 @@ void CIA_reset (void)
        ersatz_chipcopy ();
     else
        map_overlay (0);
-    oldovl = 1;
 #ifdef SERIAL_PORT
     if (currprefs.use_serial && !savestate_state)
        serial_dtr_off (); /* Drop DTR at reset */
diff --git a/debug.c b/debug.c
index a0bfde5e6497170bede2bdcbdc7b9c9a770e525d..e4491caf072fb049a8d79962f55805cb07627e10 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -746,7 +746,7 @@ static void decode_copper_insn (FILE* file, unsigned long insn, unsigned long ad
     uae_u32 insn_type = insn & 0x00010001;
     int hpos, vpos;
     TCHAR here = ' ';
-    TCHAR record[] = L"          L";
+    TCHAR record[] = L"          ";
     if (find_copper_record (addr, &hpos, &vpos)) {
        _stprintf (record, L" [%03x %03x]", vpos, hpos);
     }
index 6d321775a40aff5b0862e1c2b2f703917a8f413e..255f2e0285464ae4e1f74eaeca1059304a842865 100644 (file)
@@ -329,7 +329,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
        if (expamem_type () == zorroII) {
            expamem_hi = value;
            (*card_map[ecard]) ();
-           write_log (L"   Card %d (Zorro%s) done.\n", ecard + 1, expamem_type () == 0xc0 ? "II" : "III");
+           write_log (L"   Card %d (Zorro%s) done.\n", ecard + 1, expamem_type () == 0xc0 ? L"II" : L"III");
            ++ecard;
            if (ecard < cardno)
                (*card_init[ecard]) ();
@@ -345,7 +345,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
        break;
 
      case 0x4c:
-       write_log (L"   Card %d (Zorro%s) had no success.\n", ecard + 1, expamem_type () == 0xc0 ? "II" : "III");
+       write_log (L"   Card %d (Zorro%s) had no success.\n", ecard + 1, expamem_type () == 0xc0 ? L"II" : L"III");
        ++ecard;
        if (ecard < cardno)
            (*card_init[ecard]) ();
index 32e759d31609993416b6dfb2e119f2bef1ba4f2b..fa053075efa739535992b3fa1a59e0b98ba31724 100644 (file)
--- a/filesys.c
+++ b/filesys.c
@@ -844,7 +844,7 @@ typedef uae_u8 *dpacket;
 #define GET_PCK_ARG5(p) ((uae_s32)(do_get_mem_long ((uae_u32 *)((p) + dp_Arg5))))
 
 #define PUT_PCK64_RES0(p,v) do { do_put_mem_long ((uae_u32 *)((p) + dp64_Res0), (v)); } while (0)
-#define PUT_PCK64_RES1(p,v) do { do_put_mem_long ((uae_u32 *)((p) + dp64_Res1), ((v) >> 32)); do_put_mem_long ((uae_u32 *)((p) + dp64_Res1 + 4), ((uae_u32)v)); } while (0)
+#define PUT_PCK64_RES1(p,v) do { do_put_mem_long ((uae_u32 *)((p) + dp64_Res1), (((uae_u64)v) >> 32)); do_put_mem_long ((uae_u32 *)((p) + dp64_Res1 + 4), ((uae_u32)v)); } while (0)
 #define PUT_PCK64_RES2(p,v) do { do_put_mem_long ((uae_u32 *)((p) + dp64_Res2), (v)); } while (0)
 
 #define GET_PCK64_TYPE(p) ((uae_s32)(do_get_mem_long ((uae_u32 *)((p) + dp64_Type))))
@@ -2754,7 +2754,7 @@ get_fileinfo (Unit *unit, dpacket packet, uaecptr info, a_inode *aino)
 #ifdef HAVE_ST_BLOCKS
     put_long (info + 128, statbuf.st_blocks);
 #else
-    put_long (info + 128, (statbuf.st_size > MAXFILESIZE32 ? MAXFILESIZE32 : statbuf.st_size) / 512 + 1);
+    put_long (info + 128, (statbuf.st_size + 511) / 512);
 #endif
     get_time (statbuf.st_mtime, &days, &mins, &ticks);
     put_long (info + 132, days);
@@ -3735,7 +3735,7 @@ action_seek (Unit *unit, dpacket packet)
     }
     res = fs_lseek (unit, k->fd, pos, whence);
 
-    if (-1 == res) {
+    if (-1 == res || res > MAXFILESIZE32) {
        PUT_PCK_RES1 (packet, res);
        PUT_PCK_RES2 (packet, ERROR_SEEK_ERROR);
     } else
@@ -4479,7 +4479,7 @@ static void action_change_file_position64 (Unit *unit, dpacket packet)
        PUT_PCK64_RES2 (packet, ERROR_SEEK_ERROR);
     } else {
        PUT_PCK64_RES1 (packet, TRUE);
-        PUT_PCK64_RES2 (packet, DOS_TRUE);
+        PUT_PCK64_RES2 (packet, 0);
     }
     k->file_pos = res;
 
@@ -4498,7 +4498,7 @@ static void action_get_file_position64 (Unit *unit, dpacket packet)
     }
     TRACE((L"ACTION_GET_FILE_POSITION64(%s)\n", k->aino->nname));
     PUT_PCK64_RES1 (packet, k->file_pos);
-    PUT_PCK64_RES2 (packet, DOS_TRUE);
+    PUT_PCK64_RES2 (packet, 0);
 }
 
 static void action_change_file_size64 (Unit *unit, dpacket packet)
@@ -4549,7 +4549,7 @@ static void action_change_file_size64 (Unit *unit, dpacket packet)
     }
 
     PUT_PCK64_RES1 (packet, DOS_TRUE);
-    PUT_PCK64_RES2 (packet, TRUE);
+    PUT_PCK64_RES2 (packet, 0);
 }
 
 
@@ -4572,7 +4572,7 @@ static void action_get_file_size64 (Unit *unit, dpacket packet)
        if (filesize >= 0) {
            fs_lseek64 (unit, k->fd, old, SEEK_SET);
            PUT_PCK64_RES1 (packet, filesize);
-           PUT_PCK64_RES2 (packet, DOS_TRUE);
+           PUT_PCK64_RES2 (packet, 0);
            return;
        }
     }
@@ -5313,7 +5313,7 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke
            bufrdb[0xdd] = 0;
            bufrdb[0xde] = 0;
            bufrdb[0xdf] = 0;
-           if (rdb_checksum (L"RDSK", bufrdb, rdblock)) {
+           if (rdb_checksum ("RDSK", bufrdb, rdblock)) {
                write_log (L"Windows 95/98/ME trashed RDB detected, fixing..\n");
                hdf_write (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize);
                break;
@@ -5507,13 +5507,14 @@ static void addfakefilesys (uaecptr parmpacket, uae_u32 dostype)
 static int dofakefilesys (UnitInfo *uip, uaecptr parmpacket)
 {
     int i, size;
-    TCHAR tmp[1024];
+    TCHAR tmp[MAX_DPATH];
+    uae_u8 buf[512];
     struct zfile *zf;
     uae_u32 dostype, fsres, fsnode;
 
-    memset (tmp, 0, 4);
-    hdf_read (&uip->hf, tmp, 0, 512);
-    dostype = (tmp[0] << 24) | (tmp[1] << 16) |(tmp[2] << 8) | tmp[3];
+    memset (buf, 0, 4);
+    hdf_read (&uip->hf, buf, 0, 512);
+    dostype = (buf[0] << 24) | (buf[1] << 16) |(buf[2] << 8) | buf[3];
     if (dostype == 0)
        return FILESYS_HARDFILE;
     fsres = get_long (parmpacket + PP_FSRES);
@@ -5531,7 +5532,7 @@ static int dofakefilesys (UnitInfo *uip, uaecptr parmpacket)
     }
 
     tmp[0] = 0;
-    if (uip->filesysdir && _tcslen(uip->filesysdir) > 0) {
+    if (uip->filesysdir && _tcslen (uip->filesysdir) > 0) {
        _tcscpy (tmp, uip->filesysdir);
     } else if ((dostype & 0xffffff00) == 0x444f5300) {
        _tcscpy (tmp, currprefs.romfile);
diff --git a/gayle.c b/gayle.c
index bc51f11e77ef7df5e93449a6f1b336e44512edd6..56184ceb32ffc7821c191da7ae16392e57a5b520 100644 (file)
--- a/gayle.c
+++ b/gayle.c
@@ -340,7 +340,7 @@ static void write_gayle_cs (uae_u8 val)
        /* PCMCIA disable -> enable */
         card_trigger (!(gayle_cs & GAYLE_CS_DIS) ? 1 : 0);
        if (PCMCIA_LOG)
-           write_log (L"PCMCIA slot: %s PC=%08X\n", !(gayle_cs & 1) ? "enabled" : "disabled", M68K_GETPC);
+           write_log (L"PCMCIA slot: %s PC=%08X\n", !(gayle_cs & 1) ? L"enabled" : L"disabled", M68K_GETPC);
     }
 }
 static uae_u8 read_gayle_cs (void)
index 766ad23c373440edbbe7a049f84e6564ed6072d3..2182e3e5bd1477e91ca7da72fa2c9430a8e23eda 100644 (file)
@@ -140,6 +140,7 @@ extern int my_truncate (const TCHAR *name, uae_u64 len);
 extern int dos_errno (void);
 extern int my_existsfile (const TCHAR *name);
 extern int my_existsdir (const TCHAR *name);
+extern FILE *my_opentext (const TCHAR*);
 
 extern char *custom_fsdb_search_dir (const char *dirname, TCHAR *rel);
 extern a_inode *custom_fsdb_lookup_aino_aname (a_inode *base, const TCHAR *aname);
index 240c1cba9ca7ee456d3f832db43451238a220c85..25c8a143d2a3f8c886769db40782c52e41bcdec7 100644 (file)
@@ -7,6 +7,7 @@ struct zfile {
     uae_u64 size;
     uae_u64 seek;
     int deleteafterclose;
+    int textmode;
     struct zfile *next;
 };
 
index f24f5e81f5dc2fde56059853b4dbb10244ca2ff6..630ae8ddb3bec4917cd4a2c0257b530fcb68921d 100644 (file)
--- a/memory.c
+++ b/memory.c
@@ -2632,6 +2632,30 @@ struct zfile *read_rom_name (const TCHAR *filename)
     return f;
 }
 
+
+static void kickstart_fix_checksum (uae_u8 *mem, int size)
+{
+    uae_u32 cksum = 0, prevck = 0;
+    int i, ch = size == 524288 ? 0x7ffe8 : 0x3e;
+
+    mem[ch] = 0;
+    mem[ch + 1] = 0;
+    mem[ch + 2] = 0;
+    mem[ch + 3] = 0;
+    for (i = 0; i < size; i+=4) {
+       uae_u32 data = (mem[i] << 24) | (mem[i + 1] << 16) | (mem[i + 2] << 8) | mem[i + 3];
+       cksum += data;
+       if (cksum < prevck)
+           cksum++;
+       prevck = cksum;
+    }
+    cksum ^= 0xffffffff;
+    mem[ch++] = cksum >> 24;
+    mem[ch++] = cksum >> 16;
+    mem[ch++] = cksum >> 8;
+    mem[ch++] = cksum >> 0;
+}
+
 static uae_char *kickstring = "exec.library";
 static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int noalias)
 {
@@ -2663,14 +2687,31 @@ static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksu
     }
 
     memset (mem, 0, size);
+    for (i = 0; i < 8; i++)
+       mem[size - 16 + i * 2 + 1] = 0x18 + i;
+    mem[size - 20] = size >> 24;
+    mem[size - 19] = size >> 16;
+    mem[size - 18] = size >>  8;
+    mem[size - 17] = size >>  0;
+
     i = zfile_fread (mem, 1, size, f);
+
     if (kickdisk && i > 262144)
        i = 262144;
-
+#if 0
     if (i >= 262144 && (i != 262144 && i != 524288 && i != 524288 * 2 && i != 524288 * 4)) {
        notify_user (NUMSG_KSROMREADERROR);
        return 0;
     }
+#endif
+    if (i < size - 20)
+       kickstart_fix_checksum (mem, size);
+
+    j = 1;
+    while (j < i)
+       j <<= 1;
+    i = j;
+
     if (!noalias && i == size / 2)
        memcpy (mem + size / 2, mem, size / 2);
 
@@ -2750,29 +2791,6 @@ static int load_extendedkickstart (void)
     return 1;
 }
 
-static void kickstart_fix_checksum (uae_u8 *mem, int size)
-{
-    uae_u32 cksum = 0, prevck = 0;
-    int i, ch = size == 524288 ? 0x7ffe8 : 0x3e;
-
-    mem[ch] = 0;
-    mem[ch + 1] = 0;
-    mem[ch + 2] = 0;
-    mem[ch + 3] = 0;
-    for (i = 0; i < size; i+=4) {
-       uae_u32 data = (mem[i] << 24) | (mem[i + 1] << 16) | (mem[i + 2] << 8) | mem[i + 3];
-       cksum += data;
-       if (cksum < prevck)
-           cksum++;
-       prevck = cksum;
-    }
-    cksum ^= 0xffffffff;
-    mem[ch++] = cksum >> 24;
-    mem[ch++] = cksum >> 16;
-    mem[ch++] = cksum >> 8;
-    mem[ch++] = cksum >> 0;
-}
-
 static int patch_shapeshifter (uae_u8 *kickmemory)
 {
     /* Patch Kickstart ROM for ShapeShifter - from Christian Bauer.
@@ -3575,7 +3593,7 @@ void memory_reset (void)
        map_banks (&rtarea_bank, rtarea_base >> 16, 1, 0);
 #endif
 
-    if ((cloanto_rom || currprefs.cs_ksmirror_e0) && !currprefs.maprom && !extendedkickmem_type)
+    if ((cloanto_rom || currprefs.cs_ksmirror_e0) && (currprefs.maprom != 0xe00000) && !extendedkickmem_type)
        map_banks (&kickmem_bank, 0xE0, 8, 0);
     if (currprefs.cs_ksmirror_a8) {
        if (extendedkickmem2_size) {
index 0e44ac6472765ee44af9444883e882f2000eb0ae..ed7d40de0ad6a7018399330a8c8564084d5ea3e2 100644 (file)
--- a/newcpu.c
+++ b/newcpu.c
@@ -2925,11 +2925,11 @@ void m68k_dumpstate (void *f, uaecptr *nextpc)
     int i, j;
 
     for (i = 0; i < 8; i++){
-       f_out (f, L"  LD%d %08lX ", i, m68k_dreg (&regs, i));
+       f_out (f, L"  D%d %08lX ", i, m68k_dreg (&regs, i));
        if ((i & 3) == 3) f_out (f, L"\n");
     }
     for (i = 0; i < 8; i++){
-       f_out (f, L"  LA%d %08lX ", i, m68k_areg (&regs, i));
+       f_out (f, L"  A%d %08lX ", i, m68k_areg (&regs, i));
        if ((i & 3) == 3) f_out (f, L"\n");
     }
     if (regs.s == 0) regs.usp = m68k_areg (&regs, 7);
index 7af7f98db91657dcf3f4299455235e631001468e..f22c1970d79bbc7a5f5b4c10d193e19b675b6fbd 100644 (file)
@@ -65,17 +65,17 @@ static void to_amiga_start (void)
     uae_Signal (get_long (clipboard_data + 8), 1 << 13);
 }
 
-static TCHAR *pctoamiga (const TCHAR *txt)
+static uae_char *pctoamiga (const uae_char *txt)
 {
     int len;
-    TCHAR *txt2;
+    uae_char *txt2;
     int i, j;
 
-    len = _tcslen (txt) + 1;
-    txt2 = xmalloc (len * sizeof (TCHAR));
+    len = strlen (txt) + 1;
+    txt2 = xmalloc (len);
     j = 0;
     for (i = 0; i < len; i++) {
-       TCHAR c = txt[i];
+       uae_char c = txt[i];
        if (c == 13)
            continue;
        txt2[j++] = c;
@@ -83,7 +83,7 @@ static TCHAR *pctoamiga (const TCHAR *txt)
     return txt2;
 }
 
-static int parsecsi (const uae_u8 *txt, int off, int len)
+static int parsecsi (const uae_char *txt, int off, int len)
 {
     while (off < len) {
        if (txt[off] >= 0x40)
@@ -104,7 +104,7 @@ static TCHAR *amigatopc (const uae_u8 *txt)
     cnt = 0;
     len = strlen (txt) + 1;
     for (i = 0; i < len; i++) {
-       TCHAR c = txt[i];
+       uae_char c = txt[i];
        if (c == 13)
            pc = 1;
        if (c == 10)
@@ -115,7 +115,7 @@ static TCHAR *amigatopc (const uae_u8 *txt)
     txt2 = xcalloc (len + cnt, 1);
     j = 0;
     for (i = 0; i < len; i++) {
-       uae_u8 c = txt[i];
+       uae_char c = txt[i];
        if (c == 0 && i + 1 < len)
            continue;
        if (c == 10)
@@ -140,11 +140,11 @@ static void to_iff_text (TCHAR *pctxt)
     uae_u8 b[] = { 'F','O','R','M',0,0,0,0,'F','T','X','T','C','H','R','S',0,0,0,0 };
     uae_u32 size;
     int txtlen;
-    TCHAR *txt;
+    uae_char *txt;
     char *s;
 
-    txt = pctoamiga (pctxt);
-    s = ua (txt);
+    s = ua (pctxt);
+    txt = pctoamiga (s);
     txtlen = strlen (s);
     xfree (to_amiga);
     size = txtlen + sizeof b + (txtlen & 1) - 8;
@@ -160,7 +160,7 @@ static void to_iff_text (TCHAR *pctxt)
     to_amiga_size = sizeof b + txtlen + (txtlen & 1);
     to_amiga = xcalloc (to_amiga_size, 1);
     memcpy (to_amiga, b, sizeof b);
-    memcpy (to_amiga + sizeof b, s, txtlen);
+    memcpy (to_amiga + sizeof b, txt, txtlen);
     to_amiga_start ();
     xfree (txt);
     xfree (s);
@@ -676,14 +676,14 @@ static void clipboard_read (HWND hwnd)
     write_log (L"clipboard: windows clipboard: ");
     while (f = EnumClipboardFormats (f)) {
        write_log (L"%d ", f);
-       if (f == CF_TEXT)
+       if (f == CF_UNICODETEXT)
            text = TRUE;
        if (f == CF_BITMAP)
            bmp = TRUE;
     }
     write_log (L"\n");
     if (text) {
-       hglb = GetClipboardData (CF_TEXT); 
+       hglb = GetClipboardData (CF_UNICODETEXT); 
        if (hglb != NULL) { 
            TCHAR *lptstr = GlobalLock (hglb); 
            if (lptstr != NULL) {
@@ -755,7 +755,7 @@ static int clipboard_put_text_real (const TCHAR *txt)
        TCHAR *lptstr = GlobalLock (hglb);
        _tcscpy (lptstr, txt);
        GlobalUnlock (hglb);
-       SetClipboardData (CF_TEXT, hglb); 
+       SetClipboardData (CF_UNICODETEXT, hglb); 
        ret = TRUE;
     }
     CloseClipboard ();
index debde65c1782e81eed69641d3fb6ca85f88e4eb8..47383e9e48e240ab1cd9b3fd4bd8ffc5be78f7b1 100644 (file)
@@ -925,8 +925,24 @@ int my_getvolumeinfo (const TCHAR *root)
     return ret;
 }
 
+FILE *my_opentext (const TCHAR *name)
+{
+    FILE *f;
+    uae_u8 tmp[4];
+    int v;
 
-
-
+    f = _tfopen (name, L"rb");
+    if (!f)
+       return NULL;
+    v = fread (tmp, 1, 4, f);
+    fclose (f);
+    if (v == 4) {
+       if (tmp[0] == 0xef && tmp[1] == 0xbb && tmp[2] == 0xbf)
+           return _tfopen (name, L"r, ccs=UTF-8");
+       if (tmp[0] == 0xff && tmp[1] == 0xfe)
+           return _tfopen (name, L"r, ccs=UTF-16LE");
+    }
+    return _tfopen (name, L"r");
+}
 
 
index 909c5547c9a24225c16d196546d435650499a0e1..7abf82a771b04e9124eb06c80ea5093de14fed32 100644 (file)
@@ -17,8 +17,8 @@
 
 #define WINUAEPUBLICBETA 1
 
-#define WINUAEBETA L"15"
-#define WINUAEDATE MAKEBD(2009, 3, 7)
+#define WINUAEBETA L"16"
+#define WINUAEDATE MAKEBD(2009, 3, 9)
 #define WINUAEEXTRA L""
 #define WINUAEREV L""
 
index d48ddbec27ab36961d528338a3be0379afc68ad3..1fecef03a1699931e165d823a579d0ccea804060 100644 (file)
@@ -882,11 +882,11 @@ static struct romdata *scan_single_rom_2 (struct zfile *f)
        return 0;
     }
     zfile_fread (buffer, 1, 11, f);
-    if (!memcmp (buffer, L"KICK", 4)) {
+    if (!memcmp (buffer, "KICK", 4)) {
        zfile_fseek (f, 512, SEEK_SET);
        if (size > 262144)
            size = 262144;
-    } else if (!memcmp (buffer, L"AMIROMTYPE1", 11)) {
+    } else if (!memcmp (buffer, "AMIROMTYPE1", 11)) {
        cl = 1;
        size -= 11;
     } else {
@@ -1299,7 +1299,7 @@ int target_cfgfile_load (struct uae_prefs *p, TCHAR *filename, int type, int isd
     _tcscpy (fname, filename);
     if (!zfile_exists (fname)) {
        fetch_configurationpath (fname, sizeof (fname) / sizeof (TCHAR));
-       if (memcmp(fname, filename, _tcslen (fname)))
+       if (_tcsncmp (fname, filename, _tcslen (fname)))
            _tcscat (fname, filename);
        else
            _tcscpy (fname, filename);
@@ -2181,7 +2181,7 @@ static struct ConfigStruct *readconfigcache (const TCHAR *path)
     err = 0;
     first = NULL;
     getconfigcache (cachepath, path);
-    zcache = _tfopen (cachepath, L"r");
+    zcache = my_opentext (cachepath);
     if (!zcache)
        return NULL;
     if (!configurationcache) {
@@ -2967,7 +2967,7 @@ void InitializeListView (HWND hDlg)
                _tcscpy (devname_str, L"n/a");
                _tcscpy (volname_str, L"n/a");
                _tcscpy (bootpri_str, L"n/a");
-               if (!memcmp (rootdir, L"HD_", 3))
+               if (!_tcsncmp (rootdir, L"HD_", 3))
                    rootdir += 3;
            } else {
                _tcscpy (blocksize_str, L"n/a");
@@ -7493,9 +7493,9 @@ static void hardfile_testrdb (HWND hDlg, struct hfdlg_vals *hdf)
        return;
     zfile_fread (tmp, 1, sizeof (tmp), f);
     zfile_fclose (f);
-    if (!memcmp (tmp + 2, L"CIS", 3))
+    if (!memcmp (tmp + 2, "CIS", 3))
        hdf->controller = HD_CONTROLLER_PCMCIA_SRAM;
-    if (!memcmp (tmp, L"RDSK\0\0\0", 7)) {
+    if (!memcmp (tmp, "RDSK\0\0\0", 7)) {
        hdf->sectors = 0;
        hdf->surfaces = 0;
        hdf->reserved = 0;
index 54f6d6c0bd88eb6342a537ee210fd90a7c5e8848..9f5b3bc4315a502fe7f988b0cc0c93bfcb60d8a7 100644 (file)
@@ -1,4 +1,17 @@
 
+Beta 16:
+
+- multiple unicode conversion issues fixed, hardfile/drive issues,
+  clipboard text conversion, statefiles etc..
+- automatically add KS rom "footer" if rom is too short (for my own
+  rom project, more information later...)
+- unrar.dll support fixed and uses now unicode functions
+- all text file reading routines now automatically support UTF-8 and
+  UTF-16LE formats if BOM is included (plain files only, not inside
+  archives yet)
+- directory filesystem seek 2G test added, 64-bit seek function return
+  code fix
+
 Beta 15:
 
 - WinUAE is now native unicode application (internally all strings are
index bf0c0f492102348a305d788e92dc3fcc6ea80300..6409be5dacae83a87f178404171d058d1c7ff675 100644 (file)
@@ -150,13 +150,13 @@ void save_u8_func (uae_u8 **dstp, uae_u8 v)
 void save_string_func (uae_u8 **dstp, const TCHAR *from)
 {
     uae_u8 *dst = *dstp;
-    char *s;
-    s = ua (from);
+    char *s, *s2;
+    s2 = s = ua (from);
     while (s && *s)
        *dst++ = *s++;
     *dst++ = 0;
     *dstp = dst;
-    xfree (s);
+    xfree (s2);
 }
 
 uae_u32 restore_u32_func (uae_u8 **dstp)
@@ -221,6 +221,7 @@ static void save_chunk (struct zfile *f, uae_u8 *chunk, size_t len, TCHAR *name,
     uae_u32 flags;
     size_t pos;
     size_t chunklen, len2;
+    char *s;
 
     if (!chunk)
        return;
@@ -231,7 +232,9 @@ static void save_chunk (struct zfile *f, uae_u8 *chunk, size_t len, TCHAR *name,
     }
 
     /* chunk name */
-    zfile_fwrite (name, 1, 4, f);
+    s = ua (name);
+    zfile_fwrite (s, 1, 4, f);
+    xfree (s);
     pos = zfile_ftell (f);
     /* chunk size */
     dst = &tmp[0];
@@ -384,7 +387,7 @@ static void restore_header (uae_u8 *src)
     emuversion = restore_string ();
     description = restore_string ();
     write_log (L"Saved with: '%s %s', description: '%s'\n",
-       emuname,emuversion,description);
+       emuname, emuversion, description);
     xfree (description);
     xfree (emuversion);
     xfree (emuname);
diff --git a/zfile.c b/zfile.c
index 246612abf03661e30ccf8e014df3398cc24cb304..5ef4581bb95b3f53200ee416a39fb9e80ae68c78 100644 (file)
--- a/zfile.c
+++ b/zfile.c
@@ -519,7 +519,12 @@ static struct zfile *zfile_fopen_2 (const TCHAR *name, const TCHAR *mode)
     } else {
        l = zfile_create ();
        l->name = my_strdup (name);
-       f = _tfopen (l->name, mode);
+       if (!_tcsicmp (mode, L"r")) {
+           f = my_opentext (l->name);
+           l->textmode = 1;
+       } else {
+           f = _tfopen (l->name, mode);
+       }
        if (!f) {
            zfile_fclose (l);
            return 0;
index b7c918ba8232f8e02f01bf28410ef71d0f834916..2db235408cd2ef87a13ed268df6ba3dd7d6c0576 100644 (file)
@@ -438,8 +438,8 @@ struct zfile *archive_access_7z (struct znode *zn)
 /* copy and paste job? you are only imagining it! */
 static struct zfile *rarunpackzf; /* stupid unrar.dll */
 #include <unrar.h>
-typedef HANDLE (_stdcall* RAROPENARCHIVE)(struct RAROpenArchiveData*);
-static RAROPENARCHIVE pRAROpenArchive;
+typedef HANDLE (_stdcall* RAROPENARCHIVEEX)(struct RAROpenArchiveDataEx*);
+static RAROPENARCHIVEEX pRAROpenArchiveEx;
 typedef int (_stdcall* RARREADHEADEREX)(HANDLE,struct RARHeaderDataEx*);
 static RARREADHEADEREX pRARReadHeaderEx;
 typedef int (_stdcall* RARPROCESSFILE)(HANDLE,int,char*,char*);
@@ -473,13 +473,13 @@ static int canrar(void)
 
            rarlib = WIN32_LoadLibrary (L"unrar.dll");
            if (rarlib) {
-               pRAROpenArchive = (RAROPENARCHIVE)GetProcAddress (rarlib, "RAROpenArchive");
+               pRAROpenArchiveEx = (RAROPENARCHIVEEX)GetProcAddress (rarlib, "RAROpenArchiveEx");
                pRARReadHeaderEx = (RARREADHEADEREX)GetProcAddress (rarlib, "RARReadHeaderEx");
                pRARProcessFile = (RARPROCESSFILE)GetProcAddress (rarlib, "RARProcessFile");
                pRARCloseArchive = (RARCLOSEARCHIVE)GetProcAddress (rarlib, "RARCloseArchive");
                pRARSetCallback = (RARSETCALLBACK)GetProcAddress (rarlib, "RARSetCallback");
                pRARGetDllVersion = (RARGETDLLVERSION)GetProcAddress (rarlib, "RARGetDllVersion");
-               if (pRAROpenArchive && pRARReadHeaderEx && pRARProcessFile && pRARCloseArchive && pRARSetCallback) {
+               if (pRAROpenArchiveEx && pRARReadHeaderEx && pRARProcessFile && pRARCloseArchive && pRARSetCallback) {
                    israr = 1;
                    write_log (L"unrar.dll version %08X detected and used\n", pRARGetDllVersion ? pRARGetDllVersion() : -1);
 
@@ -502,7 +502,7 @@ static int CALLBACK RARCallbackProc (UINT msg,LONG UserData,LONG P1,LONG P2)
 
 struct RARContext
 {
-    struct RAROpenArchiveData OpenArchiveData;
+    struct RAROpenArchiveDataEx OpenArchiveData;
     struct RARHeaderDataEx HeaderData;
     HANDLE hArcData;
 };
@@ -520,7 +520,7 @@ struct zvolume *archive_directory_rar (struct zfile *z)
     struct zfile *zftmp;
     int cnt;
 
-    if (!canrar())
+    if (!canrar ())
        return archive_directory_arcacc (z, ArchiveFormatRAR);
     if (z->data)
         /* wtf? stupid unrar.dll only accept filename as an input.. */
@@ -529,12 +529,11 @@ struct zvolume *archive_directory_rar (struct zfile *z)
     zv = zvolume_alloc (z, ArchiveFormatRAR, rc);
     fclose (z->f); /* bleh, unrar.dll fails to open the archive if it is already open.. */
     z->f = NULL;
-    rc->OpenArchiveData.ArcName = ua (z->name);
+    rc->OpenArchiveData.ArcNameW = z->name;
     rc->OpenArchiveData.OpenMode = RAR_OM_LIST;
-    rc->hArcData = pRAROpenArchive (&rc->OpenArchiveData);
-    xfree (rc->OpenArchiveData.ArcName);
+    rc->hArcData = pRAROpenArchiveEx (&rc->OpenArchiveData);
     if (rc->OpenArchiveData.OpenResult != 0) {
-       xfree(rc);
+       xfree (rc);
        if (!rar_resetf (z)) {
            zfile_fclose_archive (zv);
            return NULL;
@@ -545,17 +544,15 @@ struct zvolume *archive_directory_rar (struct zfile *z)
     pRARSetCallback (rc->hArcData, RARCallbackProc, 0);
     cnt = 0;
     while (pRARReadHeaderEx (rc->hArcData, &rc->HeaderData) == 0) {
-       TCHAR *name = au (rc->HeaderData.FileName);
        struct zarchive_info zai;
        struct znode *zn;
        memset(&zai, 0, sizeof zai);
-       zai.name = name;
+       zai.name = rc->HeaderData.FileNameW;
        zai.size = rc->HeaderData.UnpSize;
        zai.t = fromdostime (rc->HeaderData.FileTime);
        zn = zvolume_addfile_abs (zv, &zai);
        zn->offset = cnt++;
        pRARProcessFile (rc->hArcData, RAR_SKIP, NULL, NULL);
-       xfree (name);
     }
     pRARCloseArchive (rc->hArcData);
     zftmp = zfile_fopen_empty (z->name, 0);
@@ -573,22 +570,22 @@ struct zfile *archive_access_rar (struct znode *zn)
     if (zn->volume->method != ArchiveFormatRAR)
        return archive_access_arcacc (zn);
     rc->OpenArchiveData.OpenMode = RAR_OM_EXTRACT;
-    rc->hArcData = pRAROpenArchive(&rc->OpenArchiveData);
+    rc->hArcData = pRAROpenArchiveEx (&rc->OpenArchiveData);
     if (rc->OpenArchiveData.OpenResult != 0)
        return NULL;
-    pRARSetCallback(rc->hArcData, RARCallbackProc, 0);
+    pRARSetCallback (rc->hArcData, RARCallbackProc, 0);
     for (i = 0; i <= zn->offset; i++) {
-       if (pRARReadHeaderEx(rc->hArcData, &rc->HeaderData))
+       if (pRARReadHeaderEx (rc->hArcData, &rc->HeaderData))
            return NULL;
        if (i < zn->offset) {
-           if (pRARProcessFile(rc->hArcData, RAR_SKIP, NULL, NULL))
+           if (pRARProcessFile (rc->hArcData, RAR_SKIP, NULL, NULL))
                goto end;
        }
     }
     zf = zfile_fopen_empty (zn->fullname, zn->size);
     rarunpackzf = zf;
-    if (pRARProcessFile(rc->hArcData, RAR_TEST, NULL, NULL)) {
-       zfile_fclose(zf);
+    if (pRARProcessFile (rc->hArcData, RAR_TEST, NULL, NULL)) {
+       zfile_fclose (zf);
        zf = NULL;
     }
 end: