X-Git-Url: https://pd.if.org/git/?p=pd_readline;a=blobdiff_plain;f=mg%2Fdef.h;fp=mg%2Fdef.h;h=0000000000000000000000000000000000000000;hp=1284e9438782bc5133d8e249aad9ad75b93f191b;hb=4bb27266f935c9aafad6870ffc8847fc65c8120f;hpb=3f771e17236364ded86e96ee64f99344337991f8 diff --git a/mg/def.h b/mg/def.h deleted file mode 100644 index 1284e94..0000000 --- a/mg/def.h +++ /dev/null @@ -1,707 +0,0 @@ -/* $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 */