home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / AP / JED / JED097-1.TAR / jed / src / line.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  1.3 KB  |  65 lines

  1. /*
  2.  *  Copyright (c) 1992, 1994 John E. Davis  (davis@amy.tch.harvard.edu)
  3.  *  All Rights Reserved.
  4.  */
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include "config.h"
  8. #include "buffer.h"
  9. #include "ins.h"
  10. #include "misc.h"
  11. #include "paste.h"
  12. #include "undo.h"
  13. #include "line.h"
  14.  
  15. /* breaks line at current point leaving point at end of current line */
  16.  
  17. int split_line (void)
  18. {
  19.     int size;
  20.    
  21.    if (CLine == NULL)
  22.      {
  23.     exit_error("split_line: Null Line", 1);
  24.      }
  25.    size = CLine->len - Point;
  26.  
  27.    if (NULL == make_line(size + 1))
  28.      {
  29.     exit_error("Allocation Failure in split_line", 0);
  30.      }
  31.  
  32.    MEMCPY((char *) CLine->data, (char *) (CLine->prev->data + Point), size);
  33.    CLine->len = size;
  34.    CLine = CLine->prev;  LineNum--;
  35.    CLine->len = Point;
  36.    remake_line(Point + 1);
  37.    /* now update the marks */
  38.    update_marks(NLINSERT, 1);
  39.    record_newline_insertion();
  40.    return(0);
  41. }
  42.  
  43. void splice_line (void)
  44. {
  45.    int n1, n2;
  46.  
  47.    if (CLine->next == NULL)
  48.      {
  49.     exit_error("splice line: next line is Null", 1);
  50.      }
  51.    push_spot();
  52.    n1 = CLine->len;
  53.    n2 = CLine->next->len;
  54.    
  55.    if (n1 + n2 > CLine->space) remake_line(n1 + n2 + 1);
  56.    MEMCPY((char *) (CLine->data + Point), (char *) CLine->next->data, n2);
  57.    CLine->len = n1 + n2;
  58.  
  59.    CLine = CLine->next;  LineNum++;
  60.    update_marks(NLDELETE, 1);
  61.    delete_line();
  62.    pop_spot();
  63. }
  64.  
  65.