home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / share / alsa-base / snddevices < prev   
Encoding:
Text File  |  2010-10-23  |  6.6 KB  |  276 lines

  1. #!/bin/sh
  2.  
  3. # 20050524 Thomas Hood: Cleaned up; added --dev-dir option
  4.  
  5. DEV_DIR="/dev"
  6. MAJOR=116
  7. OSSMAJOR=14
  8. DSP_MINOR=""
  9. MAX_CARDS=4
  10. OWNER=root.root
  11. PERM=666
  12. DIR_PERM=755
  13. WIPE_OLD=yes
  14.  
  15. if [ "`grep "^audio:" /etc/group`x" != x ]; then
  16.   OWNER=root.audio
  17. fi
  18.  
  19. echo_usage () {
  20.   echo "Usage: snddevices [-h|--help] [max] [--no-wipe] [--dev-dir=PATHNAME] [--owner=USER:GROUP]"
  21. }
  22.  
  23. report_error () {
  24.   echo "${0}: Error: $*" >&2
  25. }
  26.  
  27. while [ "$1" ] ; do
  28.   case "$1" in 
  29.     "-?"|-h|--help) echo_usage ; exit 0 ;;
  30.     max) DSP_MINOR=19 ;;
  31.     --no-wipe) WIPE_OLD="" ;;
  32.     --dev-dir) DEV_DIR="$2" ; shift ;;
  33.     --dev-dir=*) DEV_DIR="${1#--dev-dir=}" ;;
  34.     --owner) OWNER="$2" ; shift ;;
  35.     --owner=*) OWNER="${1#--owner=}" ;;
  36.     *) echo_usage >&2 ; exit 1 ;;
  37.   esac
  38.   shift
  39. done
  40.  
  41. if [ "$OWNER" = "root.audio" ] ; then
  42.   PERM=660
  43.   DIR_PERM=750
  44. fi
  45.  
  46. # Meant to be called from assert_*_args only
  47. report_args_error () {
  48.   # report_error "Incorrect call: ${FUNCNAME[2]}() takes $* arguments"
  49.   report_error "Incorrect call: needs $* arguments"
  50. }
  51.  
  52. assert_one_arg () {
  53.   { [ "$1" ] && [ -z "$2" ] ; } || { report_args_error "one" ; exit 99 ; }
  54. }
  55.  
  56. assert_two_args () {
  57.   { [ "$2" ] && [ -z "$3" ] ; } || { report_args_error "two" ; exit 99 ; }
  58. }
  59.  
  60. assert_three_args () {
  61.   { [ "$3" ] && [ -z "$4" ] ; } || { report_args_error "three" ; exit 99 ; }
  62. }
  63.  
  64. assert_three_or_four_args () {
  65.   { [ "$3" ] && [ -z "$5" ] ; } || { report_args_error "three or four" ; exit 99 ; }
  66. }
  67.  
  68. # $1 destination-relative pathname of source
  69. # $2 DEV_DIR-relative pathname of destination
  70. link_file () {
  71.   assert_two_args "$@"
  72.   ln -sf "$1" "$DEV_DIR/$2"
  73. }
  74.  
  75. # $1 DEV_DIR-relative pathname of source
  76. # $2 DEV_DIR-relative pathname of destination
  77. move_file () {
  78.   assert_two_args "$@"
  79.   mv -f "$DEV_DIR/$1" "$DEV_DIR/$2"
  80. }
  81.  
  82. # $1 DEV_DIR-relative shell glob pattern of files to delete
  83. del_file_pattern () {
  84.   assert_one_arg "$@"
  85.   eval rm -f "$DEV_DIR/$1"
  86. }
  87.  
  88. # $1 DEV_DIR-relative pathname to make
  89. make_dir () {
  90.   assert_one_arg "$@"
  91.   mkdir -p "$DEV_DIR/$1"
  92. }
  93.  
  94. # $1 DEV_DIR-relative pathname to delete
  95. del_dir () {
  96.   assert_one_arg "$@"
  97.   rmdir "$DEV_DIR/$1"
  98. }
  99.  
  100. # $1 DEV_DIR-relative pathname to test
  101. is_dir () {
  102.   assert_one_arg "$@"
  103.   [ -d "$DEV_DIR/$1" ]
  104. }
  105.  
  106. # $1 owner:group
  107. # $2 DEV_DIR-relative pathname whose owner will be changed
  108. change_owner () {
  109.   assert_two_args "$@"
  110.   chown "$1" "$DEV_DIR/$2"
  111. }
  112.  
  113. # $1 perms
  114. # $2 DEV_DIR-relative pathname whose perms will be changed
  115. change_perms () {
  116.   assert_two_args "$@"
  117.   chmod "$1" "$DEV_DIR/$2"
  118. }
  119.  
  120. # $1 DEV_DIR-relative pathname of node to make
  121. # $2 major
  122. # $3 minor
  123. make_char_node () {
  124.   assert_three_args "$@"
  125.   rm -f "$DEV_DIR/$1"
  126.   mknod "$DEV_DIR/$1" c "$2" "$3"
  127. }
  128.  
  129.  
  130. # $1 DEV_DIR-relative pathname of device to create
  131. # $2 minor number of device to create
  132. create_oss_dev () {
  133.   assert_two_args "$@"
  134.   del_file_pattern "$1"
  135.   echo -n "Creating $1..."
  136.   make_char_node "$1" "$OSSMAJOR" "$2"
  137.   change_owner "$OWNER" "$1"
  138.   change_perms "$PERM"  "$1"
  139.   echo "done."
  140. }
  141.  
  142. # $1 DEV_DIR-relative base pathname of devices to create
  143. # $2 minor number offset of devices to create
  144. create_oss_dev_range () {
  145.   assert_two_args "$@"
  146.   tmp=0
  147.   tmp1=0
  148.   del_file_pattern "$1"
  149.   del_file_pattern "${1}?"
  150.   echo -n "Creating $1?..."
  151.   while [ "$tmp1" -lt "$MAX_CARDS" ]; do
  152.     minor=`expr $2 + $tmp`
  153.     make_char_node "$1$tmp1" "$OSSMAJOR" "$minor"
  154.     change_owner "$OWNER" "$1$tmp1"
  155.     change_perms "$PERM"  "$1$tmp1"
  156.     tmp=`expr $tmp + 16`
  157.     tmp1=`expr $tmp1 + 1`
  158.   done
  159.   echo "done."
  160. }
  161.  
  162. # $1 DEV_DIR-relative pathname of device to create
  163. # $2 minor number of device to create
  164. create_single_dev () {
  165.   assert_two_args "$@"
  166.   del_file_pattern "$1"
  167.   echo -n "Creating $1..."
  168.   make_char_node "$1" "$MAJOR" "$2"
  169.   change_owner "$OWNER" "$1"
  170.   change_perms "$PERM"  "$1"
  171.   echo "done."
  172. }
  173.  
  174. # $1 DEV_DIR-relative base pathname of devices to create
  175. # $2 minor number offset of devices to create
  176. create_card_dev_range () {
  177.   assert_two_args "$@"
  178.   tmp=0
  179.   del_file_pattern "$1"
  180.   del_file_pattern "${1}?"
  181.   echo -n "Creating $1?..."
  182.   while [ "$tmp" -lt "$MAX_CARDS" ]; do
  183.     minor=`expr $tmp \* 32`
  184.     minor=`expr $2 + $minor`
  185.     make_char_node "${1}C${tmp}" "$MAJOR" "$minor"
  186.     change_owner "$OWNER" "${1}C${tmp}"
  187.     change_perms "$PERM"  "${1}C${tmp}"
  188.     tmp=`expr $tmp + 1`
  189.   done
  190.   echo "done."
  191. }
  192.  
  193. # $1 DEV_DIR-relative base pathname of devices to create
  194. # $2 minor number offset of devices to create
  195. # $3 number of devices to create
  196. # [$4 device name suffix]
  197. create_device_dev_range () {
  198.   assert_three_or_four_args "$@"
  199.   tmp=0
  200.   del_file_pattern "$1"
  201.   del_file_pattern "${1}?"
  202.   echo -n "Creating $1??$4..."
  203.   while [ "$tmp" -lt "$MAX_CARDS" ]; do
  204.     tmp1=0
  205.     while [ "$tmp1" -lt "$3" ]; do
  206.       minor=`expr $tmp \* 32`
  207.       minor=`expr $2 + $minor + $tmp1`
  208.       make_char_node "${1}C${tmp}D${tmp1}${4}" "$MAJOR" "$minor"
  209.       change_owner "$OWNER" "${1}C${tmp}D${tmp1}${4}"
  210.       change_perms "$PERM"  "${1}C${tmp}D${tmp1}${4}"
  211.       tmp1=`expr $tmp1 + 1`
  212.     done
  213.     tmp=`expr $tmp + 1`
  214.   done
  215.   echo "done."
  216. }
  217.  
  218. # OSS (Lite) compatible devices...
  219.  
  220. if test "$OSSMAJOR" -eq 14; then
  221.   create_oss_dev_range mixer            0
  222.   create_oss_dev       sequencer        1
  223.   create_oss_dev_range midi0            2    # /dev/midi is for tclmidi
  224.   create_oss_dev_range dsp              3
  225.   create_oss_dev_range audio            4
  226.   create_oss_dev       sndstat          6
  227.   create_oss_dev       music            8
  228.   create_oss_dev_range dmmidi           9
  229.   create_oss_dev_range dmfm             10
  230.   create_oss_dev_range amixer           11    # alternate mixer
  231.   create_oss_dev_range adsp             12    # alternate dsp
  232.   create_oss_dev_range amidi            13    # alternate midi
  233.   create_oss_dev_range admmidi          14    # alternate direct midi
  234.   # create symlinks
  235.   link_file mixer0 mixer
  236.   link_file midi00 midi        # /dev/midi0 is for tclmidi
  237.   link_file dsp0   dsp
  238.   link_file audio0 audio
  239.   link_file music  sequencer2
  240.   link_file adsp0  adsp
  241.   link_file amidi0 amidi
  242. fi
  243.  
  244. # Remove old devices
  245.  
  246. if [ "$WIPE_OLD" = yes ] ; then
  247.   move_file sndstat 1sndstat 
  248.   del_file_pattern 'snd*'
  249.   move_file 1sndstat sndstat
  250.  
  251.   if is_dir snd ; then
  252.     del_file_pattern 'snd/*'
  253.     del_dir snd
  254.   fi
  255. fi
  256.  
  257. # Create new ones
  258.  
  259. make_dir snd
  260. change_owner "$OWNER"    snd
  261. change_perms "$DIR_PERM" snd
  262. create_card_dev_range   snd/control     0
  263. create_single_dev       snd/seq         1
  264. create_single_dev       snd/timer       33
  265. create_device_dev_range snd/hw          4    4
  266. create_device_dev_range snd/midi        8    8
  267. create_device_dev_range snd/pcm         16    8    p
  268. create_device_dev_range snd/pcm         24    8    c
  269.  
  270. # Create loader devices
  271.  
  272. del_file_pattern 'aload*'
  273. create_card_dev_range   aload       0
  274. create_single_dev       aloadSEQ    1
  275.  
  276.