Contact Us | Products/Services | Korn Shell | MicroEMACS


Mt Xia:
Technical Consulting Group

 

frenchMenus


Contact Mt Xia for help with your shell scripting projects at 615.556.0456 or dfrench@mtxia.com

Current:frenchMenus
Previous:
Home Page

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


################################################################ cnt_sleep() { move ${MAX_LINES} 1 clrtoeol attrset blink attrset rev addstr "Sleeping for ${1} second(s)" attroff refresh SLEEP_CNT="0" while (( ${SLEEP_CNT} < ${1} )) do SLEEP_CNT="$(( ${SLEEP_CNT} + 1 ))" addstr "." refresh sleep 1 done mvclrtoeol ${MAX_LINES} 1 refresh } ################################################################ drawEntry() { CNT_DRAW=0 while LAB_RAW="$( getstr )" do CNT_DRAW="$(( ${CNT_DRAW} + 1 ))" LAB_FILL="${LAB_RAW%%\|*}" E_TMP="${LAB_RAW#*\|}" E_TMP="${E_TMP%\|*}" eval E_DFLT="\"${E_TMP}\"" eval E_${LABEL}_${CNT_DRAW}=\"\${E_DFLT}\" LAB_PROMPT=$( fillcol "${LAB_FILL}" "${E_DFLT}" 37 ) COL_DRAW="2" (( ${CNT_DRAW} >= 10 )) && COL_DRAW="1" mvaddstr "$(( 4 + ${CNT_DRAW} ))" ${COL_DRAW} "${CNT_DRAW}: ${LAB_PROMPT}:" done < ${DD_TOPDIR}/entry${1}.txt NBR_LINES="${CNT_DRAW}" CNT_DRAW="$(( ${NBR_LINES} + 1 ))" COL_DRAW="2" (( ${CNT_DRAW} >= 10 )) && COL_DRAW="1" CNT_LINE="$(( ${NBR_LINES} + 6 ))" eval mvaddstr \${CNT_LINE} \${COL_DRAW} \"$( fillcol "${CNT_DRAW}: Line to Change" "0" 40 ):\" clrtoeol putMessage return ${NBR_LINES} } ################################################################ drawMenu() { CNT_DRAW=0 CNT_LINE=0 while LAB_RAW="$( getstr )" do CNT_DRAW="$(( ${CNT_DRAW} + 1 ))" LAB_FILL="${LAB_RAW%%\|*}" M_DFLT="${LAB_RAW#*\|}" M_DFLT="${M_DFLT%\|*}" eval M_${LABEL}_${CNT_DRAW}="\"${M_DFLT}\"" CNT_LINE="$(( ${CNT_DRAW} * 2 ))" COL_DRAW="26" (( ${CNT_DRAW} >= 10 )) && COL_DRAW="25" mvaddstr "$(( 3 + ${CNT_LINE} ))" ${COL_DRAW} "${CNT_DRAW} = ${LAB_FILL}" done < ${DD_TOPDIR}/menu${1}.txt LAB_PROMPT=$( fillcol "Select Menu Option" "0" 32 ) mvaddstr "$(( ${CNT_LINE} + 6 ))" 5 "${LAB_PROMPT}:" clrtoeol refresh return ${CNT_DRAW} } ################################################################ entryScreen() { eval BUF_TMP=\"\${e${LABEL}:=\"\"}\" if [[ -n "${BUF_TMP}" ]] then refresh "e${LABEL}" NBR_LINES="${LIN_[${LABEL}]}" else putMessage "Assembling data entry screen..." savescr ${DEV_NULL} clear header drawEntry "${1}" NBR_LINES="${?}" LIN_[${LABEL}]="${NBR_LINES}" savescr e${LABEL} fi getAnswer ${NBR_LINES} && resetAnswer ${NBR_LINES} putMessage return 0 } ################################################################ errend() { move "$(( ${MAX_LINES} - 1 ))" 1 clrtoeol addstr "ERROR: ${1}" scrnend } ################################################################ fillcol() { LEN_DIFF="$(( ${3} - ${#1} - ${#2} ))" typeset -L${LEN_DIFF} DOTS="................................................................................" # ${CMD_ECHO} "${1}${DOTS}(${2})" eval \${CMD_ECHO} ${OPT_ECHO} \"\${1}\${DOTS}\(\${2}\)\" } ################################################################ frenchMenus() { initscr MENULEV="0" LABEL="" SERVER="" SCRDATE="" HDRSAV0=${HDRLIN2} eval MENUANS${MENULEV}="" SH_MENU="${DD_TOPDIR}/menu${LABEL}.sh" [[ -f ${SH_MENU} ]] && . ${SH_MENU} ${LABEL} while : do putMessage "Assembling menu screen..." eval BUF_TMP=\"\${m${LABEL}:=\"\"}\" if [[ -n "${BUF_TMP}" ]] then refresh "m${LABEL}" STATUS="${LIN_[${LABEL}]}" else savescr ${DEV_NULL} clear header drawMenu "${LABEL}" STATUS=${?} LIN_[${LABEL}]="${STATUS}" savescr "m${LABEL}" fi getMenu ${STATUS} (( ${MENULEV} < 0 )) && break SH_MENU="${DD_TOPDIR}/menu${LABEL}.sh" SH_ENTRY="${DD_TOPDIR}/entry${LABEL}.sh" TXT_MENU="${DD_TOPDIR}/menu${LABEL}.txt" TXT_ENTRY="${DD_TOPDIR}/entry${LABEL}.txt" [[ -f ${SH_MENU} ]] && . ${SH_MENU} ${LABEL} [[ -f ${TXT_MENU} ]] && continue [[ -f ${TXT_ENTRY} ]] && entryScreen "${LABEL}" [[ -s ${SH_ENTRY} ]] && . ${SH_ENTRY} reset_level done putMessage } ################################################################ getAnswer() { STATUS="0" eval FUNCTION="\${M_${LABDAT}_${LTC}}" if [[ "${FUNCTION}" = @(modify|config|delete) ]] then selectRecord "${1}" STATUS="${?}" return ${STATUS} fi CNT_ANS="0" while (( ${CNT_ANS} < ${1} )) do CNT_ANS="$(( ${CNT_ANS} + 1 ))" move "$(( 4 + ${CNT_ANS} ))" 46 refresh ANS="$( getstr )" eval ANS\[\${CNT_ANS}\]=\"${ANS}\" done return ${STATUS} } ################################################################ getMenu() { while : do CNT_ANS="0" move "$(( ${1} * 2 + 6 ))" 41 clrtoeol refresh LTC="$( getstr )" [[ "_${LTC}" = "_" ]] && LTC="0" [[ "_${LTC}" = "_0" ]] && reset_level && return ${LTC} [[ "_${LTC}" = *[!0-9]* ]] || continue (( ${LTC} < 0 )) && cnt_sleep "$(( ${LTC} * -1 ))" (( ${LTC} < 0 )) || (( ${LTC} > ${1} )) && continue break done set_level ${LTC} return ${LTC} } ################################################################ getRecord() { putMessage "Retrieving data record..." RECORD="" CNT_ANS="0" IFS="${FIELDDELIM:=|}" set -- ${1} IFS="${IFS_NORM}" for FIELD in "${@}" do CNT_ANS="$(( ${CNT_ANS} + 1 ))" ANS[${CNT_ANS}]="${FIELD}" done putMessage return ${CNT_ANS} } ################################################################ header() { SCRNUM="${LABEL}" [[ "_${SCRDATE}" = "_" ]] && SCRDATE=$( date +"%m/%d/%y" ) [[ "_${SERVER}" = "_" ]] && SERVER="${LOGNAME}@$( uname -n )" attrset rev mvaddstr 1 1 "PGM${PRGNUM}" justifyCenter 1 "${HDRLIN1}" justifyLeft 1 "${SERVER}" mvaddstr 2 1 "SCR${SCRNUM}" justifyCenter 2 "${HDRLIN2}" justifyLeft 2 "${SCRDATE}" attroff } ################################################################ invalidKey() { putMessage "ERROR: Invalid keystroke..." sleep 2 return 0 } ################################################################ justifyCenter() { mvaddstr ${1} "$(( ( ${MAX_COLS} - ${#2} ) / 2 ))" "${2}" } ################################################################ justifyLeft() { mvaddstr ${1} "$(( ${MAX_COLS} - ${#2} ))" "${2}" } ################################################################ mkrecord() { putMessage "Assembling data record..." RECORD="" CNT_ANS="0" while (( ${CNT_ANS} < ${1} )) do CNT_ANS="$(( ${CNT_ANS} + 1 ))" ANS="${ANS[${CNT_ANS}]}" eval E_DFLT=\"\${E_${LABEL}_${CNT_ANS}}\" [[ "_${ANS}" = "_" ]] && ANS="${E_DFLT}" RECORD="${RECORD}${ANS}${FIELDDELIM:=|}" done putMessage } ################################################################ putAnswer() { putMessage "Processing user data..." CNT_ANS="0" while (( ${CNT_ANS} < ${1} )) do CNT_ANS="$(( ${CNT_ANS} + 1 ))" move "$(( 4 + ${CNT_ANS} ))" 46 clrtoeol addstr "${ANS[${CNT_ANS}]}" refresh done putMessage } ################################################################ putMessage() { move $(( ${MAX_LINES} - 1 )) 1 clrtoeol attrset blink addstr "${1}" attroff addstr "${2}" refresh } ################################################################ removeRecord() { # RECORD=$( ${CMD_ECHO} "${RECORD}" | tr '/' "${DIRSEP:=!}" ) # RECORD=$( ${CMD_ECHO} "${RECORD}" | sed -e "s/\//${DIRSEP:=!}/g;s/ /_/g" ) RECORD="${RECORD//\//${DIRSEP:=!}}" RECORD="${RECORD// /_}" rm -f "${DD_DATABASE}${1}/${RECORD}" STATUS="${?}" return ${STATUS} } ################################################################ resetAnswer() { mkrecord "${1}" if [[ "_${FUNCTION}" = "_delete" ]] then removeRecord "table${LABDAT}0" return 0 fi RECORD_OLD="${RECORD}" while : do mvclrtoeol "$(( ${1} + 6 ))" 46 refresh LTC="$( getstr )" [[ "_${LTC}" = "_" ]] && LTC="0" [[ "_${LTC}" = "_0" ]] && mkrecord "${1}" && break [[ "_${LTC}" = *[!0-9]* ]] || continue if (( ${LTC} == -1 )) then LTC="$(( ${1} + 1 ))" refresh "e${LABEL}" putAnswer ${1} fi (( ${LTC} >= 1 )) && (( ${LTC} <= ${1} )) && mvclrtoeol "$(( 4 + ${LTC} ))" 46 && refresh && ANS="$( getstr )" && eval ANS\[\${LTC}\]=\"${ANS}\" done if [[ "_${RECORD}" != "_${RECORD_OLD}" || "${FUNCTION}" != @(modify|config) ]] then if saveRecord "table${LABDAT}0" then RECORD="${RECORD_OLD}" [[ "${FUNCTION}" = @(modify|config) ]] && removeRecord "table${LABDAT}0" fi else attrset rev attrset blink mvaddstr ${MAX_LINES} 1 "Record is unchanged" refresh sleep 2 attroff refresh fi return 0 } ################################################################ reset_level() { MENULEV="$(( ${MENULEV} - 1 ))" MENUPREV="$(( ${MENULEV} - 1 ))" MENUNEXT="$(( ${MENULEV} + 1 ))" (( ${MENUPREV} <= 0 )) && MENUPREV="0" set_label return 0 } ################################################################ saveRecord() { STATUS=1 YORNMSG="Save Record" [[ "_${FUNCTION}" = "_transient" ]] && YORNMSG="Process Record" if yesOrNo "${YORNMSG}" then if [[ "_${FUNCTION}" != "_transient" ]] then [[ ! -d ${DD_DATABASE}${1} ]] && mkdir ${DD_DATABASE}${1} && chmod 777 ${DD_DATABASE}${1} # RECORD=$( ${CMD_ECHO} "${RECORD}" | tr '/' "${DIRSEP:=!}" ) # RECORD=$( ${CMD_ECHO} "${RECORD}" | sed -e "s/\//${DIRSEP:=!}/g;s/ /_/g" ) RECORD="${RECORD//\//${DIRSEP:=!}}" RECORD="${RECORD// /_}" [[ "_${FUNCTION}" = "_config" ]] && rm -f ${DD_DATABASE}${1}/* touch "${DD_DATABASE}${1}/${RECORD}" STATUS="${?}" else STATUS="0" fi fi return ${STATUS} } ################################################################ scrnend() { move ${MAX_LINES} 1 clrtoeol attrset blink attrset rev addstr "Press to contine" attroff refresh SCRNEND="$( getch )" } ################################################################ selectRecord() { STATUS="1" putMessage "Retrieving list of data records..." IFS="${IFS_CR}" # for RECORD in $( ls -1 ${DD_DATABASE}table${LABDAT}0 ) for RECORD in ${DD_DATABASE}table${LABDAT}0/* do RECORD="${RECORD#${DD_DATABASE}table${LABDAT}0/}" RECORD="${RECORD//${DIRSEP:=!}//}" # RECORD=$( ${CMD_ECHO} "${RECORD}" | sed -e "s/${DIRSEP:=!}/\//g" ) IFS="${IFS_NORM}" getRecord "${RECORD}" putAnswer "${1}" [[ "${FUNCTION}" = @(modify|config) ]] && TMP="Modify" [[ "${FUNCTION}" = "delete" ]] && TMP="Delete" if yesOrNo "${TMP} this record" then STATUS="0" break fi IFS=${IFS_CR} done IFS=${IFS_NORM} putMessage return ${STATUS} } ################################################################ set_label() { LABEL="" LABDAT="" ISFL=0 if (( ${MENULEV} >= 1 )) then while (( ${ISFL} <= ${MENUPREV} )) do ISFL="$(( ${ISFL} + 1 ))" LABEL="${LABEL}${MENUANS[${ISFL}]}" (( ${ISFL} <= ${MENUPREV} )) && LABDAT="${LABEL}" done fi } ################################################################ set_level() { MENUPREV=${MENULEV} MENULEV="$(( ${MENULEV} + 1 ))" MENUNEXT="$(( ${MENULEV} + 1 ))" MENUANS[${MENULEV}]="${1}" set_label return 0 } ################################################################ yesOrNo() { TORF="0" putMessage "${1}..." "(Y/N)?" YORN="$( getch )" case _${YORN} in "_Y") TORF="0";; "_y") TORF="0";; "_N") TORF="1";; "_n") TORF="1";; *) TORF="1";; esac putMessage return ${TORF} } ################################################################



  French Menus Function cnt_sleep
  French Menus Function drawEntry
  French Menus Function drawMenu
  French Menus Function entryScreen
  French Menus Function errend
  French Menus Function fillcol
  French Menus Function frenchMenus
  French Menus Function getAnswer
  French Menus Function getMenu
  French Menus Function getRecord
  French Menus Function header
  French Menus Function invalidKey
  French Menus Function justifyCenter
  French Menus Function justifyLeft
  French Menus Function mkrecord
  French Menus Function putAnswer
  French Menus Function putMessage
  French Menus Function removeRecord
  French Menus Function resetAnswer
  French Menus Function reset_level
  French Menus Function saveRecord
  French Menus Function scrnend
  French Menus Function selectRecord
  French Menus Function set_label
  French Menus Function set_level
  French Menus Function yesOrNo

 

For information regarding this page, contact Dana French ( dfrench@mtxia.com )
Copyright 2008 by Mt Xia Inc, All Rights Reserved