[squeak-dev] The Trunk: ST80-fbs.165.mcz

Frank Shearar frank.shearar at gmail.com
Sat Dec 14 20:15:15 UTC 2013


On 14 December 2013 19:58, Frank Shearar <frank.shearar at gmail.com> wrote:
> On 13 December 2013 19:17, David T. Lewis <lewis at mail.msen.com> wrote:
>> According to the class comment:
>>
>> Transcripter is a dog-simple scrolling stream with display.  It is
>> intended to operate with no support from MVC or color in a minimal, or
>> headless version of Squeak.  No attention has been paid to appearance or
>> performance.
>>
>> This is explicitly designed to *not* be part of MVC or any other UI
>> framework, and it is clearly documented as such. It does not belong in the
>> ST80 package.
>
> I am more than happy for someone to move it where it needs to go, or
> similar. Right now it's clearly built to work with ST80 - it relies on
> Paragraph, after all, despite the class comment. (Here's an example of
> why I seriously dislike using class names, instead of classes.)

I forgot to add: regardless, its home is not in Collections, but in
System or, ideally, even higher.

> frank
>
>> Dave
>>
>>> Frank Shearar uploaded a new version of ST80 to project The Trunk:
>>> http://source.squeak.org/trunk/ST80-fbs.165.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: ST80-fbs.165
>>> Author: fbs
>>> Time: 13 December 2013, 6:56:32.522 pm
>>> UUID: 1fc821e0-cf5e-7e49-9037-8fb7b5e58ec0
>>> Ancestors: ST80-fbs.164
>>>
>>> Transcripter is actually MVC specific. Move it there, and other UI
>>> frameworks can define their own emergency evaluator.
>>>
>>> =============== Diff against ST80-fbs.164 ===============
>>>
>>> Item was changed:
>>>   SystemOrganization addCategory: #'ST80-Controllers'!
>>>   SystemOrganization addCategory: #'ST80-Editors'!
>>>   SystemOrganization addCategory: #'ST80-Framework'!
>>>   SystemOrganization addCategory: #'ST80-Menus'!
>>>   SystemOrganization addCategory: #'ST80-Menus-Tests'!
>>>   SystemOrganization addCategory: #'ST80-Paths'!
>>>   SystemOrganization addCategory: #'ST80-Pluggable Views'!
>>> + SystemOrganization addCategory: #'ST80-REPL'!
>>>   SystemOrganization addCategory: #'ST80-Support'!
>>>   SystemOrganization addCategory: #'ST80-Support-Tests'!
>>>   SystemOrganization addCategory: #'ST80-Symbols'!
>>>   SystemOrganization addCategory: #'ST80-ToolBuilder'!
>>>   SystemOrganization addCategory: #'ST80-Views'!
>>>
>>> Item was added:
>>> + ReadWriteStream subclass: #Transcripter
>>> +     instanceVariableNames: 'frame para'
>>> +     classVariableNames: ''
>>> +     poolDictionaries: ''
>>> +     category: 'ST80-REPL'!
>>> +
>>> + !Transcripter commentStamp: '<historical>' prior: 0!
>>> + Transcripter is a dog-simple scrolling stream with display.  It is
>>> intended to operate with no support from MVC or color in a minimal, or
>>> headless version of Squeak.  No attention has been paid to appearance or
>>> performance.!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter class>>emergencyEvaluator (in category
>>> 'utilities') -----
>>> + emergencyEvaluator
>>> +     (Transcripter newInFrame: (0 at 0 corner: 320 at 200))
>>> +             show: 'Type ''revert'' to revert your last method change.
>>> + Type ''exit'' to exit the emergency evaluator.';
>>> +             readEvalPrint!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter class>>newInFrame: (in category 'instance
>>> creation') -----
>>> + newInFrame: frame
>>> + "
>>> + (Transcripter newInFrame: (0 at 0 extent: 100 at 200))
>>> +     nextPutAll: 'Hello there'; endEntry;
>>> +     cr; print: 355.0/113; endEntry;
>>> +     readEvalPrint.
>>> + "
>>> +     | transcript |
>>> +     transcript := self on: (String new: 100).
>>> +     transcript initInFrame: frame.
>>> +     ^ transcript clear!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter class>>startTranscriptProcess (in category
>>> 'instance creation') -----
>>> + startTranscriptProcess   "Transcripter startTranscriptProcess"
>>> +     | activeProcess |
>>> +     Transcript := self newInFrame: Display boundingBox.
>>> +     activeProcess := [Transcript readEvalPrint.
>>> +                                     Smalltalk processShutDownList: true; quitPrimitive]
>>> +                                             newProcess
>>> +                                     priority: Processor userSchedulingPriority.
>>> +     activeProcess resume.
>>> +     Processor terminateActive
>>> + !
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>black (in category 'private') -----
>>> + black
>>> +     Display depth = 1 ifTrue: [^ Bitmap with: 16rFFFFFFFF "Works without
>>> color support"].
>>> +     ^ Color black!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>clear (in category 'accessing') -----
>>> + clear
>>> +     Display fill: (frame insetBy: -2) fillColor: self black;
>>> +                     fill: frame fillColor: self white.
>>> +     self on: (String new: 100); endEntry!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>confirm: (in category 'command line') -----
>>> + confirm: queryString
>>> +
>>> +     | choice |
>>> +     [choice := self request: queryString , '
>>> + Please type yes or no followed by return'.
>>> +     choice first asUppercase = $Y ifTrue: [^ true].
>>> +             choice first asUppercase = $N ifTrue: [^ false]] repeat!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>endEntry (in category 'accessing') -----
>>> + endEntry
>>> +     | c d cb |
>>> +     c := self contents.
>>> +     Display extent ~= DisplayScreen actualScreenSize ifTrue:
>>> +             ["Handle case of user resizing physical window"
>>> +             DisplayScreen startUp.
>>> +             frame := frame intersect: Display boundingBox.
>>> +             ^ self clear; show: c].
>>> +     para setWithText: c asText
>>> +             style: TextStyle default
>>> +             compositionRectangle: ((frame insetBy: 4) withHeight: 9999)
>>> +             clippingRectangle: frame
>>> +             foreColor: self black backColor: self white.
>>> +     d := para compositionRectangle bottom - frame bottom.
>>> +     d > 0 ifTrue:
>>> +             ["Scroll up to keep all contents visible"
>>> +             cb := para characterBlockAtPoint: para compositionRectangle topLeft
>>> +                                                                                     + (0@(d+para lineGrid)).
>>> +             self on: (c copyFrom: cb stringIndex to: c size).
>>> +             readLimit:= position:= collection size.
>>> +             ^ self endEntry].
>>> +     para display!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>initInFrame: (in category 'initialization')
>>> -----
>>> + initInFrame: rect
>>> +     Smalltalk at: #Paragraph ifPresent: [:classParagraph | "MVC"
>>> +             frame := rect insetBy: 2.  "Leave room for border"
>>> +             para := classParagraph withText: self contents asText
>>> +                                     style: TextStyle default
>>> +                                     compositionRectangle: ((frame insetBy: 4) withHeight: 9999)
>>> +                                     clippingRectangle: frame
>>> +                                     foreColor: self black backColor: self white]!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>readEvalPrint (in category 'command line')
>>> -----
>>> + readEvalPrint
>>> +     | line okToRevert |
>>> +     okToRevert := true.
>>> +     [#('quit' 'exit' 'done' ) includes: (line := self request: '>')]
>>> +             whileFalse:
>>> +             [line = 'revert'
>>> +             ifTrue: [okToRevert
>>> +                     ifTrue: [RecentMessages default revertMostRecent.
>>> +                                     self cr; show: 'reverted: ' , RecentMessages default mostRecent.
>>> +                                     okToRevert := false]
>>> +                     ifFalse: [self cr; show: 'Only one level of revert currently
>>> supported']]
>>> +             ifFalse: [self cr; show: ([Compiler evaluate: line] ifError: [:err :ex
>>> | err])]]!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>request: (in category 'command line') -----
>>> + request: prompt
>>> +     | startPos char contents |
>>> +     self cr; show: prompt.
>>> +     startPos := position.
>>> +     [[Sensor keyboardPressed] whileFalse.
>>> +     (char := Sensor keyboard) = Character cr]
>>> +             whileFalse:
>>> +             [char = Character backspace
>>> +                     ifTrue: [readLimit := position := (position - 1 max: startPos)]
>>> +                     ifFalse: [self nextPut: char].
>>> +             self endEntry].
>>> +     contents := self contents.
>>> +     ^ contents copyFrom: startPos + 1 to: contents size!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>show: (in category 'accessing') -----
>>> + show: anObject
>>> +     self nextPutAll: anObject asString; endEntry!
>>>
>>> Item was added:
>>> + ----- Method: Transcripter>>white (in category 'private') -----
>>> + white
>>> +     Display depth = 1 ifTrue: [^ Bitmap with: 0 "Works without color
>>> support"].
>>> +     ^ Color white!
>>>
>>>
>>
>>
>>


More information about the Squeak-dev mailing list