File: buf.h

package info (click to toggle)
jove 4.16-3
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 1,804 kB
  • ctags: 2,864
  • sloc: ansic: 27,140; makefile: 399
file content (191 lines) | stat: -rw-r--r-- 5,735 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/************************************************************************
 * This program is Copyright (C) 1986-1996 by Jonathan Payne.  JOVE is  *
 * provided to you without charge, and with no warranty.  You may give  *
 * away copies of JOVE, including sources, provided that this notice is *
 * included in all the files.                                           *
 ************************************************************************/

/* maximum length of a line (including '\0').  Currently cannot
   be larger than a logical disk block. */
#define	LBSIZE		JBUFSIZ

/* buffer types */
#define B_SCRATCH	1	/* for internal things, e.g. minibuffer ... */
#define B_FILE		2	/* normal file (we auto-save these.) */
#define B_PROCESS	3	/* unix process output in this buffer */

/* major modes */
#define FUNDAMENTAL	0	/* Fundamental mode */
#define TEXTMODE	1	/* Text mode */
#define CMODE		2	/* C mode */
#ifdef LISP
# define LISPMODE	3	/* Lisp mode */
# define NMAJORS	4
#else
# define NMAJORS	3
#endif

#define MajorMode(x)	(curbuf->b_major == (x))
#define SetMajor(x)	{ curbuf->b_major = (x); UpdModLine = YES; }

/* minor modes */
#define Indent		(1 << 0)	/* indent same as previous line after return */
#define ShowMatch	(1 << 1)	/* paren flash mode */
#define Fill		(1 << 2)	/* text fill mode */
#define OverWrite	(1 << 3)	/* over write mode */
#define Abbrev		(1 << 4)	/* abbrev mode */
#define ReadOnly	(1 << 5)	/* buffer is read only */

#define BufMinorMode(b, x)	(((b)->b_minor & (x)) != 0)
#define MinorMode(x)		BufMinorMode(curbuf, (x))

/* global line scratch buffers */
#ifdef AUTO_BUFS
extern char	*genbuf,	/* scratch pad points at s_genbuf (see main()) */
		*linebuf,	/* points at s_linebuf */
		*iobuff;	/* for file reading ... points at s_iobuff */
#else
extern char	genbuf[LBSIZE],
		linebuf[LBSIZE],
		iobuff[LBSIZE];
#endif

/* typedef struct line *LinePtr in jove.h */

struct line {
	LinePtr	l_prev,		/* pointer to prev */
		l_next;		/* pointer to next */
	daddr	l_dline;		/* pointer to disk location */
};

/* typedef struct mark Mark in jove.h */

struct mark {
	LinePtr	m_line;
	int	m_char;
	bool	m_big_delete;	/* mark was within the range of a multi-line delete */
	Mark	*m_next;	/* list of marks */
};

/* typedef struct buffer Buffer in jove.h */

struct buffer {
#ifdef MAC
	int Type;		/* kludge... to look like a data_obj */
	char *Name;		/* Name will not be used */
#endif
	Buffer	*b_next;		/* next buffer in chain */
	char	*b_name,		/* buffer name */
		*b_fname;		/* file name associated with buffer */
#ifdef USE_INO
	/* unique identification of file */
	dev_t	b_dev;			/* device of file name. */
	ino_t	b_ino;			/* inode of file name */
#endif
	time_t	b_mtime;		/* last modify time ...
					   to detect two people writing
					   to the same file */
	LinePtr	b_first,		/* pointer to first line in list */
		b_dot,			/* current line */
		b_last;		/* last line in list */
	int	b_char;			/* current character in line */

#define NMARKS	8			/* number of marks in the ring */

	Mark	*b_markring[NMARKS],	/* new marks are pushed here */
#define b_curmark(b)	((b)->b_markring[(b)->b_themark])
#define curmark		b_curmark(curbuf)
		*b_marks;		/* all the marks for this buffer */
	char	b_themark,		/* current mark (in b_markring) */
		b_type,			/* file, scratch, process, iprocess */
		b_ntbf,			/* (bool) needs to be found when we
					   first select? */
		b_modified,		/* (bool) is the buffer modified? */
		b_diverged;		/* (bool) has the underlying file been changed behind our back? */
	int	b_major,		/* major mode */
		b_minor;		/* and minor mode */
	struct keymap	*b_map;		/* local bindings (if any) */
#ifdef IPROCS
	struct process	*b_process;		/* process we're attached to */
#endif
};

extern Buffer
	*world,		/* first buffer */
	*curbuf,	/* pointer into world for current buffer */
	*lastbuf,	/* Last buffer we were in so we have a default
			   buffer during a select buffer. */
	*perr_buf;	/* Buffer with error messages */

#define curline	(curbuf->b_dot)
#define curchar (curbuf->b_char)

/* typedef struct position Bufpos in jove.h */

struct position {
	LinePtr	p_line;
	int	p_char;
};

extern bool
	valid_bp proto((Buffer	*bp));

extern Buffer
	*buf_exists proto((char *name)),
	*do_find proto((Window *w, char *fname, bool force, bool do_macros)),
	*do_select proto((Window *w,char *name)),
	*do_stat proto((char *name, Buffer *target, int flags));

/* flags to do_stat */
#define DS_NONE	0
#define DS_SET	1	/* set target buffers stat fields */
#define DS_REUSE	2	/* reuse result of last stat */
#define DS_DIR	4	/* directory OK as result */

extern bool
	was_dir,	/* do_stat found a directory */
	was_file;	/* do_stat found a (plain) file */

extern char
	*ask_buf proto((Buffer *def, int flags));

#ifdef USE_PROTOTYPES
struct macro;	/* forward declaration preventing prototype scoping */
#endif /* USE_PROTOTYPES */

extern void
	TogMinor proto((int bit)),
	buf_clear proto((Buffer *b)),
	setfname proto((Buffer *b,char *name)),
	SetABuf proto((Buffer *b)),
	SetBuf proto((Buffer *newbuf)),
	buf_init proto((void));

extern LinePtr
	lastline proto((LinePtr lp)),
	listput proto((Buffer *buf,LinePtr after)),
	next_line proto((LinePtr line,int num)),
	prev_line proto((LinePtr line,int num));

/* Commands: */

extern void
	BufErase proto((void)),
	BufKill proto((void)),
	BufList proto((void)),
	BufSelect proto((void)),
	FindFile proto((void)),
	KillSome proto((void)),
	ReNamBuf proto((void));

extern void
	Buf1Select proto((void)),
	Buf2Select proto((void)),
	Buf3Select proto((void)),
	Buf4Select proto((void)),
	Buf5Select proto((void)),
	Buf6Select proto((void)),
	Buf7Select proto((void)),
	Buf8Select proto((void)),
	Buf9Select proto((void)),
	Buf10Select proto((void));