[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