/**************************************************************************** * apps/include/system/termcurses.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_INCLUDE_SYSTEM_TERMCURSES_H #define __APPS_INCLUDE_SYSTEM_TERMCURSES_H /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ #define TCURS_CLEAR_SCREEN 1 #define TCURS_CLEAR_LINE 2 #define TCURS_CLEAR_EOS 3 #define TCURS_CLEAR_EOL 4 #define TCURS_MOVE_UP 1 #define TCURS_MOVE_DOWN 2 #define TCURS_MOVE_LEFT 3 #define TCURS_MOVE_RIGHT 4 #define TCURS_MOVE_YX 5 #define TCURS_MOVE_TO_ROW 6 #define TCURS_MOVE_TO_COL 7 #define TCURS_COLOR_FG 0x01 #define TCURS_COLOR_BG 0x02 #define TCURS_ATTRIB_BLINK 0x0001 #define TCURS_ATTRIB_BOLD 0x0002 #define TCURS_ATTRIB_UNDERLINE 0x0004 #define TCURS_ATTRIB_INVIS 0x0008 #define TCURS_ATTRIB_CURS_HIDE 0x0010 #define TCURS_ATTRIB_CURS_SHOW 0x0020 /**************************************************************************** * Public Type Definitions ****************************************************************************/ /* Used with TTY ioctls */ struct tcurses_ioctl_s { uint16_t tc_row; /* Cursor row */ uint16_t tc_col; /* Cursor col */ }; struct termcurses_dev_s; struct termcurses_s; struct termcurses_colors_s; struct termcurses_ops_s { /* Initialize a new instance bound to a file */ CODE FAR struct termcurses_s * (*init)(int in_fd, int out_fd); /* Clear operations (screen, line, EOS, EOL) */ CODE int (*clear)(FAR struct termcurses_s *dev, int type); /* Cursor Move operations */ CODE int (*move)(FAR struct termcurses_s *dev, int type, int col, int row); /* Get terminal size in row/col dimensions */ CODE int (*getwinsize)(FAR struct termcurses_s *dev, FAR struct winsize *winsz); /* Set fg/bg colors */ CODE int (*setcolors)(FAR struct termcurses_s *dev, FAR struct termcurses_colors_s *colors); /* Set display attributes */ CODE int (*setattrib)(FAR struct termcurses_s *dev, unsigned long attributes); /* Get a keycode value */ CODE int (*getkeycode)(FAR struct termcurses_s *dev, int *specialkey, int *keymodifers); /* Check for cached keycode value */ CODE bool (*checkkey)(FAR struct termcurses_s *dev); }; struct termcurses_dev_s { FAR const struct termcurses_ops_s *ops; FAR struct termcurses_dev_s *next; FAR const char *name; }; struct termcurses_s { FAR struct termcurses_dev_s *dev; FAR struct file *filep; }; struct termcurses_colors_s { uint8_t color_mask; uint8_t fg_red; uint8_t fg_green; uint8_t fg_blue; uint8_t bg_red; uint8_t bg_green; uint8_t bg_blue; }; /**************************************************************************** * Public Function Prototypes ****************************************************************************/ #ifdef __cplusplus #define EXTERN extern "C" extern "C" { #else #define EXTERN extern #endif /**************************************************************************** * termcurses_initterm: * * Finds a termcurses_s device based on terminal type string and initialize * a new context for device control. * ****************************************************************************/ int termcurses_initterm(FAR const char *term_type, int in_fd, int out_fd, FAR struct termcurses_s **dev); /**************************************************************************** * Name: termcurses_deinitterm * * Description: * Free all space for the termcurses terminal and perform any specific * de-initialization tasks. * ****************************************************************************/ int termcurses_deinitterm(FAR struct termcurses_s *dev); /**************************************************************************** * Name: termcurses_moveyx * * Description: * Configure output text to render in the specified fg/bg colors. * ****************************************************************************/ int termcurses_moveyx(FAR struct termcurses_s *term, int row, int col); /**************************************************************************** * Name: termcurses_setattribute * * Description: * Configure output text to render in the specified fg/bg colors. * ****************************************************************************/ int termcurses_setattribute(FAR struct termcurses_s *term, unsigned long attrib); /**************************************************************************** * Name: termcurses_setcolors * * Description: * Configure output text to render in the specified fg/bg colors. * ****************************************************************************/ int termcurses_setcolors(FAR struct termcurses_s *term, FAR struct termcurses_colors_s *colors); /**************************************************************************** * Name: termcurses_getwinsize * * Description: * Determines the size of the terminal screen in terms of character rows * and cols. * ****************************************************************************/ int termcurses_getwinsize(FAR struct termcurses_s *term, FAR struct winsize *winsz); /**************************************************************************** * Name: termcurses_getkeycode * * Description: * Get a translated key code from the terminal input. * ****************************************************************************/ int termcurses_getkeycode(FAR struct termcurses_s *term, FAR int *specialkey, FAR int *keymodifiers); /**************************************************************************** * Name: termcurses_checkkey * * Description: * Check if there is a key waiting to be processed. * ****************************************************************************/ bool termcurses_checkkey(FAR struct termcurses_s *term); #undef EXTERN #ifdef __cplusplus } #endif #endif /* __APPS_INCLUDE_SYSTEM_TERMCURSES_H */