📄 test_menu.c
字号:
//=============================================================================//// test_menu.c - Cyclone Diagnostics////=============================================================================//####COPYRIGHTBEGIN####// // ------------------------------------------- // The contents of this file are subject to the Red Hat eCos Public License // Version 1.1 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // http://www.redhat.com/ // // Software distributed under the License is distributed on an "AS IS" // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the // License for the specific language governing rights and limitations under // the License. // // The Original Code is eCos - Embedded Configurable Operating System, // released September 30, 1998. // // The Initial Developer of the Original Code is Red Hat. // Portions created by Red Hat are // Copyright (C) 2001 Red Hat, Inc. // All Rights Reserved. // ------------------------------------------- // //####COPYRIGHTEND####//=============================================================================//#####DESCRIPTIONBEGIN####//// Author(s): Scott Coulter, Jeff Frazier, Eric Breeden// Contributors:// Date: 2001-01-25// Purpose: // Description: ////####DESCRIPTIONEND####////===========================================================================*//****************************************************************************** test_menu.c - Menu dispatching routine * * modification history* --------------------* 30aug00 ejb Ported to IQ80310 Cygmon*//*DESCRIPTION:A table-driven menu dispatcher*/#include "test_menu.h"#include "iq80310.h"#define QUIT -1#define MAX_INPUT_LINE_SIZE 80extern long decIn(void);/* * Internal routines */static int menuGetChoice (MENU_ITEM menuTable[], int numMenuItems, char *title, unsigned long options);static void printMenu (MENU_ITEM menuTable[], int numMenuItems, char *title);/***************************************************************************** menu - a table-driven menu dispatcher** RETURNS:** The menu item argument, or NULL if the item chosen is QUIT.*/MENU_ARG menu ( MENU_ITEM menuTable[], int numMenuItems, char *title, unsigned long options ){int item; /* User's menu item choice */ /* * Get the user's first choice. Always display the menu the first time. */ item = menuGetChoice (menuTable, numMenuItems, title, MENU_OPT_NONE); if (item == QUIT) return (NULL); /* * If the user just wants a value returned, return the argument. If the * argument is null, return the item number itself. */ if (options & MENU_OPT_VALUE) { if (menuTable[item].arg == NULL) return ((void *)item); else return (menuTable[item].arg); } /* * Process menu items until the user selects QUIT */ while (TRUE) { /* * Call the action routine for the chosen item. If the argument is * NULL, pass the item number itself. */ if (menuTable[item].actionRoutine != NULL) { if (menuTable[item].arg == NULL) { printf("\n"); (*menuTable[item].actionRoutine) ((void *)item); } else { printf("\n"); (*menuTable[item].actionRoutine) (menuTable[item].arg); } } /* * Get the next choice, using any display options the user specified. */ item = menuGetChoice (menuTable, numMenuItems, title, options); if (item == QUIT) return (NULL); }} /* end menu () *//***************************************************************************** menuGetChoice - Get the user's menu choice.** If display is not suppressed, display the menu, then prompt the user for* a choice. If the choice is out of range or invalid, display the menu and* prompt again. Continue to display and prompt until a valid choice is made.** RETURNS:* The item number of the user's menu choice. (-1 if they chose QUIT)*/static intmenuGetChoice ( MENU_ITEM menuTable[], int numMenuItems, char *title, unsigned long options ){/*char inputLine[MAX_INPUT_LINE_SIZE];*/int choice; /* * Suppress display of the menu the first time if we're asked */ if (!(options & MENU_OPT_SUPPRESS_DISP)) printMenu (menuTable, numMenuItems, title); /* * Prompt for a selection. Redisplay the menu and prompt again * if there's an error in the selection. */ choice = -1; while (choice < 0 || choice > numMenuItems) { printf ("\nEnter the menu item number (0 to quit): "); choice = decIn (); if (choice < 0 || choice > numMenuItems) printMenu (menuTable, numMenuItems, title); } if (choice == 0) return (QUIT); return (choice - 1);} /* end menuGetChoice () *//***************************************************************************** printMenu - Print the menu***/static voidprintMenu ( MENU_ITEM menuTable[], int numMenuItems, char *title ){ int i; printf("\n%s\n\n", title); for (i = 0; i < numMenuItems; i++) { printf ("%2d - %s\n", i+1, menuTable[i].itemName); } printf(" 0 - quit");} /* end printMenu () */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -