1 /*****************************************************************************
2 	DoEvEs()
3 
4 	This function "does" what's specified by the EV (edit verify) or
5 ES (search verify) flag.  The ES and EV flags are mode control flags that
6 allow the user to cause TECO to display a part of the edit buffer after
7 executing a command string (edit verify) or after a search (search verify).
8 Both the ES and EV flags are 0 by default,  which means don't do anything.
9 This function is only called when the ES or EV flag is non-zero.
10 	The flag is passed to this function for decoding.  This function
11 examines the flag and acts accordingly.  Both the ES and EV flags have the
12 following meaning:
13 
14 	-1	do a 1V command to display the current line
15 	0	do nothing (this function is not even called)
16 	1-31	type out current line with line-feed at CP
17 	32-255	type out current line with ASCII character (32-255) at CP
18 	else	bottom byte as above, top byte is argument to V command
19 
20 *****************************************************************************/
21 
22 #if CURSES			/* need to define standout and standend? */
23 #if ULTRIX
24 #include <cursesX.h>		/* note: this has to come before zport.h */
25 #else
26 #include <curses.h>		/* note: this has to come before zport.h */
27 #endif
28 #endif
29 
30 #include "zport.h"		/* define portability identifiers */
31 #include "tecoc.h"		/* define general identifiers */
32 #include "defext.h"		/* define external global variables */
33 #include "dchars.h"		/* define identifiers for characters */
34 
DoEvEs(Flag)35 VVOID DoEvEs(Flag)		/* EV or ES flag code */
36 WORD Flag;
37 {
38     unsigned char PtChar;		/* special "CP" character */
39     unsigned char VLines;		/* argument to V command */
40 
41     if (Flag == 0) {
42 	return;
43     }
44     if (Flag == -1) {			/* -1 means do a 1V command */
45 	VLines = 1;			/* view 1 line */
46 	PtChar = '\0';
47     } else {
48 	PtChar = (unsigned char)Flag;
49 	VLines = (unsigned char)(Flag >> 8);
50 	if (VLines == 0) {		/* be sure it's at least 1 */
51 	    VLines = 1;
52 	}
53     }
54 
55     TypBuf(GapBeg+Ln2Chr((LONG)1 - (LONG)VLines), GapBeg);
56 #if CURSES
57     if (GapEnd+1 < EBfEnd) {
58 	unsigned char c = *(GapEnd + 1);
59 
60 	standout();
61 	if (c=='\b') {
62 	    ZDspBf("^H", 2);
63 	} else if (c=='\r') {
64 	    ZDspBf("^M", 2);
65 	} else if (c=='\n') {
66 	    ZDspBf("^J", 2);
67 	} else if (c & 0200) {
68 	    int i;
69 	    char a,b;
70 
71 	    c = c & 0177;
72 	    i = c/16;
73 	    if (i==0)
74 		a='8';
75 	    else if (i==1)
76 		a=9;
77 	    else
78 		a = i - 2  + 'A';
79 	    i = (c % 16);
80 	    b = (i > 9) ?  i - 10 + 'A' : i + '0';
81 	    ZDspCh('[');
82 	    ZDspCh(a);
83 	    ZDspCh(b);
84 	    ZDspCh(']');
85 	} else
86 	    ZDspCh(c);
87 	standend();
88 	TypBuf(GapEnd+2, GapEnd + Ln2Chr((LONG)VLines)+1);
89     }
90 #else
91     if ((PtChar >= '\001') && (PtChar <= '\037')) {
92 	ZDspCh(LINEFD);
93     } else if (PtChar != 0) {
94 	ZDspCh(PtChar);
95     }
96     TypBuf(GapEnd+1, GapEnd+Ln2Chr((LONG)VLines)+1);
97 #endif
98 }
99