日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

在Unix系統(tǒng)下用shell制作通用界面( 二 )


需要說明的是由于在Unix系統(tǒng)中,光標在上下左右移動時, Unix系統(tǒng)的read命令無法捕獲←、↑、→、↓鍵的控制字符,無法對光標進行有效的控制,為了獲取移動光標的控制字符,這里需要用C語言編寫一個函數(shù),其主要功能是在光標進行上下左右移動時,能夠準確地返回←、↑、→、↓控制鍵的ASCII值,函數(shù)名為getchar 。
程序分析
由于光標移動過程中涉及光標的行列位置等重復運算,運用函數(shù)可減少程序自身的長度,使程序變得短小、精悍 。這里涉及以下一些函數(shù):
1. 畫框函數(shù)
前面提到顯示格式依據表的結構而定,對菜單的邊框長度的設置不能固定不變,它要依據菜單標題欄的長度以及標題欄的標題個數(shù)而定 。這個函數(shù)的功能就是依據菜單界面寬度畫邊框,參數(shù)$1表示邊框的橫線與豎線 。
menu_x()
{
_R=$1
col_x=1
while [ col_x -le ${S_LENGTH} ]
do
if [ $_R ]; then echo $_R“c”
else echo “c”
fi
col_x=‘expr $col_x2"
done
}
2. 計算實際光標在屏幕上的行列位置函數(shù)
選擇光標在標題欄左右移動的過程中,需要計算光標在屏幕上的實際位置,通過這個函數(shù)可以準確地計算出這個實際位置 。其運算過程是將選擇光標在表中的行列位置作為函數(shù)的參數(shù),依據這兩個參數(shù)計算出光標在屏幕上的準確位置,并將選擇光標按照計算出的位置在屏幕上準確顯示 。其中變量SCREEN- CUR表示表1的元素內容,也就是菜單界面的菜單名稱,變量SCREEN-R和SCREEN-C分別表示實際光標在屏幕上位置 。執(zhí)行的結果是將選擇光標的內容按實際光標的位置顯示在屏幕上 。
menu_c()
{ _C=$1 # 選擇光標在菜單界面的列位置
_R=$2 # 選擇光標在菜單界面的行位置
SCREEN_CUR=‘awk -F“|” “NR==$_R { print }”menu|cut -d“|” -f$_C"
if [ $_C -gt 1 ]; then F_C=‘expr $_C - 1"
SCREEN_LENG=‘head -1 menu| cut -d“|” -f0-$F_C|sed -e ‘s/|//g"| awk ‘{ print length($0)}""
else
SCREEN_LENG=0
fi
SCREEN_R=‘expr $_R2"
SCREEN_C=‘expr $C_COL$SCREEN_LENG2"
SCREEN_CUR_X=“33[${SCREEN_R};${SCREEN_C}H${SCREEN_CUR}”
}
3. 計算選擇光標在移動過程中位置的函數(shù)
選擇光標在上下左右的移動過程中,其在菜單界面的位置也隨之發(fā)生變化,需要通過運算,以確定選擇光標在菜單界面的準確位置 。其中參數(shù)$1表示上下左右鍵所返回的ASCII值,當參數(shù)$1等于2或3時,表示選擇光標在上移或左移; 等于1或4時表示選擇光標在向下移動或向右移動 。參數(shù)$2表示選擇光標移動過程中在表1中的位置,參數(shù)$3表示選擇光標移動過程中所限定的區(qū)間范圍 。
menu_x_y()
{ _Z=$1
_S=$2
_L=$3
case $_Z in
2|3) if [ $_S -gt 1 ]
then _S=‘expr $_S - 1"
else _S=$_L
fi
1|4) if [ $_S -lt $_L ]
then _S=‘expr $_S1"
else _S=1
fi
esac
return $_S
}
4. 計算菜單界面每個菜單欄下的菜單數(shù)目函數(shù)
通常情況下每個菜單標題下所包含的內容是不一樣的,因而每個菜單欄下菜單的數(shù)目也是不相同的,需要對每個菜單欄下的菜單數(shù)目進行計算,參數(shù)$1表示選擇光標在菜單欄下的列位置 。
menu_row_number()
{ _H=$1
S_NUMBER=‘cut -d“|” -f$_H menu|sed -e ‘s/ //g"-e ‘/^$/d"| awk ‘END { print NR}""
}
5. 執(zhí)行子程序函數(shù)
子程序名存在prg文件中,表2中的元素就是子程序名 。調用子程序的過程實際就是根據選擇光標在菜單界面的行列位置將相應位置的元素讀出來,然后依據表2所提供的程序名判斷是否真實存在,如果存在則執(zhí)行 。
menu_prg()
{ _C=$1 # 選擇光標在菜單界面的列位置
_R=$2 # 選擇光標在菜單界面的行位置
prg_name=‘awk -F“|” “NR==$_R { print }” prg|cut -d“|” -f$_C"

推薦閱讀