bvs%sun@Sun.COM (Bruce V. Schwartz) (06/15/88)
This file contains a NeWS server class browser. It is a good way to
roam through the classes loaded into the server. Although it has
many deficiencies, (searching, following references), it is generally
quite useful.
The browser has 5 panes. It is similar in appearance to the Smalltalk
browser. The first pane on the top of the window contains the list of
classes in the server. The next 3 contain the list of methods, class
variables, and instance variables associated with the selected class in
the first pane. The bottom pane is used to display information about
the current selection. Make selections by clicking on any text in the
top panes with the left button.
This code was mostly written in August 1987 but was revised to work with
NeWS 1.1 in May 1988. Feel free to use it as you will. Suggestions
(or improvements!) welcomed.
Bruce V. Schwartz
Sun Microsystems
bvs@sun.com
NOTE: Normally, the following would be divided into 2 files, but I've
appended them here to make it more fail safe. You can deppend them
if you like. In that case, however, the files must be located as:
~/NeWS/browse/pw.ps and ~/NeWS/browse/browse.ps
if you want to run them without modification. The file pw.ps contains
the classes used by browse.ps. I suggest using the browser to examine
those classes!!
%--------cut here----------pw.ps-------------------
%% $Header: pw.ps,v 1.3 88/06/14 17:17:52 bvs Locked $
% This file contains the classes used by the class browser.
% The classes included are:
% Picture -- an Item similar in concept to the NeWS1.1 textcanvas
% PicWindow -- a LiteWindow that holds Pictures
% PicScroll -- a SimpleScrollbar with a few modifications (auto scrolling)
%
% This code was mostly written in August 1987 but was revised to work with
% NeWS 1.1 in May 1988. Feel free to use it as you will.
%
% Bruce V. Schwartz
% Sun Microsystems
% bvs@sun.com
%
systemdict begin
systemdict /Item known not { (NeWS/liteitem.ps) run } if
systemdict /SimpleScrollbar known not { (NeWS/liteitem.ps) run } if
end
%% This file contains classes: PicWindow Picture PicScroll
/PicWindow LiteWindow
dictbegin
/PicArray [] def
/BorderRight 1 def
/BorderLeft 1 def
/BorderBottom 1 def
dictend
classbegin
/PaintIcon
{
1 fillcanvas
.8 setgray
IconWidth 2 div 1 sub IconHeight 4 div 5 sub 5 Sunlogo
} def
/PaintClient
{
%% (paint client %\n) [ PicArray ] dbgprintf
%% PicArray { ( %\n) [ 3 2 roll ] dbgprintf } forall
PicArray paintitems
} def
/setpicarray
{
/PicArray exch def
} def
/destroy
{
%% (destroying arrays\n) [] dbgprintf
PicArray { /destroy exch send } forall
%% (destroying window\n) [] dbgprintf
/destroy super send
%% (destroyed window\n) [] dbgprintf
} def
classend
def
/PicScrollbar SimpleScrollbar
dictbegin
/Owner null def
/MouseInItem? false def
/ScrollMonitor null def
/ScrollProcess null def
/ScrollDelay 1 60 div 20 div def % 1/10 second
/LastX null def
/LastY null def
dictend
classbegin
/new {
/new super send
begin
/ScrollMonitor createmonitor def
currentdict
end
} def
/setowner {
/Owner exch def
} def
/ClientDown { % - => -
CurrentEvent begin XLocation YLocation end
/LastY exch def
/LastX exch def
SetScrollMotion
/MouseInItem? true def
HiliteItem
DoScroll
ScrollProcess null ne
{ ScrollMonitor { ScrollProcess killprocess } monitor }
if
/ScrollProcess { InteractiveScroll } fork def
} def
/InteractiveScroll {
{
ScrollDelay sleep
ScrollMonitor { EventInItem? { DoScroll } if } monitor
} loop
} def
/ClientUp { % - => -
ScrollMonitor { ScrollProcess killprocess } monitor
/ScrollProcess null def
/MouseInItem? false def
UnhiliteItem
ItemValue ItemInitialValue ne { /Notify Owner send } if
} def
/ClientDrag { % - => -
CurrentEvent begin XLocation YLocation end
/LastY exch def
/LastX exch def
CheckItem
} def
/PaintBar { } def
/EraseBox { } def
/PaintButtons {
BarViewPercent 1 gt { /PaintButtons super send } if
} def
/PaintBox { % - => - (paint box)
%(PaintBox %\n) [ BarViewPercent ] dbgprintf
%(pause...) [] dbgprintf 1 60 div sleep (!!\n) [] dbgprintf
gsave
10 dict begin
/x 1 def
/w ItemWidth 2 sub def
BarViewPercent 1 le
{
.5 setgray
x ButtonSize w ItemHeight ButtonSize dup add sub rectpath fill
}
{
1 1 BarViewPercent div sub 1 ItemValue sub mul
ItemHeight ButtonSize dup add sub mul ButtonSize add
/y exch def
1 BarViewPercent div ItemHeight ButtonSize dup add sub mul
/h exch def
%
% do the normal bar
%
ItemFillColor setcolor
x ButtonSize w y ButtonSize sub rectpath fill
x y h add w ItemHeight ButtonSize sub y sub h sub rectpath fill
%
% do the big scroll box
%
/ybut ItemValue ValueToY def
.5 setgray
x y w ybut y sub rectpath fill
x ybut ButtonSize add w h ButtonSize sub ybut sub y add rectpath fill
%
% do the little scroll box
%
ItemValue BoxPath
BoxFillColor setcolor gsave fill grestore
ItemBorderColor setcolor eofill
} ifelse
end
/ItemPaintedValue ItemValue def
grestore
/Notify Owner send
} def
/EventInItem? { % - => bool
ScrollMotion
{
/ScrollAbsolute { false }
/ScrollPageForward % top
{
LastX dup 0 ge exch ButtonSize le
LastY ItemValue ValueToY ButtonSize add ge
LastY ItemHeight ButtonSize sub le
and and and
}
/ScrollPageBackward % bottom
{
LastX dup 0 ge exch ButtonSize le
LastY ButtonSize ge
LastY ItemValue ValueToY le
and and and
}
/ScrollLineForward % top
{
LastX 0 ge
LastX ButtonSize le
LastY ItemHeight ButtonSize sub ge
LastY ItemHeight le
and and and
}
/ScrollLineBackward % bottom
{
LastX 0 ge
LastX ButtonSize le
LastY 0 ge
LastY ButtonSize le
and and and
}
} case
BarViewPercent 1 le { pop false } if
} def
/CheckItem {
ScrollMotion
{
/ScrollAbsolute {DoScroll}
/ScrollPageForward % top
{
/MouseInItem? EventInItem? def
}
/ScrollPageBackward % bottom
{
/MouseInItem? EventInItem? def
}
/ScrollLineForward % top
{
EventInItem? dup
{ MouseInItem? not { HiliteItem } if }
{ MouseInItem? { UnhiliteItem } if }
ifelse
/MouseInItem? exch def
}
/ScrollLineBackward % bottom
{
EventInItem? dup
{ MouseInItem? not { HiliteItem } if }
{ MouseInItem? { UnhiliteItem } if }
ifelse
/MouseInItem? exch def
}
} case
} def
/HiliteItem {
ScrollMotion
{
/ScrollAbsolute { }
/ScrollPageForward { }
/ScrollPageBackward { }
/ScrollLineForward % top
{
0 ItemHeight ButtonSize ButtonSize neg rectpath
5 setrasteropcode fill
}
/ScrollLineBackward % bottom
{
0 0 ButtonSize ButtonSize rectpath
5 setrasteropcode fill
}
} case
} def
/UnhiliteItem {
gsave
ScrollMotion
{
/ScrollAbsolute {}
/ScrollPageForward {}
/ScrollPageBackward {}
/ScrollLineForward % top
{
0 ItemHeight ButtonSize sub ButtonSize ButtonSize rectpath
clip
PaintButtons
}
/ScrollLineBackward % bottom
{
0 0 ButtonSize ButtonSize rectpath
clip
PaintButtons
}
} case
grestore
} def
classend
def
/Picture Item
dictbegin
/BufferCanvas null def
/BufferWidth 0 def
/BufferHeight 0 def
/HScrollbar null def
/VScrollbar null def
/HScrollbar? true def
/VScrollbar? true def
/HScrollWidth 0 def
/VScrollWidth 0 def
/ScrollWidth 16 def
/ZoomFactor 1 def
/NotifyUserDown { pop pop } def % x y => -
/NotifyUserUp { pop pop } def % x y => -
/NotifyUserDrag { pop pop } def % x y => -
/NotifyUserEnter { pop pop } def % x y => -
/NotifyUserExit { pop pop } def % x y => -
dictend
classbegin
/new { % parentcanvas width height => instance
% (new begin\n) [] dbgprintf
/new super send
begin
/BufferHeight ItemHeight def
/BufferWidth ItemWidth def
CreateScrollbars
CreateBuffer
currentdict
end
% (new end\n) [] dbgprintf
} def
/destroy {
HScrollbar null ne { null /setowner HScrollbar send } if
VScrollbar null ne { null /setowner VScrollbar send } if
%% BufferCanvas /Mapped false put
%% /BufferCanvas null def
} def
/setzoom { % zoomfactor => -
/ZoomFactor exch def
} def
/reshape { % x y w h => -
/reshape super send
ReshapeScrollbars
} def
/reshapebuffer { % w h => -
/BufferHeight exch def
/BufferWidth exch def
ReshapeBuffer
ReshapeScrollbars
} def
/getcanvas {
BufferCanvas
} def
/updatecanvas {
PaintBuffer
} def
/makestartinterests {
/makestartinterests HScrollbar send
/makestartinterests VScrollbar send
[ exch aload length 2 add -1 roll aload pop ] % join 2 arrays
/makestartinterests super send
[ exch aload length 2 add -1 roll aload pop ] % join 2 arrays
} def
/PaintItem {
%% (PaintItem begin\n) [] dbgprintf
%% ItemCanvas setcanvas .9 fillcanvas
PaintBuffer
/paint VScrollbar send
/paint HScrollbar send
%% (PaintItem end\n) [] dbgprintf
} def
/Notify {
% (picture got notified\n) [] dbgprintf
NotifyUser
PaintBuffer
} def
/PaintBuffer {
% (PaintBuffer begin \n) [ ] dbgprintf
gsave
ItemCanvas setcanvas
%
% compute clipping region
%
0
HScrollWidth
ItemWidth VScrollWidth sub
ItemHeight HScrollWidth sub
rectpath
% (clip to % % % %\n) [ pathbbox ] dbgprintf
clip
%
% compute translation
%
BufferWidth ZoomFactor mul ItemWidth sub VScrollWidth add neg
dup 0 lt
{
1 /getvalue HScrollbar send sub
mul
}
{ pop 0 } ifelse
BufferHeight ZoomFactor mul ItemHeight sub HScrollWidth add neg
dup 0 lt
{
1 /getvalue VScrollbar send sub
mul
}
{ } ifelse
HScrollWidth add
% 2 copy (translate by % %\n) [ 4 2 roll ] dbgprintf
translate
BufferWidth BufferHeight
% 2 copy (scale by % %\n) [ 4 2 roll ] dbgprintf
scale
ZoomFactor dup scale
pause
BufferCanvas imagecanvas
pause
grestore
% (PaintBuffer end\n) [ ] dbgprintf
} def
/CreateBuffer { % - => -
/BufferCanvas framebuffer newcanvas def
BufferCanvas /Retained true put
BufferCanvas /Opaque true put
ReshapeBuffer
} def
/ReshapeBuffer { % - => -
gsave
framebuffer setcanvas
0 0 BufferWidth BufferHeight
rectpath
BufferCanvas reshapecanvas
grestore
} def
/CreateScrollbars { % - => -
% (begin CreateScrollbars\n) [] dbgprintf
/HScrollWidth HScrollbar? { ScrollWidth } { 0 } ifelse def
/VScrollWidth VScrollbar? { ScrollWidth } { 0 } ifelse def
ItemWidth VScrollWidth le { /VScrollWidth ScrollWidth 2 div def } if
ItemHeight HScrollWidth le { /HScrollWidth ScrollWidth 2 div def } if
/HScrollbar
[1 0 .01 .1 BufferWidth ItemWidth VScrollWidth sub div ]
1 {} ItemCanvas
/new PicScrollbar send
dup /BarVertical? false put
def
/VScrollbar
[1 0 .01 .1 BufferHeight ItemHeight HScrollWidth sub div ]
1 {} ItemCanvas
/new PicScrollbar send
def
self /setowner HScrollbar send
self /setowner VScrollbar send
% (end CreateScrollbars\n) [] dbgprintf
} def
/ReshapeScrollbars {
/HScrollWidth HScrollbar? { ScrollWidth } { 0 } ifelse def
/VScrollWidth VScrollbar? { ScrollWidth } { 0 } ifelse def
10 dict begin
/h ItemHeight def /w ItemWidth def
/s ScrollWidth def
[1 0 .01 .1 BufferWidth ItemWidth VScrollWidth sub div ]
/setrange HScrollbar send
[1 0 .01 .1 BufferHeight ItemHeight HScrollWidth sub div ]
/setrange VScrollbar send
HScrollbar?
{ 0 0 w VScrollWidth sub s }
{ 0 0 0 0 }
ifelse
% 4 copy (hscroll % % % %\n) [ 6 2 roll ] dbgprintf
/reshape HScrollbar send
VScrollbar?
{ w s sub HScrollWidth s h HScrollWidth sub }
{ 0 0 0 0 }
ifelse
% 4 copy (vscroll % % % %\n) [ 6 2 roll ] dbgprintf
/reshape VScrollbar send
end
} def
/ClientDown {
% (Picture ClientDown\n) [] dbgprintf
% compute translation
%
BufferWidth ZoomFactor mul ItemWidth sub VScrollWidth add neg
dup 0 lt
{
1 /getvalue HScrollbar send sub
mul
}
{ pop 0 } ifelse
BufferHeight ZoomFactor mul ItemHeight sub HScrollWidth add neg
dup 0 lt
{
1 /getvalue VScrollbar send sub
mul
}
{ } ifelse
HScrollWidth add
% translatex translatey
CurrentEvent /YLocation get sub neg exch
CurrentEvent /XLocation get sub neg exch
% (n: %\n) [ NotifyUserDown ] dbgprintf
{ NotifyUserDown } fork
} def
/ClientUp {
% (Picture ClientUp\n) [] dbgprintf
CurrentEvent begin XLocation YLocation end
NotifyUserUp
} def
/ClientDrag {
% (client drag\n) [] dbgprintf
CurrentEvent begin XLocation YLocation end
NotifyUserDrag
} def
/ClientEnter {
%% (client enter\n) [] dbgprintf
CurrentEvent begin XLocation YLocation end NotifyUserEnter
} def
/ClientExit {
%% (client exit\n) [] dbgprintf
CurrentEvent begin XLocation YLocation end NotifyUserExit
} def
classend
def
%--------cut here----------browse.ps-------------------
%!
%% $Header: browse.ps,v 1.2 88/06/14 17:17:45 bvs Locked $
%
% This file contains a NeWS server class browser.
%
% The browser is built on the classes defined in pw.ps. The class
% browser has 5 panes. It is similar in appearance to the Smalltalk
% browser. The first pane on the top of the window contains the list of
% classes in the server. The next 3 contain the list of methods, class
% variables, and instance variables associated with the selected class in
% the first pane. The bottom pane is used to display information about
% the current selection.
%
% This code was mostly written in August 1987 but was revised to work with
% NeWS 1.1 in May 1988. Feel free to use it as you will.
%
% Bruce V. Schwartz
% Sun Microsystems
% bvs@sun.com
%
% you will have to alter the following line unless you keep this program
% in ~/NeWS/browse.
userdict /PicWindow known not { (NeWS/browse/pw.ps) run } if
userdict begin
/Font15 /Times-Roman findfont 15 scalefont def
/StartWait {
userdict begin
/SaveCursor [ currentcanvas getcanvascursor ] def
/hourg /hourg_m fboverlay setstandardcursor
end
} def
/EndWait {
userdict begin
SaveCursor aload pop setcanvascursor
end
} def
/DoubleBubbleSort % keyarray valuearray => - (sorts in place)
{
%% 2 copy (double % %\n) [ 4 2 roll ] dbgprintf
%% StartWait
20 dict begin
/values exch def
/keys exch def
/bound keys length 1 sub def
/check 0 def
{
/t -1 def
0 1 bound 1 sub
{
/i exch def
/j i 1 add def
/keysi keys i get def
/keysj keys j get def
keysi keysj gt
{
keys i keysj put
keys j keysi put
/valuesi values i get cvlit def
/valuesj values j get cvlit def
values i valuesj put
values j valuesi put
/t j def
} if
} for
t -1 eq
{ exit }
{ /bound t def }
ifelse
pause
} loop
end
%% EndWait
} def
/PicArray [ ] def
/win framebuffer /new PicWindow send def
{
/FrameLabel (Class Browser -- make selections with left button) def
} /doit win send
100 100 800 517 /reshape win send
/map win send
/ClassKeys [] def
/InstKeys [] def
/MethodKeys [] def
/VarKeys [] def
/ClassPic win /ClientCanvas get 300 1000 /new Picture send def % classes
/MethodPic win /ClientCanvas get 300 1000 /new Picture send def % methods
/VarPic win /ClientCanvas get 300 1000 /new Picture send def % class var
/InstPic win /ClientCanvas get 300 1000 /new Picture send def % ints var
/TextPic win /ClientCanvas get 800 600 /new Picture send def % text
/PicArray [ ClassPic InstPic MethodPic VarPic TextPic ] def
PicArray /setpicarray win send
ClassPic /HScrollbar? false put
InstPic /HScrollbar? false put
MethodPic /HScrollbar? false put
VarPic /HScrollbar? false put
TextPic /HScrollbar? false put
000 200 200 300 /reshape ClassPic send
200 200 200 300 /reshape MethodPic send
400 200 200 300 /reshape VarPic send
600 200 200 300 /reshape InstPic send
0 0 800 200 /reshape TextPic send
0 /setvalue ClassPic /VScrollbar get send
0 /setvalue InstPic /VScrollbar get send
0 /setvalue MethodPic /VScrollbar get send
0 /setvalue VarPic /VScrollbar get send
0 /setvalue TextPic /VScrollbar get send
/ClassColor 1 .8 .8 rgbcolor def
/InstColor 1 .8 1 rgbcolor def
/MethodColor .8 1 .8 rgbcolor def
/VarColor .8 .8 1 rgbcolor def
/TextColor .8 .8 .8 rgbcolor def
/getcanvas ClassPic send setcanvas
ClassColor fillcanvas
0 0 0 rgbcolor strokecanvas
/getcanvas InstPic send setcanvas
InstColor fillcanvas
0 0 0 rgbcolor strokecanvas
0 280 moveto (Class Insts) show
/getcanvas MethodPic send setcanvas
MethodColor fillcanvas
0 0 0 rgbcolor strokecanvas
0 280 moveto (Class Methods) show
/getcanvas VarPic send setcanvas
VarColor fillcanvas
0 0 0 rgbcolor strokecanvas
0 280 moveto (Class Vars) show
/getcanvas TextPic send setcanvas
TextColor fillcanvas
0 0 0 rgbcolor strokecanvas
0 180 moveto (Text) show
PicArray forkitems pop
/ShowArray { % array color pic
10 dict begin
/pic exch def
/color exch def
/a exch def
Font15 setfont
%% 300 a length 18 mul 15 add /reshapebuffer pic send
/getcanvas pic send setcanvas
color fillcanvas
0 0 0 rgbcolor setcolor
/k pic /BufferHeight get def
a
{
/k k 18 sub def
5 k
moveto
show
} forall
/updatecanvas pic send
end
} def
%[] ClassColor ClassPic ShowArray
%[] MethodColor MethodPic ShowArray
%[] VarColor VarPic ShowArray
%[] InstColor InstPic ShowArray
%[] TextColor TextPic ShowArray
/DoClasses {
/getcanvas ClassPic send setcanvas
10 dict begin
/ClassKeys [] def
/ClassVals [] def
[ systemdict userdict ]
{
{
/val exch cvlit def
/key exch cvlit def
val type /dicttype eq
{
val /ClassName known
{
/ClassKeys ClassKeys 999 key 256 string cvs arrayinsert def
/ClassVals ClassVals 999 val arrayinsert def
}
if
}
if
pause
} forall
} forall
ClassKeys
ClassVals
end
/ClassVals exch def
/ClassKeys exch def
ClassKeys ClassVals DoubleBubbleSort
ClassKeys ClassColor ClassPic ShowArray
} def
/DoMethods { % classdict => -
10 dict begin
/classdict exch def
/MethodKeys [] def
/MethodVals [] def
classdict
{
/val exch def
/key exch def
/val load type /arraytype eq
/val load xcheck
and
{
/MethodKeys MethodKeys 999 key 256 string cvs arrayinsert def
/MethodVals MethodVals 999 /val load cvlit arrayinsert def
}
if
pause
} forall
MethodKeys
MethodVals
end
userdict begin
/MethodVals exch def
/MethodKeys exch def
MethodKeys MethodVals DoubleBubbleSort
MethodKeys MethodColor MethodPic ShowArray
end
} def
/DoVars { % classdict => -
10 dict begin
/classdict exch def
/VarKeys [] def
/VarVals [] def
classdict
{
/val exch def
/key exch def
/val load type /arraytype eq
/val load xcheck
and not
{
/VarKeys VarKeys 999 key 256 string cvs arrayinsert def
/VarVals VarVals 999 /val load cvlit arrayinsert def
}
if
pause
} forall
VarKeys
VarVals
end
userdict begin
/VarVals exch def
/VarKeys exch def
VarKeys VarVals DoubleBubbleSort
VarKeys VarColor VarPic ShowArray
end
} def
/DoInsts { % classdict => -
%(DoInsts begin***\n) [] dbgprintf
10 dict begin
/classdict exch def
/InstKeys [] def
/InstVals [] def
classdict /InstanceVarDict get
dup null eq { pop [] } if
{
/val exch def
/key exch def
/InstKeys InstKeys 999 key 256 string cvs arrayinsert def
/InstVals InstVals 999 /val load arrayinsert def
pause
} forall
InstKeys
InstVals
end
userdict begin
/InstVals exch def
/InstKeys exch def
InstKeys InstVals DoubleBubbleSort
InstKeys InstColor InstPic ShowArray
end
%(DoInsts end***\n) [] dbgprintf
} def
/LastClassPick null def
/ClassPick % x y => -
{
userdict begin
Font15 setfont
LastClassPick null ne
{
null SetMethodPick
null SetVarPick
null SetInstPick
gsave
%(unhilite %\n) [ LastClassPick ] dbgprintf
/getcanvas ClassPic send setcanvas
0 1000 LastClassPick 1 add 18 mul sub 3 sub 300 18 rectpath
ClassColor setcolor fill
0 0 0 rgbcolor setcolor
5 1000 LastClassPick 1 add 18 mul sub moveto ClassKeys
LastClassPick get show
grestore
} if
10 dict begin
/y exch def
/x exch def
%% put scroll bars back to top
0 /setvalue InstPic /VScrollbar get send
0 /setvalue MethodPic /VScrollbar get send
0 /setvalue VarPic /VScrollbar get send
0 /setvalue TextPic /VScrollbar get send
/k 1000 y sub 18 div floor def
%(pick is % \n ) [ k ] dbgprintf
k ClassKeys length 1 sub le
{
%(pick is % \n ) [ ClassKeys k get ] dbgprintf
/getcanvas ClassPic send setcanvas
%(hilite %\n) [ k ] dbgprintf
0 1000 k 1 add 18 mul sub 3 sub 300 18 rectpath
0 0 0 rgbcolor setcolor fill
ClassColor setcolor
0 5 1000 k 1 add 18 mul sub moveto ClassKeys k get show
/updatecanvas ClassPic send
[] MethodColor MethodPic ShowArray
[] VarColor VarPic ShowArray
[] InstColor InstPic ShowArray
[] TextColor TextPic ShowArray
[
(CLASS ") ClassKeys k get 256 string cvs (") append append
ClassVals k get /ParentDictArray known
{
ClassVals k get /ParentDictArray get % ParentDictArray
{
/ClassName get 256 string cvs ( ) exch append
} forall
} if
] TextColor TextPic ShowArray
ClassVals k get DoMethods
ClassVals k get DoVars
ClassVals k get DoInsts
k
}
{
/updatecanvas ClassPic send
null
} ifelse
end
/LastClassPick exch def
end
} def
ClassPic /NotifyUserDown { userdict /ClassPick get exec } put
/SetInstPick {pop} def
/LastInstPick null def
/SetInstPick % newpick => -
{
userdict begin
Font15 setfont
LastInstPick null ne
{
gsave
/getcanvas InstPic send setcanvas
0 1000 LastInstPick 1 add 18 mul sub 3 sub 300 18 rectpath
InstColor setcolor fill
0 0 0 rgbcolor setcolor
5 1000 LastInstPick 1 add 18 mul sub moveto
InstKeys LastInstPick get show
grestore
} if
/LastInstPick exch def % pick up newpick
%% (new InstPick is % \n ) [ LastInstPick ] dbgprintf
LastInstPick null ne
{
/getcanvas InstPic send setcanvas
0 1000 LastInstPick 1 add 18 mul sub 3 sub 300 18 rectpath
0 0 0 rgbcolor setcolor fill
InstColor setcolor
0 5 1000 LastInstPick 1 add 18 mul sub moveto
InstKeys LastInstPick get show
} if
/updatecanvas InstPic send
LastInstPick null ne
{
[] TextColor TextPic ShowArray
[
(INSTANCE VARIABLE)
( ") InstKeys LastInstPick get 256 string cvs (")
append append append
InstVals LastInstPick get type
{
/arraytype { () InstVals LastInstPick get ExpandArray }
/dicttype { () InstVals LastInstPick get ExpandDict }
/Default {() InstVals LastInstPick get 256 string cvs append}
}
case
] TextColor TextPic ShowArray
} if
end
} def
/InstPick
{
null SetMethodPick
null SetVarPick
userdict begin
10 dict begin
/y exch def
/x exch def
/k 1000 y sub 18 div floor def
%% (pick is % \n ) [ k ] dbgprintf
k dup
end
InstKeys length 1 sub le
{ SetInstPick }
{ pop }
ifelse
end
} def
InstPic /NotifyUserDown { userdict /InstPick get exec } put
/ArrayDepth 0 def
/ExpandArray { % string array => strings
/ArrayDepth ArrayDepth 1 add def
exch ({) append exch
() ArrayDepth { ( ) append } repeat exch
{
dup type /arraytype eq
{
ExpandArray
}
{
cvlit 256 string cvs append ( ) append
dup stringwidth pop 700 gt {
() ArrayDepth { ( ) append } repeat
} if
} ifelse
} forall
/ArrayDepth ArrayDepth 1 sub def
() ArrayDepth { ( ) append } repeat (} ) append
} def
/ExpandDict { % dict => strings
{
256 string cvs ( ) exch append exch
256 string cvs ( ) exch append
{ dup stringwidth pop 250 lt { ( ) append } { exit } ifelse } loop
exch append
} forall
} def
/LastMethodPick null def
/SetMethodPick % newpick => -
{
userdict begin
Font15 setfont
LastMethodPick null ne
{
gsave
/getcanvas MethodPic send setcanvas
0 1000 LastMethodPick 1 add 18 mul sub 3 sub 300 18 rectpath
MethodColor setcolor fill
0 0 0 rgbcolor setcolor
5 1000 LastMethodPick 1 add 18 mul sub moveto
MethodKeys LastMethodPick get show
grestore
} if
/LastMethodPick exch def % pick up newpick
%% (new MethodPick is % \n ) [ LastMethodPick ] dbgprintf
LastMethodPick null ne
{
/getcanvas MethodPic send setcanvas
0 1000 LastMethodPick 1 add 18 mul sub 3 sub 300 18 rectpath
0 0 0 rgbcolor setcolor fill
MethodColor setcolor
0 5 1000 LastMethodPick 1 add 18 mul sub moveto
MethodKeys LastMethodPick get show
} if
/updatecanvas MethodPic send
LastMethodPick null ne
{
[] TextColor TextPic ShowArray
[
(METHOD ") MethodKeys LastMethodPick get
256 string cvs (") append append
() MethodVals LastMethodPick get ExpandArray
] TextColor TextPic ShowArray
} if
end
} def
/MethodPick
{
null SetVarPick
null SetInstPick
userdict begin
10 dict begin
/y exch def
/x exch def
/k 1000 y sub 18 div floor def
%% (pick is % \n ) [ k ] dbgprintf
k dup
end
MethodKeys length 1 sub le
{ SetMethodPick }
{ pop }
ifelse
end
} def
MethodPic /NotifyUserDown { userdict /MethodPick get exec } put
/LastVarPick null def
/SetVarPick % newpick => -
{
userdict begin
Font15 setfont
LastVarPick null ne
{
gsave
/getcanvas VarPic send setcanvas
0 1000 LastVarPick 1 add 18 mul sub 3 sub 300 18 rectpath
VarColor setcolor fill
0 0 0 rgbcolor setcolor
5 1000 LastVarPick 1 add 18 mul sub moveto
VarKeys LastVarPick get show
grestore
} if
/LastVarPick exch def % pick up newpick
%% (new VarPick is % \n ) [ LastVarPick ] dbgprintf
LastVarPick null ne
{
/getcanvas VarPic send setcanvas
%(hilite %\n) [ LastVarPick ] dbgprintf
0 1000 LastVarPick 1 add 18 mul sub 3 sub 300 18 rectpath
0 0 0 rgbcolor setcolor fill
VarColor setcolor
0 5 1000 LastVarPick 1 add 18 mul sub moveto
VarKeys LastVarPick get show
} if
/updatecanvas VarPic send
LastVarPick null ne
{
[] TextColor TextPic ShowArray
[
(CLASS VARIABLE)
( ") VarKeys LastVarPick get 256 string cvs (")
append append append
VarVals LastVarPick get type
%dup (type was %\n) [ 3 2 roll ] dbgprintf
{
/arraytype { () VarVals LastVarPick get ExpandArray }
/dicttype { () VarVals LastVarPick get ExpandDict }
/Default { () VarVals LastVarPick get 256 string cvs append }
}
case
] TextColor TextPic ShowArray
} if
end
} def
/VarPick
{
null SetMethodPick
null SetInstPick
userdict begin
10 dict begin
/y exch def
/x exch def
/k 1000 y sub 18 div floor def
%% (pick is % \n ) [ k ] dbgprintf
k dup
end
VarKeys length 1 sub le
{ SetVarPick }
{ pop }
ifelse
end
} def
VarPic /NotifyUserDown { userdict /VarPick get exec } put
DoClasses
endjefu@pawl17.pawl.rpi.edu (Jeffrey Putnam) (06/17/88)
In article <56572@sun.uucp> bvs@sun.UUCP (Bruce Schwartz) writes: >This file contains a NeWS server class browser. It is a good way to >roam through the classes loaded into the server. Although it has >many deficiencies, (searching, following references), it is generally >quite useful. Looks interesting, but... The copy that got here has the following as the last few lines: > /makestartinterests { > /makestartinterests HScrollbar send > /makestartinterests VScrollbar send > [ exch aload length 2 add -1 roll aload pop ] % join 2 arrays > /makestartinterests super send > [ exch aload lenQUIT This would seem to indicate that someone, somewhere got mad and zapped the file. Is this stuff available somewhere for anonymous ftp? Please do _not_ send me a copy as I have no disk space - and for things like this need to ftp it each time i need it (sort of a _big_ slow network file system that requires manual intervention to get every file). jeff putnam jefu@pawl.rpi.edu -or- jeff_putnam%rpitsmts@itsgw.rpi.edu "People would rather believe a simple lie than the complex truth."
jfjr@mitre-bedford.ARPA (Jerome Freedman) (06/30/88)
I am writing a NeWS application on a Sun 3. I need a way to
automatically start a UNIX program and have the output go to
the new specific window I'm creating using psterm for a vt100
emulation. I have tried all derivations of the psterm arguments
and have yet to find a way to do so. Each attempt results in
the output being directed to /dev/null.
Jerry Freedman, Jr "Does Unix have
jfjr@mitre-bedford.arpa a Buddha nature?"
(617)271-4563