home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / MENUFIND.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  3KB  |  119 lines

  1. /*
  2.     menufind.c
  3.  
  4.     % menu_FindUpField, FindDownField, etc.
  5.  
  6.     menu field finding functions
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1986, 1987, 1988, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      8/25/88 jmd     changed to true geographical operation
  15.     12/11/88 jmd     changed to old, improved scheme
  16.      7/02/89 jdc    added frowcount change
  17.  
  18.      3/28/90 jmd    ansi-fied
  19. */
  20.  
  21. #include "menu.h"
  22.  
  23. int menu_FindUpField(menu_type menu, int fieldno)
  24. /*
  25.     returns:    this routine takes the number of a field, and returns 
  26.                 the number of the field above that one.
  27.                 Returns (-1) if no field was found.
  28. */
  29. {
  30.     int row, col, up, next;
  31.  
  32.     cs_Assert(menu_Ok(menu), CS_M_GUF_MENU, 0);
  33.     
  34.     row = menu_GetFieldRow(menu, fieldno) - 1;
  35.     col = menu_GetFieldGCol(menu, fieldno);
  36.  
  37.     /* find the row above */
  38.     for (;(up = menu_GetGRow(menu, row)) <= 0; row--) {
  39.         if (row < 0) {
  40.             return(-1);
  41.         }
  42.     }
  43.  
  44.     /* now find the matching field in the line */
  45.     up--;
  46.     while (col > 0) {
  47.         if ((next = menu_GetFieldRight(menu, up)) < 0) {
  48.             break;
  49.         }
  50.         up = next;
  51.         col--;
  52.     }
  53.  
  54.     return(up);
  55. }
  56.  
  57. /*---------------------------------------------------------------------------*/
  58. int menu_FindDownField(menu_type menu, int fieldno)
  59. /*
  60.     returns:    this routine takes the number of a field, and returns 
  61.                 the number of the field below that one.
  62.                 Returns (-1) if no field was found.
  63. */
  64. {
  65.     int row, col, down, next;
  66.  
  67.     cs_Assert(menu_Ok(menu), CS_M_GDF_MENU, 0);
  68.     
  69.     row = menu_GetFieldRow(menu, fieldno) + 1;
  70.     col = menu_GetFieldGCol(menu, fieldno);
  71.  
  72.     /* find the row below */
  73.     for (;(down = menu_GetGRow(menu, row)) <= 0; row++) {
  74.         if (row >= menu->frowcount) {
  75.             return(-1);
  76.         }
  77.     }
  78.  
  79.     /* now find the matching field in the line */
  80.     down--;
  81.     while (col > 0) {
  82.         if ((next = menu_GetFieldRight(menu, down)) < 0) {
  83.             break;
  84.         }
  85.         down = next;
  86.         col--;
  87.     }
  88.  
  89.     return(down);
  90. }
  91.  
  92. /*---------------------------------------------------------------------------*/
  93. int menu_FindLeftField(menu_type menu, int fieldno)
  94. /*
  95.      returns:    this routine takes the number of a field, and returns 
  96.                 the number of the field to the left of that one.
  97.                 Returns (-1) if no field was found.
  98. */
  99. {
  100.     cs_Assert(menu_Ok(menu), CS_M_GLF_MENU, 0);
  101.     
  102.     return(menu_GetFieldLeft(menu, fieldno));
  103. }
  104.  
  105. /*---------------------------------------------------------------------------*/
  106. int menu_FindRightField(menu_type menu, int fieldno)
  107. /*
  108.      returns:    this routine takes the number of a field, and returns 
  109.                 the number of the field to the right of that one.
  110.                 Returns (-1) if no field was found.
  111. */
  112. {
  113.     cs_Assert(menu_Ok(menu), CS_M_GRF_MENU, 0);
  114.     
  115.     return(menu_GetFieldRight(menu, fieldno));
  116. }
  117.  
  118.  
  119.