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

  1. /*
  2.     sdgrid.c
  3.  
  4.     % sed_GotoGridField etc., grid routines
  5.  
  6.     Field grid addressing routines.
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1986, 1987, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      3/28/90 jmd    ansi-fied
  15. */
  16.  
  17. #include "sed.h"
  18.  
  19. int sed_GotoGridField(sed_type sed, int row, int col)
  20. /*
  21.     requires:    a field row and column number.
  22.     modifies:   the sed.
  23.     effects:    moves to the field specified.  if the field is off the
  24.                 screen, scroll the screen until it's just on.
  25.                 If the sed is active, call the fenter and fexit functions.
  26. */
  27. {
  28.     int fld;
  29.  
  30.     fld = sed_GetGridField(sed, row, col);
  31.  
  32.     if (fld == -1) {
  33.         return(SED_STUCK);
  34.     }
  35.  
  36.     return(sed_GotoField(sed, fld));
  37. }
  38.  
  39.  
  40. int sed_GetGridField(sed_type sed, int row, int col)
  41. /*
  42.     requires:    a field row and column number.
  43.     returns:    the field number corresponding to the row
  44.                 column position.
  45.                 (-1) if no field there.
  46. */
  47. {
  48.     int         r, fld;
  49.     menu_type     menu;
  50.  
  51.     menu = sed_GetMenu(sed);
  52.  
  53.     /* find the row */
  54.     for (r = 0; r < menu_GetHeight(menu); r++) {
  55.         if ((fld = menu_GetGRow(menu, r)) > 0 && (--row < 0)) {
  56.             break;
  57.         }
  58.     }
  59.     if (row >= 0) {
  60.         return(-1);
  61.     }
  62.  
  63.     /* find the col */
  64.     fld--;
  65.     while (col > 0) {
  66.         if ((fld = menu_GetFieldRight(menu, fld)) == -1) {
  67.             return(-1);
  68.         }
  69.         col--;
  70.     }
  71.  
  72.     return(fld);
  73. }
  74.  
  75. int sed_GetGridRow(sed_type sed, int fieldno)
  76. /*    
  77.     Returns the the grid row number for the field
  78. */
  79. {
  80.     int         row, count;
  81.     menu_type     menu;
  82.  
  83.     menu = sed_GetMenu(sed);
  84.  
  85.     count = -1;
  86.     for (row = menu_GetFieldRow(menu, fieldno); row >= 0; row--) {
  87.         if (menu_GetGRow(menu, row) > 0) {
  88.             count++;
  89.         }
  90.     }
  91.  
  92.     return(count);
  93. }
  94.