[squeak-dev] The Trunk: System-nice.236.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Jan 18 14:38:09 UTC 2010
Nicolas Cellier uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-nice.236.mcz
==================== Summary ====================
Name: System-nice.236
Author: nice
Time: 18 January 2010, 3:37:10.564 pm
UUID: abcc9501-98b4-8740-aaed-9740044deb36
Ancestors: System-nice.235
Use readOnlyFileNamed:do: pattern
Use literal ByteArray
=============== Diff against System-nice.235 ===============
Item was changed:
----- Method: DigitalSignatureAlgorithm class>>testExamplesFromDisk (in category 'examples') -----
testExamplesFromDisk
"verify messages from file on disk"
"Note: Secure random numbers are needed for key generation and message signing, but not for signature verification. There is no need to call initRandomFromUser if you are merely checking a signature."
"DigitalSignatureAlgorithm testExamplesFromDisk"
+ FileStream readOnlyFileNamed: 'dsa.test.out' do: [:file |
- | file |
- file := FileStream readOnlyFileNamed: 'dsa.test.out'.
- [
| msg sig publicKey |
[file atEnd] whileFalse: [
sig := file nextChunk.
msg := file nextChunk.
publicKey := Compiler evaluate: file nextChunk.
(self verify: sig isSignatureOf: msg publicKey: publicKey) ifTrue: [
Transcript show: 'SUCCESS: ',msg; cr.
] ifFalse: [
self error: 'ERROR!! Signature verification failed'
].
].
+ ]!
- ] ensure: [file close]
- !
Item was changed:
----- Method: MidiPrimTester>>playNoteOnPort: (in category 'tests') -----
playNoteOnPort: portNum
"MidiPrimTester new playNoteOnPort: 0"
| noteOn noteOff bytesWritten |
+ noteOn := #[144 60 100].
+ noteOff := #[144 60 0].
- noteOn := #(144 60 100) as: ByteArray.
- noteOff := #(144 60 0) as: ByteArray.
self openPort: portNum andDo: [
bytesWritten := self primMIDIWritePort: portNum from: noteOn at: 0.
(Delay forMilliseconds: 500) wait.
bytesWritten := bytesWritten + (self primMIDIWritePort: portNum from: noteOff at: 0)].
bytesWritten = 6 ifFalse: [self error: 'not all bytes were sent'].
!
Item was changed:
----- Method: MidiPrimTester>>playDrumRoll:count:onPort: (in category 'tests') -----
playDrumRoll: mSecsBetweenNotes count: tapCount onPort: portNum
"MidiPrimTester new playDrumRoll: 75 count: 64 onPort: 0"
"Play middle-C tapCount times with the given space between notes. This example works best with a short percussive voice, like a drum."
"Details: This test can be used to investigate the real-time performance of your system. On a 110 MHz PowerPC Mac, this method can genererate very fast and smooth drum rolls up to about 100 beats/sec (10 mSecs between notes). However, many factors can prevent one from seeing this level of performance including a slow CPU, lack of a level-2 cache, networking or other background processes stealing chunks of processor time from Squeak, or a sluggish MIDI synthesizer."
"Details: By default, this method does an incremental GC on every note. While not really needed for this example, it illustrates a useful technique for real-time processing in Squeak: do an incremental GC when you know you have a few milliseconds of idle time to avoid triggering one during a time-critical task. In this case, we're also using the GC time to provide a small delay between the note-on and note-off events. If the GC time is too short, as it could be on a fast machine, the note may not sound at all unless you add a few milliseconds of additional delay!!"
"Note: This example works best if the VM's millisecond clock has 1 millisecond resolution."
| gcDuringNote noteOn noteOff endTime waitTime |
gcDuringNote := true.
"these events use running status, so the command byte is omitted"
noteOn := #(60 100) as: ByteArray.
noteOff := #(60 0) as: ByteArray.
self primMIDIOpenPort: portNum readSemaIndex: 0 interfaceClockRate: 1000000.
"send an initial event with command byte to initiate running status"
+ self primMIDIWritePort: portNum from: #[144 60 0] at: 0.
- self primMIDIWritePort: portNum from: (#(144 60 0) as: ByteArray) at: 0.
1 to: tapCount do: [:i |
endTime := Time millisecondClockValue + mSecsBetweenNotes.
self primMIDIWritePort: portNum from: noteOn at: 0.
gcDuringNote
ifTrue: [
"do quick GC; takes a few milliseconds and provides the note-down time"
"Note: if GC is too fast on your machine, you need to add a few mSecs delay!!"
Smalltalk garbageCollectMost]
ifFalse: [(Delay forMilliseconds: 3) wait].
self primMIDIWritePort: portNum from: noteOff at: 0.
waitTime := endTime - Time millisecondClockValue.
waitTime > 0 ifTrue: [(Delay forMilliseconds: waitTime) wait]].
self primMIDIClosePort: portNum.
!
Item was changed:
----- Method: FilePackage>>fromFileNamed: (in category 'initialize') -----
fromFileNamed: aName
- | stream |
fullName := aName.
+ FileStream readOnlyFileNamed: aName do: [:stream |
+ stream setConverterForCode.
+ self fileInFrom: stream]!
- stream := FileStream readOnlyFileNamed: aName.
- stream setConverterForCode.
- [self fileInFrom: stream] ensure:[stream close].!
Item was changed:
----- Method: MidiPrimTester>>playScale:onPort: (in category 'tests') -----
playScale: mSecsPerNote onPort: portNum
"MidiPrimTester new playScale: 130 onPort: 0"
| noteOn noteOff |
+ noteOn := #[144 0 100].
+ noteOff := #[144 0 0].
- noteOn := #(144 0 100) as: ByteArray.
- noteOff := #(144 0 0) as: ByteArray.
self openPort: portNum andDo: [
#(60 62 64 65 67 69 71 72 74 72 71 69 67 65 64 62 60) do: [:midiKey |
noteOn at: 2 put: midiKey.
noteOff at: 2 put: midiKey.
self primMIDIWritePort: portNum from: noteOn at: 0.
(Delay forMilliseconds: mSecsPerNote - 10) wait.
self primMIDIWritePort: portNum from: noteOff at: 0.
(Delay forMilliseconds: 10) wait]].
!
Item was changed:
----- Method: NaturalLanguageTranslator class>>mergeTranslationFileNamed: (in category 'file-services') -----
mergeTranslationFileNamed: fileFullNameString
"merge the translation in the file named fileFullNameString"
+ FileStream readOnlyFileNamed: fileFullNameString do: [:stream |
+ | localeID translator |
+ localeID := LocaleID isoString: stream localName sansPeriodSuffix.
+ translator := self localeID: localeID.
+ translator loadFromStream: stream]
- | stream |
- stream := FileStream readOnlyFileNamed: fileFullNameString.
- [ | localeID translator |
- localeID := LocaleID isoString: stream localName sansPeriodSuffix.
- translator := self localeID: localeID.
- translator loadFromStream: stream]
- ensure: [stream close].
LanguageEnvironment resetKnownEnvironments.
!
Item was changed:
----- Method: DigitalSignatureAlgorithm class>>writeExamplesToDisk (in category 'examples') -----
writeExamplesToDisk
"Example of signing a message and verifying its signature. Used to create samples from one implementation that could later be tested with a different implementation"
"Note: Secure random numbers are needed for key generation and message signing, but not for signature verification. There is no need to call initRandomFromUser if you are merely checking a signature."
"DigitalSignatureAlgorithm writeExamplesToDisk"
+ | keyList dsa msgList |
- | file keyList dsa msgList |
-
dsa := DigitalSignatureAlgorithm new.
dsa initRandomFromUser.
self inform: 'About to generate 5 key sets. Will take a while'.
keyList := {self testKeySet},((1 to: 5) collect: [ :ignore | self generateKeySet]).
msgList := {'This is a test...'. 'This is the second test period.'. 'And finally, a third message'}.
+ FileStream newFileNamed: 'dsa.test.out' do: [:file |
- file := FileStream newFileNamed: 'dsa.test.out'.
- [
msgList do: [ :msg |
keyList do: [ :keys |
| sig |
sig := self sign: msg privateKey: keys first dsa: dsa.
(self verify: sig isSignatureOf: msg publicKey: keys last) ifTrue: [
file
nextChunkPut: sig;
nextChunkPut: msg;
nextChunkPut: keys last storeString.
] ifFalse: [
self error: 'ERROR!! Signature verification failed'
].
].
].
+ ]
- ] ensure: [file close]
!
More information about the Squeak-dev
mailing list
|