⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edit.h

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __EDIT_H
#define __EDIT_H

#ifdef MIDNIGHT

#ifdef HAVE_SLANG
#define HAVE_SYNTAXH 1
#endif

#    include <stdio.h>
#    include <stdarg.h>
#    include <sys/types.h>
#    ifdef HAVE_UNISTD_H
#    	 include <unistd.h>
#    endif
#    include <string.h>
#    include "../src/tty.h"
#    include <sys/stat.h>
#    include <errno.h>

#    ifdef HAVE_FCNTL_H
#        include <fcntl.h>
#    endif

#    include <stdlib.h>
#    include <malloc.h>

#else       /* ! MIDNIGHT */

#    include "global.h"
#    include <stdio.h>
#    include <stdarg.h>
#    include <sys/types.h>

#    	 ifdef HAVE_UNISTD_H
#    	     include <unistd.h>
#    	 endif

#    include <my_string.h>
#    include <sys/stat.h>

#    ifdef HAVE_FCNTL_H
#    	 include <fcntl.h>
#    endif

#    include <stdlib.h>
#    include <stdarg.h>

#    if TIME_WITH_SYS_TIME
#    	 include <sys/time.h>
#    	 include <time.h>
#    else
#    	 if HAVE_SYS_TIME_H
#    	     include <sys/time.h>
#    	 else
#    	     include <time.h>
#    	 endif
#    endif

#    include "regex.h"

#endif

#ifndef MIDNIGHT

#    include <signal.h>
#    include <X11/Xlib.h>
#    include <X11/Xutil.h>
#    include <X11/Xresource.h>
#    include "lkeysym.h"
#    include "coolwidget.h"
#    include "app_glob.c"
#    include "coollocal.h"
#    include "stringtools.h"

#else

#    include "../src/main.h"		/* for char *shell */
#    include "../src/mad.h"
#    include "../src/dlg.h"
#    include "../src/widget.h"
#    include "../src/color.h"
#    include "../src/dialog.h"
#    include "../src/mouse.h"
#    include "../src/global.h"
#    include "../src/help.h"
#    include "../src/key.h"
#    include "../src/wtools.h"		/* for QuickWidgets */
#    include "../src/win.h"
#    include "../vfs/vfs.h"
#    include "../src/menu.h"
#    include "../src/regex.h"
#    define WANT_WIDGETS

#    define WIDGET_COMMAND (WIDGET_USER + 10)
#    define N_menus 5

#endif

#define SEARCH_DIALOG_OPTION_NO_SCANF	1
#define SEARCH_DIALOG_OPTION_NO_REGEX	2
#define SEARCH_DIALOG_OPTION_NO_CASE	4
#define SEARCH_DIALOG_OPTION_BACKWARDS	8

#define SYNTAX_FILE "/.cedit/syntax"
#define CLIP_FILE "/.cedit/cooledit.clip"
#define MACRO_FILE "/.cedit/cooledit.macros"
#define BLOCK_FILE "/.cedit/cooledit.block"
#define ERROR_FILE "/.cedit/cooledit.error"
#define TEMP_FILE "/.cedit/cooledit.temp"
#define SCRIPT_FILE "/.cedit/cooledit.script"
#define EDIT_DIR "/.cedit"

#define EDIT_KEY_EMULATION_NORMAL 0
#define EDIT_KEY_EMULATION_EMACS  1

#define REDRAW_LINE          (1 << 0)
#define REDRAW_LINE_ABOVE    (1 << 1)
#define REDRAW_LINE_BELOW    (1 << 2)
#define REDRAW_AFTER_CURSOR  (1 << 3)
#define REDRAW_BEFORE_CURSOR (1 << 4)
#define REDRAW_PAGE          (1 << 5)
#define REDRAW_IN_BOUNDS     (1 << 6)
#define REDRAW_CHAR_ONLY     (1 << 7)
#define REDRAW_COMPLETELY    (1 << 8)

#define MOD_ABNORMAL		(1 << 0)
#define MOD_UNDERLINED		(1 << 1)
#define MOD_BOLD		(1 << 2)
#define MOD_HIGHLIGHTED		(1 << 3)
#define MOD_MARKED		(1 << 4)
#define MOD_ITALIC		(1 << 5)
#define MOD_CURSOR		(1 << 6)
#define MOD_INVERSE		(1 << 7)

#ifndef MIDNIGHT
#    define EDIT_TEXT_HORIZONTAL_OFFSET 4
#    define EDIT_TEXT_VERTICAL_OFFSET 3
#else
#    define EDIT_TEXT_HORIZONTAL_OFFSET 0
#    define EDIT_TEXT_VERTICAL_OFFSET 1
#    define FONT_OFFSET_X 0
#    define FONT_OFFSET_Y 0
#endif

#define EDIT_RIGHT_EXTREME option_edit_right_extreme
#define EDIT_LEFT_EXTREME option_edit_left_extreme
#define EDIT_TOP_EXTREME option_edit_top_extreme
#define EDIT_BOTTOM_EXTREME option_edit_bottom_extreme

#define MAX_MACRO_LENGTH 1024

