home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / EDITOR / NVI179B / NVI179B.ZIP / common / screen.h < prev    next >
C/C++ Source or Header  |  1996-10-23  |  8KB  |  204 lines

  1. /*-
  2.  * Copyright (c) 1992, 1993, 1994
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  * Copyright (c) 1992, 1993, 1994, 1995, 1996
  5.  *    Keith Bostic.  All rights reserved.
  6.  *
  7.  * See the LICENSE file for redistribution information.
  8.  *
  9.  *    @(#)screen.h    10.24 (Berkeley) 7/19/96
  10.  */
  11.  
  12. /*
  13.  * There are minimum values that vi has to have to display a screen.  The row
  14.  * minimum is fixed at 1 (the svi code can share a line between the text line
  15.  * and the colon command/message line).  Column calculation is a lot trickier.
  16.  * For example, you have to have enough columns to display the line number,
  17.  * not to mention guaranteeing that tabstop and shiftwidth values are smaller
  18.  * than the current column value.  It's simpler to have a fixed value and not
  19.  * worry about it.
  20.  *
  21.  * XXX
  22.  * MINIMUM_SCREEN_COLS is almost certainly wrong.
  23.  */
  24. #define    MINIMUM_SCREEN_ROWS     1
  25. #define    MINIMUM_SCREEN_COLS    20
  26.  
  27. /*
  28.  * SCR --
  29.  *    The screen structure.  To the extent possible, all screen information
  30.  *    is stored in the various private areas.  The only information here
  31.  *    is used by global routines or is shared by too many screens.
  32.  */
  33. struct _scr {
  34. /* INITIALIZED AT SCREEN CREATE. */
  35.     CIRCLEQ_ENTRY(_scr) q;        /* Screens. */
  36.  
  37.     int     id;            /* Screen id #. */
  38.     int     refcnt;        /* Reference count. */
  39.  
  40.     GS    *gp;            /* Pointer to global area. */
  41.     SCR    *nextdisp;        /* Next display screen. */
  42.     SCR    *ccl_parent;        /* Colon command-line parent screen. */
  43.     EXF    *ep;            /* Screen's current EXF structure. */
  44.  
  45.     FREF    *frp;            /* FREF being edited. */
  46.     char    **argv;            /* NULL terminated file name array. */
  47.     char    **cargv;        /* Current file name. */
  48.  
  49.     u_long     ccnt;            /* Command count. */
  50.     u_long     q_ccnt;        /* Quit or ZZ command count. */
  51.  
  52.                     /* Screen's: */
  53.     size_t     rows;            /* 1-N: number of rows. */
  54.     size_t     cols;            /* 1-N: number of columns. */
  55.     size_t     t_rows;        /* 1-N: cur number of text rows. */
  56.     size_t     t_maxrows;        /* 1-N: max number of text rows. */
  57.     size_t     t_minrows;        /* 1-N: min number of text rows. */
  58.     size_t     woff;            /* 0-N: screen offset in frame. */
  59.  
  60.                     /* Cursor's: */
  61.     recno_t     lno;            /* 1-N: file line. */
  62.     size_t     cno;            /* 0-N: file character in line. */
  63.  
  64.     size_t     rcm;            /* Vi: 0-N: Most attractive column. */
  65.  
  66. #define    L_ADDED        0        /* Added lines. */
  67. #define    L_CHANGED    1        /* Changed lines. */
  68. #define    L_DELETED    2        /* Deleted lines. */
  69. #define    L_JOINED    3        /* Joined lines. */
  70. #define    L_MOVED        4        /* Moved lines. */
  71. #define    L_SHIFT        5        /* Shift lines. */
  72. #define    L_YANKED    6        /* Yanked lines. */
  73.     recno_t     rptlchange;        /* Ex/vi: last L_CHANGED lno. */
  74.     recno_t     rptlines[L_YANKED + 1];/* Ex/vi: lines changed by last op. */
  75.  
  76.     TEXTH     tiq;            /* Ex/vi: text input queue. */
  77.  
  78.     SCRIPT    *script;        /* Vi: script mode information .*/
  79.  
  80.     recno_t     defscroll;        /* Vi: ^D, ^U scroll information. */
  81.  
  82.                     /* Display character. */
  83.     CHAR_T     cname[MAX_CHARACTER_COLUMNS + 1];
  84.     size_t     clen;            /* Length of display character. */
  85.  
  86.     enum {                /* Vi editor mode. */
  87.         SM_APPEND = 0, SM_CHANGE, SM_COMMAND, SM_INSERT,
  88.         SM_REPLACE } showmode;
  89.  
  90.     void    *ex_private;        /* Ex private area. */
  91.     void    *vi_private;        /* Vi private area. */
  92.     void    *perl_private;        /* Perl private area. */
  93.  
  94. /* PARTIALLY OR COMPLETELY COPIED FROM PREVIOUS SCREEN. */
  95.     char    *alt_name;        /* Ex/vi: alternate file name. */
  96.  
  97.     CHAR_T     at_lbuf;        /* Ex/vi: Last executed at buffer. */
  98.  
  99.                     /* Ex/vi: re_compile flags. */
  100. #define    RE_C_CSCOPE    0x0001        /* Compile cscope pattern. */
  101. #define    RE_C_SEARCH    0x0002        /* Compile search replacement. */
  102. #define    RE_C_SILENT    0x0004        /* No error messages. */
  103. #define    RE_C_SUBST    0x0008        /* Compile substitute replacement. */
  104. #define    RE_C_TAG    0x0010        /* Compile ctag pattern. */
  105.  
  106. #define    RE_WSTART    "[[:<:]]"    /* Ex/vi: not-in-word search pattern. */
  107. #define    RE_WSTOP    "[[:>:]]"
  108.                     /* Ex/vi: flags to search routines. */
  109. #define    SEARCH_CSCOPE    0x0001        /* Search for a cscope pattern. */
  110. #define    SEARCH_EOL    0x0002        /* Offset past EOL is okay. */
  111. #define    SEARCH_FILE    0x0004        /* Search the entire file. */
  112. #define    SEARCH_INCR    0x0008        /* Search incrementally. */
  113. #define    SEARCH_MSG    0x0010        /* Display search messages. */
  114. #define    SEARCH_PARSE    0x0020        /* Parse the search pattern. */
  115. #define    SEARCH_SET    0x0040        /* Set search direction. */
  116. #define    SEARCH_TAG    0x0080        /* Search for a tag pattern. */
  117. #define    SEARCH_WMSG    0x0100        /* Display search-wrapped messages. */
  118.  
  119.                     /* Ex/vi: RE information. */
  120.     dir_t     searchdir;        /* Last file search direction. */
  121.     regex_t     re_c;            /* Search RE: compiled form. */
  122.     char    *re;            /* Search RE: uncompiled form. */
  123.     size_t     re_len;        /* Search RE: uncompiled length. */
  124.     regex_t     subre_c;        /* Substitute RE: compiled form. */
  125.     char    *subre;            /* Substitute RE: uncompiled form. */
  126.     size_t     subre_len;        /* Substitute RE: uncompiled length). */
  127.     char    *repl;            /* Substitute replacement. */
  128.     size_t     repl_len;        /* Substitute replacement length.*/
  129.     size_t    *newl;            /* Newline offset array. */
  130.     size_t     newl_len;        /* Newline array size. */
  131.     size_t     newl_cnt;        /* Newlines in replacement. */
  132.     u_int8_t c_suffix;        /* Edcompatible 'c' suffix value. */
  133.     u_int8_t g_suffix;        /* Edcompatible 'g' suffix value. */
  134.  
  135.     OPTION     opts[O_OPTIONCOUNT];    /* Ex/vi: Options. */
  136.  
  137. /*
  138.  * Screen flags.
  139.  *
  140.  * Editor screens.
  141.  */
  142. #define    SC_EX        0x00000001    /* Ex editor. */
  143. #define    SC_VI        0x00000002    /* Vi editor. */
  144.  
  145. /*
  146.  * Screen formatting flags, first major, then minor.
  147.  *
  148.  * SC_SCR_EX
  149.  *    Ex screen, i.e. cooked mode.
  150.  * SC_SCR_VI
  151.  *    Vi screen, i.e. raw mode.
  152.  * SC_SCR_EXWROTE
  153.  *    The editor had to write on the screen behind curses' back, and we can't
  154.  *    let curses change anything until the user agrees, e.g. entering the
  155.  *    commands :!utility followed by :set.  We have to switch back into the
  156.  *    vi "editor" to read the user's command input, but we can't touch the
  157.  *    rest of the screen because it's known to be wrong.
  158.  * SC_SCR_REFORMAT
  159.  *    The expected presentation of the lines on the screen have changed,
  160.  *    requiring that the intended screen lines be recalculated.  Implies
  161.  *    SC_SCR_REDRAW.
  162.  * SC_SCR_REDRAW
  163.  *    The screen doesn't correctly represent the file; repaint it.  Note,
  164.  *    setting SC_SCR_REDRAW in the current window causes *all* windows to
  165.  *    be repainted.
  166.  * SC_SCR_CENTER
  167.  *    If the current line isn't already on the screen, center it.
  168.  * SC_SCR_TOP
  169.  *    If the current line isn't already on the screen, put it at the to@.
  170.  */
  171. #define    SC_SCR_EX    0x00000004    /* Screen is in ex mode. */
  172. #define    SC_SCR_VI    0x00000008    /* Screen is in vi mode. */
  173. #define    SC_SCR_EXWROTE    0x00000010    /* Ex overwrite: see comment above. */
  174. #define    SC_SCR_REFORMAT    0x00000020    /* Reformat (refresh). */
  175. #define    SC_SCR_REDRAW    0x00000040    /* Refresh. */
  176.  
  177. #define    SC_SCR_CENTER    0x00000080    /* Center the line if not visible. */
  178. #define    SC_SCR_TOP    0x00000100    /* Top the line if not visible. */
  179.  
  180. /* Screen/file changes. */
  181. #define    SC_EXIT        0x00000200    /* Exiting (not forced). */
  182. #define    SC_EXIT_FORCE    0x00000400    /* Exiting (forced). */
  183. #define    SC_FSWITCH    0x00000800    /* Switch underlying files. */
  184. #define    SC_SSWITCH    0x00001000    /* Switch screens. */
  185.  
  186. #define    SC_ARGNOFREE    0x00002000    /* Argument list wasn't allocated. */
  187. #define    SC_ARGRECOVER    0x00004000    /* Argument list is recovery files. */
  188. #define    SC_AT_SET    0x00008000    /* Last at buffer set. */
  189. #define    SC_COMEDIT    0x00010000    /* Colon command-line edit window. */
  190. #define    SC_EX_GLOBAL    0x00020000    /* Ex: executing a global command. */
  191. #define    SC_EX_SILENT    0x00040000    /* Ex: batch script. */
  192. #define    SC_EX_WAIT_NO    0x00080000    /* Ex: don't wait for the user. */
  193. #define    SC_EX_WAIT_YES    0x00100000    /* Ex:    do wait for the user. */
  194. #define    SC_READONLY    0x00200000    /* Persistent readonly state. */
  195. #define    SC_RE_SEARCH    0x00400000    /* Search RE has been compiled. */
  196. #define    SC_RE_SUBST    0x00800000    /* Substitute RE has been compiled. */
  197. #define    SC_SCRIPT    0x01000000    /* Shell script window. */
  198. #define    SC_STATUS    0x02000000    /* Welcome message. */
  199. #define    SC_STATUS_CNT    0x04000000    /* Welcome message plus file count. */
  200. #define    SC_TINPUT    0x08000000    /* Doing text input. */
  201. #define    SC_TINPUT_INFO    0x10000000    /* Doing text input on info line. */
  202.     u_int32_t flags;
  203. };
  204.