home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / etc / etc.tahoe / MAKEDEV < prev    next >
Encoding:
Text File  |  1991-04-08  |  7.1 KB  |  277 lines

  1. #!/bin/sh -
  2. #
  3. # Copyright (c) 1991 The Regents of the University of California.
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms, with or without
  7. # modification, are permitted provided that the following conditions
  8. # are met:
  9. # 1. Redistributions of source code must retain the above copyright
  10. #    notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. #    notice, this list of conditions and the following disclaimer in the
  13. #    documentation and/or other materials provided with the distribution.
  14. # 3. All advertising materials mentioning features or use of this software
  15. #    must display the following acknowledgement:
  16. #    This product includes software developed by the University of
  17. #    California, Berkeley and its contributors.
  18. # 4. Neither the name of the University nor the names of its contributors
  19. #    may be used to endorse or promote products derived from this software
  20. #    without specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32. # SUCH DAMAGE.
  33. #
  34. #    @(#)MAKEDEV    5.12 (Berkeley) 4/8/91
  35. #
  36.  
  37. # Device "make" file.  Valid arguments:
  38. #    std    standard devices
  39. #    local    configuration specific devices
  40. # Tapes:
  41. #    cy*    Cipher
  42. # Disks:
  43. #    dk*    VDDC or SMDE disk on Versabus
  44. #    hd*    VDDC or SMDE disk on VME
  45. # Terminal multiplexors:
  46. #    vx*    VIOC
  47. #    mp*    MPCC
  48. # Pseudo terminals:
  49. #    pty*    set of 32 master and slave pseudo terminals
  50. # Printers:
  51. # Call units:
  52. # Special purpose devices:
  53. #    enp*    CMC Ethernet interface for loading RAM
  54. #    dr*    IKON DR-11W
  55. #    ik*    IKON DR-11W w/ E&S PS300
  56. #
  57. HOME=/; export HOME
  58. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  59. export PATH
  60.  
  61. umask 77
  62. for i
  63. do
  64. case $i in
  65.  
  66. std)
  67.     mknod CP    c 0 0
  68.     mknod console    c 0 1
  69.     mknod remote    c 0 2
  70.     mknod drum     c 8 0    ; chmod 640 drum ; chgrp kmem drum
  71.     mknod mem    c 3 0    ; chmod 640 mem ; chgrp kmem mem
  72.     mknod kmem    c 3 1    ; chmod 640 kmem ; chgrp kmem kmem
  73.     mknod null    c 3 2    ; chmod 666 null
  74.     mknod vmem     c 3 3    ; chmod 640 vmem ; chgrp kmem vmem
  75.     mknod tty    c 2 0    ; chmod 666 tty
  76.     mknod klog    c 15 0    ; chmod 400 klog
  77.     mknod stdin    c 21 0    ; chmod 666 stdin
  78.     mknod stdout    c 21 1    ; chmod 666 stdout
  79.     mknod stderr    c 21 2    ; chmod 666 stderr
  80.     mkdir fd > /dev/null 2>&1
  81.     (cd fd && eval `echo "" | awk ' BEGIN { \
  82.         for (i = 0; i < 64; i++) \
  83.             printf("mknod %d c 21 %d;", i, i)}'`)
  84.     chown -R bin.bin fd
  85.     chmod 555 fd
  86.     chmod 666 fd/*
  87.     ;;
  88.  
  89. cy*)
  90.     umask 0 ; unit=`expr $i : '..\(.*\)'`
  91.     case $i in
  92.     cy*) blk=3; chr=7 ;;
  93.     esac
  94.     case $unit in
  95.     0|1|2|3|4|5|6|7)
  96.         four=`expr $unit + 4`
  97.         eight=`expr $unit + 8`
  98.         twelve=`expr $unit + 12`
  99. #        twenty=`expr $unit + 20`
  100.         mknod mt$unit        b $blk $unit
  101.         mknod mt$four        b $blk $four
  102.         mknod mt$eight        b $blk $eight
  103.         mknod mt$twelve        b $blk $twelve
  104.         ln mt$four nmt$unit        ;: sanity
  105.         ln mt$twelve nmt$eight        ;: ditto
  106.         mknod rmt$unit        c $chr $unit
  107.         mknod rmt$four        c $chr $four
  108.         mknod rmt$eight        c $chr $eight
  109.         mknod rmt$twelve    c $chr $twelve
  110.         ln rmt$four nrmt$unit        ;: sanity
  111.         ln rmt$twelve nrmt$eight    ;: ditto
  112. #        if [ $i = ut ] 
  113. #        then
  114. #            mknod mt$twenty    b $blk $twenty
  115. #            mknod rmt$twenty    c $chr $twenty
  116. #        fi
  117.         umask 77
  118.         ;;
  119.     *)
  120.         echo bad unit for tape in: $1
  121.         ;;
  122.     esac
  123.     ;;
  124.  
  125. hd*|dk*)
  126.     unit=`expr $i : '..\(.*\)'`
  127.     case $i in
  128.     dk*) name=dk; blk=1; chr=5;;
  129.     hd*) name=hd; blk=2; chr=6;;
  130.     esac
  131.     case $unit in
  132.     0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h)
  133.         case $unit in
  134.         a) u=10 ;;
  135.         b) u=11 ;;
  136.         c) u=12 ;;
  137.         d) u=13 ;;
  138.         e) u=14 ;;
  139.         f) u=15 ;;
  140.         g) u=16 ;;
  141.         h) u=17 ;;
  142.         *) u=$unit ;;
  143.         esac
  144.  
  145.         mknod ${name}${unit}a    b $blk `expr $u '*' 8 + 0`
  146.         mknod ${name}${unit}b    b $blk `expr $u '*' 8 + 1`
  147.         mknod ${name}${unit}c    b $blk `expr $u '*' 8 + 2`
  148.         mknod ${name}${unit}d    b $blk `expr $u '*' 8 + 3`
  149.         mknod ${name}${unit}e    b $blk `expr $u '*' 8 + 4`
  150.         mknod ${name}${unit}f    b $blk `expr $u '*' 8 + 5`
  151.         mknod ${name}${unit}g    b $blk `expr $u '*' 8 + 6`
  152.         mknod ${name}${unit}h    b $blk `expr $u '*' 8 + 7`
  153.         mknod r${name}${unit}a    c $chr `expr $u '*' 8 + 0`
  154.         mknod r${name}${unit}b    c $chr `expr $u '*' 8 + 1`
  155.         mknod r${name}${unit}c    c $chr `expr $u '*' 8 + 2`
  156.         mknod r${name}${unit}d    c $chr `expr $u '*' 8 + 3`
  157.         mknod r${name}${unit}e    c $chr `expr $u '*' 8 + 4`
  158.         mknod r${name}${unit}f    c $chr `expr $u '*' 8 + 5`
  159.         mknod r${name}${unit}g    c $chr `expr $u '*' 8 + 6`
  160.         mknod r${name}${unit}h    c $chr `expr $u '*' 8 + 7`
  161.  
  162.         chmod 640 ${name}${unit}[a-h]
  163.         chgrp operator ${name}${unit}[a-h]
  164.         chmod 640 r${name}${unit}[a-h]
  165.         chgrp operator r${name}${unit}[a-h]
  166.         ;;
  167.     *)
  168.         echo bad unit for disk in: $i
  169.         ;;
  170.     esac
  171.     ;;
  172.  
  173. vx*|mp*)
  174.     case $i in
  175.     vx*)    name=vx; major=1; count=16;
  176.         unit=`expr $i : "$name\(.*\)"`
  177.         case $unit in
  178.         0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) ch=$unit ;;
  179.         *) echo bad unit for $name in: $i ;;
  180.         esac
  181.         ;;
  182.     mp*)    name=mp; major=12; count=16;
  183.         unit=`expr $i : "$name\(.*\)"`
  184.         case $unit in
  185.         0) ch=A ;; 1) ch=B ;; 2) ch=C ;; 3) ch=D ;;
  186.         4) ch=E ;; 5) ch=F ;; 6) ch=G ;; 7) ch=H ;;
  187.         8) ch=I ;; 9) ch=J ;; a) ch=K ;; b) ch=L ;;
  188.         c) ch=M ;; d) ch=N ;; e) ch=O ;; f) ch=P ;;
  189.         *) echo bad unit for $name in: $i ;;
  190.         esac
  191.         ;;
  192.     esac
  193.  
  194.     case $unit in
  195.     a) un=10 ;; b) un=11 ;; c) un=12 ;; d) un=13 ;;
  196.     e) un=14 ;; f) un=15 ;; *) un=$unit ;;
  197.     esac
  198.  
  199.     umask 044
  200.     eval `echo $ch $major $count $un |
  201.       awk ' { ch = $1; u = $3 * $4; m = $2; cnt = $3; nd = $4 } END {
  202.         if (m == 12)
  203.             printf("mknod mpcc%d c 11 %d; /bin/chmod 0600 mpcc%d; ",nd,u,nd);
  204.         for (i = 0; i < cnt; i++)
  205.           if (i < 10)
  206.         printf("mknod tty%s%x c %d %d; ",ch,i,m,u+i);
  207.           else
  208.         printf("mknod tty%s%c c %d %d; ",ch,87+i,m,u+i); }'`
  209.     umask 77
  210.     ;;
  211.  
  212. pty*)
  213.     class=`expr $i : 'pty\(.*\)'`
  214.     case $class in
  215.     0) offset=0 name=p;;
  216.     1) offset=16 name=q;;
  217.     2) offset=32 name=r;;
  218.     3) offset=48 name=s;;
  219.     4) offset=64 name=s;;
  220.     5) offset=80 name=s;;
  221.     *) echo bad unit for pty in: $i;;
  222.     esac
  223.     case $class in
  224.     0|1|2|3|4|5)
  225.         umask 0
  226.         eval `echo $offset $name | awk ' { b=$1; n=$2 } END {
  227.             for (i = 0; i < 16; i++)
  228.                 printf("mknod tty%s%x c 9 %d; \
  229.                     mknod pty%s%x c 10 %d; ", \
  230.                     n, i, b+i, n, i, b+i); }'`
  231.         umask 77
  232.         ;;
  233.     esac
  234.     ;;
  235.  
  236. enp*)
  237.     unit=`expr $i : 'enp\(.*\)'`
  238.     case $unit in
  239.     [0-6])
  240.         mknod enp${unit}ram c 16 $unit; chmod 644 enp${unit}ram
  241.         ;;
  242.     *)
  243.         echo bad unit for enp in: $i
  244.         ;;
  245.     esac
  246.     ;;
  247.  
  248. dr*)
  249.     unit=`expr $i : 'dr\(.*\)'`
  250.     case $unit in
  251.     [0-6])
  252.         mknod dr${unit} c 18 $unit; chmod 644 dr${unit}
  253.         ;;
  254.     *)
  255.         echo bad unit for dr in: $i
  256.         ;;
  257.     esac
  258.     ;;
  259.  
  260. ik*)
  261.     unit=`expr $i : 'ik\(.*\)'`
  262.     case $unit in
  263.     [0-9])
  264.         mknod ik${unit} c 20 $unit; chmod 644 ik${unit}
  265.         ;;
  266.     *)
  267.         echo bad unit for ik in: $i
  268.         ;;
  269.     esac
  270.     ;;
  271.  
  272. local)
  273.     sh MAKEDEV.local
  274.     ;;
  275. esac
  276. done
  277.