/*
 * Copyright (c) 2011-2024 Ross Cunniff
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

namespace term {

/* Parameters for LibTermStart() */
const IS_RAW_IN = 1;    // Start in raw input mode (Readch does not echo/block)
const IS_COLOR  = 2;    // Allow color output
const CAN_SCROLL = 3;   // Automatically scroll if output goes past EOS

/* Additional parameters for LibTermQuery() */
const WIDTH     = 10;   // Current width of the window
const HEIGHT    = 11;   // Current height of the window
const FG        = 12;   // Current foreground color
const BG        = 13;   // Current background color
const COLOR     = 14;   // Returns whether in color mode
const NCOLORS   = 15;   // Returns number of possible color indexes
const BOLD      = 16;   // Returns whether boldface is currently enabled
const REVERSE   = 17;   // Returns whether reverse video is currently enabled
const CURS_ROW  = 18;   // Returns the current cursor row
const CURS_COL  = 19;   // Returns current cursor column

/* Special keys returned from LibTermGetch() */
const NULL      = -1;   // No input is available (in cbreak mode)
const UP        = -2;   // Keyboard up arrow
const DOWN      = -3;   // Keyboard down arrow
const LEFT      = -4;   // Keyboard left arrow
const RIGHT     = -5;   // Keyboard right arrow
const PGUP      = -6;   // Keyboard page up key
const PGDN      = -7;   // Keyboard page down key
const HOME      = -8;   // Keyboard page home key
const END       = -9;   // Keyboard page end key
const BACKTAB   = -10;  // Keyboard back-tab key
const INSERT    = -11;  // Keyboard insert-char key
const F1        = -12;  // Keyboard function key F1
const F2        = -13;  // Keyboard function key F2
const F3        = -14;  // Keyboard function key F3
const F4        = -15;  // Keyboard function key F4
const F5        = -16;  // Keyboard function key F5
const F6        = -17;  // Keyboard function key F6
const F7        = -18;  // Keyboard function key F7
const F8        = -19;  // Keyboard function key F8
const F9        = -20;  // Keyboard function key F9
const F10       = -21;  // Keyboard function key F10
const F11       = -22;  // Keyboard function key F11
const F12       = -23;  // Keyboard function key F12

/* Colors for LibTermColorPair() */
const BLACK     = 0;
const WHITE     = 1;
const RED       = 2;
const YELLOW    = 3;
const GREEN     = 4;
const CYAN      = 5;
const BLUE      = 6;
const MAGENTA   = 7;

/* Definitions of external procedures implemented */
extern
    Start,        // Start(args) - initialize, where args are from above
    Stop,         // Stop() - shut down termio
    GotoRC,       // GotoRC(r,c) - move cursor to given screen position
    Bold,         // Bold(isBold) - enable or disable bold (bright) chars
    Reverse,      // Reverse(isReverse) - enable or disable reverse video
    RawInput,     // RawInput(isRaw) - enable or disable raw input mode
    ColorPair,    // ColorPair(idx,fg,bg) - create a fg,bg color pair for idx
    SetColor,     // SetColor(idx) - sets current color to the given idx
    ScrollRegion, // ScrollRegion(top,bot) Establish top and bottom margins
    Scroll,       // Scroll(n) - scroll up or down n lines
    CLS,          // CLS() - clear the entire screen
    EEOL,         // EEOL() - clear to the end of the current line
    EEOS,         // EEOS() - clear to the bottom of the screen
    Flush,        // Flush() - flush output
    Getch,        // Getch() - get a keyboard key, including specials from above
    Query;        // Query(item) - return value of items from list above

} /* End namespace term */

/* If you're including this header, you're using this library. */
using extern "libterm";