MiniIns.st
changeset 1 a27a279701f8
child 3 24d81bf47225
equal deleted inserted replaced
0:aa2498ef6470 1:a27a279701f8
       
     1 "
       
     2  COPYRIGHT (c) 1989-93 by Claus Gittinger
       
     3               All Rights Reserved
       
     4 
       
     5  This software is furnished under a license and may be used
       
     6  only in accordance with the terms of that license and with the
       
     7  inclusion of the above copyright notice.   This software may not
       
     8  be provided or otherwise made available to, or used by, any
       
     9  other person.  No title to or ownership of the software is
       
    10  hereby transferred.
       
    11 "
       
    12 
       
    13 Object subclass:#MiniInspector
       
    14        instanceVariableNames:'inspectedObject'
       
    15        classVariableNames:   ''
       
    16        poolDictionaries:''
       
    17        category:'System-Support'
       
    18 !
       
    19 
       
    20 MiniInspector comment:'
       
    21 
       
    22 COPYRIGHT (c) 1989-93 by Claus Gittinger
       
    23               All Rights Reserved
       
    24 
       
    25 a primitive (non graphical) inspector for use on systems without
       
    26 graphics or when the real inspector dies.
       
    27 
       
    28 %W% %E%
       
    29 '!
       
    30 
       
    31 !MiniInspector class methodsFor:'instance creation'!
       
    32 
       
    33 openOn:anObject
       
    34     |anInspector|
       
    35     anInspector := (self new) initializeFor:anObject.
       
    36     anInspector enter
       
    37 ! !
       
    38 
       
    39 !MiniInspector methodsFor:'private'!
       
    40 
       
    41 initializeFor:anObject
       
    42     inspectedObject := anObject.
       
    43     ^self
       
    44 !
       
    45 
       
    46 enter
       
    47     self commandLoop.
       
    48     ^ nil
       
    49 !
       
    50 
       
    51 commandLoop
       
    52     |cmd done valid|
       
    53 
       
    54     'Inspector:' printNewline.
       
    55     ' ' printNewline.
       
    56     done := false.
       
    57     [done] whileFalse:[
       
    58         valid := false.
       
    59         cmd := self getCommand.
       
    60         (cmd == $0) ifTrue:[
       
    61             valid := true.
       
    62             self inspectInstvar:0 of:inspectedObject
       
    63         ].
       
    64         (cmd == $1) ifTrue:[
       
    65             valid := true.
       
    66             self inspectInstvar:1 of:inspectedObject
       
    67         ].
       
    68         (cmd == $2) ifTrue:[
       
    69             valid := true.
       
    70             self inspectInstvar:2 of:inspectedObject
       
    71         ].
       
    72         (cmd == $3) ifTrue:[
       
    73             valid := true.
       
    74             self inspectInstvar:3 of:inspectedObject
       
    75         ].
       
    76         (cmd == $i) ifTrue:[
       
    77             valid := true.
       
    78             self printInstVarsOf:inspectedObject
       
    79         ].
       
    80         (cmd == $p) ifTrue:[
       
    81             valid := true.
       
    82             inspectedObject printNewline
       
    83         ].
       
    84         (cmd == $q) ifTrue:[valid := true. done := true ].
       
    85         valid ifFalse: [
       
    86             'valid commands:' printNewline.
       
    87             '   (i)nstvars'   printNewline.
       
    88             '   (p)rint'      printNewline.
       
    89             '   (1-9) inspect instvar'      printNewline.
       
    90             '   (q)uit'       printNewline
       
    91         ]
       
    92     ].
       
    93     ^ cmd
       
    94 !
       
    95 
       
    96 getCommand
       
    97     |cmd c|
       
    98     'inspector> ' print.
       
    99     cmd := Character fromUser.
       
   100     c := cmd.
       
   101     [ c isEndOfLineCharacter ] whileFalse: [
       
   102         c := Character fromUser
       
   103     ].
       
   104     ^ cmd
       
   105 !
       
   106 
       
   107 printInstVarsOf:anObject
       
   108     |n|
       
   109     n := anObject class instSize.
       
   110     'number of instvars: ' print. n printNewline.
       
   111     1 to:n do:[:i |
       
   112         '  ' print. i print. ': ' print.
       
   113         (anObject instVarAt:i) printNewline
       
   114     ]
       
   115 !
       
   116 
       
   117 inspectInstvar:which of:anObject
       
   118     which > (anObject class instSize) ifTrue:[
       
   119         'invalid instvar' printNewline
       
   120     ] ifFalse: [
       
   121         (anObject instVarAt:which) inspect
       
   122     ]
       
   123 ! !