Advertisement
Guest User

Untitled

a guest
May 26th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.56 KB | None | 0 0
  1. void menu(int mode)
  2. {
  3.     /*
  4.      * Подготовительный этап
  5.      */
  6.     int *cursor = calloc( menu_count, sizeof(int) );
  7.     int position = 0;       // Позиция курсора
  8.     char input;             // Клавиша ввода
  9.     cursor[position] = '>'; // Установка позиции курсора
  10.  
  11.     /*
  12.      * Селектор прорисовки меню
  13.      */
  14.     switch (mode)
  15.     {
  16.         case (MAIN_MENU_MODE):
  17.             show_main_menu(cursor);
  18.             break;
  19.         case (PRINT_LIST_MENU_MODE):
  20.             show_print_list_menu(cursor);
  21.             break;
  22.         case (FILL_LIST_MENU_MODE):
  23.             show_fill_list_menu(cursor);
  24.             break;
  25.         case (ADD_LIST_MENU_MODE):
  26.             show_add_list_menu(cursor);
  27.             break;
  28.         case (DELETE_LIST_MENU_MODE):
  29.             show_delete_list_menu(cursor);
  30.             break;
  31.         default:
  32.             break;
  33.     }
  34.  
  35.     /*
  36.      * Цикл меню
  37.      */
  38.     while (1)
  39.     {
  40.         input = getch();
  41.         switch (input)
  42.         {
  43.            
  44.             /*
  45.              * Кнопки перемещения вверх
  46.              */
  47.             case (UP_ARROW_KEY):
  48.             case (K_KEY):
  49.                 if( !position )
  50.                 {
  51.                     cursor[position] = '\0';
  52.                     position = menu_count;
  53.                     cursor[position] = '>';
  54.                 }
  55.                 cursor[position] = '\0';
  56.                 position--;
  57.                 cursor[position] = '>';
  58.                 fflush(stdin);
  59.                 break;
  60.  
  61.             /*
  62.              * Кнопки перемещения вниз
  63.              */
  64.             case (DOWN_ARROW_KEY):
  65.             case (J_KEY):
  66.                 if( position == menu_count - 1 )
  67.                 {
  68.                     cursor[position] = '\0';
  69.                     position = 0 - 1;
  70.                     cursor[position] = '>';
  71.                 }
  72.                 cursor[position] = '\0';
  73.                 position++;
  74.                 cursor[position] = '>';
  75.                 fflush(stdin);
  76.                 break;
  77.  
  78.             /*
  79.              * Кнопки выбора пункта меню
  80.              */
  81.             case (RIGHT_ARROW_KEY):
  82.             case (L_KEY):
  83.             case (ENTER_KEY):
  84.                 switch (mode)
  85.                 {
  86.                     /*
  87.                      * Главное меню
  88.                      */
  89.                     case (MAIN_MENU_MODE):
  90.                         // Выбор пунктов активированного меню
  91.                         if( activated )
  92.                             switch (position)
  93.                             {
  94.                                 // "1. Вывод таблицы"
  95.                                 case (0):
  96.                                     menu_count = PRINT_LIST_MENU_COUNT;
  97.                                     menu(PRINT_LIST_MENU_MODE);
  98.                                     menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
  99.                                     break;
  100.                                
  101.                                 // "2. Заполнение таблицы"
  102.                                 case (1):
  103.                                     menu_count = FILL_LIST_MENU_COUNT;
  104.                                     menu(FILL_LIST_MENU_MODE);
  105.                                     menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
  106.                                     break;
  107.  
  108.                                 // "3. Добавление элементов в таблицу"
  109.                                 case (2):
  110.                                     menu_count = ADD_LIST_MENU_COUNT;
  111.                                     menu(ADD_LIST_MENU_MODE);
  112.                                     menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
  113.  
  114.                                 // "4. Удаление элементов из таблицы"
  115.                                 case (3):
  116.                                     menu_count = DELETE_LIST_MENU_COUNT;
  117.                                     menu(DELETE_LIST_MENU_MODE);
  118.                                     menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
  119.            
  120.                                 // "i. Справка"
  121.                                 case (9):
  122.                                     show_info();
  123.                                     break;
  124.  
  125.                                 // "0. Выход"
  126.                                 case (10):
  127.                                     return;
  128.                             }
  129.                         // Выбор пунктов неактивированного меню
  130.                         else
  131.                             switch (position)
  132.                             {
  133.                                 // "1. Заполнение таблицы"
  134.                                 case (0):
  135.                                     menu_count = FILL_LIST_MENU_COUNT;
  136.                                     menu(FILL_LIST_MENU_MODE);
  137.                                     menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
  138.                                     break;
  139.  
  140.                                 // "2. Добавление элементов в таблицу"
  141.                                 case (1):
  142.                                     menu_count = ADD_LIST_MENU_COUNT;
  143.                                     menu(ADD_LIST_MENU_MODE);
  144.                                     menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
  145.                                
  146.                                     // "i. Справка"
  147.                                 case (3):
  148.                                     show_info();
  149.                                     break;
  150.  
  151.                                 // "0. Выход"
  152.                                 case (4):
  153.                                     return;
  154.                             }
  155.                         break;
  156.  
  157.                     /*
  158.                      * Селектор перед выводом таблицы на экран
  159.                      */
  160.                     case (PRINT_LIST_MENU_MODE):
  161.                         break;
  162.  
  163.                     /*
  164.                      * Селектор перед заполнением таблцицы
  165.                      */
  166.                     case (FILL_LIST_MENU_MODE):
  167.                         break;
  168.  
  169.                     /*
  170.                      * Селектор перед добавлением элементов
  171.                      */
  172.                     case (ADD_LIST_MENU_MODE):
  173.                         break;
  174.  
  175.                     /*
  176.                      * Селектор перед уделением элементов
  177.                      */
  178.                     case (DELETE_LIST_MENU_MODE):
  179.                         break;
  180.  
  181.                     default:
  182.                         break;
  183.                 }
  184.  
  185.             /*
  186.              * Кнопки перемещения назад по меню
  187.              */
  188.             case (LEFT_ARROW_KEY):
  189.             case (H_KEY):
  190.             case (ESC_KEY):
  191.                 switch (mode)
  192.                 {
  193.                     case (MAIN_MENU_MODE):
  194.                         break;
  195.                     case (PRINT_LIST_MENU_MODE):
  196.                         return;
  197.                     case (FILL_LIST_MENU_MODE):
  198.                         return;
  199.                     case (ADD_LIST_MENU_MODE):
  200.                         return;
  201.                     case (DELETE_LIST_MENU_MODE):
  202.                         return;
  203.                     default:
  204.                         break;
  205.                 }
  206.         }
  207.  
  208.         /*
  209.          * Перерисовка меню
  210.          */
  211.         switch (mode)
  212.         {
  213.             case (MAIN_MENU_MODE):
  214.                 show_main_menu(cursor);
  215.                 break;
  216.             case (PRINT_LIST_MENU_MODE):
  217.                 show_print_list_menu(cursor);
  218.                 break;
  219.             case (FILL_LIST_MENU_MODE):
  220.                 show_fill_list_menu(cursor);
  221.                 break;
  222.             case (ADD_LIST_MENU_MODE):
  223.                 show_add_list_menu(cursor);
  224.                 break;
  225.             case (DELETE_LIST_MENU_MODE):
  226.                 show_delete_list_menu(cursor);
  227.                 break;
  228.             default:
  229.                 break;
  230.         }
  231.     }
  232.     free(cursor);
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement