home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume14 / shellforms / part01 / Stty < prev    next >
Text File  |  1988-05-09  |  10KB  |  267 lines

  1. #! /bin/sh
  2. #
  3. #-    Stty - stty with form interface
  4. #-
  5. #-    This program  allows user to view  all the terminal parameters
  6. #-    and change them by form.  Help messages has been added to each
  7. #-    field to make change parameter easier.
  8. #
  9. #    Author:        Paul Lew, General Systems Group, Salem, NH
  10. #    Created at:    01/09/88  07:40 PM
  11. #    Last update:    01/12/88  10:34 PM  (Edition: 79)
  12. #
  13. #---------------------------------------------------------------#
  14. #     Get current tty setting and store as shell variables    #
  15. #---------------------------------------------------------------#
  16. sttyfile="/tmp/stty$$"
  17. tmpfile="/tmp/sttytmp$$"
  18. trap "trap '' 0 1 2 3 15;                    \
  19.       /bin/rm -f $sttyfile $tmpfile;                \
  20.       exit" 0 1 2 3 15
  21. stty everything 2> $sttyfile
  22. tr -d ':()' < $sttyfile | awk \
  23. 'BEGIN    { q= 39; fmt = sprintf "%%s=%c%%s%c\n", q, q; }        \
  24.     NR == 1    {                        \
  25.         printf fmt, "tt_tty",    $1;            \
  26.         printf fmt, "tt_speed",  $4;            \
  27.         printf fmt, "tt_row",    $6;            \
  28.         printf fmt, "tt_column", $8;            \
  29.         }                        \
  30.     2 <= NR && NR <= 5 {                    \
  31.         for (i=1; i<=NF; i++) {                \
  32.             if (substr($(i),1,1)=="-") {        \
  33.                 yon = "No";            \
  34.                 name = substr($(i),2,99);    \
  35.                 }                \
  36.             else    {                \
  37.                 yon = "Yes";            \
  38.                 name = $(i);            \
  39.                 }                \
  40.             print "tt_" name "=" yon;        \
  41.             }                    \
  42.         }                        \
  43.     NR == 7 {                        \
  44.         printf fmt, "tt_erase",  $1;            \
  45.         printf fmt, "tt_kill",   $2;            \
  46.         printf fmt, "tt_werase", $3;            \
  47.         printf fmt, "tt_rprnt",  $4;            \
  48.         printf fmt, "tt_flush",  $5;            \
  49.         printf fmt, "tt_lnext",  $6;            \
  50.         n = split ($7, part, "/");            \
  51.         printf fmt, "tt_susp",   part[1];        \
  52.         printf fmt, "tt_suspo",  part[2];        \
  53.         printf fmt, "tt_intr",   $8;            \
  54.         printf fmt, "tt_quit",   $9;            \
  55.         n = split ($10, part, "/");            \
  56.         printf fmt, "tt_stop",   part[1];        \
  57.         printf fmt, "tt_start",  part[2];        \
  58.         printf fmt, "tt_eof",    $11;            \
  59.         }' > $tmpfile
  60. #---------------------------------------------------------------#
  61. #         Prepare variable for sf to display            #
  62. #---------------------------------------------------------------#
  63. . $tmpfile
  64. /bin/rm -f $tmpfile
  65. if [ $tt_raw = "Yes" ]; then tt_mode="raw"
  66. elif [ $tt_cbreak = "Yes" ]; then tt_mode="cbreak"
  67. else tt_mode="cooked"
  68. fi
  69. if [ $tt_nl = "Yes" ]; then tt_nl="No"; else tt_nl="Yes"; fi
  70. if [ $tt_litout = "Yes" ]; then tt_litout="No"; else tt_litout="Yes"; fi
  71. if [ $tt_nohang = "Yes" ]; then tt_nohang="No"; else tt_nohang="Yes"; fi
  72. #---------------------------------------------------------------#
  73. #       Invoke sf to allow user make changes            #
  74. #---------------------------------------------------------------#
  75. s=s=/Yes/No
  76. sf -o $tmpfile -bmu << sf_eof
  77.       ***** Terminal Setting for BSD 4.3 System *****
  78.  
  79. tty discipline: ~~~~    speed: ~~~~~    Rows: ~~~    Columns: ~~~
  80.  
  81. Accept even parity input: ~~~   Mode: ~~~~~~      Treat CR as NL: ~~~
  82. Accept odd  parity input: ~~~   Input Echo: ~~~   Map upper to lower: ~~~
  83. Flow control enable: ~~~        Print Tabs: ~~~
  84.  
  85. New TTY Discipline Specific:
  86.     Echo BS on erase char: ~~~    Wipe out erased char: ~~~   
  87.     Echo CTRL char as ^x: ~~~     Wipe out erased line: ~~~
  88.     Background job stop if output: ~~~   Convert tilde: ~~~  Flush output: ~~~
  89.     Start/Stop output on carrier transition: ~~~    Output processing: ~~~
  90.     Pass 8th bit: ~~~   Hang up if carrier drop: ~~~
  91.     Input Pending: ~~~  only XON resume output: ~~~
  92.  
  93. Terminal characters:
  94.     char erase: ~~    reprint current line: ~~   literal next char: ~~
  95.     word erase: ~~    flush output: ~~
  96.     line erase: ~~    end of file: ~~
  97.     interrupt:  ~~    suspend current job: ~~    stop host output (XOFF): ~~
  98.     quit:       ~~    suspend with output: ~~    start host output (XON): ~~
  99.  
  100. .v=tt_discipline.d=new.s=/new/net/old.
  101. .h=Berkeley new tty driver.
  102. .h=net discipline, for communication purpose.
  103. .h=old tty driver from V7 Unix.
  104.  
  105. .v=tt_speed.d=$tt_speed.
  106. .s=/0/50/75/110/134/150/200/300/600/1200/1800/2400/4800/9600/exta/extb.
  107. .h=hang up phone line immdeidately.
  108. .h=50.h=75.h=110.h=134.h=150.h=200.h=300.h=600.h=1200.h=1800.h=2400.h=4800.
  109. .h=9600.h=exta (19200 on DH-11 board).h=extb (not implemented yet).
  110.  
  111. .v=tt_row.d=$tt_row.v=tt_column.d=$tt_column.
  112.  
  113. .v=tt_even.d=$tt_even.$s.
  114. .h=Strip parity bit for even parity input char.
  115. .h=Throw away even parity input char.
  116.  
  117. .v=tt_mode.d=$tt_mode.s=/cooked/cbreak/raw.
  118. .h=Cooked mode - with input editing, end by newline.
  119. .h=Cbreak mode - return char as it typed except interrupt, flow control.
  120. .h=Raw mode - return every char as it typed.
  121.  
  122. .v=tt_nl.d=$tt_nl.$s.
  123. .h=Allow CR for NL, and output CR-LF for CR or NL.
  124. .h=Accept only newline to end lines.
  125.  
  126. .v=tt_odd.d=$tt_odd.$s.
  127. .h=Strip parity bit for odd parity input char.
  128. .h=Throw away odd parity input char.
  129.  
  130. .v=tt_echo.d=$tt_echo.$s.
  131. .h=Echo back every character typed.
  132. .h=Do not echo characters, good for Emacs inferior shell.
  133.  
  134. .v=tt_lcase.d=$tt_lcase.$s.
  135. .h=This is for terminal that do not have lowercase letter.
  136. .h=This is for modern day terminal.
  137.  
  138. .v=tt_tandem.d=$tt_tandem.$s.
  139. .h=system sends out stop/start char when queue is near overflow/empty.
  140. .h=Application program have to handle XON/OFF.
  141.  
  142. .v=tt_tabs.d=$tt_tabs.$s.
  143. .h=Preserve tabs when printing.
  144. .h=Replace tabs by spaces when printing (for terminal with no hardware tabs).
  145.  
  146. .v=tt_crtbs.d=$tt_crtbs.$s.
  147. .h=Echo backspaces on erase characters, useful for CRT.
  148. .h=do not echo backspaces on erase characters, useful for hardcopy terminals.
  149.  
  150. .v=tt_crterase.d=$tt_crterase.$s.
  151. .h=Wipe out erased characters with backspace-space-backspace.
  152. .h=Echo erased characters backwards within \\ and /.
  153.  
  154. .v=tt_ctlecho.d=$tt_ctlecho.$s.
  155. .h=Delete will be ^?, print two BS following the EOT char (CTRL D).
  156. .h=CTRL char echo as themselves; in cooked mode EOT (CTRL-D) is not echoed.
  157.  
  158. .v=tt_crtkill.d=$tt_crtkill.$s.
  159. .h=Wipe out input on like kill ala crterase.
  160. .h=Just echo line kill character and a newline on line kill.
  161.  
  162. .v=tt_tostop.d=$tt_tostop.$s.
  163. .h=Background jobs stop if they attempt terminal output.
  164. .h=Output from background jobs to the terminal is allowed.
  165.  
  166. .v=tt_tilde.d=$tt_tilde.$s.
  167. .h=Convert ~ to \` on output (for Hazeltine terminals).
  168. .h=Leave poor ~ char alone.
  169.  
  170. .v=tt_flusho.d=$tt_flusho.$s.
  171. .h=Output is being discarded usually because user hit CTRL O.
  172. .h=Output is not being discarded.
  173.  
  174. .v=tt_mdmbuf.d=$tt_mdmbuf.$s.
  175. .h=Start/stop output on carrier transitions.
  176. .h=Return error if write attempted after carrier drops.
  177.  
  178. .v=tt_litout.d=$tt_litout.$s.
  179. .h=Do normal output processing, inserting delays, etc.
  180. .h=Send output characters without any processing.
  181.  
  182. .v=tt_pass8.d=$tt_pass8.$s.
  183. .h=pass 8th bit.
  184. .h=strip off 8th bit.
  185.  
  186. .v=tt_nohang.d=$tt_nohang.$s.
  187. .h=Send hangup signal to control process group when carrier drops.
  188. .h=Do not send hangup signal if carrier drops.
  189.  
  190. .v=tt_pendin.d=$tt_pendin.$s.
  191. .h=Input is pending after a switch from cbreak to cooked.
  192. .h=Input is not pending.
  193.  
  194. .v=tt_decctlq.d=$tt_decctlq.$s.
  195. .h=This is compatible with DEC vendor supplied systems.
  196. .h=After output is suspended, any char will restart it.
  197.  
  198. .v=tt_erase.d=$tt_erase.v=tt_rprnt.d=$tt_rprnt.v=tt_lnext.d=$tt_lnext.
  199. .v=tt_werase.d=$tt_werase.v=tt_flush.d=$tt_flush.
  200. .v=tt_kill.d=$tt_kill.v=tt_eof.d=$tt_eof.
  201. .v=tt_intr.d=$tt_intr.v=tt_susp.d=$tt_susp.v=tt_stop.d=$tt_stop.
  202. .v=tt_quit.d=$tt_quit.v=tt_suspo.d=$tt_suspo.v=tt_start.d=$tt_start.
  203. sf_eof
  204. #---------------------------------------------------------------#
  205. #          Process variable returned            #
  206. #---------------------------------------------------------------#
  207. . $tmpfile
  208. /bin/rm -f $tmpfile $sttyfile
  209. tt_even=`[ $tt_even = "Yes" ] || echo -`even
  210. case $tt_mode in
  211.     cooked)    tt_raw='-raw'; tt_cbreak='-cbreak';;
  212.     cbreak)    tt_raw='-raw'; tt_cbreak='cbreak';;
  213.     raw)    tt_raw='raw';  tt_cbreak='-cbreak';;
  214.     esac
  215. tt_nl=`[ $tt_nl = "No" ] || echo -`nl
  216. tt_odd=`[ $tt_odd = "Yes" ] || echo -`odd
  217. tt_echo=`[ $tt_echo = "Yes" ] || echo -`echo
  218. tt_lcase=`[ $tt_lcase = "Yes" ] || echo -`lcase
  219. tt_tandem=`[ $tt_tandem = "Yes" ] || echo -`tandem
  220. tt_tabs=`[ $tt_tabs = "Yes" ] || echo -`tabs
  221. tt_crtbs=`[ $tt_crtbs = "Yes" ] || echo -`crtbs
  222. tt_crterase=`[ $tt_crterase = "Yes" ] || echo -`crterase
  223. tt_ctlecho=`[ $tt_ctlecho = "Yes" ] || echo -`ctlecho
  224. tt_crtkill=`[ $tt_crtkill = "Yes" ] || echo -`crtkill
  225. tt_tostop=`[ $tt_tostop = "Yes" ] || echo -`tostop
  226. tt_tilde=`[ $tt_tilde = "Yes" ] || echo -`tilde
  227. tt_flusho=`[ $tt_flusho = "Yes" ] || echo -`flusho
  228. tt_mdmbuf=`[ $tt_mdmbuf = "Yes" ] || echo -`mdmbuf
  229. tt_litout=`[ $tt_litout = "No" ] || echo -`litout
  230. tt_pass8=`[ $tt_pass8 = "Yes" ] || echo -`pass8
  231. tt_nohang=`[ $tt_nohang = "No" ] || echo -`nohang
  232. tt_pendin=`[ $tt_pendin = "Yes" ] || echo -`pendin
  233. tt_decctlq=`[ $tt_decctlq = "Yes" ] || echo -`decctlq
  234. tt_noflsh=`[ $tt_noflsh = "Yes" ] || echo -`noflsh
  235. #---------------------------------------------------------------#
  236. #    Output stty command to file (or stdout if no arg)    #
  237. #---------------------------------------------------------------#
  238. if [ "$1" = "" ]; then
  239.     sttyfile=/dev/tty
  240. else
  241.     sttyfile="$1"
  242.     fi
  243. cat > $sttyfile << cat_eof
  244. set noglob
  245. stty $tt_discipline  speed $tt_speed                \\
  246.     $tt_even $tt_odd $tt_raw $tt_nl $tt_echo $tt_lcase        \\
  247.     $tt_tandem    $tt_tabs $tt_cbreak                \\
  248.     $tt_crtbs $tt_crterase $tt_crtkill $tt_ctlecho $tt_tostop    \\
  249.     $tt_tilde $tt_flusho $tt_mdmbuf $tt_litout $tt_pass8    \\
  250.     $tt_nohang $tt_pendin $tt_decctlq $tt_noflsh        \\
  251.     erase "$tt_erase"  rprnt "$tt_rprnt"  lnext "$tt_lnext"    \\
  252.     werase "$tt_werase"  flush "$tt_flush"            \\
  253.     kill "$tt_kill"  eof "$tt_eof"                \\
  254.     intr "$tt_intr"  susp "$tt_suspd"  stop "$tt_stop"        \\
  255.     quit "$tt_quit"  susp "$tt_suspd"  start "$tt_start"
  256. unset noglob
  257. cat_eof
  258. #
  259. # 1) new tty, speed 1200 baud, 24 rows, 80 columns
  260. # 2) even odd -raw -nl echo -lcase -tandem tabs -cbreak 
  261. # 3) crt: (crtbs crterase crtkill ctlecho) -tostop 
  262. # 4) -tilde -flusho -mdmbuf -litout -pass8 -nohang 
  263. # 5) -pendin decctlq -noflsh 
  264. # 6) erase  kill   werase rprnt  flush  lnext  susp   intr   quit   stop   eof
  265. # 7)  ^?    ^U     ^W     ^R     ^O     ^V     ^Z/^Y  ^C     ^\     ^S/^Q  ^D
  266. #      1     2      3      4      5      6      7      8      9      10    11
  267.