[精華] UNIX系統下部分控制代碼介紹及其應用

[精華] UNIX系統下部分控制代碼介紹及其應用


http://www.chinaunix.net 作者:htldm  發表於:2003-01-11 14:46:08
發表評論】【查看原文】【SCO UNIX討論區】【關閉

一、 鎖/開鍵盤代碼
  代碼定義:
    鎖鍵盤:ESC[2h
    開鍵盤:ESC[2l
  應用:
  1.直接在鍵盤上順序敲入Esc+[+2+h四鍵,鍵盤即被鎖住。
  2.在C語言程序顯示字符串中包含鎖代碼:printf(″%c[2h字串″,'/033')。
  3.在shell程序中用echo命令:echo″^[[2h字串″.注Esc鍵在vi編輯器中輸入方法爲:Ctrl+v,然後按一下Esc鍵,在屏幕上顯示^[表示已輸入。
  同樣顯示開鎖代碼則鍵盤被解鎖。
  二、 刪除字符代碼
  代碼定義:
  ESC[nX:清除光標右邊n個字符,光標不動。
  ESC[K或ESC[OK&#59;清除光標右邊全部字符,光標不動。
  ESC[1K:清除光標左邊全部字符,光標不動。
  ESC[2K:清除整行,光標不動。
  ESC[J或ESC[OJ:清除光標右下屏所有字符,光標不動。
  ESC[1J:清除光標左上屏所有字符,光標不動。
  ESC[2J或ESCc:清屏,光標移到左上角。
  ESC[nM:刪除光標之下n行,剩下行往上移,光標不動。
  ESC[nP:刪除光標右邊n個字符,剩下部分左移,光標不動。
  應用:
  一般用於自己開發的編輯器中或涉及行編輯的應用程序中。
  三、 插入字符代碼
  代碼定義:
  ESC[n@:在當前光標處插入n個字符。
  ESC[nL:在當前光標下插入n行。
  應用:
  一般用於自己開發的編輯器中或涉及行編輯的應用程序中。
  四、 移動光標
  代碼定義:
  ESC[nA:光標上移n行。
  ESC[nB:光標下移n行。
  ESC[nC:光標右移n個字符。
  ESC[nD:光標左移n個字符。
  ESC[n&#59;mH :光標定位到第n行m列(類似代碼ESC[n&#59;mf)。
  應用:
  1.一般用於自己開發的編輯器中或涉及行編輯的應用程序中。
  2.用shell編輯的菜單程序中定位光標,如:
  echo″^[[10&#59;30H請選擇:[ ]^[[9C/c″,則先把光標定位到10行30列,然後顯示″請選擇[ ]″,最後光標右移9個符定位到中括號內等待用戶響應。
  五、 定義字符顯示屬性代碼
  代碼定義:
  ESC[p&#59;p&#59;p;……m 其中屬性值p可以是一個或多個,具體定義如下:
  p 含義
  0 清除所有屬性
  1 高亮度顯示
  4 下劃線(如果硬件支持的話)
  5 閃爍(如果硬件支持的話)
  25 無閃爍
  7 反場(前背景交換)
  27 無反場
  8 隱藏(不顯示)
  10 選擇基本字體
  11 選擇第一替代字體;讓ASCII值小於32的字符顯示時直接取自ROM芯片內
  12 選擇第二替代字體;在作爲ROM字符顯示之前先壓縮擴展高位ASCII碼值
  30 前景黑色
  31 前景紅色
  32 前景綠色
  33 前景褐色
  34 前景藍色
  35 前景紫色
  36 前景藍綠色
  37 前景白色
  38 開啓下劃線標誌;白色前景用白色下劃線
  39 關閉下劃線標誌
  40 背景黑色
  41 背景紅色
  42 背景綠色
  43 背景褐色
  44 背景藍色
  45 背景紫色
  46 背景藍綠色
  47 背景白色
  應用:
  unix系統提供的setcolor命令是以行爲單位改變顏色,在實際運用中有它的侷限性,上面提到的控制代碼在日常生活中用得最多,尤其適合於彩色彈出式立體菜單的設計。如我設計的中心機房值班程序,由於用了這些控制代碼,界面非常友好。
  六、其它代碼
  代碼定義:
  ESC7:保存當前光標位置參數及字符屬性。
  ESC8:恢復保存的光標位置參數及字符屬性。
  /n :插入換行符
  /t :插入一個Tab鍵。
  /r :插入回車符。
  ^G :插入響鈴符(pc嗽叭鳴叫一次),在vi中按Ctrl+g即可輸入。
  /c :用於shell程序中,不換行。
  應用:
  1.用戶界面設計。
  2.用於中心機房向儲蓄櫃面發通知的程序中(結合實達終端屏幕保存代碼ESC[/n&#59;mr__保存從n行到m行的內容,恢復代碼ESC[/11)
  七、應用舉例
  1.彩色立體菜單(shell語言):
  setcolor-b white
  clear
  while true
  do
  echo″
  ^[[8&#59;20H^[[34&#59;43m┍—————————┒^[[47m
  ^[[9&#59;20H^[[34&#59;43m | 1 日 間 業 務 | ^[[40m ^[[47m
  ^[[10&#59;20H^[[34&#59;43m| 2 環 境 維 護 | ^[[40m ^[[47m
  ^[[11&#59;20H^[[34&#59;43m| 請 選 擇 [ ]| ^[[40m^[[47m
  ^[[12&#59;20H^[[34&#59;43m┕      ┛^[[40m^[[47m
  ^[[13&#59;22H^[[40m     ^[[47m
  echo″ ^[[11&#59;40H/c″
  read acc
  done
  2.向儲蓄所發通知(C語言):
  #include<stdio.h>;
  main()
  {
   printf(″%c7%c[/2&#59;4r″,'/033',/033')&#59;
   printf(″%c[2&#59;5H%c[2K 緊急通知 ″,' /033','/033')&#59;
  printf(″%c[3&#59;5H%c[2K由於線路問題,今天不辦新餘市通存通兌業務“,’[033’,’/033’);
   printf(″%c[4&#59;5H%c[2K 中心機房 1998.11.20%c8″,'/033','033','/033')&#59;
   fflush(stdout)&#59;
   sleep(10)&#59;
   printf “%c[/11″,’/033’);
  fflush(stdout)&#59;
  }
  說明:該程序首先保存光標位置,同時保存2至4行內容 ,接着定位光標到2行5列,清除該行原先內容,然後顯示“緊急通知”字樣,通知顯示完後立即恢復光標位置,然後等待10秒鐘後恢復屏幕原先內容 。




 rengongpu 回覆於:2003-01-03 19:43:28

好東西。


 lcz88990200 回覆於:2003-01-03 20:01:19

很好


 菜蝦 回覆於:2003-01-04 03:40:21

好東東,請多多指點


 cxzty 回覆於:2003-01-04 10:47:57

真是個好東西呀



 lovqing 回覆於:2003-01-04 11:52:27

up


 study 回覆於:2003-01-04 15:47:05

好東西!


 flybirdxp 回覆於:2003-01-04 15:52:31

好東西


 johnsilver 回覆於:2003-01-04 18:03:14

我原來也從腳本中收集了一些控制字符,但沒有htldm的全,不錯,感謝你.


 jysww 回覆於:2003-01-04 18:58:09

好東西! 好東西! 


 RootZero 回覆於:2003-01-05 00:46:00

路過,收藏



 linziwei 回覆於:2003-01-05 10:34:18

另存爲..........


 大夢 回覆於:2003-01-05 12:05:59

好東西!


 xzh2002 回覆於:2003-01-05 14:19:56

謝謝!


 天明700 回覆於:2003-01-06 17:08:17

佩服,佩服,
老兄,你太棒了!
收下,
謝謝!!!!!!!


 cqdxs 回覆於:2003-01-11 13:28:49

不錯


 sensir 回覆於:2003-01-11 14:46:08

GOOD




原文鏈接:http://bbs.chinaunix.net/viewthread.php?tid=16800
轉載請註明作者名及原文出處
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章