]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1410b2.zip
authorToni Wilen <twilen@winuae.net>
Wed, 7 Mar 2007 17:40:42 +0000 (19:40 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:32:14 +0000 (21:32 +0200)
cfgfile.c
include/keyboard.h
inputdevice.c
inputevents.def
od-win32/bsdsock.c
od-win32/win32.h
od-win32/winuaechangelog.txt

index 18762bfed7a6fb99da1b0be5c364f82643160ac9..3695c339ea357a6d7dbfe9fcf3c46e56ab2e82d6 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -1486,7 +1486,6 @@ void cfgfile_parse_line (struct uae_prefs *p, char *line, int type)
     if (!cfgfile_separate_line (line, line1b, line2b))
        return;
     cfgfile_parse_separated_line (p, line1b, line2b, type);
-    return;
 }
 
 static void subst (char *p, char *f, int n)
@@ -2092,6 +2091,7 @@ static int getconfigstoreline (struct zfile *z, char *option, char *value)
     return cfgfile_separate_line (tmp, option, value);
 }
 
+#if 0
 static int cfgfile_handle_custom_event (char *custom, int mode)
 {
     char option[CONFIG_BLEN], value[CONFIG_BLEN];
@@ -2148,7 +2148,7 @@ static int cfgfile_handle_custom_event (char *custom, int mode)
        return 1;
     return 0;
 }
-
+#endif
 
 int cmdlineparser (char *s, char *outp[], int max)
 {
index 017c2ff11301648e28b6b3c5805635450ff0387a..14401052d583008820733b67ca4c6f78d6f232e0 100755 (executable)
@@ -150,5 +150,8 @@ enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT, AKS_FREEZEBUTTON,
     AKS_DECREASEREFRESHRATE,
     AKS_INCREASEREFRESHRATE,
     AKS_ARCADIADIAGNOSTICS, AKS_ARCADIAPLY1, AKS_ARCADIAPLY2, AKS_ARCADIACOIN1, AKS_ARCADIACOIN2,
-    AKS_TOGGLEMOUSEGRAB, AKS_SWITCHINTERPOL
+    AKS_TOGGLEMOUSEGRAB, AKS_SWITCHINTERPOL,
+    AKS_INPUT_CONFIG_1,AKS_INPUT_CONFIG_2,AKS_INPUT_CONFIG_3,AKS_INPUT_CONFIG_4,
+    AKS_DISKSWAPPER_NEXT,AKS_DISKSWAPPER_PREV,
+    AKS_DISKSWAPPER_INSERT0,AKS_DISKSWAPPER_INSERT1,AKS_DISKSWAPPER_INSERT2,AKS_DISKSWAPPER_INSERT3,
 }; 
index 325916ac81723237d4697c4b794e6d7cc5ce72d9..d764943d519a18c120b37273dff9d94deeeae3d3 100755 (executable)
@@ -424,7 +424,7 @@ static void write_config2 (struct zfile *f, int idnum, int i, int offset, char *
            *p = 0;
        }
        if (custom)
-           sprintf (p, "'%s'.%d", custom, id->flags[i + offset][j]);
+           sprintf (p, "'%s'.%d", custom, id->flags[i + offset][j] & 0xff);
        else if (event <= 0)
            sprintf (p, "NULL");
        else
@@ -507,7 +507,7 @@ static void write_kbr_config (struct zfile *f, int idnum, int devnum, struct uae
                *p = 0;
            }
            if (custom)
-               sprintf (p, "'%s'.%d", custom, kbr->flags[i][j]);
+               sprintf (p, "'%s'.%d", custom, kbr->flags[i][j] & 0xff);
            else if (evt > 0)
                sprintf (p, "%s.%d", events[evt].confname, kbr->flags[i][j]);
            else
