/* Public Domain Curses */

#include "pdcdos.h"

RCSID("$Id: pdcgetsc.c,v 1.42 2008/07/13 16:08:17 wmcbrine Exp $")

#include <stdlib.h>

/* return width of screen/viewport */

int PDC_get_columns(void)
{
    PDCREGS regs;
    int cols;
    const char *env_cols;

    PDC_LOG(("PDC_get_columns() - called\n"));

    /* use the value from COLS environment variable, if set. MH 10-Jun-92 */
    /* and use the minimum of COLS and return from int10h    MH 18-Jun-92 */

    regs.h.ah = 0x0f;
    PDCINT(0x10, regs);
    cols = (int)regs.h.ah;

    env_cols = getenv("COLS");

    if (env_cols)
        cols = min(atoi(env_cols), cols);

    PDC_LOG(("PDC_get_columns() - returned: cols %d\n", cols));

    return cols;
}

/* get the cursor size/shape */

int PDC_get_cursor_mode(void)
{
    PDC_LOG(("PDC_get_cursor_mode() - called\n"));

    return getdosmemword(0x460);
}

/* return number of screen rows */

int PDC_get_rows(void)
{
    const char *env_rows;
    int rows;

    PDC_LOG(("PDC_get_rows() - called\n"));

    /* use the value from LINES environment variable, if set. MH 10-Jun-92 */
    /* and use the minimum of LINES and *ROWS.                MH 18-Jun-92 */

    rows = getdosmembyte(0x484) + 1;
    env_rows = getenv("LINES");

    if (env_rows)
        rows = min(atoi(env_rows), rows);

    if (rows == 1 && pdc_adapter == _MDS_GENIUS)
        rows = 66;
    if (rows == 1 && pdc_adapter == _MDA)
        rows = 25;

    if (rows == 1)
    {
        rows = 25;
        pdc_direct_video = FALSE;
    }

    switch (pdc_adapter)
    {
    case _EGACOLOR:
    case _EGAMONO:
        switch (rows)
        {
        case 25:
        case 43:
            break;
        default:
            rows = 25;
        }
        break;

    case _VGACOLOR:
    case _VGAMONO:
        break;

    default:
        rows = 25;
        break;
    }

    PDC_LOG(("PDC_get_rows() - returned: rows %d\n", rows));

    return rows;
}
