All pastes #130398 Raw Edit

Unnamed

public shellscript v1 · immutable
#130398 ·published 2006-08-14 00:30 UTC
rendered paste body
#!/bin/bash# 20050524 Thomas Hood: Cleaned up; added --dev-dir optionDEV_DIR="/dev"MAJOR=116OSSMAJOR=14DSP_MINOR=""MAX_CARDS=4OWNER=root.rootPERM=666DIR_PERM=755WIPE_OLD=yesif [ "`grep -w -E "^audio" /etc/group`x" != x ]; then  OWNER=root.audiofifunction echo_usage () {  echo "Usage: snddevices [-h|--help] [max] [--no-wipe] [--dev-dir=PATHNAME] [--owner=USER:GROUP]"}function report_error () {  echo "${0}: Error: $*" >&2}while [ "$1" ] ; do  case "$1" in    "-?"|-h|--help) echo_usage ; exit 0 ;;    max) DSP_MINOR=19 ;;    --no-wipe) WIPE_OLD="" ;;    --dev-dir) DEV_DIR="$2" ; shift ;;    --dev-dir=*) DEV_DIR="${1#--dev-dir=}" ;;    --owner) OWNER="$2" ; shift ;;    --owner=*) OWNER="${1#--owner=}" ;;    *) echo_usage >&2 ; exit 1 ;;  esac  shiftdoneif [ "$OWNER" = "root.audio" ] ; then  PERM=660  DIR_PERM=750fi# Meant to be called from assert_*_args onlyfunction report_args_error () {  report_error "Incorrect function call: ${FUNCNAME[2]}() takes $* arguments"}function assert_one_arg () {  { [ "$1" ] && [ -z "$2" ] ; } || { report_args_error "one" ; exit 99 ; }}function assert_two_args () {  { [ "$2" ] && [ -z "$3" ] ; } || { report_args_error "two" ; exit 99 ; }}function assert_three_args () {  { [ "$3" ] && [ -z "$4" ] ; } || { report_args_error "three" ; exit 99 ; }}function assert_three_or_four_args () {  { [ "$3" ] && [ -z "$5" ] ; } || { report_args_error "three or four" ; exit 99 ; }}# $1 destination-relative pathname of source# $2 DEV_DIR-relative pathname of destinationfunction link_file () {  assert_two_args "$@"  ln -svf "$1" "$DEV_DIR/$2"}# $1 DEV_DIR-relative pathname of source# $2 DEV_DIR-relative pathname of destinationfunction move_file () {  assert_two_args "$@"  mv -f "$DEV_DIR/$1" "$DEV_DIR/$2"}# $1 DEV_DIR-relative shell glob pattern of files to deletefunction del_file_pattern () {  assert_one_arg "$@"  eval rm -f "$DEV_DIR/$1"}# $1 DEV_DIR-relative pathname to makefunction make_dir () {  assert_one_arg "$@"  mkdir -p "$DEV_DIR/$1"}# $1 DEV_DIR-relative pathname to deletefunction del_dir () {  assert_one_arg "$@"  rmdir "$DEV_DIR/$1"}# $1 DEV_DIR-relative pathname to testfunction is_dir () {  assert_one_arg "$@"  [ -d "$DEV_DIR/$1" ]}# $1 owner:group# $2 DEV_DIR-relative pathname whose owner will be changedfunction change_owner () {  assert_two_args "$@"  chown "$1" "$DEV_DIR/$2"}# $1 perms# $2 DEV_DIR-relative pathname whose perms will be changedfunction change_perms () {  assert_two_args "$@"  chmod "$1" "$DEV_DIR/$2"}# $1 DEV_DIR-relative pathname of node to make# $2 major# $3 minorfunction make_char_node () {  assert_three_args "$@"  rm -f "$DEV_DIR/$1"  mknod "$DEV_DIR/$1" c "$2" "$3"}# $1 DEV_DIR-relative pathname of device to create# $2 minor number of device to createfunction create_oss_dev () {  assert_two_args "$@"  del_file_pattern "$1"  echo -n "Creating $1..."  make_char_node "$1" "$OSSMAJOR" "$2"  change_owner "$OWNER" "$1"  change_perms "$PERM"  "$1"  echo "done."}# $1 DEV_DIR-relative base pathname of devices to create# $2 minor number offset of devices to createfunction create_oss_dev_range () {  assert_two_args "$@"  tmp=0  tmp1=0  del_file_pattern "$1"  del_file_pattern "${1}?"  echo -n "Creating $1?..."  while [ "$tmp1" -lt "$MAX_CARDS" ]; do    minor=$[ $2 + $tmp ]    make_char_node "$1$tmp1" "$OSSMAJOR" "$minor"    change_owner "$OWNER" "$1$tmp1"    change_perms "$PERM"  "$1$tmp1"    tmp=$[ $tmp + 16 ]    tmp1=$[ $tmp1 + 1 ]  done  echo "done."}# $1 DEV_DIR-relative pathname of device to create# $2 minor number of device to createfunction create_single_dev () {  assert_two_args "$@"  del_file_pattern "$1"  echo -n "Creating $1..."  make_char_node "$1" "$MAJOR" "$2"  change_owner "$OWNER" "$1"  change_perms "$PERM"  "$1"  echo "done."}# $1 DEV_DIR-relative base pathname of devices to create# $2 minor number offset of devices to createfunction create_card_dev_range () {  assert_two_args "$@"  tmp=0  del_file_pattern "$1"  del_file_pattern "${1}?"  echo -n "Creating $1?..."  while [ "$tmp" -lt "$MAX_CARDS" ]; do    minor=$[ $tmp * 32 ]    minor=$[ $2 + $minor ]    make_char_node "${1}C${tmp}" "$MAJOR" "$minor"    change_owner "$OWNER" "${1}C${tmp}"    change_perms "$PERM"  "${1}C${tmp}"    tmp=$[ $tmp + 1 ]  done  echo "done."}# $1 DEV_DIR-relative base pathname of devices to create# $2 minor number offset of devices to create# $3 number of devices to create# [$4 device name suffix]function create_device_dev_range () {  assert_three_or_four_args "$@"  tmp=0  del_file_pattern "$1"  del_file_pattern "${1}?"  echo -n "Creating $1??$4..."  while [ "$tmp" -lt "$MAX_CARDS" ]; do    tmp1=0    while [ "$tmp1" -lt "$3" ]; do      minor=$[ $tmp * 32 ]      minor=$[ $2 + $minor + $tmp1 ]      make_char_node "${1}C${tmp}D${tmp1}${4}" "$MAJOR" "$minor"      change_owner "$OWNER" "${1}C${tmp}D${tmp1}${4}"      change_perms "$PERM"  "${1}C${tmp}D${tmp1}${4}"      tmp1=$[ $tmp1 + 1 ]    done    tmp=$[ $tmp + 1 ]  done  echo "done."}# OSS (Lite) compatible devices...if test "$OSSMAJOR" -eq 14; then  create_oss_dev_range mixer            0  create_oss_dev       sequencer        1  create_oss_dev_range midi0            2       # /dev/midi is for tclmidi  create_oss_dev_range dsp              3  create_oss_dev_range audio            4  create_oss_dev       sndstat          6  create_oss_dev       music            8  create_oss_dev_range dmmidi           9  create_oss_dev_range dmfm             10  create_oss_dev_range amixer           11      # alternate mixer  create_oss_dev_range adsp             12      # alternate dsp  create_oss_dev_range amidi            13      # alternate midi  create_oss_dev_range admmidi          14      # alternate direct midi  # create symlinks  link_file mixer0 mixer  link_file midi00 midi         # /dev/midi0 is for tclmidi  link_file dsp0   dsp  link_file audio0 audio  link_file music  sequencer2  link_file adsp0  adsp  link_file amidi0 amidifi# Remove old devicesif [ "$WIPE_OLD" = yes ] ; then  move_file sndstat 1sndstat  del_file_pattern 'snd*'  move_file 1sndstat sndstat  if is_dir snd ; then    del_file_pattern 'snd/*'    del_dir snd  fifi# Create new onesmake_dir sndchange_owner "$OWNER"    sndchange_perms "$DIR_PERM" sndcreate_card_dev_range   snd/control     0create_single_dev       snd/seq         1create_single_dev       snd/timer       33create_device_dev_range snd/hw          4       4create_device_dev_range snd/midi        8       8create_device_dev_range snd/pcm         16      8       pcreate_device_dev_range snd/pcm         24      8       c# Create loader devicesdel_file_pattern 'aload*'create_card_dev_range   aload       0create_single_dev       aloadSEQ    1