+++ /dev/null
-/* $OpenBSD: def.h,v 1.124 2012/06/14 17:21:22 lum Exp $ */
-
-/* This file is in the public domain. */
-
-/*
- * This file is the general header file for all parts
- * of the Mg display editor. It contains all of the
- * general definitions and macros. It also contains some
- * conditional compilation flags. All of the per-system and
- * per-terminal definitions are in special header files.
- */
-
-#include "sysdef.h" /* Order is critical. */
-#include "ttydef.h"
-#include "chrdef.h"
-
-typedef int (*PF)(int, int); /* generally useful type */
-
-/*
- * Table sizes, etc.
- */
-#define NFILEN 1024 /* Length, file name. */
-#define NBUFN NFILEN /* Length, buffer name. */
-#define NLINE 256 /* Length, line. */
-#define PBMODES 4 /* modes per buffer */
-#define NKBDM 256 /* Length, keyboard macro. */
-#define NPAT 80 /* Length, pattern. */
-#define HUGE 1000 /* A rather large number. */
-#define NSRCH 128 /* Undoable search commands. */
-#define NXNAME 64 /* Length, extended command. */
-#define NKNAME 20 /* Length, key names. */
-#define NTIME 50 /* Length, timestamp string. */
-/*
- * Universal.
- */
-#define FALSE 0 /* False, no, bad, etc. */
-#define TRUE 1 /* True, yes, good, etc. */
-#define ABORT 2 /* Death, ^G, abort, etc. */
-
-#define KCLEAR 2 /* clear echo area */
-
-/*
- * These flag bits keep track of
- * some aspects of the last command. The CFCPCN
- * flag controls goal column setting. The CFKILL
- * flag controls the clearing versus appending
- * of data in the kill buffer.
- */
-#define CFCPCN 0x0001 /* Last command was C-P, C-N */
-#define CFKILL 0x0002 /* Last command was a kill */
-#define CFINS 0x0004 /* Last command was self-insert */
-
-/*
- * File I/O.
- */
-#define FIOSUC 0 /* Success. */
-#define FIOFNF 1 /* File not found. */
-#define FIOEOF 2 /* End of file. */
-#define FIOERR 3 /* Error. */
-#define FIOLONG 4 /* long line partially read */
-#define FIODIR 5 /* File is a directory */
-
-/*
- * Directory I/O.
- */
-#define DIOSUC 0 /* Success. */
-#define DIOEOF 1 /* End of file. */
-#define DIOERR 2 /* Error. */
-
-/*
- * Display colors.
- */
-#define CNONE 0 /* Unknown color. */
-#define CTEXT 1 /* Text color. */
-#define CMODE 2 /* Mode line color. */
-
-/*
- * Flags for keyboard invoked functions.
- */
-#define FFUNIV 1 /* universal argument */
-#define FFNEGARG 2 /* negative only argument */
-#define FFOTHARG 4 /* other argument */
-#define FFARG 7 /* any argument */
-#define FFRAND 8 /* Called by other function */
-
-/*
- * Flags for "eread".
- */
-#define EFFUNC 0x0001 /* Autocomplete functions. */
-#define EFBUF 0x0002 /* Autocomplete buffers. */
-#define EFFILE 0x0004 /* " files (maybe someday) */
-#define EFAUTO 0x0007 /* Some autocompletion on */
-#define EFNEW 0x0008 /* New prompt. */
-#define EFCR 0x0010 /* Echo CR at end; last read. */
-#define EFDEF 0x0020 /* buffer contains default args */
-#define EFNUL 0x0040 /* Null Minibuffer OK */
-
-/*
- * Direction of insert into kill ring
- */
-#define KNONE 0x00
-#define KFORW 0x01 /* forward insert into kill ring */
-#define KBACK 0x02 /* Backwards insert into kill ring */
-#define KREG 0x04 /* This is a region-based kill */
-
-#define MAX_TOKEN 64
-
-/*
- * This structure holds the starting position
- * (as a line/offset pair) and the number of characters in a
- * region of a buffer. This makes passing the specification
- * of a region around a little bit easier.
- */
-struct region {
- struct line *r_linep; /* Origin line address. */
- int r_offset; /* Origin line offset. */
- int r_lineno; /* Origin line number */
- RSIZE r_size; /* Length in characters. */
-};
-
-
-/*
- * 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" structure. Each line contains 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.
- */
-struct line {
- struct line *l_fp; /* Link to the next line */
- struct line *l_bp; /* Link to the previous line */
- int l_size; /* Allocated size */
- int l_used; /* Used size */
- char *l_text; /* Content of the line */
-};
-
-/*
- * The rationale behind these macros is that you
- * could (with some editing, like changing the type of a line
- * link from a "struct line *" to a "REFLINE", and fixing the commands
- * like file reading that break the rules) change the actual
- * storage representation of lines to use something fancy on
- * machines with small address spaces.
- */
-#define lforw(lp) ((lp)->l_fp)
-#define lback(lp) ((lp)->l_bp)
-#define lgetc(lp, n) (CHARMASK((lp)->l_text[(n)]))
-#define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
-#define llength(lp) ((lp)->l_used)
-#define ltext(lp) ((lp)->l_text)
-
-/*
- * All repeated structures are kept as linked lists of structures.
- * All of these start with a LIST structure (except lines, which
- * have their own abstraction). This will allow for
- * later conversion to generic list manipulation routines should
- * I decide to do that. It does mean that there are four extra
- * bytes per window. I feel that this is an acceptable price,
- * considering that there are usually only one or two windows.
- */
-struct list {
- union {
- struct mgwin *l_wp;
- struct buffer *x_bp; /* l_bp is used by struct line */
- struct list *l_nxt;
- } l_p;
- char *l_name;
-};
-
-/*
- * Usual hack - to keep from uglifying the code with lotsa
- * references through the union, we #define something for it.
- */
-#define l_next l_p.l_nxt
-
-/*
- * 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.
- */
-struct mgwin {
- struct list w_list; /* List header */
- struct buffer *w_bufp; /* Buffer displayed in window */
- struct line *w_linep; /* Top line in the window */
- struct line *w_dotp; /* Line containing "." */
- struct line *w_markp; /* Line containing "mark" */
- int w_doto; /* Byte offset for "." */
- int w_marko; /* Byte offset for "mark" */
- int w_toprow; /* Origin 0 top row of window */
- int w_ntrows; /* # of rows of text in window */
- int w_frame; /* #lines to reframe by. */
- char w_rflag; /* Redisplay Flags. */
- char w_flag; /* Flags. */
- struct line *w_wrapline;
- int w_dotline; /* current line number of dot */
- int w_markline; /* current line number of mark */
-};
-#define w_wndp w_list.l_p.l_wp
-#define w_name w_list.l_name
-
-/*
- * Window redisplay flags are set by command processors to
- * tell the display system what has happened to the buffer
- * mapped by the window. Setting "WFFULL" is always a safe thing
- * to do, but it may do more work than is necessary. Always try
- * to set the simplest action that achieves the required update.
- * Because commands set bits in the "w_flag", update will see
- * all change flags, and do the most general one.
- */
-#define WFFRAME 0x01 /* Force reframe. */
-#define WFMOVE 0x02 /* Movement from line to line. */
-#define WFEDIT 0x04 /* Editing within a line. */
-#define WFFULL 0x08 /* Do a full display. */
-#define WFMODE 0x10 /* Update mode line. */
-
-/*
- * Window flags
- */
-#define WNONE 0x00 /* No special window options. */
-#define WEPHEM 0x01 /* Window is ephemeral. */
-
-struct undo_rec;
-TAILQ_HEAD(undoq, undo_rec);
-
-/*
- * 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_headp".
- */
-struct buffer {
- struct list b_list; /* buffer list pointer */
- struct buffer *b_altb; /* Link to alternate buffer */
- struct line *b_dotp; /* Link to "." line structure */
- struct line *b_markp; /* ditto for mark */
- struct line *b_headp; /* Link to the header line */
- struct maps_s *b_modes[PBMODES]; /* buffer modes */
- int b_doto; /* Offset of "." in above line */
- int b_marko; /* ditto for the "mark" */
- short b_nmodes; /* number of non-fundamental modes */
- char b_nwnd; /* Count of windows on buffer */
- char b_flag; /* Flags */
- char b_fname[NFILEN]; /* File name */
- char b_cwd[NFILEN]; /* working directory */
- struct fileinfo b_fi; /* File attributes */
- struct undoq b_undo; /* Undo actions list */
- int b_undopos; /* Where we were during last undo */
- struct undo_rec *b_undoptr;
- int b_dotline; /* Line number of dot */
- int b_markline; /* Line number of mark */
- int b_lines; /* Number of lines in file */
-};
-#define b_bufp b_list.l_p.x_bp
-#define b_bname b_list.l_name
-
-/* Some helper macros, in case they ever change to functions */
-#define bfirstlp(buf) (lforw((buf)->b_headp))
-#define blastlp(buf) (lback((buf)->b_headp))
-
-#define BFCHG 0x01 /* Changed. */
-#define BFBAK 0x02 /* Need to make a backup. */
-#ifdef NOTAB
-#define BFNOTAB 0x04 /* no tab mode */
-#endif
-#define BFOVERWRITE 0x08 /* overwrite mode */
-#define BFREADONLY 0x10 /* read only mode */
-#define BFDIRTY 0x20 /* Buffer was modified elsewhere */
-#define BFIGNDIRTY 0x40 /* Ignore modifications */
-/*
- * This structure holds information about recent actions for the Undo command.
- */
-struct undo_rec {
- TAILQ_ENTRY(undo_rec) next;
- enum {
- INSERT = 1,
- DELETE,
- BOUNDARY,
- MODIFIED,
- DELREG
- } type;
- struct region region;
- int pos;
- char *content;
-};
-
-/*
- * Prototypes.
- */
-
-/* tty.c X */
-void ttinit(void);
-void ttreinit(void);
-void tttidy(void);
-void ttmove(int, int);
-void tteeol(void);
-void tteeop(void);
-void ttbeep(void);
-void ttinsl(int, int, int);
-void ttdell(int, int, int);
-void ttwindow(int, int);
-void ttnowindow(void);
-void ttcolor(int);
-void ttresize(void);
-
-volatile sig_atomic_t winch_flag;
-
-/* ttyio.c */
-void ttopen(void);
-int ttraw(void);
-void ttclose(void);
-int ttcooked(void);
-int ttputc(int);
-void ttflush(void);
-int ttgetc(void);
-int ttwait(int);
-int charswaiting(void);
-
-/* dir.c */
-void dirinit(void);
-int changedir(int, int);
-int showcwdir(int, int);
-int getcwdir(char *, size_t);
-
-/* dired.c */
-struct buffer *dired_(char *);
-
-/* file.c X */
-int fileinsert(int, int);
-int filevisit(int, int);
-int filevisitalt(int, int);
-int filevisitro(int, int);
-int poptofile(int, int);
-struct buffer *findbuffer(char *);
-int readin(char *);
-int insertfile(char *, char *, int);
-int filewrite(int, int);
-int filesave(int, int);
-int buffsave(struct buffer *);
-int makebkfile(int, int);
-int writeout(FILE **, struct buffer *, char *);
-void upmodes(struct buffer *);
-size_t xbasename(char *, const char *, size_t);
-
-/* line.c X */
-struct line *lalloc(int);
-int lrealloc(struct line *, int);
-void lfree(struct line *);
-void lchange(int);
-int linsert_str(const char *, int);
-int linsert(int, int);
-int lnewline_at(struct line *, int);
-int lnewline(void);
-int ldelete(RSIZE, int);
-int ldelnewline(void);
-int lreplace(RSIZE, char *);
-char * linetostr(const struct line *);
-
-/* yank.c X */
-
-void kdelete(void);
-int kinsert(int, int);
-int kremove(int);
-int kchunk(char *, RSIZE, int);
-int killline(int, int);
-int yank(int, int);
-
-/* window.c X */
-struct mgwin *new_window(struct buffer *);
-void free_window(struct mgwin *);
-int reposition(int, int);
-int redraw(int, int);
-int do_redraw(int, int, int);
-int nextwind(int, int);
-int prevwind(int, int);
-int onlywind(int, int);
-int splitwind(int, int);
-int enlargewind(int, int);
-int shrinkwind(int, int);
-int delwind(int, int);
-
-/* buffer.c */
-int togglereadonly(int, int);
-struct buffer *bfind(const char *, int);
-int poptobuffer(int, int);
-int killbuffer(struct buffer *);
-int killbuffer_cmd(int, int);
-int savebuffers(int, int);
-int listbuffers(int, int);
-int addlinef(struct buffer *, char *, ...);
-#define addline(bp, text) addlinef(bp, "%s", text)
-int anycb(int);
-int bclear(struct buffer *);
-int showbuffer(struct buffer *, struct mgwin *, int);
-int augbname(char *, const char *, size_t);
-struct mgwin *popbuf(struct buffer *, int);
-int bufferinsert(int, int);
-int usebuffer(int, int);
-int notmodified(int, int);
-int popbuftop(struct buffer *, int);
-int getbufcwd(char *, size_t);
-int checkdirty(struct buffer *);
-
-/* display.c */
-int vtresize(int, int, int);
-void vtinit(void);
-void vttidy(void);
-void update(void);
-int linenotoggle(int, int);
-
-/* echo.c X */
-void eerase(void);
-int eyorn(const char *);
-int eyesno(const char *);
-void ewprintf(const char *fmt, ...);
-char *ereply(const char *, char *, size_t, ...);
-char *eread(const char *, char *, size_t, int, ...);
-int getxtra(struct list *, struct list *, int, int);
-void free_file_list(struct list *);
-
-/* fileio.c */
-int ffropen(FILE **, const char *, struct buffer *);
-void ffstat(FILE *, struct buffer *);
-int ffwopen(FILE **, const char *, struct buffer *);
-int ffclose(FILE *, struct buffer *);
-int ffputbuf(FILE *, struct buffer *);
-int ffgetline(FILE *, char *, int, int *);
-int fbackupfile(const char *);
-char *adjustname(const char *, int);
-char *startupfile(char *);
-int copy(char *, char *);
-struct list *make_file_list(char *);
-int fisdir(const char *);
-int fchecktime(struct buffer *);
-int fupdstat(struct buffer *);
-int backuptohomedir(int, int);
-int toggleleavetmp(int, int);
-
-/* kbd.c X */
-int do_meta(int, int);
-int bsmap(int, int);
-void ungetkey(int);
-int getkey(int);
-int doin(void);
-int rescan(int, int);
-int universal_argument(int, int);
-int digit_argument(int, int);
-int negative_argument(int, int);
-int selfinsert(int, int);
-int quote(int, int);
-
-/* main.c */
-int ctrlg(int, int);
-int quit(int, int);
-
-/* ttyio.c */
-void panic(char *);
-
-/* cinfo.c */
-char *getkeyname(char *, size_t, int);
-
-/* basic.c */
-int gotobol(int, int);
-int backchar(int, int);
-int gotoeol(int, int);
-int forwchar(int, int);
-int gotobob(int, int);
-int gotoeob(int, int);
-int forwline(int, int);
-int backline(int, int);
-void setgoal(void);
-int getgoal(struct line *);
-int forwpage(int, int);
-int backpage(int, int);
-int forw1page(int, int);
-int back1page(int, int);
-int pagenext(int, int);
-void isetmark(void);
-int setmark(int, int);
-int clearmark(int, int);
-int swapmark(int, int);
-int gotoline(int, int);
-
-/* random.c X */
-int showcpos(int, int);
-int getcolpos(void);
-int twiddle(int, int);
-int openline(int, int);
-int newline(int, int);
-int deblank(int, int);
-int justone(int, int);
-int delwhite(int, int);
-int delleadwhite(int, int);
-int deltrailwhite(int, int);
-int lfindent(int, int);
-int indent(int, int);
-int forwdel(int, int);
-int backdel(int, int);
-int space_to_tabstop(int, int);
-int backtoindent(int, int);
-int joinline(int, int);
-
-/* tags.c X */
-int findtag(int, int);
-int poptag(int, int);
-int tagsvisit(int, int);
-int curtoken(int, int, char *);
-
-/* cscope.c */
-int cssymbol(int, int);
-int csdefinition(int, int);
-int csfuncalled(int, int);
-int cscallerfuncs(int, int);
-int csfindtext(int, int);
-int csegrep(int, int);
-int csfindfile(int, int);
-int csfindinc(int, int);
-int csnextfile(int, int);
-int csnextmatch(int, int);
-int csprevfile(int, int);
-int csprevmatch(int, int);
-int cscreatelist(int, int);
-
-/* extend.c X */
-int insert(int, int);
-int bindtokey(int, int);
-int localbind(int, int);
-int redefine_key(int, int);
-int unbindtokey(int, int);
-int localunbind(int, int);
-int extend(int, int);
-int evalexpr(int, int);
-int evalbuffer(int, int);
-int evalfile(int, int);
-int load(const char *);
-int excline(char *);
-
-/* help.c X */
-int desckey(int, int);
-int wallchart(int, int);
-int help_help(int, int);
-int apropos_command(int, int);
-
-/* paragraph.c X */
-int gotobop(int, int);
-int gotoeop(int, int);
-int fillpara(int, int);
-int killpara(int, int);
-int fillword(int, int);
-int setfillcol(int, int);
-
-/* word.c X */
-int backword(int, int);
-int forwword(int, int);
-int upperword(int, int);
-int lowerword(int, int);
-int capword(int, int);
-int delfword(int, int);
-int delbword(int, int);
-int inword(void);
-
-/* region.c X */
-int killregion(int, int);
-int copyregion(int, int);
-int lowerregion(int, int);
-int upperregion(int, int);
-int prefixregion(int, int);
-int setprefix(int, int);
-int region_get_data(struct region *, char *, int);
-void region_put_data(const char *, int);
-int markbuffer(int, int);
-int piperegion(int, int);
-
-/* search.c X */
-int forwsearch(int, int);
-int backsearch(int, int);
-int searchagain(int, int);
-int forwisearch(int, int);
-int backisearch(int, int);
-int queryrepl(int, int);
-int forwsrch(void);
-int backsrch(void);
-int readpattern(char *);
-
-/* spawn.c X */
-int spawncli(int, int);
-
-/* ttykbd.c X */
-void ttykeymapinit(void);
-void ttykeymaptidy(void);
-
-/* match.c X */
-int showmatch(int, int);
-
-/* version.c X */
-int showversion(int, int);
-
-/* macro.c X */
-int definemacro(int, int);
-int finishmacro(int, int);
-int executemacro(int, int);
-
-/* modes.c X */
-int indentmode(int, int);
-int fillmode(int, int);
-int blinkparen(int, int);
-#ifdef NOTAB
-int notabmode(int, int);
-#endif /* NOTAB */
-int overwrite_mode(int, int);
-int set_default_mode(int,int);
-
-#ifdef REGEX
-/* re_search.c X */
-int re_forwsearch(int, int);
-int re_backsearch(int, int);
-int re_searchagain(int, int);
-int re_queryrepl(int, int);
-int replstr(int, int);
-int setcasefold(int, int);
-int delmatchlines(int, int);
-int delnonmatchlines(int, int);
-int cntmatchlines(int, int);
-int cntnonmatchlines(int, int);
-#endif /* REGEX */
-
-/* undo.c X */
-void free_undo_record(struct undo_rec *);
-int undo_dump(int, int);
-int undo_enabled(void);
-int undo_enable(int, int);
-int undo_add_boundary(int, int);
-void undo_add_modified(void);
-int undo_add_insert(struct line *, int, int);
-int undo_add_delete(struct line *, int, int, int);
-int undo_boundary_enable(int, int);
-int undo_add_change(struct line *, int, int);
-int undo(int, int);
-
-/* autoexec.c X */
-int auto_execute(int, int);
-PF *find_autoexec(const char *);
-int add_autoexec(const char *, const char *);
-
-/* cmode.c X */
-int cmode(int, int);
-int cc_brace(int, int);
-int cc_char(int, int);
-int cc_tab(int, int);
-int cc_indent(int, int);
-int cc_lfindent(int, int);
-
-/* grep.c X */
-int next_error(int, int);
-int globalwdtoggle(int, int);
-int compile(int, int);
-
-/*
- * Externals.
- */
-extern struct buffer *bheadp;
-extern struct buffer *curbp;
-extern struct mgwin *curwp;
-extern struct mgwin *wheadp;
-extern int thisflag;
-extern int lastflag;
-extern int curgoal;
-extern int startrow;
-extern int epresf;
-extern int sgarbf;
-extern int mode;
-extern int nrow;
-extern int ncol;
-extern int ttrow;
-extern int ttcol;
-extern int tttop;
-extern int ttbot;
-extern int tthue;
-extern int defb_nmodes;
-extern int defb_flag;
-extern char cinfo[];
-extern char *keystrings[];
-extern char pat[NPAT];
-#ifndef NO_DPROMPT
-extern char prompt[];
-#endif /* !NO_DPROMPT */
-
-/*
- * Globals.
- */
-int tceeol;
-int tcinsl;
-int tcdell;
-int rptcount; /* successive invocation count */