Annotation of 43BSD/contrib/emacs/src/buffer.h, revision 1.1

1.1     ! root        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 ();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.