1 /*- 2 * Copyright (c) 1996 3 * Keith Bostic. All rights reserved. 4 * 5 * See the LICENSE file for redistribution information. 6 * 7 * @(#)ip.h 8.3 (Berkeley) 10/13/96 8 */ 9 10 typedef struct _ip_private { 11 int i_fd; /* Input file descriptor. */ 12 int o_fd; /* Output file descriptor. */ 13 14 size_t row; /* Current row. */ 15 size_t col; /* Current column. */ 16 17 size_t iblen; /* Input buffer length. */ 18 size_t iskip; /* Returned input buffer. */ 19 char ibuf[256]; /* Input buffer. */ 20 21 #define IP_SCR_VI_INIT 0x0001 /* Vi screen initialized. */ 22 u_int32_t flags; 23 } IP_PRIVATE; 24 25 #define IPP(sp) ((IP_PRIVATE *)((sp)->gp->ip_private)) 26 #define GIPP(gp) ((IP_PRIVATE *)((gp)->ip_private)) 27 28 /* The screen line relative to a specific window. */ 29 #define RLNO(sp, lno) (sp)->woff + (lno) 30 31 /* 32 * The IP protocol consists of frames, each containing: 33 * 34 * <IPO_><object> 35 * 36 * XXX 37 * We should have a marking byte, 0xaa to delimit frames. 38 * 39 */ 40 #define IPO_CODE 1 /* An event specification. */ 41 #define IPO_INT 2 /* 4-byte, network order integer. */ 42 #define IPO_STR 3 /* IPO_INT: followed by N bytes. */ 43 44 #define IPO_CODE_LEN 1 45 #define IPO_INT_LEN 4 46 47 /* A structure that can hold the information for any frame. */ 48 typedef struct _ip_buf { 49 int code; /* Event code. */ 50 const char *str; /* String. */ 51 size_t len; /* String length. */ 52 u_int32_t val1; /* First value. */ 53 u_int32_t val2; /* Second value. */ 54 } IP_BUF; 55 56 /* 57 * Screen/editor IP_CODE's. 58 * 59 * The program structure depends on the event loop being able to return 60 * IPO_EOF/IPOE_ERR multiple times -- eventually enough things will end 61 * due to the events that vi will reach the command level for the screen, 62 * at which point the exit flags will be set and vi will exit. 63 * 64 * IP events sent from the screen to vi. 65 */ 66 #define IPO_EOF 1 /* End of input (NOT ^D). */ 67 #define IPO_ERR 2 /* Input error. */ 68 #define IPO_INTERRUPT 3 /* Interrupt. */ 69 #define IPO_QUIT 4 /* Quit. */ 70 #define IPO_RESIZE 5 /* Screen resize: IPO_INT, IPO_INT. */ 71 #define IPO_SIGHUP 6 /* SIGHUP. */ 72 #define IPO_SIGTERM 7 /* SIGTERM. */ 73 #define IPO_STRING 8 /* Input string: IPO_STR. */ 74 #define IPO_WRITE 9 /* Write. */ 75 76 /* 77 * IP events sent from vi to the screen. 78 */ 79 #define IPO_ADDSTR 1 /* Add a string: IPO_STR. */ 80 #define IPO_ATTRIBUTE 2 /* Set screen attribute: IPO_INT, IPO_INT. */ 81 #define IPO_BELL 3 /* Beep/bell/flash the terminal. */ 82 #define IPO_BUSY 4 /* Display a busy message: IPO_STR. */ 83 #define IPO_CLRTOEOL 5 /* Clear to the end of the line. */ 84 #define IPO_DELETELN 6 /* Delete a line. */ 85 #define IPO_INSERTLN 7 /* Insert a line. */ 86 #define IPO_MOVE 8 /* Move the cursor: IPO_INT, IPO_INT. */ 87 #define IPO_REDRAW 9 /* Redraw the screen. */ 88 #define IPO_REFRESH 10 /* Refresh the screen. */ 89 #define IPO_RENAME 11 /* Rename the screen: IPO_STR. */ 90 #define IPO_REWRITE 12 /* Rewrite a line: IPO_INT. */ 91 92 #include "ip_extern.h" 93