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

  1. /*
  2.     sdgoto.c
  3.  
  4.     % sd_goto_field    (field movement handler)
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1986, 1987, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.     11/16/86 sng    Now handles variable-length fields.
  13.     11/18/87 jmd     changed name of function
  14.      2/25/88 jmd     split up GetR2M macro for UNIX compilers
  15.      4/12/88 jmd    added reset of field's xoffset and adjust_rowcol().
  16.     10/02/88 jmd    moved cursor sd_adjust_cur
  17.     12/16/88 jmd    added currfield
  18.  
  19.      1/18/89 jdc    added oldfield == -1 check for field deletion
  20.      3/24/89 jmd    added test for extra painting, added sed_ macros
  21.  
  22.     12/04/89 jmd    added cursor color
  23.      3/28/90 jmd    ansi-fied
  24. */
  25.  
  26. #include "sed.h"
  27.  
  28. void sd_goto_field(sed_type sed, int fieldno)
  29. /*
  30.     modifies:   sed.
  31.     effects:    moves to the field number given; if moving into
  32.                 a new field, unhighlights old field and highlights the new.
  33. */
  34. {
  35.     int     oldfieldno;
  36.     byte      reg, sel = 0x07;
  37.  
  38.     cs_Assert(menu_GetFieldCount(sed_GetMenu(sed)) != 0, CS_SD_GTO_NF, 0);
  39.     cs_Assert(sed_Ok(sed),  CS_SD_GTO_SED, 0);
  40.     cs_Assert(fieldno >= 0, CS_SD_GTO_NFO, 0);
  41.  
  42.     /*  note:  we don't check to see whether or not we're going to the 
  43.         same field.  this is because someone might be calling goto just
  44.         to change the colors of the field.
  45.     */
  46.  
  47.     /* save the old field number */
  48.     oldfieldno = sed_GetFieldNo(sed);
  49.  
  50.     /* Set the new field number */
  51.     sed_SetFieldNo(sed, fieldno);
  52.  
  53.     /* unhighlight the old field (if it would change colors) */
  54.     if (oldfieldno >= 0) {
  55.         sed_GetFieldColors(sed, oldfieldno, ®, &sel);
  56.         if (reg != sel) {
  57.             sd_refresh_field(sed, oldfieldno);
  58.         }
  59.     }
  60.  
  61.     /* skip this if we haven't changed fields */
  62.     if (oldfieldno != fieldno) {
  63.  
  64.         /* reset the current field pointer */
  65.         sed_SetCurrField(sed, menu_GetField(sed_GetMenu(sed), fieldno));
  66.  
  67.         /* update the field position data */
  68.         sed_SetRecordPos(sed, field_FirstChar(sed_GetCurrField(sed)));
  69.         field_SetXoffset(sed_GetCurrField(sed), 0);
  70.  
  71.         /* highlight the new field (if it would change colors) */
  72.         sed_GetFieldColors(sed, fieldno, ®, &sel);
  73.         if (reg != sel) {
  74.             sd_refresh_field(sed, fieldno);
  75.         }
  76.     }
  77.  
  78.     /* adjust cursor color */
  79.     win_SetCursorColor(sed, disp_GetAttrFgColor(sel));
  80.  
  81.     /* adjust the cursor position */
  82.     sd_adjust_cur(sed);
  83. }
  84.  
  85.