Class new title: UserView subclassof: Object fields: 'screenrect " current screen size" vtab " offset from hardware top" htab " offset from hardware left" scale " 2 means double bits mode" color " 1 means reverse field" projectWindow "my representative in an overview" disp " default message stream" sched " Windows in this view"' declare: 'screenMenu mxoffset currentCursor myoffset ' InLd: t1 [user notify: 'file problem'] primitive: 53 NTshrink | t1 t2 [self NTshrink1. UserView understands: 'NTshrink1'. Undeclared init. for t1 to: USTable length do [for t2 to: (USTable  t1) length do [(USTable  t1  t2) refct = 1  [USTable  t1  t2 _ nil]]]. a rehash. user  'disp' of: (String new: 256)] NTshrink1 | t1 [Class derstands: (archiveOn:changesOnly: asFollows bytesof: changelist: endCategoryOn: endChangesOn: filout filoutCategory: filoutOrganization paraprinton: printCategory:on: printMethod:on: printout printoutCategory: readfrom: readfrom:format: startCategory:on: startChangesOn: textLocal ). UserView derstands: (backup changedClasses convertTime:returnSecs: file:classes:changesOnly: growSmalltalk: hasXM initCompiler InLd: makeSources: now oopsToFile overlay: printCrossReference: quitFrom: rawtotalsecs reclaim release releaseExternalViews sourcesTo:changesOnly: systemStartup ticks time time timewords today totalsecs ). Paragraph derstands: (bravoRuns fromBravo toBravo applyBravo:at:to: ). Form derstands: (newbrush: blinkbrush: line: arc: resize: edit: classInit ). Number derstands: hex4. for t1 from: Form , Paragraph , TextImage do [t1 derstands: (hidePress:complete: fromPress:value: presson:in: )]. WoodstockFilePool _ nil. AltoFilePool _ WoodstockFilePool. gJuniperConstants _ AltoFilePool. EtherPool _ gJuniperConstants. for t1 from: Smalltalk do [(Smalltalk ref: t1) refct = 1 and Smalltalk  t1  nil  [Smalltalk delete: t1. SystemOrganization delete: t1]]. AllClassNames _ nil] NTshrink2 | t1 t2 [for t1 from: self classNames do [for t2 from: (Smalltalk  t1) md do [user redbug  [nil] t2 refct = 4  [(user request: t1 + ' ' + t2) length = 0  [Smalltalk  t1 derstands: t2]]]]] NTwritem | t1 t2 t3 t5 [self NTpreshrink. Changes init. MethodKeeper _ (Vector new: 10) asStream. [E  nil  [E _ Etherworld new]]. [user sched length = 1 and (user sched  1 is: Dispframe)  [t1 _ CodeWindow new. t2 _ CodePane new class: UserView selector: workspace para: nil. t1 title: 'UserView workspace' with: t2 inVector at: CodeWindow  stdTemplates. t1 frame: (340  22 rect: 580  300). t1 show. t2 showing: (UserView code: workspace). t2 formerly: false. t2 from: t2. user schedule: t1]]. for t3 from: Cursor allInstances do [t3 beNTCursor]. user cr. user show: NTmapper new mapNoteTaker  'nextOop hex'. t5 _ dp0 file: 'MagicNumbers.Saver'. t5 append: (user instfield: 7) contents. t5 close. for t3 from: Cursor allInstances do [t3 beAltoCursor]] Swat [] primitive: 53 anybug [self buttons > 0] anykeys [self keyset > 0] bluebug [self buttons = 1] bugScreenMenu | t1 t2 t3 [t3 _ (Menu new string: 'exit to overview quit open a subview open a browser open a workspace reclaim tablet demo turtle demo') bug. t3 = 1  [projectWindow  nil  [] projectWindow runParent] t3 = 2  [NoteTaker  [user save] user quit] t3 = 3  [self schedule: ProjectWindow init] t3 = 4  [self schedule: BrowseWindow default] t3 = 5  [self schedule: (CodeWindow new class: UserView selector: workspace para: (UserView code: workspace) formerly: false)] t3 = 6  [self reclaim] t3 = 7  [self notify: 'Tablet Demo not yet implemented'] t3 = 8  [t1 _ Turtle init. t1 color: black. t1 width: 4. t1 inking: oring. for t2 to: 50 do [t1 go: t2 * 4. t1 turn: 89]]] buttons | t1 [NoteTaker  [self primMouseKeys land: 7] t1 _ 7 - (mem  488 land: 7). t1 = 0  [t1] (t1 land: 1) * 2 + ((t1 land: 2) / 2) + (t1 land: 4)] calibrate | t1 t2 [user primPort: 330 mask: 0 _ 32. ((50  50) asRectangle inset: 4) comp. ((550  350) asRectangle inset: 4) comp. user waitclickbug. t1 _ (user touchPrim: 1)  (user touchPrim: 0). user waitclickbug. t2 _ (user touchPrim: 1)  (user touchPrim: 0). t1 rect: t2] changedMessages [Changes contents sort] classInit [screenMenu _ Menu new string: 'exit to overview quit open a subview open a browser open a workspace reclaim'] classNames | t1 t2 t3 [AllClassNames  nil  [t1 _ (Vector new: 20) asStream. for t2 from: Smalltalk do [t3 _ Smalltalk  t2. (t3 is: Class) or (t3 is: VariableLengthClass)  [t1 next_ t2]]. AllClassNames _ t1 contents sort] AllClassNames] clear [disp clear] clearshow: t1 [disp clear. disp append: t1. disp show] color: t1 scale: t2 [color _ t1. scale _ t2. self install] convertTime: t1 returnSecs: t2 | t3 t4 t5 t6 t7 t8 t9 [t8 _ mem  376. t9 _ mem  377. t1 _ t1 + ([t8  0  [1] 1] * (3600 * (t8 bits: (1 to: 4)) + (60 * (t9 bits: (1 to: 6))))). t5 _ t1 intdiv: 86400. t3 _ Date new fromDays: t5  1. [t2  [] t5 _ Time new fromSeconds: t5  2]. t6 _ t8 land: 511. [[t6 = 366  [false] t6 _ t6 + t3 leap - 1. t4 _ t3 day. [t4  t6  [t7 _ (t9 land: 511) + t3 leap - 1. t4 < t7 and t4 < ((Date new day: t7 year: t3 year) previous: 6) day] t4  ((Date new day: t6 year: t3 year) previous: 6) day]]  [t2  [t1 _ t1 + 3600] t5 hours = 23  [t3 _ t3 + 1. t5 hours: 0] t5 hours: t5 hours + 1]]. t2  [t1] t3 , t5] copyIn: t1 [UserView new screenrect: screenrect copy vtab: vtab htab: htab scale: scale color: color projectWindow: t1 disp: disp sched: ()] core [user croak] primitive: 57 cr [disp cr] croak [self notify: 'A primitive has failed.'] currentCursor [currentCursor] currentCursor: t1 | t2 t3 t4 [currentCursor _ t1. t2 _ t1 offset. t3 _ self mp. mxoffset _ t2 x - htab. myoffset _ t2 y - vtab. self cursorloc_ t3. NoteTaker  [self mapDisplay] t4 _ BitBlt new. t4 forCursor. t4 sourcebase_ t1 bits. t4 copy: storing] currentDisplay: t1 [DisplayForm _ t1. screenrect _ 0  0 rect: t1 extent. myoffset _ 0. mxoffset _ myoffset. htab _ mxoffset. vtab _ htab. self mapDisplay] cursorBLTer: t1 xoff: t2 yoff: t3 [user croak] primitive: 53 cursorLink: t1 [self croak] primitive: 60 cursorloc_ t1 [NoteTaker  [self primCursorLoc_ t1 - (mxoffset  myoffset)] mem  276 _ t1 x - mxoffset * scale. mem  277 _ t1 y - myoffset * scale] displayHeight: t1 [t1 _ t1 | 16. DisplayForm refct > 3  [user croak] user currentDisplay: (Form new extent: 640  16 bits: (String new: 16 * 80) offset: nil). user currentDisplay: (Form new extent: 640  t1 bits: (String new: t1 * 80) offset: nil). t1] displayoffwhile t1 | t2 t3 [NoteTaker  [t1 eval] t2 _ mem  55. mem  55 _ 58. t3 _ t1 eval. mem  55 _ t2. t3] ev [disp ev] frame [disp text frame] growSmalltalk: t1 [dp0 growSmalltalkBy: t1] install [self screenextent: screenrect extent tab: htab  vtab] kbck | t1 [t1 _ self rawkbck. t1  [kbMap  t1] NoteTaker  [false] self purgealittle. false] kbd [until self rawkbck do [NoteTaker  [] self purgealittle]. kbMap  self rawkbd] kbd: t1 [[t1 is: String  [t1 _ t1  1]]. Events next_ UserEvent new x: self x y: self y type: 1 stroke: (kbMap find: t1) elapsed: Events elapsedtime time: Events time + Events elapsedtime] kbdnext | t1 [NoteTaker  [self kbck  [self kbd] false] while [t1 _ Events dequeue. t1 or [t1 _ Events primitiveDequeue. t1]] do [t1 isKbdDown  [kbMap  t1 stroke]]. false] keyset [NoteTaker  [(self primMouseKeys lshift: 3) land: 31] 31 - ((mem  488 lshift: 3) land: 31)] leaveTop [sched length = 0  [] (sched  1) leave] leftShiftKey [(mem  482 land: 64) = 0] mapDisplay | t1 [DisplayBLTer _ BitBlt init. DisplayBLTer sourceForm_ DisplayForm. DisplayBLTer destForm_ DisplayForm. t1 _ BitBlt init. t1 sourceForm_ currentCursor asForm. t1 destForm_ DisplayForm. t1 source_ 0  0. t1 extent_ currentCursor extent. t1 function_ oring. t1 installForIOP] mp [NoteTaker  [self primMousePt + (mxoffset  myoffset)] scale = 2  [Point new x: mem  276 + mxoffset / 2 y: mem  277 + myoffset / 2] Point new x: mem  276 + mxoffset y: mem  277 + myoffset] mpnext [self redbug  [self mp] false] newdisp [self unschedule: disp. disp _ Dispframe new rect: (8  0 rect: 150  96). self schedule: disp. self clearshow: 'New Dialogue window created. '] newdisploc: t1 and: t2 [(disp text frame inset: 2  2) clear. disp text frame_ t1 rect: t2. disp show] next_ t1 [disp cr. disp print: t1. disp show] noChanges [Changes init] nobug [self anybug  false] notifier: t1 level: t2 interrupt: t3 [self restoredisplay. NotifyFlag  false  [disp cr. disp append: 'NotifyFlag is false...'. disp cr. disp append: ' top-blank shows stack, user restart aborts,'. disp cr. disp append: ' tempframe shows args, ctrl-d proceeds'. disp cr. disp append: t1. disp cr. disp show. (Top  t2) debug. false] NotifyWindow new of: t1 level: t2 interrupt: t3] notifier: t1 stack: t2 interrupt: t3 [self restoredisplay. NotifyFlag  false  [disp cr. disp append: 'NotifyFlag is false...'. disp cr. disp append: ' sender debug shows stack, user restart aborts,'. disp cr. disp append: ' tempframe shows args, ctrl-d proceeds'. disp cr. disp append: t1. disp cr. disp show. t2 debug. false] NotifyWindow new of: t1 stack: t2 interrupt: t3] notify: t1 | t2 [NoteTaker  [self notifyNT: t1. self] t2 _ self notifier: t1 stack: thisContext sender interrupt: false. t2  [thisContext sender_ nil. Top currentPriority = 1  [self restartup: t2] self scheduleOnBottom: t2. Top errorReset] nil] notifyNT: t1 | t2 [NotifyFlag  [t2 _ NotifyWindowNT new. t2 title: t1 processFrame: thisContext current caller caller. NormalCursor topage1. self schedule: t2. self run: true] self clearshow: t1. self cr. self show: 'ctl-d to restart'. self ev. thisContext restart] now [self convertTime: self rawtotalsecs returnSecs: false] overlay: t1 | t2 [self releaseExternalViews. [E  nil  [] E sleep]. t2 _ mem  272. mem  272 _ 0. self InLd: t1. mem  272 _ t2. while user keyset > 0 do [user show: 'The keyset is stuck'. user cr]] primCursorLoc_ t1 [self croak] primitive: 59 primEIANext [self croak] primitive: 64 primEIANext_ t1 [self croak] primitive: 65 primEIAPeek [self croak] primitive: 63 primKbdBlock [self croak] primitive: 69 primKbdNext [self croak] primitive: 62 primKbdPeek [self croak] primitive: 61 primMouseKeys [self croak] primitive: 68 primMousePt [self croak] primitive: 58 primPort: t1 [self croak] primitive: 66 primPort: t1 mask: t2 _ t3 [self croak] primitive: 67 print: t1 [disp print: t1. disp show] projectWindow [[projectWindow  nil  [projectWindow _ ProjectWindow new. projectWindow userview: self changes: Changes parent: projectWindow]]. projectWindow] promote: t1 [sched promote: t1] purgealittle [] primitive: 54 quit [self quitFrom: self] quitThen: t1 | t2 t3 [t2 _ (dp0 file: 'rem.cm') readonly. t3 _ t2 next: t2 length. t2 readwrite. t2 reset. t2 append: t1. t2 cr. t2 append: t3. t2 close. self quit] quitThen: t1 continue: t2 | t3 [[t1  [t3 _ dp0 oldFile: 'rem.cm.'. t3 settoend. t3 append: t1. t3 append: '; '. t3 append: [t2  ['Resume.~ small.boot'] 'Quit.~; Resume.~ small.boot']. t3 cr. t3 flush]]. self quit] rawkbck | t1 t2 t3 [NoteTaker and 'NoEventQ'  [while [t3 _ user primKbdPeek. t3] do [t3  0  [t3] user primKbdNext]. false] while [t1 _ Events peek. t1] do [t1 isKbdDown  [t1 stroke] Events next]. false] rawkbd | t1 [NoteTaker and 'NoEventQ'  [until self rawkbck do []. self primKbdNext] while [t1 _ self rawkbck. t1  false] do []. Events next. t1] rawtotalsecs | t1 [t1 _ self timewords. t1 swap: 1 with: 4. t1 swap: 2 with: 3. LargeInteger new bytes: t1 neg: false] read [disp read] reconfigure [] primitive: 53 redbug [self buttons = 4] releaseExternalViews | t1 [Sources close. dp0 close. dp1 close. for t1 from: externalViews length to: 1 by: 1 do [(externalViews  t1) release. externalViews  t1 _ nil]. externalViews reset] request: t1 [disp request: t1] restart | t1 [[Events  nil  [Events _ EventQueue init]]. NormalCursor topage1. self restart [user run]] restart t1 | t2 [t2 _ t1 cleancopy. t2 sender_ nil. thisContext sender releaseFully. thisContext sender_ nil. t1 _ nil. MessageDict new freeMethods. disp frame flash. while true do [t2 eval]] restartup: t1 [[NoteTaker  [] thisContext sender releaseFully. thisContext sender_ nil]. NormalCursor topage1. self schedule: t1. [NoteTaker  [] thisContext tempframe all_ nil]. self run: true] restore | t1 [[NoteTaker  [Dorado  [] kbMap _ NTkbMap]]. screenrect clear. for t1 from: sched length to: 1 by: 1 do [(sched  t1) show]] restoredisplay [NoteTaker  [] mem  272 _ 48. mem  55 _ screenrect height / 2] run [self run: false] run: t1 | t2 t3 t4 [t4 _ [t1  [t3 _ sched  1. while t3 eachtime do []. t3 lasttime] true]. while true do [t2 _ 0. while [t2 _ t2 + 1. [t2 > sched length  [nil] t3 _ [t4  [sched  t2] sched  (sched length + 1 - t2)]. t3 firsttime]  false] do []. t2 > sched length  [user yellowbug  [self bugScreenMenu]] sched promote: t3. while t3 eachtime do []. t4 _ t3 lasttime]] save [user croak] primitive: 45 sched [sched] schedule: t1 [sched  nil  [sched _ t1 inVector] sched _ t1 inVector concat: sched] scheduleOnBottom: t1 [sched  nil  [sched _ t1 asVector] sched _ sched concat: t1 asVector] screenextent: t1 tab: t2 [mem  53 _ color * 16384 + [scale = 2  [32768] 0] + (t2 x / 16 * 256) + (t1 x / 16 | 2). mem  55 _ t1 y * scale / 2. mem  51 _ 1 max: t2 y / 2. htab _ t2 x | 16. vtab _ mem  51 * 2. screenrect _ 0  0 rect: t1 x | 32  (t1 y | 2). self currentCursor: currentCursor. self reconfigure. self restore] screenrect [screenrect] screenrect: t1 vtab: t2 htab: t3 scale: t4 color: t5 projectWindow: t6 disp: t7 sched: t8 [screenrect _ t1. vtab _ t2. htab _ t3. scale _ t4. color _ t5. projectWindow _ t6. disp _ t7. sched _ t8] show [disp outline. disp show] show: t1 [disp append: t1. disp show] space [disp space] tab [disp tab] tablet [mem  448  0] tabletabsolute [mem  86 _ 1] tabletbug [mem  448 < 0] tabletrelative [mem  86 _ 1] ticks [mem  280] time [self now  2] timewords | t1 [t1 _ Natural new: 4. t1 word: 1 _ mem  378. t1 word: 2 _ mem  379. t1] today [self now  1] topWindow [sched  1] totalsecs [self convertTime: self rawtotalsecs returnSecs: true] touchPrim: t1 | t2 [self primPort: 96 mask: 0 _ t1 + 1 * 256. self primPort: 256 mask: 1 - 448 _ t1. t2 _ self primPort: 448. self primPort: 96 mask: 0 _ 0. t2] touchPt | t1 t2 t3 [false  [user calibrate] t1 _ 880  833 rect: 609  671. t2 _ 50  50 rect: 550  350. t3 _ (self touchPrim: 1) asFloat  (self touchPrim: 0) asFloat. t2 origin + (t3 - t1 origin / t1 extent * t2 extent)] touched [screenrect has: self touchPt] unschedule: t1 | t2 [t2 _ sched find: t1. 0 < t2  [sched _ sched  (1 to: t2 - 1) concat: sched  (t2 + 1 to: sched length)]] version ['Smalltalk 5.5g XM March 6'] versionName | t1 [t1 _ self version asStream. t1 skipTo: 32. t1 upto: 32] waitbug [until self anybug do []. self mp] waitclickbug [self waitnobug. self waitbug] waitnobug [while self anybug do []. self mp] waitnokey [until self keyset = 0 do [self rawkbck]] workspace [user notify: 'Not meant to be executed'] writeChangedMessages: t1 | t2 t3 t4 [t1 settoend. t1 cr. t1 cr. t1 asParagraphPrinter stamp. t2 _ ''. for t3 from: user changedMessages do [t4 _ t3 asStream. (t4 upto: 32) = t2  [t1 append: ', '. t1 append: (t4 upto: 32)] t1 cr. t1 append: t3. t2 _ t3 asStream upto: 32]. t1 close] writeSources: t1 [user file: t1 classes: SystemOrganization changesOnly: t1 end  false. Sources close. Sources _ t1] x [self mp x] y [self mp y] yellowbug [self buttons = 2]