Thread: RE: [Plib-devel] pwSetAutoRepeatKey...and pwMacOSX.
Brought to you by:
sjbaker
From: Fay J. F C. AAC/W. <joh...@eg...> - 2004-04-07 13:35:17
|
Gentlemen, I've just sent Steve privately a "pwWindows.cxx" file with an auto-repeat patch. I've not been able to test it but I think it will work. Correctly, even. It compiles and was not much of a patch. I tested the auto-repeat feature using the "freeglut" library and found that Windows gives a WM_KEYDOWN message when a key is pressed. Then it gives a string of WM_KEYDOWN messages when a key is held down. It gives a WM_KEYUP message when the key is released. When the user presses two keys one after the other, Windows will send a WM_KEYDOWN message for each one. If the first one is auto-repeating, its auto-repeat will stop and the second key's auto-repeat will eventually start. When a key is released (either the first or the second), Windows sends a WM_KEYUP message for each key. My patch does not support this behavior, and I don't know that the X11 code does either. John F. Fay joh...@eg... -----Original Message----- From: pli...@li... [mailto:pli...@li...]On Behalf Of Steve Baker Sent: Tuesday, April 06, 2004 7:03 PM To: pli...@li... Subject: [Plib-devel] pwSetAutoRepeatKey...and pwMacOSX. OK - those changes to pwMacOSX are in CVS (I restored the conditional compilation around it). The new 'pwSetAutoRepeatKey(bool enable);' function is now present in both X11 and MacOSX. I added code into the 'pw_demo' program to test it (press 'a' and 'b' to turn key repeat on and off). If someone could find the time to add that code into the Windows version, that would be great. Right now pwSetAutoRepeatKey just prints a warning message under Windows. By default, auto-repeat should be off. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ plib-devel mailing list pli...@li... https://lists.sourceforge.net/lists/listinfo/plib-devel |
From: Fay J. F C. AAC/W. <joh...@eg...> - 2004-04-07 14:45:36
|
An interesting note on the key messages in PW: the control and shift keys apparently also generate messages under Windows. I don't know whether this was planned for or desired; I'm just noting that it happens. John F. Fay joh...@eg... |
From: Steve B. <sjb...@ai...> - 2004-04-08 00:39:43
|
Fay John F Contr AAC/WMG wrote: > An interesting note on the key messages in PW: the control and shift keys > apparently also generate messages under Windows. I don't know whether this > was planned for or desired; I'm just noting that it happens. No - it's not desirable (well - at least - I was copying the style of GLUT and it doesn't do it. I'm also pretty sure you can't get X11 to do that.). ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- |
From: Fay J. F C. AAC/W. <joh...@eg...> - 2004-04-08 16:06:38
|
OK, I have just sent Steve another "pwWindows.cxx" file that fixes things so that pressing the control, shift, or caps lock keys will not trigger a callback. John F. Fay joh...@eg... -----Original Message----- From: pli...@li... [mailto:pli...@li...]On Behalf Of Steve Baker Sent: Wednesday, April 07, 2004 7:39 PM To: pli...@li... Subject: Re: [Plib-devel] pwSetAutoRepeatKey...and pwMacOSX. Fay John F Contr AAC/WMG wrote: > An interesting note on the key messages in PW: the control and shift keys > apparently also generate messages under Windows. I don't know whether this > was planned for or desired; I'm just noting that it happens. No - it's not desirable (well - at least - I was copying the style of GLUT and it doesn't do it. I'm also pretty sure you can't get X11 to do that.). ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ plib-devel mailing list pli...@li... https://lists.sourceforge.net/lists/listinfo/plib-devel |
From: Fay J. F C. AAC/W. <joh...@eg...> - 2004-04-09 17:49:38
|
Since a tenet of windowing systems (at least of the GLUT type) is platform independence, I guess we will want to change the Windows code to match the Linux behavior. Here is a patch that does this: pwWindows.cxx:122: case WM_KEYDOWN: /* If the key is already down, we are on auto-repeat. Break if the autorepeat is disabled. */ - if ( ( updown == PW_DOWN ) && ( int(wParam) == old_key ) && ( !autoRepeat ) ) + if ( ( updown == PW_DOWN ) && ( int(wParam) == old_key ) ) + { + if ( autoRepeat ) + { + /* Disable CTRL, SHIFT, CapsLock keys from making a callback */ + if ( ( key == VK_CONTROL ) || ( key == VK_SHIFT ) || ( key == VK_CAPITAL ) ) + break ; + + if ( key != -1 && kbCB ) // Autorepeat enabled, call the callback with an "up" setting + (*kbCB) ( key, PW_UP, lastx, lasty ) ; + } + else + break ; // Autorepeat not enabled, just break + } updown = PW_DOWN ; old_key = wParam ; Regarding the bug in the X11 version (about how if you press shift-W, release the shift, then release the w, you don't get an up-callback for the "W"): Windows behaves in exactly the same manner if the keys are pressed long enough for the autorepeat to come on (whether PW passes them through or not). If everything is done quickly, then we get a key press event for the capital letter and a key release event for the lowercase letter. By moving the test for CTRL/SHIFT/CapsLock to above the assignment for "key = wParam" I can remove the second key press callback invocation (with the lowercase "w") but we still have the phenomenon of the key press callback being called with one key and the key release with another key. It may need just to be documented as a "feature." John F. Fay joh...@eg... -----Original Message----- From: pli...@li... [mailto:pli...@li...]On Behalf Of Steve Baker Sent: Wednesday, April 07, 2004 8:13 PM To: pli...@li... Subject: Re: [Plib-devel] pwSetAutoRepeatKey...and pwMacOSX. Fay John F Contr AAC/WMG wrote: > Gentlemen, > > I've just sent Steve privately a "pwWindows.cxx" file with an > auto-repeat patch. I've not been able to test it but I think it will work. > Correctly, even. It compiles and was not much of a patch. > > I tested the auto-repeat feature using the "freeglut" library and > found that Windows gives a WM_KEYDOWN message when a key is pressed. Then > it gives a string of WM_KEYDOWN messages when a key is held down. It gives > a WM_KEYUP message when the key is released. Hmmm - in Linux/X11, you get rapidly alternating key-up/key-down messages when you are holding down a key with autorepeat enabled. > When the user presses two keys one after the other, Windows will > send a WM_KEYDOWN message for each one. If the first one is auto-repeating, > its auto-repeat will stop and the second key's auto-repeat will eventually > start. When a key is released (either the first or the second), Windows > sends a WM_KEYUP message for each key. My patch does not support this > behavior, and I don't know that the X11 code does either. The X11 code does this OK. There is one bug in the X11 version that I can see. If you push (and hold) SHIFT plus a letter key until it starts repeating, then release the SHIFT key without releasing the letter key - then you get a key-down event for the lowercase key - but no key-up event for the uppercase key. When you finally release the letter key, you get a lower-case key-up event - but still no uppercase key-up event. This could confuse programs like pw_demo that track the up/down events to try to know which keys are being held down. It's actually kinda nasty to fix this. It might seem easy enough to track when the lowercase version of a key is hit whilst the uppercase version has not yet been released, this isn't so simple for things like punctuation characters that are on the same key on some keyboards - but different keys on others. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ plib-devel mailing list pli...@li... https://lists.sourceforge.net/lists/listinfo/plib-devel |
From: Steve B. <sjb...@ai...> - 2004-04-09 18:38:27
|
Fay John F Contr AAC/WMG wrote: > Since a tenet of windowing systems (at least of the GLUT type) is platform > independence, I guess we will want to change the Windows code to match the > Linux behavior. Either that or modify the Linux code to match Windows. I think on balance, I like the Linux way because anything that's relying on a key UP event wouldn't see any key repeat if it's done the Windows way. > Regarding the bug in the X11 version (about how if you press shift-W, > release the shift, then release the w, you don't get an up-callback for the > "W"): Windows behaves in exactly the same manner if the keys are pressed > long enough for the autorepeat to come on (whether PW passes them through or > not). If everything is done quickly, then we get a key press event for the > capital letter and a key release event for the lowercase letter. Yeah - I think Linux is the same. I wonder what GLUT and freeglut do? Maybe there is a clever fix of some kind. > By moving > the test for CTRL/SHIFT/CapsLock to above the assignment for "key = wParam" > I can remove the second key press callback invocation (with the lowercase > "w") but we still have the phenomenon of the key press callback being called > with one key and the key release with another key. It may need just to be > documented as a "feature." Well, it's very inconvenient for games. You tend to want to track which keys are down and which are up - and there really isn't an easy way to do that with the present code. (Especially when you consider non-US keyboards. Then, the relationship between a punctuation character and the character you get with the same key but with SHIFT depressed may be different from one keyboard type to another. My code might be smart enough to know that when it sees a '/' character DOWN followed by a '?' character UP that in fact it was really the '/' that went up because '?' is just SHIFT+'/'....but is that true on all keyboards. (HINT: No, it's not!) Without going back to looking at the original scan-codes, it's going to be rather hard to figure out what's going on! This sort of thing might seem unlikely - but there are plenty of games out there that use (say) 'Z' and 'X' for steering and 'SHIFT' for shooting - which could very well result in a sequence like: PLAYER STARTS TO TURN LEFT: Presses the 'z' key. We see 'z'+DOWN. PLAYER SHOOTS: Presses the SHIFT key. PLAYER STOPS TURNING: Releases the 'z' key - but we see 'Z'+UP. Now the software doesn't know whether you're still steering or not. Yuk! I'm gonna see whether GLUT or freeglut has a clever trick for avoiding this problem. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- |
From: Fay J. F C. AAC/W. <joh...@eg...> - 2004-04-09 18:56:25
|
Heh, heh, heh, "freeglut" has the bug just as badly as PW does, if not worse. I think I got a callback from releasing the shift key. I haven't checked GLUT. You are right, I do get the same sequence of calls with the "?" and "/" combination and with the "+" and "=" combination. So games like that will have to deal with it unless we can figure out a way around it. And I daresay you don't want PW to start auto-detecting keyboards and configuring itself around them. John F. Fay joh...@eg... -----Original Message----- From: pli...@li... [mailto:pli...@li...]On Behalf Of Steve Baker Sent: Friday, April 09, 2004 1:37 PM To: pli...@li... Subject: Re: [Plib-devel] pwSetAutoRepeatKey...and pwMacOSX. Fay John F Contr AAC/WMG wrote: > Since a tenet of windowing systems (at least of the GLUT type) is platform > independence, I guess we will want to change the Windows code to match the > Linux behavior. Either that or modify the Linux code to match Windows. I think on balance, I like the Linux way because anything that's relying on a key UP event wouldn't see any key repeat if it's done the Windows way. > Regarding the bug in the X11 version (about how if you press shift-W, > release the shift, then release the w, you don't get an up-callback for the > "W"): Windows behaves in exactly the same manner if the keys are pressed > long enough for the autorepeat to come on (whether PW passes them through or > not). If everything is done quickly, then we get a key press event for the > capital letter and a key release event for the lowercase letter. Yeah - I think Linux is the same. I wonder what GLUT and freeglut do? Maybe there is a clever fix of some kind. > By moving > the test for CTRL/SHIFT/CapsLock to above the assignment for "key = wParam" > I can remove the second key press callback invocation (with the lowercase > "w") but we still have the phenomenon of the key press callback being called > with one key and the key release with another key. It may need just to be > documented as a "feature." Well, it's very inconvenient for games. You tend to want to track which keys are down and which are up - and there really isn't an easy way to do that with the present code. (Especially when you consider non-US keyboards. Then, the relationship between a punctuation character and the character you get with the same key but with SHIFT depressed may be different from one keyboard type to another. My code might be smart enough to know that when it sees a '/' character DOWN followed by a '?' character UP that in fact it was really the '/' that went up because '?' is just SHIFT+'/'....but is that true on all keyboards. (HINT: No, it's not!) Without going back to looking at the original scan-codes, it's going to be rather hard to figure out what's going on! This sort of thing might seem unlikely - but there are plenty of games out there that use (say) 'Z' and 'X' for steering and 'SHIFT' for shooting - which could very well result in a sequence like: PLAYER STARTS TO TURN LEFT: Presses the 'z' key. We see 'z'+DOWN. PLAYER SHOOTS: Presses the SHIFT key. PLAYER STOPS TURNING: Releases the 'z' key - but we see 'Z'+UP. Now the software doesn't know whether you're still steering or not. Yuk! I'm gonna see whether GLUT or freeglut has a clever trick for avoiding this problem. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ plib-devel mailing list pli...@li... https://lists.sourceforge.net/lists/listinfo/plib-devel |
From: Steve B. <sjb...@ai...> - 2004-04-09 20:05:28
|
Fay John F Contr AAC/WMG wrote: > Heh, heh, heh, "freeglut" has the bug just as badly as PW does, if not > worse. I think I got a callback from releasing the shift key. I haven't > checked GLUT. > > You are right, I do get the same sequence of calls with the "?" and "/" > combination and with the "+" and "=" combination. So games like that will > have to deal with it unless we can figure out a way around it. And I > daresay you don't want PW to start auto-detecting keyboards and configuring > itself around them. Well, that sounds like a really difficult thing to do - and almost impossible to test...so I suppose this isn't a business we should be in. I guess if GLUT and freeglut are broken, we can just call this a bug in the keyboard handlers in Windows and X11. It's going to be a big hassle to work around though. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- |
From: Fay J. F C. AAC/W. <joh...@eg...> - 2004-04-09 20:28:02
|
Well, one obvious solution is just not to use the shift key for anything in the game. It doesn't generate a callback call, anyway. ("Doc, it hurts when I do *this*." "So don't to that.") John F. Fay joh...@eg... -----Original Message----- From: pli...@li... [mailto:pli...@li...]On Behalf Of Steve Baker Sent: Friday, April 09, 2004 3:04 PM To: pli...@li... Subject: Re: [Plib-devel] pwSetAutoRepeatKey...and pwMacOSX. Fay John F Contr AAC/WMG wrote: > Heh, heh, heh, "freeglut" has the bug just as badly as PW does, if not > worse. I think I got a callback from releasing the shift key. I haven't > checked GLUT. > > You are right, I do get the same sequence of calls with the "?" and "/" > combination and with the "+" and "=" combination. So games like that will > have to deal with it unless we can figure out a way around it. And I > daresay you don't want PW to start auto-detecting keyboards and configuring > itself around them. Well, that sounds like a really difficult thing to do - and almost impossible to test...so I suppose this isn't a business we should be in. I guess if GLUT and freeglut are broken, we can just call this a bug in the keyboard handlers in Windows and X11. It's going to be a big hassle to work around though. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ plib-devel mailing list pli...@li... https://lists.sourceforge.net/lists/listinfo/plib-devel |
From: Steve B. <sjb...@ai...> - 2004-04-09 21:10:26
|
Fay John F Contr AAC/WMG wrote: > Well, one obvious solution is just not to use the shift key for anything in > the game. It doesn't generate a callback call, anyway. ("Doc, it hurts > when I do *this*." "So don't to that.") People like it because "Keyboards are Evil" (see my FAQ: http://www.sjbaker.org/steve/omniv/keyboards_are_evil.html) and whilst other keys are 'iffy', they know that you can always press CTRL, ALT and SHIFT in any combination without risk of the things I explain in my FAQ. It's a continuing source of amazement to me that keyboards are such a difficult input device...after all, electronic/digital keyboards have been around LONG before the invention of the computer. You'd really hope we'd have got them right by now! ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- |
From: Steve B. <sjb...@ai...> - 2004-04-08 01:13:33
|
Fay John F Contr AAC/WMG wrote: > Gentlemen, > > I've just sent Steve privately a "pwWindows.cxx" file with an > auto-repeat patch. I've not been able to test it but I think it will work. > Correctly, even. It compiles and was not much of a patch. > > I tested the auto-repeat feature using the "freeglut" library and > found that Windows gives a WM_KEYDOWN message when a key is pressed. Then > it gives a string of WM_KEYDOWN messages when a key is held down. It gives > a WM_KEYUP message when the key is released. Hmmm - in Linux/X11, you get rapidly alternating key-up/key-down messages when you are holding down a key with autorepeat enabled. > When the user presses two keys one after the other, Windows will > send a WM_KEYDOWN message for each one. If the first one is auto-repeating, > its auto-repeat will stop and the second key's auto-repeat will eventually > start. When a key is released (either the first or the second), Windows > sends a WM_KEYUP message for each key. My patch does not support this > behavior, and I don't know that the X11 code does either. The X11 code does this OK. There is one bug in the X11 version that I can see. If you push (and hold) SHIFT plus a letter key until it starts repeating, then release the SHIFT key without releasing the letter key - then you get a key-down event for the lowercase key - but no key-up event for the uppercase key. When you finally release the letter key, you get a lower-case key-up event - but still no uppercase key-up event. This could confuse programs like pw_demo that track the up/down events to try to know which keys are being held down. It's actually kinda nasty to fix this. It might seem easy enough to track when the lowercase version of a key is hit whilst the uppercase version has not yet been released, this isn't so simple for things like punctuation characters that are on the same key on some keyboards - but different keys on others. ---------------------------- Steve Baker ------------------------- HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://www.sjbaker.org Projects : http://plib.sf.net http://tuxaqfh.sf.net http://tuxkart.sf.net http://prettypoly.sf.net -----BEGIN GEEK CODE BLOCK----- GCS d-- s:+ a+ C++++$ UL+++$ P--- L++++$ E--- W+++ N o+ K? w--- !O M- V-- PS++ PE- Y-- PGP-- t+ 5 X R+++ tv b++ DI++ D G+ e++ h--(-) r+++ y++++ -----END GEEK CODE BLOCK----- |