/*      $NetBSD: msg.h,v 1.2 2013/11/22 15:52:05 christos Exp $ */
/*-
* Copyright (c) 1993, 1994
*      The Regents of the University of California.  All rights reserved.
* Copyright (c) 1993, 1994, 1995, 1996
*      Keith Bostic.  All rights reserved.
*
* See the LICENSE file for redistribution information.
*
*      Id: msg.h,v 10.11 2000/04/21 21:26:19 skimo Exp  (Berkeley) Date: 2000/04/21 21:26:19
*/

/*
* Common messages (continuation or confirmation).
*/
typedef enum {
       CMSG_CONF, CMSG_CONT, CMSG_CONT_EX,
       CMSG_CONT_R, CMSG_CONT_S, CMSG_CONT_Q } cmsg_t;

/*
* Message types.
*
* !!!
* In historical vi, O_VERBOSE didn't exist, and O_TERSE made the error
* messages shorter.  In this implementation, O_TERSE has no effect and
* O_VERBOSE results in informational displays about common errors, for
* naive users.
*
* M_NONE       Display to the user, no reformatting, no nothing.
*
* M_BERR       Error: M_ERR if O_VERBOSE, else bell.
* M_ERR        Error: Display in inverse video.
* M_INFO        Info: Display in normal video.
* M_SYSERR     Error: M_ERR, using strerror(3) message.
* M_VINFO       Info: M_INFO if O_VERBOSE, else ignore.
*
* The underlying message display routines only need to know about M_NONE,
* M_ERR and M_INFO -- all the other message types are converted into one
* of them by the message routines.
*/
typedef enum {
       M_NONE = 1, M_BERR, M_ERR, M_INFO, M_SYSERR, M_VINFO, M_DBERR } mtype_t;

/*
* There are major problems with error messages being generated by routines
* preparing the screen to display error messages.  It's possible for the
* editor to generate messages before we have a screen in which to display
* them, or during the transition between ex (and vi startup) and a true vi.
* There's a queue in the global area to hold them.
*
* If SC_EX/SC_VI is set, that's the mode that the editor is in.  If the flag
* S_SCREEN_READY is set, that means that the screen is prepared to display
* messages.
*/
typedef struct _msgh MSGH;      /* MSGS list head structure. */
LIST_HEAD(_msgh, _msg);
struct _msg {
       LIST_ENTRY(_msg) q;     /* Linked list of messages. */
       mtype_t  mtype;         /* Message type: M_NONE, M_ERR, M_INFO. */
       char    *buf;           /* Message buffer. */
       size_t   len;           /* Message length. */
};

/* Flags to msgq_status(). */
#define MSTAT_SHOWLAST  0x01    /* Show the line number of the last line. */
#define MSTAT_TRUNCATE  0x02    /* Truncate the file name if it's too long. */