@@ -701,9 +701,17 @@ void read_inputdevice_config (struct uae_prefs *pr, char *option, char *value)
        }
        flags = getnum (&p);
        if (custom == NULL && ie->name == NULL) {
-           if (!strcmp(p2,"NULL")) {
-               id->eventid[keynum][subnum] = 0;
-               id->flags[keynum][subnum] = 0;
+           if (!strcmp(p2, "NULL")) {
+               if (joystick < 0) {
+                   id->eventid[keynum][subnum] = 0;
+                   id->flags[keynum][subnum] = 0;
+               } else if (button) {
+                   id->eventid[num + ID_BUTTON_OFFSET][subnum] = 0;
+                   id->flags[num + ID_BUTTON_OFFSET][subnum] = 0;
+               } else {
+                   id->eventid[num + ID_AXIS_OFFSET][subnum] = 0;
+                   id->flags[num + ID_AXIS_OFFSET][subnum] = 0;
+               }
            }
            continue;
        }
@@ -1457,8 +1465,10 @@ void inputdevice_do_keyboard (int code, int state)
 
 void inputdevice_handle_inputcode (void)
 {
+    static int swapperslot;
     int code = inputcode_pending;
     int state = inputcode_pending_state;
+
     inputcode_pending = 0;
     if (code == 0)
        return;
@@ -1615,7 +1625,66 @@ void inputdevice_handle_inputcode (void)
            changed_prefs.chipset_refreshrate = 900;
     }
     break;
+    case AKS_DISKSWAPPER_NEXT:
+       swapperslot++;
+       if (swapperslot >= MAX_SPARE_DRIVES || currprefs.dfxlist[swapperslot][0] == 0)
+           swapperslot = 0;
+    break;
+    case AKS_DISKSWAPPER_PREV:
+       swapperslot--;
+       if (swapperslot < 0)
+           swapperslot = MAX_SPARE_DRIVES - 1;
+       while (swapperslot > 0) {
+           if (currprefs.dfxlist[swapperslot][0])
+               break;
+           swapperslot--;
+       }
+    break;
+    case AKS_DISKSWAPPER_INSERT0:
+    case AKS_DISKSWAPPER_INSERT1:
+    case AKS_DISKSWAPPER_INSERT2:
+    case AKS_DISKSWAPPER_INSERT3:
+        strcpy (changed_prefs.df[code - AKS_DISKSWAPPER_INSERT0], currprefs.dfxlist[swapperslot]);
+    break;
+
+    break;
+    case AKS_INPUT_CONFIG_1:
+    case AKS_INPUT_CONFIG_2:
+    case AKS_INPUT_CONFIG_3:
+    case AKS_INPUT_CONFIG_4:
+       changed_prefs.input_selected_setting = currprefs.input_selected_setting = code - AKS_INPUT_CONFIG_1 + 1;
+       inputdevice_updateconfig (&currprefs);
+    break;
+    }
+}
+
+int handle_custom_event (char *custom)
+{
+    char *p, *buf, *nextp;
+
+    if (custom == NULL)
+       return 0;
+    p = buf = my_strdup (custom);
+    while (p && *p) {
+        char *p2;
+       if (*p != '\"')
+           break;
+       p++;
+       p2 = p;
+       while (*p2 != '\"' && *p2 != 0)
+           p2++;
+       if (*p2 == '\"') {
+           *p2++ = 0;
+           nextp = p2 + 1;
+           while (*nextp == ' ')
+               nextp++;
+       }
+       write_log("'%s'\n", p);
+       cfgfile_parse_line (&changed_prefs, p, 0);
+       p = nextp;
     }
+    xfree(buf);
+    return 0;
 }
 
 int handle_input_event (int nr, int state, int max, int autofire)
@@ -1827,13 +1896,38 @@ static int switchdevice(struct uae_input_device *id, int num)
     return 0;
 }
 
