#!/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.