[squeak-dev] The Trunk: Kernel-mt.1510.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Mar 24 12:23:06 UTC 2023
Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-mt.1510.mcz
==================== Summary ====================
Name: Kernel-mt.1510
Author: mt
Time: 24 March 2023, 1:23:04.967707 pm
UUID: e8c87bf3-8435-0645-99fc-a8a02e80eac9
Ancestors: Kernel-mt.1509
Rescue direct keyboard access from ST80 to keep EmergencyEvaluator working if ST80 package would be unloaded.
=============== Diff against Kernel-mt.1509 ===============
Item was added:
+ ----- Method: EventSensor>>characterForKeycode: (in category 'private') -----
+ characterForKeycode: keycode
+ "Map the given keycode to a Smalltalk character object. Encoding:
+ A keycode is 12 bits: <4 modifer bits><8 bit ISO character>
+ Modifier bits are: <command><option><control><shift>"
+
+ "NOTE: the command and option keys are specific to the Macintosh and may not have equivalents on other platforms."
+
+ keycode = nil ifTrue: [ ^nil ].
+ keycode class = Character ifTrue: [ ^keycode ]. "to smooth the transition!!"
+ ^ Character value: (keycode bitAnd: 16rFF)!
Item was added:
+ ----- Method: EventSensor>>keyboard (in category 'private') -----
+ keyboard
+ "Answer the next (single-byte or multi-byte) character from the keyboard."
+
+ | firstCharacter secondCharactor stream multiCharacter converter |
+ "1) Consume next character from buffer."
+ (firstCharacter := self characterForKeycode: keyboardBuffer next) ifNil: [^ nil].
+
+ "2) Peek additional character and try to read multi-byte character."
+ (secondCharactor := self characterForKeycode: keyboardBuffer peek) ifNil: [^ firstCharacter].
+ (converter := Locale currentPlatform systemConverter) ifNil: [^ firstCharacter].
+ stream := ReadStream on: (String with: firstCharacter with: secondCharactor).
+ multiCharacter := [converter nextFromStream: stream] ifError: [firstCharacter].
+
+ "3) Only consume that additional character if we got a multi-byte character."
+ multiCharacter isOctetCharacter ifFalse: [keyboardBuffer next].
+
+ "4) Answer either single-byte or multi-byte character."
+ ^ multiCharacter
+ !
Item was added:
+ ----- Method: EventSensor>>keyboardPressed (in category 'private') -----
+ keyboardPressed
+ "Answer true if keystrokes are available."
+
+ ^self peekKeyboard notNil!
Item was added:
+ ----- Method: EventSensor>>peekKeyboard (in category 'private') -----
+ peekKeyboard
+ "Answer the next character in the keyboard buffer without removing it, or nil if it is empty."
+
+ self flag: #toRename. "mt: peek-api is ST80. Find a better name or remove usage by using something like HandMorph >> #lastEvent."
+ self fetchMoreEvents.
+ self eventQueue ifNotNil: [:queue | queue flush].
+ ^ self characterForKeycode: keyboardBuffer peek!
More information about the Squeak-dev
mailing list
|