summaryrefslogtreecommitdiff
path: root/ipl/mprogs/locus.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/mprogs/locus.icn')
-rw-r--r--ipl/mprogs/locus.icn126
1 files changed, 0 insertions, 126 deletions
diff --git a/ipl/mprogs/locus.icn b/ipl/mprogs/locus.icn
deleted file mode 100644
index 8e1581a..0000000
--- a/ipl/mprogs/locus.icn
+++ /dev/null
@@ -1,126 +0,0 @@
-############################################################################
-#
-# File: locus.icn
-#
-# Subject: Program to trace execution locus
-#
-# Author: Ralph E. Griswold
-#
-# Date: March 4, 1997
-#
-############################################################################
-#
-# This file is in the public domain.
-#
-############################################################################
-#
-# This program traces the locus of program execution.
-#
-############################################################################
-#
-# Requires: Version 9 graphics
-#
-############################################################################
-#
-# Links: em_setup, evinit, xcompat, wopen
-#
-############################################################################
-#
-# Includes: evdefs.icn
-#
-############################################################################
-
-$include "evdefs.icn"
-
-link em_setup
-link evinit
-link wopen
-link xcompat
-
-global Visualization, Limit
-
-procedure main(args)
- local program_name, Width, Height, x, y, blowup, i, Context, value
- local program, line, progarray, Color, ymul, maxheight
- local colmask, linemask, mask
-
- colmask := 2 ^ 16
- linemask := colmask - 1
-
- maxheight := 500
-
- EvInit(args) | stop("*** cannot load program to monitor")
-
- program_name := prog_name()
-
- program := open(program_name) | stop("*** cannot open ", program_name)
-
- Height := 0
- Width := 0
-
- while line := read(program) do {
- Height +:= 1
- Width <:= *line
- }
-
- if Height < maxheight / 2 then blowup := 4
- else if Height < maxheight / 4 then blowup := 2
- else blowup := 1
-
- progarray := list(Height)
- every !progarray := list(Width, 0)
-
- if Height > maxheight then {
- ymul := real(maxheight) / Height
- Height := maxheight
- }
- else ymul := 1
-
- Width *:= blowup
- Height *:= blowup
-
- close(program)
-
- Visualization := WOpen("label=locus", "bg=white", "width=" || Width,
- "height=" || Height) | stop("*** cannot open window for visualization")
-
- Color := list(6)
- Color[6] := XBind(Visualization, , "fg=red")
- Color[5] := XBind(Visualization, , "fg=orange")
- Color[4] := XBind(Visualization, , "fg=yellow")
- Color[3] := XBind(Visualization, , "fg=green")
- Color[2] := XBind(Visualization, , "fg=blue")
- Color[1] := XBind(Visualization, , "fg=gray")
-
- mask := cset(E_Loc)
-
- x := y := -10
-
- Limit := 10
- i := 0
-
- repeat {
-
- i := (i + 1) % Limit
- if i = 0 then {
- while *Pending(Visualization) > 0 do
- if Event(Visualization) === (&lpress | &mpress | &rpress) then {
- event(E_ALoc, (&x / blowup + 1) * colmask +
- (&y / blowup) / ymul + 1)
- }
- }
-
- EvGet(mask) | break
- y := iand(&eventvalue, linemask)
- x := &eventvalue / colmask
- value := progarray[y, x] +:= 1
- value := integer(log(value, 6)) + 1
- Context := Color[value | *Color]
- y := (y * ymul - 1) * blowup
- x := (x - 1) * blowup
- FillRectangle(Visualization, x, y, blowup, blowup)
- FillRectangle(Context, x, y, blowup, blowup)
-
- }
-
-end