Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / adm / bin / mkpty
1 #!/bin/bash
2 # usage:  mkpty -n number [-d dir] [ -m mastermajor ]
3
4 # Algorithm:
5 #      For master side, the files have a ptym/pty prefix.
6 #      For slave side, the files have a pty/tty prefix.
7 #      The suffix naming convention is:
8 #          First  400: pty[p-za-ce-o]<hex_digit>
9 #          Next  2500: pty[p-za-ce-o]<digit><digit>
10 #          Last 25000: pty[p-za-ce-o]<digit><digit><digit>
11
12 export OS=$(/bin/uname -r | /usr/bin/cut -f2 -d.)
13
14 if [ "$OS" = "10" ]; then
15   mknod=/sbin/mknod
16 else
17   mknod=/etc/mknod
18 fi
19
20 function makepty {
21   [[ -c $1 ]] && return 0
22   $mknod $1 c $2 $3
23   chmod 666 $1 && chown bin:bin $1
24 }
25
26 typeset -i major=16 slave
27 typeset -i npty=0 minor=0 j k
28 typeset -Z2 n2
29 typeset -Z3 n3
30 typeset -l prefix[25] hex[16]
31
32 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
33 set -A hex 0 1 2 3 4 5 6 7 8 9 a b c d e f
34
35 dir=/dev
36
37 while getopts :n:Dd:m: c; do
38   case $c in
39     n) npty=$OPTARG;;
40     d) dir=$OPTARG;;
41     m) major=$OPTARG;;
42     D) set -x;;
43     :) print -u2 $OPTARG requires a value; exit 1;;
44     *) print -u2 Invalid argument $OPTARG; exit 1;;
45   esac
46 done
47
48 shift OPTIND-1;
49
50 if [[ $# -ne 0 ]]; then
51   print -u2 "Usage: $0 -n number [-d dir] [-m mastermajor]"
52   exit 1;
53 fi
54
55 slave=major+1
56 cd ${dir}
57
58 mkdir -p pty ptym
59
60 j=0;k=0
61 while (( j < 25 && npty>0 )); do
62   name=${prefix[j]}${hex[k]}
63   makepty ptym/pty${name} ${major} ${minor}
64   makepty pty/tty${name} ${slave} ${minor}
65   if (( j<3 )); then
66     rm -f pty${name} && ln ptym/pty${name} pty${name}
67     rm -f tty${name} && ln pty/tty${name} tty${name}
68   fi
69   npty=npty-1
70   (( (k=k+1) >= 16 )) && k=0 && j=j+1
71   minor=minor+1
72 done
73
74 j=0;k=0
75 while (( j < 25 && npty>0 )); do
76   n2=$k
77   name=${prefix[j]}${n2}
78   makepty ptym/pty${name} ${major} ${minor}
79   makepty pty/tty${name} ${slave} ${minor}
80   npty=npty-1
81   (( (k=k+1) >= 100 )) && k=0 && j=j+1
82   minor=minor+1
83 done
84
85 j=0;k=0
86 while (( j < 25 && npty>0 )); do
87   n3=$k
88   name=${prefix[j]}${n3}
89   makepty ptym/pty${name} ${major} ${minor}
90   makepty pty/tty${name} ${slave} ${minor}
91   npty=npty-1
92   (( (k=k+1) >= 1000 )) && k=0 && j=j+1
93   minor=minor+1
94 done
95
96 if hp9000s700; then
97 :
98 elif hp9000s800; then
99   mknod ptym/clone c ${major} 0xffffff
100   chmod 666 ptym/clone
101   chown bin:bin ptym/clone
102 fi