|
|
1.1 ! root 1: /* Definitions of objects used by the GNU Emacs undo facility. ! 2: Copyright (C) 1985 Free Software Foundation, Inc. ! 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: enum Ukinds { /* The events that can exist in the undo ! 23: queue. */ ! 24: Uboundary, /* A boundary between sets of undoable things ! 25: */ ! 26: Unundoable, /* What's done is done -- some things can't ! 27: be undone */ ! 28: Udelete, /* Delete characters to perform the undo */ ! 29: Uinsert, /* Insert .... */ ! 30: Uchange, /* Replace characters */ ! 31: Uunmod, /* Clear modification-flag to perform undo */ ! 32: }; ! 33: ! 34: struct UndoRec { /* A record of a single undo action */ ! 35: enum Ukinds kind; /* the kind of action to be undone */ ! 36: int pos; /* Where change starts or ends. */ ! 37: int len; /* Number of characters to insert, delete or ! 38: replace. Negative means they stretch ! 39: back from `pos'. */ ! 40: }; ! 41: ! 42: /* Note: in a record of type Uunmod, the `len' field is really ! 43: the buffer->modtime associated with the state at that time. ! 44: The buffer is marked as unmodified by undoing the Uunmod ! 45: only if the modtime field matches. */ ! 46: ! 47: /* The undo history consists of two circular queues, one of characters and ! 48: one of UndoRecs. When Uinsert recs are added to UndoRQ characters get ! 49: added to UndoCQ. The position of the characters can be reconstructed by ! 50: subtracting len from the fill pointer. */ ! 51: ! 52: #define NUndoR (((1 << 13) - 4) / sizeof (struct UndoRec)) ! 53: #define NUndoC ((1 << 13) - 4) ! 54: ! 55: /* Initially allocate them these sizes; ! 56: if these sizes get filled up, make them full size */ ! 57: ! 58: #define InitNUndoR 8 ! 59: #define InitNUndoC (512 - 4) ! 60: ! 61: struct UndoData ! 62: { ! 63: struct UndoRec *undorecs; /* The undo records, NUndoR of them */ ! 64: char *undochars; /* And the characters associated, NUndoC in all */ ! 65: int nextrec; /* Indices for storing in above two */ ! 66: int nextchar; ! 67: int num_undorecs; /* Sizes allocated */ ! 68: int num_undochars; ! 69: }; ! 70:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.