📄 ed.h
字号:
/*******************************************************/ /* "C" Language Integrated Production System */ /* */ /* CLIPS Version 6.21 06/15/03 */ /* */ /* EMACS HEADER FILE */ /*******************************************************//* * This file is the general header file for all parts of the MicroEMACS * display editor. It contains definitions used by everyone, and it contains * the stuff you have to edit to create a version of the editor for a * specific operating system and terminal. */#ifndef _EDITOR_HEADER_#define _EDITOR_HEADER_#include <stdio.h>#define _STDIO_INCLUDED_#include <stdlib.h>#include <string.h>#include "argacces.h"#include "constant.h"#include "constrct.h"#include "memalloc.h"#include "evaluatn.h"#include "router.h"#include "scanner.h"#include "symbol.h"#if VAX_VMS#define ANSI 1 /* Normally used for VAX VMS */#define VT52 0 /* VT52 terminal (Zenith). */#define TERMCAP 0 /* Use TERMCAP */#define IBM_PC 0 /* Standard IBM PC BIOS */#endif#if UNIX_7 || UNIX_V#define ANSI 0 /* Normally used for VAX VMS */#define VT52 0 /* VT52 terminal (Zenith). */#define TERMCAP 1 /* Use TERMCAP */#define IBM_PC 0 /* Standard IBM PC BIOS */#endif#if IBM_MSC || IBM_TBC#define ANSI 0 /* Normally used for VAX VMS */#define VT52 0 /* VT52 terminal (Zenith). */#define TERMCAP 0 /* Use TERMCAP */#define IBM_PC 1 /* Standard IBM PC BIOS */#endif#if IBM_GCC#define ANSI 0 /* Normally used for VAX VMS */#define VT52 0 /* VT52 terminal (Zenith). */#define TERMCAP 0 /* Use TERMCAP */#define IBM_PC 1 /* Standard IBM PC BIOS */#endif#define CVMVAS 1 /* C-V, M-V arg. in screens. */#define VERSION_NUM "3.0" /* Emacs editor Version number */#define NFILEN 256 /* # of bytes, file name */#define NBUFN 16 /* # of bytes, buffer name */#define NLINE 256 /* # of bytes, line */#define NKBDM 256 /* # of strokes, keyboard macro */#define NPAT 80 /* # of bytes, pattern */#define HUGE 1000 /* Huge number */#define AGRAVE 0x60 /* M- prefix, Grave (LK201) */#define METACH 0x1B /* M- prefix, Control-[, ESC */#define CTMECH 0x1C /* C-M- prefix, Control-\ */#define EXITCH 0x1D /* Exit level, Control-] */#define COTLCH 0x1E /* C- prefix, Control-^ */#define HELPCH 0x1F /* Help key, Control-_ */#define DEL_KEY 0x7F /* Del key, most keyboards */#define COTL 0x0100 /* Control flag, or'ed in */#define META 0x0200 /* Meta flag, or'ed in */#define CTLX 0x0400 /* ^X flag, or'ed in */#define ABORT 2 /* Death, ^G, abort, etc. */#define FIOSUC 0 /* File I/O, success. */#define FIOFNF 1 /* File I/O, file not found. */#define FIOEOF 2 /* File I/O, end of file. */#define FIOERR 3 /* File I/O, error. */#define CFCPCN 0x0001 /* Last command was C-P, C-N */#define CFKILL 0x0002 /* Last command was a kill *//* * There is a window structure allocated for every active display window. The * windows are kept in a big list, in top to bottom screen order, with the * listhead at "wheadp". Each window contains its own values of dot and mark. * The flag field contains some bits that are set by commands to guide * redisplay; although this is a bit of a compromise in terms of decoupling, * the full blown redisplay is just too expensive to run for every input * character. */typedef struct WINDOW { struct WINDOW *w_wndp; /* Next window */ struct BUFFER *w_bufp; /* Buffer displayed in window */ struct LINE *w_linep; /* Top line in the window */ struct LINE *w_dotp; /* Line containing "." */ short w_doto; /* Byte offset for "." */ struct LINE *w_markp; /* Line containing "mark" */ short w_marko; /* Byte offset for "mark" */ char w_toprow; /* Origin 0 top row of window */ char w_ntrows; /* # of rows of text in window */ char w_force; /* If NZ, forcing row. */ char w_flag; /* Flags. */} WINDOW;#define WFFORCE 0x01 /* Window needs forced reframe */#define WFMOVE 0x02 /* Movement from line to line */#define WFEDIT 0x04 /* Editing within a line */#define WFHARD 0x08 /* Better to a full display */#define WFMODE 0x10 /* Update mode line. *//* * Text is kept in buffers. A buffer header, described below, exists for every * buffer in the system. The buffers are kept in a big list, so that commands * that search for a buffer by name can find the buffer header. There is a * safe store for the dot and mark in the header, but this is only valid if * the buffer is not being displayed (that is, if "b_nwnd" is 0). The text for * the buffer is kept in a circularly linked list of lines, with a pointer to * the header line in "b_linep". */typedef struct BUFFER { struct BUFFER *b_bufp; /* Link to next BUFFER */ struct LINE *b_dotp; /* Link to "." LINE structure */ short b_doto; /* Offset of "." in above LINE */ struct LINE *b_markp; /* The same as the above two, */ short b_marko; /* but for the "mark" */ struct LINE *b_linep; /* Link to the header LINE */ char b_nwnd; /* Count of windows on buffer */ char b_flag; /* Flags */ char b_fname[NFILEN]; /* File name */ char b_bname[NBUFN]; /* Buffer name */} BUFFER;#define BFTEMP 0x01 /* Internal temporary buffer */#define BFCHG 0x02 /* Changed since last write *//* * The starting position of a region, and the size of the region in * characters, is kept in a region structure. Used by the region commands. */typedef struct { struct LINE *r_linep; /* Origin LINE address. */ short r_offset; /* Origin LINE offset. */ long r_size; /* Length in characters. */} REGION;/* * All text is kept in circularly linked lists of "LINE" structures. These * begin at the header line (which is the blank line beyond the end of the * buffer). This line is pointed to by the "BUFFER". Each line contains a the * number of bytes in the line (the "used" size), the size of the text array, * and the text. The end of line is not stored as a byte; it's implied. Future * additions will include update hints, and a list of marks into the line. */typedef struct LINE { struct LINE *l_fp; /* Link to the next line */ struct LINE *l_bp; /* Link to the previous line */ short l_size; /* Allocated size */ short l_used; /* Used size */ char l_text[1]; /* A bunch of characters. */} LINE;#define lforw(lp) ((lp)->l_fp)#define lback(lp) ((lp)->l_bp)#define lgetc(lp, n) ((lp)->l_text[(int) (n)]&0xFF)#define lputc(lp, n, c) ((lp)->l_text[(int) (n)]= (char) (c))#define llength(lp) ((lp)->l_used)/* * The editor communicates with the display using a high level interface. A * "TERM" structure holds useful variables, and indirect pointers to routines * that do useful operations. The low level get and put routines are here too. * This lets a terminal, in addition to having non standard commands, have * funny get and put character code too. The calls might get changed to * "termp->t_field" style in the future, to make it possible to run more than * one terminal type. */typedef struct { short t_nrow; /* Number of rows. */ short t_ncol; /* Number of columns. */ VOID (*t_open)(void); /* Open terminal at the start. */ VOID (*t_close)(void); /* Close terminal at end. */ int (*t_getchar)(void); /* Get character from keyboard. */ VOID (*t_putchar)(int); /* Put character to display. */ VOID (*t_flush)(void); /* Flush output buffers. */ VOID (*t_move)(int,int); /* Move the cursor, origin 0. */ VOID (*t_eeol)(void); /* Erase to end of line. */ VOID (*t_eeop)(void); /* Erase to end of page. */ VOID (*t_beep)(void); /* Beep. */} TERM;#if IBM_PC || IBM_GCC/* * This section defines the code returned by all the special keys on * a PC numeric Keypad. It could also be used to define the function * keys if desired. */#define UP_ARROW 256#define DOWN_ARROW 257#define RIGHT_ARROW 258#define LEFT_ARROW 259#define HOME_KEY 260#define END_KEY 261#define PGUP_KEY 262#define PGDN_KEY 263#define COTL_RIGHT_ARROW 264#define COTL_LEFT_ARROW 265#define COTL_AT_SIGN 266#endif#if IBM_PC || VAX_VMS#define BADKEY 999#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -