Patch title: Release 94 bulk changes
Abstract:
File: /pliant/linux/kernel/device.pli
Key:
    Removed line
    Added line
module "/pliant/language/os.pli"
module "/pliant/admin/file.pli"

function os_mknod pathname mode dev -> err
  arg CStr pathname ; arg Int mode dev ; arg Int err
  kernel_function 14

constant os_S_IFCHR 2*8^4 # 0020000
constant os_S_IFBLK 6*8^4 # 0060000

public

constant kernel_character_device os_S_IFCHR
constant kernel_bloc_device os_S_IFBLK

function kernel_make_device device kind major minor write -> status
  arg Str device ; arg Int kind major minor ; arg CBool write ; arg Status status
  file_delete device
  # we create a temporary entry because if we have write access to the device, but no right to create it, we don't want to delete the existing entry before failing to create the new one
  file_tree_create device
  status := shunt (os_mknod file_os_name:device kind+6*8^2+4*8+4 major*2^8+minor)=0 success failure
  if write
    file_rights device undefined undefined 6*8^2+6*8+6 0
  file_delete device+".tmp"
  status := shunt (os_mknod (file_os_name device+".tmp") kind+6*8^2+4*8+4 major*2^8+minor)=0 success failure
  if status=success
    file_move device+".tmp" device
    if write
      file_rights device undefined undefined 6*8^2+6*8+6 0

function kernel_make_device device kind major minor -> status
  arg Str device ; arg Int kind major minor ; arg Status status
  status := kernel_make_device device kind major minor false

function kernel_make_device device -> status
  arg Str device ; arg Status status
  var Str name := device (device search_last "/" -1)+1 device:len

  if (name parse "hd" any:(var Str drive) (var Int part)) and drive:len=1 and drive>="a" and drive<="b" and part>=1 and part<64
    status := kernel_make_device device kernel_bloc_device 3 64*(drive:0:number-"a":number)+part
  eif (name parse "hd" any:(var Str drive) (var Int part)) and drive:len=1 and drive>="c" and drive<="d" and part>=1 and part<64
    status := kernel_make_device device kernel_bloc_device 22 64*(drive:0:number-"c":number)+part
  eif (name parse "hde" (var Int part)) and part>=1 and part<=8
    status := kernel_make_device device kernel_bloc_device 33 part
  eif (name parse "hd" any:(var Str drive)) and drive:len=1 and drive>="a" and drive<="b"
    status := kernel_make_device device kernel_bloc_device 3 64*(drive:0:number-"a":number)
  eif (name parse "hd" any:(var Str drive)) and drive:len=1 and drive>="c" and drive<="d"
    status := kernel_make_device device kernel_bloc_device 22 64*(drive:0:number-"c":number)
  eif name="hde"
    status := kernel_make_device device kernel_bloc_device 33 0
  eif (name parse "sd" any:(var Str drive) (var Int part)) and drive:len=1 and drive>="a" and drive<="p" and part>=1 and part<16
    status := kernel_make_device device kernel_bloc_device 8 16*(drive:0:number-"a":number)+part
  eif (name parse "sd" any:(var Str drive) (var Int part)) and drive:len=1 and drive>="q" and drive<="z" and part>=1 and part<16
    status := kernel_make_device device kernel_bloc_device 65 16*(drive:0:number-"q":number)+part
  eif (name parse "sd" any:(var Str drive)) and drive:len=1 and drive>="a" and drive<="p"
    status := kernel_make_device device kernel_bloc_device 8 16*(drive:0:number-"a":number)
  eif (name parse "sd" any:(var Str drive)) and drive:len=1 and drive>="q" and drive<="z"
    status := kernel_make_device device kernel_bloc_device 65 16*(drive:0:number-"q":number)
  eif (name parse "scd" (var Int part)) and part>=0 and part<256
    status := kernel_make_device device kernel_bloc_device 11 part
  eif (name parse "sg" (var Int part)) and part>=0 and part<16
    status := kernel_make_device device kernel_character_device 21 part
  eif (name parse "pg" (var Int part)) and part>=0 and part<4
    status := kernel_make_device device kernel_character_device 97 part
  eif (name parse "fd" (var Int part)) and part>=0 and part<2
    status := kernel_make_device device kernel_bloc_device 2 part
  eif (name parse "md" (var Int part)) and part>=0 and part<16
    status := kernel_make_device device kernel_bloc_device 9 part
  eif (name parse "loop" (var Int part)) and part>=0 and part<8
    status := kernel_make_device device kernel_bloc_device 7 part

  eif (name parse "tty" (var Int n)) and n>=0 and n<10
    status := kernel_make_device device kernel_character_device 4 n
  eif (name parse "tty" any:(var Str twin) ) and twin:len=2 and ((twin:0>="a" and twin:0<="e") or (twin:0>="p" and twin:0<="z")) and ((twin:1>="0" and twin:1<="9") or (twin:1>="a" and twin:1<="f"))
    status := kernel_make_device device kernel_character_device 3 (shunt (twin:0>="a" and twin:0<="e") 176+16*(twin:0:number-"a":number) 16*(twin:0:number-"p":number))+(shunt (twin:1>="0" and twin:1<="9") twin:1:number-"0":number 10+twin:1:number-"a":number)
  eif (name parse "ttyUSB" (var Int n)) and n>=0 and n<16
    status := kernel_make_device device kernel_character_device 188 n
  eif (name parse "pty" any:(var Str twin) ) and twin:len=2 and ((twin:0>="a" and twin:0<="e") or (twin:0>="p" and twin:0<="z")) and ((twin:1>="0" and twin:1<="9") or (twin:1>="a" and twin:1<="f"))
    status := kernel_make_device device kernel_character_device 2 (shunt (twin:0>="a" and twin:0<="e") 176+16*(twin:0:number-"a":number) 16*(twin:0:number-"p":number))+(shunt (twin:1>="0" and twin:1<="9") twin:1:number-"0":number 10+twin:1:number-"a":number)
  eif (name parse "vcs" (var Int n)) and n>=0 and n<64
    status := kernel_make_device device kernel_character_device 7 n
  eif name="tty"
    status := kernel_make_device device kernel_character_device 5 0
  eif name="console"
    status := kernel_make_device device kernel_character_device 5 1

  eif name="mem"
    status := kernel_make_device device kernel_character_device 1 1
    file_rights device 0 15 0 3*8+7
  eif name="null"
    status := kernel_make_device device kernel_character_device 1 3 true
  eif name="zero"
    status := kernel_make_device device kernel_character_device 1 5
  eif name="random"
    status := kernel_make_device device kernel_character_device 1 8
  eif name="rtc"
    status := kernel_make_device device kernel_character_device 10 135
  eif (name parse "ram" (var Int i))  and i>=0 and i<=16
    status := kernel_make_device device kernel_bloc_device 1 i
  eif name="raw1394"
    status := kernel_make_device device kernel_character_device 171 0
  eif name="agpgart"
    status := kernel_make_device device kernel_character_device 10 175
  eif (name parse "fb" (var Int n)) and n>=0 and n<32
    status := kernel_make_device device kernel_character_device 29 n

  eif name="psaux"
    status := kernel_make_device device kernel_character_device 10 1
  eif name="mice"
    status := kernel_make_device device kernel_character_device 13 63
  eif name="keyboard"
    status := kernel_make_device device kernel_character_device 10 150
  eif (name parse "lp" (var Int i))  and i>=0 and i<=2
    status := kernel_make_device device kernel_character_device 6 i
  eif (name parse "ttyS" (var Int n)) and n>=0 and n<64
    status := kernel_make_device device kernel_character_device 4 64+n
  eif (name parse "ircomm" (var Int n)) and n>=0 and n<16
    status := kernel_make_device device kernel_character_device 161 n
  eif (name parse "irlpt" (var Int n)) and n>=0 and n<16
    status := kernel_make_device device kernel_character_device 161 16+n


  eif name="dsp"
    status := kernel_make_device device kernel_character_device 14 3
  eif (name parse "dsp" (var Int i)) and i>=1 and i<4
    status := kernel_make_device device kernel_character_device 14 3+i*16
  eif name="mixer"
    status := kernel_make_device device kernel_character_device 14 0
  eif (name parse "mixer" (var Int i)) and i>=1 and i<4
    status := kernel_make_device device kernel_character_device 14 i*16

  eif name="ppp"
    status := kernel_make_device device kernel_character_device 108 0
  eif (name parse "ippp" (var Int part)) and part>=0 and part<64
    status := kernel_make_device device kernel_character_device 45 128+part
  eif name="isdninfo"
    status := kernel_make_device device kernel_character_device 45 255
  eif name="isdnctrl"
    status := kernel_make_device device kernel_character_device 45 64
  eif (name parse "isdnctrl" (var Int part)) and part>=0 and part<64
    status := kernel_make_device device kernel_character_device 45 64+part
  eif (name parse "rfcomm" (var Int part)) and part>=0 and part<32
    status := kernel_make_device device kernel_character_device 216 part

  else
    plugin device
      status := failure