diff options
Diffstat (limited to 'ipl/mprogs/allocwrl.icn')
-rw-r--r-- | ipl/mprogs/allocwrl.icn | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/ipl/mprogs/allocwrl.icn b/ipl/mprogs/allocwrl.icn deleted file mode 100644 index 8521a8f..0000000 --- a/ipl/mprogs/allocwrl.icn +++ /dev/null @@ -1,167 +0,0 @@ -############################################################################ -# -# File: allocwrl.icn -# -# Subject: Program to display storage allocation in VRML -# -# Author: Ralph E. Griswold -# -# Date: March 26, 2002 -# -############################################################################ -# -# This file is in the public domain. -# -############################################################################ -# -# This program produces VRML 1.0 worlds with shapes representing storage -# allocation in the program it monitors. -# -# The structures normally are laid out in the x-z plane along a path with -# the shapes rising in the y direction. The size of the allocation -# determines the size of the shapes. The same shape is used for all -# allocations, but the color indicates the type of allocation. -# -# The kinds of allocation modeled are given by masks: -# -# structs only allocation related to Icon's structure types -# blocks all allocations in the block region -# non-structs all allocations except for structures -# -# The supported shapes are: -# -# cylinder -# cuboid -# cone -# -# In this version, if the path file is exhausted before the SP terminates, -# the path file is closed and reopened. -# -############################################################################ -# -# Requires: MT Icon -# -############################################################################ -# -# Links: colormap, dialog, emutils, evinit, interact, options, vrml, -# vrml1lib -# -############################################################################ - -link colormap -link dialog -link emutils -link evinit -link interact -link vrml -link vrml1lib - -$include "evdefs.icn" - -procedure main(args) - local model, color_table, code, object_list, trans, mask, object - local path, input, scale, steps, symbol, hfactor, color, shape - local ashape, output - - if TextDialog("Configuration:", - ["SP", "path file", "coordinate scale", "shape scale", - "number of events", "mask", "shape", "world file"], - ["structalc", "line.path", 10.0, 0.2, - 200, "structs", "cylinder", "alloc.wrl"], - [15, 30, 5, 5, 5, 10, 10, 20] - ) == "Cancel" then exit() - - args := [dialog_value[1]] - path := dialog_value[2] - scale := dialog_value[3] - hfactor := dialog_value[4] - steps := dialog_value[5] - mask := case dialog_value[6] of { - "structs" | &null: cset(E_List || E_Lelem || E_Record || E_Selem || - E_Set || E_Slots || E_Table || E_Telem || E_Tvtbl) - "blocks": AllocMask -- (E_String || E_Coexpr) - "strings": cset(E_String) - default: ExitNotice("Invalid mask.") - } - ashape := case dialog_value[7] of { - "cylinder" | &null: Cylinder(2, 2) - "cuboid": Cube(4, 2, 4) - "cone": Cone(2, 2) - default: ExitNotice("Invalid shape.") - } - output := open(dialog_value[8], "w") | - ExitNotice("Cannot open " || dialog_value[8]) - - EvInit(args) | ExitNotice("Cannot load SP.") - - variable("write", &eventsource) := -1 # turn off output in SP - variable("writes", &eventsource) := -1 - - model := [] # list of children - - color_table := colormap() # standard colors - - every code := key(color_table) do { # convert colors to shapes - color := vrml_color(color_table[code]) # standard color - symbol := evsym(code) # use event code name - shape := Separator([ - Material(color), # diffuse color only - Translation("0 1 0"), - ashape, - Translation("0 -1 0") - ]) - - color_table[code] := USE(symbol) # put USE node in table - put(model, DEF(symbol, shape)) # create DEF node - } - - model := [Switch(-1, model)] - - input := open(path) | ExitNotice("Cannot open path file.") - - trans := "0 0 0" # initial "translation" - - every 1 to steps do { - EvGet(mask) | { # get allocation event - write(&errout, "*** event stream terminated") - break - } - object := \color_table[&eventcode] | { # get shape - write(&errout, "*** no entry for ", evsym(&eventcode)) - next - } - trans := Translation(scale_translate(read(input), scale)) | { - Notice("Path ended.") - break - } - put( - model, - Separator([ - trans, - Transform(, , "1.0 " || (&eventvalue * hfactor) || " 1.0"), - object - ]) - ) - } - - vrml1(Group(model), output) # generate world - -end - -procedure scale_translate(s, n) - local x, y, z - - s ? { - x := tab(find(" ")) - move(1) - y := tab(find(" ")) - move(1) - z := tab(0) - } - - return (x * n) || " " || (y * n) || " " || (z * n) - -end - - - |