summaryrefslogtreecommitdiff
path: root/ipl/mprogs/program.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/mprogs/program.icn')
-rw-r--r--ipl/mprogs/program.icn138
1 files changed, 0 insertions, 138 deletions
diff --git a/ipl/mprogs/program.icn b/ipl/mprogs/program.icn
deleted file mode 100644
index ad32344..0000000
--- a/ipl/mprogs/program.icn
+++ /dev/null
@@ -1,138 +0,0 @@
-############################################################################
-#
-# File: program.icn
-#
-# Subject: Program to display portion of a program in a window
-#
-# Author: Ralph E. Griswold
-#
-# Date: February 28, 1997
-#
-############################################################################
-#
-# This file is in the public domain.
-#
-############################################################################
-#
-# This program views the text of a program through a window. The image
-# of the program is maintained in a pixmap. Positioning the desired
-# portion of the program amounts to copying the appropriate portion
-# of the pixmap to the window.
-#
-# The pixmap has half a window's white space at the top and at the
-# bottom to that the beginning and ends of a program can be shown
-# using the same logic as for interior portions of the program.
-#
-# The program is written as a visual monitor to run under the control
-# of another program, such as Eve.
-#
-############################################################################
-#
-# Requires: Version 9 graphics
-#
-############################################################################
-#
-# Links: basename, em_setup, filedim
-#
-############################################################################
-#
-# Includes: evdefs.icn
-#
-############################################################################
-
-$include "evdefs.icn"
-
-link basename
-link em_setup
-link filedim
-
-global Visualization, textmap, twidth, wheight, oheight, hsize, ncols
-global highlight
-
-procedure main(args)
- local vrows, SourceFile, size, mrows, mcols
- local input, line_no, cwidth, x, colmask, column
- local xwidth, wwidth, maxcols, linemask, line, i
-
- colmask := 2 ^ 16
- linemask := colmask - 1
-
- em_setup(args)
-
- vrows := 10 # ad hoc for now
- ncols := 6 # ditto
- maxcols := 85 # ditto
-
- hsize := 4
-
- SourceFile := prog_name()
-
- size := filedim(SourceFile)
-
- mrows := vrows + size.rows # white space at top and bottom
- mcols := size.cols
- mcols >:= maxcols
- mcols +:= ncols + 1 # space for line numbers and bar
-
-# Now create hidden canvases for the program and identifying line numbers.
-
- textmap := WOpen("canvas=hidden", "lines=" || mrows,
- "columns=" || mcols) | stop("*** cannot hidden canvas for program")
-
- twidth := WAttrib(textmap, "width")
- oheight := (WAttrib(textmap, "height") / mrows) / 2 + (hsize / 2)
-
-# Set positions in the pixmaps to leave space at the top and the bottom.
-
- GotoRC(textmap, vrows / 2, 1)
-
-# Put the text of the program into the canvas, while adding line
-# numbers to the other canvas.
-
- input := open(SourceFile) | stop("*** cannot open ", SourceFile)
-
- line_no := 0
-
- while write(textmap, right(line_no +:= 1, ncols - 1), " ", read(input))
-
-# Draw a line in linemap to separate the line numbers from the
-# program text when they get copied into the window.
-
- cwidth := TextWidth(textmap, repl("x", ncols + 1))
- x := cwidth - (cwidth / (2 * (ncols))) - 5
-
- DrawLine(textmap, x, 0, x, WAttrib(textmap, "height"))
-
- vis_setup("label=" || basename(SourceFile), "lines=" || vrows,
- "columns=80")
-
- highlight := Clone(Visualization, "fg=red")
-
- wwidth := WAttrib(Visualization, "width")
- wheight := WAttrib(Visualization, "height")
-
- focus(1, 0) # start-up view
-
- while EvGet('', 1) do
- if &eventcode === E_ALoc then {
- line := iand(&eventvalue, linemask) - 1 # for positioning
- column := &eventvalue / colmask
- focus(line, column)
- }
-
-end
-
-procedure focus(line, column)
- local x, y
-
- y := (line - 1) * WAttrib("leading") # for positioning
- CopyArea(textmap, Visualization, 0, y, twidth, wheight)
- FillRectangle(highlight, 2, y := wheight / 2 - oheight, hsize, hsize)
- if column > 0 then {
- x := (column + ncols + 1) * WAttrib("fwidth")
- FillRectangle(highlight, x, y + 10, 6, 1)
- }
-
- return
-
-end