#!/usr/local/bin/kermit
#
# MENU
#
# Skeleton of a simple menu program to be executed by C-Kermit 7.0
# or later: http://www.columbia.edu/kermit/
#
# User gets a menu with a numbered list of choices.  User presses a digit
# key to make a choice.  Choice is executed.  Illustrates use of the SCREEN
# command to format the screen and the GETC command to read a single
# character from the keyboard, as well as nested WHILE loops, SWITCH, etc.
#
# Author: F. da Cruz, Columbia University
# V 1.0, 20 Apr 1999
#
local \%c                                 ; Local variable

define MSG {
    if > \v(argc) 2 screen move \%2 \%3   ; Move to given row/col (if any)
    screen cleol                          ; Clear to end of line
    if def \%1 xecho \fcontents(\%1)      ; Print message (if any)
}
define BOT {                              ; Put cursor on screen bottom
    screen move \v(rows) 0
}
define CENTER {                           ; Print argument centered
    local \%x                             ; Variable local to this routine
    if not def \%2 def \%2 1              ; Default if no column argument
    .\%x ::= (\v(cols)-\flen(\%1))/2      ; Calculate centered position
    msg {\%1} {\%2} {\%x}                 ; Print arg string centered
}
define PAINT {                            ; Put the menu on the screen
    screen clear                          ; Clear the screen
    center {Welcome to This Menu} 2       ; Print title centered
    msg {Choices:} 4                      ; Print heading
    msg { 1. File} 6                      ; Print choice lines
    msg { 2. Edit} 7
    msg { 3. Exit} 8
}
define DOFILE {                           ; Dummy FILE routine
    msg {Filing... } 12                   ; Fill in as desired...
}
define DOEDIT {                           ; Dummy EDIT routine
    msg {Editing...} 12                   ; Fill in as desired...
}
define DOEXIT {                           ; Dummy EXIT routine
    msg {Exiting...} 12                   ; Fill in as desired...
}

def \%c 0                                 ; Menu choice variable
paint                                     ; Display the menu
while ( != \%c 3 ) {                      ; Read and verify choice
    while true {                          ; Loop till we get a good one
	screen move 10                    ; Move to line 10 (left margin)
	screen cleol                      ; Clear this line
	getc \%c {Your choice: }          ; Prompt and get and echo 1 char
	if ( < \fcode(\%c) 32 ) continue  ; Ignore control characters
	xecho \%c                         ; Echo the choice
	if ( not numeric \%c ) {          ; Make sure it's a number
            msg {Not numeric - "\%c"} 12
            continue
        }
	if ( >= \%c 1 && <= \%c 3 ) break ; Range check - break if OK.
	msg {Out of range - "\%c"} 12     ; Keep looping if not OK.
    }
    switch \%c {                          ; Valid choice - execute it.
      :1, dofile, break
      :2, doedit, break
      :3, doexit, break
    }
}
bot                                       ; Leave cursor at screen bottom.
exit 0 Bye                                ; And exit.