#!/bin/bash # usage: mkpty -n number [-d dir] [ -m mastermajor ] # Algorithm: # For master side, the files have a ptym/pty prefix. # For slave side, the files have a pty/tty prefix. # The suffix naming convention is: # First 400: pty[p-za-ce-o] # Next 2500: pty[p-za-ce-o] # Last 25000: pty[p-za-ce-o] export OS=$(/bin/uname -r | /usr/bin/cut -f2 -d.) if [ "$OS" = "10" ]; then mknod=/sbin/mknod else mknod=/etc/mknod fi function makepty { [[ -c $1 ]] && return 0 $mknod $1 c $2 $3 chmod 666 $1 && chown bin:bin $1 } typeset -i major=16 slave typeset -i npty=0 minor=0 j k typeset -Z2 n2 typeset -Z3 n3 typeset -l prefix[25] hex[16] set -A prefix p q r s t u v w x y z a b c e f g h i j k l m n o set -A hex 0 1 2 3 4 5 6 7 8 9 a b c d e f dir=/dev while getopts :n:Dd:m: c; do case $c in n) npty=$OPTARG;; d) dir=$OPTARG;; m) major=$OPTARG;; D) set -x;; :) print -u2 $OPTARG requires a value; exit 1;; *) print -u2 Invalid argument $OPTARG; exit 1;; esac done shift OPTIND-1; if [[ $# -ne 0 ]]; then print -u2 "Usage: $0 -n number [-d dir] [-m mastermajor]" exit 1; fi slave=major+1 cd ${dir} mkdir -p pty ptym j=0;k=0 while (( j < 25 && npty>0 )); do name=${prefix[j]}${hex[k]} makepty ptym/pty${name} ${major} ${minor} makepty pty/tty${name} ${slave} ${minor} if (( j<3 )); then rm -f pty${name} && ln ptym/pty${name} pty${name} rm -f tty${name} && ln pty/tty${name} tty${name} fi npty=npty-1 (( (k=k+1) >= 16 )) && k=0 && j=j+1 minor=minor+1 done j=0;k=0 while (( j < 25 && npty>0 )); do n2=$k name=${prefix[j]}${n2} makepty ptym/pty${name} ${major} ${minor} makepty pty/tty${name} ${slave} ${minor} npty=npty-1 (( (k=k+1) >= 100 )) && k=0 && j=j+1 minor=minor+1 done j=0;k=0 while (( j < 25 && npty>0 )); do n3=$k name=${prefix[j]}${n3} makepty ptym/pty${name} ${major} ${minor} makepty pty/tty${name} ${slave} ${minor} npty=npty-1 (( (k=k+1) >= 1000 )) && k=0 && j=j+1 minor=minor+1 done if hp9000s700; then : elif hp9000s800; then mknod ptym/clone c ${major} 0xffffff chmod 666 ptym/clone chown bin:bin ptym/clone fi