shin@mcshh.hanse.de (Thomas Braun) (09/29/90)
"
Smalltalk/V286 Source: 'watch.sml'
----------------------------------------------------------
This file installs a visible watch on the DisplayScreen
by defining and redefining methods for the classes
String, Process and ScreenDispatcher.
When loaded, you will find a new option in the ScreenMenu
of the ScreenDispatcher to switch the watch on and off.
I wrote this little piece while studying multi processing
capabilities of Smalltalk/V. It shows how to bring up a
background process initiated by interrupt and signaling
the KeyboardSemaphore
good vibes... Thomas Braun
----------------------------------------------------------
To load this file evaluate the following message
(File pathName: 'watch.sml')
fileIn;
close.
where the file should be in the current directory.
"!
Smalltalk at: #Watch put: (0=1)!
Transcript cr; show: 'Filing in the visible watch...'!
!String methods !
displayAt: aPoint font: aFont
foreColor: fore
backColor: back
"Output the receiver onto the display screen."
CharacterScanner new
initialize: Display boundingBox font: aFont;
setForeColor: fore backColor: back;
display: self at: aPoint! !
!Process class methods !
timerInterrupt
"Implement the timer interrupt."
PendingEvents add: (Message new
selector: #clockEvent:;
arguments: (Array with: 1)).
(Time now) printString
displayAt: 656 @ 0
font: (Font eightLine)
foreColor: Form white
backColor: Form gray.
KeyboardSemaphore signal.
self enableInterrupts: true! !
!ScreenDispatcher class methods !
initialize
"Private - Initialize the system menu."
| aString |
BackupWindow
ifTrue: [aString := 'dos shell\speed/space\exit Smalltalk\browse disk\open workspace\browse classes\redraw screen\save image\switch clock\run demo' withCrs]
ifFalse:[aString := 'dos shell\space/speed\exit Smalltalk\browse disk\open workspace\browse classes\redraw screen\save image\switch clock\run demo' withCrs].
ScreenMenu := Menu
labels: aString
lines: #(3 7)
selectors: #(dosMenu speedSpace exit openDiskBrowser openWorkspace openClassBrowser redraw save switchWatch runDemo)! !
!ScreenDispatcher methods !
switchWatch
"switch the watch on and off"
Watch
ifTrue: [ Time clockTicksOff.
Watch := (0=1).
' '
displayAt: 650 @ 2
font: (Font fourteenLine)
foreColor: Form white
backColor: Form gray.]
ifFalse:[ Time clockTickPeriod:20.
Watch := (0=0)]
! !
ScreenDispatcher initialize.!
Transcript show: 'Done.' withCrs.
!
-------------------------cut here--------------------------
Thomas Braun uucp: ..mcshh!shin
Vedd. Brueckenstr.81 phone: 49 040 784258
2000 Hamburg 26
GERMANY
-----------------------------------------------------------