|
1 "{ Package: 'stx:libtool2' }" |
|
2 |
|
3 "{ NameSpace: Tools }" |
|
4 |
|
5 ApplicationModel subclass:#ObjectModuleInformation |
|
6 instanceVariableNames:'listOfModuleNames selectedModuleIndexHolder allModules' |
|
7 classVariableNames:'' |
|
8 poolDictionaries:'' |
|
9 category:'Monitors-ST/X' |
|
10 ! |
|
11 |
|
12 Object subclass:#InfoRow |
|
13 instanceVariableNames:'name version date' |
|
14 classVariableNames:'' |
|
15 poolDictionaries:'' |
|
16 privateIn:ObjectModuleInformation |
|
17 ! |
|
18 |
|
19 !ObjectModuleInformation class methodsFor:'documentation'! |
|
20 |
|
21 documentation |
|
22 " |
|
23 Shows the modules (dll's) of ST/X. |
|
24 Both builtIn modules, and dynamically loaded modules are listed. |
|
25 |
|
26 [author:] |
|
27 cg |
|
28 " |
|
29 ! |
|
30 |
|
31 examples |
|
32 " |
|
33 Starting the application: |
|
34 [exBegin] |
|
35 ObjectModuleInformation open |
|
36 |
|
37 [exEnd] |
|
38 " |
|
39 ! ! |
|
40 |
|
41 !ObjectModuleInformation class methodsFor:'info'! |
|
42 |
|
43 defaultLabel |
|
44 ^ 'Process Monitor' |
|
45 |
|
46 "Created: / 05-10-2007 / 11:56:59 / cg" |
|
47 ! ! |
|
48 |
|
49 !ObjectModuleInformation class methodsFor:'interface specs'! |
|
50 |
|
51 windowSpec |
|
52 "This resource specification was automatically generated |
|
53 by the UIPainter of ST/X." |
|
54 |
|
55 "Do not manually edit this!! If it is corrupted, |
|
56 the UIPainter may not be able to read the specification." |
|
57 |
|
58 " |
|
59 UIPainter new openOnClass:ObjectModuleInformation andSelector:#windowSpec |
|
60 ObjectModuleInformation new openInterface:#windowSpec |
|
61 ObjectModuleInformation open |
|
62 " |
|
63 |
|
64 <resource: #canvas> |
|
65 |
|
66 ^ |
|
67 #(FullSpec |
|
68 name: windowSpec |
|
69 window: |
|
70 (WindowSpec |
|
71 label: 'ST/X Module & Version Information' |
|
72 name: 'ST/X Module & Version Information' |
|
73 min: (Point 0 0) |
|
74 bounds: (Rectangle 0 0 505 567) |
|
75 menu: mainMenu |
|
76 ) |
|
77 component: |
|
78 (SpecCollection |
|
79 collection: ( |
|
80 (MenuPanelSpec |
|
81 name: 'ToolBar1' |
|
82 layout: (LayoutFrame 0 0 0 0 0 1 30 0) |
|
83 menu: toolbarMenu |
|
84 textDefault: true |
|
85 ) |
|
86 (VariableVerticalPanelSpec |
|
87 name: 'VariableVerticalPanel1' |
|
88 layout: (LayoutFrame 0 0 30 0 0 1 0 1) |
|
89 component: |
|
90 (SpecCollection |
|
91 collection: ( |
|
92 (SequenceViewSpec |
|
93 name: 'List1' |
|
94 model: selectedModuleIndexHolder |
|
95 hasHorizontalScrollBar: true |
|
96 hasVerticalScrollBar: true |
|
97 useIndex: true |
|
98 sequenceList: listOfModuleNames |
|
99 ) |
|
100 (ViewSpec |
|
101 name: 'Box1' |
|
102 component: |
|
103 (SpecCollection |
|
104 collection: ( |
|
105 (LabelSpec |
|
106 name: 'Label1' |
|
107 layout: (LayoutFrame 0 0 0 0 0 1 30 0) |
|
108 translateLabel: true |
|
109 labelChannel: middleLabelHolder |
|
110 adjust: left |
|
111 ) |
|
112 (DataSetSpec |
|
113 name: 'Table1' |
|
114 layout: (LayoutFrame 0 0 30 0 0 1 0 1) |
|
115 model: selectedInfoIndexHolder |
|
116 hasHorizontalScrollBar: true |
|
117 hasVerticalScrollBar: true |
|
118 dataList: infoTableListHolder |
|
119 columnHolder: tableColumns |
|
120 separatorOneDColor: (Color 66.999313344015 66.999313344015 66.999313344015) |
|
121 ) |
|
122 ) |
|
123 |
|
124 ) |
|
125 ) |
|
126 ) |
|
127 |
|
128 ) |
|
129 handles: (Any 0.35195530726257 1.0) |
|
130 ) |
|
131 ) |
|
132 |
|
133 ) |
|
134 ) |
|
135 ! ! |
|
136 |
|
137 !ObjectModuleInformation class methodsFor:'menu specs'! |
|
138 |
|
139 mainMenu |
|
140 "This resource specification was automatically generated |
|
141 by the MenuEditor of ST/X." |
|
142 |
|
143 "Do not manually edit this!! If it is corrupted, |
|
144 the MenuEditor may not be able to read the specification." |
|
145 |
|
146 " |
|
147 MenuEditor new openOnClass:ObjectModuleInformation andSelector:#mainMenu |
|
148 (Menu new fromLiteralArrayEncoding:(ObjectModuleInformation mainMenu)) startUp |
|
149 " |
|
150 |
|
151 <resource: #menu> |
|
152 |
|
153 ^ |
|
154 #(Menu |
|
155 ( |
|
156 (MenuItem |
|
157 label: 'File' |
|
158 translateLabel: true |
|
159 submenu: |
|
160 (Menu |
|
161 ( |
|
162 (MenuItem |
|
163 label: 'Exit' |
|
164 itemValue: closeRequest |
|
165 translateLabel: true |
|
166 ) |
|
167 ) |
|
168 nil |
|
169 nil |
|
170 ) |
|
171 ) |
|
172 (MenuItem |
|
173 label: 'View' |
|
174 translateLabel: true |
|
175 submenu: |
|
176 (Menu |
|
177 ( |
|
178 (MenuItem |
|
179 label: 'Builtin' |
|
180 translateLabel: true |
|
181 indication: showBuiltIn |
|
182 ) |
|
183 (MenuItem |
|
184 label: 'Class Libraries' |
|
185 translateLabel: true |
|
186 indication: showClassLibs |
|
187 ) |
|
188 (MenuItem |
|
189 label: 'Methods' |
|
190 translateLabel: true |
|
191 indication: showMethods |
|
192 ) |
|
193 (MenuItem |
|
194 label: 'C-Objects' |
|
195 translateLabel: true |
|
196 indication: showCObjects |
|
197 ) |
|
198 (MenuItem |
|
199 label: 'Others' |
|
200 translateLabel: true |
|
201 indication: showOthers |
|
202 ) |
|
203 ) |
|
204 nil |
|
205 nil |
|
206 ) |
|
207 ) |
|
208 (MenuItem |
|
209 label: 'Module' |
|
210 translateLabel: true |
|
211 submenu: |
|
212 (Menu |
|
213 ( |
|
214 (MenuItem |
|
215 label: 'Unload' |
|
216 translateLabel: true |
|
217 ) |
|
218 ) |
|
219 nil |
|
220 nil |
|
221 ) |
|
222 ) |
|
223 (MenuItem |
|
224 label: 'Help' |
|
225 translateLabel: true |
|
226 startGroup: conditionalRight |
|
227 submenu: |
|
228 (Menu |
|
229 ( |
|
230 (MenuItem |
|
231 label: 'Documentation' |
|
232 itemValue: openDocumentation |
|
233 translateLabel: true |
|
234 ) |
|
235 (MenuItem |
|
236 label: '-' |
|
237 ) |
|
238 (MenuItem |
|
239 label: 'About this Application...' |
|
240 itemValue: openAboutThisApplication |
|
241 translateLabel: true |
|
242 ) |
|
243 ) |
|
244 nil |
|
245 nil |
|
246 ) |
|
247 ) |
|
248 ) |
|
249 nil |
|
250 nil |
|
251 ) |
|
252 ! ! |
|
253 |
|
254 !ObjectModuleInformation class methodsFor:'tableColumns specs'! |
|
255 |
|
256 tableColumns |
|
257 "This resource specification was automatically generated |
|
258 by the DataSetBuilder of ST/X." |
|
259 |
|
260 "Do not manually edit this!! If it is corrupted, |
|
261 the DataSetBuilder may not be able to read the specification." |
|
262 |
|
263 " |
|
264 DataSetBuilder new openOnClass:ObjectModuleInformation andSelector:#tableColumns |
|
265 " |
|
266 |
|
267 <resource: #tableColumns> |
|
268 |
|
269 ^#( |
|
270 (DataSetColumnSpec |
|
271 label: 'Name' |
|
272 activeHelpKey: '' |
|
273 labelButtonType: Button |
|
274 width: 0.5 |
|
275 model: name |
|
276 canSelect: false |
|
277 ) |
|
278 (DataSetColumnSpec |
|
279 label: 'Version' |
|
280 activeHelpKey: '' |
|
281 labelButtonType: Button |
|
282 model: version |
|
283 canSelect: false |
|
284 ) |
|
285 (DataSetColumnSpec |
|
286 label: 'Date' |
|
287 activeHelpKey: '' |
|
288 labelButtonType: Button |
|
289 model: date |
|
290 canSelect: false |
|
291 ) |
|
292 ) |
|
293 |
|
294 ! ! |
|
295 |
|
296 !ObjectModuleInformation methodsFor:'aspects'! |
|
297 |
|
298 infoTableListHolder |
|
299 ^ builder valueAspectFor:#'infoTableListHolder' initialValue:#() |
|
300 |
|
301 "Created: / 05-10-2007 / 11:07:50 / cg" |
|
302 ! |
|
303 |
|
304 listOfModuleNames |
|
305 listOfModuleNames isNil ifTrue:[ |
|
306 listOfModuleNames := List new. |
|
307 ]. |
|
308 ^ listOfModuleNames. |
|
309 |
|
310 "Modified: / 05-10-2007 / 10:49:19 / cg" |
|
311 ! |
|
312 |
|
313 middleLabelHolder |
|
314 ^ builder valueAspectFor:#'middleLabelHolder' initialValue:'' |
|
315 |
|
316 "Created: / 05-10-2007 / 11:05:08 / cg" |
|
317 ! |
|
318 |
|
319 selectedModuleIndexHolder |
|
320 selectedModuleIndexHolder isNil ifTrue:[ |
|
321 selectedModuleIndexHolder := ValueHolder new. |
|
322 selectedModuleIndexHolder onChangeSend:#selectedModuleIndexChanged to:self. |
|
323 ]. |
|
324 ^ selectedModuleIndexHolder. |
|
325 |
|
326 "Modified: / 05-10-2007 / 10:51:39 / cg" |
|
327 ! |
|
328 |
|
329 showBuiltIn |
|
330 ^ builder valueAspectFor:#'showBuiltIn' initialValue:true |
|
331 |
|
332 "Modified: / 05-10-2007 / 10:35:20 / cg" |
|
333 ! |
|
334 |
|
335 showCObjects |
|
336 ^ builder valueAspectFor:#'showCObjects' initialValue:true |
|
337 |
|
338 "Modified: / 05-10-2007 / 10:35:23 / cg" |
|
339 ! |
|
340 |
|
341 showClassLibs |
|
342 ^ builder valueAspectFor:#'showClassLibs' initialValue:true |
|
343 |
|
344 "Modified: / 05-10-2007 / 10:35:27 / cg" |
|
345 ! |
|
346 |
|
347 showMethods |
|
348 ^ builder valueAspectFor:#'showMethods' initialValue:true |
|
349 |
|
350 "Modified: / 05-10-2007 / 10:35:30 / cg" |
|
351 ! |
|
352 |
|
353 showOthers |
|
354 ^ builder valueAspectFor:#'showOthers' initialValue:true |
|
355 |
|
356 "Modified: / 05-10-2007 / 10:35:32 / cg" |
|
357 ! ! |
|
358 |
|
359 !ObjectModuleInformation methodsFor:'change & update'! |
|
360 |
|
361 selectedModuleIndexChanged |
|
362 |sel info| |
|
363 |
|
364 sel := self selectedModuleIndexHolder value. |
|
365 |
|
366 (self showClassLibs value or:[self showBuiltIn value]) ifTrue:[ |
|
367 info := allModules at:sel ifAbsent:nil. |
|
368 ]. |
|
369 info isNil ifTrue:[ |
|
370 "/ selected a method, cObject or unknown |
|
371 self showInfoForNonClassLib:sel. |
|
372 ^ self. |
|
373 ]. |
|
374 info == #VM ifTrue:[ |
|
375 "/ selected the pseudo entry for the VM itself |
|
376 self showInfoForVM. |
|
377 ^ self. |
|
378 ]. |
|
379 "/ selected a class-library package |
|
380 self showInfoForClassLib:info. |
|
381 |
|
382 "Modified: / 05-10-2007 / 11:02:05 / cg" |
|
383 ! |
|
384 |
|
385 showInfoForClassLib:info |
|
386 "/ selected a package; fill bottom list with class-info |
|
387 |
|
388 |classNames| |
|
389 |
|
390 self middleLabelHolder value:'Contains Modules:'. |
|
391 |
|
392 classNames := info classNames asSortedCollection. |
|
393 classNames := classNames select:[:cName | |
|
394 |cls| |
|
395 |
|
396 cls := Smalltalk classNamed:cName. |
|
397 cls isNil ifTrue:[ |
|
398 true "a removed class" |
|
399 ] ifFalse:[ |
|
400 cls isPrivate not |
|
401 ]. |
|
402 ]. |
|
403 |
|
404 classNames := classNames collect:[:cName | |
|
405 |cls entry rev listEntry revisionInfo| |
|
406 |
|
407 listEntry := InfoRow new. |
|
408 listEntry name:cName. |
|
409 |
|
410 cls := Smalltalk classNamed:cName. |
|
411 cls isNil ifTrue:[ |
|
412 listEntry version:'(class removed)'. |
|
413 ] ifFalse:[ |
|
414 rev := cls binaryRevision. |
|
415 rev notNil ifTrue:[ |
|
416 cls isLoaded ifFalse:[ |
|
417 entry := '(stub for: ' , rev. |
|
418 ] ifTrue:[ |
|
419 entry :='(bin: ' , rev. |
|
420 ]. |
|
421 cls revision ~= rev ifTrue:[ |
|
422 entry := entry , ' / src: ' , (cls revision printString) |
|
423 ]. |
|
424 entry := entry , ')'. |
|
425 listEntry version:entry |
|
426 ] ifFalse:[ |
|
427 cls revision notNil ifTrue:[ |
|
428 listEntry version:'(overloaded by: ' , cls revision , ')' |
|
429 ] |
|
430 ]. |
|
431 revisionInfo := cls revisionInfo. |
|
432 revisionInfo notNil ifTrue:[ |
|
433 listEntry date:(revisionInfo at:#date) |
|
434 ]. |
|
435 ]. |
|
436 listEntry |
|
437 ]. |
|
438 |
|
439 self infoTableListHolder value:classNames. |
|
440 |
|
441 "Modified: / 05-10-2007 / 11:26:13 / cg" |
|
442 ! |
|
443 |
|
444 showInfoForNonClassLib:sel |
|
445 "/ selected a method, cObject or unknown |
|
446 |
|
447 |objectHandles module fileName list entry| |
|
448 |
|
449 module := objectHandles at:sel. |
|
450 fileName := module pathName. |
|
451 |
|
452 module isMethodHandle ifTrue:[ |
|
453 |method nm entry1 entry2 entry3| |
|
454 |
|
455 self middleLabelHolder value:'Contains Compiled Method:'. |
|
456 |
|
457 (method := module method) isNil ifTrue:[ |
|
458 nm := '** removed **'. |
|
459 ] ifFalse:[ |
|
460 "/ menu := PopUpMenu |
|
461 "/ labels:#('Inspect' 'Browse') |
|
462 "/ selectors:#(inspect browse). |
|
463 "/ menu actionAt:#inspect put:[ method inspect ]. |
|
464 "/ menu actionAt:#browse put:[ |who| |
|
465 "/ who := method who. |
|
466 "/ UserPreferences systemBrowserClass |
|
467 "/ openInClass:(who methodClass) |
|
468 "/ selector:(who methodSelector) |
|
469 "/ ]. |
|
470 "/ listView1 middleButtonMenu:menu. |
|
471 |
|
472 nm := (method whoString) asText emphasizeAllWith:(#color->Color blue). |
|
473 ]. |
|
474 entry1 := InfoRow new. |
|
475 entry1 name:'compiled method'; version:nm. |
|
476 |
|
477 entry2 := InfoRow new. |
|
478 entry2 name:'path'; version:fileName. |
|
479 |
|
480 entry3 := InfoRow new. |
|
481 entry3 name:'address'; version:('(16r) ' , (method code address hexPrintString leftPaddedTo:8 with:$0)). |
|
482 |
|
483 self infoTableListHolder value:(Array with:entry1 with:entry2 with:entry3). |
|
484 ^ self. |
|
485 ]. |
|
486 |
|
487 (module isFunctionObjectHandle |
|
488 and:[module functions notEmpty]) ifTrue:[ |
|
489 self middleLabelHolder value:'Contains Functions:'. |
|
490 |
|
491 "/ menu := PopUpMenu |
|
492 "/ labels:#('Inspect') |
|
493 "/ selectors:#(inspect). |
|
494 "/ menu actionAt:#inspect put:[ module functions inspect ]. |
|
495 "/ listView1 middleButtonMenu:menu. |
|
496 "/ |
|
497 list := (module functions select:[:f | f notNil]) |
|
498 collect:[:f | |entry| |
|
499 entry := InfoRow new. |
|
500 entry name:(f name asText emphasizeAllWith:(#color->Color blue)). |
|
501 entry version:('address: (16r) ' , (f code address hexPrintString leftPaddedTo:8 with:$0)). |
|
502 entry |
|
503 ]. |
|
504 self infoTableListHolder value:list. |
|
505 ^ self. |
|
506 ]. |
|
507 |
|
508 entry := InfoRow new. |
|
509 entry name:'Unknown'. |
|
510 self infoTableListHolder value:(Array with:entry). |
|
511 |
|
512 "Modified: / 05-10-2007 / 11:51:38 / cg" |
|
513 ! |
|
514 |
|
515 showInfoForVM |
|
516 "/ show file versions in lower view. |
|
517 |
|
518 |l| |
|
519 |
|
520 self middleLabelHolder value:'Contains Modules:'. |
|
521 |
|
522 l := (ObjectMemory getVMIdentificationStrings). |
|
523 l := l select:[:entry | entry includesString:'$Header']. |
|
524 l := l select:[:entry | entry includesString:',v']. |
|
525 l := l collect:[:entry | |
|
526 |i1 i2 file revision date listEntry| |
|
527 |
|
528 listEntry := InfoRow new. |
|
529 |
|
530 i1 := entry indexOfSubCollection:'librun'. |
|
531 i1 ~~ 0 ifTrue:[ |
|
532 i2 := entry indexOfSubCollection:',v' startingAt:i1. |
|
533 i2 ~~ 0 ifTrue:[ |
|
534 file := entry copyFrom:i1+7 to:(i2-1). |
|
535 listEntry name:file. |
|
536 |
|
537 i1 := i2+3. |
|
538 i2 := entry indexOfSeparatorStartingAt:i1. |
|
539 revision := entry copyFrom:i1 to:(i2-1). |
|
540 listEntry version:revision. |
|
541 |
|
542 i1 := i2+1. |
|
543 i2 := entry indexOfSeparatorStartingAt:i1. |
|
544 date := entry copyFrom:i1 to:(i2-1). |
|
545 listEntry date:date. |
|
546 ]. |
|
547 ]. |
|
548 listEntry. |
|
549 ]. |
|
550 self infoTableListHolder value:l. |
|
551 |
|
552 "/ readOnly ifFalse:[ |
|
553 "/ unloadButton disable. |
|
554 "/ unloadAndRemoveButton disable. |
|
555 "/ ] |
|
556 |
|
557 "Modified: / 05-10-2007 / 11:15:08 / cg" |
|
558 ! ! |
|
559 |
|
560 !ObjectModuleInformation methodsFor:'initialization'! |
|
561 |
|
562 postBuildWith:aBuilder |
|
563 |canDoIt| |
|
564 |
|
565 super postBuildWith:aBuilder. |
|
566 |
|
567 canDoIt := ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles]. |
|
568 self showBuiltIn value:canDoIt. |
|
569 self showCObjects value:canDoIt. |
|
570 self showClassLibs value:canDoIt. |
|
571 self showMethods value:canDoIt. |
|
572 self showOthers value:canDoIt. |
|
573 |
|
574 self updateModuleList |
|
575 |
|
576 "Created: / 05-10-2007 / 10:50:27 / cg" |
|
577 ! ! |
|
578 |
|
579 !ObjectModuleInformation methodsFor:'menu actions'! |
|
580 |
|
581 openDocumentation |
|
582 |
|
583 "Modified: / 05-10-2007 / 11:56:07 / cg" |
|
584 ! ! |
|
585 |
|
586 !ObjectModuleInformation methodsFor:'private'! |
|
587 |
|
588 updateModuleList |
|
589 |showClassLibs showBuiltIn showMethods showCObjects showOthers |
|
590 listOfModuleNames allObjects handles| |
|
591 |
|
592 showClassLibs := self showClassLibs value. |
|
593 showBuiltIn := self showBuiltIn value. |
|
594 showMethods := self showMethods value. |
|
595 showCObjects := self showCObjects value. |
|
596 showOthers := self showOthers value. |
|
597 |
|
598 listOfModuleNames := OrderedCollection new. |
|
599 handles := OrderedCollection new. |
|
600 |
|
601 allObjects := ObjectFileLoader loadedObjectHandles. |
|
602 |
|
603 (showClassLibs or:[showBuiltIn]) ifTrue:[ |
|
604 |moduleNames| |
|
605 |
|
606 allModules := ObjectMemory binaryModuleInfo asOrderedCollection. |
|
607 (showBuiltIn and:[showClassLibs]) ifFalse:[ |
|
608 allModules := allModules select: |
|
609 [:i | |
|
610 |wantToSee| |
|
611 |
|
612 wantToSee := i dynamic. |
|
613 showBuiltIn ifTrue:[ |
|
614 wantToSee := wantToSee not |
|
615 ]. |
|
616 wantToSee |
|
617 ] |
|
618 ]. |
|
619 |
|
620 "/ sorting by reverse id brings newest ones to the top (a side effect) |
|
621 allModules sort:[:a :b | (a id) > (b id)]. |
|
622 moduleNames := allModules collect:[:entry | entry name]. |
|
623 listOfModuleNames addAll:moduleNames. |
|
624 handles addAll:allModules. |
|
625 ]. |
|
626 |
|
627 showMethods ifTrue:[ |
|
628 |methodObjects methodNames| |
|
629 |
|
630 methodObjects := (allObjects select:[:h | h isMethodHandle]) asArray. |
|
631 methodNames := methodObjects collect:[:mH | mH method isNil ifTrue:[ |
|
632 'compiled method - removed' " , ' (in ' , mH pathName , ')' " |
|
633 ] ifFalse:[ |
|
634 'compiled method ' , mH method whoString " , ' (in ' , mH pathName , ')' " |
|
635 ]. |
|
636 ]. |
|
637 listOfModuleNames addAll:methodNames. |
|
638 handles addAll:methodObjects. |
|
639 ]. |
|
640 |
|
641 showCObjects ifTrue:[ |
|
642 |cObjects cObjectNames| |
|
643 |
|
644 cObjects := (allObjects select:[:h | h isFunctionObjectHandle]) asArray. |
|
645 cObjectNames := cObjects collect:[:entry | entry pathName]. |
|
646 listOfModuleNames addAll:cObjectNames. |
|
647 handles addAll:cObjects. |
|
648 ]. |
|
649 |
|
650 showOthers ifTrue:[ |
|
651 |otherObjects otherObjectNames| |
|
652 |
|
653 otherObjects := (allObjects select:[:h | (h isFunctionObjectHandle |
|
654 or:[h isMethodHandle |
|
655 or:[h isClassLibHandle]]) not]) asArray. |
|
656 otherObjectNames := otherObjects collect:[:entry | entry pathName]. |
|
657 listOfModuleNames addAll:otherObjectNames. |
|
658 handles addAll:otherObjects. |
|
659 ]. |
|
660 |
|
661 showBuiltIn ifTrue:[ |
|
662 listOfModuleNames addFirst:'VM'. |
|
663 handles addFirst:#VM. |
|
664 allModules addFirst:#VM. |
|
665 ]. |
|
666 |
|
667 self listOfModuleNames contents:listOfModuleNames. |
|
668 |
|
669 "/ readOnly ifFalse:[ |
|
670 "/ unloadButton disable. |
|
671 "/ unloadAndRemoveButton disable. |
|
672 "/ ] |
|
673 |
|
674 "Created: / 05-10-2007 / 10:46:18 / cg" |
|
675 ! ! |
|
676 |
|
677 !ObjectModuleInformation::InfoRow methodsFor:'accessing'! |
|
678 |
|
679 date |
|
680 ^ date |
|
681 ! |
|
682 |
|
683 date:something |
|
684 date := something. |
|
685 ! |
|
686 |
|
687 name |
|
688 ^ name |
|
689 ! |
|
690 |
|
691 name:something |
|
692 name := something. |
|
693 ! |
|
694 |
|
695 name:nameArg version:versionArg date:dateArg |
|
696 name := nameArg. |
|
697 version := versionArg. |
|
698 date := dateArg. |
|
699 ! |
|
700 |
|
701 version |
|
702 ^ version |
|
703 ! |
|
704 |
|
705 version:something |
|
706 version := something. |
|
707 ! ! |
|
708 |
|
709 !ObjectModuleInformation class methodsFor:'documentation'! |
|
710 |
|
711 version |
|
712 ^ '$Header$' |
|
713 ! ! |