Annotation of coherent/g/usr/bin/vi/vi.h, revision 1.1.1.1

1.1       root        1: /* vi.h */
                      2: 
                      3: /* Author:
                      4:  *     Steve Kirkendall
                      5:  *     14407 SW Teal Blvd. #C
                      6:  *     Beaverton, OR 97005
                      7:  *     [email protected]
                      8:  */
                      9: 
                     10: #define VERSION "ELVIS 1.6, by Steve Kirkendall (27 April 1992)"
                     11: #define COPYING        "This version of ELVIS is freely redistributable."
                     12: 
                     13: #include <errno.h>
                     14: extern int errno;
                     15: #if TOS
                     16: # ifndef __GNUC__
                     17: #  define ENOENT (-AEFILNF)
                     18: # endif
                     19: #endif
                     20: 
                     21: #if TOS || VMS
                     22: # include <types.h>
                     23: # define O_RDONLY      0
                     24: # define O_WRONLY      1
                     25: # define O_RDWR                2
                     26: # ifdef __GNUC__
                     27: #  define S_IJDIR      S_IFDIR
                     28: # endif
                     29: #else
                     30: # if OSK
                     31: #  include <modes.h>
                     32: #  define O_RDONLY     S_IREAD
                     33: #  define O_WRONLY     S_IWRITE
                     34: #  define O_RDWR       (S_IREAD | S_IWRITE)
                     35: #  define ENOENT       E_PNNF
                     36: #  define sprintf      Sprintf
                     37: # else
                     38: #  if !AMIGA
                     39: #   include <sys/types.h>
                     40: #  endif
                     41: #  include <fcntl.h>
                     42: # endif
                     43: #endif
                     44: 
                     45: #ifndef O_BINARY
                     46: # define O_BINARY      0
                     47: #endif
                     48: 
                     49: #include "curses.h"
                     50: 
                     51: #include <signal.h>
                     52: #ifdef __STDC__
                     53: # include <stdio.h>    /* for [v]sprintf prototype             */
                     54: # include <string.h>   /* for str* prototypes                  */
                     55: # include <stdlib.h>   /* for atoi, system, malloc, free       */
                     56: # include <stdarg.h>   /* for vararg definitions               */
                     57: # if ANY_UNIX
                     58: #  include <unistd.h>  /* for read, write, ... prototypes      */
                     59: # include <sys/wait.h> /* for wait prototype                   */
                     60: # endif
                     61: #endif
                     62: 
                     63: /*------------------------------------------------------------------------*/
                     64: /* Miscellaneous constants.                                              */
                     65: 
                     66: #define INFINITY       2000000001L     /* a very large integer */
                     67: #define LONGKEY                10              /* longest possible raw :map key */
                     68: #ifndef MAXRCLEN
                     69: # define MAXRCLEN      1000            /* longest possible :@ command */
                     70: #endif
                     71: 
                     72: /*------------------------------------------------------------------------*/
                     73: /* These describe how temporary files are divided into blocks             */
                     74: 
                     75: #define MAXBLKS        (BLKSIZE / sizeof(unsigned short))
                     76: typedef union
                     77: {
                     78:        char            c[BLKSIZE];     /* for text blocks */
                     79:        unsigned short  n[MAXBLKS];     /* for the header block */
                     80: }
                     81:        BLK;
                     82: 
                     83: /*------------------------------------------------------------------------*/
                     84: /* These are used manipulate BLK buffers.                                 */
                     85: 
                     86: extern BLK     hdr;            /* buffer for the header block */
                     87: extern BLK *blkget P_((int));  /* given index into hdr.c[], reads block */
                     88: extern BLK *blkadd P_((int));  /* inserts a new block into hdr.c[] */
                     89: 
                     90: /*------------------------------------------------------------------------*/
                     91: /* These are used to keep track of various flags                          */
                     92: extern struct _viflags
                     93: {
                     94:        short   file;           /* file flags */
                     95: }
                     96:        viflags;
                     97: 
                     98: /* file flags */
                     99: #define NEWFILE                0x0001  /* the file was just created */
                    100: #define READONLY       0x0002  /* the file is read-only */
                    101: #define HADNUL         0x0004  /* the file contained NUL characters */
                    102: #define MODIFIED       0x0008  /* the file has been modified, but not saved */
                    103: #define NOFILE         0x0010  /* no name is known for the current text */
                    104: #define ADDEDNL                0x0020  /* newlines were added to the file */
                    105: #define HADBS          0x0040  /* backspace chars were lost from the file */
                    106: #define UNDOABLE       0x0080  /* file has been modified */
                    107: #define NOTEDITED      0x0100  /* the :file command has been used */
                    108: 
                    109: /* macros used to set/clear/test flags */
                    110: #define setflag(x,y)   viflags.x |= y
                    111: #define clrflag(x,y)   viflags.x &= ~y
                    112: #define tstflag(x,y)   (viflags.x & y)
                    113: #define initflags()    viflags.file = 0;
                    114: 
                    115: /* The options */
                    116: extern char    o_autoindent[1];
                    117: extern char    o_autoprint[1];
                    118: extern char    o_autotab[1];
                    119: extern char    o_autowrite[1];
                    120: extern char    o_columns[3];
                    121: extern char    o_directory[30];
                    122: extern char    o_edcompatible[1];
                    123: extern char    o_equalprg[80];
                    124: extern char    o_errorbells[1];
                    125: extern char    o_exrefresh[1];
                    126: extern char    o_ignorecase[1];
                    127: extern char    o_keytime[3];
                    128: extern char    o_keywordprg[80];
                    129: extern char    o_lines[3];
                    130: extern char    o_list[1];
                    131: extern char    o_number[1];
                    132: extern char    o_readonly[1];
                    133: extern char    o_remap[1];
                    134: extern char    o_report[3];
                    135: extern char    o_scroll[3];
                    136: extern char    o_shell[60];
                    137: extern char    o_shiftwidth[3];
                    138: extern char    o_sidescroll[3];
                    139: extern char    o_sync[1];
                    140: extern char    o_tabstop[3];
                    141: extern char    o_term[30];
                    142: extern char    o_flash[1];
                    143: extern char    o_warn[1];
                    144: extern char    o_wrapscan[1];
                    145: 
                    146: #ifndef CRUNCH
                    147: extern char    o_beautify[1];
                    148: extern char    o_exrc[1];
                    149: extern char    o_mesg[1];
                    150: extern char    o_more[1];
                    151: extern char    o_nearscroll[3];
                    152: extern char    o_novice[1];
                    153: extern char    o_prompt[1];
                    154: extern char    o_taglength[3];
                    155: extern char    o_terse[1];
                    156: extern char    o_window[3];
                    157: extern char    o_wrapmargin[3];
                    158: extern char    o_writeany[1];
                    159: #endif
                    160: 
                    161: #ifndef NO_ERRLIST
                    162: extern char    o_cc[30];
                    163: extern char    o_make[30];
                    164: #endif
                    165: 
                    166: #ifndef NO_CHARATTR
                    167: extern char    o_charattr[1];
                    168: #endif
                    169: 
                    170: #ifndef NO_DIGRAPH
                    171: extern char    o_digraph[1];
                    172: extern char    o_flipcase[80];
                    173: #endif
                    174: 
                    175: #ifndef NO_SENTENCE
                    176: extern char    o_hideformat[1];
                    177: #endif
                    178: 
                    179: #ifndef NO_EXTENSIONS
                    180: extern char    o_inputmode[1];
                    181: extern char    o_ruler[1];
                    182: #endif
                    183: 
                    184: #ifndef NO_MAGIC
                    185: extern char    o_magic[1];
                    186: #endif
                    187: 
                    188: #ifndef NO_MODELINES
                    189: extern char    o_modelines[1];
                    190: #endif
                    191: 
                    192: #ifndef NO_SENTENCE
                    193: extern char    o_paragraphs[30];
                    194: extern char    o_sections[30];
                    195: #endif
                    196: 
                    197: #if MSDOS
                    198: extern char    o_pcbios[1];
                    199: #endif
                    200: 
                    201: #ifndef NO_SHOWMATCH
                    202: extern char    o_showmatch[1];
                    203: #endif
                    204: 
                    205: #ifndef        NO_SHOWMODE
                    206: extern char    o_smd[1];
                    207: #endif
                    208: 
                    209: /*------------------------------------------------------------------------*/
                    210: /* These help support the single-line multi-change "undo" -- shift-U      */
                    211: 
                    212: extern char    U_text[BLKSIZE];
                    213: extern long    U_line;
                    214: 
                    215: /*------------------------------------------------------------------------*/
                    216: /* These are used to refer to places in the text                         */
                    217: 
                    218: typedef long   MARK;
                    219: #define markline(x)    (long)((x) / BLKSIZE)
                    220: #define markidx(x)     (int)((x) & (BLKSIZE - 1))
                    221: #define MARK_UNSET     ((MARK)0)
                    222: #define MARK_FIRST     ((MARK)BLKSIZE)
                    223: #define MARK_LAST      ((MARK)(nlines * BLKSIZE))
                    224: #define MARK_EOF       ((MARK)((nlines + 1) * BLKSIZE))
                    225: #define MARK_AT_LINE(x)        ((MARK)(x) * BLKSIZE)
                    226: 
                    227: #define NMARKS 29
                    228: extern MARK    mark[NMARKS];   /* marks a-z, plus mark ' and two temps */
                    229: extern MARK    cursor;         /* mark where line is */
                    230: 
                    231: /*------------------------------------------------------------------------*/
                    232: /* These are used to keep track of the current & previous files.         */
                    233: 
                    234: extern long    origtime;       /* modification date&time of the current file */
                    235: extern char    origname[256];  /* name of the current file */
                    236: extern char    prevorig[256];  /* name of the preceding file */
                    237: extern long    prevline;       /* line number from preceding file */
                    238: 
                    239: /*------------------------------------------------------------------------*/
                    240: /* misc housekeeping variables & functions                               */
                    241: 
                    242: extern int     tmpfd;                          /* fd used to access the tmp file */
                    243: extern int     tmpnum;                         /* counter used to generate unique filenames */
                    244: extern long    lnum[MAXBLKS];                  /* last line# of each block */
                    245: extern long    nlines;                         /* number of lines in the file */
                    246: extern char    args[BLKSIZE];                  /* file names given on the command line */
                    247: extern int     argno;                          /* the current element of args[] */
                    248: extern int     nargs;                          /* number of filenames in args */
                    249: extern long    changes;                        /* counts changes, to prohibit short-cuts */
                    250: extern int     significant;                    /* boolean: was a *REAL* change made? */
                    251: extern int     exitcode;                       /* 0=not updated, 1=overwritten, else error */
                    252: extern BLK     tmpblk;                         /* a block used to accumulate changes */
                    253: extern long    topline;                        /* file line number of top line */
                    254: extern int     leftcol;                        /* column number of left col */
                    255: #define                botline  (topline + LINES - 2)
                    256: #define                rightcol (leftcol + COLS - (*o_number ? 9 : 1))
                    257: extern int     physcol;                        /* physical column number that cursor is on */
                    258: extern int     physrow;                        /* physical row number that cursor is on */
                    259: extern int     exwrote;                        /* used to detect verbose ex commands */
                    260: extern int     doingdot;                       /* boolean: are we doing the "." command? */
                    261: extern int     doingglobal;                    /* boolean: are doing a ":g" command? */
                    262: extern long    rptlines;                       /* number of lines affected by a command */
                    263: extern char    *rptlabel;                      /* description of how lines were affected */
                    264: extern char    *fetchline P_((long));          /* read a given line from tmp file */
                    265: extern char    *parseptrn P_((REG char *));    /* isolate a regexp in a line */
                    266: extern MARK    paste P_((MARK, int, int));     /* paste from cut buffer to a given point */
                    267: extern char    *wildcard P_((char *));         /* expand wildcards in filenames */
                    268: extern MARK    input P_((MARK, MARK, int, int));       /* inserts characters from keyboard */
                    269: extern char    *linespec P_((REG char *, MARK *));     /* finds the end of a /regexp/ string */
                    270: #define                ctrl(ch) ((ch)&037)
                    271: #ifndef NO_RECYCLE
                    272: extern long    allocate P_((void));            /* allocate a free block of the tmp file */
                    273: #endif
                    274: extern int     trapint P_((int));              /* trap handler for SIGINT */
                    275: extern int     deathtrap P_((int));            /* trap handler for deadly signals */
                    276: extern void    blkdirty P_((BLK *));           /* marks a block as being "dirty" */
                    277: extern void    blksync P_((void));             /* forces all "dirty" blocks to disk */
                    278: extern void    blkinit P_((void));             /* resets the block cache to "empty" state */
                    279: extern void    beep P_((void));                /* rings the terminal's bell */
                    280: extern void    exrefresh P_((void));           /* writes text to the screen */
                    281: #ifdef __STDC__
                    282: extern void    msg (char *, ...);              /* writes a printf-style message to the screen */
                    283: #else
                    284: extern void    msg ();                         /* writes a printf-style message to the screen */
                    285: #endif
                    286: extern void    endmsgs P_((void));             /* if "manymsgs" is set, then scroll up 1 line */
                    287: extern void    garbage P_((void));             /* reclaims any garbage blocks */
                    288: extern void    redraw P_((MARK, int));         /* updates the screen after a change */
                    289: extern void    resume_curses P_((int));        /* puts the terminal in "cbreak" mode */
                    290: extern void    beforedo P_((int));             /* saves current revision before a new change */
                    291: extern void    afterdo P_((void));             /* marks end of a beforedo() change */
                    292: extern void    abortdo P_((void));             /* like "afterdo()" followed by "undo()" */
                    293: extern int     undo P_((void));                /* restores file to previous undo() */
                    294: extern void    dumpkey P_((int, int));         /* lists key mappings to the screen */
                    295: extern void    mapkey P_((char *, char *, int, char *));       /* defines a new key mapping */
                    296: extern void    redrawrange P_((long, long, long));     /* records clues from modify.c */
                    297: extern void    cut P_((MARK, MARK));           /* saves text in a cut buffer */
                    298: extern void    delete P_((MARK, MARK));        /* deletes text */
                    299: extern void    add P_((MARK, char *));         /* adds text */
                    300: extern void    change P_((MARK, MARK, char *));/* deletes text, and then adds other text */
                    301: extern void    cutswitch P_((void));           /* updates cut buffers when we switch files */
                    302: extern void    do_digraph P_((int, char []));  /* defines or lists digraphs */
                    303: extern void    exstring P_((char *, int, int));/* execute a string as EX commands */
                    304: extern void    dumpopts P_((int));             /* display current option settings on the screen */
                    305: extern void    setopts P_((char *));           /* assign new values to options */
                    306: extern void    saveopts P_((int));             /* save current option values to a given fd */
                    307: extern void    savedigs P_((int));             /* save current non-standard digraphs to fd */
                    308: extern void    savecolor P_((int));            /* save current color settings (if any) to fd */
                    309: extern void    cutname P_((int));              /* select cut buffer for next cut/paste */
                    310: extern void    initopts P_((void));            /* initialize options */
                    311: extern void    cutend P_((void));              /* free all cut buffers & delete temp files */
                    312: extern int     storename P_((char *));         /* stamp temp file with pathname of text file */
                    313: extern int     tmpstart P_((char *));          /* load a text file into edit buffer */
                    314: extern int     tmpsave P_((char *, int));      /* write edit buffer out to text file */
                    315: extern int     tmpend P_((int));               /* call tmpsave(), and then tmpabort */
                    316: extern int     tmpabort P_((int));             /* abandon the current edit buffer */
                    317: extern void    savemaps P_((int, int));        /* write current :map or :ab commands to fd */
                    318: extern int     ansicolor P_((int, int));       /* emit ANSI color command to terminal */
                    319: extern int     filter P_((MARK, MARK, char *, int)); /* I/O though another program */
                    320: extern int     getkey P_((int));               /* return a keystroke, interpretting maps */
                    321: extern int     vgets P_((int, char *, int));   /* read a single line from keyboard */
                    322: extern int     doexrc P_((char *));            /* execute a string as a sequence of EX commands */
                    323: extern int     cb2str P_((int, char *, unsigned));/* return a string containing cut buffer's contents */
                    324: extern int     ansiquit P_((void));            /* neutralize previous ansicolor() call */
                    325: extern int     ttyread P_((char *, int, int)); /* read from keyboard with optional timeout */
                    326: extern int     tgetent P_((char *, char *));   /* start termcap */
                    327: extern int     tgetnum P_((char *));           /* get a termcap number */
                    328: extern int     tgetflag P_((char *));          /* get a termcap boolean */
                    329: extern int     getsize P_((int));              /* determine how big the screen is */
                    330: extern int     endcolor P_((void));            /* used during color output */
                    331: extern int     getabkey P_((int, char *, int));/* like getkey(), but also does abbreviations */
                    332: extern int     idx2col P_((MARK, REG char *, int)); /* returns column# of a given MARK */
                    333: extern int     cutneeds P_((BLK *));           /* returns bitmap of blocks needed to hold cutbuffer text */
                    334: extern void    execmap P_((int, char *, int)); /* replaces "raw" keys with "mapped" keys */
                    335: #ifndef CRUNCH
                    336: extern int     wset;                           /* boolean: has the "window" size been set? */
                    337: #endif
                    338: 
                    339: /*------------------------------------------------------------------------*/
                    340: /* macros that are used as control structures                             */
                    341: 
                    342: #define BeforeAfter(before, after) for((before),bavar=1;bavar;(after),bavar=0)
                    343: #define ChangeText     BeforeAfter(beforedo(FALSE),afterdo())
                    344: 
                    345: extern int     bavar;          /* used only in BeforeAfter macros */
                    346: 
                    347: /*------------------------------------------------------------------------*/
                    348: /* These are the movement commands.  Each accepts a mark for the starting */
                    349: /* location & number and returns a mark for the destination.             */
                    350: 
                    351: extern MARK    m_updnto P_((MARK, long, int));         /* k j G */
                    352: extern MARK    m_right P_((MARK, long, int, int));     /* h */
                    353: extern MARK    m_left P_((MARK, long));                /* l */
                    354: extern MARK    m_tocol P_((MARK, long, int));          /* | */
                    355: extern MARK    m_front P_((MARK, long));               /* ^ */
                    356: extern MARK    m_rear P_((MARK, long));                /* $ */
                    357: extern MARK    m_fword P_((MARK, long, int, int));     /* w */
                    358: extern MARK    m_bword P_((MARK, long, int));          /* b */
                    359: extern MARK    m_eword P_((MARK, long, int));          /* e */
                    360: extern MARK    m_paragraph P_((MARK, long, int));      /* { } [[ ]] */
                    361: extern MARK    m_match P_((MARK, long));               /* % */
                    362: #ifndef NO_SENTENCE
                    363: extern MARK    m_sentence P_((MARK, long, int));       /* ( ) */
                    364: #endif
                    365: extern MARK    m_tomark P_((MARK, long, int));         /* 'm */
                    366: #ifndef NO_EXTENSIONS
                    367: extern MARK    m_wsrch P_((char *, MARK, int));        /* ^A */
                    368: #endif
                    369: extern MARK    m_nsrch P_((MARK));                     /* n */
                    370: extern MARK    m_Nsrch P_((MARK));                     /* N */
                    371: extern MARK    m_fsrch P_((MARK, char *));             /* /regexp */
                    372: extern MARK    m_bsrch P_((MARK, char *));             /* ?regexp */
                    373: #ifndef NO_CHARSEARCH
                    374: extern MARK    m__ch P_((MARK, long, int));            /* ; , */
                    375: extern MARK    m_fch P_((MARK, long, int));            /* f */
                    376: extern MARK    m_tch P_((MARK, long, int));            /* t */
                    377: extern MARK    m_Fch P_((MARK, long, int));            /* F */
                    378: extern MARK    m_Tch P_((MARK, long, int));            /* T */
                    379: #endif
                    380: extern MARK    m_row P_((MARK, long, int));            /* H L M */
                    381: extern MARK    m_z P_((MARK, long, int));              /* z */
                    382: extern MARK    m_scroll P_((MARK, long, int));         /* ^B ^F ^E ^Y ^U ^D */
                    383: 
                    384: /* Some stuff that is used by movement functions... */
                    385: 
                    386: extern MARK    adjmove P_((MARK, REG MARK, int));      /* a helper fn, used by move fns */
                    387: 
                    388: /* This macro is used to set the default value of cnt */
                    389: #define DEFAULT(val)   if (cnt < 1) cnt = (val)
                    390: 
                    391: /* These are used to minimize calls to fetchline() */
                    392: extern int     plen;   /* length of the line */
                    393: extern long    pline;  /* line number that len refers to */
                    394: extern long    pchgs;  /* "changes" level that len refers to */
                    395: extern char    *ptext; /* text of previous line, if valid */
                    396: extern void    pfetch P_((long));
                    397: extern char    digraph P_((int, int));
                    398: 
                    399: /* This is used to build a MARK that corresponds to a specific point in the
                    400:  * line that was most recently pfetch'ed.
                    401:  */
                    402: #define buildmark(text)        (MARK)(BLKSIZE * pline + (int)((text) - ptext))
                    403: 
                    404: 
                    405: /*------------------------------------------------------------------------*/
                    406: /* These are used to handle EX commands.                                 */
                    407: 
                    408: #define  CMD_NULL      0       /* NOT A VALID COMMAND */
                    409: #define  CMD_ABBR      1       /* "define an abbreviation" */
                    410: #define  CMD_ARGS      2       /* "show me the args" */
                    411: #define  CMD_APPEND    3       /* "insert lines after this line" */
                    412: #define  CMD_AT                4       /* "execute a cut buffer's contents via EX" */
                    413: #define  CMD_BANG      5       /* "run a single shell command" */
                    414: #define  CMD_CC                6       /* "run `cc` and then do CMD_ERRLIST" */
                    415: #define  CMD_CD                7       /* "change directories" */
                    416: #define  CMD_CHANGE    8       /* "change some lines" */
                    417: #define         CMD_COLOR      9       /* "change the default colors" */
                    418: #define  CMD_COPY      10      /* "copy the selected text to a given place" */
                    419: #define  CMD_DELETE    11      /* "delete the selected text" */
                    420: #define  CMD_DIGRAPH   12      /* "add a digraph, or display them all" */
                    421: #define  CMD_EDIT      13      /* "switch to a different file" */
                    422: #define  CMD_EQUAL     14      /* "display a line number" */
                    423: #define  CMD_ERRLIST   15      /* "locate the next error in a list" */
                    424: #define  CMD_FILE      16      /* "show the file's status" */
                    425: #define  CMD_GLOBAL    17      /* "globally search & do a command" */
                    426: #define  CMD_INSERT    18      /* "insert lines before the current line" */
                    427: #define  CMD_JOIN      19      /* "join the selected line & the one after" */
                    428: #define  CMD_LIST      20      /* "print lines, making control chars visible" */
                    429: #define  CMD_MAKE      21      /* "run `make` and then do CMD_ERRLIST" */
                    430: #define  CMD_MAP       22      /* "adjust the keyboard map" */
                    431: #define  CMD_MARK      23      /* "mark this line" */
                    432: #define  CMD_MKEXRC    24      /* "make a .exrc file" */
                    433: #define  CMD_MOVE      25      /* "move the selected text to a given place" */
                    434: #define  CMD_NEXT      26      /* "switch to next file in args" */
                    435: #define  CMD_NUMBER    27      /* "print lines from the file w/ line numbers" */
                    436: #define  CMD_PRESERVE  28      /* "act as though vi crashed" */
                    437: #define  CMD_PREVIOUS  29      /* "switch to the previous file in args" */
                    438: #define  CMD_PRINT     30      /* "print the selected text" */
                    439: #define  CMD_PUT       31      /* "insert any cut lines before this line" */
                    440: #define  CMD_QUIT      32      /* "quit without writing the file" */
                    441: #define  CMD_READ      33      /* "append the given file after this line */
                    442: #define  CMD_RECOVER   34      /* "recover file after vi crashes" - USE -r FLAG */
                    443: #define  CMD_REWIND    35      /* "rewind to first file" */
                    444: #define  CMD_SET       36      /* "set a variable's value" */
                    445: #define  CMD_SHELL     37      /* "run some lines through a command" */
                    446: #define  CMD_SHIFTL    38      /* "shift lines left" */
                    447: #define  CMD_SHIFTR    39      /* "shift lines right" */
                    448: #define  CMD_SOURCE    40      /* "interpret a file's contents as ex commands" */
                    449: #define  CMD_STOP      41      /* same as CMD_SUSPEND */
                    450: #define  CMD_SUBAGAIN  42      /* "repeat the previous substitution" */
                    451: #define  CMD_SUBSTITUTE        43      /* "substitute text in this line" */
                    452: #define  CMD_SUSPEND   44      /* "suspend the vi session" */
                    453: #define  CMD_TR                45      /* "transliterate chars in the selected lines" */
                    454: #define  CMD_TAG       46      /* "go to a particular tag" */
                    455: #define  CMD_UNABBR    47      /* "remove an abbreviation definition" */
                    456: #define  CMD_UNDO      48      /* "undo the previous command" */
                    457: #define  CMD_UNMAP     49      /* "remove a key sequence map */
                    458: #define  CMD_VERSION   50      /* "describe which version this is" */
                    459: #define  CMD_VGLOBAL   51      /* "apply a cmd to lines NOT containing an RE" */
                    460: #define  CMD_VISUAL    52      /* "go into visual mode" */
                    461: #define  CMD_WQUIT     53      /* "write this file out (any case) & quit" */
                    462: #define  CMD_WRITE     54      /* "write the selected(?) text to a given file" */
                    463: #define  CMD_XIT       55      /* "write this file out (if modified) & quit" */
                    464: #define  CMD_YANK      56      /* "copy the selected text into the cut buffer" */
                    465: #ifdef DEBUG
                    466: # define CMD_DEBUG     57      /* access to internal data structures */
                    467: # define CMD_VALIDATE  58      /* check for internal consistency */
                    468: #endif
                    469: typedef int CMD;
                    470: 
                    471: extern void    ex P_((void));
                    472: extern void    vi P_((void));
                    473: extern void    doexcmd P_((char *));
                    474: 
                    475: extern void    cmd_append P_((MARK, MARK, CMD, int, char *));
                    476: extern void    cmd_args P_((MARK, MARK, CMD, int, char *));
                    477: #ifndef NO_AT
                    478:  extern void   cmd_at P_((MARK, MARK, CMD, int, char *));
                    479: #endif
                    480: extern void    cmd_cd P_((MARK, MARK, CMD, int, char *));
                    481: #ifndef NO_COLOR
                    482:  extern void   cmd_color P_((MARK, MARK, CMD, int, char *));
                    483: #endif
                    484: extern void    cmd_delete P_((MARK, MARK, CMD, int, char *));
                    485: #ifndef NO_DIGRAPH
                    486:  extern void   cmd_digraph P_((MARK, MARK, CMD, int, char *));
                    487: #endif
                    488: extern void    cmd_edit P_((MARK, MARK, CMD, int, char *));
                    489: #ifndef NO_ERRLIST
                    490:  extern void   cmd_errlist P_((MARK, MARK, CMD, int, char *));
                    491: #endif
                    492: extern void    cmd_file P_((MARK, MARK, CMD, int, char *));
                    493: extern void    cmd_global P_((MARK, MARK, CMD, int, char *));
                    494: extern void    cmd_join P_((MARK, MARK, CMD, int, char *));
                    495: extern void    cmd_mark P_((MARK, MARK, CMD, int, char *));
                    496: #ifndef NO_ERRLIST
                    497:  extern void   cmd_make P_((MARK, MARK, CMD, int, char *));
                    498: #endif
                    499: extern void    cmd_map P_((MARK, MARK, CMD, int, char *));
                    500: #ifndef NO_MKEXRC
                    501:  extern void   cmd_mkexrc P_((MARK, MARK, CMD, int, char *));
                    502: #endif
                    503: extern void    cmd_next P_((MARK, MARK, CMD, int, char *));
                    504: extern void    cmd_print P_((MARK, MARK, CMD, int, char *));
                    505: extern void    cmd_put P_((MARK, MARK, CMD, int, char *));
                    506: extern void    cmd_read P_((MARK, MARK, CMD, int, char *));
                    507: extern void    cmd_set P_((MARK, MARK, CMD, int, char *));
                    508: extern void    cmd_shell P_((MARK, MARK, CMD, int, char *));
                    509: extern void    cmd_shift P_((MARK, MARK, CMD, int, char *));
                    510: extern void    cmd_source P_((MARK, MARK, CMD, int, char *));
                    511: extern void    cmd_substitute P_((MARK, MARK, CMD, int, char *));
                    512: extern void    cmd_tag P_((MARK, MARK, CMD, int, char *));
                    513: extern void    cmd_undo P_((MARK, MARK, CMD, int, char *));
                    514: extern void    cmd_version P_((MARK, MARK, CMD, int, char *));
                    515: extern void    cmd_write P_((MARK, MARK, CMD, int, char *));
                    516: extern void    cmd_xit P_((MARK, MARK, CMD, int, char *));
                    517: extern void    cmd_move P_((MARK, MARK, CMD, int, char *));
                    518: #ifdef DEBUG
                    519:  extern void   cmd_debug P_((MARK, MARK, CMD, int, char *));
                    520:  extern void   cmd_validate P_((MARK, MARK, CMD, int, char *));
                    521: #endif
                    522: #ifdef SIGTSTP
                    523:  extern void   cmd_suspend P_((MARK, MARK, CMD, int, char *));
                    524: #endif
                    525: 
                    526: /*----------------------------------------------------------------------*/
                    527: /* These are used to handle VI commands                                */
                    528: 
                    529: extern MARK    v_1ex P_((MARK, char *));       /* : */
                    530: extern MARK    v_mark P_((MARK, long, int));   /* m */
                    531: extern MARK    v_quit P_((void));              /* Q */
                    532: extern MARK    v_redraw P_((void));            /* ^L ^R */
                    533: extern MARK    v_ulcase P_((MARK, long));      /* ~ */
                    534: extern MARK    v_undo P_((MARK));              /* u */
                    535: extern MARK    v_xchar P_((MARK, long, int));  /* x X */
                    536: extern MARK    v_replace P_((MARK, long, int));/* r */
                    537: extern MARK    v_overtype P_((MARK));          /* R */
                    538: extern MARK    v_selcut P_((MARK, long, int)); /* " */
                    539: extern MARK    v_paste P_((MARK, long, int));  /* p P */
                    540: extern MARK    v_yank P_((MARK, MARK));        /* y Y */
                    541: extern MARK    v_delete P_((MARK, MARK));      /* d D */
                    542: extern MARK    v_join P_((MARK, long));        /* J */
                    543: extern MARK    v_insert P_((MARK, long, int)); /* a A i I o O */
                    544: extern MARK    v_change P_((MARK, MARK));      /* c C */
                    545: extern MARK    v_subst P_((MARK, long));       /* s */
                    546: extern MARK    v_lshift P_((MARK, MARK));      /* < */
                    547: extern MARK    v_rshift P_((MARK, MARK));      /* > */
                    548: extern MARK    v_reformat P_((MARK, MARK));    /* = */
                    549: extern MARK    v_filter P_((MARK, MARK));      /* ! */
                    550: extern MARK    v_status P_((void));            /* ^G */
                    551: extern MARK    v_switch P_((void));            /* ^^ */
                    552: extern MARK    v_tag P_((char *, MARK, long)); /* ^] */
                    553: extern MARK    v_xit P_((MARK, long, int));    /* ZZ */
                    554: extern MARK    v_undoline P_((MARK));          /* U */
                    555: extern MARK    v_again P_((MARK, MARK));       /* & */
                    556: #ifndef NO_EXTENSIONS
                    557: extern MARK    v_keyword P_((char *, MARK, long));     /* K */
                    558: extern MARK    v_increment P_((char *, MARK, long));   /* * */
                    559: #endif
                    560: #ifndef NO_ERRLIST
                    561: extern MARK    v_errlist P_((MARK));           /* * */
                    562: #endif
                    563: #ifndef NO_AT
                    564: extern MARK    v_at P_((MARK, long, int));     /* @ */
                    565: #endif
                    566: #ifdef SIGTSTP
                    567: extern MARK    v_suspend P_((void));           /* ^Z */
                    568: #endif
                    569: #ifndef NO_POPUP
                    570: extern MARK    v_popup P_((MARK, MARK));       /* \ */
                    571: #endif
                    572: 
                    573: /*----------------------------------------------------------------------*/
                    574: /* These flags describe the quirks of the individual visual commands */
                    575: #define NO_FLAGS       0x00
                    576: #define        MVMT            0x01    /* this is a movement command */
                    577: #define PTMV           0x02    /* this can be *part* of a movement command */
                    578: #define FRNT           0x04    /* after move, go to front of line */
                    579: #define INCL           0x08    /* include last char when used with c/d/y */
                    580: #define LNMD           0x10    /* use line mode of c/d/y */
                    581: #define NCOL           0x20    /* this command can't change the column# */
                    582: #define NREL           0x40    /* this is "non-relative" -- set the '' mark */
                    583: #define SDOT           0x80    /* set the "dot" variables, for the "." cmd */
                    584: #define FINL           0x100   /* final testing, more strict! */
                    585: #define NWRP           0x200   /* no line-wrap (used for 'w' and 'W') */
                    586: #ifndef NO_VISIBLE
                    587: # define VIZ           0x400   /* commands which can be used with 'v' */
                    588: #else
                    589: # define VIZ           0
                    590: #endif
                    591: 
                    592: /* This variable is zeroed before a command executes, and later ORed with the
                    593:  * command's flags after the command has been executed.  It is used to force
                    594:  * certain flags to be TRUE for *some* invocations of a particular command.
                    595:  * For example, "/regexp/+offset" forces the LNMD flag, and sometimes a "p"
                    596:  * or "P" command will force FRNT.
                    597:  */
                    598: extern int     force_flags;
                    599: 
                    600: /*----------------------------------------------------------------------*/
                    601: /* These describe what mode we're in */
                    602: 
                    603: #define MODE_EX                1       /* executing ex commands */
                    604: #define        MODE_VI         2       /* executing vi commands */
                    605: #define        MODE_COLON      3       /* executing an ex command from vi mode */
                    606: #define        MODE_QUIT       4
                    607: extern int     mode;
                    608: 
                    609: #define WHEN_VICMD     1       /* getkey: we're reading a VI command */
                    610: #define WHEN_VIINP     2       /* getkey: we're in VI's INPUT mode */
                    611: #define WHEN_VIREP     4       /* getkey: we're in VI's REPLACE mode */
                    612: #define WHEN_EX                8       /* getkey: we're in EX mode */
                    613: #define WHEN_MSG       16      /* getkey: we're at a "more" prompt */
                    614: #define WHEN_POPUP     32      /* getkey: we're in the pop-up menu */
                    615: #define WHEN_REP1      64      /* getkey: we're getting a single char for 'r' */
                    616: #define WHEN_CUT       128     /* getkey: we're getting a cut buffer name */
                    617: #define WHEN_MARK      256     /* getkey: we're getting a mark name */
                    618: #define WHEN_CHAR      512     /* getkey: we're getting a destination for f/F/t/T */
                    619: #define WHEN_INMV      4096    /* in input mode, interpret the key in VICMD mode */
                    620: #define WHEN_FREE      8192    /* free the keymap after doing it once */
                    621: #define WHENMASK       (WHEN_VICMD|WHEN_VIINP|WHEN_VIREP|WHEN_REP1|WHEN_CUT|WHEN_MARK|WHEN_CHAR)
                    622: 
                    623: #ifndef NO_VISIBLE
                    624: extern MARK    V_from;
                    625: extern int     V_linemd;
                    626: extern MARK v_start P_((MARK m, long cnt, int cmd));
                    627: #endif
                    628: 
                    629: #ifdef DEBUG
                    630: # define malloc(size)  dbmalloc(size, __FILE__, __LINE__)
                    631: # define free(ptr)     dbfree(ptr, __FILE__, __LINE__)
                    632: # define checkmem()    dbcheckmem(__FILE__, __LINE__)
                    633: extern char    *dbmalloc P_((int, char *, int));
                    634: #else
                    635: # define checkmem()
                    636: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.