home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 15 / hacker15 / 15_H4CK3R#15.ISO / linux_security / engarde / ENGARDE_COMMUNITY_FEINT.ISO / usr / bin / charset < prev    next >
Encoding:
Text File  |  2002-05-30  |  2.2 KB  |  151 lines

  1. #!/bin/sh
  2.  
  3. usage()
  4. {
  5.     echo >&2 "Usage: $(basename $0) [-v] G0|G1 [ cp437 | iso01 | vt100 | user | <acm_name> ]"
  6. }
  7.  
  8. usage_exit()
  9. {
  10.     usage
  11.     exit 1
  12. }
  13.  
  14. tty_out()
  15. {
  16. #    echo "Sending \`$*'"
  17.     echo -en >/dev/tty $*
  18. }
  19.  
  20. verbose()
  21. {
  22.     test $VERBOSE = 1 && echo >&2 $*
  23. }
  24.  
  25. error()
  26. {
  27.     echo >&2 $*
  28. }
  29.  
  30. activate_charset()
  31. {
  32.     verbose "Switching to $1 charset"
  33.     case $1 in
  34.     G0)
  35.     tty_out "\017"
  36.     ;;
  37.     G1)
  38.     tty_out "\016"
  39.     ;;
  40.     esac
  41. }
  42.  
  43. # parse command-line
  44.  
  45. CHARSET=
  46. ACM=
  47. INTERNAL_ACM=
  48. ACM_NAME=
  49.  
  50. VERBOSE=0
  51.  
  52. GOT_CHARSET=0
  53. GOT_ACM=0
  54.  
  55. while [ $# -gt 0 ]
  56. do
  57.     case $1 in
  58.     -v)
  59.     VERBOSE=1
  60.     shift
  61.     ;;
  62.     G0|G1)
  63.     if [ ${GOT_CHARSET} = 1 ] ; then usage_exit; fi
  64.     CHARSET=$1
  65.     GOT_CHARSET=1
  66.     shift
  67.     ;;
  68.     iso01)
  69.     if [ ${GOT_ACM} = 1 ] ; then usage_exit; fi
  70.     INTERNAL_ACM=B
  71.     ACM_NAME=$1
  72.     GOT_ACM=1
  73.     shift
  74.     ;;
  75.     vt100)
  76.     if [ ${GOT_ACM} = 1 ] ; then usage_exit; fi
  77.     INTERNAL_ACM=0
  78.     ACM_NAME=$1
  79.     GOT_ACM=1
  80.     shift
  81.     ;;
  82.     cp437)
  83.     if [ ${GOT_ACM} = 1 ] ; then usage_exit; fi
  84.     INTERNAL_ACM=U
  85.     ACM_NAME=$1
  86.     GOT_ACM=1
  87.     shift
  88.     ;;
  89.     user)
  90.     if [ ${GOT_ACM} = 1 ] ; then usage_exit; fi
  91.     INTERNAL_ACM=K
  92.     ACM_NAME="user-defined"
  93.     GOT_ACM=1
  94.     shift
  95.     ;;
  96.     *)
  97.     if [ ${GOT_ACM} = 1 ] ; then usage_exit; fi
  98.     INTERNAL_ACM=K
  99.     ACM_NAME="user-defined"
  100.     ACM=$1
  101.     GOT_ACM=1
  102.     shift
  103.     ;;
  104.     esac
  105. done
  106.  
  107. # if specified ACM is not available internally, get it from file
  108. if [ "$ACM" != "" ]
  109. then
  110.     case $CHARSET in
  111.     G0)
  112.     OPT=
  113.     ;;
  114.     G1)
  115.     OPT=--g1
  116.     ;;
  117.     esac
  118.     
  119.     verbose -n "Loading $ACM ACM into user-defined slot..."
  120.     consolechars $OPT -m $ACM && verbose "done."
  121. fi
  122.  
  123. if [ "$INTERNAL_ACM" != "" -a "$CHARSET" != "" ]
  124. then # make $CHARSET point to $INTERNAL_ACM
  125.     if [ "$ACM" != "" ]
  126.     then
  127.     verbose "Making $CHARSET point to $ACM_NAME ACM (file $ACM)"
  128.     else
  129.     verbose "Making $CHARSET point to internal ACM $ACM_NAME"
  130.     fi
  131.     case $CHARSET in
  132.     G0)
  133.     tty_out "\033($INTERNAL_ACM"
  134.     ;;
  135.     G1)
  136.     tty_out "\033)$INTERNAL_ACM"
  137.     ;;
  138.     esac
  139.     activate_charset $CHARSET
  140. elif [ "$INTERNAL_ACM" = "" -a "$CHARSET" != "" ]
  141. then # make $CHARSET current
  142.     activate_charset $CHARSET
  143. elif [ "$INTERNAL_ACM" != "" -a "$CHARSET" = "" ]
  144. then # set current charset to $ACM
  145.     error "Don't know (yet ?) how to determine current charset."
  146.     error "Please specify G0 or G1"
  147.     exit 1
  148. else
  149.     usage
  150. fi
  151.