Mt Xia: Technical Consulting Group

Business Continuity / Disaster Recovery / High Availability
Data Center Automation / Audit Response / Audit Compliance

-
Current Location
-

css
  Downloads
    Scripts
      Korn
        Functions
          shcurses

-

digg Digg this page
del.icio.us Post to del.icio.us
Slashdot Slashdot it!


Business Web Site Hosting
$3.99 / month includes Tools,
Shopping Cart, Site Builder

www.siteox.com

FREE Domain Registration
included with Web Site Hosting
Tools, Social Networking, Blog

www.siteox.com

Contained here are the Korn shell 93 functions that comprise the Shell Curses library. Make note these functions are Korn Shell 93 compliant and will not work with Korn Shell 88.

See visualSelect menu system for an example implementation of shell curses, utilizing function keys, arrow keys, Help screens, etc.




################################################################
function addch
{
    addstr "${1:0:1}"
    return ${?}
}
################################################################
function addstr
{
    [[ "_${1}" != "_" ]] &&
      BUF_SCREEN="${BUF_SCREEN}${1}"
    return ${?}
}
################################################################
function attroff
{
    addstr "${CMD_ATTROFF}"
    return ${?}
}
################################################################
function attron
{
    return 0
}
################################################################
function attrset
{
    addstr "$( ${CMD_ATTRSET} ${1} )"
    return ${?}
}
################################################################
function beep
{
    addstr "${CMD_BEEP}"
    return ${?}
}
################################################################
function chkcols
{
    chkint ${1} ${2} &&
      (( ${2} >= 0 )) &&
      (( ${2} <= ${MAX_COLS} )) &&
      return 0

    ROW_NBR="24"
    COL_NBR="1"

    eval addstr \"${CMD_MOVE}\" &&
      clrtoeol &&
      addstr "${1}: Invalid column number" >&2 &&
      refresh &&
      ${ERROR_PAUSE} &&
      eval addstr \"${CMD_MOVE}\" &&
      clrtoeol &&
      refresh

    return 1
}
################################################################
function chkint
{
    let '${2} + 0' > ${DEV_NULL} 2>&1 &&
      return 0

    ROW_NBR="24"
    COL_NBR="1"

    eval addstr \"${CMD_MOVE}\" &&
      clrtoeol &&
      addstr "${1}: argument not a number" >&2 &&
      refresh &&
      ${ERROR_PAUSE} &&
      eval addstr \"${CMD_MOVE}\" &&
      clrtoeol &&
      refresh

    return 1
}
################################################################
function chklines
{
    chkint ${1} ${2} &&
      (( ${2} >= 0 )) &&
      (( ${2} <= ${MAX_LINES} )) &&
      return 0

    ROW_NBR="24"
    COL_NBR="1"

    eval addstr \"${CMD_MOVE}\" &&
      clrtoeol &&
      addstr "${1}: Invalid line number" >&2 &&
      refresh &&
      ${ERROR_PAUSE} &&
      eval addstr \"${CMD_MOVE}\" &&
      clrtoeol &&
      refresh

    return 1
}
################################################################
function chkparm
{
    [[ "_${2}" = "_" ]] &&
      move 24 1 &&
      clrtoeol &&
      addstr "${1}: Missing parameter" >&2 &&
      refresh &&
      ${ERROR_PAUSE} &&
      move 24 1 &&
      clrtoeol &&
      return 1

    return 0
}
################################################################
function clear
{
    addstr "${CMD_CLEAR}"
    return ${?}
}
################################################################
function clrtobol
{
    addstr "${CMD_CLRTOBOL}"
    return ${?}
}
################################################################
function clrtobot
{
    addstr "${CMD_CLRTOEOD}"
    return ${?}
}
################################################################
function clrtoeol
{
    addstr "${CMD_CLRTOEOL}"
    return ${?}
}
################################################################
function delch
{
    addstr "${CMD_DELCH}"
    return ${?}
}
################################################################
function deleteln
{
    addstr "${CMD_DELETELN}"
    return ${?}
}
################################################################
function endwin
{
    unset MAX_LINES
    unset MAX_COLS
    unset BUF_SCREEN
    return ${?}
}
################################################################
function getch
{
    IFS='' read -r -- TMP_GETCH
    STATUS="${?}"
#     ${CMD_ECHO} "${TMP_GETCH}"
    eval \${CMD_ECHO} ${OPT_ECHO} \"\${TMP_GETCH}\"
    return ${STATUS}
}
################################################################
function getstr
{
    IFS="${IFS_CR}"
    getch
    STATUS="${?}"
    IFS="${IFS_NORM}"
    return ${STATUS}
}
################################################################
function getwd
{
    getch
    return ${?}
}
################################################################
function initscr
{
    PGMNAME="Bourne Shell Curses demo"
    DEV_NULL="/dev/null"
    CMD_TPUT="tput"			# Terminal "put" command

    eval CMD_MOVE=\`echo \"`tput cup`\" \| sed \\\
-e \"s/%p1%d/\\\\\${1}/g\" \\\
-e \"s/%p2%d/\\\\\${2}/g\" \\\
-e \"s/%p1%02d/\\\\\${1}/g\" \\\
-e \"s/%p2%02d/\\\\\${2}/g\" \\\
-e \"s/%p1%03d/\\\\\${1}/g\" \\\
-e \"s/%p2%03d/\\\\\${2}/g\" \\\
-e \"s/%p1%03d/\\\\\${1}/g\" \\\
-e \"s/%d\\\;%dH/\\\\\${1}\\\;\\\\\${2}H/g\" \\\
-e \"s/%p1%c/'\\\\\\\`echo \\\\\\\${1} P | dc\\\\\\\`'/g\" \\\
-e \"s/%p2%c/'\\\\\\\`echo \\\\\\\${2} P | dc\\\\\\\`'/g\" \\\
-e \"s/%p1%\' \'%+%c/'\\\\\\\`echo \\\\\\\${1} 32 + P | dc\\\\\\\`'/g\" \\\
-e \"s/%p2%\' \'%+%c/'\\\\\\\`echo \\\\\\\${2} 32 + P | dc\\\\\\\`'/g\" \\\
-e \"s/%p1%\'@\'%+%c/'\\\\\\\`echo \\\\\\\${1} 100 + P | dc\\\\\\\`'/g\" \\\
-e \"s/%p2%\'@\'%+%c/'\\\\\\\`echo \\\\\\\${2} 100 + P | dc\\\\\\\`'/g\" \\\
-e \"s/%i//g\;s/%n//g\"\`

    CMD_CLEAR="$( ${CMD_TPUT} clear 2>${DEV_NULL} )"	  # Clear display
    CMD_LINES="$( ${CMD_TPUT} lines 2>${DEV_NULL} )"	  # Number of lines on display
    CMD_COLS="$( ${CMD_TPUT} cols 2>${DEV_NULL} )"	  # Number of columns on display
    CMD_CLRTOEOL="$( ${CMD_TPUT} el 2>${DEV_NULL} )"	  # Clear to end of line
    CMD_CLRTOBGN="$( ${CMD_TPUT} el1 2>${DEV_NULL} )"	  # Clear to beginning of line
    CMD_CLRTOEOD="$( ${CMD_TPUT} ed 2>${DEV_NULL} )"	  # Clear to end of display
    CMD_DELCH="$( ${CMD_TPUT} dch1 2>${DEV_NULL} )"	  # Delete current character
    CMD_DELETELN="$( ${CMD_TPUT} dl1 2>${DEV_NULL} )"	  # Delete current line
    CMD_INSCH="$( ${CMD_TPUT} ich1 2>${DEV_NULL} )"	  # Insert 1 character
    CMD_INSERTLN="$( ${CMD_TPUT} il1 2>${DEV_NULL} )"  # Insert 1 Line
    CMD_ATTROFF="$( ${CMD_TPUT} sgr0 2>${DEV_NULL} )"  # All Attributes OFF
    CMD_ATTRSET="${CMD_TPUT}"			  # requires arg ( rev, blink, etc )
    CMD_BEEP="$( ${CMD_TPUT} bel 2>${DEV_NULL} )"	  # ring bell
    CMD_LISTER="cat"
    CMD_SYMLNK="ln -s"
    CMD_ECHO="echo"
    CMD_ECHO="print"
    OPT_ECHO='-n --'
    CMD_MAIL="mail"
    WHOAMI="${LOGNAME}@$( uname -n )"
    WRITER="dfrench@mtxia.com"
    CMD_NOTIFY="\${CMD_ECHO} ${OPT_ECHO} \"\${PGMNAME} - \${WHOAMI} - \$( date )\" | \${CMD_MAIL} \${WRITER}"
    ERROR_PAUSE="sleep 2"
    
    case "_$( uname -s )" in
        "_Windows_NT") ${DEV_NULL}="NUL";
                       CMD_SYMLNK="cp";;
#              "_Linux") CMD_ECHO="echo -e";;
    esac
    
    IFS_CR="$'\n'"
    IFS_CR="
"
    IFS_NORM="$' \t\n'"
    IFS_NORM=" 	
"

    MAC_TIME="TIMESTAMP=\`date +\"%y:%m:%d:%H:%M:%S\"\`"
    MAX_LINES=$( ${CMD_TPUT} lines )
    MAX_COLS=$( ${CMD_TPUT} cols )
    BUF_SCREEN=""
    BUF_TOT=""

    return 0
}
################################################################
function insch
{
    addstr "${CMD_INSCH}"
    return ${?}
}
################################################################
function insertln
{
    addstr "${CMD_INSERTLN}"
    return ${?}
}
################################################################
function move
{
#     chklines "${0}" "${1}" \
#     && chkcols "${0}" "${2}" \
#
################################################################
# HEATH-KIT MOVE COMMAND
#    addstr "Y${1} ${2}"
# VT100 MOVE COMMAND
#    addstr "[${1};${2}H"
# TPUT MOVE COMMAND
    eval addstr \"${CMD_MOVE}\"
# HP TERMINAL MOVE COMMAND
#   addstr "&a${1}y${2}C"
################################################################
#  add your move command below this line

    return ${?}
}
################################################################
function mvaddch
{
    move "${1}" "${2}" &&
      addch "${3}"
    return ${?}
}
################################################################
function mvaddstr
{
    move "${1}" "${2}" &&
      addstr "${3}"
    return ${?}
}
################################################################
function mvclrtobol
{
    move "${1}" "${2}" &&
      clrtobol
    return ${?}
}
################################################################
function mvclrtobot
{
    move "${1}" "${2}" &&
      clrtobot
    return ${?}
}
################################################################
function mvclrtoeol
{
    move "${1}" "${2}" &&
      clrtoeol
    return ${?}
}
################################################################
function mvcur
{
    chklines "${0}" "${1}" &&
      chkcols "${0}" "${2}" &&
      eval \"${CMD_MOVE}\"
    return ${?}
}
################################################################
function mvdelch
{
    move "${1}" "${2}" &&
      addstr "${CMD_DELCH}"
    return ${?}
}
################################################################
function mvinsch
{
    move "${1}" "${2}" &&
      addstr "${CMD_INSCH}"
    return ${?}
}
################################################################
function refresh
{
    if [[ "_${1}" != "_" ]]
    then
        eval \${CMD_ECHO} \${OPT_ECHO} \"\${${1}}\"
    else
        ${CMD_ECHO} ${OPT_ECHO} "${BUF_SCREEN}"
        BUF_TOT="${BUF_TOT}${BUF_SCREEN}"
        BUF_SCREEN=""
    fi
    return 0
}
################################################################
function savescr
{
    [[ "_${DEV_NULL}" != "_${1}" ]] && 
      eval ${1}="\"\${BUF_TOT}\""
    BUF_TOT=""
    return ${?}
}
################################################################


Shell Curses Functions


   addch
   addstr
   attroff
   attron
   attrset
   beep
   chkcols
   chkint
   chklines
   chkparm
   clear
   clrtobol
   clrtobot
   clrtoeol
   delch
   deleteln
   endwin
   getch
   getstr
   getwd
   initscr
   insch
   insertln
   move
   mvaddch
   mvaddstr
   mvclrtobol
   mvclrtobot
   mvclrtoeol
   mvcur
   mvdelch
   mvinsch
   refresh
   savescr
-
Shell Curses
-
 

addch
addstr
attroff
attron
attrset
beep
chkcols
chkint
chklines
chkparm
clear
clrtobol
clrtobot
clrtoeol
delch
deleteln
endwin
getch
getstr
getwd
initscr
insch
insertln
move
mvaddch
mvaddstr
mvclrtobol
mvclrtobot
mvclrtoeol
mvcur
mvdelch
mvinsch
refresh
savescr


FREE Domain Registration
included with Web Site Hosting
Tools, Social Networking, Blog

www.siteox.com

Business Web Site Hosting
$3.99 / month includes Tools,
Shopping Cart, Site Builder

www.siteox.com