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
|
/* Global declarations for the ed editor. */
/* GNU ed - The GNU line editor.
Copyright (C) 1993, 1994 Andrew Moore, Talke Studio
Copyright (C) 2006, 2007, 2008, 2009 Antonio Diaz Diaz.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
enum Gflags
{
GLB = 0x01, /* global command */
GLS = 0x02, /* list after command */
GNP = 0x04, /* enumerate after command */
GPR = 0x08, /* print after command */
GSG = 0x10 /* global substitute */
};
typedef struct line /* Line node */
{
struct line *q_forw;
struct line *q_back;
long pos; /* position of text in scratch buffer */
int len; /* length of line */
}
line_t;
typedef struct
{
enum { UADD = 0, UDEL = 1, UMOV = 2, VMOV = 3 } type;
line_t *head; /* head of list */
line_t *tail; /* tail of list */
}
undo_t;
#ifndef max
#define max( a,b ) ( (( a ) > ( b )) ? ( a ) : ( b ) )
#endif
#ifndef min
#define min( a,b ) ( (( a ) < ( b )) ? ( a ) : ( b ) )
#endif
/* defined in buffer.c */
char append_lines( const char *ibufp, const int addr, const char isglobal );
char close_sbuf( void );
char copy_lines( const int first_addr, const int second_addr, const int addr );
int current_addr( void );
int dec_addr( int addr );
char delete_lines( const int from, const int to, const char isglobal );
int get_line_node_addr( const line_t *lp );
char *get_sbuf_line( const line_t *lp );
int inc_addr( int addr );
int inc_current_addr( void );
char init_buffers( void );
char isbinary( void );
char join_lines( const int from, const int to, const char isglobal );
int last_addr( void );
char modified( void );
char move_lines( const int first_addr, const int second_addr, const int addr,
const char isglobal );
char newline_added( void );
char open_sbuf( void );
int path_max( const char *filename );
char put_lines( const int addr );
const char *put_sbuf_line( const char *cs, const int addr );
line_t *search_line_node( const int n );
void set_binary( void );
void set_current_addr( const int addr );
void set_modified( const char m );
void set_newline_added( void );
char yank_lines( const int from, const int to );
void clear_undo_stack( void );
undo_t *push_undo_atom( const int type, const int from, const int to );
void reset_undo_state( void );
char undo( const char isglobal );
/* defined in global.c */
void clear_active_list( void );
const line_t *next_active_node( void );
char set_active_node( const line_t *lp );
void unset_active_nodes( const line_t *np, const line_t *mp );
/* defined in io.c */
char display_lines( int from, const int to, const int gflags );
const char *get_extended_line( const char *ibufp, int *lenp, const char nonl );
const char *get_tty_line( int *lenp );
int read_file( const char *filename, const int addr );
int write_file( const char * const filename, const char * const mode,
const int from, const int to );
/* defined in main.c */
char is_regular_file( int fd );
char may_access_filename( const char *name );
char restricted( void );
char scripted( void );
void show_strerror( const char *filename, int errcode );
char traditional( void );
/* defined in main_loop.c */
int main_loop( const char loose );
void set_def_filename( const char *s );
void set_error_msg( const char *msg );
void set_prompt( const char *s );
void set_verbose( void );
void unmark_line_node( const line_t *lp );
/* defined in regex.c */
char build_active_list( const char **ibufpp, const int first_addr,
const int second_addr, const char match );
char extract_subst_tail( const char **ibufpp, int *gflagsp, int *snump,
const char isglobal );
int get_matching_node_addr( const char **ibufpp, const char forward );
char new_compiled_pattern( const char **ibufpp );
char prev_pattern( void );
char search_and_replace( const int first_addr, const int second_addr,
const int gflags, const int snum, const char isglobal );
/* defined in signal.c */
void disable_interrupts( void );
void enable_interrupts( void );
char parse_int( int *i, const char *str, const char **tail );
char resize_buffer( char **buf, int *size, int min_size );
char resize_line_buffer( const line_t ***buf, int *size, int min_size );
char resize_undo_buffer( undo_t **buf, int *size, int min_size );
void set_signals( void );
void set_window_lines( const int lines );
const char *strip_escapes( const char *s );
int window_columns( void );
int window_lines( void );
|