|
|
1.1 root 1: /***************************************************************************
2: * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
3: * is provided to you without charge, and with no warranty. You may give *
4: * away copies of JOVE, including sources, provided that this notice is *
5: * included in all the files. *
6: ***************************************************************************/
7:
8: /* maximum length of a line (including '\0'). Currently cannot
9: be larger than a logical disk block. */
10: #define LBSIZE JBUFSIZ
11:
12: /* buffer types */
13: #define B_SCRATCH 1 /* for internal things, e.g. minibuffer ... */
14: #define B_FILE 2 /* normal file (we auto-save these.) */
15: #define B_PROCESS 3 /* unix process output in this buffer */
16:
17: /* major modes */
18: #define FUNDAMENTAL 0 /* Fundamental mode */
19: #define TEXT 1 /* Text mode */
20: #define CMODE 2 /* C mode */
21: #ifdef LISP
22: # define LISPMODE 3 /* Lisp mode */
23: # define NMAJORS 4
24: #else
25: # define NMAJORS 3
26: #endif
27:
28: #define MajorMode(x) (curbuf->b_major == (x))
29: #define SetMajor(x) { curbuf->b_major = (x); UpdModLine = YES; }
30:
31: /* minor modes */
32: #define Indent (1 << 0) /* indent same as previous line after return */
33: #define ShowMatch (1 << 1) /* paren flash mode */
34: #define Fill (1 << 2) /* text fill mode */
35: #define OverWrite (1 << 3) /* over write mode */
36: #define Abbrev (1 << 4) /* abbrev mode */
37: #define ReadOnly (1 << 5) /* buffer is read only */
38:
39: #define BufMinorMode(b, x) ((b)->b_minor & (x))
40: #define MinorMode(x) BufMinorMode(curbuf, (x))
41:
42: /* global line scratch buffers */
43: #if defined(VMUNIX) || defined(MSDOS)
44: extern char genbuf[LBSIZE],
45: linebuf[LBSIZE],
46: iobuff[LBSIZE];
47: #else
48: extern char *genbuf, /* scratch pad points at s_genbuf (see main()) */
49: *linebuf, /* points at s_linebuf */
50: *iobuff; /* for file reading ... points at s_iobuff */
51: #endif
52:
53: struct line {
54: Line *l_prev, /* pointer to prev */
55: *l_next; /* pointer to next */
56: daddr l_dline; /* pointer to disk location */
57: };
58:
59: struct mark {
60: Line *m_line;
61: int m_char;
62: Mark *m_next; /* list of marks */
63: #define M_FIXED 00
64: #define M_FLOATER 01
65: #define M_BIG_DELETE 02
66: char m_flags; /* FLOATERing mark? */
67: };
68:
69: struct buffer {
70: #ifdef MAC
71: int Type; /* kludge... to look like a data_obj */
72: char *Name; /* Name will not be used */
73: #endif
74: Buffer *b_next; /* next buffer in chain */
75: char *b_name, /* buffer name */
76: *b_fname; /* file name associated with buffer */
77: dev_t b_dev; /* device of file name. */
78: ino_t b_ino; /* inode of file name */
79: time_t b_mtime; /* last modify time ...
80: to detect two people writing
81: to the same file */
82: Line *b_first, /* pointer to first line in list */
83: *b_dot, /* current line */
84: *b_last; /* last line in list */
85: int b_char; /* current character in line */
86:
87: #define NMARKS 8 /* number of marks in the ring */
88:
89: Mark *b_markring[NMARKS], /* new marks are pushed here */
90: #define b_curmark(b) ((b)->b_markring[(b)->b_themark])
91: #define curmark b_curmark(curbuf)
92: *b_marks; /* all the marks for this buffer */
93: char b_themark, /* current mark (in b_markring) */
94: b_type, /* file, scratch, process, iprocess */
95: b_ntbf, /* needs to be found when we
96: first select? */
97: b_modified; /* is the buffer modified? */
98: int b_major, /* major mode */
99: b_minor; /* and minor mode */
100: struct keymap *b_map; /* local bindings (if any) */
101: #ifdef IPROCS
102: Process *b_process; /* process we're attached to */
103: #endif
104: };
105:
106: extern Buffer *world, /* first buffer */
107: *curbuf, /* pointer into world for current buffer */
108: *lastbuf, /* Last buffer we were in so we have a default
109: buffer during a select buffer. */
110: *perr_buf; /* Buffer with error messages */
111:
112: #define curline (curbuf->b_dot)
113: #define curchar (curbuf->b_char)
114:
115: /* kill buffer */
116: #define NUMKILLS 10 /* number of kills saved in the kill ring */
117: extern Line *killbuf[NUMKILLS];
118:
119: struct position {
120: Line *p_line;
121: int p_char;
122: };
123:
124: extern int killptr; /* index into killbuf */
125:
126: extern Buffer
127: *buf_exists proto((char *name)),
128: *do_find proto((struct window *w,char *fname,int force)),
129: *do_select proto((struct window *w,char *name)),
130: *file_exists proto((char *name));
131:
132: extern char
133: *ask_buf proto((struct buffer *def)),
134: *ralloc proto((char *obj, size_t size));
135:
136: #ifdef __STDC__
137: struct macro;
138: #endif /* __STDC__ */
139:
140: extern void
141: TogMinor proto((int bit)),
142: bufname proto((struct buffer *b)),
143: initlist proto((struct buffer *b)),
144: setbname proto((struct buffer *b,char *name)),
145: setfname proto((struct buffer *b,char *name)),
146: set_ino proto((struct buffer *b)),
147: SetABuf proto((struct buffer *b)),
148: SetBuf proto((struct buffer *newbuf)),
149: AllMarkSet proto((struct buffer *b,struct line *line,int col)),
150: DFixMarks proto((struct line *line1,int char1,struct line *line2,int char2)),
151: DelMark proto((struct mark *m)),
152: IFixMarks proto((struct line *line1, int char1, struct line *line2, int char2)),
153: MarkSet proto((struct mark *m, struct line *line, int column)),
154: ToMark proto((struct mark *m)),
155: flush_marks proto((Buffer *)),
156: b_char proto((int n)),
157: b_word proto((int num)),
158: del_char proto((int dir,int num,int OK_kill)),
159: do_macro proto((struct macro *mac)),
160: do_set_mark proto((struct line *l, int c)),
161: f_char proto((int n)),
162: f_word proto((int num)),
163: freeline proto((struct line *line)),
164: ins_str proto((char *str,int ok_nl)),
165: insert_c proto((int c,int n)),
166: lfreelist proto((struct line *first)),
167: lfreereg proto((struct line *line1,struct line *line2)),
168: line_move proto((int dir, int n, int line_cmd)),
169: lremove proto((struct line *line1, struct line *line2)),
170: mac_putc proto((int c)),
171: n_indent proto((int goal)),
172: open_lines proto((int n)),
173: reg_kill proto((struct line *line2,int char2,int dot_moved)),
174: set_mark proto((void)),
175: unwind_macro_stack proto((void)),
176: buf_init proto((void));
177:
178: extern int
179: ModMacs proto((void)),
180: in_macro proto((void)),
181: mac_getc proto((void)),
182: how_far proto((struct line *line,int col));
183:
184: extern struct line
185: *lastline proto((struct line *lp)),
186: *listput proto((struct buffer *buf,struct line *after)),
187: *max_line proto((struct line *l1,struct line *l2)),
188: *min_line proto((struct line *l1,struct line *l2)),
189: *nbufline proto((void)),
190: *next_line proto((struct line *line,int num)),
191: *prev_line proto((struct line *line,int num)),
192: *reg_delete proto((struct line *line1,int char1,struct line *line2,int char2));
193:
194: extern Mark
195: *CurMark proto((void)),
196: *MakeMark proto((struct line *line,int column,int type));
197:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.