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

  1. /*
  2.     fldpushr.c        5/11/88
  3.  
  4.     % field_PushRight
  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.      3/28/90 jmd    ansi-fied
  13. */                    
  14.  
  15. #include "field.h"
  16.  
  17. char field_PushRight(field_type f, int fpos, char c)
  18. /*
  19.     modifies:   the field.
  20.     effects:    inserts the scancode at fpos, pushes the
  21.                    characters to the right:
  22.                 |hllo mom    x|
  23.                   ^  sed_PushRight(sed, 'e');
  24.                 |hello mom    |        ----> return('x');
  25.                   ^
  26.     returns:    the character that falls off the edge.  If the cursor is over
  27.                  empty space, return '\0'.
  28. */
  29. {
  30.     char     edge_char;
  31.     int     reclen, recpos;
  32.  
  33.     reclen = strlen(f->record);
  34.  
  35.     /* If the cursor is past the last character, set it and return '\0'. */
  36.     if (fpos >= reclen) {
  37.         field_SetChar(f, fpos, c);
  38.         return('\0');
  39.     }
  40.  
  41.     /* If the cursor is to the left... */
  42.     else { /* if (fpos <= reclen) */
  43.         /* Remember the edge character. */
  44.         edge_char = f->record[f->reclen - 1];
  45.  
  46.         /* push to the right */
  47.         for (recpos = f->reclen - 1; recpos > fpos; recpos--) {
  48.             f->record[recpos] = f->record[recpos-1];
  49.             if (f->merge != NULL) {
  50.                 f->merge[f->r2m[recpos]] = (f->record[recpos-1] != '\0') ? 
  51.                                             f->record[recpos-1] :
  52.                                             MRGPADCHAR;
  53.             }
  54.         }
  55.  
  56.         /* insert the char */
  57.         field_SetChar(f, fpos, c);
  58.  
  59.         return(edge_char);
  60.     }
  61. }
  62.  
  63.