-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathheader.h
208 lines (199 loc) · 7.02 KB
/
header.h
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/* header.h, Atto Emacs, Public Domain, Hugh Barney, 2016, Derived from: Anthony's Editor January 93 */
#define _XOPEN_SOURCE
#include <locale.h>
#include <stdlib.h>
#include <stdarg.h>
#include <assert.h>
#include <curses.h>
#include <stdio.h>
#include <sys/types.h>
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include <unistd.h>
#include <wchar.h>
int mkstemp(char *);
#define VERSION "Atto 1.22, Public Domain, Dec 2020, by Hugh Barney, No warranty."
#define PROG_NAME "atto"
#define B_MODIFIED 0x01 /* modified buffer */
#define B_OVERWRITE 0x02 /* overwrite mode */
#define MSGLINE (LINES-1)
#define NOMARK -1
#define CHUNK 8096L
#define K_BUFFER_LENGTH 256
#define TEMPBUF 512
#define STRBUF_L 256
#define STRBUF_M 64
#define STRBUF_S 16
#define MIN_GAP_EXPAND 512
#define TEMPFILE "/tmp/feXXXXXX"
#define F_NONE 0
#define F_CLEAR 1
#define ID_DEFAULT 1
#define ID_SYMBOL 2
#define ID_MODELINE 3
#define ID_DIGITS 4
#define ID_LINE_COMMENT 5
#define ID_BLOCK_COMMENT 6
#define ID_DOUBLE_STRING 7
#define ID_SINGLE_STRING 8
typedef unsigned char char_t;
typedef long point_t;
typedef struct keymap_t {
char *key_desc; /* name of bound function */
char *key_bytes; /* the string of bytes when this key is pressed */
void (*func)(void);
} keymap_t;
typedef struct buffer_t
{
struct buffer_t *b_next; /* Link to next buffer_t */
point_t b_mark; /* the mark */
point_t b_point; /* the point */
point_t b_cpoint; /* the original current point, used for multiple window displaying */
point_t b_page; /* start of page */
point_t b_epage; /* end of page */
point_t b_reframe; /* force a reframe of the display */
int b_cnt; /* count of windows referencing this buffer */
int b_size; /* current size of text being edited (not including gap) */
int b_psize; /* previous size */
char_t *b_buf; /* start of buffer */
char_t *b_ebuf; /* end of buffer */
char_t *b_gap; /* start of gap */
char_t *b_egap; /* end of gap */
int b_row; /* cursor row */
int b_col; /* cursor col */
char b_fname[NAME_MAX + 1]; /* filename */
char b_bname[STRBUF_S]; /* buffer name */
char b_flags; /* buffer flags */
} buffer_t;
typedef struct window_t
{
struct window_t *w_next; /* Next window */
struct buffer_t *w_bufp; /* Buffer displayed in window */
point_t w_point;
point_t w_mark;
point_t w_page;
point_t w_epage;
char w_top; /* Origin 0 top row of window */
char w_rows; /* no. of rows of text in window */
int w_row; /* cursor row */
int w_col; /* cursor col */
int w_update;
char w_name[STRBUF_S];
} window_t;
extern buffer_t *curbp; /* current buffer */
extern buffer_t *bheadp; /* head of list of buffers */
extern window_t *curwp;
extern window_t *wheadp;
/*
* Some compilers define size_t as a unsigned 16 bit number while
* point_t and off_t might be defined as a signed 32 bit number.
* malloc(), realloc(), fread(), and fwrite() take size_t parameters,
* which means there will be some size limits because size_t is too
* small of a type.
*/
#define MAX_SIZE_T ((unsigned long) (size_t) ~0)
extern int done; /* Quit flag. */
extern int msgflag; /* True if msgline should be displayed. */
extern point_t nscrap; /* Length of scrap buffer. */
extern char_t *scrap; /* Allocated scrap buffer. */
extern char_t *input;
extern char msgline[]; /* Message line input/output buffer. */
extern char temp[]; /* Temporary buffer. */
extern char searchtext[];
extern char replace[];
extern keymap_t *key_map; /* Command key mappings. */
extern keymap_t keymap[];
extern keymap_t *key_return; /* Command key return */
extern void fatal(char *);
extern void msg(char *, ...);
extern void display(window_t *, int);
extern void dispmsg(void);
extern void modeline(window_t *);
extern int utf8_size(char_t);
extern int prev_utf8_char_size(void);
extern void display_utf8(buffer_t *, char_t, int);
extern point_t lnstart(buffer_t *, point_t);
extern point_t lncolumn(buffer_t *, point_t, int);
extern point_t segstart(buffer_t *, point_t, point_t);
extern point_t segnext(buffer_t *, point_t, point_t);
extern point_t upup(buffer_t *, point_t);
extern point_t dndn(buffer_t *, point_t);
extern char_t *get_key(keymap_t *, keymap_t **);
extern int getinput(char *, char *, int, int);
extern int getfilename(char *, char *, int);
extern void display_prompt_and_response(char *, char *);
extern int growgap(buffer_t *, point_t);
extern point_t movegap(buffer_t *, point_t);
extern point_t pos(buffer_t *, char_t *);
extern char_t *ptr(buffer_t *, point_t);
extern int posix_file(char *);
extern int save(char *);
extern int load_file(char *);
extern int insert_file(char *, int);
extern void backsp(void);
extern void block(void);
extern void iblock(void);
extern void bottom(void);
extern void cut(void);
extern void copy(void);
extern void copy_cut(int);
extern void delete(void);
extern void toggle_overwrite_mode(void);
extern void down(void);
extern void insert(void);
extern void left(void);
extern void lnbegin(void);
extern void lnend(void);
extern void paste(void);
extern void pgdown(void);
extern void pgup(void);
extern void quit(void);
extern int yesno(int);
extern void quit_ask(void);
extern void redraw(void);
extern void readfile(void);
extern void insertfile(void);
extern void right(void);
extern void top(void);
extern void up(void);
extern void version(void);
extern void wleft(void);
extern void wright(void);
extern void writefile(void);
extern void savebuffer(void);
extern void showpos(void);
extern void killtoeol(void);
extern void gotoline(void);
extern void search(void);
extern void query_replace(void);
extern point_t line_to_point(int);
extern point_t search_forward(buffer_t *, point_t, char *);
extern point_t search_backwards(buffer_t *, point_t, char *);
extern void update_search_prompt(char *, char *);
extern void display_search_result(point_t, int, char *, char *);
extern buffer_t* find_buffer(char *, int);
extern void buffer_init(buffer_t *);
extern int delete_buffer(buffer_t *);
extern void next_buffer(void);
extern int count_buffers(void);
extern int modified_buffers(void);
extern void killbuffer(void);
extern char* get_buffer_name(buffer_t *);
extern void get_line_stats(int *, int *);
extern void query_replace(void);
extern window_t *new_window();
extern void one_window(window_t *);
extern void split_window();
extern void next_window();
extern void delete_other_windows();
extern void free_other_windows();
extern void update_display();
extern void w2b(window_t *);
extern void b2w(window_t *);
extern void associate_b2w(buffer_t *, window_t *);
extern void disassociate_b(window_t *);
extern void set_parse_state(buffer_t *, point_t);
extern void set_parse_state2(buffer_t *, point_t);
extern int parse_text(buffer_t *, point_t);
extern void resize_terminal();