+static void process_custom_event (struct uae_input_device *id, int offset, int state)
+{
+    int idx = -1;
+    int custompos = (id->flags[offset][0] >> 15) & 1;
+    char *custom;
+
+    if (state < 0) {
+        idx = 0;
+        custompos = 0;
+    } else {
+        idx = state > 0 ? 0 : 1;
+        if (custompos)
+           idx += 2;
+       if (state == 0)
+           custompos ^= 1;
+    }
+    custom = id->custom[offset][idx];
+    if (custom == NULL) {
+        if (idx >= 2)
+           custom = id->custom[offset][idx - 2];
+    }
+    handle_custom_event (custom);
+    id->flags[offset][0] &= ~0x8000;
+    id->flags[offset][0] |= custompos << 15;
+}
+
 static void setbuttonstateall (struct uae_input_device *id, struct uae_input_device2 *id2, int button, int state)
 {
-    int event, autofire, i;
+    int evt, autofire, i;
     uae_u32 mask = 1 << button;
     uae_u32 omask = id2->buttonmask & mask;
     uae_u32 nmask = (state ? 1 : 0) << button;
-    char *custom;
 
     if (!id->enabled) {
        if (state)
@@ -1842,20 +1936,24 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev
     }
     if (button >= ID_BUTTON_TOTAL)
        return;
+
     for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) {
-       event = id->eventid[ID_BUTTON_OFFSET + button][sublevdir[state <= 0 ? 1 : 0][i]];
-       custom = id->custom[ID_BUTTON_OFFSET + button][sublevdir[state <= 0 ? 1 : 0][i]];
-       if (event <= 0 && custom == NULL)
-           continue;
+       evt = id->eventid[ID_BUTTON_OFFSET + button][sublevdir[state <= 0 ? 1 : 0][i]];
        autofire = (id->flags[ID_BUTTON_OFFSET + button][sublevdir[state <= 0 ? 1 : 0][i]] & ID_FLAG_AUTOFIRE) ? 1 : 0;
        if (state < 0) {
-           handle_input_event (event, 1, 1, 0);
-           queue_input_event (event, 0, 1, 1, 0); /* send release event next frame */
+           handle_input_event (evt, 1, 1, 0);
+           queue_input_event (evt, 0, 1, 1, 0); /* send release event next frame */
+           if (i == 0)
+               process_custom_event (id, ID_BUTTON_OFFSET + button, state);
        } else {
-           if ((omask ^ nmask) & mask)
-               handle_input_event (event, state, 1, autofire);
+           if ((omask ^ nmask) & mask) {
+               handle_input_event (evt, state, 1, autofire);
+               if (i == 0)
+                   process_custom_event (id, ID_BUTTON_OFFSET + button, state);
+           }
        }
     }