/*there are a maximum of ... */
#define MAXBUFF 1024
/*... edit buffers, each of which is ... */
#define EDIT_BUF_SIZE 16384
/* ...bytes in size. */

/*x / EDIT_BUF_SIZE equals x >> ... */
#define S_EDIT_BUF_SIZE 14

/* x % EDIT_BUF_SIZE is equal to x && ... */
#define M_EDIT_BUF_SIZE 16383

#define SIZE_LIMIT (EDIT_BUF_SIZE * (MAXBUFF - 2))
/* Note a 16k stack is 64k of data and enough to hold (usually) around 10
   pages of undo info. */

/* undo stack */
#define START_STACK_SIZE 32


/*some codes that may be pushed onto or returned from the undo stack: */
#define CURS_LEFT 601
#define CURS_RIGHT 602
#define DELETE 603
#define BACKSPACE 604
#define STACK_BOTTOM 605
#define CURS_LEFT_LOTS 606
#define CURS_RIGHT_LOTS 607
#define MARK_1 1000
#define MARK_2 700000000
#define KEY_PRESS 1400000000

/*Tabs spaces: (sofar only HALF_TAB_SIZE is used: */
#define TAB_SIZE		option_tab_spacing
#define HALF_TAB_SIZE		((int) option_tab_spacing / 2)

struct macro {
    short command;
    short ch;
};

struct selection {
   unsigned char * text;
   int len;
};


#define RULE_CONTEXT		0x00FFF000UL
#define RULE_CONTEXT_SHIFT	12
#define RULE_WORD		0x00000FFFUL
#define RULE_WORD_SHIFT		0
#define RULE_ON_LEFT_BORDER	0x02000000UL
#define RULE_ON_RIGHT_BORDER	0x01000000UL

struct key_word {
    char *keyword;
    char first;
    char last;
    char *whole_word_chars_left;
    char *whole_word_chars_right;
#define NO_COLOR ((unsigned long) -1);
    int line_start;
    int bg;
    int fg;
};

struct context_rule {
    int rule_number;
    char *left;
    char first_left;
    char last_left;
    char line_start_left;
    char *right;
    char first_right;
    char last_right;
    char line_start_right;
    int single_char;
    int between_delimiters;
    char *whole_word_chars_left;
    char *whole_word_chars_right;
    unsigned char *conflicts;
    char *keyword_first_chars;
    char *keyword_last_chars;
/* first word is word[1] */
    struct key_word **keyword;
};



struct editor_widget {
#ifdef MIDNIGHT
    Widget widget;
#else
    struct cool_widget *widget;
#endif
#define from_here num_widget_lines
    int num_widget_lines;
    int num_widget_columns;

#ifdef MIDNIGHT
    int have_frame;
#else
    int stopped;
#endif

    char *filename;		/* Name of the file */
    char *dir;			/* current directory */

/* dynamic buffers and curser position for editor: */
    long curs1;			/*position of the cursor from the beginning of the file. */
    long curs2;			/*position from the end of the file */
    unsigned char *buffers1[MAXBUFF + 1];	/*all data up to curs1 */
    unsigned char *buffers2[MAXBUFF + 1];	/*all data from end of file down to curs2 */

/* search variables */
    long search_start;		/* First character to start searching from */
    int found_len;		/* Length of found string or 0 if none was found */
    long found_start;		/* the found word from a search - start position */

/* display information */
    long last_byte;		/* Last byte of file */
    long start_display;		/* First char displayed */
    long start_col;		/* First displayed column, negative */
    long max_column;		/* The maximum cursor position ever reached used to calc hori scroll bar */
    long curs_row;		/*row position of curser on the screen */
    long curs_col;		/*column position on screen */
    int force;			/* how much of the screen do we redraw? */
    unsigned char overwrite;
    unsigned char modified;	/*has the file been changed?: 1 if char inserted or
				   deleted at all since last load or save */
#ifdef MIDNIGHT
    int delete_file;			/* has the file been created in edit_load_file? Delete
			           it at end of editing when it hasn't been modified
				   or saved */
#endif
    unsigned char highlight;
    long prev_col;		/*recent column position of the curser - used when moving
				   up or down past lines that are shorter than the current line */
    long curs_line;		/*line number of the cursor. */
    long start_line;		/*line nummber of the top of the page */

/* file info */
    long total_lines;		/*total lines in the file */
    long mark1;			/*position of highlight start */
    long mark2;			/*position of highlight end */
    int column1;			/*position of column highlight start */
    int column2;			/*position of column highlight end */
    long bracket;		/*position of a matching bracket */

/* undo stack and pointers */
    unsigned long stack_pointer;
    long *undo_stack;
    unsigned long stack_size;
    unsigned long stack_size_mask;
    unsigned long stack_bottom;
    struct stat stat;

/* syntax higlighting */
    struct context_rule **rules;
    long last_get_rule;
    unsigned long rule;
    char *syntax_type;		/* description of syntax highlighting type being used */
    int explicit_syntax;	/* have we forced the syntax hi. type in spite of the filename? */

    int to_here;		/* dummy marker */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -