[comp.databases] Vertical menus in Informix 4GL

lbrintle@umaxc.weeg.uiowa.edu (Lee Brintle) (07/18/90)

I've read several articles in the past few pages about Informix's lack
of a vertical menu system.  As with most problems in Informix, a long
workaround sometimes will let you do what Informix did not provide.

Without including all the source code (200+ lines), the basic idea is this:

DEFINE  menu_opts ARRAY [ 8 ] OF
          letter_choice    CHAR( 1 ),
          menu_choice      CHAR( 20 )
        END,
        hot_keys ARRAY [ 8 ] OF CHAR( 1 )

Initialize each menu_choice with the option name.  Leave letter_choice
blank for each option.  Initialize each element of hot_keys to the 
letter to be used to activate that option.  For example:
   LET menu_choice[ 2 ] = "Invoicing"
   LET hot_keys[ 2 ]    = "I"

Make a screen form that looks like the vertical menu you wish to show, and
set delimiters to "  ".  Make the menu_choice field DISPLAY ONLY and the 
letter_choice field AUTONEXT.  In the 4GL program, use an INPUT ARRAY 
program to get the array.  Use an AFTER ROW to check to see if a letter 
was hit (compare the value of letter_choice[ arr_curr() ] with each 
element of hot_keys).  Use an ON KEY ( CONTROL-M ) statement to exit the 
input if the user hits return.

Bonus Features:
  Use BEFORE ROW to DISPLAY menu_opts[ arr_curr() ].menu_choice TO 
                         s_menu[ scr_line() ].menu_choice ATTRIBUTE( REVERSE )
     and the current option will appear in reverse video.
  If you do the above, you may need to display a couple of spaces in reverse 
     video to hide the gap between the cursor and the menu option.
  Start the options with menu_choice[ 2 ], not menu_choice[ 1 ].  Using the
     cumbersome method described in the Summer, 1989 Tech Notes, position the 
     cursor on line 2 to begin.  In the AFTER ROW clause, if the user is 
     on line 1 (too far up) or on the line after your last option, leave 
     the INPUT ARRAY statment and wrap either to the last or first option.
     CAUTION:  This feature is hairy and results in REAL ugly code, but it
     avoids the "There are no more rows" messages (which I find REAL annoying)
     and allows wraparound.  It also accounts for about half the code.

If you're interested in the entire code, send me E-Mail and I'll send it back
to you, with all the extras included.  If you improve on this menu, please
send me a copy of your additions so I can improve our menus also.

We use these menus quite often, and they have been tested on an 
HP-Vectra 386 running Xenix, a 286 running DOS, and two different NCR Towers 
running Unix.  The Towers were I4GL and the HP and 286 were RDS.

Also, some notes have been posted about Informix's Tech Support.  I've had
really, really diverse responses from them.  I call a lot (I think they know
me by name), since we're constantly trying to do stuff Informix doesn't 
want to do easily.  Lately, their response time has been AWFUL.  Two of 
my last four calls were open for over a month (one still is!), and they've
been telling me "Yep, that sure is a problem" quite a lot. 

Now, about those annoying FoxPro BROWSE commands....

Lee Brintle                        
Advantage Information Management 
(319) 337-5200                 
lbrintle@umaxc.weeg.uiowa.eud

Note: Throughout this note, I've used arr_curr() in array referencing 
statements.  This will not work, and I did it for brevity.  What is
really needed is LET ar_cur = arr_curr() and then use ar_cur (a variable)
instead of arr_curr() (a function) in array referencing statements.  

dab@cbnewsm.att.com (david.a.berk) (07/18/90)

In article <1895@ns-mx.uiowa.edu>, lbrintle@umaxc.weeg.uiowa.edu (Lee Brintle) writes:
> I've read several articles in the past few pages about Informix's lack
> of a vertical menu system.  As with most problems in Informix, a long
> workaround sometimes will let you do what Informix did not provide.
> 

	What I meant in my article about the lack of vertical menus was
other than using a form kluge. I should have been clearer.  Still, let's
face it, its been >5 years since I4GL has been out and the only real
change to the 4GL's form/menu features has been the addition of windows.

	I could write a vertical menu program in curses in a day.  Hey,
informix, do you want to buy a vertical menu program ?

Dave Berk
..!att!emdbl1!dab

*** The opinions expressed are my own PERSONAL opinions and do not
    reflect my employer's.