+
     if ((omask ^ nmask) & mask) {
        if (state)
            id2->buttonmask |= mask;
@@ -2222,10 +2320,10 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state
        if (na->extra[j][0] == scancode) {
            for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {/* send key release events in reverse order */
                int autofire = (na->flags[j][sublevdir[state == 0 ? 1 : 0][k]] & ID_FLAG_AUTOFIRE) ? 1 : 0;
-               int event = na->eventid[j][sublevdir[state == 0 ? 1 : 0][k]];
-               char *custom = na->custom[j][sublevdir[state == 0 ? 1 : 0][k]];
-               handled |= handle_input_event (event, state, 1, autofire);
+               int evt = na->eventid[j][sublevdir[state == 0 ? 1 : 0][k]];
+               handled |= handle_input_event (evt, state, 1, autofire);
            }
+           process_custom_event (na, j, state);
            return handled;
        }
        j++;
@@ -2362,13 +2460,13 @@ static int put_event_data (struct inputdevice_functions *id, int devnum, int num
 static int is_event_used (struct inputdevice_functions *id, int devnum, int isnum, int isevent)
 {
     struct uae_input_device *uid = get_uid (id, devnum);
-    int num, event, flag, sub;
+    int num, evt, flag, sub;
     char *custom;
 
     for (num = 0; num < id->get_widget_num (devnum); num++) {
        for (sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) {
-           if (get_event_data (id, devnum, num, &event, &custom, &flag, sub) >= 0) {
-               if (event == isevent && isnum != num)
+           if (get_event_data (id, devnum, num, &evt, &custom, &flag, sub) >= 0) {
+               if (evt == isevent && isnum != num)
                    return 1;
            }
        }
@@ -2490,7 +2588,8 @@ int inputdevice_iterate (int devnum, int num, char *name, int *af)
                    ie2++;
                    continue;
                }
-               if (ie2->allow_mask & mask) break;
+               if (ie2->allow_mask & mask)
+                   break;
                ie2++;
            }
            if (!(ie2->allow_mask & AM_INFO))
index 36d0d0fca4f31523014eb115323ab3fbc50d37e5..5a8e628e9b5101826e68c47f3980f6ff83f82337 100755 (executable)
@@ -313,6 +313,18 @@ DEFEVENT(SPC_DECREASE_REFRESHRATE,"Decrease emulation speed",AM_K,0,0,AKS_DECREA
 DEFEVENT(SPC_INCREASE_REFRESHRATE,"Increase emulation speed",AM_K,0,0,AKS_INCREASEREFRESHRATE)
 DEFEVENT(SPC_SWITCHINTERPOL,"Switch between audio interpolation methods",AM_K,0,0,AKS_SWITCHINTERPOL)
 
+DEFEVENT(SPC_DISKSWAPPER_NEXT,"Next slot in Disk Swapper",AM_K,0,0,AKS_DISKSWAPPER_NEXT)
+DEFEVENT(SPC_DISKSWAPPER_PREV,"Previous slot in Disk Swapper",AM_K,0,0,AKS_DISKSWAPPER_PREV)
+DEFEVENT(SPC_DISKSWAPPER_INSERT0,"Insert disk in current Disk Swapper slot in DF0:",AM_K,0,0,AKS_DISKSWAPPER_INSERT0)
+DEFEVENT(SPC_DISKSWAPPER_INSERT1,"Insert disk in current Disk Swapper slot in DF1:",AM_K,0,0,AKS_DISKSWAPPER_INSERT1)
+DEFEVENT(SPC_DISKSWAPPER_INSERT2,"Insert disk in current Disk Swapper slot in DF2:",AM_K,0,0,AKS_DISKSWAPPER_INSERT2)
+DEFEVENT(SPC_DISKSWAPPER_INSERT3,"Insert disk in current Disk Swapper slot in DF3:",AM_K,0,0,AKS_DISKSWAPPER_INSERT3)
+
+DEFEVENT(SPC_INPUT_CONFIG1,"Select Input Configuration #1",AM_K,0,0,AKS_INPUT_CONFIG_1)
+DEFEVENT(SPC_INPUT_CONFIG2,"Select Input Configuration #2",AM_K,0,0,AKS_INPUT_CONFIG_2)
+DEFEVENT(SPC_INPUT_CONFIG3,"Select Input Configuration #3",AM_K,0,0,AKS_INPUT_CONFIG_3)
+DEFEVENT(SPC_INPUT_CONFIG4,"Select Input Configuration #4",AM_K,0,0,AKS_INPUT_CONFIG_4)
+
 DEFEVENT(SPC_ARCADIA_DIAGNOSTICS,"Arcadia diagnostics dip switch",AM_K,0,0,AKS_ARCADIADIAGNOSTICS)
 DEFEVENT(SPC_ARCADIA_PLAYER1,"Arcadia player 1",AM_K,0,0,AKS_ARCADIAPLY1)
 DEFEVENT(SPC_ARCADIA_PLAYER2,"Arcadia player 2",AM_K,0,0,AKS_ARCADIAPLY2)
index 75272d635c8ef8e1df8bb5e894b15d32b71a699a..edbe3b6bcfb54f8acff66c905b5ead1c2c695afe 100755 (executable)
@@ -43,7 +43,7 @@ struct threadargs {
     uae_u32 args2;
     int args3;
     long args4;
-    char *args5;
+       char buf[MAXGETHOSTSTRUCT];
 };
 
 struct threadargsw {
@@ -69,7 +69,7 @@ struct bsdsockdata {
        WSADATA wsbData;
 
        volatile HANDLE hGetThreads[MAX_GET_THREADS];
-       volatile struct threadargs *threadGetargs[MAX_GET_THREADS];
+       volatile struct threadargs threadGetargs[MAX_GET_THREADS];
        volatile int threadGetargs_inuse[MAX_GET_THREADS];
        volatile HANDLE hGetEvents[MAX_GET_THREADS];
 
@@ -1953,35 +1953,33 @@ static BOOL CheckOnline(SB)
 
 static unsigned int thread_get2(void *indexp)
 {
-    int index = *((int*)indexp);
-    unsigned int result = 0;
-    volatile struct threadargs *argsp;
-       struct threadargs margs, *args;
-    uae_u32 name;
-    uae_u32 namelen;
-    long addrtype;
-    char *name_rp;
-    char *buf;
-    SB;
+       int index = *((int*)indexp);
+       unsigned int result = 0;
+       volatile struct threadargs *args;
+       uae_u32 name;
+       uae_u32 namelen;
+       long addrtype;
+       char *name_rp;
+       SB;
 
     for (;;) {
+
                WaitForSingleObject(bsd->hGetEvents[index], INFINITE);
-               if (bsd->threadGetargs_inuse[index] == -1) {
+
+               if (bsd->threadGetargs_inuse[index] == -1)
                        bsd->threadGetargs_inuse[index] = 0;
-                       bsd->threadGetargs[index] = NULL;
-               }
-               if ((argsp = bsd->threadGetargs[index]) != NULL) {
-                       margs = *argsp;
-                       args = &margs;
+
+               if (bsd->threadGetargs_inuse[index]) {
+                       args = &bsd->threadGetargs[index];
                        sb = args->sb;
 
                        if (args->args1 == 0) {
+
                                // gethostbyname or gethostbyaddr
                                struct hostent *host;
                                name = args->args2;
                                namelen = args->args3;
                                addrtype = args->args4;
-                               buf = args->args5;
                                name_rp = "";
                                if (addr_valid("thread_get1", name, 1))
                                        name_rp = get_real_address(name);
@@ -2001,16 +1999,17 @@ static unsigned int thread_get2(void *indexp)
                                                        TRACE(("failed (%d) - ", sb->sb_errno));
                                                } else {
                                                        bsdsocklib_seterrno(sb, 0);
-                                                       memcpy(buf, host, sizeof(HOSTENT));
+                                                       memcpy(args->buf, host, sizeof(HOSTENT));
                                                }
                                        }
                                }
+
                        } else if (args->args1 == 1) {
+
                                // getprotobyname
                                struct protoent  *proto;
 
                                name = args->args2;
-                               buf = args->args5;
                                name_rp = "";
                                if (addr_valid("thread_get2", name, 1))
                                        name_rp = get_real_address(name);
@@ -2022,10 +2021,12 @@ static unsigned int thread_get2(void *indexp)
                                                TRACE(("failed (%d) - ", sb->sb_errno));
                                        } else {
                                                bsdsocklib_seterrno(sb, 0);
-                                               memcpy(buf, proto, sizeof(struct protoent));
+                                               memcpy(args->buf, proto, sizeof(struct protoent));
                                        }
                                }
+
                        } else if (args->args1 == 2) {
+
                                // getservbyport and getservbyname
                                uae_u32 nameport;
                                uae_u32 proto;
@@ -2036,7 +2037,6 @@ static unsigned int thread_get2(void *indexp)
                                nameport = args->args2;
                                proto = args->args3;
                                type = args->args4;
-                               buf = args->args5;
        
                                if (proto) {
                                        if (addr_valid("thread_get3", proto, 1))
@@ -2058,7 +2058,7 @@ static unsigned int thread_get2(void *indexp)
                                                TRACE(("failed (%d) - ", sb->sb_errno));
                                        } else {
                                                bsdsocklib_seterrno(sb, 0);
-                                               memcpy(buf, serv, sizeof(struct servent));
+                                               memcpy(args->buf, serv, sizeof(struct servent));
                                        }
                                }
                        }
@@ -2069,7 +2069,6 @@ static unsigned int thread_get2(void *indexp)
                                SETSIGNAL;
 
                    bsd->threadGetargs_inuse[index] = 0;
-                       bsd->threadGetargs[index] = NULL;
 
                }
     }
@@ -2086,14 +2085,13 @@ static unsigned int __stdcall thread_get(void *p)
     return 0;
 }
 
-static int run_get_thread(TrapContext *context, SB, volatile struct threadargs *args)
+static volatile struct threadargs *run_get_thread(TrapContext *context, SB, struct threadargs *args)
 {
        int i;
 
        for (i = 0; i < MAX_GET_THREADS; i++)  {
                if (bsd->threadGetargs_inuse[i] == -1) {
                        bsd->threadGetargs_inuse[i] = 0;
-                       bsd->threadGetargs[i] = NULL;
                }
                if (bsd->hGetThreads[i] && !bsd->threadGetargs_inuse[i])
                        break;
@@ -2124,7 +2122,7 @@ static int run_get_thread(TrapContext *context, SB, volatile struct threadargs *
                return 0;
        } else {
                bsdsetpriority (bsd->hGetThreads[i]);
-               bsd->threadGetargs[i] = args;
+               memcpy (&bsd->threadGetargs[i], args, sizeof (struct threadargs));
                bsd->threadGetargs_inuse[i] = 1;
                SetEvent(bsd->hGetEvents[i]);
        }
@@ -2137,7 +2135,7 @@ static int run_get_thread(TrapContext *context, SB, volatile struct threadargs *
        }
        CANCELSIGNAL;
 
-       return 1;
+       return &bsd->threadGetargs[i];
 }
 
 void host_gethostbynameaddr(TrapContext *context, SB, uae_u32 name, uae_u32 namelen, long addrtype)
@@ -2148,16 +2146,21 @@ void host_gethostbynameaddr(TrapContext *context, SB, uae_u32 name, uae_u32 name
        char *name_rp;
        int i;
        struct threadargs args;
+       volatile struct threadargs *argsp;
        uae_u32 addr;
        uae_u32 *addr_list[2];
-       char buf[MAXGETHOSTSTRUCT];
+       volatile char *buf;
        unsigned int wMsg = 0;
 
 //     char on = 1;
 //     InternetSetOption(0,INTERNET_OPTION_SETTINGS_CHANGED,&on,strlen(&on));
 //  Do not use:        Causes locks with some machines
 
+       memset(&args, 0, sizeof (args));
+       argsp = &args;
+       buf = argsp->buf;
        name_rp = "";
+
        if (addr_valid("host_gethostbynameaddr", name, 1))
                name_rp = get_real_address(name);
 
@@ -2181,15 +2184,16 @@ void host_gethostbynameaddr(TrapContext *context, SB, uae_u32 name, uae_u32 name
                TRACE(("gethostbyaddr(0x%lx,0x%lx,%ld) -> ",name,namelen,addrtype));
        }
 
-       args.sb = sb;
-       args.args1 = 0;
-       args.args2 = name;
-       args.args3 = namelen;
-       args.args4 = addrtype;
-       args.args5 = buf;
+       argsp->sb = sb;
+       argsp->args1 = 0;
+       argsp->args2 = name;
+       argsp->args3 = namelen;
+       argsp->args4 = addrtype;
 
-       if (!run_get_thread(context, sb, &args))
+       argsp = run_get_thread(context, sb, &args);
+       if (!argsp)
                return;
+       buf = argsp->buf;
 
        if (!sb->sb_errno) {
 kludge:
@@ -2259,7 +2263,7 @@ void host_getprotobyname(TrapContext *context, SB, uae_u32 name)
        char *name_rp;
        int i;
        struct threadargs args;
-       char buf[MAXGETHOSTSTRUCT];
+       volatile struct threadargs *argsp;
 
        name_rp = "";
        if (addr_valid("host_gethostbynameaddr", name, 1))
@@ -2267,16 +2271,18 @@ void host_getprotobyname(TrapContext *context, SB, uae_u32 name)
 
        TRACE(("getprotobyname(%s) -> ",name_rp));
 
-       args.sb = sb;
-       args.args1 = 1;
-       args.args2 = name;
-       args.args5 = buf;
+       memset(&args, 0, sizeof (args));
+       argsp = &args;
+       argsp->sb = sb;
+       argsp->args1 = 1;
+       argsp->args2 = name;
 
-       if (!run_get_thread(context, sb, &args))
+       argsp = run_get_thread(context, sb, &args);
+       if (!argsp)
                return;
 
        if (!sb->sb_errno) {
-               p = (PROTOENT *)buf;
+               p = (PROTOENT *)argsp->buf;
 
                // compute total size of protoent
                size = 16;
@@ -2334,9 +2340,8 @@ void host_getservbynameport(TrapContext *context, SB, uae_u32 nameport, uae_u32
        uae_u32 aptr;
        char *name_rp = NULL, *proto_rp = NULL;
        int i;
-
-       char buf[MAXGETHOSTSTRUCT];
        struct threadargs args;
+       volatile struct threadargs *argsp;
 
        if (proto) {
                if (addr_valid("host_getservbynameport1", proto, 1))
@@ -2351,18 +2356,20 @@ void host_getservbynameport(TrapContext *context, SB, uae_u32 nameport, uae_u32
                TRACE(("getservbyname(%s,%s) -> ",name_rp,proto_rp ? proto_rp : "NULL"));
        }
 
-       args.sb = sb;
-       args.args1 = 2;
-       args.args2 = nameport;
-       args.args3 = proto;
-       args.args4 = type;
-       args.args5 = buf;
+       memset(&args, 0, sizeof (args));
+       argsp = &args;
+       argsp->sb = sb;
+       argsp->args1 = 2;
+       argsp->args2 = nameport;
+       argsp->args3 = proto;
+       argsp->args4 = type;
 
-       if (!run_get_thread(context, sb, &args))
+       argsp = run_get_thread(context, sb, &args);
+       if (!argsp)
                return;
 
        if (!sb->sb_errno) {
-               s = (SERVENT *)buf;
+               s = (SERVENT *)argsp->buf;
 
                // compute total size of servent
                size = 20;
index 245f3061226a16001071792cc3107c3f55d0b96a..adf55d51f173a14561d7a65ec16e4ea05f4e4dc6 100755 (executable)
@@ -15,9 +15,9 @@
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEBETA 1
+#define WINUAEBETA 2
 #define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2007, 3, 6)
+#define WINUAEDATE MAKEBD(2007, 3, 7)
 
 #define IHF_WINDOWHIDDEN 6
 #define NORMAL_WINDOW_STYLE (WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU)
index 74522113fab2a070081ce83cd2a16b08b77b2477..058295d36d08998217a8ea0046888d41aad4d4a0 100755 (executable)
@@ -1,14 +1,37 @@
 
+Beta 2:
 
+- better bsdsocket threading fix, should finally fix random crashes.
+- diskswapper input-panel input targets added (next/prev/insert)
+- change input configuration (1-4) input target added
+- custom input targets added, experimental, not in GUI yet, need manual
+  configuration file editing, syntax:
+  <anything>.button.x=<press>,<release>,<secondary press>,<sec. release>
+  press/release = key down/up, joystick button down/up
+  secondary = toggle-mode (first press uses "press" event, second press
+  uses "secondary press", third press is again "press" event etc..)
+  format of single event: '"entry=value"'.0 "unlimited" multiple
+  entry/value pairs supported: '"entry1=value1" "entry2=value2"'.0
+  empty event: NULL.0
+  Examples:
+  - toggle onscreen leds:
+  '"show_leds=false"'.0,NULL.0,'"show_leds=true"'.0
+  - refresh rate = 100 while key/button is kept down:
+  '"chipset_refreshrate=100"'.0,'"chipset_refreshrate=50"'.0
+  NOTES: format can change in future, toggle-mode may be added to regular
+  input event mapping system in future version.
+  BTW: custom input was implemented ages ago but it was not enabled until
+  now... (I forgot it..)
+  
 Beta 1:
 
+- startup crash fixed if serial port enumeration detected more than
+  8 ports. (broke in 140b6 when "compatibility mode" enumeration was
+  added) Also increased max amount of supported serial ports
 - default ASPI detection selected (possibly non-existing) AdaptecASPI
-- Quickstart automatically selects working SCSI mode (uses setting from
-  default.uae if available, if not, selects "best" available)
+- Quickstart now automatically selects working SCSI mode (uses setting
+  from default.uae if available, if not, selects "best" available)
 - 120b1 right border update fixed to work in interlaced modes (Unreal)
-- serial port "compatibility mode" enumeration added in 140b6 didn't
-  check if serial port buffer was already full (>=8 devices detected)
-  Added check and increased size of buffer.
 
 1.4.0