Subversion Repositories svn1-original

Rev

Rev 1 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*************************************************************************
*           Copyright (C) 1995 Embedded Solutions
*                       All rights reserved
*
* file:     src\menudrv.c
*
* purpose:  Module that contains the table driven menu driver
*
*           The function that is called to do all the work is do_menu
*           This function requires a pointer to an array of menu drive entries
*           The function returns when an abort is requested.
*
* functions
*       do_menu                 - Produce menu
*
* programmer: David Purdie
*
* revision  date        by      reason
*   00.0    27/01/95    DDP     Tidies up the program and formatted the file
*
**************************************************************************/

#include    "consts.h"
#include    "structs.h"
#include    "proto.h"

/*========================================================================
 *
 *  Produce menu
 *
 *  Purpose:
 *      This function is called to process a menu structure and display
 *      a menu on the screen.
 *
 *  Parameters:
 *      header          Menu display title
 *      prompt          Operator prompt
 *      table           Drive table structure
 *      
 *
 *  Returns:
 *      Nothing
 *
 *========================================================================*/

void do_menu( char *header, char *prompt, menu_table * table )
{
    menu_table *curr;                            /* Current entry pointer */
    int         i;
    char        c;
    int         alldone = FALSE;
    int         found;

    /*
     * Clear the screen and display the menu 
     */

    do
    {
        abort_flag = FALSE;                      /* Reset global abort flag */
        curr = table;                            /* init the current pointer */
        i = 2;                                   /* init cursor position */
        clearscreen();
        cur( 10, i );
        printf( "%s", header );                  /* display header */
        i += 2;
        while( curr->key )
        {
            cur( 10, i );
            console_prompt ( curr->key  );
            printf( " %s", curr->prompt );
            i++;
            curr++;
        }

        /*
         * Prompt the operator to select an item 
         */

        found = FALSE;
        while( !found )
        {
            cur( 0, 2 + i );
            printf( "%s:", prompt );
            console_clreol();
            c = toupper( getinp() );
            if( abort_flag )
            {
                alldone = TRUE;
                break;
            }
            curr = table;
            while( curr->key )
            {
                if( toupper( ( int ) curr->key ) == c )
                {
                    found = TRUE;
                    /*
                     * Correct operation located 
                     */
                    if( curr->doit == NULL )
                    {
                        alldone = TRUE;
                        break;
                    }
                    else
                    {
                        clearscreen();
                        ( void ) ( *curr->doit ) ();
                        break;
                    }
                }
                curr++;
            }
            if( !found )
                beep();                        /* operator */
        }
    } while( !alldone );
}

/********************************* EOF ***********************************/