[comp.lang.icon] Prompting String Input Procedure

tenaglia@mis.mcw.edu (Chris Tenaglia - 257-8765) (12/01/89)

Dear Icon-Group :

Here is a simple and handy procedure I use all over the place. It's
called input. I've used it in DOS, VMS, and UNIX. Although in unix
I've had to make it a little different in some cases.

Problem : Getting a screen inputted value takes 2 lines.
          writes("Enter Value>")
          value := read()

Solution: It would be nice to do it in one line.
          value := input("Enter Value>")

Method  : Input Procedure...
          procedure input(prompt)
            writes(prompt)
            return read()
            end

Example : Main procedure parameters.
          This example also makes nice use of what I call the
          'either or' construct (alternation).

          procedure main(files)
          source := (files[1] | input("Source File:") | stop("Cancelled"))
          target := (files[2] | input("Target File:") | stop("Cancelled"))

VMS     : The procedure will fail if CTRL_Z is pressed. This adds a little
&         of the failure driven stuff.
DOS

UNIX    : However, under unix, CTRL_Z stops the process. And pressing CTRL_D
          seems to cause a failure avalanch. In one application I ended up
          defining . as the failure string. The procedure looks like ...
          procedure input(prompt)
            local temp
            writes(prompt)
            temp := read()
            if temp ~== "." then return temp else fail
            end

Conclusion : I hope some of you out there may find this helpful/useful.
             Perhaps there is room for improvement, especially in the
             UNIX example. Perhaps instead of a single string, it can
             truly dynamic (like write()). Enjoy !

Chris Tenaglia (System Manager)
Medical College of Wisconsin
8701 W. Watertown Plank Rd.
Milwaukee, WI 53226
(414)257-8765
tenaglia@mis.mcw.edu