#include "chrdef.h"
typedef int (*PF)(int, int);
#define NFILEN 1024
#define NBUFN NFILEN
#define NLINE 256
#define PBMODES 4
#define NPAT 80
#define HUGE 1000
#define NSRCH 128
#define NXNAME 64
#define NKNAME 20
#define NTIME 50
#define FALSE 0
#define TRUE 1
#define ABORT 2
#define UERROR 3
#define REVERT 4
#define KCLEAR 2
#define CFCPCN 0x0001
#define CFKILL 0x0002
#define CFINS 0x0004
#define FIOSUC 0
#define FIOFNF 1
#define FIOEOF 2
#define FIOERR 3
#define FIOLONG 4
#define FIODIR 5
#define CNONE 0
#define CTEXT 1
#define CMODE 2
#define FFUNIV 1
#define FFNEGARG 2
#define FFOTHARG 4
#define FFARG 7
#define FFRAND 8
#define EFFUNC 0x0001
#define EFBUF 0x0002
#define EFFILE 0x0004
#define EFAUTO 0x0007
#define EFNEW 0x0008
#define EFCR 0x0010
#define EFDEF 0x0020
#define EFNUL 0x0040
#define KNONE 0x00
#define KFORW 0x01
#define KBACK 0x02
#define KREG 0x04
#define MAX_TOKEN 64
#define BUFSIZE 128
typedef int RSIZE;
typedef short KCHAR;
struct region {
struct line *r_linep;
int r_offset;
int r_lineno;
RSIZE r_size;
};
struct line {
struct line *l_fp;
struct line *l_bp;
int l_size;
int l_used;
char *l_text;
};
#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)
struct list {
union {
struct mgwin *l_wp;
struct buffer *x_bp;
struct list *l_nxt;
} l_p;
char *l_name;
};
#define l_next l_p.l_nxt
struct mgwin {
struct list w_list;
struct buffer *w_bufp;
struct line *w_linep;
struct line *w_dotp;
struct line *w_markp;
int w_doto;
int w_marko;
int w_toprow;
int w_ntrows;
int w_frame;
char w_rflag;
char w_flag;
struct line *w_wrapline;
int w_dotline;
int w_markline;
};
#define w_wndp w_list.l_p.l_wp
#define w_name w_list.l_name
#define WFFRAME 0x01
#define WFMOVE 0x02
#define WFEDIT 0x04
#define WFFULL 0x08
#define WFMODE 0x10
#define WNONE 0x00
#define WEPHEM 0x01
struct undo_rec;
TAILQ_HEAD(undoq, undo_rec);
struct fileinfo {
uid_t fi_uid;
gid_t fi_gid;
mode_t fi_mode;
struct timespec fi_mtime;
};
struct buffer {
struct list b_list;
struct buffer *b_altb;
struct line *b_dotp;
struct line *b_markp;
struct line *b_headp;
struct maps_s *b_modes[PBMODES];
int b_doto;
int b_marko;
short b_nmodes;
char b_nwnd;
char b_flag;
char b_fname[NFILEN];
char b_cwd[NFILEN];
char *b_nlseq;
char *b_nlchr;
int b_tabw;
struct fileinfo b_fi;
struct undoq b_undo;
struct undo_rec *b_undoptr;
int b_dotline;
int b_markline;
int b_lines;
};
#define b_bufp b_list.l_p.x_bp
#define b_bname b_list.l_name
#define bfirstlp(buf) (lforw((buf)->b_headp))
#define blastlp(buf) (lback((buf)->b_headp))
#define BFCHG 0x01
#define BFBAK 0x02
#define BFNOTAB 0x04
#define BFOVERWRITE 0x08
#define BFREADONLY 0x10
#define BFDIRTY 0x20
#define BFIGNDIRTY 0x40
#define BFDIREDDEL 0x80
struct undo_rec {
TAILQ_ENTRY(undo_rec) next;
enum {
INSERT = 1,
DELETE,
BOUNDARY,
MODIFIED,
DELREG
} type;
struct region region;
int pos;
char *content;
};
struct varentry {
SLIST_ENTRY(varentry) entry;
char v_buf[BUFSIZE];
char *v_name;
char *v_vals;
int v_count;
};
SLIST_HEAD(vhead, varentry);
#define STANDOUT_GLITCH
#define putpad(str, num) tputs(str, num, ttputc)
#define KFIRST K00
#define KLAST K00
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);
extern volatile sig_atomic_t winch_flag;
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);
void dirinit(void);
int changedir(int, int);
int showcwdir(int, int);
int getcwdir(char *, size_t);
int makedir(int, int);
int do_makedir(char *);
int ask_makedir(void);
struct buffer *dired_(char *);
int dired_jump(int, int);
int do_dired(char *);
int fileinsert(int, int);
int filevisit(int, int);
int filevisitalt(int, int);
int filevisitro(int, int);
int poptofile(int, int);
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);
int do_filevisitalt(char *);
struct line *lalloc(int);
int lrealloc(struct line *, int);
void lfree(struct line *);
void lchange(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 *);
int setcasereplace(int, int);
void kdelete(void);
int kinsert(int, int);
int kremove(int);
int kchunk(char *, RSIZE, int);
int killline(int, int);
int yank(int, int);
struct mgwin *new_window(struct buffer *);
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);
int settabw(int, int);
int togglereadonly(int, int);
int togglereadonlyall(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 *);
int revertbuffer(int, int);
int dorevert(void);
int diffbuffer(int, int);
struct buffer *findbuffer(char *);
int vtresize(int, int, int);
void vtinit(void);
void vttidy(void);
void update(int);
int linenotoggle(int, int);
int colnotoggle(int, int);
void eerase(void);
int eyorn(const char *);
int eynorr(const char *);
int eyesno(const char *);
void ewprintf(const char *fmt, ...);
char *eread(const char *, char *, size_t, int, ...)
__attribute__((__format__ (printf, 1, 5)));
int getxtra(struct list *, struct list *, int, int);
void free_file_list(struct list *);
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);
int ffgetline(FILE *, char *, int, int *);
int fbackupfile(const char *);
char *adjustname(const char *, int);
FILE *startupfile(char *, char *, char *, size_t);
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);
char *expandtilde(const char *);
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 ask_selfinsert(int, int);
int selfinsert(int, int);
int quote(int, int);
int ctrlg(int, int);
int quit(int, int);
void panic(char *);
char *getkeyname(char *, size_t, int);
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);
int setlineno(int);
int ntabstop(int, int);
int showcpos(int, int);
int getcolpos(struct mgwin *);
int twiddle(int, int);
int openline(int, int);
int enewline(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);
int findtag(int, int);
int poptag(int, int);
int tagsvisit(int, int);
int curtoken(int, int, char *);
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);
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(FILE *, const char *);
int excline(char *, int, int);
char *skipwhite(char *);
int desckey(int, int);
int wallchart(int, int);
int help_help(int, int);
int apropos_command(int, int);
int gotobop(int, int);
int gotoeop(int, int);
int fillpara(int, int);
int killpara(int, int);
int fillword(int, int);
int setfillcol(int, int);
int markpara(int, int);
int transposepara(int, int);
int sentencespace(int, int);
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);
int transposeword(int, int);
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);
int shellcommand(int, int);
int pipeio(const char * const, char * const[], char * const, int,
struct buffer *);
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 *);
int zapuptochar(int, int);
int zaptochar(int, int);
int zap(int, int);
int spawncli(int, int);
void ttykeymapinit(void);
void ttykeymaptidy(void);
int showmatch(int, int);
int showversion(int, int);
int definemacro(int, int);
int finishmacro(int, int);
int executemacro(int, int);
int indentmode(int, int);
int fillmode(int, int);
int notabmode(int, int);
int overwrite_mode(int, int);
int set_default_mode(int,int);
#ifdef REGEX
int re_forwsearch(int, int);
int re_backsearch(int, int);
int re_searchagain(int, int);
int re_queryrepl(int, int);
int re_repl(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
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);
int auto_execute(int, int);
PF *find_autoexec(const char *);
int add_autoexec(const char *, const char *);
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);
int next_error(int, int);
int globalwdtoggle(int, int);
int compile(int, int);
void bellinit(void);
int toggleaudiblebell(int, int);
int togglevisiblebell(int, int);
int dobeep_num(const char *, int);
int dobeep_msgs(const char *, const char *);
int dobeep_msg(const char *);
void dobeep(void);
int foundparen(char *, int, int);
void cleanup(void);
extern struct buffer *bheadp;
extern struct buffer *curbp;
extern struct mgwin *curwp;
extern struct mgwin *wheadp;
extern struct vhead varhead;
extern int thisflag;
extern int lastflag;
extern int curgoal;
extern int startrow;
extern int epresf;
extern int sgarbf;
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 int doaudiblebell;
extern int dovisiblebell;
extern int dblspace;
extern int allbro;
extern int batch;
extern char cinfo[];
extern char *keystrings[];
extern char pat[NPAT];
extern char prompt[];
extern int tceeol;
extern int tcinsl;
extern int tcdell;
extern int rptcount;