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

  1. /*
  2.     tedword.c  
  3.  
  4.      % ted_FindWord
  5.  
  6.     text editting right and left word function
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1988 by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      8/09/88 jdc     created
  15.  
  16.      3/24/89 jmd    added sed_ macros
  17.      5/23/89 jdc    made tb_setcursor menu_setcursor
  18.  
  19.      2/22/90 jdc    preened
  20.      3/28/90 jmd    ansi-fied
  21.      5/02/90 jdc    now moves to beginning/end as default
  22.                     fixed find old spaces bug
  23.     12/10/90 jdc    added check for ted_GotoPosition's return value
  24. */
  25.  
  26. #include "ted.h"
  27.  
  28. boolean ted_FindWord(sed_type sed, int mode)
  29. {
  30.     tb_type tb;
  31.     long cursor;
  32.     bbpeek_struct bp;
  33.     int i, white, done, dlen, row, col;
  34.  
  35.     tb = sed_GetTextbuf(sed);
  36.     cursor = tb->cursor;
  37.  
  38.     bp.b = tb->bbc->b;
  39.     bp.len = tb->size;
  40.     bp.off = bp.b->off + tb_GetCursor(tb);
  41.     if (mode != TED_FORWARD) {
  42.         bp.off -= 1;
  43.     }
  44.  
  45.     for (done = FALSE, white = (mode == TED_FORWARD) ? FALSE:TRUE; !done;) {
  46.         for (i = 0, dlen = bbpeek(&bp); dlen > 0;) {
  47.             
  48.             if (is_whitespace(bp.p[i]) == white) {
  49.         
  50.                 if (mode == TED_FORWARD) {
  51.                     i++;
  52.                     bp.off++;
  53.                     if (i >= dlen) {
  54.                         break;
  55.                     }
  56.                 }
  57.                 else {   /* TED_BACKWARD */
  58.                     i--;
  59.                     bp.off--;
  60.                     break;
  61.                 }
  62.             }
  63.             else if (mode == TED_FORWARD && white == FALSE) {
  64.                 white = TRUE;
  65.             }
  66.             else if (mode != TED_FORWARD && white == TRUE) {
  67.                 white = FALSE;
  68.             }
  69.             else {
  70.                 done = TRUE;
  71.                 break;
  72.             }
  73.         }
  74.         if (dlen == 0) break;
  75.  
  76.         cursor += i;
  77.     }
  78.  
  79.     row = tb_GetRow(tb);
  80.     col = tb_GetCol(tb);
  81.     tb->cursor = cursor;
  82.     menu_setcursor(sed_GetMenu(sed));
  83.  
  84.     if (!ted_GotoPosition(sed, tb_GetRow(tb), tb_GetCol(tb))) {
  85.         tb_FindPosition(tb, row, col);
  86.     }
  87.  
  88.     return(TRUE);
  89. }
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.