1 /* 2 * filebuffer.h 3 * 4 * Copyright (C) 1998 Jiann-Ching Liu 5 */ 6 7 8 #ifndef __QE_FILEBUFFER_H_ 9 #define __QE_FILEBUFFER_H_ 10 11 #include <limits.h> 12 #include "qe_config.h" 13 #include "qestring.h" 14 #include "linebuffer.h" 15 #include "history.h" 16 #include "mark.h" 17 #include "menu.h" 18 19 20 #ifndef TAB_SPACE 21 #define TAB_SPACE (8) 22 #endif 23 24 #define FB_COMMAND_MODE (0) 25 #define FB_DATAAREA_MODE (1) 26 #define FB_REPLACE_MODE (0) 27 #define FB_INSERT_MODE (1) 28 29 #define MENU_NOT_IN_MENU (0) 30 #define MENU_IN_MENU (1) 31 #define MENU_KEEP_IN_MENU (2) 32 #define MENU_BACK_TO_MENU (3) 33 34 #define HISTORY_KEY_NONE (0) 35 #define HISTORY_KEY_UP (1) 36 #define HISTORY_KEY_DOWN (2) 37 #define HISTORY_KEY_BOTH (3) 38 39 #define DIR_SORT_BY_NAME (0) 40 #define DIR_SORT_BY_TIME (1) 41 #define DIR_SORT_BY_SIZE (2) 42 43 #define RTNVAL_NEXT_BUFFER (1) 44 #define RTNVAL_SHELL_ESCAPE (2) 45 #define RTNVAL_QUIT_BUFFER (3) 46 #define RTNVAL_QUIT_CURRENT_BUFFER (4) 47 #define RTNVAL_QUIT_ALL_BUFFER (5) 48 #define RTNVAL_SAVE_ALL_AND_QUIT (6) 49 50 #define NORMAL_TEXT_BUFFER (0) 51 #define DIRECTORY_BUFFER (1) 52 53 #define QE_IF_NECESSARY (0) 54 #define QE_FORCE (1) 55 56 #define maximum(x,y) (((x)>(y))?(x):(y)) 57 #define minimum(x,y) (((x)<(y))?(x):(y)) 58 59 #ifndef USE_ANSICOLOR 60 #define setattr(x,y) wattrset(x,y) 61 #endif 62 63 class keydefine; 64 65 class filebuffer { 66 protected: 67 qeString filename; 68 WINDOW *win; 69 int setbook0x,setbook0y; 70 int setbook1x,setbook1y; 71 int setbook2x,setbook2y; 72 char cmdline[MAX_BUFFER_LEN]; 73 char patstr[21]; 74 int cmdline_idx; 75 int screen_x, screen_y; 76 int cursor_x, cursor_y; 77 int buffer_x, buffer_y; 78 unsigned int left_col_no; 79 linebuffer *head, *tail, *current; 80 linebuffer *topline; 81 int top_line_no; 82 int total_line; 83 short input_mode; 84 short mode; 85 short loadingOK; 86 short dirty_flag; 87 short dirty_line; 88 short quiet_flag; 89 short read_only; 90 short buffer_type; 91 short message_dirty_flag; 92 short keep_in_menu; 93 94 char workbuffer[MAX_BUFFER_LEN]; 95 int workbufidx; 96 int workbuflen; 97 98 int clientarea(void); 99 int cmdarea(void); 100 101 protected: 102 static const int markstacksize = 10; 103 static mark markstack[]; 104 static int marksp; 105 static mark current_mark; 106 static filebuffer *current_buffer; 107 filebuffer *next_buffer; 108 filebuffer *previous_buffer; 109 static int push_mark(void); 110 static int pop_mark(void); 111 static short enable_ctrl_k; 112 static short enable_ctrl_x; 113 static short enable_ctrl_q; 114 static short history_key; 115 static short insert_mode; 116 static short blank_compress; 117 static short search_case; 118 static short dir_sort; 119 static char current_dir[PATH_MAX]; 120 static int screen_columns; 121 static int screen_lines; 122 static keydefine *kdf; 123 static short big5msg_flag; 124 static short quit_confirm; 125 static menu menubar; 126 static cmdHistory history; 127 #ifdef USE_ANSICOLOR 128 static int ansi_color; 129 void setattr(WINDOW *w, int color); 130 #endif 131 132 void init_window(void); 133 void init_menu(void); 134 void load_file(void); 135 136 protected: 137 void general_init(void); 138 void display_status(void); 139 void load_workbuffer(void); 140 void write_workbuffer(const int force); 141 virtual void refresh_clientarea(const int bflflag); 142 virtual void refresh_bufferline(void); 143 void refresh_cmdarea(void); 144 void display_filename(void); 145 int dirty_buffer(const int force = 0); 146 void display_messages(const char *fmt, ...); 147 void display_messages(const int msgno); 148 void display_messages(void); 149 int getfirstkey(void); 150 int getnextkey(void); 151 void ca_attrset(void); 152 char outputformat[10]; 153 int stringcompare(const char *s1, const char *s2); 154 int stringncompare(const char *s1,const char *s2,const int n); 155 void fix_all_mark_position(const int tp); 156 void fix_mark_position(mark& mk, const int tp); 157 void unmark_all_mark(void); 158 void moveto(const int y, const int x); 159 void mvprint(const int y, const int x, const char *str); 160 void mvprint(const int y, const int x, const int len, 161 const char *str); 162 public: 163 filebuffer(void); 164 filebuffer(const char *fname); 165 166 virtual ~filebuffer(void); 167 static void init_curses(void); 168 static void end_curses(void); 169 static int setenviron(const char *string); 170 static void init_keydefine(const char *fname); 171 static void init_keydefine(void); 172 static int is_big5(void); 173 174 static void out_of_memory(void); 175 176 filebuffer* active(void); 177 178 protected: 179 180 void paint(void); 181 int cmd_kbinput(void); 182 int cmd_edit(const char *filename, const int ro = 0); 183 int cmd_dir(const char *path); 184 int cmd_execute_key(const int keycode); 185 int cmd_execute(const char *cmdstr); 186 int cmd_cmdquote(const char *quote); 187 virtual int do_function_key(const int key); 188 int cmd_change(const char *from, const char *to, 189 const int dir = 0, const int mk = 0, 190 int confirm = 1, int all = 0); 191 int cmd_find(const char *str, const int dir = 0, 192 const int mark = 0 ,int msg = 1); 193 int search_current_line(const char *str, const int dir, 194 linebuffer* lptr, int &x); 195 int search_next_line(const char *str, const int dir, 196 linebuffer*& lptr, int &y, int &x); 197 public: 198 virtual int isword(int); 199 virtual int cmd_up(void); 200 virtual int cmd_down(void); 201 virtual int cmd_left(void); 202 virtual int cmd_right(void); 203 virtual int cmd_pgup(void); 204 virtual int cmd_pgdn(void); 205 virtual int cmd_scrollup(void); 206 virtual int cmd_scrolldown(void); 207 virtual int cmd_scrollleft(void); 208 virtual int cmd_scrollright(void); 209 virtual int cmd_wordend(void); 210 virtual int cmd_wordbegin(void); 211 virtual int cmd_wordnext(void); 212 virtual int cmd_markword(void); 213 virtual int cmd_beginline(void); 214 virtual int cmd_endline(void); 215 virtual int cmd_goto_line(void); 216 virtual int cmd_setbook0(void); 217 virtual int cmd_setbook1(void); 218 virtual int cmd_setbook2(void); 219 virtual int cmd_gobook0(void); 220 virtual int cmd_gobook1(void); 221 virtual int cmd_gobook2(void); 222 virtual int cmd_first_nonblank(void); 223 virtual int cmd_top_edge(void); 224 virtual int cmd_bottom_edge(void); 225 virtual int cmd_tab(void); 226 virtual int cmd_top(void); 227 virtual int cmd_bottom(void); 228 virtual int cmd_centerline(void); 229 virtual int cmd_backword(void); 230 virtual int cmd_tabword(void); 231 virtual int cmd_quit(void); 232 virtual int cmd_file(void); 233 virtual int cmd_save(void); 234 virtual int cmd_new(void); 235 virtual int cmd_edit(void); 236 virtual int cmd_dir(void); 237 virtual int cmd_shell(void); 238 virtual int cmd_command_toggle(void); 239 virtual int cmd_insert_toggle(void); 240 virtual int cmd_insert_mode(void); 241 virtual int cmd_replace_mode(void); 242 virtual int cmd_cursor_data(void); 243 virtual int cmd_cursor_cmd(void); 244 virtual int cmd_insertline(void); 245 virtual int cmd_rubout(void); 246 virtual int cmd_delchar(void); 247 virtual int cmd_dupchar(void); 248 virtual int cmd_undo(void); 249 virtual int cmd_split(void); 250 virtual int cmd_join(void); 251 virtual int cmd_deleteline(void); 252 virtual int cmd_erase_begin(void); 253 virtual int cmd_erase_end(void); 254 virtual int cmd_confirm(void); 255 virtual int cmd_execute(void); 256 virtual int cmd_beep(void); 257 virtual int cmd_pushmark(void); 258 virtual int cmd_popmark(void); 259 virtual int cmd_markline(void); 260 virtual int cmd_markblock(void); 261 virtual int cmd_markchar(void); 262 virtual int cmd_clear_marks(void); 263 virtual int cmd_unmark(void); 264 virtual int cmd_copymark(void); 265 virtual int cmd_movemark(void); 266 virtual int cmd_deletemark(void); 267 virtual int cmd_fillmark(void); 268 virtual int cmd_beginmark(void); 269 virtual int cmd_endmark(void); 270 virtual int cmd_overlayblock(void); 271 virtual int cmd_shiftleft(void); 272 virtual int cmd_shiftright(void); 273 virtual int cmd_copyfromcmd(void); 274 virtual int cmd_copytocmd(void); 275 virtual int cmd_uppercase(void); 276 virtual int cmd_lowercase(void); 277 // virtual int cmd_decodebase64(void); 278 279 virtual int cmd_gotoline(void); 280 virtual int cmd_goto_currline(int,int); 281 virtual int cmd_search(void); 282 virtual int cmd_search2(void); 283 virtual int cmd_isearch(void); 284 virtual int cmd_menu(void); 285 virtual int cmd_kill_line(void); 286 virtual int query_blnkcmprs(void); 287 virtual int query_searchcase(void); 288 virtual int query_ctrl_k(void); 289 virtual int query_ctrl_x(void); 290 virtual int query_ctrl_q(void); 291 virtual int query_big5(void); 292 virtual int cmd_about(void); 293 virtual int cmd_help(void); 294 virtual int cmd_lang_big5(void); 295 virtual int cmd_lang_english(void); 296 virtual int cmd_toggle_blankcompress(void); 297 virtual int cmd_history(void); 298 virtual int cmd_toggle_historykey(void); 299 virtual int cmd_toggle_dirsort(void); 300 virtual int cmd_toggle_searchcase(void); 301 virtual int cmd_quit_all(void); 302 virtual int cmd_save_all_quit(void); 303 virtual int cmd_resume(void); 304 305 public: 306 char * menu_language(const char *str); 307 char * menu_blankcompress(const char *str); 308 char * menu_inputmode(const char *str); 309 char * menu_historykey(const char *str); 310 char * menu_dirsort(const char *str); 311 char * menu_searchcase(const char *str); 312 313 // friend: 314 friend int mark::renumber(void); 315 }; 316 317 typedef int (filebuffer::*filebuffer_pmfi)(void); 318 319 #endif 320