home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / TEDFOLL.C < prev    next >
C/C++ Source or Header  |  1990-10-29  |  1KB  |  87 lines

  1. /*
  2.     tedfoll.c  
  3.     
  4.     % ted_Follow
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988 by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      6/17/88 jdc    created
  13.  
  14.      3/24/89 jmd    added sed_ macros
  15.      8/04/89 jdc    added tb->cursor_set stuff (sed_GetTB loop bug)
  16.  
  17.      3/28/90 jmd    ansi-fied
  18.     10/28/90 jdc    fixed boolean/int ret conflict
  19. */
  20.  
  21. #include "ted.h"
  22.  
  23. boolean ted_Follow(sed_type sed, int row, int col)
  24. /* 
  25.     forces the cursor to follow the lines of text 
  26. */
  27. {
  28.     tb_type tb;
  29.     int lrow, lcol, set;
  30.     boolean ret = TRUE;
  31.         
  32.     tb = sed_GetTextbuf(sed);
  33.     ted_GetPosition(sed, &lrow, &lcol);
  34.     set = tb->cursor_set;
  35.  
  36.     if (row <= 0) {
  37.         row = 0;
  38.         if (col < 0) {
  39.             col = 0;
  40.         }
  41.     }
  42.     if (tb_FindLine(tb, row) <= 0) {
  43.         row = lrow;
  44.         col = lcol;
  45.         ret = FALSE;
  46.     }
  47.     else if (col == lcol) {
  48.         if (row == lrow) {
  49.             ret = FALSE;
  50.         }
  51.         else if (tb->xcol < tb->exp_len) {
  52.             col = tb->xcol;
  53.         }
  54.         else {
  55.             col = tb->exp_len - 1;
  56.         }
  57.     }
  58.     else if (col < 0) {
  59.         tb_FindLine(tb, --row);
  60.         col = tb->exp_len - 1;
  61.         tb->xcol = col;
  62.     }
  63.     else if (col >= tb->exp_len) {
  64.         if (tb_FindLine(tb, ++row) <= 0) {
  65.             row = lrow;
  66.             col = lcol;
  67.             ret = FALSE;
  68.         }
  69.         else {
  70.             col = 0;
  71.             tb->xcol = col;
  72.         }
  73.     }
  74.     else {
  75.         tb->xcol = col;
  76.     }
  77.     tb_FindPosition(tb, row, col);
  78.     ted_SetCursor(sed, row, col);
  79.     if (ted_GetRefresh(sed)) {
  80.         ted_Scroll(sed);
  81.     }
  82.     if (!ret) {
  83.         tb->cursor_set = set;
  84.     }
  85.     return(ret);
  86. }
  87.