/****************************************************************************
 * apps/nshlib/nsh_console.h
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.  The
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *
 ****************************************************************************/

#ifndef __APPS_NSHLIB_NSH_CONSOLE_H
#define __APPS_NSHLIB_NSH_CONSOLE_H

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <nuttx/config.h>

#include <sys/types.h>

#include <stdint.h>
#include <stdbool.h>
#include <errno.h>

#include <nuttx/queue.h>

/****************************************************************************
 * Pre-processor Definitions
 ****************************************************************************/

/* Method access macros */

#define nsh_clone(v)           (v)->clone(v)
#define nsh_release(v)         (v)->release(v)
#define nsh_write(v,b,n)       (v)->write(v,b,n)
#define nsh_ioctl(v,c,a)       (v)->ioctl(v,c,a)
#define nsh_linebuffer(v)      (v)->linebuffer(v)
#define nsh_redirect(v,f,s)    (v)->redirect(v,f,s)
#define nsh_undirect(v,s)      (v)->undirect(v,s)
#define nsh_exit(v,s)          (v)->exit(v,s)

#ifdef CONFIG_CPP_HAVE_VARARGS
# define nsh_error(v, ...)     (v)->error(v, ##__VA_ARGS__)
# define nsh_output(v, ...)    (v)->output(v, ##__VA_ARGS__)
#else
# define nsh_error             vtbl->error
# define nsh_output            vtbl->output
#endif

/* Size of info to be saved in call to nsh_redirect
 * See struct serialsave_s in nsh_console.c
 */

#define SAVE_SIZE (2 * sizeof(int))

/* Are we using the NuttX console for I/O?  Or some other character device? */

#ifdef CONFIG_NSH_ALTCONDEV

#  if !defined(CONFIG_NSH_ALTSTDIN) && !defined(CONFIG_NSH_ALTSTDOUT) && \
      !defined(CONFIG_NSH_ALTSTDERR)
#    error CONFIG_NSH_ALTCONDEV selected but CONFIG_NSH_ALTSTDxxx not provided
#  endif

#  define INFD(p)      ((p)->cn_confd)

#else

#  define INFD(p)      0

#endif

#  define OUTFD(p)     ((p)->cn_outfd)
#  define ERRFD(p)     ((p)->cn_errfd)

/****************************************************************************
 * Public Types
 ****************************************************************************/

/* This describes a generic console front-end */

struct nsh_vtbl_s
{
  /* This function pointers are "hooks" into the front end logic to
   * handle things like output of command results, redirection, etc.
   * -- all of which must be done in a way that is unique to the nature
   * of the front end.
   */

#ifndef CONFIG_NSH_DISABLEBG
  FAR struct nsh_vtbl_s *(*clone)(FAR struct nsh_vtbl_s *vtbl);
  void (*addref)(FAR struct nsh_vtbl_s *vtbl);
#endif
  void (*release)(FAR struct nsh_vtbl_s *vtbl);
  ssize_t (*write)(FAR struct nsh_vtbl_s *vtbl, FAR const void *buffer,
                   size_t nbytes);
  int (*ioctl)(FAR struct nsh_vtbl_s *vtbl, int cmd, unsigned long arg);
  int (*error)(FAR struct nsh_vtbl_s *vtbl, FAR const char *fmt, ...)
      printf_like(2, 3);
  int (*output)(FAR struct nsh_vtbl_s *vtbl, FAR const char *fmt, ...)
      printf_like(2, 3);
  FAR char *(*linebuffer)(FAR struct nsh_vtbl_s *vtbl);
  void (*redirect)(FAR struct nsh_vtbl_s *vtbl, int fd, FAR uint8_t *save);
  void (*undirect)(FAR struct nsh_vtbl_s *vtbl, FAR uint8_t *save);
  void (*exit)(FAR struct nsh_vtbl_s *vtbl, int status) noreturn_function;

#ifdef NSH_HAVE_IOBUFFER
  /* Common buffer for file I/O. */

  char iobuffer[IOBUFFERSIZE];
#endif

#ifdef CONFIG_NSH_ALIAS
  /* Shell alias support */

  struct nsh_alias_s atab[CONFIG_NSH_ALIAS_MAX_AMOUNT];
  struct sq_queue_s  alist;
  struct sq_queue_s  afreelist;
#endif

  /* Parser state data */

  struct nsh_parser_s np;

  /* Ctrl tty or not */

  bool isctty;
};

/* This structure describes a console front-end that is based on stdin and
 * stdout (which is all of the supported console types at the time being).
 */

struct console_stdio_s
{
  /* NSH front-end call table */

  struct nsh_vtbl_s cn_vtbl;

  /* NSH input/output streams */

#ifdef CONFIG_NSH_ALTCONDEV
  int   cn_confd;     /* Console I/O file descriptor */
#endif
  int   cn_outfd;     /* Output file descriptor (possibly redirected) */
  int   cn_errfd;     /* Error Output file descriptor (possibly redirected) */

#ifdef CONFIG_NSH_VARS
  /* Allocation and size of NSH variables */

  FAR char *varp;
  size_t varsz;
#endif

  /* Line input buffer */

  char   cn_line[CONFIG_NSH_LINELEN];
};

/****************************************************************************
 * Public Data
 ****************************************************************************/

/****************************************************************************
 * Public Function Prototypes
 ****************************************************************************/

/* Defined in nsh_console.c *************************************************/

FAR struct console_stdio_s *nsh_newconsole(bool isctty);

#endif /* __APPS_NSHLIB_NSH_CONSOLE_H */
