diff --git a/src/mred/mredmac.cxx b/src/mred/mredmac.cxx index 20d5bc6e1b..cab6de3207 100644 --- a/src/mred/mredmac.cxx +++ b/src/mred/mredmac.cxx @@ -344,7 +344,6 @@ void wxSmuggleOutEvent(EventRef ref) UniChar *text; UInt32 actualSize; EventRef kref; - UInt32 val = 0; GetEventParameter(ref, kEventParamTextInputSendKeyboardEvent, typeEventRef, NULL, sizeof(EventRef), NULL, &kref); diff --git a/src/mred/wxme/wx_keym.cxx b/src/mred/wxme/wx_keym.cxx index 1f56bcb09d..b93e223bf1 100644 --- a/src/mred/wxme/wx_keym.cxx +++ b/src/mred/wxme/wx_keym.cxx @@ -166,25 +166,43 @@ void wxKeymap::SetBreakSequenceCallback(wxBreakSequenceFunction f, fold(dataold); } -wxKeycode *wxKeymap::FindKey(long code, long other_code, +wxKeycode *wxKeymap::FindKey(long code, long other_code, long alt_code, long other_alt_code, Bool shift, Bool ctrl, Bool alt, Bool meta, - wxKeycode *prefix) + wxKeycode *prefix, int *_score) { wxKeycode *key; wxKeycode *bestKey = NULL; int bestScore = -1; int iter; + long findk; if (!keys) return NULL; - for (iter = 0; iter < 2; iter++) { - key = (wxKeycode *)keys->Get(iter ? other_code : code); + for (iter = 0; iter < 4; iter++) { + switch (iter) { + case 0: + findk = code; + break; + case 1: + findk = other_code; + break; + case 2: + findk = alt_code; + break; + case 3: + default: + findk = other_alt_code; + break; + } + key = (wxKeycode *)keys->Get(findk); while (key) { if (((key->code == code) || (key->checkOther - && (key->code == other_code))) + && ((key->code == other_code) + || (key->code == alt_code) + || (key->code == other_alt_code)))) && ((key->shiftOn && shift) || (key->shiftOff && !shift) || (!key->shiftOn && !key->shiftOff)) @@ -199,6 +217,12 @@ wxKeycode *wxKeymap::FindKey(long code, long other_code, || (!key->metaOn && !key->metaOff)) && key->seqprefix == prefix) { int score = key->score; + if (key->code != code) { + if (key->code == other_alt_code) + score -= 4; + else + score -= 2; + } if (score > bestScore) { bestKey = key; bestScore = score; @@ -208,6 +232,9 @@ wxKeycode *wxKeymap::FindKey(long code, long other_code, } } + if (_score) + *_score = bestScore; + return bestKey; } @@ -602,17 +629,20 @@ void wxKeymap::MapFunction(char *keys, char *fname) wxsKeymapError(buffer); } -int wxKeymap::HandleEvent(long code, long other_code, Bool shift, Bool ctrl, +int wxKeymap::HandleEvent(long code, long other_code, long alt_code, long other_alt_code, + Bool shift, Bool ctrl, Bool alt, Bool meta, int score, char **fname, int *fullset) { wxKeycode *key; + int found_score; - key = FindKey(code, other_code, shift, ctrl, alt, meta, prefix); + key = FindKey(code, other_code, alt_code, other_alt_code, + shift, ctrl, alt, meta, prefix, &found_score); prefix = NULL; - if (key && (key->score >= score)) { + if (key && (found_score >= score)) { if (key->isprefix) { prefix = key; *fname = NULL; @@ -627,22 +657,26 @@ int wxKeymap::HandleEvent(long code, long other_code, Bool shift, Bool ctrl, return 0; } -int wxKeymap::GetBestScore(long code, long other_code, Bool shift, Bool ctrl, +int wxKeymap::GetBestScore(long code, long other_code, long alt_code, long other_alt_code, + Bool shift, Bool ctrl, Bool alt, Bool meta) { wxKeycode *key; int s, i; + int score; - key = FindKey(code, other_code, shift, ctrl, alt, meta, prefix); + key = FindKey(code, other_code, alt_code, other_alt_code, + shift, ctrl, alt, meta, prefix, &score); if (key) - s = key->score; + s = score; else s = -1; for (i = 0; i < chainCount; i++) { int r; - r = chainTo[i]->GetBestScore(code, other_code, shift, ctrl, alt, meta); + r = chainTo[i]->GetBestScore(code, other_code, alt_code, other_alt_code, + shift, ctrl, alt, meta); if (r > s) s = r; } @@ -681,6 +715,8 @@ int wxKeymap::GetBestScore(wxKeyEvent *event) { return GetBestScore(event->keyCode, event->otherKeyCode, + event->altKeyCode, + event->otherAltKeyCode, event->shiftDown, event->controlDown, event->altDown, @@ -737,6 +773,8 @@ int wxKeymap::ChainHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event, if (HandleEvent(event->keyCode, event->otherKeyCode, + event->altKeyCode, + event->otherAltKeyCode, event->shiftDown, event->controlDown, event->altDown, @@ -829,7 +867,7 @@ int wxKeymap::GetBestScore(wxMouseEvent *event) } return GetBestScore(code, - -1, + -1, -1, -1, event->shiftDown, event->controlDown, event->altDown, @@ -930,7 +968,7 @@ int wxKeymap::ChainHandleMouseEvent(UNKNOWN_OBJ media, wxMouseEvent *event, do { if (HandleEvent(code, - -1, + -1, -1, -1, event->shiftDown, event->controlDown, event->altDown, diff --git a/src/mred/wxme/wx_keym.h b/src/mred/wxme/wx_keym.h index 4c981aca50..6b7734585f 100644 --- a/src/mred/wxme/wx_keym.h +++ b/src/mred/wxme/wx_keym.h @@ -62,10 +62,11 @@ class wxKeymap : public wxObject wxBreakSequenceFunction onBreak; void *onBreakData; - class wxKeycode *FindKey(long, long, Bool, Bool, Bool, Bool, class wxKeycode *); - int HandleEvent(long code, long, Bool shift, Bool ctrl, Bool alt, Bool meta, + class wxKeycode *FindKey(long, long, long, long, Bool, Bool, Bool, Bool, class wxKeycode *, int *_score); + int HandleEvent(long code, long, long, long, + Bool shift, Bool ctrl, Bool alt, Bool meta, int score, char **fname, int *fullset); - int GetBestScore(long code, long, Bool shift, Bool ctrl, Bool alt, Bool meta); + int GetBestScore(long code, long, long, long, Bool shift, Bool ctrl, Bool alt, Bool meta); Bool CycleCheck(wxKeymap *km); diff --git a/src/mred/wxs/wxs_evnt.cxx b/src/mred/wxs/wxs_evnt.cxx index cc7ae65023..592ed1b907 100644 --- a/src/mred/wxs/wxs_evnt.cxx +++ b/src/mred/wxs/wxs_evnt.cxx @@ -1460,6 +1460,10 @@ static Scheme_Object *bundle_symset_keyCode(int v) { static long GetOtherKey(wxKeyEvent *k) { return k->otherKeyCode; } static void SetOtherKey(wxKeyEvent *k, long c) { k->otherKeyCode = c; } +static long GetAltKey(wxKeyEvent *k) { return k->altKeyCode; } +static void SetAltKey(wxKeyEvent *k, long c) { k->altKeyCode = c; } +static long GetOtherAltKey(wxKeyEvent *k) { return k->otherAltKeyCode; } +static void SetOtherAltKey(wxKeyEvent *k, long c) { k->otherAltKeyCode = c; } @@ -1498,6 +1502,94 @@ os_wxKeyEvent::~os_wxKeyEvent() objscheme_destroy(this, (Scheme_Object *) __gc_external); } +static Scheme_Object *os_wxKeyEventSetOtherAltKey(int n, Scheme_Object *p[]) +{ + WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p) + REMEMBER_VAR_STACK(); + objscheme_check_valid(os_wxKeyEvent_class, "set-other-shift-altgr-key-code in key-event%", n, p); + long x0 INIT_NULLED_OUT; + + SETUP_VAR_STACK_REMEMBERED(2); + VAR_STACK_PUSH(0, p); + VAR_STACK_PUSH(1, x0); + + + x0 = (SCHEME_FALSEP(p[POFFSET+0]) ? 0 : unbundle_symset_keyCode(p[POFFSET+0], METHODNAME("key-event%","set-other-shift-altgr-key-code"))); + + + WITH_VAR_STACK(SetOtherAltKey(((wxKeyEvent *)((Scheme_Class_Object *)p[0])->primdata), x0)); + + + + READY_TO_RETURN; + return scheme_void; +} + +static Scheme_Object *os_wxKeyEventGetOtherAltKey(int n, Scheme_Object *p[]) +{ + WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p) + REMEMBER_VAR_STACK(); + long r; + objscheme_check_valid(os_wxKeyEvent_class, "get-other-shift-altgr-key-code in key-event%", n, p); + + SETUP_VAR_STACK_REMEMBERED(1); + VAR_STACK_PUSH(0, p); + + + + + r = WITH_VAR_STACK(GetOtherAltKey(((wxKeyEvent *)((Scheme_Class_Object *)p[0])->primdata))); + + + + READY_TO_RETURN; + return (r ? bundle_symset_keyCode(r) : scheme_false); +} + +static Scheme_Object *os_wxKeyEventSetAltKey(int n, Scheme_Object *p[]) +{ + WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p) + REMEMBER_VAR_STACK(); + objscheme_check_valid(os_wxKeyEvent_class, "set-other-altgr-key-code in key-event%", n, p); + long x0 INIT_NULLED_OUT; + + SETUP_VAR_STACK_REMEMBERED(2); + VAR_STACK_PUSH(0, p); + VAR_STACK_PUSH(1, x0); + + + x0 = (SCHEME_FALSEP(p[POFFSET+0]) ? 0 : unbundle_symset_keyCode(p[POFFSET+0], METHODNAME("key-event%","set-other-altgr-key-code"))); + + + WITH_VAR_STACK(SetAltKey(((wxKeyEvent *)((Scheme_Class_Object *)p[0])->primdata), x0)); + + + + READY_TO_RETURN; + return scheme_void; +} + +static Scheme_Object *os_wxKeyEventGetAltKey(int n, Scheme_Object *p[]) +{ + WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p) + REMEMBER_VAR_STACK(); + long r; + objscheme_check_valid(os_wxKeyEvent_class, "get-other-altgr-key-code in key-event%", n, p); + + SETUP_VAR_STACK_REMEMBERED(1); + VAR_STACK_PUSH(0, p); + + + + + r = WITH_VAR_STACK(GetAltKey(((wxKeyEvent *)((Scheme_Class_Object *)p[0])->primdata))); + + + + READY_TO_RETURN; + return (r ? bundle_symset_keyCode(r) : scheme_false); +} + static Scheme_Object *os_wxKeyEventSetOtherKey(int n, Scheme_Object *p[]) { WXS_USE_ARGUMENT(n) WXS_USE_ARGUMENT(p) @@ -1510,7 +1602,7 @@ static Scheme_Object *os_wxKeyEventSetOtherKey(int n, Scheme_Object *p[]) VAR_STACK_PUSH(1, x0); - x0 = (SCHEME_FALSEP(p[POFFSET+0]) ? 0 : unbundle_symset_keyCode(p[POFFSET+0], METHODNAME("key-event%","get-other-shift-key-code"))); + x0 = (SCHEME_FALSEP(p[POFFSET+0]) ? 0 : unbundle_symset_keyCode(p[POFFSET+0], METHODNAME("key-event%","set-other-shift-key-code"))); WITH_VAR_STACK(SetOtherKey(((wxKeyEvent *)((Scheme_Class_Object *)p[0])->primdata), x0)); @@ -1890,8 +1982,12 @@ void objscheme_setup_wxKeyEvent(Scheme_Env *env) wxREGGLOB(os_wxKeyEvent_class); - os_wxKeyEvent_class = WITH_VAR_STACK(objscheme_def_prim_class(env, "key-event%", "event%", (Scheme_Method_Prim *)os_wxKeyEvent_ConstructScheme, 18)); + os_wxKeyEvent_class = WITH_VAR_STACK(objscheme_def_prim_class(env, "key-event%", "event%", (Scheme_Method_Prim *)os_wxKeyEvent_ConstructScheme, 22)); + WITH_VAR_STACK(scheme_add_method_w_arity(os_wxKeyEvent_class, "set-other-shift-altgr-key-code" " method", (Scheme_Method_Prim *)os_wxKeyEventSetOtherAltKey, 1, 1)); + WITH_VAR_STACK(scheme_add_method_w_arity(os_wxKeyEvent_class, "get-other-shift-altgr-key-code" " method", (Scheme_Method_Prim *)os_wxKeyEventGetOtherAltKey, 0, 0)); + WITH_VAR_STACK(scheme_add_method_w_arity(os_wxKeyEvent_class, "set-other-altgr-key-code" " method", (Scheme_Method_Prim *)os_wxKeyEventSetAltKey, 1, 1)); + WITH_VAR_STACK(scheme_add_method_w_arity(os_wxKeyEvent_class, "get-other-altgr-key-code" " method", (Scheme_Method_Prim *)os_wxKeyEventGetAltKey, 0, 0)); WITH_VAR_STACK(scheme_add_method_w_arity(os_wxKeyEvent_class, "set-other-shift-key-code" " method", (Scheme_Method_Prim *)os_wxKeyEventSetOtherKey, 1, 1)); WITH_VAR_STACK(scheme_add_method_w_arity(os_wxKeyEvent_class, "get-other-shift-key-code" " method", (Scheme_Method_Prim *)os_wxKeyEventGetOtherKey, 0, 0)); diff --git a/src/mred/wxs/wxs_evnt.xc b/src/mred/wxs/wxs_evnt.xc index c95afd1d86..30df9c032e 100644 --- a/src/mred/wxs/wxs_evnt.xc +++ b/src/mred/wxs/wxs_evnt.xc @@ -221,9 +221,13 @@ wxMouseEvent_ext::wxMouseEvent_ext(int et, int ld, int mdd, int rd, int xv, int @ENDSYMBOLS @MACRO bKeyOrFalse = ({x} ? bundle_symset_keyCode({x}) : scheme_false) -@MACRO ubKeyOrFalse = (SCHEME_FALSEP({x}) ? 0 : unbundle_symset_keyCode({x}, METHODNAME("key-event%","get-other-shift-key-code"))) +@MACRO ubKeyOrFalse[name] = (SCHEME_FALSEP({x}) ? 0 : unbundle_symset_keyCode({x}, METHODNAME("key-event%",))) static long GetOtherKey(wxKeyEvent *k) { return k->otherKeyCode; } static void SetOtherKey(wxKeyEvent *k, long c) { k->otherKeyCode = c; } +static long GetAltKey(wxKeyEvent *k) { return k->altKeyCode; } +static void SetAltKey(wxKeyEvent *k, long c) { k->altKeyCode = c; } +static long GetOtherAltKey(wxKeyEvent *k) { return k->otherAltKeyCode; } +static void SetOtherAltKey(wxKeyEvent *k, long c) { k->otherAltKeyCode = c; } @CLASSBASE wxKeyEvent=wxKeyEvent_ext "key-event":"event" / nofnl @@ -241,7 +245,11 @@ static void SetOtherKey(wxKeyEvent *k, long c) { k->otherKeyCode = c; } @IVAR "y" : int y @ m "get-other-shift-key-code" : long/bKeyOrFalse GetOtherKey(); -@ m "set-other-shift-key-code" : void SetOtherKey(long//ubKeyOrFalse////push); +@ m "set-other-shift-key-code" : void SetOtherKey(long//ubKeyOrFalse["set-other-shift-key-code"]////push); +@ m "get-other-altgr-key-code" : long/bKeyOrFalse GetAltKey(); +@ m "set-other-altgr-key-code" : void SetAltKey(long//ubKeyOrFalse["set-other-altgr-key-code"]////push); +@ m "get-other-shift-altgr-key-code" : long/bKeyOrFalse GetOtherAltKey(); +@ m "set-other-shift-altgr-key-code" : void SetOtherAltKey(long//ubKeyOrFalse["set-other-shift-altgr-key-code"]////push); @END diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index bde1ba3984..b95f4eedfb 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,54,252,225,7,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,54,252,225,7,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,65,35,37,115,116, 120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,36,16,16,30, 3,2,2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2, @@ -99,7 +99,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,134,252,215,18,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,134,252,215,18,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,71,35,37,113,113, 45,97,110,100,45,111,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 98,159,34,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254, @@ -333,7 +333,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 4835); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,49,252,234,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,49,252,234,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37,99,111, 110,100,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34,16,0, 16,0,11,11,16,0,34,11,16,1,64,99,111,110,100,3,16,1,11,16,1, @@ -397,7 +397,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,25,252,68,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,25,252,68,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,73,35,37,115,116, 114,117,99,116,45,105,110,102,111,1,29,2,11,11,10,10,10,34,80,158,34, 34,20,98,159,34,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101, @@ -453,7 +453,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1104); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,37,252,208,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,37,252,208,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,71,35,37,100,115, 45,104,101,108,112,101,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 98,159,34,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117, @@ -516,7 +516,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1244); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,123,252,43,12,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,123,252,43,12,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,74,35,37,100,101, 102,105,110,101,45,101,116,45,97,108,1,29,2,11,11,10,10,10,34,80,158, 34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,6,64,119,104, @@ -668,7 +668,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 3127); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,21,252,37,1,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,21,252,37,1,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,74,35,37,115,109, 97,108,108,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34,80,158, 34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,13,64,99,111, @@ -686,7 +686,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 305); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,231,252,137,53,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,231,252,137,53,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,115,64,35,37,115,99, 1,29,2,11,11,10,10,18,95,11,37,96,35,8,254,1,11,16,2,64,115, 101,116,33,3,68,35,37,107,101,114,110,101,108,4,42,80,158,34,34,20,98, @@ -1343,7 +1343,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 13717); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,178,252,176,24,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,178,252,176,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,69,35,37,115,116, 120,99,97,115,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159, 34,16,6,30,3,2,2,1,26,100,97,116,117,109,45,62,115,121,110,116,97, @@ -1648,7 +1648,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 6332); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,82,252,192,6,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,82,252,192,6,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,35,37,115,116, 120,108,111,99,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,2,30,3,2,2,68,108,111,99,45,105,110,115,112,4,254,1,30,5,2, @@ -1734,7 +1734,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1740); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,101,252,191,8,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,101,252,198,8,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,70,35,37,119,105, 116,104,45,115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98, 159,35,16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45, @@ -1817,35 +1817,35 @@ 85,62,105,110,86,2,75,2,76,3,1,7,101,110,118,51,48,53,50,87,2, 87,2,87,2,87,2,87,18,101,2,78,48,38,37,36,35,45,44,16,4,47, 11,63,105,110,115,88,3,1,7,101,110,118,51,48,54,52,89,18,16,2,158, -2,78,48,49,18,102,2,31,51,38,37,36,35,45,44,47,16,8,50,11,64, -116,109,112,115,90,65,104,101,114,101,115,91,64,111,117,116,115,92,3,1,7, -101,110,118,51,48,54,55,93,2,93,2,93,18,158,161,36,103,2,0,53,38, -37,36,35,45,44,47,50,16,4,52,11,2,19,3,1,7,101,110,118,51,48, -55,50,94,158,2,20,53,2,21,53,53,11,97,83,159,34,93,80,159,34,41, -35,89,162,34,35,44,9,223,0,248,247,22,252,100,3,28,248,22,47,195,249, -22,215,11,87,94,83,160,36,11,80,158,37,35,248,22,176,80,158,38,35,248, -22,48,250,22,252,190,1,6,4,4,126,97,126,115,95,200,80,158,41,35,28, -248,22,252,142,1,195,249,22,215,11,87,94,83,160,36,11,80,158,37,35,248, -22,176,80,158,38,35,248,22,48,250,22,252,190,1,2,95,200,80,158,41,35, -28,248,80,158,36,40,195,249,22,215,11,27,248,22,216,198,87,94,83,160,36, -11,80,158,38,35,248,22,176,80,158,39,35,248,22,48,250,22,252,190,1,2, -95,196,80,158,42,35,249,22,215,11,87,94,83,160,36,11,80,158,37,35,248, -22,176,80,158,38,35,248,22,48,250,22,252,190,1,2,95,64,116,101,109,112, -96,80,158,41,35,83,159,34,93,80,159,34,34,35,32,97,89,162,34,35,38, -2,4,222,250,22,252,45,2,2,18,6,20,20,98,105,110,100,105,110,103,32, -109,97,116,99,104,32,102,97,105,108,101,100,98,195,83,159,34,93,80,158,34, -35,34,83,159,34,93,80,159,34,36,35,89,162,34,35,40,2,8,223,0,87, -94,83,160,36,11,80,158,34,35,248,22,176,80,158,35,35,248,22,48,250,22, -252,190,1,2,95,197,80,158,38,35,83,159,34,93,80,159,34,37,35,89,162, -34,35,39,2,10,223,0,87,94,28,248,80,158,35,38,194,12,250,22,252,46, -2,2,10,6,11,11,115,121,110,116,97,120,32,112,97,105,114,99,196,27,248, -80,158,36,39,195,249,22,2,80,159,37,41,35,194,97,68,35,37,107,101,114, -110,101,108,100,2,12,2,49,2,65,2,52,98,2,100,2,52,2,49,2,63, -2,67,2,66,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2251); +2,78,48,49,18,102,2,31,52,38,37,36,35,45,44,16,4,51,11,2,88, +2,89,16,8,50,11,64,116,109,112,115,90,65,104,101,114,101,115,91,64,111, +117,116,115,92,3,1,7,101,110,118,51,48,54,55,93,2,93,2,93,18,158, +161,36,103,2,0,54,38,37,36,35,45,44,51,50,16,4,53,11,2,19,3, +1,7,101,110,118,51,48,55,50,94,158,2,20,54,2,21,54,54,11,97,83, +159,34,93,80,159,34,41,35,89,162,34,35,44,9,223,0,248,247,22,252,100, +3,28,248,22,47,195,249,22,215,11,87,94,83,160,36,11,80,158,37,35,248, +22,176,80,158,38,35,248,22,48,250,22,252,190,1,6,4,4,126,97,126,115, +95,200,80,158,41,35,28,248,22,252,142,1,195,249,22,215,11,87,94,83,160, +36,11,80,158,37,35,248,22,176,80,158,38,35,248,22,48,250,22,252,190,1, +2,95,200,80,158,41,35,28,248,80,158,36,40,195,249,22,215,11,27,248,22, +216,198,87,94,83,160,36,11,80,158,38,35,248,22,176,80,158,39,35,248,22, +48,250,22,252,190,1,2,95,196,80,158,42,35,249,22,215,11,87,94,83,160, +36,11,80,158,37,35,248,22,176,80,158,38,35,248,22,48,250,22,252,190,1, +2,95,64,116,101,109,112,96,80,158,41,35,83,159,34,93,80,159,34,34,35, +32,97,89,162,34,35,38,2,4,222,250,22,252,45,2,2,18,6,20,20,98, +105,110,100,105,110,103,32,109,97,116,99,104,32,102,97,105,108,101,100,98,195, +83,159,34,93,80,158,34,35,34,83,159,34,93,80,159,34,36,35,89,162,34, +35,40,2,8,223,0,87,94,83,160,36,11,80,158,34,35,248,22,176,80,158, +35,35,248,22,48,250,22,252,190,1,2,95,197,80,158,38,35,83,159,34,93, +80,159,34,37,35,89,162,34,35,39,2,10,223,0,87,94,28,248,80,158,35, +38,194,12,250,22,252,46,2,2,10,6,11,11,115,121,110,116,97,120,32,112, +97,105,114,99,196,27,248,80,158,36,39,195,249,22,2,80,159,37,41,35,194, +97,68,35,37,107,101,114,110,101,108,100,2,12,2,49,2,65,2,52,98,2, +100,2,52,2,49,2,63,2,67,2,66,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2258); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,208,252,16,25,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,208,252,226,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,76,35,37,115,116, 120,99,97,115,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34, 80,158,34,34,20,98,159,34,16,2,30,3,2,2,1,26,99,104,101,99,107, @@ -2095,67 +2095,64 @@ 180,2,180,2,180,2,180,16,12,8,41,11,2,87,2,168,67,107,101,121,119, 111,114,100,181,2,171,2,172,3,1,7,101,110,118,51,50,52,55,182,2,182, 2,182,2,182,2,182,18,16,2,158,2,77,8,44,8,45,18,16,2,158,2, -133,8,44,8,46,18,158,95,102,2,165,8,51,38,37,36,8,43,16,12,8, -50,11,2,175,2,176,2,177,2,178,2,179,2,180,2,180,2,180,2,180,2, -180,16,12,8,49,11,2,87,2,168,2,181,2,171,2,172,2,182,2,182,2, -182,2,182,2,182,16,4,8,48,11,3,1,4,103,53,54,57,183,3,1,7, -101,110,118,51,50,54,54,184,16,4,8,47,11,2,170,3,1,7,101,110,118, -51,50,54,55,185,158,94,10,2,166,8,51,158,164,10,2,167,2,162,10,2, -166,2,163,2,169,2,164,8,51,8,51,18,158,95,10,158,2,158,2,159,95, -2,23,2,166,2,160,8,51,18,16,2,96,2,46,8,53,93,8,252,3,11, -16,4,8,52,11,2,89,3,1,7,101,110,118,51,50,55,49,186,95,9,8, -252,3,11,2,38,18,16,2,158,94,98,2,170,8,57,93,8,252,250,10,16, -4,8,56,11,3,1,8,119,115,116,109,112,53,54,55,187,3,1,7,101,110, -118,51,50,53,57,188,16,4,8,55,11,3,1,4,103,53,54,56,189,3,1, -7,101,110,118,51,50,55,54,190,16,4,8,54,11,2,142,3,1,7,101,110, -118,51,50,55,55,191,158,2,46,8,57,8,57,95,9,8,252,250,10,2,33, -11,16,5,93,2,13,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35, -41,9,223,0,251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103, -53,56,49,192,3,1,4,103,53,56,48,193,248,22,58,198,248,22,84,198,89, -162,34,35,48,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248, -80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80, -158,40,38,27,248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,65,248, -80,158,43,40,194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248, -22,8,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9, -224,4,5,249,80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248, -80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80, -158,42,35,248,80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11, -11,194,248,80,158,39,40,196,28,248,22,63,193,21,93,9,248,80,158,37,43, -193,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, -27,248,22,94,197,28,249,22,4,80,158,41,44,248,22,222,249,80,158,44,45, -20,15,159,44,34,49,199,249,80,158,41,46,200,27,251,22,67,202,201,200,199, -250,80,158,45,47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15, -159,40,35,49,21,95,3,1,4,103,53,56,52,194,3,1,4,103,53,56,51, -195,3,1,4,103,53,56,50,196,248,22,58,198,248,22,84,198,250,22,2,80, -159,43,54,35,248,22,93,201,248,22,94,201,21,94,1,21,109,97,107,101,45, -115,101,116,33,45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93, -2,166,100,2,167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95, -2,23,2,166,2,172,2,46,20,15,159,45,37,49,250,22,252,45,2,11,2, -50,201,250,22,252,45,2,11,2,50,197,34,20,98,159,35,16,15,2,51,2, -53,2,55,2,57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119, -2,71,2,73,2,75,16,4,18,100,2,133,8,61,38,37,36,16,4,8,60, -11,2,166,3,1,7,101,110,118,51,50,56,49,198,16,10,8,59,11,3,1, -4,103,53,55,54,199,3,1,4,103,53,55,55,200,3,1,4,103,53,55,56, -201,3,1,4,103,53,55,57,202,3,1,7,101,110,118,51,50,57,52,203,2, -203,2,203,2,203,16,10,8,58,11,2,87,2,168,2,171,2,172,3,1,7, -101,110,118,51,50,57,53,204,2,204,2,204,2,204,18,158,95,10,2,197,95, -2,165,93,2,166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,61, -18,158,95,10,2,192,95,2,23,2,166,2,193,8,61,18,16,2,96,2,46, -8,63,93,8,252,27,11,16,4,8,62,11,2,89,3,1,7,101,110,118,51, -51,48,53,205,95,9,8,252,27,11,2,38,11,93,83,159,34,93,80,159,34, -34,35,89,162,34,35,37,2,4,223,0,248,22,8,89,162,8,36,35,40,9, -224,1,2,27,247,22,116,87,94,249,22,3,89,162,8,36,35,45,9,226,4, -3,5,2,87,94,28,248,80,158,38,35,197,12,250,22,252,46,2,2,4,6, -19,19,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115, -206,197,27,250,22,122,196,248,22,216,201,9,87,94,28,249,22,5,89,162,8, -36,35,38,9,223,7,249,22,227,195,194,194,248,195,198,12,250,22,121,196,248, -22,216,201,249,22,57,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207, -2,78,2,6,2,38,2,33,2,37,98,2,207,2,78,2,6,2,38,2,33, -2,37,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6428); +133,8,44,8,46,18,158,95,102,2,165,8,49,38,37,36,8,43,8,42,8, +41,16,4,8,48,11,3,1,4,103,53,54,57,183,3,1,7,101,110,118,51, +50,54,54,184,16,4,8,47,11,2,170,3,1,7,101,110,118,51,50,54,55, +185,158,94,10,2,166,8,49,158,164,10,2,167,2,162,10,2,166,2,163,2, +169,2,164,8,49,8,49,18,158,95,10,158,2,158,2,159,95,2,23,2,166, +2,160,8,49,18,16,2,96,2,46,8,51,93,8,252,3,11,16,4,8,50, +11,2,89,3,1,7,101,110,118,51,50,55,49,186,95,9,8,252,3,11,2, +38,18,16,2,158,94,98,2,170,8,55,93,8,252,250,10,16,4,8,54,11, +3,1,8,119,115,116,109,112,53,54,55,187,3,1,7,101,110,118,51,50,53, +57,188,16,4,8,53,11,3,1,4,103,53,54,56,189,3,1,7,101,110,118, +51,50,55,54,190,16,4,8,52,11,2,142,3,1,7,101,110,118,51,50,55, +55,191,158,2,46,8,55,8,55,95,9,8,252,250,10,2,33,11,16,5,93, +2,13,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35,41,9,223,0, +251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103,53,56,49,192, +3,1,4,103,53,56,48,193,248,22,58,198,248,22,84,198,89,162,34,35,48, +9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, +197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27, +248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,65,248,80,158,43,40, +194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22,8,89,162, +34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249, +80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36, +199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248, +80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11,11,194,248,80, +158,39,40,196,28,248,22,63,193,21,93,9,248,80,158,37,43,193,11,11,11, +28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94, +197,28,249,22,4,80,158,41,44,248,22,222,249,80,158,44,45,20,15,159,44, +34,49,199,249,80,158,41,46,200,27,251,22,67,202,201,200,199,250,80,158,45, +47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15,159,40,35,49, +21,95,3,1,4,103,53,56,52,194,3,1,4,103,53,56,51,195,3,1,4, +103,53,56,50,196,248,22,58,198,248,22,84,198,250,22,2,80,159,43,54,35, +248,22,93,201,248,22,94,201,21,94,1,21,109,97,107,101,45,115,101,116,33, +45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93,2,166,100,2, +167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95,2,23,2,166, +2,172,2,46,20,15,159,45,37,49,250,22,252,45,2,11,2,50,201,250,22, +252,45,2,11,2,50,197,34,20,98,159,35,16,15,2,51,2,53,2,55,2, +57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119,2,71,2,73, +2,75,16,4,18,100,2,133,8,59,38,37,36,16,4,8,58,11,2,166,3, +1,7,101,110,118,51,50,56,49,198,16,10,8,57,11,3,1,4,103,53,55, +54,199,3,1,4,103,53,55,55,200,3,1,4,103,53,55,56,201,3,1,4, +103,53,55,57,202,3,1,7,101,110,118,51,50,57,52,203,2,203,2,203,2, +203,16,10,8,56,11,2,87,2,168,2,171,2,172,3,1,7,101,110,118,51, +50,57,53,204,2,204,2,204,2,204,18,158,95,10,2,197,95,2,165,93,2, +166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,59,18,158,95,10, +2,192,95,2,23,2,166,2,193,8,59,18,16,2,96,2,46,8,61,93,8, +252,27,11,16,4,8,60,11,2,89,3,1,7,101,110,118,51,51,48,53,205, +95,9,8,252,27,11,2,38,11,93,83,159,34,93,80,159,34,34,35,89,162, +34,35,37,2,4,223,0,248,22,8,89,162,8,36,35,40,9,224,1,2,27, +247,22,116,87,94,249,22,3,89,162,8,36,35,45,9,226,4,3,5,2,87, +94,28,248,80,158,38,35,197,12,250,22,252,46,2,2,4,6,19,19,108,105, +115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115,206,197,27,250, +22,122,196,248,22,216,201,9,87,94,28,249,22,5,89,162,8,36,35,38,9, +223,7,249,22,227,195,194,194,248,195,198,12,250,22,121,196,248,22,216,201,249, +22,57,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207,2,78,2,6, +2,38,2,33,2,37,98,2,207,2,78,2,6,2,38,2,33,2,37,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6382); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,112,252,186,12,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,112,252,186,12,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,67,35,37,113,113, 115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34,16, 2,30,3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45, @@ -2314,7 +2311,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 3270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,204,252,159,24,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,204,252,159,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,35,37,100,101, 102,105,110,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,0,16,0,11,11,16,0,34,11,16,4,76,98,101,103,105,110,45,102,111, @@ -2369,10 +2366,10 @@ 32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114,111,99, 101,100,117,114,101,32,98,111,100,121,41,14,203,12,27,249,22,215,20,15,159, 43,45,49,204,27,249,22,215,20,15,159,44,46,49,196,27,249,22,215,20,15, -159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,67,199,200,198,252, +159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,67,200,198,199,252, 80,158,51,42,20,15,159,51,48,49,21,95,3,1,4,103,54,53,51,15,3, -1,4,103,54,53,49,16,3,1,4,103,54,53,50,17,248,22,84,198,248,22, -58,198,248,22,86,198,250,22,252,45,2,11,2,11,197,83,159,34,93,80,159, +1,4,103,54,53,49,16,3,1,4,103,54,53,50,17,248,22,58,198,248,22, +86,198,248,22,84,198,250,22,252,45,2,11,2,11,197,83,159,34,93,80,159, 34,8,38,35,89,162,34,36,45,73,103,101,110,101,114,97,108,45,112,114,111, 116,111,18,223,0,27,249,22,215,20,15,159,37,43,49,197,27,28,248,80,158, 37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, @@ -2465,34 +2462,34 @@ 110,118,51,52,55,48,79,2,79,2,79,16,8,43,11,61,95,80,65,112,114, 111,116,111,81,64,98,111,100,121,82,3,1,7,101,110,118,51,52,55,49,83, 2,83,2,83,16,6,42,11,2,22,2,18,3,1,7,101,110,118,51,52,55, -57,84,2,84,18,104,64,100,101,115,116,85,49,39,38,37,36,35,44,43,16, -6,48,11,2,22,2,18,2,84,2,84,16,6,47,11,3,1,4,103,54,50, -48,86,3,1,4,103,54,50,49,87,3,1,7,101,110,118,51,52,56,54,88, -2,88,16,6,46,11,62,105,100,89,63,97,114,103,90,3,1,7,101,110,118, -51,52,56,55,91,2,91,18,16,2,158,2,70,49,50,18,158,160,10,66,108, -97,109,98,100,97,92,2,23,2,24,49,18,104,2,85,53,39,38,37,36,35, -44,43,48,16,8,52,11,3,1,4,103,54,49,55,93,3,1,4,103,54,49, -56,94,3,1,4,103,54,49,57,95,3,1,7,101,110,118,51,53,49,54,96, -2,96,2,96,16,8,51,11,2,89,2,90,64,114,101,115,116,97,3,1,7, -101,110,118,51,53,49,55,98,2,98,2,98,18,16,2,158,93,103,2,25,8, -27,98,8,26,10,34,11,95,159,68,35,37,112,97,114,97,109,122,99,9,11, -159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,100,9,11,159,2, -37,9,11,16,14,66,115,121,110,116,97,120,101,29,102,11,11,73,115,121,110, -116,97,120,45,99,97,115,101,42,42,103,2,102,2,51,2,102,2,56,2,102, -1,20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111, -114,104,2,102,78,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117, -116,101,105,2,102,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112, -106,2,102,98,59,10,35,11,95,159,64,35,37,115,99,107,9,11,159,2,100, -9,11,159,2,37,9,11,16,0,96,58,8,254,1,11,16,0,16,4,57,11, -61,120,108,3,1,6,101,110,118,52,53,52,109,16,4,56,11,68,104,101,114, -101,45,115,116,120,110,3,1,6,101,110,118,52,53,54,111,16,4,55,11,2, -110,2,111,13,16,4,35,2,102,2,50,11,93,8,252,198,11,16,4,54,11, -61,114,112,3,1,7,101,110,118,51,53,50,52,113,8,27,95,9,8,252,198, -11,2,50,18,16,2,158,2,70,53,8,28,18,158,160,10,2,92,2,26,2, -27,53,18,16,2,158,2,70,45,8,29,18,158,160,35,104,2,19,8,32,39, -38,37,36,35,44,43,42,16,8,8,31,11,3,1,4,103,54,51,53,114,3, +57,84,2,84,18,104,64,100,101,115,116,85,48,39,38,37,36,35,44,43,42, +16,6,47,11,3,1,4,103,54,50,48,86,3,1,4,103,54,50,49,87,3, +1,7,101,110,118,51,52,56,54,88,2,88,16,6,46,11,62,105,100,89,63, +97,114,103,90,3,1,7,101,110,118,51,52,56,55,91,2,91,18,16,2,158, +2,70,48,49,18,158,160,10,66,108,97,109,98,100,97,92,2,23,2,24,48, +18,104,2,85,52,39,38,37,36,35,44,43,42,16,8,51,11,3,1,4,103, +54,49,55,93,3,1,4,103,54,49,56,94,3,1,4,103,54,49,57,95,3, +1,7,101,110,118,51,53,49,54,96,2,96,2,96,16,8,50,11,2,89,2, +90,64,114,101,115,116,97,3,1,7,101,110,118,51,53,49,55,98,2,98,2, +98,18,16,2,158,93,103,2,25,8,26,98,59,10,34,11,95,159,68,35,37, +112,97,114,97,109,122,99,9,11,159,74,35,37,115,109,97,108,108,45,115,99, +104,101,109,101,100,9,11,159,2,37,9,11,16,14,66,115,121,110,116,97,120, +101,29,102,11,11,73,115,121,110,116,97,120,45,99,97,115,101,42,42,103,2, +102,2,51,2,102,2,56,2,102,1,20,99,97,116,99,104,45,101,108,108,105, +112,115,105,115,45,101,114,114,111,114,104,2,102,78,112,97,116,116,101,114,110, +45,115,117,98,115,116,105,116,117,116,101,105,2,102,75,115,117,98,115,116,105, +116,117,116,101,45,115,116,111,112,106,2,102,98,58,10,35,11,95,159,64,35, +37,115,99,107,9,11,159,2,100,9,11,159,2,37,9,11,16,0,96,57,8, +254,1,11,16,0,16,4,56,11,61,120,108,3,1,6,101,110,118,52,53,52, +109,16,4,55,11,68,104,101,114,101,45,115,116,120,110,3,1,6,101,110,118, +52,53,54,111,16,4,54,11,2,110,2,111,13,16,4,35,2,102,2,50,11, +93,8,252,198,11,16,4,53,11,61,114,112,3,1,7,101,110,118,51,53,50, +52,113,8,26,95,9,8,252,198,11,2,50,18,16,2,158,2,70,52,8,27, +18,158,160,10,2,92,2,26,2,27,52,18,16,2,158,2,70,45,8,28,18, +158,160,35,104,2,19,8,32,39,38,37,36,35,44,43,16,6,8,31,11,2, +22,2,18,2,84,2,84,16,8,8,30,11,3,1,4,103,54,51,53,114,3, 1,4,103,54,51,54,115,3,1,4,103,54,51,55,116,3,1,7,101,110,118, -51,53,53,51,117,2,117,2,117,16,8,8,30,11,69,115,111,109,101,116,104, +51,53,53,51,117,2,117,2,117,16,8,8,29,11,69,115,111,109,101,116,104, 105,110,103,118,64,109,111,114,101,119,2,97,3,1,7,101,110,118,51,53,53, 52,120,2,120,2,120,2,20,8,32,8,32,18,102,2,70,8,34,39,38,37, 36,35,44,43,16,6,8,33,11,2,89,66,109,107,45,114,104,115,121,3,1, @@ -2618,7 +2615,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 6315); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,252,254,1,252,96,67,159,34,20,98,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,252,254,1,252,96,67,159,34,20,98,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,73,35,37, 109,111,114,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,48,80, 158,34,34,20,98,159,34,16,28,30,3,2,2,74,115,116,114,117,99,116,58, @@ -3444,7 +3441,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 17262); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,252,243,1,252,88,52,159,34,20,98,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,252,243,1,252,88,52,159,34,20,98,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37, 109,105,115,99,1,29,2,11,11,10,10,10,46,80,158,34,34,20,98,159,39, 16,47,30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254, @@ -4086,7 +4083,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 13414); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,20,252,183,1,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,20,252,183,1,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,72,35,37,115,116, 120,109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,37,98,35,10,34, 11,94,159,68,35,37,100,101,102,105,110,101,3,9,11,159,76,35,37,115,116, @@ -4111,7 +4108,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 451); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,95,252,202,6,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,95,252,202,6,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,109,122,115,99, 104,101,109,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,0,16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10, @@ -4198,7 +4195,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1750); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,134,252,16,13,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,134,252,16,13,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37,114,53, 114,115,1,29,2,11,11,10,10,10,35,80,158,34,34,20,98,159,34,16,1, 30,3,2,2,69,117,110,100,101,102,105,110,101,100,4,254,1,16,0,11,11, @@ -4361,7 +4358,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 3356); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,5,89,159,34,20,98,159,34,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,5,89,159,34,20,98,159,34,16,1,20,24,65, 98,101,103,105,110,0,16,0,83,160,42,80,158,34,34,34,18,158,94,96,67, 114,101,113,117,105,114,101,1,36,10,11,158,96,10,64,111,110,108,121,2,68, 109,122,115,99,104,101,109,101,3,1,22,110,97,109,101,115,112,97,99,101,45, @@ -4369,7 +4366,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 99); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,3,74,159,35,20,98,159,34,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,3,74,159,35,20,98,159,34,16,1,20,24,65, 98,101,103,105,110,0,16,0,87,94,248,22,247,68,109,122,115,99,104,101,109, 101,1,83,160,42,80,158,34,34,35,18,158,94,96,78,114,101,113,117,105,114, 101,45,102,111,114,45,115,121,110,116,97,120,2,36,10,11,158,2,1,36,36, @@ -4377,7 +4374,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 84); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,56,2,67,159,38,20,98,159,34,16,0,16,0,248, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,57,2,67,159,38,20,98,159,34,16,0,16,0,248, 22,239,248,249,22,241,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45, 115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, 114,101,115,111,108,118,101,114,1,247,22,252,218,2,0}; diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index e60e9bfd96..2ce5d0db8b 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 352 -#define MZSCHEME_VERSION_MINOR 8 +#define MZSCHEME_VERSION_MINOR 9 -#define MZSCHEME_VERSION "352.8" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "352.9" _MZ_SPECIAL_TAG diff --git a/src/worksp/libmzgc/libmzgc.vcproj b/src/worksp/libmzgc/libmzgc.vcproj index 729287e09e..3afeb8f6d5 100644 --- a/src/worksp/libmzgc/libmzgc.vcproj +++ b/src/worksp/libmzgc/libmzgc.vcproj @@ -3,7 +3,7 @@ ProjectType="Visual C++" Version="8.00" Name="libmzgc" - ProjectGUID="{CB68718B-24BF-43E3-9E96-BCF9B37CFE2D}" + ProjectGUID="{66548E7B-294E-40EF-B7C0-C8D6D7E6234F}" > keyUpCode = key; } theKeyEvent->otherKeyCode = otherKey; + theKeyEvent->altKeyCode = optKey; + theKeyEvent->otherAltKeyCode = otherOptKey; { wxWindow *in_win; diff --git a/src/wxwindow/include/base/wx_stdev.h b/src/wxwindow/include/base/wx_stdev.h index 90ef993293..a2f2ca99b9 100644 --- a/src/wxwindow/include/base/wx_stdev.h +++ b/src/wxwindow/include/base/wx_stdev.h @@ -184,11 +184,13 @@ class wxKeyEvent: public wxEvent long keyCode; long keyUpCode; long otherKeyCode; + long altKeyCode; + long otherAltKeyCode; Bool controlDown; Bool shiftDown; Bool altDown; Bool metaDown; - + wxKeyEvent(WXTYPE keyType = 0); virtual Bool ControlDown(void); diff --git a/src/wxwindow/src/msw/wx_win.cxx b/src/wxwindow/src/msw/wx_win.cxx index e825e01697..e86c395158 100644 --- a/src/wxwindow/src/msw/wx_win.cxx +++ b/src/wxwindow/src/msw/wx_win.cxx @@ -33,6 +33,8 @@ extern long last_msg_time; /* timeStamp implementation */ extern int WM_IS_MRED; +static int sakc_initialized; + static void wxDoOnMouseLeave(wxWindow *wx_window, int x, int y, UINT flags); static void wxDoOnMouseEnter(wxWindow *wx_window, int x, int y, UINT flags); @@ -866,6 +868,9 @@ static LONG WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, in wnd->last_lparam = lParam; switch (message) { + case WM_INPUTLANGCHANGE: + sakc_initialized = 0; + break; case WM_COPYDATA: wxCopyData(lParam); retval = 0; @@ -2022,17 +2027,36 @@ static int dot_scan_code; static int generic_ascii_code[256]; -static const char *find_shift_alts = "!@#$%^&*()_+-=\\|[]{}:\";',.<>/?~`"; -static int shift_alt_key_codes[36], sakc_initialized; +/* The characters in find_shift_alts are things that we'll try + to include in keyboard events as char-if-Shift-weren't-pressed, + char-if-AltGr-weren't-pressed, etc. */ +static const char *find_shift_alts = ("!@#$%^&*()_+-=\\|[]{}:\";',.<>/?~`" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789"); +static int other_key_codes[98]; + +static void init_sakc() +{ + int j; + + if (!sakc_initialized) { + for (j = 0; find_shift_alts[j]; j++) { + other_key_codes[j] = VkKeyScan(find_shift_alts[j]); + } + sakc_initialized = 1; + } +} #define THE_SCAN_CODE(lParam) ((((unsigned long)lParam) >> 16) & 0x1FF) wxKeyEvent *wxMakeCharEvent(BOOL just_check, WORD wParam, LPARAM lParam, Bool isASCII, Bool isRelease, HWND handle) { - int id, other_id = 0; - Bool tempControlDown, tempAltDown; + int id, other_id = 0, other_alt_id = 0, alt_id = 0; + Bool tempControlDown, tempAltDown, tempShiftDown; tempControlDown = (::GetKeyState(VK_CONTROL) >> 1); + tempShiftDown = (::GetKeyState(VK_SHIFT) >> 1); tempAltDown = ((HIWORD(lParam) & KF_ALTDOWN) == KF_ALTDOWN); if (isASCII) { @@ -2044,6 +2068,39 @@ wxKeyEvent *wxMakeCharEvent(BOOL just_check, WORD wParam, LPARAM lParam, Bool is sc = THE_SCAN_CODE(lParam); if ((id >= 0) && (id <= 255)) generic_ascii_code[id] = sc; + + { + /* Look for elements of find_shift_alts that have a different + shift/AltGr state: */ + short k; + k = MapVirtualKey(sc, 1); + if (k) { + int j; + init_sakc(); + for (j = 0; find_shift_alts[j]; j++) { + if ((other_key_codes[j] & 0xFF) == k) { + /* Figure out whether it's different in the shift + for AltGr dimension, or both: */ + if (!((other_key_codes[j] & 0x100) != !tempShiftDown)) { + /* shift is different */ + if (((other_key_codes[j] & 0x600) == 0x600) + == (tempControlDown && tempAltDown)) + other_id = find_shift_alts[j]; + else + other_alt_id = find_shift_alts[j]; + } else { + /* Shift is the same */ + if (((other_key_codes[j] & 0x600) == 0x600) + == (tempControlDown && tempAltDown)) { + /* Shift and ctrl-alt states are the same. + Hopefully, so is the character! */ + } else + alt_id = find_shift_alts[j]; + } + } + } + } + } } else { int override_mapping = (tempControlDown && !tempAltDown); @@ -2051,31 +2108,49 @@ wxKeyEvent *wxMakeCharEvent(BOOL just_check, WORD wParam, LPARAM lParam, Bool is if (override_mapping || isRelease) { int j; - id = MapVirtualKey(wParam, 2); + /* Non-AltGr Ctl- combination, or a release event: + Map manually, because the default mapping is + unsatisfactory. */ + + /* Set id to the unshifted key: */ + id = MapVirtualKeyW(wParam, 2); id &= 0xFFFF; if (!id) id = -1; - else if (id < 128) - id = tolower(id); + else { + if (id < 128) + id = tolower(id); + } /* Look for shifted alternate: */ - if (!sakc_initialized) { - for (j = 0; find_shift_alts[j]; j++) { - shift_alt_key_codes[j] = VkKeyScan(find_shift_alts[j]) & 0xFF; - } - } + init_sakc(); for (j = 0; find_shift_alts[j]; j++) { - if (shift_alt_key_codes[j] == wParam) { - if (find_shift_alts[j] != id) { - other_id = find_shift_alts[j]; - } + if ((other_key_codes[j] & 0xFF) == wParam) { + if (other_key_codes[j] & 0x100) { + if ((other_key_codes[j] & 0x600) == 0x600) + other_alt_id = find_shift_alts[j]; + else + other_id = find_shift_alts[j]; + } else if ((other_key_codes[j] & 0x600) == 0x600) { + alt_id = find_shift_alts[j]; + } } } - + + if ((id > -1) && tempShiftDown) { + /* shift was pressed, so swap role of shifted and unshifted */ + int t; + t = id; + id = other_id; + other_id = t; + t = other_alt_id; + other_alt_id = alt_id; + alt_id = t; + } } else id = -1; } else { - /* Don't generat control-key down events: */ + /* Don't generate control-key down events: */ if (!isRelease && (wParam == VK_CONTROL)) return NULL; @@ -2122,7 +2197,7 @@ wxKeyEvent *wxMakeCharEvent(BOOL just_check, WORD wParam, LPARAM lParam, Bool is event = new wxKeyEvent(wxEVENT_TYPE_CHAR); - if (::GetKeyState(VK_SHIFT) >> 1) + if (tempShiftDown) event->shiftDown = TRUE; if (tempControlDown) event->controlDown = TRUE; @@ -2132,6 +2207,8 @@ wxKeyEvent *wxMakeCharEvent(BOOL just_check, WORD wParam, LPARAM lParam, Bool is event->keyCode = (isRelease ? WXK_RELEASE : id); event->keyUpCode = (isRelease ? id : WXK_PRESS); event->otherKeyCode = other_id; + event->altKeyCode = alt_id; + event->otherAltKeyCode = other_alt_id; event->SetTimestamp(last_msg_time); GetCursorPos(&pt); diff --git a/src/wxxt/src/EventHandling/wx_stdev.h b/src/wxxt/src/EventHandling/wx_stdev.h index 9cb1be051f..842ef535c8 100644 --- a/src/wxxt/src/EventHandling/wx_stdev.h +++ b/src/wxxt/src/EventHandling/wx_stdev.h @@ -129,6 +129,8 @@ class wxKeyEvent: public wxEvent long keyCode; long keyUpCode; long otherKeyCode; + long altKeyCode; + long otherAltKeyCode; Bool controlDown; Bool shiftDown; Bool altDown; diff --git a/src/wxxt/src/Windows/Window.cc b/src/wxxt/src/Windows/Window.cc index e724f69772..0326bdcfd3 100644 --- a/src/wxxt/src/Windows/Window.cc +++ b/src/wxxt/src/Windows/Window.cc @@ -1600,7 +1600,8 @@ static int extract_string_key(char *str, int slen) #endif } -Status wxWindow::LookupKey(int unshifted, Widget w, wxWindow *win, XEvent *xev, KeySym *_keysym, char *str, int *_len) +Status wxWindow::LookupKey(int unshifted, int unalted, + Widget w, wxWindow *win, XEvent *xev, KeySym *_keysym, char *str, int *_len) { KeySym keysym; Status status; @@ -1614,6 +1615,18 @@ Status wxWindow::LookupKey(int unshifted, Widget w, wxWindow *win, XEvent *xev, else evt.state |= ShiftMask; } + if (unalted) { + if (!(evt.state & Mod1Mask) == !(evt.state & ControlMask)) { + if (evt.state & Mod1Mask) + evt.state -= Mod1Mask; + else + evt.state |= Mod1Mask; + if (evt.state & ControlMask) + evt.state -= ControlMask; + else + evt.state |= ControlMask; + } + } #ifndef NO_XMB_LOOKUP_STRING if (!the_im) { @@ -1653,6 +1666,18 @@ Status wxWindow::LookupKey(int unshifted, Widget w, wxWindow *win, XEvent *xev, return status; } +static int status_to_kc(Status status, XEvent *xev, KeySym keysym, char *str, int slen) +{ + if (XMB_STR_PREFERRED_STATUS(status, xev)) + return extract_string_key(str, slen); + else if (XMB_KC_STATUS(status)) + return CharCodeXToWX(keysym); + else if (XMB_STR_STATUS(status)) + return extract_string_key(str, slen); + else + return 0; +} + void wxWindow::WindowEventHandler(Widget w, wxWindow **winp, XEvent *xev, @@ -1715,16 +1740,18 @@ void wxWindow::WindowEventHandler(Widget w, win->current_state = xev->xkey.state; { /* ^^^ fallthrough !!!! ^^^ */ wxKeyEvent *wxevent; - KeySym keysym, other_keysym; - long kc, other_kc; - Status status, other_status; - char str[10], other_str[10]; - int slen, other_slen; + KeySym keysym, other_keysym, alt_keysym, other_alt_keysym; + long kc, other_kc, alt_kc, other_alt_kc; + Status status, other_status, alt_status, other_alt_status; + char str[10], other_str[10], alt_str[10], other_alt_str[10]; + int slen, other_slen, alt_slen, other_alt_slen; wxevent = new wxKeyEvent(wxEVENT_TYPE_CHAR); - status = LookupKey(0, w, win, xev, &keysym, str, &slen); - other_status = LookupKey(1, w, win, xev, &other_keysym, other_str, &other_slen); + status = LookupKey(0, 0, w, win, xev, &keysym, str, &slen); + other_status = LookupKey(1, 0, w, win, xev, &other_keysym, other_str, &other_slen); + alt_status = LookupKey(0, 1, w, win, xev, &alt_keysym, alt_str, &alt_slen); + other_alt_status = LookupKey(1, 1, w, win, xev, &other_alt_keysym, other_alt_str, &other_alt_slen); if (xev->xany.type == KeyPress) { static int handle_alt = 0; @@ -1743,29 +1770,18 @@ void wxWindow::WindowEventHandler(Widget w, } } - if (XMB_STR_PREFERRED_STATUS(status, xev)) - kc = extract_string_key(str, slen); - else if (XMB_KC_STATUS(status)) - kc = CharCodeXToWX(keysym); - else if (XMB_STR_STATUS(status)) - kc = extract_string_key(str, slen); - else - kc = 0; - - if (XMB_STR_PREFERRED_STATUS(other_status, xev)) - other_kc = extract_string_key(other_str, other_slen); - else if (XMB_KC_STATUS(other_status)) - other_kc = CharCodeXToWX(other_keysym); - else if (XMB_STR_STATUS(other_status)) - other_kc = extract_string_key(other_str, other_slen); - else - other_kc = 0; + kc = status_to_kc(status, xev, keysym, str, slen); + other_kc = status_to_kc(other_status, xev, other_keysym, other_str, other_slen); + alt_kc = status_to_kc(alt_status, xev, alt_keysym, alt_str, alt_slen); + other_alt_kc = status_to_kc(other_alt_status, xev, other_alt_keysym, other_alt_str, other_alt_slen); // set wxWindows event structure wxevent->eventHandle = (char*)xev; wxevent->keyCode = (xev->xany.type == KeyPress) ? kc : WXK_RELEASE; wxevent->keyUpCode = (xev->xany.type == KeyRelease) ? kc : WXK_PRESS; wxevent->otherKeyCode = other_kc; + wxevent->altKeyCode = alt_kc; + wxevent->otherAltKeyCode = other_alt_kc; wxevent->x = xev->xkey.x; wxevent->y = xev->xkey.y; wxevent->altDown = /* xev->xkey.state & Mod3Mask */ FALSE; diff --git a/src/wxxt/src/Windows/Window.h b/src/wxxt/src/Windows/Window.h index d1ef9f34ae..6b23cbdfe8 100644 --- a/src/wxxt/src/Windows/Window.h +++ b/src/wxxt/src/Windows/Window.h @@ -193,7 +193,8 @@ protected: static void WindowEventHandler(Widget w, wxWindow **win, XEvent *ev, Boolean *continue_to_dispatch_return); static void ScrollEventHandler(Widget w, wxWindow **win, XtPointer p_XfwfScrollInfo); - static Status LookupKey(int unshifted, Widget w, wxWindow *win, XEvent *xev, KeySym *_keysym, char *s, int *_len); + static Status LookupKey(int unshifted, int unalted, + Widget w, wxWindow *win, XEvent *xev, KeySym *_keysym, char *s, int *_len); void RegisterAll(Widget ww); # endif protected: