📄 elle.h
字号:
/* ELLE - Copyright 1982, 1984 by Ken Harrenstien, SRI International * This software is quasi-public; it may be used freely with * like software, but may NOT be sold or made part of licensed * products without permission of the author. *//* * ELLE.H Global ELLE definitions */#ifndef EXT#define EXT extern /* Default assumes these are referencing decls */#endif/* Make identifiers unique in 1st 6 chars as per ANSI rule for externals */#define tvc_cin tvccin#define tvc_cdn tvccdn#define tvc_lin tvclin#define tvc_ldn tvcldn#define ev_fno1 evfno1#define ev_fno2 evfno2#define ev_fnn1 evfnn1#define ev_fnn2 evfnn2#define ask_sall asksal /* eebuff.c */#define ask_save asksav#define buf_tmod buftmo#define buf_tmat buftma#define e_gobob egobob /* eeedit.c */#define e_gobol egobol#define e_goeob egoeob#define e_goeol egoeol#define fill_prefix filpfx /* eefill.c */#define fill_plen filpln#define fill_cur_line filcln#define kill_ptr kilptr /* eef3.c */#define kill_push kilpsh#define ed_insert edinst /* eefed.c */#define ed_insn edinsn#define ed_deln eddeln#define ed_delete eddele#define f_fillreg ffilrg /* eejust.c */#define f_fillpara ffilpa#include "eesite.h" /* Insert site-dependent flags and parameters */#include "sb.h" /* Insert SB package definitions */#include "eeprof.h" /* Insert user profile definition. This is a * separate file so ELLEC can use it too. */#include "eefidx.h" /* Insert desired function defs *//* ELLE Compile-time parameter defaults */#ifndef KILL_LEN#define KILL_LEN 8 /* Size of kill ring */#endif#ifndef MAXHT#define MAXHT 72 /* Height (# lines) of largest screen we'll suport */#endif#ifndef MAXLINE#define MAXLINE 132 /* Width (# chars) of largest screen we'll support */#endif#ifndef FNAMELEN#define FNAMELEN 14 /* Sys-dep: Max size of last filename component */#endif /* Check FNAMSIZ if you change this. */#ifndef FNAMSIZ#define FNAMSIZ 100 /* Sys-dep: Max size of complete filename */#endif /* This must be at least as large as FNAMELEN! */#ifndef ISRCHLIM#define ISRCHLIM 50 /* Max # of chars to allow I-search on */#endif#ifndef TOBFSIZ#define TOBFSIZ 80 /* Size of TTY output buffer */#endif#ifndef TIBFSIZ#define TIBFSIZ 50 /* Size of TTY input buffer */#endif#ifndef ECHOLINES#define ECHOLINES 1 /* # of lines for echo area (below mode line) */#endif#ifndef MAXARGFILES#define MAXARGFILES 2 /* # of filename args OK at startup */#endif/* ELLE initialized variables. * Initial values are defined in EEVINI.C, but the vars must be * declared here as well so that references from all modules will * compile correctly. */extern char *ev_verstr; /* String: Editor name and version # */extern int ev_filmod; /* Default file creation mode */extern char *ev_fno1,*ev_fno2; /* Pre, postfix for "old" filenames */extern char *ev_fnn1,*ev_fnn2; /* Pre, postfix for "new" filenames */extern int ev_fcolumn; /* Fill Column variable */#if FX_INDCOMMextern int ev_ccolumn; /* Comment Column variable */#endifextern int ev_nwpct, ev_mvpct; /* New window selection percentages */#if FX_SOWINDextern int ev_modwso; /* Initial mode window standout flag */#endif#if FX_2MODEWINDSextern int ev_2modws; /* Initial setting of 2-mode-window flag */#endifextern char *ev_markshow; /* String to show when Set Mark done */extern char *ev_helpfile; /* Location of ELLE help file */extern char *ev_profile; /* Filename of ELLE binary user profile */extern struct profile def_prof; /* ELLE default user profile *//* Global variables */EXT chroff cur_dot; /* Current dot */EXT chroff mark_dot; /* Dot for mark */EXT int mark_p; /* flag indicating whether mark exists */EXT int this_cmd, last_cmd; /* Command type */EXT int unrchf; /* Stuffed character back for readcommand */EXT int exp; /* Numeric argument for commands */EXT int exp_p; /* Flag meaning an arg was given */EXT int pgoal; /* Permanent goal column */EXT int goal;EXT char *srch_str; /* Last search string specified (0 = none) */EXT int srch_len; /* Length of srch_str string */EXT int ask_len; /* Length of last string returned by "ask" */EXT char *homedir; /* User's home directory */EXT int kill_ptr; /* Index into kill ring */extern SBSTR *kill_ring[]; /* Kill ring table (allocated in eevini) *//* Editor Command types */#define KILLCMD 1 /* Kill command, for kill merging */#define ARGCMD 2 /* Argument-setter, for main loop */#define YANKCMD 3 /* Yank command, for yankpop */#define LINECMD 4 /* Next or previous line goal hacking */#if IMAGEN#define INSCMD 5 /* Simple char-insert command, for autowrap */#endif /*IMAGEN*//* Misc char definitions */#define CTRL(ch) (037&ch)#define BELL ('\007') /* Will become \a in ANSI */#define BS ('\b')#define TAB ('\t')#define LF ('\n')#define FF ('\f')#define CR ('\r')#define ESC ('\033')#define SP (' ')#define DEL ('\177')#define CB_META (0200) /* Meta bit in command char */#define CB_EXT (0400) /* Extend bit in command char */#define METIZER ESC#define EXTIZER CTRL('X')/* Terminal parameters - set at runtime startup */EXT char *tv_stype; /* Terminal type string specified by user/system */EXT int scr_ht; /* # lines of main screen area */EXT int scr_wid; /* # columns of screen */EXT int scr_wd0; /* scr_wid - 1 (for 0-origin stuff) */EXT int trm_ospeed; /* Output speed index */EXT int tvc_pos; /* Cost for absolute move (# of output chars) */EXT int tvc_bs; /* Cost for backspace */EXT int tvc_ci, tvc_cin; /* Char ins cost per call, cost per column */EXT int tvc_cd, tvc_cdn; /* Char del " " " " " " */EXT int tvc_li, tvc_lin; /* Line ins cost per call, cost per line */EXT int tvc_ld, tvc_ldn; /* Line del " " " " " " */EXT int trm_flags; /* Terminal capabilities - bit flags */ /* Maybe change to word vars someday (faster) */#define TF_IDLIN 01 /* Has I/D line */#define TF_IDCHR 02 /* Has I/D char */#define TF_SO 04 /* Has usable standout mode */#define TF_CLEOL 010 /* Has clear-to-eol */#define TF_METAKEY 020 /* Has meta key */#define TF_DIRVID 040 /* Has direct-video type interface *//* Redisplay definitions */EXT int curs_lin; /* Line # of current cursor (0 origin) */EXT int curs_col; /* Column # of current cursor (0 origin) */EXT int rd_type; /* Global var: holds redisplay "hints" */#define redp(n) rd_type |= (n)#define RD_SCREEN 01 /* Clear everything and redisplay */#define RD_WINDS 02 /* Check all windows for changes (b/emod) */#define RD_MODE 04 /* Mode line has changed, update it. */#define RD_WINRES 0400 /* Assume all of window was changed (clear b/emod) */#define RD_MOVE 010 /* Cursor has moved */#define RD_UPDWIN 020 /* Window fixed, must update modified screen lines *//*#define RD_ICHR 0 *//* Hint: Char insert done *//*#define RD_DCHR 0 *//* Hint: Char del done */#define RD_ILIN 0100 /* Hint: Line insert done */#define RD_DLIN 0200 /* Hint: Line del done *//* #define RD_MOVWIN 02000 *//* Window should be re-positioned */#define RD_FIXWIN 02000 /* Window needs fixing (call fix_wind) */#define RD_TMOD 04000 /* Text changed in this window, check it. */#define RD_WINCLR 010000 /* Clear window with CLEOLs (not yet) */#define RD_CHKALL 020000 /* Check all windows for redisplay flags */#if IMAGEN#define RD_REDO 040000 /* Just re-do the entire window, don't think */#endif /*IMAGEN*/ /* Flags with global effects, only seen in rd_type */#define RDS_GLOBALS (RD_SCREEN|RD_MODE|RD_WINDS|RD_CHKALL) /* Flags which are allowed per-window (in w_redp) */#define RDS_WINFLGS (~RDS_GLOBALS) /* Flags which force FIX_WIND() to do something */#define RDS_DOFIX (RD_WINRES|RD_TMOD|RD_FIXWIN|RD_MOVE)#define CI_CLINE '!' /* Char indicator for continued line */#define CI_CNTRL '^' /* Char indicator for control chars */#define CI_META '~' /* Char indicator for meta-bit (8th) set */#define CI_TOP '|' /* Char indicator for top-bit (9th) set */#define MAXCHAR (8+3) /* Longest char representation (TAB) + slop *//* Definitions for screen structures */struct scr_line { chroff sl_boff; /* Ptr to start of line's text in buffer */ int sl_len; /* # buffer chars in line (incl NL) */ char *sl_line; /* Ptr to screen image of line */ int sl_col; /* # chars in image == # columns used */ char sl_flg; /* Flags - set if this line modified */ char sl_cont; /* If line being continued on next, this */ /* contains 1 plus # extra chars (if any) */ /* stored at end of this line which shd be */ /* put at beg of next line. */ char *sl_nlin; /* New screen image line if modified flag set */ int sl_ncol;}; /* sl_flg definitions */#define SL_MOD 01 /* New line exists, must update to it */#define SL_EOL 02 /* Buffer line ends with EOL */#define SL_CSO 04 /* Current screen line is in standout mode */#define SL_NSO 010 /* New screen line is in standout mode */#if IMAGEN#define SL_REDO 0100 /* Line should be redone completely */#endif /*IMAGEN*/extern struct scr_line *scr[]; /* Screen line ptrs (allocated in e_vinit) *//* Buffer stuff */struct buffer { SBBUF b_sb; /* MUST be 1st thing! */ struct buffer *b_next; /* ptr to next in chain */ char *b_name; /* text name */ char *b_fn; /* filename */ chroff b_dot; /* point (dot) */ int b_flags; /* misc. bits */ struct majmode *b_mode; /* Mode of buffer */#if IMAGEN long b_mtime; /* Last file modification time */#endif /*IMAGEN*/}; /* b_flags definitions */#define B_MODIFIED 01 /* Buffer is modified */#define B_EOLCRLF 0200 /* On = CRLF mode, off = LF mode */#if IMAGEN#define B_PERMANENT 002 /* buffer cannot be killed */#define B_CMODE 004 /* "C" mode (HACK HACK) */#define B_BACKEDUP 010 /* Buffer has been backed up once */#define B_TEXTMODE 020 /* Text mode (auto-wrap, basically) */#define B_QUERYREP 040 /* Query-replace mode (qualifier) */#endif /*IMAGEN*//* Handy macro to check EOL mode */#define eolcrlf(buf) (((struct buffer *)buf)->b_flags&B_EOLCRLF)/* Buffer pointers */EXT struct buffer *buf_head, /* head of list of all buffers */ *cur_buf, /* buffer we are editing now */ *last_buf, /* buffer we were editing before */ *lines_buf; /* buffer for sep_win *//* Window stuff */struct window{ struct window *w_next; /* ptr to next in chain */ int w_flags; /* Window flags */ int w_pos; /* index of top line */ int w_ht; /* number of lines */ struct buffer *w_buf; /* buffer in this window */ int w_pct; /* % of buffer window is at */ int w_redp; /* Redisplay hints */ chroff w_topldot; /* line currently at top of window */ chroff w_dot; /* Saved dot while not cur_win */ chroff w_bmod; /* Lower bound of modified text */ chroff w_emod; /* Upper bound of modified text */ /* (offset from end of buffer!) */ chroff w_oldz; /* Buffer len as of last update */};/* Window flags */#define W_STANDOUT 01 /* Use terminal's standout mode for window */#define W_MODE 02 /* This is a mode window *//* Window pointers */EXT struct window *win_head, /* head of list of all windows */ *cur_win, /* window we are now in */ *user_win, /* current user window */ *oth_win, /* "other" user window */ *mode_win, /* window for mode line */ *ask_win, /* window for ask (echo) area */ *sep_win; /* window for separation dashes *//* Major Mode stuff. Each buffer has its own major mode. * Only one major mode may be in effect at any time. */struct majmode { char *mjm_name; /* Simple for now */};EXT struct majmode *fun_mode; /* Fundamental mode - the default */EXT struct majmode *cur_mode; /* Current major mode *//* Minor modes are currently implemented by means of flag variables * which have global effects (regardless of buffer or major mode). * Each variable has the name "x_mode" where x is the name of the minor * mode. These are declared in the modules containing their support code. * In the future this may be generalized along the lines of major modes. *//* Miscellaneous debug stuff */EXT int dbgval; /* Set nonzero to do verify stuff */EXT int dbg_isw; /* Set to enable interrupts if possible */#if IMAGENEXT int dbg_redp; /* Set to debug redisplay algorithms */#endif /*IMAGEN*/extern int errno;/* V7 routines for setexit/reset emulation */#if !(V6)#include <setjmp.h>EXT jmp_buf env_main;#define setexit(a) setjmp(env_main)#define reset(a) longjmp(env_main,a)#endif /*-V6*//* Declare functions returning CHROFF values (offsets into a buffer) */extern chroff e_dot(),e_nldot(),e_pldot(),e_boldot(),e_eoldot(), e_alldot(),ex_boldot(),ex_alldot(), ex_blen(),e_blen(),ex_dot(),e_wdot();extern SBSTR *e_copyn();/* Some other commonly needed declarations */extern char *memalloc(), *ask(), *dottoa(), *strdup();#if !(V6)extern char *getenv();#endif /*-V6*/#include "eeproto.h" /* function prototypes */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -