home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / eel / narrow.e < prev    next >
Text File  |  1994-03-04  |  4KB  |  113 lines

  1.  
  2. /********** Documentation to be inserted in file "edoc" ***********
  3.  
  4. narrow-bounds-to-region         Narrow portion of buffer to edit to region.
  5.         Make region the only portion of the buffer that your commands
  6.         affect.  Return to editting of the entire buffer with widen-bounds.
  7.  
  8. widen-bounds    Widen bounds to entire buffer.
  9.         Use this command when you have finished editting a portion of the
  10.         buffer selected previously with narrow-bounds-to-region.
  11.  
  12. ***********             End of documentation            **********/
  13.  
  14. /* -----  Gary R. Smith  (smith#gary@b.mfenet@nmfecc.arpa) */
  15.  
  16. /****************** Beginning of file "narrow.e" ******************/
  17.  
  18. /* EEL commands to customize Epsilon 3.05 written by Gary R. Smith,
  19.    Aug. 9, 1986. */
  20.  
  21. #include "eel.h"
  22.  
  23. buffer int narrow_mode = 0;     /* Are we in narrow mode? */
  24.  
  25. char *bef_reg;
  26. char *aft_reg;
  27. /*****************************************************************************
  28. *                                                                            *
  29. *     Save parts of buffer before and after region in temporary buffers,     *
  30. *     and leave only region in the current buffer.                           *
  31. *                                                                            *
  32. *****************************************************************************/
  33. command narrow_bounds_to_region() on cx_tab['n']
  34. {
  35.         int mod = modified;
  36.         int beg_reg = point;
  37.         int end_reg = mark;
  38.         
  39.         if (narrow_mode) error("Already in Narrow mode");
  40.         
  41.         if (point > mark) {     /* beginning and end of region */
  42.                 beg_reg = mark;
  43.                 end_reg = point;
  44.         }
  45.         
  46.         aft_reg = temp_buf();
  47.         xfer(aft_reg, end_reg, size()); /* save part after region */
  48.         delete(end_reg, size());
  49.  
  50.         bef_reg = temp_buf();
  51.         xfer(bef_reg, 0, beg_reg);      /* save part before region */
  52.         delete(0, beg_reg);
  53.  
  54.         modified = mod;
  55.         narrow_mode = 1;        /* now in Narrow mode */
  56.         make_mode();
  57. }
  58.  
  59. /*****************************************************************************
  60. *                                                                            *
  61. *     Restore parts of buffer saved by narrow_bounds_to_region.              *
  62. *     Keep point, mark, and window_start in same places.                     *
  63. *                                                                            *
  64. *****************************************************************************/
  65. command widen_bounds() on cx_tab['w']
  66. {
  67.         int mod = modified;
  68.         char *current_buffer;
  69.         int oldstart = window_start;    /* save start of window */
  70.         int oldpos = point;             /*   and point and mark */
  71.         int oldmark = mark;
  72.         int size_bef;
  73.  
  74.         if (!narrow_mode) error("Cannot widen when not in Narrow mode");
  75.         
  76.         point = 0;              /* insert at beginning of current buffer */
  77.         current_buffer = bufname;
  78.         bufname = bef_reg;      /*   from 'before-region' temp buf */
  79.         xfer(current_buffer, 0, size());
  80.         size_bef = size();
  81.         
  82.         bufname = current_buffer;
  83.         point = size();         /* insert at end of current buffer */
  84.         bufname = aft_reg;      /*   from 'after-region' temp buf */
  85.         xfer(current_buffer, 0, size());
  86.         bufname = current_buffer;
  87.         
  88.         mark = oldmark + size_bef;      /* restore point and mark */
  89.         point = oldpos + size_bef;
  90.         window_start = oldstart + size_bef;     /* same start of window */
  91.         
  92.         modified = mod;
  93.         narrow_mode = 0;        /* no longer in Narrow mode */
  94.         make_mode();
  95. }
  96.  
  97. /* make_mode() from disp.e is enhanced here to show Narrow mode */
  98.  
  99. make_mode()
  100. {
  101. strcpy(mode, major_mode);
  102. if (fill_mode)
  103.         strcat(mode, " Fill");
  104. if (over_mode)
  105.         strcat(mode, " Over");
  106. if (!strip_returns)
  107.         strcat(mode, " NoTrans");
  108. if (narrow_mode)
  109.         strcat(mode, " Narrow");
  110. }
  111.  
  112. /****************** End of file "narrow.e" ******************/
  113.