1: /* Header file for the buffer manipulation primitives.
   2:    Copyright (C) 1985 Richard M. Stallman.
   3: 
   4: This file is part of GNU Emacs.
   5: 
   6: GNU Emacs is distributed in the hope that it will be useful,
   7: but WITHOUT ANY WARRANTY.  No author or distributor
   8: accepts responsibility to anyone for the consequences of using it
   9: or for whether it serves any particular purpose or works at all,
  10: unless he says so in writing.  Refer to the GNU Emacs General Public
  11: License for full details.
  12: 
  13: Everyone is granted permission to copy, modify and redistribute
  14: GNU Emacs, but only under the conditions described in the
  15: GNU Emacs General Public License.   A copy of this license is
  16: supposed to have been given to you along with GNU Emacs so you
  17: can know your rights and responsibilities.  It should be in a
  18: file named COPYING.  Among other things, the copyright notice
  19: and this notice must be preserved on all copies.  */
  20: 
  21: 
  22: #ifdef lint
  23: #include "undo.h"
  24: #endif /* lint */
  25: 
  26: 
  27: #define SetPoint  point =
  28: 
  29: #define PointRight  point +=
  30: #define  PointLeft  point -=
  31: 
  32: struct buffer_text
  33:   {
  34:     unsigned char *p1;      /* Address of first data char, minus 1 */
  35:     unsigned char *p2;      /* p1 plus gap size */
  36:     int size1;          /* # characters before gap */
  37:     int size2;          /* # characters after gap */
  38:     int gap;            /* gap size in chars */
  39:     int modified;       /* tick at which contents last modified */
  40:     int head_clip;      /* # of first char that's visible (origin 1) */
  41:     int tail_clip;      /* # chars not visible at end of buffer */
  42:     int pointloc;       /* # of char point is at (origin 1) */
  43:   };
  44: 
  45: /* structure that defines a buffer */
  46: struct buffer
  47:   {
  48:     struct buffer_text text;    /* This describes the buffer's text */
  49: 
  50:     Lisp_Object number;     /* buffer number, assigned when buffer made */
  51:     Lisp_Object name;       /* the name of this buffer */
  52:     Lisp_Object filename;   /* the name of the file associated
  53: 				   with this buffer */
  54:     Lisp_Object directory;  /* Dir for expanding relative pathnames */
  55:     int save_modified;      /* Value of text.modified when buffer last saved */
  56:     Lisp_Object save_length;    /* Length of file when last read or saved. */
  57:     int modtime;        /* Set to the modtime of the file when read */
  58:                 /* Really should be time_t */
  59:     int backed_up;      /* true iff this buffer has been been backed
  60: 				   up (if you write to its associated file
  61: 				   and it hasn't been backed up, then a
  62: 				   backup will be made) */
  63:     Lisp_Object auto_save_file_name;    /* file name used for auto-saving this
  64: 				   buffer */
  65:     int auto_save_modified; /* the value of text.modified at the last auto-save. */
  66:     Lisp_Object read_only;      /* Non-nil if buffer read-only */
  67: 
  68:     Lisp_Object markers;    /* the markers that refer to this buffer.
  69: 				   This is actually a single marker ---
  70: 				   successive elements in its marker `chain'
  71: 				   are the other markers referring to this
  72: 				   buffer */
  73:     Lisp_Object mark;       /* "The mark"; may be nil */
  74: 
  75:     Lisp_Object major_mode; /* Symbol naming major mode (eg lisp-mode) */
  76:     Lisp_Object mode_name;  /* Pretty name of major mode (eg "Lisp") */
  77:     Lisp_Object mode_line_format; /* Format string for mode line */
  78: 
  79:     Lisp_Object keymap;     /* Keys that are bound local to this buffer
  80: 				   (stuff like $J) */
  81:     struct Lisp_Vector *syntax_table_v; /* the syntax table in use */
  82:     Lisp_Object abbrev_table;   /* This buffer's local abbrev table */
  83: 
  84:     /* Values of several buffer-local variables */
  85:     /* tab-width is buffer-local so that redisplay can find it
  86:        in buffers that are not current */
  87:     Lisp_Object case_fold_search;
  88:     Lisp_Object tab_width;
  89:     Lisp_Object fill_column;
  90:     Lisp_Object left_margin;
  91:     Lisp_Object auto_fill_hook; /* Function to call when insert space past fiull column */
  92:   /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER)
  93:      for all per-buffer variables of this buffer.  */
  94:     Lisp_Object local_var_alist;
  95: 
  96:     /* Position in buffer at which display started
  97:        the last time this buffer was displayed */
  98:     int last_window_start;
  99:     /* Non-nil means do not display continuation lines */
 100:     Lisp_Object truncate_lines;
 101:     /* Non-nil means display ctl chars with uparrow */
 102:     Lisp_Object ctl_arrow;
 103:     /* Non-nil means do selective display;
 104:        See doc string in syms_of_buffer (buffer.c) for details.  */
 105:     Lisp_Object selective_display;
 106:     /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */
 107:     Lisp_Object minor_modes;
 108:     /* Undo records for changes in this buffer. */
 109:     struct UndoData *undodata;
 110:     /* t if "self-insertion" should overwrite */
 111:     Lisp_Object overwrite_mode;
 112:     /* non-nil means abbrev mode is on.  Expand abbrevs automatically. */
 113:     Lisp_Object abbrev_mode;
 114:     /* Next buffer, in chain of all buffers that exist.  */
 115:     struct buffer *next;
 116: };
 117: 
 118: extern struct buffer *bf_cur;       /* the current buffer */
 119: 
 120: /* This structure contains data describing the text of the current buffer.
 121:  Switching buffers swaps their text data in and out of here */
 122: 
 123: extern struct buffer_text bf_text;
 124: 
 125: #define bf_p1 bf_text.p1
 126: #define bf_p2 bf_text.p2
 127: #define bf_s1 bf_text.size1
 128: #define bf_s2 bf_text.size2
 129: #define bf_gap bf_text.gap
 130: #define bf_modified bf_text.modified
 131: #define bf_head_clip bf_text.head_clip
 132: #define bf_tail_clip bf_text.tail_clip
 133: #define point bf_text.pointloc
 134: 
 135: /* Lowest legal value of point for current buffer */
 136: #define FirstCharacter bf_text.head_clip
 137: 
 138: /* Number of last visible character in current buffer */
 139: /* The highest legal value for point is one greater than this */
 140: #define NumCharacters (bf_text.size1+bf_text.size2-bf_text.tail_clip)
 141: 
 142: /* Return character at position n.  No range checking */
 143: #define CharAt(n) *(((n)>bf_s1 ? bf_p2 : bf_p1) + (n))
 144: 
 145: extern void reset_buffer ();

Defined struct's

Defined macros

PointLeft defined in line 30; used 2 times
PointRight defined in line 29; used 2 times
bf_gap defined in line 129; used 16 times
point defined in line 133; used 203 times

Usage of this include

Last modified: 1986-01-24
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1339
Valid CSS Valid XHTML 1.0 Strict