home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / CODE4-1.ZIP / SOURCE.ZIP / G4MENU.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-17  |  2.1 KB  |  104 lines

  1. /*
  2.    g4menu.c  (c)Copyright Sequiter Software Inc., 1987, 1988, 1989.  All rights reserved.
  3.  
  4.    The activate parameter of each menu item must be the 
  5.    negative of its menu item reference number.
  6. */
  7.  
  8. #include "d4base.h"
  9. #include "w4.h"
  10. #include "g4char.h"
  11. #include "u4error.h"
  12.  
  13. #include <string.h>
  14.  
  15. extern  CB_WINDOW  *v4window_ptr ;
  16. extern  MENU       *v4menu ;
  17.  
  18.  
  19. g4menu( get_ptr, data_buffer, window_ref )
  20. GET   *get_ptr ;
  21. char  *data_buffer ;
  22. int    window_ref ;
  23. {
  24.    int      rc, len_menu_data, old_window_ref ;
  25.    char    *menu_data ;
  26.  
  27.    g4message_do( "" ) ;
  28.  
  29.    old_window_ref =  w4select( -1 ) ;
  30.    w4select( window_ref ) ;
  31.  
  32.    if ( get_ptr->width_data < 0  ||  get_ptr->width_data >= MAX_GET_WIDTH )
  33.       u4error( E_INTERNAL, "g4menu", (char *) 0 ) ;
  34.  
  35.    rc =  n4search( data_buffer ) ;
  36.    if ( rc >= 0 )
  37.       v4window_ptr->start_item =  rc ;
  38.  
  39.    rc =  n4activate( &window_ref ) ;
  40.    w4select( old_window_ref ) ;
  41.    if ( rc == 0x7FFF )  rc = 0 ;
  42.  
  43.    if ( rc > 0 )
  44.    {
  45.       switch( rc )
  46.       {
  47.      case  PGUP:
  48.      case  PGDN:
  49.      case  ESC:
  50.      case  CTRL_C:
  51.      case  CTRL_HOME:
  52.      case  CTRL_END:
  53.      case  CTRL_R:
  54.      case  CTRL_N:
  55.      case  CTRL_B:
  56.      case  CTRL_Q:
  57.         return( rc ) ;
  58.  
  59.      case  LEFT:
  60.      case  UP:
  61.      case  CTRL_S:
  62.      case  CTRL_E:
  63.      case  CTRL_Z:
  64.      case  SHIFT_TAB:
  65.         return( SHIFT_TAB ) ;
  66.  
  67.      default:
  68.         return( RETURN ) ;
  69.       }
  70.    }
  71.  
  72.    menu_data =  v4menu[-rc].item_ptr ;
  73.    len_menu_data =  strlen(menu_data) ;
  74.    if ( len_menu_data > MAX_GET_WIDTH )
  75.       len_menu_data =  MAX_GET_WIDTH ;
  76.  
  77.    memset( data_buffer, (int) ' ', MAX_GET_WIDTH ) ;
  78.    memcpy( data_buffer, menu_data, len_menu_data ) ;
  79.  
  80.    g4message_do( get_ptr->message ) ;
  81.  
  82.    return( RETURN ) ;
  83. }
  84.  
  85.  
  86. g4menu_help( get_ptr, data_buffer, window_ref )
  87. GET   *get_ptr ;
  88. char  *data_buffer ;
  89. int    window_ref ;
  90. {
  91.    int  rc ;
  92.  
  93.    rc =  g4char() ;
  94.  
  95.    if ( rc == F1 || rc == CTRL_L )
  96.    {
  97.       rc =  g4menu( get_ptr, data_buffer, window_ref ) ;
  98.       if ( rc == ESC || rc == CTRL_Q )  rc = -1 ;
  99.       return( rc ) ;
  100.    }
  101.    else
  102.       return( rc ) ;
  103. }
  104.